moderne-visualizations-misc 0.76.0__py3-none-any.whl → 1.0.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.
- moderne_visualizations_misc/composite_recipe_results_sankey.ipynb +5 -5
- moderne_visualizations_misc/cyclomatic_complexity_heatmap.ipynb +204 -4
- moderne_visualizations_misc/cyclomatic_complexity_risk_matrix.ipynb +83 -74
- moderne_visualizations_misc/dependency_usage_violin_gradle.ipynb +1 -1
- moderne_visualizations_misc/dependency_vulnerabilities.ipynb +1558 -1558
- moderne_visualizations_misc/repository_release_order.ipynb +104 -103
- {moderne_visualizations_misc-0.76.0.dist-info → moderne_visualizations_misc-1.0.0.dist-info}/METADATA +3 -3
- {moderne_visualizations_misc-0.76.0.dist-info → moderne_visualizations_misc-1.0.0.dist-info}/RECORD +11 -11
- {moderne_visualizations_misc-0.76.0.dist-info → moderne_visualizations_misc-1.0.0.dist-info}/WHEEL +1 -1
- {moderne_visualizations_misc-0.76.0.dist-info → moderne_visualizations_misc-1.0.0.dist-info}/licenses/LICENSE +0 -0
- {moderne_visualizations_misc-0.76.0.dist-info → moderne_visualizations_misc-1.0.0.dist-info}/top_level.txt +0 -0
|
@@ -58,52 +58,57 @@
|
|
|
58
58
|
"if len(df) == 0:\n",
|
|
59
59
|
" fig = go.Figure()\n",
|
|
60
60
|
" fig.add_annotation(\n",
|
|
61
|
-
" x=0.5
|
|
61
|
+
" x=0.5,\n",
|
|
62
|
+
" y=0.5,\n",
|
|
63
|
+
" text=\"No dependency data found\",\n",
|
|
64
|
+
" showarrow=False,\n",
|
|
65
|
+
" font=dict(size=20),\n",
|
|
62
66
|
" )\n",
|
|
63
67
|
"else:\n",
|
|
64
68
|
" # Create repository identifier\n",
|
|
65
69
|
" df[\"repository\"] = df[\"repositoryOrigin\"] + \"/\" + df[\"repositoryPath\"]\n",
|
|
66
|
-
"
|
|
70
|
+
"\n",
|
|
67
71
|
" # Apply groupId filter if specified\n",
|
|
68
72
|
" if groupId_filter:\n",
|
|
69
73
|
" df = df[df[\"groupId\"].str.startswith(groupId_filter)]\n",
|
|
70
|
-
"
|
|
74
|
+
"\n",
|
|
71
75
|
" # Create a mapping of artifacts to their repositories\n",
|
|
72
76
|
" artifact_to_repo = {}\n",
|
|
73
77
|
" for _, row in df.iterrows():\n",
|
|
74
78
|
" artifact_key = f\"{row['groupId']}:{row['artifactId']}\"\n",
|
|
75
79
|
" if row[\"projectName\"] and artifact_key not in artifact_to_repo:\n",
|
|
76
80
|
" artifact_to_repo[artifact_key] = row[\"repository\"]\n",
|
|
77
|
-
"
|
|
81
|
+
"\n",
|
|
78
82
|
" # Build dependency graph between repositories (treating all dependencies equally)\n",
|
|
79
83
|
" repo_dependencies = defaultdict(set)\n",
|
|
80
84
|
" dependency_counts = defaultdict(int)\n",
|
|
81
|
-
"
|
|
85
|
+
"\n",
|
|
82
86
|
" for _, dep in df.iterrows():\n",
|
|
83
87
|
" consumer_repo = dep[\"repository\"]\n",
|
|
84
88
|
" dependency_key = f\"{dep['groupId']}:{dep['artifactId']}\"\n",
|
|
85
|
-
"
|
|
89
|
+
"\n",
|
|
86
90
|
" # Find which repository produces this dependency\n",
|
|
87
91
|
" producer_repo = artifact_to_repo.get(dependency_key)\n",
|
|
88
|
-
"
|
|
92
|
+
"\n",
|
|
89
93
|
" if producer_repo and producer_repo != consumer_repo:\n",
|
|
90
94
|
" repo_dependencies[consumer_repo].add(producer_repo)\n",
|
|
91
95
|
" dependency_counts[(producer_repo, consumer_repo)] += 1\n",
|
|
92
|
-
"
|
|
96
|
+
"\n",
|
|
93
97
|
" # Create directed graph\n",
|
|
94
98
|
" G = nx.DiGraph()\n",
|
|
95
99
|
" for consumer, producers in repo_dependencies.items():\n",
|
|
96
100
|
" for producer in producers:\n",
|
|
97
101
|
" weight = dependency_counts[(producer, consumer)]\n",
|
|
98
102
|
" G.add_edge(producer, consumer, weight=weight)\n",
|
|
99
|
-
"
|
|
103
|
+
"\n",
|
|
100
104
|
" if len(G.nodes()) == 0:\n",
|
|
101
105
|
" fig = go.Figure()\n",
|
|
102
106
|
" fig.add_annotation(\n",
|
|
103
|
-
" x=0.5
|
|
104
|
-
"
|
|
105
|
-
"
|
|
106
|
-
"
|
|
107
|
+
" x=0.5,\n",
|
|
108
|
+
" y=0.5,\n",
|
|
109
|
+
" text=\"No inter-repository dependencies found\",\n",
|
|
110
|
+
" showarrow=False,\n",
|
|
111
|
+
" font=dict(size=16),\n",
|
|
107
112
|
" )\n",
|
|
108
113
|
" else:\n",
|
|
109
114
|
" # Calculate release order using topological sort\n",
|
|
@@ -120,197 +125,193 @@
|
|
|
120
125
|
" if len(cycle) > 1:\n",
|
|
121
126
|
" G_copy.remove_edge(cycle[-1], cycle[0])\n",
|
|
122
127
|
" release_order = list(nx.topological_sort(G_copy))\n",
|
|
123
|
-
"
|
|
128
|
+
"\n",
|
|
124
129
|
" # Store release order for display below the graph\n",
|
|
125
130
|
" release_order_list = release_order\n",
|
|
126
|
-
"
|
|
131
|
+
"\n",
|
|
127
132
|
" if visualization_type == \"network\":\n",
|
|
128
133
|
" # Create network visualization\n",
|
|
129
134
|
" pos = nx.spring_layout(G, k=2, iterations=50, seed=42)\n",
|
|
130
|
-
"
|
|
135
|
+
"\n",
|
|
131
136
|
" # Create edge traces\n",
|
|
132
137
|
" edge_traces = []\n",
|
|
133
138
|
" for edge in G.edges(data=True):\n",
|
|
134
139
|
" x0, y0 = pos[edge[0]]\n",
|
|
135
140
|
" x1, y1 = pos[edge[1]]\n",
|
|
136
|
-
" weight = edge[2][
|
|
137
|
-
"
|
|
141
|
+
" weight = edge[2][\"weight\"]\n",
|
|
142
|
+
"\n",
|
|
138
143
|
" # Add arrow annotation\n",
|
|
139
144
|
" edge_trace = go.Scatter(\n",
|
|
140
145
|
" x=[x0, x1, None],\n",
|
|
141
146
|
" y=[y0, y1, None],\n",
|
|
142
|
-
" mode
|
|
147
|
+
" mode=\"lines\",\n",
|
|
143
148
|
" line=dict(\n",
|
|
144
|
-
" width=min(weight * 0.5, 10)
|
|
145
|
-
" color='rgba(125,125,125,0.5)'\n",
|
|
149
|
+
" width=min(weight * 0.5, 10), color=\"rgba(125,125,125,0.5)\"\n",
|
|
146
150
|
" ),\n",
|
|
147
|
-
" hoverinfo
|
|
151
|
+
" hoverinfo=\"text\",\n",
|
|
148
152
|
" text=f\"{edge[0]} → {edge[1]}<br>Dependencies: {weight}\",\n",
|
|
149
|
-
" showlegend=False
|
|
153
|
+
" showlegend=False,\n",
|
|
150
154
|
" )\n",
|
|
151
155
|
" edge_traces.append(edge_trace)\n",
|
|
152
|
-
"
|
|
156
|
+
"\n",
|
|
153
157
|
" # Create node trace\n",
|
|
154
158
|
" node_x = []\n",
|
|
155
159
|
" node_y = []\n",
|
|
156
160
|
" node_text = []\n",
|
|
157
161
|
" node_color = []\n",
|
|
158
|
-
"
|
|
162
|
+
"\n",
|
|
159
163
|
" for node in G.nodes():\n",
|
|
160
164
|
" x, y = pos[node]\n",
|
|
161
165
|
" node_x.append(x)\n",
|
|
162
166
|
" node_y.append(y)\n",
|
|
163
|
-
"
|
|
167
|
+
"\n",
|
|
164
168
|
" # Calculate release tier\n",
|
|
165
169
|
" tier = release_order.index(node) if node in release_order else -1\n",
|
|
166
|
-
"
|
|
170
|
+
"\n",
|
|
167
171
|
" # Get dependency info\n",
|
|
168
172
|
" in_deps = list(G.predecessors(node))\n",
|
|
169
173
|
" out_deps = list(G.successors(node))\n",
|
|
170
|
-
"
|
|
174
|
+
"\n",
|
|
171
175
|
" hover_text = f\"<b>{node}</b><br>\"\n",
|
|
172
176
|
" hover_text += f\"Release tier: {tier + 1}<br>\"\n",
|
|
173
177
|
" hover_text += f\"Depends on: {len(in_deps)} repos<br>\"\n",
|
|
174
178
|
" hover_text += f\"Required by: {len(out_deps)} repos\"\n",
|
|
175
|
-
"
|
|
179
|
+
"\n",
|
|
176
180
|
" node_text.append(hover_text)\n",
|
|
177
181
|
" node_color.append(tier)\n",
|
|
178
|
-
"
|
|
182
|
+
"\n",
|
|
179
183
|
" node_trace = go.Scatter(\n",
|
|
180
184
|
" x=node_x,\n",
|
|
181
185
|
" y=node_y,\n",
|
|
182
|
-
" mode
|
|
183
|
-
" text=[node.split(
|
|
186
|
+
" mode=\"markers+text\",\n",
|
|
187
|
+
" text=[node.split(\"/\")[-1] for node in G.nodes()],\n",
|
|
184
188
|
" textposition=\"top center\",\n",
|
|
185
|
-
" hoverinfo
|
|
189
|
+
" hoverinfo=\"text\",\n",
|
|
186
190
|
" hovertext=node_text,\n",
|
|
187
191
|
" marker=dict(\n",
|
|
188
192
|
" size=25,\n",
|
|
189
193
|
" color=node_color,\n",
|
|
190
|
-
" colorscale
|
|
194
|
+
" colorscale=\"Viridis\",\n",
|
|
191
195
|
" showscale=True,\n",
|
|
192
|
-
" colorbar=dict(\n",
|
|
193
|
-
"
|
|
194
|
-
" thickness=15,\n",
|
|
195
|
-
" len=0.7\n",
|
|
196
|
-
" ),\n",
|
|
197
|
-
" line=dict(width=2, color='white')\n",
|
|
196
|
+
" colorbar=dict(title=\"Release<br>Tier\", thickness=15, len=0.7),\n",
|
|
197
|
+
" line=dict(width=2, color=\"white\"),\n",
|
|
198
198
|
" ),\n",
|
|
199
|
-
" showlegend=False
|
|
199
|
+
" showlegend=False,\n",
|
|
200
200
|
" )\n",
|
|
201
|
-
"
|
|
201
|
+
"\n",
|
|
202
202
|
" fig = go.Figure(data=edge_traces + [node_trace])\n",
|
|
203
|
-
"
|
|
203
|
+
"\n",
|
|
204
204
|
" title = \"Repository Dependency Network & Release Order\"\n",
|
|
205
205
|
" if has_cycles:\n",
|
|
206
206
|
" title += \" (⚠️ Circular dependencies detected)\"\n",
|
|
207
|
-
"
|
|
207
|
+
"\n",
|
|
208
208
|
" fig.update_layout(\n",
|
|
209
|
-
" title=dict(\n",
|
|
210
|
-
" text=title,\n",
|
|
211
|
-
" x=0.5,\n",
|
|
212
|
-
" xanchor='center'\n",
|
|
213
|
-
" ),\n",
|
|
209
|
+
" title=dict(text=title, x=0.5, xanchor=\"center\"),\n",
|
|
214
210
|
" showlegend=False,\n",
|
|
215
|
-
" hovermode
|
|
211
|
+
" hovermode=\"closest\",\n",
|
|
216
212
|
" margin=dict(b=20, l=5, r=5, t=40),\n",
|
|
217
213
|
" xaxis=dict(showgrid=False, zeroline=False, showticklabels=False),\n",
|
|
218
214
|
" yaxis=dict(showgrid=False, zeroline=False, showticklabels=False),\n",
|
|
219
|
-
" plot_bgcolor
|
|
215
|
+
" plot_bgcolor=\"white\",\n",
|
|
220
216
|
" )\n",
|
|
221
|
-
"
|
|
217
|
+
"\n",
|
|
222
218
|
" elif visualization_type == \"hierarchy\":\n",
|
|
223
219
|
" # Create hierarchical visualization showing release tiers\n",
|
|
224
220
|
" tiers = defaultdict(list)\n",
|
|
225
221
|
" tiers_assignment = {}\n",
|
|
226
|
-
"
|
|
222
|
+
"\n",
|
|
227
223
|
" for repo in release_order:\n",
|
|
228
224
|
" tier_level = 0\n",
|
|
229
225
|
" # Calculate actual tier based on max dependency depth\n",
|
|
230
226
|
" predecessors = list(G.predecessors(repo))\n",
|
|
231
227
|
" if predecessors:\n",
|
|
232
|
-
" pred_tiers = [
|
|
228
|
+
" pred_tiers = [\n",
|
|
229
|
+
" tiers_assignment.get(p, 0)\n",
|
|
230
|
+
" for p in predecessors\n",
|
|
231
|
+
" if p in tiers_assignment\n",
|
|
232
|
+
" ]\n",
|
|
233
233
|
" if pred_tiers:\n",
|
|
234
234
|
" tier_level = max(pred_tiers) + 1\n",
|
|
235
|
-
"
|
|
235
|
+
"\n",
|
|
236
236
|
" tiers_assignment[repo] = tier_level\n",
|
|
237
237
|
" tiers[tier_level].append(repo)\n",
|
|
238
|
-
"
|
|
238
|
+
"\n",
|
|
239
239
|
" # Create Sankey diagram\n",
|
|
240
240
|
" labels = []\n",
|
|
241
241
|
" sources = []\n",
|
|
242
242
|
" targets = []\n",
|
|
243
243
|
" values = []\n",
|
|
244
|
-
"
|
|
244
|
+
"\n",
|
|
245
245
|
" node_index = {}\n",
|
|
246
246
|
" idx = 0\n",
|
|
247
|
-
"
|
|
247
|
+
"\n",
|
|
248
248
|
" # Add nodes for each tier\n",
|
|
249
249
|
" for tier, repos in sorted(tiers.items()):\n",
|
|
250
250
|
" for repo in repos:\n",
|
|
251
251
|
" labels.append(f\"Tier {tier + 1}: {repo.split('/')[-1]}\")\n",
|
|
252
252
|
" node_index[repo] = idx\n",
|
|
253
253
|
" idx += 1\n",
|
|
254
|
-
"
|
|
254
|
+
"\n",
|
|
255
255
|
" # Add edges\n",
|
|
256
256
|
" for edge in G.edges(data=True):\n",
|
|
257
257
|
" if edge[0] in node_index and edge[1] in node_index:\n",
|
|
258
258
|
" sources.append(node_index[edge[0]])\n",
|
|
259
259
|
" targets.append(node_index[edge[1]])\n",
|
|
260
|
-
" values.append(edge[2][
|
|
261
|
-
"
|
|
262
|
-
" fig = go.Figure(
|
|
263
|
-
"
|
|
264
|
-
"
|
|
265
|
-
"
|
|
266
|
-
"
|
|
267
|
-
"
|
|
268
|
-
"
|
|
269
|
-
"
|
|
270
|
-
"
|
|
271
|
-
"
|
|
272
|
-
"
|
|
273
|
-
"
|
|
274
|
-
"
|
|
275
|
-
" )])\n",
|
|
276
|
-
" \n",
|
|
277
|
-
" fig.update_layout(\n",
|
|
278
|
-
" title=\"Repository Release Tiers\",\n",
|
|
279
|
-
" font_size=10\n",
|
|
260
|
+
" values.append(edge[2][\"weight\"])\n",
|
|
261
|
+
"\n",
|
|
262
|
+
" fig = go.Figure(\n",
|
|
263
|
+
" data=[\n",
|
|
264
|
+
" go.Sankey(\n",
|
|
265
|
+
" node=dict(\n",
|
|
266
|
+
" pad=15,\n",
|
|
267
|
+
" thickness=20,\n",
|
|
268
|
+
" line=dict(color=\"black\", width=0.5),\n",
|
|
269
|
+
" label=labels,\n",
|
|
270
|
+
" color=palette.qualitative()[: len(labels)],\n",
|
|
271
|
+
" ),\n",
|
|
272
|
+
" link=dict(source=sources, target=targets, value=values),\n",
|
|
273
|
+
" )\n",
|
|
274
|
+
" ]\n",
|
|
280
275
|
" )\n",
|
|
281
|
-
"
|
|
276
|
+
"\n",
|
|
277
|
+
" fig.update_layout(title=\"Repository Release Tiers\", font_size=10)\n",
|
|
278
|
+
"\n",
|
|
282
279
|
" else: # matrix visualization\n",
|
|
283
280
|
" # Create dependency matrix\n",
|
|
284
281
|
" repos = sorted(G.nodes())\n",
|
|
285
282
|
" matrix = []\n",
|
|
286
|
-
"
|
|
283
|
+
"\n",
|
|
287
284
|
" for target in repos:\n",
|
|
288
285
|
" row = []\n",
|
|
289
286
|
" for source in repos:\n",
|
|
290
287
|
" if G.has_edge(source, target):\n",
|
|
291
|
-
" row.append(G[source][target][
|
|
288
|
+
" row.append(G[source][target][\"weight\"])\n",
|
|
292
289
|
" else:\n",
|
|
293
290
|
" row.append(0)\n",
|
|
294
291
|
" matrix.append(row)\n",
|
|
295
|
-
"
|
|
292
|
+
"\n",
|
|
296
293
|
" # Create heatmap\n",
|
|
297
|
-
" fig = go.Figure(
|
|
298
|
-
"
|
|
299
|
-
"
|
|
300
|
-
"
|
|
301
|
-
"
|
|
302
|
-
"
|
|
303
|
-
"
|
|
304
|
-
"
|
|
305
|
-
"
|
|
306
|
-
"
|
|
307
|
-
"
|
|
294
|
+
" fig = go.Figure(\n",
|
|
295
|
+
" data=go.Heatmap(\n",
|
|
296
|
+
" z=matrix,\n",
|
|
297
|
+
" x=[r.split(\"/\")[-1] for r in repos],\n",
|
|
298
|
+
" y=[r.split(\"/\")[-1] for r in repos],\n",
|
|
299
|
+
" colorscale=\"Blues\",\n",
|
|
300
|
+
" text=[\n",
|
|
301
|
+
" [str(val) if val > 0 else \"\" for val in row] for row in matrix\n",
|
|
302
|
+
" ],\n",
|
|
303
|
+
" texttemplate=\"%{text}\",\n",
|
|
304
|
+
" textfont={\"size\": 10},\n",
|
|
305
|
+
" hovertemplate=\"%{y} depends on %{x}<br>Dependencies: %{z}<extra></extra>\",\n",
|
|
306
|
+
" )\n",
|
|
307
|
+
" )\n",
|
|
308
|
+
"\n",
|
|
308
309
|
" fig.update_layout(\n",
|
|
309
310
|
" title=\"Repository Dependency Matrix\",\n",
|
|
310
311
|
" xaxis_title=\"Dependency (Producer)\",\n",
|
|
311
312
|
" yaxis_title=\"Dependent (Consumer)\",\n",
|
|
312
|
-
" xaxis={
|
|
313
|
-
" yaxis={
|
|
313
|
+
" xaxis={\"side\": \"bottom\"},\n",
|
|
314
|
+
" yaxis={\"autorange\": \"reversed\"},\n",
|
|
314
315
|
" )"
|
|
315
316
|
]
|
|
316
317
|
},
|
|
@@ -371,14 +372,14 @@
|
|
|
371
372
|
],
|
|
372
373
|
"source": [
|
|
373
374
|
"# Display release order as copyable text\n",
|
|
374
|
-
"if
|
|
375
|
+
"if \"release_order_list\" in locals() and len(release_order_list) > 0:\n",
|
|
375
376
|
" print(\"SUGGESTED RELEASE ORDER\")\n",
|
|
376
377
|
" print(\"=\" * 50)\n",
|
|
377
378
|
" print(\"Copy the list below for your release planning:\\n\")\n",
|
|
378
|
-
"
|
|
379
|
+
"\n",
|
|
379
380
|
" for i, repo in enumerate(release_order_list):\n",
|
|
380
381
|
" print(f\"{i+1}. {repo}\")\n",
|
|
381
|
-
"
|
|
382
|
+
"\n",
|
|
382
383
|
" if has_cycles:\n",
|
|
383
384
|
" print(\"\\n⚠️ WARNING: Circular dependencies detected!\")\n",
|
|
384
385
|
" print(\"The following repositories have circular dependencies:\")\n",
|
|
@@ -469,20 +470,20 @@
|
|
|
469
470
|
],
|
|
470
471
|
"source": [
|
|
471
472
|
"# Alternative format - comma-separated list for easy copy/paste\n",
|
|
472
|
-
"if
|
|
473
|
+
"if \"release_order_list\" in locals() and len(release_order_list) > 0:\n",
|
|
473
474
|
" print(\"\\nCOMMA-SEPARATED FORMAT:\")\n",
|
|
474
475
|
" print(\"=\" * 50)\n",
|
|
475
476
|
" print(\"Copy this for scripts or CI/CD pipelines:\\n\")\n",
|
|
476
477
|
" print(\",\".join(release_order_list))\n",
|
|
477
|
-
"
|
|
478
|
+
"\n",
|
|
478
479
|
" # Also provide in tiers for parallel releases\n",
|
|
479
|
-
" if
|
|
480
|
+
" if \"tiers_assignment\" in locals():\n",
|
|
480
481
|
" print(\"\\n\\nRELEASE TIERS (can be released in parallel within each tier):\")\n",
|
|
481
482
|
" print(\"=\" * 50)\n",
|
|
482
483
|
" tier_groups = defaultdict(list)\n",
|
|
483
484
|
" for repo, tier in tiers_assignment.items():\n",
|
|
484
485
|
" tier_groups[tier].append(repo)\n",
|
|
485
|
-
"
|
|
486
|
+
"\n",
|
|
486
487
|
" for tier in sorted(tier_groups.keys()):\n",
|
|
487
488
|
" print(f\"\\nTier {tier + 1}:\")\n",
|
|
488
489
|
" for repo in tier_groups[tier]:\n",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: moderne_visualizations_misc
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 1.0.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
|
|
@@ -10,12 +10,12 @@ License-File: LICENSE
|
|
|
10
10
|
Requires-Dist: code-data-science==2.1.2
|
|
11
11
|
Requires-Dist: graphviz==0.20.1
|
|
12
12
|
Requires-Dist: ipython==8.13.0
|
|
13
|
-
Requires-Dist: matplotlib
|
|
13
|
+
Requires-Dist: matplotlib<4.0,>=3.8
|
|
14
14
|
Requires-Dist: nbformat==5.9.0
|
|
15
15
|
Requires-Dist: pandas==2.0.3
|
|
16
16
|
Requires-Dist: plotly==5.14.1
|
|
17
17
|
Requires-Dist: typing-extensions
|
|
18
18
|
Requires-Dist: umap-learn==0.5.5
|
|
19
19
|
Requires-Dist: networkx==3.1
|
|
20
|
-
Requires-Dist: numpy
|
|
20
|
+
Requires-Dist: numpy<2.0,>=1.26
|
|
21
21
|
Dynamic: license-file
|
{moderne_visualizations_misc-0.76.0.dist-info → moderne_visualizations_misc-1.0.0.dist-info}/RECORD
RENAMED
|
@@ -5,9 +5,9 @@ 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=QVvc-gZEQa1qgYaWc5lODA9bWEhQ-NqX51a38EMN8XI,1950
|
|
7
7
|
moderne_visualizations_misc/comment_language_distribution.ipynb,sha256=8SqQPSOxMpS-oJzUQbDSnmz7tIUky-M_zFYqsxdsxLo,3157
|
|
8
|
-
moderne_visualizations_misc/composite_recipe_results_sankey.ipynb,sha256=
|
|
9
|
-
moderne_visualizations_misc/cyclomatic_complexity_heatmap.ipynb,sha256=
|
|
10
|
-
moderne_visualizations_misc/cyclomatic_complexity_risk_matrix.ipynb,sha256=
|
|
8
|
+
moderne_visualizations_misc/composite_recipe_results_sankey.ipynb,sha256=cj3NpL-oFjqmkzKh5TsgyzWXr9yEPx9jaYHABCYhM3E,6170
|
|
9
|
+
moderne_visualizations_misc/cyclomatic_complexity_heatmap.ipynb,sha256=MWTlbFWBxgmWXvAM8WullLLVLoMkIUaPizOU0Wa-xaA,9202
|
|
10
|
+
moderne_visualizations_misc/cyclomatic_complexity_risk_matrix.ipynb,sha256=GsLcZBpVywDqNCA-j4lpUFCHEDWkR__mLrn62k36iqs,46353
|
|
11
11
|
moderne_visualizations_misc/dependency_tree_view.ipynb,sha256=rcW9LQzn_zNM7wnjOq1YA0B9ybzZPdrTRcc2VqzLOfs,2983
|
|
12
12
|
moderne_visualizations_misc/dependency_tree_view_nodejs.ipynb,sha256=YQRFdXkRwedWxEqe6G5ugqiU_aHPiRVFwPHQRyo0r5w,674
|
|
13
13
|
moderne_visualizations_misc/dependency_tree_view_nodejs_build_tools.ipynb,sha256=YQRFdXkRwedWxEqe6G5ugqiU_aHPiRVFwPHQRyo0r5w,674
|
|
@@ -22,7 +22,7 @@ moderne_visualizations_misc/dependency_tree_view_nodejs_testing.ipynb,sha256=YQR
|
|
|
22
22
|
moderne_visualizations_misc/dependency_tree_view_nodejs_ui.ipynb,sha256=YQRFdXkRwedWxEqe6G5ugqiU_aHPiRVFwPHQRyo0r5w,674
|
|
23
23
|
moderne_visualizations_misc/dependency_tree_view_nodejs_utility.ipynb,sha256=YQRFdXkRwedWxEqe6G5ugqiU_aHPiRVFwPHQRyo0r5w,674
|
|
24
24
|
moderne_visualizations_misc/dependency_usage_violin.ipynb,sha256=G85a4iycHt1lW0HV4VMU1JWjFPL0H_VIkv244Wvz0fk,4593
|
|
25
|
-
moderne_visualizations_misc/dependency_usage_violin_gradle.ipynb,sha256=
|
|
25
|
+
moderne_visualizations_misc/dependency_usage_violin_gradle.ipynb,sha256=NEuiR0JTt_vdijPNDwjcJh1OyOV6FSw2xQAU6hJ7k-4,4706
|
|
26
26
|
moderne_visualizations_misc/dependency_usage_violin_jackson.ipynb,sha256=G85a4iycHt1lW0HV4VMU1JWjFPL0H_VIkv244Wvz0fk,4593
|
|
27
27
|
moderne_visualizations_misc/dependency_usage_violin_maven.ipynb,sha256=G85a4iycHt1lW0HV4VMU1JWjFPL0H_VIkv244Wvz0fk,4593
|
|
28
28
|
moderne_visualizations_misc/dependency_usage_violin_nodejs.ipynb,sha256=Y8rXBULhhbgGSyZOvfXNc5l-XE3R622neBbkD3fJXgU,756
|
|
@@ -38,7 +38,7 @@ moderne_visualizations_misc/dependency_usage_violin_nodejs_testing.ipynb,sha256=
|
|
|
38
38
|
moderne_visualizations_misc/dependency_usage_violin_nodejs_ui.ipynb,sha256=Y8rXBULhhbgGSyZOvfXNc5l-XE3R622neBbkD3fJXgU,756
|
|
39
39
|
moderne_visualizations_misc/dependency_usage_violin_nodejs_utility.ipynb,sha256=Y8rXBULhhbgGSyZOvfXNc5l-XE3R622neBbkD3fJXgU,756
|
|
40
40
|
moderne_visualizations_misc/dependency_usage_violin_nuget.ipynb,sha256=G85a4iycHt1lW0HV4VMU1JWjFPL0H_VIkv244Wvz0fk,4593
|
|
41
|
-
moderne_visualizations_misc/dependency_vulnerabilities.ipynb,sha256=
|
|
41
|
+
moderne_visualizations_misc/dependency_vulnerabilities.ipynb,sha256=VHF5aqrAKCt4QH1557XKZVMg7ne5fofZo_HvDwZBRc0,41400
|
|
42
42
|
moderne_visualizations_misc/dependency_vulnerabilities_npm.ipynb,sha256=5UhKkDcEExWfp12UZCii01bSG5UwbK0OVDISMl0-eIk,33438
|
|
43
43
|
moderne_visualizations_misc/dependency_vulnerabilities_nuget.ipynb,sha256=ZV6OHkvv2JB9K6Q_3N6h5SWWZ6EYGkpz7Eh3Nj8LOTo,33438
|
|
44
44
|
moderne_visualizations_misc/effective_maven_settings.ipynb,sha256=aeSNYIKY2RoCsEE3N8FHLOFYKUqmnD0Lh30kKS9_SdQ,1109
|
|
@@ -62,7 +62,7 @@ moderne_visualizations_misc/maven_parent_poms.ipynb,sha256=dOB7Q89Xt1ep_n8ovJpE1
|
|
|
62
62
|
moderne_visualizations_misc/parse_failure_stacktraces.ipynb,sha256=0D6bPDY5oQ5BmDST1sfIGvTJSmTTkKVe3ealFfQMXwg,6122
|
|
63
63
|
moderne_visualizations_misc/recipe_performance.ipynb,sha256=b58bW7-moZNDApW66EOtsdnmWwwnJia6rsFgqepfN00,4228
|
|
64
64
|
moderne_visualizations_misc/recommendations.ipynb,sha256=z5GQMPjTLAi2wIosjTQwb7IA5j07uhQyFo-cvXmxTVQ,4171
|
|
65
|
-
moderne_visualizations_misc/repository_release_order.ipynb,sha256=
|
|
65
|
+
moderne_visualizations_misc/repository_release_order.ipynb,sha256=oC81k1GPTVXtsnos8qFR12jFx9anVyNRxa8M_6EodmE,93514
|
|
66
66
|
moderne_visualizations_misc/spring_component_relationships.ipynb,sha256=sQglDbEQ174QP2mN3Heo50E-CeVQrJ6x6A1RW1ABl-k,6997
|
|
67
67
|
moderne_visualizations_misc/spring_component_relationships_data_grid.ipynb,sha256=NkG9VjcnqR42WOZEhdPwBls29RWNkFo_SiSzKM4NTp4,1977
|
|
68
68
|
moderne_visualizations_misc/spring_components_data_grid.ipynb,sha256=yV_YGA5OOXUzDRRGzAMxDGpeigwS1S5ZRsrvzCGvGJI,1704
|
|
@@ -207,8 +207,8 @@ moderne_visualizations_misc/specs/sql_crud.yml,sha256=BaUV1bb3oJNrNARU-0YAez2S2y
|
|
|
207
207
|
moderne_visualizations_misc/specs/text_matches_tree_grid.yml,sha256=U2-j_kFaHNex5avmPtzw_6AWUs9JKk_ouCyqdJBThp4,903
|
|
208
208
|
moderne_visualizations_misc/specs/ui5lint_rule_treemap.yml,sha256=6g01v1eD93cvtS7GnRfzScunx_X5u9fjn2ax5SHCVsE,258
|
|
209
209
|
moderne_visualizations_misc/specs/ui5lint_violations_heatmap.yml,sha256=Ep97JEK5xjQkAjmHJNKPAoiIiDeuvksjnx_UREZTAbI,275
|
|
210
|
-
moderne_visualizations_misc-0.
|
|
211
|
-
moderne_visualizations_misc-0.
|
|
212
|
-
moderne_visualizations_misc-0.
|
|
213
|
-
moderne_visualizations_misc-0.
|
|
214
|
-
moderne_visualizations_misc-0.
|
|
210
|
+
moderne_visualizations_misc-1.0.0.dist-info/licenses/LICENSE,sha256=pZ0V1FCfYWEBq1HGfAu1YGXwvyPTt33YYwNwaF0ms3w,11343
|
|
211
|
+
moderne_visualizations_misc-1.0.0.dist-info/METADATA,sha256=hzTOSAz8Mm_YNh39YSnN-hTnovqdFIFbTlnvBKEmKdA,736
|
|
212
|
+
moderne_visualizations_misc-1.0.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
213
|
+
moderne_visualizations_misc-1.0.0.dist-info/top_level.txt,sha256=V_gviHcBSH6w_h-g98-9ecQRoN8d82cxPdV-DA3Leeo,28
|
|
214
|
+
moderne_visualizations_misc-1.0.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|