From d54cf824a3c230541577cf12800fd4577bd37891 Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Tue, 20 Aug 2024 15:17:55 -0400 Subject: [PATCH] feat(prs): add filtering and table --- notebook/dashboard.ipynb | 2870 ++++---------------------------------- requirements.txt | 2 + 2 files changed, 265 insertions(+), 2607 deletions(-) diff --git a/notebook/dashboard.ipynb b/notebook/dashboard.ipynb index 0c891940..bd8901e7 100644 --- a/notebook/dashboard.ipynb +++ b/notebook/dashboard.ipynb @@ -1,8 +1,9 @@ { "cells": [ { - "metadata": {}, "cell_type": "markdown", + "id": "4aed1755a10d75d7", + "metadata": {}, "source": [ "
\n", "

LizardByte Developer Dashboard

\n", @@ -65,18 +66,14 @@ "
\n", "\n", "## Repository Data" - ], - "id": "4aed1755a10d75d7" + ] }, { - "metadata": { - "collapsed": true, - "jupyter": { - "outputs_hidden": true, - "source_hidden": true - } - }, "cell_type": "code", + "execution_count": null, + "id": "initial_id", + "metadata": {}, + "outputs": [], "source": [ "# Initialize the environment\n", "\n", @@ -87,6 +84,8 @@ "# lib imports\n", "from dotenv import load_dotenv\n", "from github import Github, UnknownObjectException\n", + "from IPython.display import display\n", + "from ipywidgets import widgets, interactive\n", "import pandas as pd\n", "import plotly.express as px\n", "import plotly.graph_objects as go\n", @@ -110,12 +109,15 @@ "\n", "uno_base_url = 'https://app.lizardbyte.dev/uno'\n", "\n", + "# constants\n", + "text_template = '%{text}'\n", + "\n", "# all readthedocs projects\n", "# readthedocs data\n", "readthedocs_data_url = f'{uno_base_url}/readthedocs/projects.json'\n", "readthedocs_response = requests.get(readthedocs_data_url)\n", "if not readthedocs_response.ok:\n", - " raise Exception(\"Failed to fetch data from uno\")\n", + " raise LookupError(\"Failed to fetch data from uno\")\n", "readthedocs_data = readthedocs_response.json()\n", "\n", "# Process data\n", @@ -193,25 +195,22 @@ "print(f'Total Open PRs: {df[\"prs\"].apply(len).sum()}')\n", "print(f'Open issues in active repositories: {df_repos[\"issues\"].apply(len).sum()}')\n", "print(f'Open PRs in active repositories: {df_repos[\"prs\"].apply(len).sum()}')" - ], - "id": "initial_id", - "outputs": [], - "execution_count": null + ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "### Star Gazers", - "id": "616d87e4b0c3dea5" + "id": "616d87e4b0c3dea5", + "metadata": {}, + "source": [ + "### Star Gazers" + ] }, { "cell_type": "code", + "execution_count": null, "id": "337aca37b216cc0d", - "metadata": { - "jupyter": { - "source_hidden": true - } - }, + "metadata": {}, + "outputs": [], "source": [ "# Stars\n", "df_stars = df_repos.sort_values(\n", @@ -227,7 +226,7 @@ " text='stars',\n", ")\n", "fig.update_traces(\n", - " texttemplate='%{text}',\n", + " texttemplate=text_template,\n", " textposition='inside',\n", ")\n", "fig.update_layout(\n", @@ -235,13 +234,14 @@ " yaxis_showticklabels=False,\n", ")\n", "fig.show()" - ], - "outputs": [], - "execution_count": null + ] }, { - "metadata": {}, "cell_type": "code", + "execution_count": null, + "id": "a08398efe666a399", + "metadata": {}, + "outputs": [], "source": [ "# Star History\n", "stargazer_data = []\n", @@ -273,25 +273,22 @@ ")\n", "\n", "fig.show()" - ], - "id": "a08398efe666a399", - "outputs": [], - "execution_count": null + ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "### Forks", - "id": "d46c30581ed069fd" + "id": "d46c30581ed069fd", + "metadata": {}, + "source": [ + "### Forks" + ] }, { "cell_type": "code", + "execution_count": null, "id": "7c6ffc3f9b56adc6", - "metadata": { - "jupyter": { - "source_hidden": true - } - }, + "metadata": {}, + "outputs": [], "source": [ "# Forks\n", "df_forks = df_repos.sort_values(\n", @@ -307,7 +304,7 @@ " text='forks',\n", ")\n", "fig.update_traces(\n", - " texttemplate='%{text}',\n", + " texttemplate=text_template,\n", " textposition='inside',\n", ")\n", "fig.update_layout(\n", @@ -315,24 +312,22 @@ " yaxis_showticklabels=False,\n", ")\n", "fig.show()" - ], - "outputs": [], - "execution_count": null + ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "### Open Issues", - "id": "89ad81f3285c93d5" + "id": "89ad81f3285c93d5", + "metadata": {}, + "source": [ + "### Open Issues" + ] }, { "cell_type": "code", + "execution_count": null, "id": "ce4c9d640154b774", - "metadata": { - "jupyter": { - "source_hidden": true - } - }, + "metadata": {}, + "outputs": [], "source": [ "# Open Issues\n", "df_issues = df_repos.copy()\n", @@ -347,7 +342,7 @@ " text='issue_count',\n", ")\n", "fig.update_traces(\n", - " texttemplate='%{text}',\n", + " texttemplate=text_template,\n", " textposition='inside',\n", ")\n", "fig.update_layout(\n", @@ -355,86 +350,216 @@ " yaxis_showticklabels=False,\n", ")\n", "fig.show()" - ], - "outputs": [], - "execution_count": null + ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "### Open PRs", - "id": "63b0eb1841d850be" + "id": "63b0eb1841d850be", + "metadata": {}, + "source": [ + "### Open PRs" + ] }, { "cell_type": "code", + "execution_count": null, "id": "4f473fe7a839b01c", - "metadata": { - "jupyter": { - "source_hidden": true - } - }, + "metadata": {}, + "outputs": [], "source": [ "# Open PRs\n", "pr_data = []\n", "for repo in df_repos.to_dict('records'):\n", - " draft_prs = 0\n", - " non_draft_prs = 0\n", - " dependabot_prs = 0\n", - "\n", " for pr in repo['prs']:\n", " pr_details = repo['_repo'].get_pull(pr.number)\n", - " if pr_details.user.login == 'dependabot[bot]' or pr_details.user.login == 'renovate[bot]':\n", - " dependabot_prs += 1\n", - " elif pr_details.draft:\n", - " draft_prs += 1\n", - " else:\n", - " non_draft_prs += 1\n", - "\n", - " pr_data.append({\n", - " \"repo\": repo['repo'],\n", - " \"Draft\": draft_prs,\n", - " \"Ready for review\": non_draft_prs,\n", - " \"Dependency\": dependabot_prs,\n", - " })\n", + " pr_data.append({\n", + " \"repo\": repo['repo'],\n", + " \"number\": pr.number,\n", + " \"title\": pr_details.title,\n", + " \"author\": pr_details.user.login,\n", + " \"assignees\": [assignee.login for assignee in pr_details.assignees],\n", + " \"labels\": [label.name for label in pr_details.labels],\n", + " \"ready\": not pr_details.draft,\n", + " \"created_at\": pr_details.created_at if hasattr(pr_details, 'created_at') else None,\n", + " \"updated_at\": pr_details.updated_at if hasattr(pr_details, 'updated_at') else None,\n", + " })\n", "\n", "df_prs = pd.DataFrame(pr_data)\n", - "df_prs['total_prs'] = df_prs[['Draft', 'Ready for review', 'Dependency']].sum(axis=1)\n", "\n", - "# Sort by total PRs in descending order\n", - "df_prs = df_prs.sort_values(by='total_prs', ascending=False)\n", "\n", - "# Visualize data using a stacked bar chart\n", - "fig = px.bar(\n", - " df_prs,\n", - " x='repo',\n", - " y=['Draft', 'Ready for review', 'Dependency'],\n", - " title='Open Pull Requests',\n", - " labels={'value': 'Count', 'variable': 'PR Type'},\n", - " barmode='stack'\n", + "# Helper functions for filtering\n", + "def filter_by_column(df, column, value, exclude=False):\n", + " if value == 'All':\n", + " return df\n", + " if exclude:\n", + " return df[df[column] != value]\n", + " return df[df[column] == value]\n", + "\n", + "def filter_by_list_column(df, column, value, exclude=False):\n", + " if value == 'All':\n", + " return df\n", + " if exclude:\n", + " return df[~df[column].apply(lambda x: value in x)]\n", + " return df[df[column].apply(lambda x: value in x)]\n", + "\n", + "\n", + "# Filter and sort functions\n", + "def filter_prs(\n", + " df,\n", + " repo='All',\n", + " author='All',\n", + " assignee='All',\n", + " label='All',\n", + " ready='All',\n", + " exclude_repo=False,\n", + " exclude_author=False,\n", + " exclude_assignee=False,\n", + " exclude_label=False,\n", + "):\n", + " df = filter_by_column(df, 'repo', repo, exclude_repo)\n", + " df = filter_by_column(df, 'author', author, exclude_author)\n", + " df = filter_by_list_column(df, 'assignees', assignee, exclude_assignee)\n", + " df = filter_by_list_column(df, 'labels', label, exclude_label)\n", + " if ready != 'All':\n", + " df = df[df['ready'] == (ready == 'Ready for Review')]\n", + " return df\n", + "\n", + "# Create dropdown filters\n", + "repo_filter = widgets.Dropdown(\n", + " options=['All'] + df_prs['repo'].unique().tolist(),\n", + " value='All',\n", + " description='Repo:',\n", ")\n", - "fig.update_layout(\n", - " yaxis_title='Count of PRs',\n", - " xaxis_title='Repository',\n", + "\n", + "author_filter = widgets.Dropdown(\n", + " options=['All'] + df_prs['author'].unique().tolist(),\n", + " value='All',\n", + " description='Author:',\n", ")\n", - "fig.show()" - ], - "outputs": [], - "execution_count": null + "\n", + "assignee_filter = widgets.Dropdown(\n", + " options=['All'] + list(set(assignee for assignees in df_prs['assignees'] for assignee in assignees)),\n", + " value='All',\n", + " description='Assignee:',\n", + ")\n", + "\n", + "label_filter = widgets.Dropdown(\n", + " options=['All'] + list(set(label for labels in df_prs['labels'] for label in labels)),\n", + " value='All',\n", + " description='Label:',\n", + ")\n", + "\n", + "ready_filter = widgets.Dropdown(\n", + " options=['All', 'Draft', 'Ready for Review'],\n", + " value='All',\n", + " description='Ready:',\n", + ")\n", + "\n", + "# Create exclusion checkboxes\n", + "exclude_repo_checkbox = widgets.Checkbox(\n", + " value=False,\n", + " description='Exclude selected repo',\n", + ")\n", + "\n", + "exclude_author_checkbox = widgets.Checkbox(\n", + " value=False,\n", + " description='Exclude selected author',\n", + ")\n", + "\n", + "exclude_assignee_checkbox = widgets.Checkbox(\n", + " value=False,\n", + " description='Exclude selected assignee',\n", + ")\n", + "\n", + "exclude_label_checkbox = widgets.Checkbox(\n", + " value=False,\n", + " description='Exclude selected label',\n", + ")\n", + "\n", + "# Text widget to display total number of PRs\n", + "total_prs_text = widgets.HTML(value=\"\")\n", + "\n", + "def update_visualizations(\n", + " repo,\n", + " author,\n", + " assignee,\n", + " label,\n", + " ready,\n", + " exclude_repo,\n", + " exclude_author,\n", + " exclude_assignee,\n", + " exclude_label,\n", + "):\n", + " filtered_df = filter_prs(\n", + " df_prs,\n", + " repo,\n", + " author,\n", + " assignee,\n", + " label,\n", + " ready,\n", + " exclude_repo,\n", + " exclude_author,\n", + " exclude_assignee,\n", + " exclude_label,\n", + " )\n", + "\n", + " # Update Table\n", + " fig_table = go.Figure(data=[go.Table(\n", + " header=dict(values=list(filtered_df.columns),\n", + " align='left'),\n", + " cells=dict(values=[filtered_df[col] for col in filtered_df.columns],\n", + " align='left'))\n", + " ])\n", + " fig_table.update_layout(height=800, title='Filtered PRs')\n", + "\n", + " # Update Bar Chart\n", + " df_bar = filtered_df.groupby(['repo', 'ready']).size().reset_index(name='count')\n", + " fig_bar = px.bar(\n", + " df_bar,\n", + " x='repo',\n", + " y='count',\n", + " color='ready',\n", + " title='PRs by Repo and Ready Status',\n", + " labels={'count': 'Number of PRs', 'repo': 'Repository', 'ready': 'Ready Status'},\n", + " barmode='stack',\n", + " text='count'\n", + " )\n", + "\n", + " # Update total PRs text\n", + " total_prs_text.value = f\"Filtered PRs: {len(filtered_df)}\"\n", + "\n", + " fig_table.show()\n", + " fig_bar.show()\n", + "\n", + "interactive_visualizations = interactive(\n", + " update_visualizations,\n", + " repo=repo_filter,\n", + " author=author_filter,\n", + " assignee=assignee_filter,\n", + " label=label_filter,\n", + " ready=ready_filter,\n", + " exclude_repo=exclude_repo_checkbox,\n", + " exclude_author=exclude_author_checkbox,\n", + " exclude_assignee=exclude_assignee_checkbox,\n", + " exclude_label=exclude_label_checkbox,\n", + ")\n", + "display(total_prs_text, interactive_visualizations)" + ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "### License Distribution", - "id": "3c067ce1b06d52da" + "id": "3c067ce1b06d52da", + "metadata": {}, + "source": [ + "### License Distribution" + ] }, { "cell_type": "code", + "execution_count": null, "id": "2bd8913a09eb4802", - "metadata": { - "jupyter": { - "source_hidden": true - } - }, + "metadata": {}, + "outputs": [], "source": [ "# License distribution\n", "license_counts = df_repos.groupby(['license', 'repo']).size().reset_index(name='count')\n", @@ -448,24 +573,22 @@ " hover_data={'repo': True, 'count': False},\n", ")\n", "fig_treemap.show()" - ], - "outputs": [], - "execution_count": null + ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "### Coverage", - "id": "1e7ac0186201244b" + "id": "1e7ac0186201244b", + "metadata": {}, + "source": [ + "### Coverage" + ] }, { "cell_type": "code", + "execution_count": null, "id": "c8dced4bcfff438", - "metadata": { - "jupyter": { - "source_hidden": true - } - }, + "metadata": {}, + "outputs": [], "source": [ "# Coverage\n", "df_coverage = df_repos.sort_values(\n", @@ -485,19 +608,22 @@ " xaxis_title='Repository',\n", ")\n", "fig_scatter.show()" - ], - "outputs": [], - "execution_count": null + ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "### Programming Languages", - "id": "d9116f5c8e154dae" + "id": "d9116f5c8e154dae", + "metadata": {}, + "source": [ + "### Programming Languages" + ] }, { - "metadata": {}, "cell_type": "code", + "execution_count": null, + "id": "20e09d93eda0478a", + "metadata": {}, + "outputs": [], "source": [ "# Programming Languages by Bytes of Code\n", "language_data = []\n", @@ -573,25 +699,22 @@ " )\n", "\n", " fig.show()" - ], - "id": "20e09d93eda0478a", - "outputs": [], - "execution_count": null + ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "### Documentation", - "id": "a520a320cd823874" + "id": "a520a320cd823874", + "metadata": {}, + "source": [ + "### Documentation" + ] }, { - "metadata": { - "ExecuteTime": { - "end_time": "2024-08-20T02:58:06.219404Z", - "start_time": "2024-08-20T02:58:06.066344Z" - } - }, "cell_type": "code", + "execution_count": null, + "id": "ec43a8fd7f9d49bb", + "metadata": {}, + "outputs": [], "source": [ "# Docs\n", "\n", @@ -661,2473 +784,7 @@ " )\n", "\n", " fig.show()" - ], - "id": "ec43a8fd7f9d49bb", - "outputs": [ - { - "data": { - "application/vnd.plotly.v1+json": { - "data": [ - { - "branchvalues": "total", - "domain": { - "x": [ - 0.0, - 1.0 - ], - "y": [ - 0.0, - 1.0 - ] - }, - "hovertemplate": "labels=%{label}
repo_count=%{value}
parent=%{parent}
id=%{id}", - "ids": [ - "True/.github", - "True/GSMS", - "True/LizardByte.github.io", - "True/RetroArcher", - "True/Sunshine", - "True/Themerr-jellyfin", - "True/Themerr-kodi", - "True/Themerr-plex", - "True/ThemerrDB", - "True/Virtual-Gamepad-Emulation-Bus", - "True/Virtual-Gamepad-Emulation-Client", - "True/Virtual-Gamepad-Emulation-dotnet", - "True/awesome-sunshine", - "False/build-deps", - "True/create-release-action", - "True/dashboard", - "False/db", - "True/doxyconfig", - "True/homebrew-homebrew", - "True/homebrew-release-action", - "True/jellyfin-plugin-repo", - "True/libdisplaydevice", - "True/nvapi-open-source-sdk", - "True/pacman-repo", - "True/setup-python-action", - "True/setup-release-action", - "True/shared-web", - "True/support-bot", - "True/support-bot-commands", - "True/template-base", - "True/tray", - "False/uno", - "True/update-changelog-action", - "False", - "True" - ], - "labels": [ - ".github", - "GSMS", - "LizardByte.github.io", - "RetroArcher", - "Sunshine", - "Themerr-jellyfin", - "Themerr-kodi", - "Themerr-plex", - "ThemerrDB", - "Virtual-Gamepad-Emulation-Bus", - "Virtual-Gamepad-Emulation-Client", - "Virtual-Gamepad-Emulation-dotnet", - "awesome-sunshine", - "build-deps", - "create-release-action", - "dashboard", - "db", - "doxyconfig", - "homebrew-homebrew", - "homebrew-release-action", - "jellyfin-plugin-repo", - "libdisplaydevice", - "nvapi-open-source-sdk", - "pacman-repo", - "setup-python-action", - "setup-release-action", - "shared-web", - "support-bot", - "support-bot-commands", - "template-base", - "tray", - "uno", - "update-changelog-action", - "False", - "True" - ], - "name": "", - "parents": [ - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "False", - "True", - "True", - "False", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "False", - "True", - "", - "" - ], - "values": [ - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 3, - 30 - ], - "type": "treemap" - }, - { - "branchvalues": "total", - "domain": { - "x": [ - 0.0, - 1.0 - ], - "y": [ - 0.0, - 1.0 - ] - }, - "hovertemplate": "labels=%{label}
repo_count=%{value}
parent=%{parent}
id=%{id}", - "ids": [ - "True/.github", - "True/GSMS", - "True/LizardByte.github.io", - "True/RetroArcher", - "True/Sunshine", - "True/Themerr-jellyfin", - "True/Themerr-kodi", - "True/Themerr-plex", - "True/ThemerrDB", - "True/Virtual-Gamepad-Emulation-Bus", - "True/Virtual-Gamepad-Emulation-Client", - "True/Virtual-Gamepad-Emulation-dotnet", - "True/awesome-sunshine", - "False/build-deps", - "True/create-release-action", - "True/dashboard", - "False/db", - "True/doxyconfig", - "True/homebrew-homebrew", - "True/homebrew-release-action", - "True/jellyfin-plugin-repo", - "True/libdisplaydevice", - "True/nvapi-open-source-sdk", - "True/pacman-repo", - "True/setup-python-action", - "True/setup-release-action", - "True/shared-web", - "True/support-bot", - "True/support-bot-commands", - "True/template-base", - "True/tray", - "False/uno", - "True/update-changelog-action", - "False", - "True" - ], - "labels": [ - ".github", - "GSMS", - "LizardByte.github.io", - "RetroArcher", - "Sunshine", - "Themerr-jellyfin", - "Themerr-kodi", - "Themerr-plex", - "ThemerrDB", - "Virtual-Gamepad-Emulation-Bus", - "Virtual-Gamepad-Emulation-Client", - "Virtual-Gamepad-Emulation-dotnet", - "awesome-sunshine", - "build-deps", - "create-release-action", - "dashboard", - "db", - "doxyconfig", - "homebrew-homebrew", - "homebrew-release-action", - "jellyfin-plugin-repo", - "libdisplaydevice", - "nvapi-open-source-sdk", - "pacman-repo", - "setup-python-action", - "setup-release-action", - "shared-web", - "support-bot", - "support-bot-commands", - "template-base", - "tray", - "uno", - "update-changelog-action", - "False", - "True" - ], - "name": "", - "parents": [ - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "False", - "True", - "True", - "False", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "True", - "False", - "True", - "", - "" - ], - "values": [ - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 3, - 30 - ], - "type": "sunburst", - "visible": false - } - ], - "layout": { - "template": { - "data": { - "histogram2dcontour": [ - { - "type": "histogram2dcontour", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ] - } - ], - "choropleth": [ - { - "type": "choropleth", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - ], - "histogram2d": [ - { - "type": "histogram2d", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ] - } - ], - "heatmap": [ - { - "type": "heatmap", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ] - } - ], - "heatmapgl": [ - { - "type": "heatmapgl", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ] - } - ], - "contourcarpet": [ - { - "type": "contourcarpet", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - ], - "contour": [ - { - "type": "contour", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ] - } - ], - "surface": [ - { - "type": "surface", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ] - } - ], - "mesh3d": [ - { - "type": "mesh3d", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - ], - "scatter": [ - { - "marker": { - "line": { - "color": "#283442" - } - }, - "type": "scatter" - } - ], - "parcoords": [ - { - "type": "parcoords", - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "scatterpolargl": [ - { - "type": "scatterpolargl", - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "bar": [ - { - "error_x": { - "color": "#f2f5fa" - }, - "error_y": { - "color": "#f2f5fa" - }, - "marker": { - "line": { - "color": "rgb(17,17,17)", - "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "bar" - } - ], - "scattergeo": [ - { - "type": "scattergeo", - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "scatterpolar": [ - { - "type": "scatterpolar", - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "histogram": [ - { - "marker": { - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "histogram" - } - ], - "scattergl": [ - { - "marker": { - "line": { - "color": "#283442" - } - }, - "type": "scattergl" - } - ], - "scatter3d": [ - { - "type": "scatter3d", - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "scattermapbox": [ - { - "type": "scattermapbox", - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "scatterternary": [ - { - "type": "scatterternary", - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "scattercarpet": [ - { - "type": "scattercarpet", - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "carpet": [ - { - "aaxis": { - "endlinecolor": "#A2B1C6", - "gridcolor": "#506784", - "linecolor": "#506784", - "minorgridcolor": "#506784", - "startlinecolor": "#A2B1C6" - }, - "baxis": { - "endlinecolor": "#A2B1C6", - "gridcolor": "#506784", - "linecolor": "#506784", - "minorgridcolor": "#506784", - "startlinecolor": "#A2B1C6" - }, - "type": "carpet" - } - ], - "table": [ - { - "cells": { - "fill": { - "color": "#506784" - }, - "line": { - "color": "rgb(17,17,17)" - } - }, - "header": { - "fill": { - "color": "#2a3f5f" - }, - "line": { - "color": "rgb(17,17,17)" - } - }, - "type": "table" - } - ], - "barpolar": [ - { - "marker": { - "line": { - "color": "rgb(17,17,17)", - "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "barpolar" - } - ], - "pie": [ - { - "automargin": true, - "type": "pie" - } - ] - }, - "layout": { - "autotypenumbers": "strict", - "colorway": [ - "#636efa", - "#EF553B", - "#00cc96", - "#ab63fa", - "#FFA15A", - "#19d3f3", - "#FF6692", - "#B6E880", - "#FF97FF", - "#FECB52" - ], - "font": { - "color": "#f2f5fa" - }, - "hovermode": "closest", - "hoverlabel": { - "align": "left" - }, - "paper_bgcolor": "rgb(17,17,17)", - "plot_bgcolor": "rgb(17,17,17)", - "polar": { - "bgcolor": "rgb(17,17,17)", - "angularaxis": { - "gridcolor": "#506784", - "linecolor": "#506784", - "ticks": "" - }, - "radialaxis": { - "gridcolor": "#506784", - "linecolor": "#506784", - "ticks": "" - } - }, - "ternary": { - "bgcolor": "rgb(17,17,17)", - "aaxis": { - "gridcolor": "#506784", - "linecolor": "#506784", - "ticks": "" - }, - "baxis": { - "gridcolor": "#506784", - "linecolor": "#506784", - "ticks": "" - }, - "caxis": { - "gridcolor": "#506784", - "linecolor": "#506784", - "ticks": "" - } - }, - "coloraxis": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "colorscale": { - "sequential": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "sequentialminus": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "diverging": [ - [ - 0, - "#8e0152" - ], - [ - 0.1, - "#c51b7d" - ], - [ - 0.2, - "#de77ae" - ], - [ - 0.3, - "#f1b6da" - ], - [ - 0.4, - "#fde0ef" - ], - [ - 0.5, - "#f7f7f7" - ], - [ - 0.6, - "#e6f5d0" - ], - [ - 0.7, - "#b8e186" - ], - [ - 0.8, - "#7fbc41" - ], - [ - 0.9, - "#4d9221" - ], - [ - 1, - "#276419" - ] - ] - }, - "xaxis": { - "gridcolor": "#283442", - "linecolor": "#506784", - "ticks": "", - "title": { - "standoff": 15 - }, - "zerolinecolor": "#283442", - "automargin": true, - "zerolinewidth": 2 - }, - "yaxis": { - "gridcolor": "#283442", - "linecolor": "#506784", - "ticks": "", - "title": { - "standoff": 15 - }, - "zerolinecolor": "#283442", - "automargin": true, - "zerolinewidth": 2 - }, - "scene": { - "xaxis": { - "backgroundcolor": "rgb(17,17,17)", - "gridcolor": "#506784", - "linecolor": "#506784", - "showbackground": true, - "ticks": "", - "zerolinecolor": "#C8D4E3", - "gridwidth": 2 - }, - "yaxis": { - "backgroundcolor": "rgb(17,17,17)", - "gridcolor": "#506784", - "linecolor": "#506784", - "showbackground": true, - "ticks": "", - "zerolinecolor": "#C8D4E3", - "gridwidth": 2 - }, - "zaxis": { - "backgroundcolor": "rgb(17,17,17)", - "gridcolor": "#506784", - "linecolor": "#506784", - "showbackground": true, - "ticks": "", - "zerolinecolor": "#C8D4E3", - "gridwidth": 2 - } - }, - "shapedefaults": { - "line": { - "color": "#f2f5fa" - } - }, - "annotationdefaults": { - "arrowcolor": "#f2f5fa", - "arrowhead": 0, - "arrowwidth": 1 - }, - "geo": { - "bgcolor": "rgb(17,17,17)", - "landcolor": "rgb(17,17,17)", - "subunitcolor": "#506784", - "showland": true, - "showlakes": true, - "lakecolor": "rgb(17,17,17)" - }, - "title": { - "x": 0.05 - }, - "updatemenudefaults": { - "bgcolor": "#506784", - "borderwidth": 0 - }, - "sliderdefaults": { - "bgcolor": "#C8D4E3", - "borderwidth": 1, - "bordercolor": "rgb(17,17,17)", - "tickwidth": 0 - }, - "mapbox": { - "style": "dark" - } - } - }, - "title": { - "text": "Has README file" - }, - "updatemenus": [ - { - "buttons": [ - { - "args": [ - { - "visible": [ - true, - false - ] - } - ], - "label": "Treemap", - "method": "update" - }, - { - "args": [ - { - "visible": [ - false, - true - ] - } - ], - "label": "Sunburst", - "method": "update" - } - ], - "direction": "down", - "showactive": true - } - ] - }, - "config": { - "plotlyServerURL": "https://plot.ly" - } - }, - "text/html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.plotly.v1+json": { - "data": [ - { - "branchvalues": "total", - "domain": { - "x": [ - 0.0, - 1.0 - ], - "y": [ - 0.0, - 1.0 - ] - }, - "hovertemplate": "labels=%{label}
repo_count=%{value}
parent=%{parent}
id=%{id}", - "ids": [ - "True/.github", - "False/GSMS", - "False/LizardByte.github.io", - "True/RetroArcher", - "True/Sunshine", - "True/Themerr-jellyfin", - "True/Themerr-kodi", - "True/Themerr-plex", - "False/ThemerrDB", - "False/Virtual-Gamepad-Emulation-Bus", - "False/Virtual-Gamepad-Emulation-Client", - "False/Virtual-Gamepad-Emulation-dotnet", - "False/awesome-sunshine", - "False/build-deps", - "False/create-release-action", - "False/dashboard", - "False/db", - "True/doxyconfig", - "False/homebrew-homebrew", - "False/homebrew-release-action", - "False/jellyfin-plugin-repo", - "True/libdisplaydevice", - "False/nvapi-open-source-sdk", - "False/pacman-repo", - "False/setup-python-action", - "False/setup-release-action", - "False/shared-web", - "False/support-bot", - "False/support-bot-commands", - "False/template-base", - "True/tray", - "False/uno", - "False/update-changelog-action", - "False", - "True" - ], - "labels": [ - ".github", - "GSMS", - "LizardByte.github.io", - "RetroArcher", - "Sunshine", - "Themerr-jellyfin", - "Themerr-kodi", - "Themerr-plex", - "ThemerrDB", - "Virtual-Gamepad-Emulation-Bus", - "Virtual-Gamepad-Emulation-Client", - "Virtual-Gamepad-Emulation-dotnet", - "awesome-sunshine", - "build-deps", - "create-release-action", - "dashboard", - "db", - "doxyconfig", - "homebrew-homebrew", - "homebrew-release-action", - "jellyfin-plugin-repo", - "libdisplaydevice", - "nvapi-open-source-sdk", - "pacman-repo", - "setup-python-action", - "setup-release-action", - "shared-web", - "support-bot", - "support-bot-commands", - "template-base", - "tray", - "uno", - "update-changelog-action", - "False", - "True" - ], - "name": "", - "parents": [ - "True", - "False", - "False", - "True", - "True", - "True", - "True", - "True", - "False", - "False", - "False", - "False", - "False", - "False", - "False", - "False", - "False", - "True", - "False", - "False", - "False", - "True", - "False", - "False", - "False", - "False", - "False", - "False", - "False", - "False", - "True", - "False", - "False", - "", - "" - ], - "values": [ - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 24, - 9 - ], - "type": "treemap" - }, - { - "branchvalues": "total", - "domain": { - "x": [ - 0.0, - 1.0 - ], - "y": [ - 0.0, - 1.0 - ] - }, - "hovertemplate": "labels=%{label}
repo_count=%{value}
parent=%{parent}
id=%{id}", - "ids": [ - "True/.github", - "False/GSMS", - "False/LizardByte.github.io", - "True/RetroArcher", - "True/Sunshine", - "True/Themerr-jellyfin", - "True/Themerr-kodi", - "True/Themerr-plex", - "False/ThemerrDB", - "False/Virtual-Gamepad-Emulation-Bus", - "False/Virtual-Gamepad-Emulation-Client", - "False/Virtual-Gamepad-Emulation-dotnet", - "False/awesome-sunshine", - "False/build-deps", - "False/create-release-action", - "False/dashboard", - "False/db", - "True/doxyconfig", - "False/homebrew-homebrew", - "False/homebrew-release-action", - "False/jellyfin-plugin-repo", - "True/libdisplaydevice", - "False/nvapi-open-source-sdk", - "False/pacman-repo", - "False/setup-python-action", - "False/setup-release-action", - "False/shared-web", - "False/support-bot", - "False/support-bot-commands", - "False/template-base", - "True/tray", - "False/uno", - "False/update-changelog-action", - "False", - "True" - ], - "labels": [ - ".github", - "GSMS", - "LizardByte.github.io", - "RetroArcher", - "Sunshine", - "Themerr-jellyfin", - "Themerr-kodi", - "Themerr-plex", - "ThemerrDB", - "Virtual-Gamepad-Emulation-Bus", - "Virtual-Gamepad-Emulation-Client", - "Virtual-Gamepad-Emulation-dotnet", - "awesome-sunshine", - "build-deps", - "create-release-action", - "dashboard", - "db", - "doxyconfig", - "homebrew-homebrew", - "homebrew-release-action", - "jellyfin-plugin-repo", - "libdisplaydevice", - "nvapi-open-source-sdk", - "pacman-repo", - "setup-python-action", - "setup-release-action", - "shared-web", - "support-bot", - "support-bot-commands", - "template-base", - "tray", - "uno", - "update-changelog-action", - "False", - "True" - ], - "name": "", - "parents": [ - "True", - "False", - "False", - "True", - "True", - "True", - "True", - "True", - "False", - "False", - "False", - "False", - "False", - "False", - "False", - "False", - "False", - "True", - "False", - "False", - "False", - "True", - "False", - "False", - "False", - "False", - "False", - "False", - "False", - "False", - "True", - "False", - "False", - "", - "" - ], - "values": [ - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 24, - 9 - ], - "type": "sunburst", - "visible": false - } - ], - "layout": { - "template": { - "data": { - "histogram2dcontour": [ - { - "type": "histogram2dcontour", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ] - } - ], - "choropleth": [ - { - "type": "choropleth", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - ], - "histogram2d": [ - { - "type": "histogram2d", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ] - } - ], - "heatmap": [ - { - "type": "heatmap", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ] - } - ], - "heatmapgl": [ - { - "type": "heatmapgl", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ] - } - ], - "contourcarpet": [ - { - "type": "contourcarpet", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - ], - "contour": [ - { - "type": "contour", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ] - } - ], - "surface": [ - { - "type": "surface", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ] - } - ], - "mesh3d": [ - { - "type": "mesh3d", - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - ], - "scatter": [ - { - "marker": { - "line": { - "color": "#283442" - } - }, - "type": "scatter" - } - ], - "parcoords": [ - { - "type": "parcoords", - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "scatterpolargl": [ - { - "type": "scatterpolargl", - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "bar": [ - { - "error_x": { - "color": "#f2f5fa" - }, - "error_y": { - "color": "#f2f5fa" - }, - "marker": { - "line": { - "color": "rgb(17,17,17)", - "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "bar" - } - ], - "scattergeo": [ - { - "type": "scattergeo", - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "scatterpolar": [ - { - "type": "scatterpolar", - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "histogram": [ - { - "marker": { - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "histogram" - } - ], - "scattergl": [ - { - "marker": { - "line": { - "color": "#283442" - } - }, - "type": "scattergl" - } - ], - "scatter3d": [ - { - "type": "scatter3d", - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "scattermapbox": [ - { - "type": "scattermapbox", - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "scatterternary": [ - { - "type": "scatterternary", - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "scattercarpet": [ - { - "type": "scattercarpet", - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - } - } - ], - "carpet": [ - { - "aaxis": { - "endlinecolor": "#A2B1C6", - "gridcolor": "#506784", - "linecolor": "#506784", - "minorgridcolor": "#506784", - "startlinecolor": "#A2B1C6" - }, - "baxis": { - "endlinecolor": "#A2B1C6", - "gridcolor": "#506784", - "linecolor": "#506784", - "minorgridcolor": "#506784", - "startlinecolor": "#A2B1C6" - }, - "type": "carpet" - } - ], - "table": [ - { - "cells": { - "fill": { - "color": "#506784" - }, - "line": { - "color": "rgb(17,17,17)" - } - }, - "header": { - "fill": { - "color": "#2a3f5f" - }, - "line": { - "color": "rgb(17,17,17)" - } - }, - "type": "table" - } - ], - "barpolar": [ - { - "marker": { - "line": { - "color": "rgb(17,17,17)", - "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "barpolar" - } - ], - "pie": [ - { - "automargin": true, - "type": "pie" - } - ] - }, - "layout": { - "autotypenumbers": "strict", - "colorway": [ - "#636efa", - "#EF553B", - "#00cc96", - "#ab63fa", - "#FFA15A", - "#19d3f3", - "#FF6692", - "#B6E880", - "#FF97FF", - "#FECB52" - ], - "font": { - "color": "#f2f5fa" - }, - "hovermode": "closest", - "hoverlabel": { - "align": "left" - }, - "paper_bgcolor": "rgb(17,17,17)", - "plot_bgcolor": "rgb(17,17,17)", - "polar": { - "bgcolor": "rgb(17,17,17)", - "angularaxis": { - "gridcolor": "#506784", - "linecolor": "#506784", - "ticks": "" - }, - "radialaxis": { - "gridcolor": "#506784", - "linecolor": "#506784", - "ticks": "" - } - }, - "ternary": { - "bgcolor": "rgb(17,17,17)", - "aaxis": { - "gridcolor": "#506784", - "linecolor": "#506784", - "ticks": "" - }, - "baxis": { - "gridcolor": "#506784", - "linecolor": "#506784", - "ticks": "" - }, - "caxis": { - "gridcolor": "#506784", - "linecolor": "#506784", - "ticks": "" - } - }, - "coloraxis": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "colorscale": { - "sequential": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "sequentialminus": [ - [ - 0.0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1.0, - "#f0f921" - ] - ], - "diverging": [ - [ - 0, - "#8e0152" - ], - [ - 0.1, - "#c51b7d" - ], - [ - 0.2, - "#de77ae" - ], - [ - 0.3, - "#f1b6da" - ], - [ - 0.4, - "#fde0ef" - ], - [ - 0.5, - "#f7f7f7" - ], - [ - 0.6, - "#e6f5d0" - ], - [ - 0.7, - "#b8e186" - ], - [ - 0.8, - "#7fbc41" - ], - [ - 0.9, - "#4d9221" - ], - [ - 1, - "#276419" - ] - ] - }, - "xaxis": { - "gridcolor": "#283442", - "linecolor": "#506784", - "ticks": "", - "title": { - "standoff": 15 - }, - "zerolinecolor": "#283442", - "automargin": true, - "zerolinewidth": 2 - }, - "yaxis": { - "gridcolor": "#283442", - "linecolor": "#506784", - "ticks": "", - "title": { - "standoff": 15 - }, - "zerolinecolor": "#283442", - "automargin": true, - "zerolinewidth": 2 - }, - "scene": { - "xaxis": { - "backgroundcolor": "rgb(17,17,17)", - "gridcolor": "#506784", - "linecolor": "#506784", - "showbackground": true, - "ticks": "", - "zerolinecolor": "#C8D4E3", - "gridwidth": 2 - }, - "yaxis": { - "backgroundcolor": "rgb(17,17,17)", - "gridcolor": "#506784", - "linecolor": "#506784", - "showbackground": true, - "ticks": "", - "zerolinecolor": "#C8D4E3", - "gridwidth": 2 - }, - "zaxis": { - "backgroundcolor": "rgb(17,17,17)", - "gridcolor": "#506784", - "linecolor": "#506784", - "showbackground": true, - "ticks": "", - "zerolinecolor": "#C8D4E3", - "gridwidth": 2 - } - }, - "shapedefaults": { - "line": { - "color": "#f2f5fa" - } - }, - "annotationdefaults": { - "arrowcolor": "#f2f5fa", - "arrowhead": 0, - "arrowwidth": 1 - }, - "geo": { - "bgcolor": "rgb(17,17,17)", - "landcolor": "rgb(17,17,17)", - "subunitcolor": "#506784", - "showland": true, - "showlakes": true, - "lakecolor": "rgb(17,17,17)" - }, - "title": { - "x": 0.05 - }, - "updatemenudefaults": { - "bgcolor": "#506784", - "borderwidth": 0 - }, - "sliderdefaults": { - "bgcolor": "#C8D4E3", - "borderwidth": 1, - "bordercolor": "rgb(17,17,17)", - "tickwidth": 0 - }, - "mapbox": { - "style": "dark" - } - } - }, - "title": { - "text": "Uses ReadTheDocs" - }, - "updatemenus": [ - { - "buttons": [ - { - "args": [ - { - "visible": [ - true, - false - ] - } - ], - "label": "Treemap", - "method": "update" - }, - { - "args": [ - { - "visible": [ - false, - true - ] - } - ], - "label": "Sunburst", - "method": "update" - } - ], - "direction": "down", - "showactive": true - } - ] - }, - "config": { - "plotlyServerURL": "https://plot.ly" - } - }, - "text/html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "execution_count": 188 + ] } ], "metadata": { @@ -3145,8 +802,7 @@ "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.12.0" + "pygments_lexer": "ipython3" } }, "nbformat": 4, diff --git a/requirements.txt b/requirements.txt index 744dbbca..7fdee19d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,5 @@ +ipython==8.26.0 +ipywidgets==8.1.3 notebook==7.2.1 pandas==2.2.2 plotly==5.23.0