moderne-visualizations-misc 0.68.0__py3-none-any.whl → 0.69.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,167 +1,179 @@
1
1
  {
2
- "cells": [
3
- {
4
- "cell_type": "code",
5
- "execution_count": null,
6
- "metadata": {
7
- "tags": [
8
- "parameters"
9
- ]
10
- },
11
- "outputs": [],
12
- "source": [
13
- "repository_filter: list[str] = []\n",
14
- "count_threshold = \"0\""
15
- ]
16
- },
17
- {
18
- "cell_type": "code",
19
- "execution_count": null,
20
- "metadata": {},
21
- "outputs": [],
22
- "source": [
23
- "from code_data_science import data_table as dt\n",
24
- "import warnings\n",
25
- "\n",
26
- "warnings.simplefilter(\"ignore\")\n",
27
- "\n",
28
- "df = dt.read_csv(\"../samples/composite_recipe_results_sankey.csv\")\n",
29
- "\n",
30
- "df[\"repositoryWithBranch\"] = df[\"repositoryPath\"] + \"/\" + df[\"repositoryBranch\"]\n",
31
- "# Filter the data frame to only include rows where repositoryWithBranch contain\n",
32
- "# a term in the repository_filter (case insensitive)\n",
33
- "if len(repository_filter) > 0:\n",
34
- " df = df[\n",
35
- " df[\"repositoryWithBranch\"].str.contains(\"|\".join(repository_filter), case=False)\n",
36
- " ]"
37
- ]
38
- },
39
- {
40
- "cell_type": "code",
41
- "execution_count": null,
42
- "metadata": {},
43
- "outputs": [],
44
- "source": [
45
- "df = df[[\"parentRecipe\", \"recipe\"]].assign(count=lambda r: 1)\n",
46
- "recipe_counts = (\n",
47
- " df[[\"parentRecipe\", \"recipe\", \"count\"]]\n",
48
- " .groupby(by=[\"parentRecipe\", \"recipe\"])[\"count\"]\n",
49
- " .count()\n",
50
- " .sort_values(ascending=False)\n",
51
- " .reset_index(name=\"count\")\n",
52
- ")\n",
53
- "recipe_counts[\"parentRecipe\"] = recipe_counts[\"parentRecipe\"].transform(\n",
54
- " lambda s: s.split(\".\")[-1]\n",
55
- ")\n",
56
- "recipe_counts[\"recipe\"] = recipe_counts[\"recipe\"].transform(lambda s: s.split(\".\")[-1])\n",
57
- "\n",
58
- "# sort recipe_counts by count\n",
59
- "recipe_counts = recipe_counts.sort_values(by=[\"count\"], ascending=False)\n",
60
- "\n",
61
- "count_threshold_int = int(count_threshold)\n",
62
- "\n",
63
- "if count_threshold_int > 0:\n",
64
- " recipe_counts = recipe_counts[recipe_counts[\"count\"] > count_threshold_int]"
65
- ]
66
- },
67
- {
68
- "cell_type": "code",
69
- "execution_count": null,
70
- "metadata": {},
71
- "outputs": [],
72
- "source": [
73
- "import plotly.graph_objects as go\n",
74
- "\n",
75
- "# Extract all unique nodes (parent and child recipes)\n",
76
- "all_nodes = list(set(recipe_counts[\"parentRecipe\"]).union(set(recipe_counts[\"recipe\"])))\n",
77
- "\n",
78
- "# Create node indices mapping for preparing for plotly\n",
79
- "node_indices = {node: i for i, node in enumerate(all_nodes)}\n",
80
- "\n",
81
- "# iterates over each row in recipe_counts and find the index of the 'parentRecipe' in node_indices and adds it to the source list.\n",
82
- "source = [node_indices[row[\"parentRecipe\"]] for _, row in recipe_counts.iterrows()]\n",
83
- "\n",
84
- "# iterates over each row in recipe_counts and find the index of the 'recipe' in node_indices and adds it to the target list.\n",
85
- "target = [node_indices[row[\"recipe\"]] for _, row in recipe_counts.iterrows()]\n",
86
- "\n",
87
- "# convert the 'count' column to a list\n",
88
- "value = list(recipe_counts[\"count\"])\n",
89
- "\n",
90
- "# Format labels with node names and counts\n",
91
- "\n",
92
- "\n",
93
- "def getCount(node):\n",
94
- " left = recipe_counts[recipe_counts[\"recipe\"] == node][\"count\"].sum()\n",
95
- " if left == 0:\n",
96
- " return recipe_counts[recipe_counts[\"parentRecipe\"] == node][\"count\"].sum()\n",
97
- " else:\n",
98
- " return left\n",
99
- "\n",
100
- "\n",
101
- "formatted_labels = [f\"{node} - {getCount(node)}\" for node in all_nodes]\n",
102
- "base_colors= [\"#2f42ff\", \"#7e9bd2\", \"#27aa88\", \"#dcefde\", \"#84C9AA\", \"#ECB81F\", \"#F9A91B\", \"#DB4197\", \"#992FB9\", \"#D9D8E8\", \"#FF3232\"]\n",
103
- "\n",
104
- "# create a color palette for the nodes\n",
105
- "# important that the number of colors is equal to the number of nodes\n",
106
- "\n",
107
- "colors = []\n",
108
- "for i in range(len(all_nodes)):\n",
109
- " if i < len(base_colors):\n",
110
- " colors.append(base_colors[i])\n",
111
- " else:\n",
112
- " colors.append(base_colors[i % len(base_colors)])\n",
113
- "\n",
114
- "\n",
115
- "# Create the Sankey diagram\n",
116
- "fig = go.Figure(\n",
117
- " data=[\n",
118
- " go.Sankey(\n",
119
- " node=dict(\n",
120
- " pad=15,\n",
121
- " thickness=15,\n",
122
- " line=dict(color=\"black\", width=0.5),\n",
123
- " label=formatted_labels,\n",
124
- " color=colors\n",
125
- " ),\n",
126
- " link=dict(\n",
127
- " source=source,\n",
128
- " target=target,\n",
129
- " value=value,\n",
130
- " ),\n",
131
- " )\n",
132
- " ]\n",
133
- ")\n",
134
- "\n",
135
- "# Update layout\n",
136
- "fig.update_layout(\n",
137
- " title_text=\"Recipes that made changes\",\n",
138
- " font_size=10,\n",
139
- " height=max(len(all_nodes) * 15, 400),\n",
140
- ")\n",
141
- "\n",
142
- "fig.show()"
143
- ]
144
- }
145
- ],
146
- "metadata": {
147
- "kernelspec": {
148
- "display_name": "Python 3",
149
- "language": "python",
150
- "name": "python3"
151
- },
152
- "language_info": {
153
- "codemirror_mode": {
154
- "name": "ipython",
155
- "version": 3
156
- },
157
- "file_extension": ".py",
158
- "mimetype": "text/x-python",
159
- "name": "python",
160
- "nbconvert_exporter": "python",
161
- "pygments_lexer": "ipython3",
162
- "version": "3.11.4"
163
- }
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": null,
6
+ "metadata": {
7
+ "tags": [
8
+ "parameters"
9
+ ]
10
+ },
11
+ "outputs": [],
12
+ "source": [
13
+ "repository_filter: list[str] = []\n",
14
+ "count_threshold = \"0\""
15
+ ]
164
16
  },
165
- "nbformat": 4,
166
- "nbformat_minor": 2
17
+ {
18
+ "cell_type": "code",
19
+ "execution_count": null,
20
+ "metadata": {},
21
+ "outputs": [],
22
+ "source": [
23
+ "from code_data_science import data_table as dt\n",
24
+ "import warnings\n",
25
+ "\n",
26
+ "warnings.simplefilter(\"ignore\")\n",
27
+ "\n",
28
+ "df = dt.read_csv(\"../samples/composite_recipe_results_sankey.csv\")\n",
29
+ "\n",
30
+ "df[\"repositoryWithBranch\"] = df[\"repositoryPath\"] + \"/\" + df[\"repositoryBranch\"]\n",
31
+ "# Filter the data frame to only include rows where repositoryWithBranch contain\n",
32
+ "# a term in the repository_filter (case insensitive)\n",
33
+ "if len(repository_filter) > 0:\n",
34
+ " df = df[\n",
35
+ " df[\"repositoryWithBranch\"].str.contains(\"|\".join(repository_filter), case=False)\n",
36
+ " ]"
37
+ ]
38
+ },
39
+ {
40
+ "cell_type": "code",
41
+ "execution_count": null,
42
+ "metadata": {},
43
+ "outputs": [],
44
+ "source": [
45
+ "df = df[[\"parentRecipe\", \"recipe\"]].assign(count=lambda r: 1)\n",
46
+ "recipe_counts = (\n",
47
+ " df[[\"parentRecipe\", \"recipe\", \"count\"]]\n",
48
+ " .groupby(by=[\"parentRecipe\", \"recipe\"])[\"count\"]\n",
49
+ " .count()\n",
50
+ " .sort_values(ascending=False)\n",
51
+ " .reset_index(name=\"count\")\n",
52
+ ")\n",
53
+ "recipe_counts[\"parentRecipe\"] = recipe_counts[\"parentRecipe\"].transform(\n",
54
+ " lambda s: s.split(\".\")[-1]\n",
55
+ ")\n",
56
+ "recipe_counts[\"recipe\"] = recipe_counts[\"recipe\"].transform(lambda s: s.split(\".\")[-1])\n",
57
+ "\n",
58
+ "# sort recipe_counts by count\n",
59
+ "recipe_counts = recipe_counts.sort_values(by=[\"count\"], ascending=False)\n",
60
+ "\n",
61
+ "count_threshold_int = int(count_threshold)\n",
62
+ "\n",
63
+ "if count_threshold_int > 0:\n",
64
+ " recipe_counts = recipe_counts[recipe_counts[\"count\"] > count_threshold_int]"
65
+ ]
66
+ },
67
+ {
68
+ "cell_type": "code",
69
+ "execution_count": null,
70
+ "metadata": {},
71
+ "outputs": [],
72
+ "source": [
73
+ "import plotly.graph_objects as go\n",
74
+ "\n",
75
+ "# Extract all unique nodes (parent and child recipes)\n",
76
+ "all_nodes = list(set(recipe_counts[\"parentRecipe\"]).union(set(recipe_counts[\"recipe\"])))\n",
77
+ "\n",
78
+ "# Create node indices mapping for preparing for plotly\n",
79
+ "node_indices = {node: i for i, node in enumerate(all_nodes)}\n",
80
+ "\n",
81
+ "# iterates over each row in recipe_counts and find the index of the 'parentRecipe' in node_indices and adds it to the source list.\n",
82
+ "source = [node_indices[row[\"parentRecipe\"]] for _, row in recipe_counts.iterrows()]\n",
83
+ "\n",
84
+ "# iterates over each row in recipe_counts and find the index of the 'recipe' in node_indices and adds it to the target list.\n",
85
+ "target = [node_indices[row[\"recipe\"]] for _, row in recipe_counts.iterrows()]\n",
86
+ "\n",
87
+ "# convert the 'count' column to a list\n",
88
+ "value = list(recipe_counts[\"count\"])\n",
89
+ "\n",
90
+ "# Format labels with node names and counts\n",
91
+ "\n",
92
+ "\n",
93
+ "def getCount(node):\n",
94
+ " left = recipe_counts[recipe_counts[\"recipe\"] == node][\"count\"].sum()\n",
95
+ " if left == 0:\n",
96
+ " return recipe_counts[recipe_counts[\"parentRecipe\"] == node][\"count\"].sum()\n",
97
+ " else:\n",
98
+ " return left\n",
99
+ "\n",
100
+ "\n",
101
+ "formatted_labels = [f\"{node} - {getCount(node)}\" for node in all_nodes]\n",
102
+ "base_colors = [\n",
103
+ " \"#2f42ff\",\n",
104
+ " \"#7e9bd2\",\n",
105
+ " \"#27aa88\",\n",
106
+ " \"#dcefde\",\n",
107
+ " \"#84C9AA\",\n",
108
+ " \"#ECB81F\",\n",
109
+ " \"#F9A91B\",\n",
110
+ " \"#DB4197\",\n",
111
+ " \"#992FB9\",\n",
112
+ " \"#D9D8E8\",\n",
113
+ " \"#FF3232\",\n",
114
+ "]\n",
115
+ "\n",
116
+ "# create a color palette for the nodes\n",
117
+ "# important that the number of colors is equal to the number of nodes\n",
118
+ "\n",
119
+ "colors = []\n",
120
+ "for i in range(len(all_nodes)):\n",
121
+ " if i < len(base_colors):\n",
122
+ " colors.append(base_colors[i])\n",
123
+ " else:\n",
124
+ " colors.append(base_colors[i % len(base_colors)])\n",
125
+ "\n",
126
+ "\n",
127
+ "# Create the Sankey diagram\n",
128
+ "fig = go.Figure(\n",
129
+ " data=[\n",
130
+ " go.Sankey(\n",
131
+ " node=dict(\n",
132
+ " pad=15,\n",
133
+ " thickness=15,\n",
134
+ " line=dict(color=\"black\", width=0.5),\n",
135
+ " label=formatted_labels,\n",
136
+ " color=colors,\n",
137
+ " ),\n",
138
+ " link=dict(\n",
139
+ " source=source,\n",
140
+ " target=target,\n",
141
+ " value=value,\n",
142
+ " ),\n",
143
+ " )\n",
144
+ " ]\n",
145
+ ")\n",
146
+ "\n",
147
+ "# Update layout\n",
148
+ "fig.update_layout(\n",
149
+ " title_text=\"Recipes that made changes\",\n",
150
+ " font_size=10,\n",
151
+ " height=max(len(all_nodes) * 15, 400),\n",
152
+ ")\n",
153
+ "\n",
154
+ "fig.show()"
155
+ ]
156
+ }
157
+ ],
158
+ "metadata": {
159
+ "kernelspec": {
160
+ "display_name": "Python 3",
161
+ "language": "python",
162
+ "name": "python3"
163
+ },
164
+ "language_info": {
165
+ "codemirror_mode": {
166
+ "name": "ipython",
167
+ "version": 3
168
+ },
169
+ "file_extension": ".py",
170
+ "mimetype": "text/x-python",
171
+ "name": "python",
172
+ "nbconvert_exporter": "python",
173
+ "pygments_lexer": "ipython3",
174
+ "version": "3.11.4"
175
+ }
176
+ },
177
+ "nbformat": 4,
178
+ "nbformat_minor": 2
167
179
  }
@@ -33490,7 +33490,7 @@
33490
33490
  " log_x=False,\n",
33491
33491
  " color=\"cluster id\",\n",
33492
33492
  " hover_name=\"name\",\n",
33493
- " color_discrete_sequence=colors\n",
33493
+ " color_discrete_sequence=colors,\n",
33494
33494
  ")\n",
33495
33495
  "fig.update_layout(showlegend=False)\n",
33496
33496
  "\n",
@@ -5029,16 +5029,19 @@
5029
5029
  " device=\"cpu\",\n",
5030
5030
  " engine=\"optimum\",\n",
5031
5031
  " compile=True,\n",
5032
- " batch_size=2\n",
5032
+ " batch_size=2,\n",
5033
5033
  ")\n",
5034
5034
  "engine = AsyncEmbeddingEngine.from_args(engine_args)\n",
5035
5035
  "\n",
5036
5036
  "# Define a single function to get embeddings\n",
5037
+ "\n",
5038
+ "\n",
5037
5039
  "async def get_embeddings(sentences: list[str]) -> list:\n",
5038
5040
  " async with engine: # Ensure engine is properly started and stopped\n",
5039
5041
  " embeddings, _ = await engine.embed(sentences=sentences)\n",
5040
5042
  " return embeddings\n",
5041
5043
  "\n",
5044
+ "\n",
5042
5045
  "# Track time for embeddings\n",
5043
5046
  "start_time_embeddings = time.time_ns()\n",
5044
5047
  "loop = asyncio.get_running_loop()\n",
@@ -5058,14 +5061,16 @@
5058
5061
  "\n",
5059
5062
  "# Apply Gaussian Mixture Model\n",
5060
5063
  "start_time_gmm = time.time_ns()\n",
5061
- "gmm = GaussianMixture(n_components=6, covariance_type='full', random_state=42)\n",
5064
+ "gmm = GaussianMixture(n_components=6, covariance_type=\"full\", random_state=42)\n",
5062
5065
  "labels = gmm.fit_predict(indices)\n",
5063
5066
  "end_time_gmm = time.time_ns()\n",
5064
5067
  "gmm_time_seconds = (end_time_gmm - start_time_gmm) / 1e9\n",
5065
5068
  "\n",
5066
5069
  "df[\"x\"] = x\n",
5067
5070
  "df[\"y\"] = y\n",
5068
- "df[\"cluster id\"] = labels.astype(\"str\") # As string so the colors and legend are discrete\n",
5071
+ "df[\"cluster id\"] = labels.astype(\n",
5072
+ " \"str\"\n",
5073
+ ") # As string so the colors and legend are discrete\n",
5069
5074
  "df.sort_values(by=\"cluster id\", inplace=True)\n",
5070
5075
  "\n",
5071
5076
  "custom_palette = [\n",
@@ -5078,7 +5083,7 @@
5078
5083
  " palette.__moderne_color_map[\"yellow\"][700],\n",
5079
5084
  "]\n",
5080
5085
  "\n",
5081
- "colors = custom_palette[:gmm.n_components]\n",
5086
+ "colors = custom_palette[: gmm.n_components]\n",
5082
5087
  "\n",
5083
5088
  "# Create the figure with time metrics in the title\n",
5084
5089
  "fig = px.scatter(\n",
@@ -5088,39 +5093,45 @@
5088
5093
  " log_x=False,\n",
5089
5094
  " color=\"cluster id\",\n",
5090
5095
  " hover_name=\"method\",\n",
5091
- " color_discrete_sequence=colors\n",
5096
+ " color_discrete_sequence=colors,\n",
5092
5097
  ")\n",
5093
5098
  "\n",
5099
+ "\n",
5094
5100
  "def draw_ellipse_plotly(mean, covariance, fig, n_std=3, **kwargs):\n",
5095
5101
  " \"\"\"Draw an ellipse with a given mean and covariance using Plotly.\"\"\"\n",
5096
5102
  " # Convert covariance to principal axes\n",
5097
5103
  " U, s, Vt = np.linalg.svd(covariance)\n",
5098
5104
  " angle = np.degrees(np.arctan2(U[1, 0], U[0, 0]))\n",
5099
5105
  " width, height = 2 * np.sqrt(s)\n",
5100
- " \n",
5106
+ "\n",
5101
5107
  " # Plotly does not directly support ellipses, so we approximate with a scatter plot\n",
5102
5108
  " theta = np.linspace(0, 2 * np.pi, 100)\n",
5103
5109
  " ellipse_x = width / 2 * np.cos(theta)\n",
5104
5110
  " ellipse_y = height / 2 * np.sin(theta)\n",
5105
5111
  "\n",
5106
- " R = np.array([[np.cos(np.radians(angle)), -np.sin(np.radians(angle))],\n",
5107
- " [np.sin(np.radians(angle)), np.cos(np.radians(angle))]])\n",
5112
+ " R = np.array(\n",
5113
+ " [\n",
5114
+ " [np.cos(np.radians(angle)), -np.sin(np.radians(angle))],\n",
5115
+ " [np.sin(np.radians(angle)), np.cos(np.radians(angle))],\n",
5116
+ " ]\n",
5117
+ " )\n",
5108
5118
  " ellipse_coords = np.dot(R, np.array([ellipse_x, ellipse_y]))\n",
5109
- " \n",
5119
+ "\n",
5110
5120
  " # For each standard deviation, plot an ellipse\n",
5111
5121
  " for nsig in range(1, n_std + 1):\n",
5112
5122
  " fig.add_trace(\n",
5113
5123
  " go.Scatter(\n",
5114
5124
  " x=ellipse_coords[0] * nsig + mean[0],\n",
5115
5125
  " y=ellipse_coords[1] * nsig + mean[1],\n",
5116
- " mode='lines',\n",
5117
- " **kwargs\n",
5126
+ " mode=\"lines\",\n",
5127
+ " **kwargs,\n",
5118
5128
  " )\n",
5119
5129
  " )\n",
5120
5130
  "\n",
5131
+ "\n",
5121
5132
  "# Draw ellipses around GMM clusters\n",
5122
5133
  "for mean, covar in zip(gmm.means_, gmm.covariances_):\n",
5123
- " draw_ellipse_plotly(mean, covar, fig, n_std=3, line=dict(color='red'), opacity=0.2)\n",
5134
+ " draw_ellipse_plotly(mean, covar, fig, n_std=3, line=dict(color=\"red\"), opacity=0.2)\n",
5124
5135
  "\n",
5125
5136
  "fig.update_layout(\n",
5126
5137
  " showlegend=False,\n",
@@ -5128,7 +5139,7 @@
5128
5139
  " f\"Embedding Time: {embedding_time_seconds:.2f} sec | \"\n",
5129
5140
  " f\"t-SNE Time: {tsne_time_seconds:.2f} sec | \"\n",
5130
5141
  " f\"GMM Time: {gmm_time_seconds:.2f} sec\"\n",
5131
- " )\n",
5142
+ " ),\n",
5132
5143
  ")\n",
5133
5144
  "\n",
5134
5145
  "fig.show()"
@@ -20,19 +20,19 @@
20
20
  "metadata": {},
21
21
  "outputs": [],
22
22
  "source": [
23
- "data = df.drop(\n",
24
- " columns=[\n",
25
- " \"repositoryOrigin\",\n",
26
- " \"repositoryPath\",\n",
27
- " \"repositoryBranch\",\n",
28
- " \"projectName\",\n",
29
- " \"sourceSetName\",\n",
30
- " \"vmVendor\",\n",
31
- " \"createdBy\",\n",
32
- " \"sourceCompatibility\",\n",
33
- " \"targetCompatibility\",\n",
34
- " ]\n",
35
- ")\n",
23
+ "columns_to_drop = [\n",
24
+ " \"repositoryOrigin\",\n",
25
+ " \"repositoryPath\",\n",
26
+ " \"repositoryBranch\",\n",
27
+ " \"projectName\",\n",
28
+ " \"sourceSetName\",\n",
29
+ " \"vmVendor\",\n",
30
+ " \"createdBy\",\n",
31
+ " \"sourceCompatibility\",\n",
32
+ " \"targetCompatibility\",\n",
33
+ "]\n",
34
+ "\n",
35
+ "data = df.drop(columns=[col for col in columns_to_drop if col in df.columns])\n",
36
36
  "data"
37
37
  ]
38
38
  },
@@ -69,7 +69,7 @@
69
69
  ],
70
70
  "metadata": {
71
71
  "kernelspec": {
72
- "display_name": "Python 3 (ipykernel)",
72
+ "display_name": "Python 3",
73
73
  "language": "python",
74
74
  "name": "python3"
75
75
  },
@@ -83,7 +83,7 @@
83
83
  "name": "python",
84
84
  "nbconvert_exporter": "python",
85
85
  "pygments_lexer": "ipython3",
86
- "version": "3.9.17"
86
+ "version": "3.10.14"
87
87
  }
88
88
  },
89
89
  "nbformat": 4,
@@ -15,21 +15,21 @@
15
15
  },
16
16
  {
17
17
  "cell_type": "code",
18
- "execution_count": null,
18
+ "execution_count": 2,
19
19
  "id": "701147ab-62bd-490f-8a26-8ad1dd80f4d7",
20
20
  "metadata": {},
21
21
  "outputs": [],
22
22
  "source": [
23
- "data = df.drop(\n",
24
- " columns=[\n",
25
- " \"repositoryOrigin\",\n",
26
- " \"repositoryPath\",\n",
27
- " \"repositoryBranch\",\n",
28
- " \"scmType\",\n",
29
- " \"repositoryLink\",\n",
30
- " \"targetVersion\",\n",
31
- " ]\n",
32
- ")\n",
23
+ "columns_to_drop = [\n",
24
+ " \"repositoryOrigin\",\n",
25
+ " \"repositoryPath\",\n",
26
+ " \"repositoryBranch\",\n",
27
+ " \"scmType\",\n",
28
+ " \"repositoryLink\",\n",
29
+ " \"targetVersion\",\n",
30
+ "]\n",
31
+ "\n",
32
+ "data = df.drop(columns=[col for col in columns_to_drop if col in df.columns])\n",
33
33
  "data"
34
34
  ]
35
35
  },
@@ -40,11 +40,7 @@
40
40
  "metadata": {},
41
41
  "outputs": [],
42
42
  "source": [
43
- "versions = (\n",
44
- " data.groupby([\"sourceVersion\"], as_index=True)\n",
45
- " .value_counts()\n",
46
- " .fillna(0)\n",
47
- ")\n",
43
+ "versions = data.groupby([\"sourceVersion\"], as_index=True).value_counts().fillna(0)\n",
48
44
  "versions"
49
45
  ]
50
46
  },
@@ -66,7 +62,7 @@
66
62
  ],
67
63
  "metadata": {
68
64
  "kernelspec": {
69
- "display_name": "Python 3 (ipykernel)",
65
+ "display_name": "Python 3",
70
66
  "language": "python",
71
67
  "name": "python3"
72
68
  },
@@ -80,7 +76,7 @@
80
76
  "name": "python",
81
77
  "nbconvert_exporter": "python",
82
78
  "pygments_lexer": "ipython3",
83
- "version": "3.9.17"
79
+ "version": "3.10.14"
84
80
  }
85
81
  },
86
82
  "nbformat": 4,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: moderne_visualizations_misc
3
- Version: 0.68.0
3
+ Version: 0.69.0
4
4
  Summary: Miscellaneous visualizations for the Moderne platform
5
5
  Author-email: Jonathan Schneider <jonathan@moderne.io>, Kyle Scully <kyle@moderne.io>
6
6
  License: Apache-2.0
@@ -5,7 +5,7 @@ moderne_visualizations_misc/cobol_find_copybook.ipynb,sha256=buo5GKENebMYD3OSB2L
5
5
  moderne_visualizations_misc/cobol_relationships.ipynb,sha256=eYSMUDcK5x7MlAFxpGJXPuRNjD1VU4AEFbk710bPPM0,8530
6
6
  moderne_visualizations_misc/cobol_relationships_data_grid.ipynb,sha256=Lz_7EiJa2wN5Vriu7uNS3omHp85-uvay1C_YyIc482A,2003
7
7
  moderne_visualizations_misc/comment_language_distribution.ipynb,sha256=39NdfUH5NIX36918ogQnr9mn0ZYgrfpMMARNJTXFMWc,3189
8
- moderne_visualizations_misc/composite_recipe_results_sankey.ipynb,sha256=az_oHI4G5x8BDlSp7Z9-NcXBmuwCWJdYODhXXa8u6so,6013
8
+ moderne_visualizations_misc/composite_recipe_results_sankey.ipynb,sha256=3n8bOWpYlI3nCaPqLa5R140Sszok0RxCJ4vhJakHqSg,5587
9
9
  moderne_visualizations_misc/dependency_tree_view.ipynb,sha256=rcW9LQzn_zNM7wnjOq1YA0B9ybzZPdrTRcc2VqzLOfs,2983
10
10
  moderne_visualizations_misc/dependency_tree_view_nodejs.ipynb,sha256=YQRFdXkRwedWxEqe6G5ugqiU_aHPiRVFwPHQRyo0r5w,674
11
11
  moderne_visualizations_misc/dependency_tree_view_nodejs_build_tools.ipynb,sha256=YQRFdXkRwedWxEqe6G5ugqiU_aHPiRVFwPHQRyo0r5w,674
@@ -40,18 +40,18 @@ moderne_visualizations_misc/dependency_vulnerabilities.ipynb,sha256=NHbg232NpB4W
40
40
  moderne_visualizations_misc/dependency_vulnerabilities_npm.ipynb,sha256=8n1vp9_-e0FROhLEmyTVEOqx5V_norBotYF1S4gpbxc,33491
41
41
  moderne_visualizations_misc/dependency_vulnerabilities_nuget.ipynb,sha256=KtyQ48CVL-HbSi5nY4Hi9QRwcSLI_M4Ezvv5mvLMIh0,33491
42
42
  moderne_visualizations_misc/effective_maven_settings.ipynb,sha256=aeSNYIKY2RoCsEE3N8FHLOFYKUqmnD0Lh30kKS9_SdQ,1109
43
- moderne_visualizations_misc/embeddings_clustering.ipynb,sha256=r7JhcnGBW_TXIZbVALIX7W2Fyla3mK-VOK-e2-ifNao,804659
43
+ moderne_visualizations_misc/embeddings_clustering.ipynb,sha256=H0ZDXLRVXexk5Jj-673RNHcbJr4H4IKF9uBuSBnUXrQ,804660
44
44
  moderne_visualizations_misc/eslint_problems.ipynb,sha256=jhXjBY4C3_fHca5zpa7acIR5MTPfFSSrjx9mc5qoGsE,3720
45
45
  moderne_visualizations_misc/eslint_problems_by_repo.ipynb,sha256=vs5nYXT87TSXNAn9IeSiacFscINTZuJ_sT5JLYF-rgY,3583
46
46
  moderne_visualizations_misc/find_methods.ipynb,sha256=dRjHdISWtNB7EXBuVESa6N5w-DPNTKcqL9_Z0bCXSz4,1882
47
47
  moderne_visualizations_misc/find_methods_ai.ipynb,sha256=oeONlQkAtPp5gDxrUV7trV6OIeMxsWnz3i1kva-fJD0,4966
48
48
  moderne_visualizations_misc/find_methods_ai_generate_yaml.ipynb,sha256=Ko2F4onWVp_AKXUp1WLhVjMBEwUe4ac5K1zuGC2EsIo,1866
49
49
  moderne_visualizations_misc/find_source_files.ipynb,sha256=Es8yifPF77alf3SdVD4iKX1bJBu7d03h4Od9Jko3Jz0,1252
50
- moderne_visualizations_misc/get_embeddings_and_cluster.ipynb,sha256=zVwNgRAjpRNmAj3tkOY0nAVhzS94SFEL7yrAwTxR-LM,151546
50
+ moderne_visualizations_misc/get_embeddings_and_cluster.ipynb,sha256=TjooaE1jBc5JdwhvUEj6-dHhBGHQ5_A2HmTGfBmC4Mc,151690
51
51
  moderne_visualizations_misc/github_secrets_in_use.ipynb,sha256=dGCXxoqDuDh5TjGMIVUU6dBHoqCASpJastVqeMc54go,2818
52
52
  moderne_visualizations_misc/gradle_wrappers.ipynb,sha256=GtzUkmzDUZ3K3eL6Jj5VXvI-J4Ogphsf8z8b2kAfjt8,1929
53
- moderne_visualizations_misc/java_versions_by_sourceset.ipynb,sha256=F4Df2jVcYPilE-2z6rnmD9Blqq7K8Ulo5NRu946LrkU,2109
54
- moderne_visualizations_misc/java_versions_in_use.ipynb,sha256=VVsCttcq2vk2ndzKmtKnNRYT6gVEe2SJ1WI-h6M73oA,1971
53
+ moderne_visualizations_misc/java_versions_by_sourceset.ipynb,sha256=USqalabsetjZtYSMP1pRh6m9jJw24nW_26gayojolLY,2125
54
+ moderne_visualizations_misc/java_versions_in_use.ipynb,sha256=06Kjsblyj024fFH_KIvtX8ynBIDKhJvaBDgSx1DvFUY,1942
55
55
  moderne_visualizations_misc/language_composition.ipynb,sha256=kKRnUukITpuzfxMsGsfeQeF1o6TYVeblfSfdH5hd-RE,6716
56
56
  moderne_visualizations_misc/language_composition_by_folder.ipynb,sha256=LRU1GuC2EvuOpFRi4NN90odqyRt0ywroysfXuhDFlhE,2505
57
57
  moderne_visualizations_misc/language_composition_by_repo.ipynb,sha256=OEU0GR6U8OAt9jzlCJzuaiR4xcWF3UubSio1BKWGV2k,7060
@@ -192,7 +192,7 @@ moderne_visualizations_misc/specs/spring_component_relationships_data_grid.yml,s
192
192
  moderne_visualizations_misc/specs/spring_components_data_grid.yml,sha256=nRLXX3t2sw4gFIVdt7wEE1O8vVcr0qWx1aqIZpoFghc,323
193
193
  moderne_visualizations_misc/specs/sql_crud.yml,sha256=BaUV1bb3oJNrNARU-0YAez2S2yW8djqNUvRSY6rfmTk,533
194
194
  moderne_visualizations_misc/specs/text_matches_tree_grid.yml,sha256=U2-j_kFaHNex5avmPtzw_6AWUs9JKk_ouCyqdJBThp4,903
195
- moderne_visualizations_misc-0.68.0.dist-info/METADATA,sha256=1MgN65puqH1okhbFEAftPrlF-trwXFLMjtUhYrpiAFs,1010
196
- moderne_visualizations_misc-0.68.0.dist-info/WHEEL,sha256=cVxcB9AmuTcXqmwrtPhNK88dr7IR_b6qagTj0UvIEbY,91
197
- moderne_visualizations_misc-0.68.0.dist-info/top_level.txt,sha256=V_gviHcBSH6w_h-g98-9ecQRoN8d82cxPdV-DA3Leeo,28
198
- moderne_visualizations_misc-0.68.0.dist-info/RECORD,,
195
+ moderne_visualizations_misc-0.69.0.dist-info/METADATA,sha256=U2qsNJGhgdM1xqjgOeB2loMRrr4_EMNQG-fl6ZqLSqI,1010
196
+ moderne_visualizations_misc-0.69.0.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
197
+ moderne_visualizations_misc-0.69.0.dist-info/top_level.txt,sha256=V_gviHcBSH6w_h-g98-9ecQRoN8d82cxPdV-DA3Leeo,28
198
+ moderne_visualizations_misc-0.69.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (74.1.2)
2
+ Generator: setuptools (75.2.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5