okstra 0.130.4 → 0.131.1
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.
- package/README.md +0 -1
- package/docs/architecture.md +2 -2
- package/docs/cli.md +1 -1
- package/docs/for-ai/README.md +0 -2
- package/docs/for-ai/skills/okstra-run.md +13 -2
- package/docs/for-ai/skills/okstra-setup.md +4 -1
- package/docs/project-structure-overview.md +5 -4
- package/docs/task-process/implementation-planning.md +13 -0
- package/docs/task-process/implementation.md +17 -2
- package/package.json +1 -1
- package/runtime/BUILD.json +2 -2
- package/runtime/agents/workers/report-writer-worker.md +7 -0
- package/runtime/bin/lib/okstra/usage.sh +4 -4
- package/runtime/prompts/lead/okstra-lead-contract.md +2 -2
- package/runtime/prompts/lead/plan-body-verification.md +26 -5
- package/runtime/prompts/lead/report-writer.md +6 -2
- package/runtime/prompts/profiles/_common-contract.md +2 -1
- package/runtime/prompts/profiles/_implementation-deliverable.md +6 -1
- package/runtime/prompts/profiles/_implementation-executor.md +2 -2
- package/runtime/prompts/profiles/_implementation-verifier.md +33 -10
- package/runtime/prompts/profiles/final-verification.md +21 -6
- package/runtime/prompts/profiles/implementation-planning.md +16 -4
- package/runtime/python/okstra_ctl/codex_dispatch.py +31 -0
- package/runtime/python/okstra_ctl/conformance.py +49 -11
- package/runtime/python/okstra_ctl/report_finalize.py +52 -1
- package/runtime/python/okstra_ctl/run.py +15 -3
- package/runtime/python/okstra_ctl/worker_prompt_contract.py +14 -6
- package/runtime/python/okstra_ctl/worker_prompt_policy.py +19 -1
- package/runtime/python/okstra_vendor/__init__.py +0 -44
- package/runtime/schemas/final-report-v1.0.schema.json +99 -5
- package/runtime/skills/okstra-run/SKILL.md +11 -4
- package/runtime/skills/okstra-setup/SKILL.md +3 -2
- package/runtime/skills/okstra-setup/references/project-config.md +16 -7
- package/runtime/templates/reports/final-report.template.md +15 -9
- package/runtime/templates/reports/i18n/en.json +1 -0
- package/runtime/templates/reports/i18n/ko.json +1 -0
- package/runtime/validators/lib/fixtures.sh +6 -0
- package/runtime/validators/validate-run.py +2019 -96
- package/src/cli-registry.mjs +0 -7
- package/src/commands/lifecycle/doctor.mjs +0 -9
- package/src/lib/skill-catalog.mjs +0 -1
- package/docs/for-ai/skills/okstra-graphify.md +0 -64
- package/runtime/python/okstra_ctl/graphify_cmd.py +0 -225
- package/runtime/python/okstra_vendor/graphify/.vendored-version +0 -1
- package/runtime/python/okstra_vendor/graphify/__init__.py +0 -28
- package/runtime/python/okstra_vendor/graphify/__main__.py +0 -1371
- package/runtime/python/okstra_vendor/graphify/analyze.py +0 -540
- package/runtime/python/okstra_vendor/graphify/benchmark.py +0 -129
- package/runtime/python/okstra_vendor/graphify/build.py +0 -107
- package/runtime/python/okstra_vendor/graphify/cache.py +0 -169
- package/runtime/python/okstra_vendor/graphify/cluster.py +0 -137
- package/runtime/python/okstra_vendor/graphify/detect.py +0 -510
- package/runtime/python/okstra_vendor/graphify/export.py +0 -1014
- package/runtime/python/okstra_vendor/graphify/extract.py +0 -3277
- package/runtime/python/okstra_vendor/graphify/hooks.py +0 -220
- package/runtime/python/okstra_vendor/graphify/ingest.py +0 -297
- package/runtime/python/okstra_vendor/graphify/manifest.py +0 -4
- package/runtime/python/okstra_vendor/graphify/report.py +0 -175
- package/runtime/python/okstra_vendor/graphify/security.py +0 -203
- package/runtime/python/okstra_vendor/graphify/serve.py +0 -373
- package/runtime/python/okstra_vendor/graphify/skill-aider.md +0 -1184
- package/runtime/python/okstra_vendor/graphify/skill-claw.md +0 -1184
- package/runtime/python/okstra_vendor/graphify/skill-codex.md +0 -1242
- package/runtime/python/okstra_vendor/graphify/skill-copilot.md +0 -1268
- package/runtime/python/okstra_vendor/graphify/skill-droid.md +0 -1239
- package/runtime/python/okstra_vendor/graphify/skill-kiro.md +0 -1183
- package/runtime/python/okstra_vendor/graphify/skill-opencode.md +0 -1238
- package/runtime/python/okstra_vendor/graphify/skill-trae.md +0 -1208
- package/runtime/python/okstra_vendor/graphify/skill-vscode.md +0 -253
- package/runtime/python/okstra_vendor/graphify/skill-windows.md +0 -1245
- package/runtime/python/okstra_vendor/graphify/skill.md +0 -1319
- package/runtime/python/okstra_vendor/graphify/transcribe.py +0 -182
- package/runtime/python/okstra_vendor/graphify/validate.py +0 -72
- package/runtime/python/okstra_vendor/graphify/watch.py +0 -188
- package/runtime/python/okstra_vendor/graphify/wiki.py +0 -214
- package/runtime/python/okstra_vendor/networkx/__init__.py +0 -62
- package/runtime/python/okstra_vendor/networkx/algorithms/__init__.py +0 -134
- package/runtime/python/okstra_vendor/networkx/algorithms/approximation/__init__.py +0 -26
- package/runtime/python/okstra_vendor/networkx/algorithms/approximation/clique.py +0 -259
- package/runtime/python/okstra_vendor/networkx/algorithms/approximation/clustering_coefficient.py +0 -71
- package/runtime/python/okstra_vendor/networkx/algorithms/approximation/connectivity.py +0 -412
- package/runtime/python/okstra_vendor/networkx/algorithms/approximation/density.py +0 -396
- package/runtime/python/okstra_vendor/networkx/algorithms/approximation/distance_measures.py +0 -150
- package/runtime/python/okstra_vendor/networkx/algorithms/approximation/dominating_set.py +0 -149
- package/runtime/python/okstra_vendor/networkx/algorithms/approximation/kcomponents.py +0 -369
- package/runtime/python/okstra_vendor/networkx/algorithms/approximation/matching.py +0 -44
- package/runtime/python/okstra_vendor/networkx/algorithms/approximation/maxcut.py +0 -143
- package/runtime/python/okstra_vendor/networkx/algorithms/approximation/ramsey.py +0 -53
- package/runtime/python/okstra_vendor/networkx/algorithms/approximation/steinertree.py +0 -265
- package/runtime/python/okstra_vendor/networkx/algorithms/approximation/traveling_salesman.py +0 -1508
- package/runtime/python/okstra_vendor/networkx/algorithms/approximation/treewidth.py +0 -255
- package/runtime/python/okstra_vendor/networkx/algorithms/approximation/vertex_cover.py +0 -83
- package/runtime/python/okstra_vendor/networkx/algorithms/assortativity/__init__.py +0 -5
- package/runtime/python/okstra_vendor/networkx/algorithms/assortativity/connectivity.py +0 -122
- package/runtime/python/okstra_vendor/networkx/algorithms/assortativity/correlation.py +0 -302
- package/runtime/python/okstra_vendor/networkx/algorithms/assortativity/mixing.py +0 -255
- package/runtime/python/okstra_vendor/networkx/algorithms/assortativity/neighbor_degree.py +0 -160
- package/runtime/python/okstra_vendor/networkx/algorithms/assortativity/pairs.py +0 -127
- package/runtime/python/okstra_vendor/networkx/algorithms/asteroidal.py +0 -164
- package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/__init__.py +0 -88
- package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/basic.py +0 -322
- package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/centrality.py +0 -290
- package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/cluster.py +0 -289
- package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/covering.py +0 -57
- package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/edgelist.py +0 -360
- package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/extendability.py +0 -105
- package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/generators.py +0 -603
- package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/link_analysis.py +0 -316
- package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/matching.py +0 -590
- package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/matrix.py +0 -232
- package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/projection.py +0 -526
- package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/redundancy.py +0 -112
- package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/spectral.py +0 -69
- package/runtime/python/okstra_vendor/networkx/algorithms/boundary.py +0 -168
- package/runtime/python/okstra_vendor/networkx/algorithms/bridges.py +0 -205
- package/runtime/python/okstra_vendor/networkx/algorithms/broadcasting.py +0 -164
- package/runtime/python/okstra_vendor/networkx/algorithms/centrality/__init__.py +0 -20
- package/runtime/python/okstra_vendor/networkx/algorithms/centrality/betweenness.py +0 -591
- package/runtime/python/okstra_vendor/networkx/algorithms/centrality/betweenness_subset.py +0 -236
- package/runtime/python/okstra_vendor/networkx/algorithms/centrality/closeness.py +0 -282
- package/runtime/python/okstra_vendor/networkx/algorithms/centrality/current_flow_betweenness.py +0 -364
- package/runtime/python/okstra_vendor/networkx/algorithms/centrality/current_flow_betweenness_subset.py +0 -227
- package/runtime/python/okstra_vendor/networkx/algorithms/centrality/current_flow_closeness.py +0 -96
- package/runtime/python/okstra_vendor/networkx/algorithms/centrality/degree_alg.py +0 -150
- package/runtime/python/okstra_vendor/networkx/algorithms/centrality/dispersion.py +0 -107
- package/runtime/python/okstra_vendor/networkx/algorithms/centrality/eigenvector.py +0 -357
- package/runtime/python/okstra_vendor/networkx/algorithms/centrality/flow_matrix.py +0 -130
- package/runtime/python/okstra_vendor/networkx/algorithms/centrality/group.py +0 -787
- package/runtime/python/okstra_vendor/networkx/algorithms/centrality/harmonic.py +0 -88
- package/runtime/python/okstra_vendor/networkx/algorithms/centrality/katz.py +0 -331
- package/runtime/python/okstra_vendor/networkx/algorithms/centrality/laplacian.py +0 -150
- package/runtime/python/okstra_vendor/networkx/algorithms/centrality/load.py +0 -200
- package/runtime/python/okstra_vendor/networkx/algorithms/centrality/percolation.py +0 -128
- package/runtime/python/okstra_vendor/networkx/algorithms/centrality/reaching.py +0 -209
- package/runtime/python/okstra_vendor/networkx/algorithms/centrality/second_order.py +0 -141
- package/runtime/python/okstra_vendor/networkx/algorithms/centrality/subgraph_alg.py +0 -361
- package/runtime/python/okstra_vendor/networkx/algorithms/centrality/trophic.py +0 -181
- package/runtime/python/okstra_vendor/networkx/algorithms/centrality/voterank_alg.py +0 -95
- package/runtime/python/okstra_vendor/networkx/algorithms/chains.py +0 -172
- package/runtime/python/okstra_vendor/networkx/algorithms/chordal.py +0 -443
- package/runtime/python/okstra_vendor/networkx/algorithms/clique.py +0 -818
- package/runtime/python/okstra_vendor/networkx/algorithms/cluster.py +0 -732
- package/runtime/python/okstra_vendor/networkx/algorithms/coloring/__init__.py +0 -4
- package/runtime/python/okstra_vendor/networkx/algorithms/coloring/equitable_coloring.py +0 -505
- package/runtime/python/okstra_vendor/networkx/algorithms/coloring/greedy_coloring.py +0 -565
- package/runtime/python/okstra_vendor/networkx/algorithms/communicability_alg.py +0 -163
- package/runtime/python/okstra_vendor/networkx/algorithms/community/__init__.py +0 -28
- package/runtime/python/okstra_vendor/networkx/algorithms/community/asyn_fluid.py +0 -153
- package/runtime/python/okstra_vendor/networkx/algorithms/community/bipartitions.py +0 -354
- package/runtime/python/okstra_vendor/networkx/algorithms/community/centrality.py +0 -171
- package/runtime/python/okstra_vendor/networkx/algorithms/community/community_utils.py +0 -30
- package/runtime/python/okstra_vendor/networkx/algorithms/community/divisive.py +0 -216
- package/runtime/python/okstra_vendor/networkx/algorithms/community/kclique.py +0 -79
- package/runtime/python/okstra_vendor/networkx/algorithms/community/label_propagation.py +0 -338
- package/runtime/python/okstra_vendor/networkx/algorithms/community/leiden.py +0 -162
- package/runtime/python/okstra_vendor/networkx/algorithms/community/local.py +0 -220
- package/runtime/python/okstra_vendor/networkx/algorithms/community/louvain.py +0 -384
- package/runtime/python/okstra_vendor/networkx/algorithms/community/lukes.py +0 -227
- package/runtime/python/okstra_vendor/networkx/algorithms/community/modularity_max.py +0 -452
- package/runtime/python/okstra_vendor/networkx/algorithms/community/quality.py +0 -347
- package/runtime/python/okstra_vendor/networkx/algorithms/components/__init__.py +0 -6
- package/runtime/python/okstra_vendor/networkx/algorithms/components/attracting.py +0 -115
- package/runtime/python/okstra_vendor/networkx/algorithms/components/biconnected.py +0 -394
- package/runtime/python/okstra_vendor/networkx/algorithms/components/connected.py +0 -282
- package/runtime/python/okstra_vendor/networkx/algorithms/components/semiconnected.py +0 -71
- package/runtime/python/okstra_vendor/networkx/algorithms/components/strongly_connected.py +0 -359
- package/runtime/python/okstra_vendor/networkx/algorithms/components/weakly_connected.py +0 -196
- package/runtime/python/okstra_vendor/networkx/algorithms/connectivity/__init__.py +0 -11
- package/runtime/python/okstra_vendor/networkx/algorithms/connectivity/connectivity.py +0 -811
- package/runtime/python/okstra_vendor/networkx/algorithms/connectivity/cuts.py +0 -616
- package/runtime/python/okstra_vendor/networkx/algorithms/connectivity/disjoint_paths.py +0 -408
- package/runtime/python/okstra_vendor/networkx/algorithms/connectivity/edge_augmentation.py +0 -1270
- package/runtime/python/okstra_vendor/networkx/algorithms/connectivity/edge_kcomponents.py +0 -592
- package/runtime/python/okstra_vendor/networkx/algorithms/connectivity/kcomponents.py +0 -220
- package/runtime/python/okstra_vendor/networkx/algorithms/connectivity/kcutsets.py +0 -235
- package/runtime/python/okstra_vendor/networkx/algorithms/connectivity/stoerwagner.py +0 -152
- package/runtime/python/okstra_vendor/networkx/algorithms/connectivity/utils.py +0 -88
- package/runtime/python/okstra_vendor/networkx/algorithms/core.py +0 -588
- package/runtime/python/okstra_vendor/networkx/algorithms/covering.py +0 -142
- package/runtime/python/okstra_vendor/networkx/algorithms/cuts.py +0 -416
- package/runtime/python/okstra_vendor/networkx/algorithms/cycles.py +0 -1234
- package/runtime/python/okstra_vendor/networkx/algorithms/d_separation.py +0 -677
- package/runtime/python/okstra_vendor/networkx/algorithms/dag.py +0 -1392
- package/runtime/python/okstra_vendor/networkx/algorithms/distance_measures.py +0 -1095
- package/runtime/python/okstra_vendor/networkx/algorithms/distance_regular.py +0 -272
- package/runtime/python/okstra_vendor/networkx/algorithms/dominance.py +0 -142
- package/runtime/python/okstra_vendor/networkx/algorithms/dominating.py +0 -268
- package/runtime/python/okstra_vendor/networkx/algorithms/efficiency_measures.py +0 -167
- package/runtime/python/okstra_vendor/networkx/algorithms/euler.py +0 -470
- package/runtime/python/okstra_vendor/networkx/algorithms/flow/__init__.py +0 -11
- package/runtime/python/okstra_vendor/networkx/algorithms/flow/boykovkolmogorov.py +0 -370
- package/runtime/python/okstra_vendor/networkx/algorithms/flow/capacityscaling.py +0 -407
- package/runtime/python/okstra_vendor/networkx/algorithms/flow/dinitz_alg.py +0 -238
- package/runtime/python/okstra_vendor/networkx/algorithms/flow/edmondskarp.py +0 -241
- package/runtime/python/okstra_vendor/networkx/algorithms/flow/gomory_hu.py +0 -178
- package/runtime/python/okstra_vendor/networkx/algorithms/flow/maxflow.py +0 -611
- package/runtime/python/okstra_vendor/networkx/algorithms/flow/mincost.py +0 -356
- package/runtime/python/okstra_vendor/networkx/algorithms/flow/networksimplex.py +0 -662
- package/runtime/python/okstra_vendor/networkx/algorithms/flow/preflowpush.py +0 -425
- package/runtime/python/okstra_vendor/networkx/algorithms/flow/shortestaugmentingpath.py +0 -300
- package/runtime/python/okstra_vendor/networkx/algorithms/flow/utils.py +0 -194
- package/runtime/python/okstra_vendor/networkx/algorithms/graph_hashing.py +0 -435
- package/runtime/python/okstra_vendor/networkx/algorithms/graphical.py +0 -483
- package/runtime/python/okstra_vendor/networkx/algorithms/hierarchy.py +0 -57
- package/runtime/python/okstra_vendor/networkx/algorithms/hybrid.py +0 -196
- package/runtime/python/okstra_vendor/networkx/algorithms/isolate.py +0 -107
- package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/__init__.py +0 -7
- package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/ismags.py +0 -1306
- package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/isomorph.py +0 -336
- package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/isomorphvf2.py +0 -1262
- package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/matchhelpers.py +0 -352
- package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/temporalisomorphvf2.py +0 -308
- package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/tree_isomorphism.py +0 -264
- package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/vf2pp.py +0 -1102
- package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/vf2userfunc.py +0 -192
- package/runtime/python/okstra_vendor/networkx/algorithms/link_analysis/__init__.py +0 -2
- package/runtime/python/okstra_vendor/networkx/algorithms/link_analysis/hits_alg.py +0 -337
- package/runtime/python/okstra_vendor/networkx/algorithms/link_analysis/pagerank_alg.py +0 -498
- package/runtime/python/okstra_vendor/networkx/algorithms/link_prediction.py +0 -687
- package/runtime/python/okstra_vendor/networkx/algorithms/lowest_common_ancestors.py +0 -280
- package/runtime/python/okstra_vendor/networkx/algorithms/matching.py +0 -1148
- package/runtime/python/okstra_vendor/networkx/algorithms/minors/__init__.py +0 -27
- package/runtime/python/okstra_vendor/networkx/algorithms/minors/contraction.py +0 -738
- package/runtime/python/okstra_vendor/networkx/algorithms/mis.py +0 -78
- package/runtime/python/okstra_vendor/networkx/algorithms/moral.py +0 -59
- package/runtime/python/okstra_vendor/networkx/algorithms/node_classification.py +0 -219
- package/runtime/python/okstra_vendor/networkx/algorithms/non_randomness.py +0 -155
- package/runtime/python/okstra_vendor/networkx/algorithms/operators/__init__.py +0 -4
- package/runtime/python/okstra_vendor/networkx/algorithms/operators/all.py +0 -324
- package/runtime/python/okstra_vendor/networkx/algorithms/operators/binary.py +0 -468
- package/runtime/python/okstra_vendor/networkx/algorithms/operators/product.py +0 -633
- package/runtime/python/okstra_vendor/networkx/algorithms/operators/unary.py +0 -77
- package/runtime/python/okstra_vendor/networkx/algorithms/perfect_graph.py +0 -73
- package/runtime/python/okstra_vendor/networkx/algorithms/planar_drawing.py +0 -464
- package/runtime/python/okstra_vendor/networkx/algorithms/planarity.py +0 -1463
- package/runtime/python/okstra_vendor/networkx/algorithms/polynomials.py +0 -306
- package/runtime/python/okstra_vendor/networkx/algorithms/reciprocity.py +0 -98
- package/runtime/python/okstra_vendor/networkx/algorithms/regular.py +0 -167
- package/runtime/python/okstra_vendor/networkx/algorithms/richclub.py +0 -138
- package/runtime/python/okstra_vendor/networkx/algorithms/shortest_paths/__init__.py +0 -5
- package/runtime/python/okstra_vendor/networkx/algorithms/shortest_paths/astar.py +0 -239
- package/runtime/python/okstra_vendor/networkx/algorithms/shortest_paths/dense.py +0 -264
- package/runtime/python/okstra_vendor/networkx/algorithms/shortest_paths/generic.py +0 -716
- package/runtime/python/okstra_vendor/networkx/algorithms/shortest_paths/unweighted.py +0 -625
- package/runtime/python/okstra_vendor/networkx/algorithms/shortest_paths/weighted.py +0 -2542
- package/runtime/python/okstra_vendor/networkx/algorithms/similarity.py +0 -2107
- package/runtime/python/okstra_vendor/networkx/algorithms/simple_paths.py +0 -966
- package/runtime/python/okstra_vendor/networkx/algorithms/smallworld.py +0 -404
- package/runtime/python/okstra_vendor/networkx/algorithms/smetric.py +0 -30
- package/runtime/python/okstra_vendor/networkx/algorithms/sparsifiers.py +0 -296
- package/runtime/python/okstra_vendor/networkx/algorithms/structuralholes.py +0 -374
- package/runtime/python/okstra_vendor/networkx/algorithms/summarization.py +0 -564
- package/runtime/python/okstra_vendor/networkx/algorithms/swap.py +0 -406
- package/runtime/python/okstra_vendor/networkx/algorithms/threshold.py +0 -981
- package/runtime/python/okstra_vendor/networkx/algorithms/time_dependent.py +0 -142
- package/runtime/python/okstra_vendor/networkx/algorithms/tournament.py +0 -406
- package/runtime/python/okstra_vendor/networkx/algorithms/traversal/__init__.py +0 -5
- package/runtime/python/okstra_vendor/networkx/algorithms/traversal/beamsearch.py +0 -90
- package/runtime/python/okstra_vendor/networkx/algorithms/traversal/breadth_first_search.py +0 -576
- package/runtime/python/okstra_vendor/networkx/algorithms/traversal/depth_first_search.py +0 -529
- package/runtime/python/okstra_vendor/networkx/algorithms/traversal/edgebfs.py +0 -185
- package/runtime/python/okstra_vendor/networkx/algorithms/traversal/edgedfs.py +0 -182
- package/runtime/python/okstra_vendor/networkx/algorithms/tree/__init__.py +0 -7
- package/runtime/python/okstra_vendor/networkx/algorithms/tree/branchings.py +0 -1042
- package/runtime/python/okstra_vendor/networkx/algorithms/tree/coding.py +0 -413
- package/runtime/python/okstra_vendor/networkx/algorithms/tree/decomposition.py +0 -88
- package/runtime/python/okstra_vendor/networkx/algorithms/tree/distance_measures.py +0 -219
- package/runtime/python/okstra_vendor/networkx/algorithms/tree/mst.py +0 -1281
- package/runtime/python/okstra_vendor/networkx/algorithms/tree/operations.py +0 -106
- package/runtime/python/okstra_vendor/networkx/algorithms/tree/recognition.py +0 -273
- package/runtime/python/okstra_vendor/networkx/algorithms/triads.py +0 -500
- package/runtime/python/okstra_vendor/networkx/algorithms/vitality.py +0 -76
- package/runtime/python/okstra_vendor/networkx/algorithms/voronoi.py +0 -86
- package/runtime/python/okstra_vendor/networkx/algorithms/walks.py +0 -77
- package/runtime/python/okstra_vendor/networkx/algorithms/wiener.py +0 -278
- package/runtime/python/okstra_vendor/networkx/classes/__init__.py +0 -13
- package/runtime/python/okstra_vendor/networkx/classes/coreviews.py +0 -435
- package/runtime/python/okstra_vendor/networkx/classes/digraph.py +0 -1363
- package/runtime/python/okstra_vendor/networkx/classes/filters.py +0 -95
- package/runtime/python/okstra_vendor/networkx/classes/function.py +0 -1549
- package/runtime/python/okstra_vendor/networkx/classes/graph.py +0 -2082
- package/runtime/python/okstra_vendor/networkx/classes/graphviews.py +0 -269
- package/runtime/python/okstra_vendor/networkx/classes/multidigraph.py +0 -977
- package/runtime/python/okstra_vendor/networkx/classes/multigraph.py +0 -1294
- package/runtime/python/okstra_vendor/networkx/classes/reportviews.py +0 -1447
- package/runtime/python/okstra_vendor/networkx/convert.py +0 -502
- package/runtime/python/okstra_vendor/networkx/convert_matrix.py +0 -1314
- package/runtime/python/okstra_vendor/networkx/drawing/__init__.py +0 -7
- package/runtime/python/okstra_vendor/networkx/drawing/layout.py +0 -2036
- package/runtime/python/okstra_vendor/networkx/drawing/nx_agraph.py +0 -470
- package/runtime/python/okstra_vendor/networkx/drawing/nx_latex.py +0 -570
- package/runtime/python/okstra_vendor/networkx/drawing/nx_pydot.py +0 -361
- package/runtime/python/okstra_vendor/networkx/drawing/nx_pylab.py +0 -2978
- package/runtime/python/okstra_vendor/networkx/exception.py +0 -131
- package/runtime/python/okstra_vendor/networkx/generators/__init__.py +0 -34
- package/runtime/python/okstra_vendor/networkx/generators/atlas.dat.gz +0 -0
- package/runtime/python/okstra_vendor/networkx/generators/atlas.py +0 -227
- package/runtime/python/okstra_vendor/networkx/generators/classic.py +0 -1091
- package/runtime/python/okstra_vendor/networkx/generators/cographs.py +0 -68
- package/runtime/python/okstra_vendor/networkx/generators/community.py +0 -1070
- package/runtime/python/okstra_vendor/networkx/generators/degree_seq.py +0 -886
- package/runtime/python/okstra_vendor/networkx/generators/directed.py +0 -572
- package/runtime/python/okstra_vendor/networkx/generators/duplication.py +0 -174
- package/runtime/python/okstra_vendor/networkx/generators/ego.py +0 -66
- package/runtime/python/okstra_vendor/networkx/generators/expanders.py +0 -499
- package/runtime/python/okstra_vendor/networkx/generators/geometric.py +0 -1037
- package/runtime/python/okstra_vendor/networkx/generators/harary_graph.py +0 -163
- package/runtime/python/okstra_vendor/networkx/generators/internet_as_graphs.py +0 -443
- package/runtime/python/okstra_vendor/networkx/generators/intersection.py +0 -125
- package/runtime/python/okstra_vendor/networkx/generators/interval_graph.py +0 -70
- package/runtime/python/okstra_vendor/networkx/generators/joint_degree_seq.py +0 -664
- package/runtime/python/okstra_vendor/networkx/generators/lattice.py +0 -405
- package/runtime/python/okstra_vendor/networkx/generators/line.py +0 -501
- package/runtime/python/okstra_vendor/networkx/generators/mycielski.py +0 -110
- package/runtime/python/okstra_vendor/networkx/generators/nonisomorphic_trees.py +0 -259
- package/runtime/python/okstra_vendor/networkx/generators/random_clustered.py +0 -117
- package/runtime/python/okstra_vendor/networkx/generators/random_graphs.py +0 -1416
- package/runtime/python/okstra_vendor/networkx/generators/small.py +0 -1070
- package/runtime/python/okstra_vendor/networkx/generators/social.py +0 -554
- package/runtime/python/okstra_vendor/networkx/generators/spectral_graph_forge.py +0 -120
- package/runtime/python/okstra_vendor/networkx/generators/stochastic.py +0 -54
- package/runtime/python/okstra_vendor/networkx/generators/sudoku.py +0 -131
- package/runtime/python/okstra_vendor/networkx/generators/time_series.py +0 -74
- package/runtime/python/okstra_vendor/networkx/generators/trees.py +0 -1070
- package/runtime/python/okstra_vendor/networkx/generators/triads.py +0 -94
- package/runtime/python/okstra_vendor/networkx/lazy_imports.py +0 -188
- package/runtime/python/okstra_vendor/networkx/linalg/__init__.py +0 -13
- package/runtime/python/okstra_vendor/networkx/linalg/algebraicconnectivity.py +0 -650
- package/runtime/python/okstra_vendor/networkx/linalg/attrmatrix.py +0 -466
- package/runtime/python/okstra_vendor/networkx/linalg/bethehessianmatrix.py +0 -77
- package/runtime/python/okstra_vendor/networkx/linalg/graphmatrix.py +0 -168
- package/runtime/python/okstra_vendor/networkx/linalg/laplacianmatrix.py +0 -512
- package/runtime/python/okstra_vendor/networkx/linalg/modularitymatrix.py +0 -166
- package/runtime/python/okstra_vendor/networkx/linalg/spectrum.py +0 -186
- package/runtime/python/okstra_vendor/networkx/readwrite/__init__.py +0 -17
- package/runtime/python/okstra_vendor/networkx/readwrite/adjlist.py +0 -330
- package/runtime/python/okstra_vendor/networkx/readwrite/edgelist.py +0 -489
- package/runtime/python/okstra_vendor/networkx/readwrite/gexf.py +0 -1084
- package/runtime/python/okstra_vendor/networkx/readwrite/gml.py +0 -879
- package/runtime/python/okstra_vendor/networkx/readwrite/graph6.py +0 -427
- package/runtime/python/okstra_vendor/networkx/readwrite/graphml.py +0 -1053
- package/runtime/python/okstra_vendor/networkx/readwrite/json_graph/__init__.py +0 -19
- package/runtime/python/okstra_vendor/networkx/readwrite/json_graph/adjacency.py +0 -156
- package/runtime/python/okstra_vendor/networkx/readwrite/json_graph/cytoscape.py +0 -190
- package/runtime/python/okstra_vendor/networkx/readwrite/json_graph/node_link.py +0 -261
- package/runtime/python/okstra_vendor/networkx/readwrite/json_graph/tree.py +0 -137
- package/runtime/python/okstra_vendor/networkx/readwrite/leda.py +0 -108
- package/runtime/python/okstra_vendor/networkx/readwrite/multiline_adjlist.py +0 -393
- package/runtime/python/okstra_vendor/networkx/readwrite/p2g.py +0 -113
- package/runtime/python/okstra_vendor/networkx/readwrite/pajek.py +0 -286
- package/runtime/python/okstra_vendor/networkx/readwrite/sparse6.py +0 -379
- package/runtime/python/okstra_vendor/networkx/readwrite/text.py +0 -851
- package/runtime/python/okstra_vendor/networkx/relabel.py +0 -285
- package/runtime/python/okstra_vendor/networkx/utils/__init__.py +0 -8
- package/runtime/python/okstra_vendor/networkx/utils/backends.py +0 -2171
- package/runtime/python/okstra_vendor/networkx/utils/configs.py +0 -396
- package/runtime/python/okstra_vendor/networkx/utils/decorators.py +0 -1233
- package/runtime/python/okstra_vendor/networkx/utils/heaps.py +0 -338
- package/runtime/python/okstra_vendor/networkx/utils/mapped_queue.py +0 -297
- package/runtime/python/okstra_vendor/networkx/utils/misc.py +0 -703
- package/runtime/python/okstra_vendor/networkx/utils/random_sequence.py +0 -198
- package/runtime/python/okstra_vendor/networkx/utils/rcm.py +0 -159
- package/runtime/python/okstra_vendor/networkx/utils/union_find.py +0 -106
- package/runtime/skills/okstra-graphify/SKILL.md +0 -169
- package/src/commands/graphify.mjs +0 -32
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
**********
|
|
3
|
-
Exceptions
|
|
4
|
-
**********
|
|
5
|
-
|
|
6
|
-
Base exceptions and errors for NetworkX.
|
|
7
|
-
"""
|
|
8
|
-
|
|
9
|
-
__all__ = [
|
|
10
|
-
"HasACycle",
|
|
11
|
-
"NodeNotFound",
|
|
12
|
-
"PowerIterationFailedConvergence",
|
|
13
|
-
"ExceededMaxIterations",
|
|
14
|
-
"AmbiguousSolution",
|
|
15
|
-
"NetworkXAlgorithmError",
|
|
16
|
-
"NetworkXException",
|
|
17
|
-
"NetworkXError",
|
|
18
|
-
"NetworkXNoCycle",
|
|
19
|
-
"NetworkXNoPath",
|
|
20
|
-
"NetworkXNotImplemented",
|
|
21
|
-
"NetworkXPointlessConcept",
|
|
22
|
-
"NetworkXUnbounded",
|
|
23
|
-
"NetworkXUnfeasible",
|
|
24
|
-
]
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
class NetworkXException(Exception):
|
|
28
|
-
"""Base class for exceptions in NetworkX."""
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
class NetworkXError(NetworkXException):
|
|
32
|
-
"""Exception for a serious error in NetworkX"""
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
class NetworkXPointlessConcept(NetworkXException):
|
|
36
|
-
"""Raised when a null graph is provided as input to an algorithm
|
|
37
|
-
that cannot use it.
|
|
38
|
-
|
|
39
|
-
The null graph is sometimes considered a pointless concept [1]_,
|
|
40
|
-
thus the name of the exception.
|
|
41
|
-
|
|
42
|
-
Notes
|
|
43
|
-
-----
|
|
44
|
-
Null graphs and empty graphs are often used interchangeably but they
|
|
45
|
-
are well defined in NetworkX. An ``empty_graph`` is a graph with ``n`` nodes
|
|
46
|
-
and 0 edges, and a ``null_graph`` is a graph with 0 nodes and 0 edges.
|
|
47
|
-
|
|
48
|
-
References
|
|
49
|
-
----------
|
|
50
|
-
.. [1] Harary, F. and Read, R. "Is the Null Graph a Pointless
|
|
51
|
-
Concept?" In Graphs and Combinatorics Conference, George
|
|
52
|
-
Washington University. New York: Springer-Verlag, 1973.
|
|
53
|
-
|
|
54
|
-
"""
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
class NetworkXAlgorithmError(NetworkXException):
|
|
58
|
-
"""Exception for unexpected termination of algorithms."""
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
class NetworkXUnfeasible(NetworkXAlgorithmError):
|
|
62
|
-
"""Exception raised by algorithms trying to solve a problem
|
|
63
|
-
instance that has no feasible solution."""
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
class NetworkXNoPath(NetworkXUnfeasible):
|
|
67
|
-
"""Exception for algorithms that should return a path when running
|
|
68
|
-
on graphs where such a path does not exist."""
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
class NetworkXNoCycle(NetworkXUnfeasible):
|
|
72
|
-
"""Exception for algorithms that should return a cycle when running
|
|
73
|
-
on graphs where such a cycle does not exist."""
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
class HasACycle(NetworkXException):
|
|
77
|
-
"""Raised if a graph has a cycle when an algorithm expects that it
|
|
78
|
-
will have no cycles.
|
|
79
|
-
|
|
80
|
-
"""
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
class NetworkXUnbounded(NetworkXAlgorithmError):
|
|
84
|
-
"""Exception raised by algorithms trying to solve a maximization
|
|
85
|
-
or a minimization problem instance that is unbounded."""
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
class NetworkXNotImplemented(NetworkXException):
|
|
89
|
-
"""Exception raised by algorithms not implemented for a type of graph."""
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
class NodeNotFound(NetworkXException):
|
|
93
|
-
"""Exception raised if requested node is not present in the graph"""
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
class AmbiguousSolution(NetworkXException):
|
|
97
|
-
"""Raised if more than one valid solution exists for an intermediary step
|
|
98
|
-
of an algorithm.
|
|
99
|
-
|
|
100
|
-
In the face of ambiguity, refuse the temptation to guess.
|
|
101
|
-
This may occur, for example, when trying to determine the
|
|
102
|
-
bipartite node sets in a disconnected bipartite graph when
|
|
103
|
-
computing bipartite matchings.
|
|
104
|
-
|
|
105
|
-
"""
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
class ExceededMaxIterations(NetworkXException):
|
|
109
|
-
"""Raised if a loop iterates too many times without breaking.
|
|
110
|
-
|
|
111
|
-
This may occur, for example, in an algorithm that computes
|
|
112
|
-
progressively better approximations to a value but exceeds an
|
|
113
|
-
iteration bound specified by the user.
|
|
114
|
-
|
|
115
|
-
"""
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
class PowerIterationFailedConvergence(ExceededMaxIterations):
|
|
119
|
-
"""Raised when the power iteration method fails to converge within a
|
|
120
|
-
specified iteration limit.
|
|
121
|
-
|
|
122
|
-
`num_iterations` is the number of iterations that have been
|
|
123
|
-
completed when this exception was raised.
|
|
124
|
-
|
|
125
|
-
"""
|
|
126
|
-
|
|
127
|
-
def __init__(self, num_iterations, *args, **kw):
|
|
128
|
-
msg = f"power iteration failed to converge within {num_iterations} iterations"
|
|
129
|
-
exception_message = msg
|
|
130
|
-
superinit = super().__init__
|
|
131
|
-
superinit(self, exception_message, *args, **kw)
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
A package for generating various graphs in networkx.
|
|
3
|
-
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from networkx.generators.atlas import *
|
|
7
|
-
from networkx.generators.classic import *
|
|
8
|
-
from networkx.generators.cographs import *
|
|
9
|
-
from networkx.generators.community import *
|
|
10
|
-
from networkx.generators.degree_seq import *
|
|
11
|
-
from networkx.generators.directed import *
|
|
12
|
-
from networkx.generators.duplication import *
|
|
13
|
-
from networkx.generators.ego import *
|
|
14
|
-
from networkx.generators.expanders import *
|
|
15
|
-
from networkx.generators.geometric import *
|
|
16
|
-
from networkx.generators.harary_graph import *
|
|
17
|
-
from networkx.generators.internet_as_graphs import *
|
|
18
|
-
from networkx.generators.intersection import *
|
|
19
|
-
from networkx.generators.interval_graph import *
|
|
20
|
-
from networkx.generators.joint_degree_seq import *
|
|
21
|
-
from networkx.generators.lattice import *
|
|
22
|
-
from networkx.generators.line import *
|
|
23
|
-
from networkx.generators.mycielski import *
|
|
24
|
-
from networkx.generators.nonisomorphic_trees import *
|
|
25
|
-
from networkx.generators.random_clustered import *
|
|
26
|
-
from networkx.generators.random_graphs import *
|
|
27
|
-
from networkx.generators.small import *
|
|
28
|
-
from networkx.generators.social import *
|
|
29
|
-
from networkx.generators.spectral_graph_forge import *
|
|
30
|
-
from networkx.generators.stochastic import *
|
|
31
|
-
from networkx.generators.sudoku import *
|
|
32
|
-
from networkx.generators.time_series import *
|
|
33
|
-
from networkx.generators.trees import *
|
|
34
|
-
from networkx.generators.triads import *
|
|
Binary file
|
|
@@ -1,227 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Generators for the small graph atlas.
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
import gzip
|
|
6
|
-
import importlib.resources
|
|
7
|
-
from itertools import islice
|
|
8
|
-
|
|
9
|
-
import networkx as nx
|
|
10
|
-
|
|
11
|
-
__all__ = ["graph_atlas", "graph_atlas_g"]
|
|
12
|
-
|
|
13
|
-
#: The total number of graphs in the atlas.
|
|
14
|
-
#:
|
|
15
|
-
#: The graphs are labeled starting from 0 and extending to (but not
|
|
16
|
-
#: including) this number.
|
|
17
|
-
NUM_GRAPHS = 1253
|
|
18
|
-
|
|
19
|
-
#: The path to the data file containing the graph edge lists.
|
|
20
|
-
#:
|
|
21
|
-
#: This is the absolute path of the gzipped text file containing the
|
|
22
|
-
#: edge list for each graph in the atlas. The file contains one entry
|
|
23
|
-
#: per graph in the atlas, in sequential order, starting from graph
|
|
24
|
-
#: number 0 and extending through graph number 1252 (see
|
|
25
|
-
#: :data:`NUM_GRAPHS`). Each entry looks like
|
|
26
|
-
#:
|
|
27
|
-
#: .. sourcecode:: text
|
|
28
|
-
#:
|
|
29
|
-
#: GRAPH 6
|
|
30
|
-
#: NODES 3
|
|
31
|
-
#: 0 1
|
|
32
|
-
#: 0 2
|
|
33
|
-
#:
|
|
34
|
-
#: where the first two lines are the graph's index in the atlas and the
|
|
35
|
-
#: number of nodes in the graph, and the remaining lines are the edge
|
|
36
|
-
#: list.
|
|
37
|
-
#:
|
|
38
|
-
#: This file was generated from a Python list of graphs via code like
|
|
39
|
-
#: the following::
|
|
40
|
-
#:
|
|
41
|
-
#: import gzip
|
|
42
|
-
#: from networkx.generators.atlas import graph_atlas_g
|
|
43
|
-
#: from networkx.readwrite.edgelist import write_edgelist
|
|
44
|
-
#:
|
|
45
|
-
#: with gzip.open('atlas.dat.gz', 'wb') as f:
|
|
46
|
-
#: for i, G in enumerate(graph_atlas_g()):
|
|
47
|
-
#: f.write(bytes(f'GRAPH {i}\n', encoding='utf-8'))
|
|
48
|
-
#: f.write(bytes(f'NODES {len(G)}\n', encoding='utf-8'))
|
|
49
|
-
#: write_edgelist(G, f, data=False)
|
|
50
|
-
#:
|
|
51
|
-
|
|
52
|
-
# Path to the atlas file
|
|
53
|
-
ATLAS_FILE = importlib.resources.files("networkx.generators") / "atlas.dat.gz"
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
def _generate_graphs():
|
|
57
|
-
"""Sequentially read the file containing the edge list data for the
|
|
58
|
-
graphs in the atlas and generate the graphs one at a time.
|
|
59
|
-
|
|
60
|
-
This function reads the file given in :data:`.ATLAS_FILE`.
|
|
61
|
-
|
|
62
|
-
"""
|
|
63
|
-
with gzip.open(ATLAS_FILE, "rb") as f:
|
|
64
|
-
line = f.readline()
|
|
65
|
-
while line and line.startswith(b"GRAPH"):
|
|
66
|
-
# The first two lines of each entry tell us the index of the
|
|
67
|
-
# graph in the list and the number of nodes in the graph.
|
|
68
|
-
# They look like this:
|
|
69
|
-
#
|
|
70
|
-
# GRAPH 3
|
|
71
|
-
# NODES 2
|
|
72
|
-
#
|
|
73
|
-
graph_index = int(line[6:].rstrip())
|
|
74
|
-
line = f.readline()
|
|
75
|
-
num_nodes = int(line[6:].rstrip())
|
|
76
|
-
# The remaining lines contain the edge list, until the next
|
|
77
|
-
# GRAPH line (or until the end of the file).
|
|
78
|
-
edgelist = []
|
|
79
|
-
line = f.readline()
|
|
80
|
-
while line and not line.startswith(b"GRAPH"):
|
|
81
|
-
edgelist.append(line.rstrip())
|
|
82
|
-
line = f.readline()
|
|
83
|
-
G = nx.Graph()
|
|
84
|
-
G.name = f"G{graph_index}"
|
|
85
|
-
G.add_nodes_from(range(num_nodes))
|
|
86
|
-
G.add_edges_from(tuple(map(int, e.split())) for e in edgelist)
|
|
87
|
-
yield G
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
@nx._dispatchable(graphs=None, returns_graph=True)
|
|
91
|
-
def graph_atlas(i):
|
|
92
|
-
"""Returns graph number `i` from the Graph Atlas.
|
|
93
|
-
|
|
94
|
-
For more information, see :func:`.graph_atlas_g`.
|
|
95
|
-
|
|
96
|
-
Parameters
|
|
97
|
-
----------
|
|
98
|
-
i : int
|
|
99
|
-
The index of the graph from the atlas to get. The graph at index
|
|
100
|
-
0 is assumed to be the null graph.
|
|
101
|
-
|
|
102
|
-
Returns
|
|
103
|
-
-------
|
|
104
|
-
list
|
|
105
|
-
A list of :class:`~networkx.Graph` objects, the one at index *i*
|
|
106
|
-
corresponding to the graph *i* in the Graph Atlas.
|
|
107
|
-
|
|
108
|
-
See also
|
|
109
|
-
--------
|
|
110
|
-
graph_atlas_g
|
|
111
|
-
|
|
112
|
-
Notes
|
|
113
|
-
-----
|
|
114
|
-
The time required by this function increases linearly with the
|
|
115
|
-
argument `i`, since it reads a large file sequentially in order to
|
|
116
|
-
generate the graph [1]_.
|
|
117
|
-
|
|
118
|
-
References
|
|
119
|
-
----------
|
|
120
|
-
.. [1] Ronald C. Read and Robin J. Wilson, *An Atlas of Graphs*.
|
|
121
|
-
Oxford University Press, 1998.
|
|
122
|
-
|
|
123
|
-
"""
|
|
124
|
-
if not (0 <= i < NUM_GRAPHS):
|
|
125
|
-
raise ValueError(f"index must be between 0 and {NUM_GRAPHS}")
|
|
126
|
-
return next(islice(_generate_graphs(), i, None))
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
@nx._dispatchable(graphs=None, returns_graph=True)
|
|
130
|
-
def graph_atlas_g():
|
|
131
|
-
"""Returns the list of all graphs with up to seven nodes named in the
|
|
132
|
-
Graph Atlas.
|
|
133
|
-
|
|
134
|
-
The graphs are listed in increasing order by
|
|
135
|
-
|
|
136
|
-
1. number of nodes,
|
|
137
|
-
2. number of edges,
|
|
138
|
-
3. degree sequence (for example 111223 < 112222),
|
|
139
|
-
4. number of automorphisms,
|
|
140
|
-
|
|
141
|
-
in that order, with three exceptions as described in the *Notes*
|
|
142
|
-
section below. This causes the list to correspond with the index of
|
|
143
|
-
the graphs in the Graph Atlas [atlas]_, with the first graph,
|
|
144
|
-
``G[0]``, being the null graph.
|
|
145
|
-
|
|
146
|
-
Returns
|
|
147
|
-
-------
|
|
148
|
-
list
|
|
149
|
-
A list of :class:`~networkx.Graph` objects, the one at index *i*
|
|
150
|
-
corresponding to the graph *i* in the Graph Atlas.
|
|
151
|
-
|
|
152
|
-
Examples
|
|
153
|
-
--------
|
|
154
|
-
>>> from pprint import pprint
|
|
155
|
-
>>> atlas = nx.graph_atlas_g()
|
|
156
|
-
|
|
157
|
-
There are 1253 graphs in the atlas
|
|
158
|
-
|
|
159
|
-
>>> len(atlas)
|
|
160
|
-
1253
|
|
161
|
-
|
|
162
|
-
The number of graphs with *n* nodes, where *n* ranges from 0 to 7:
|
|
163
|
-
|
|
164
|
-
>>> from collections import Counter
|
|
165
|
-
>>> num_nodes_per_graph = [len(G) for G in atlas]
|
|
166
|
-
>>> Counter(num_nodes_per_graph)
|
|
167
|
-
Counter({7: 1044, 6: 156, 5: 34, 4: 11, 3: 4, 2: 2, 0: 1, 1: 1})
|
|
168
|
-
|
|
169
|
-
Since the atlas is ordered by the number of nodes in the graph, all graphs
|
|
170
|
-
with *n* nodes can be obtained by slicing the atlas. For example, all
|
|
171
|
-
graphs with 5 nodes:
|
|
172
|
-
|
|
173
|
-
>>> G5_list = atlas[19:53]
|
|
174
|
-
>>> all(len(G) == 5 for G in G5_list)
|
|
175
|
-
True
|
|
176
|
-
|
|
177
|
-
Or all graphs with at least 3 nodes but fewer than 7 nodes:
|
|
178
|
-
|
|
179
|
-
>>> G3_6_list = atlas[4:209]
|
|
180
|
-
|
|
181
|
-
More generally, the indices that partition the atlas by the number of nodes
|
|
182
|
-
per graph:
|
|
183
|
-
|
|
184
|
-
>>> import itertools
|
|
185
|
-
>>> partition_indices = [0] + list(
|
|
186
|
-
... itertools.accumulate(Counter(num_nodes_per_graph).values()) # cumsum
|
|
187
|
-
... )
|
|
188
|
-
>>> partition_indices
|
|
189
|
-
[0, 1, 2, 4, 8, 19, 53, 209, 1253]
|
|
190
|
-
>>> partition_mapping = dict(enumerate(itertools.pairwise(partition_indices)))
|
|
191
|
-
>>> pprint(partition_mapping)
|
|
192
|
-
{0: (0, 1),
|
|
193
|
-
1: (1, 2),
|
|
194
|
-
2: (2, 4),
|
|
195
|
-
3: (4, 8),
|
|
196
|
-
4: (8, 19),
|
|
197
|
-
5: (19, 53),
|
|
198
|
-
6: (53, 209),
|
|
199
|
-
7: (209, 1253)}
|
|
200
|
-
|
|
201
|
-
See also
|
|
202
|
-
--------
|
|
203
|
-
graph_atlas
|
|
204
|
-
|
|
205
|
-
Notes
|
|
206
|
-
-----
|
|
207
|
-
This function may be expensive in both time and space, since it
|
|
208
|
-
reads a large file sequentially in order to populate the list.
|
|
209
|
-
|
|
210
|
-
Although the NetworkX atlas functions match the order of graphs
|
|
211
|
-
given in the "Atlas of Graphs" book, there are (at least) three
|
|
212
|
-
errors in the ordering described in the book. The following three
|
|
213
|
-
pairs of nodes violate the lexicographically nondecreasing sorted
|
|
214
|
-
degree sequence rule:
|
|
215
|
-
|
|
216
|
-
- graphs 55 and 56 with degree sequences 001111 and 000112,
|
|
217
|
-
- graphs 1007 and 1008 with degree sequences 3333444 and 3333336,
|
|
218
|
-
- graphs 1012 and 1213 with degree sequences 1244555 and 1244456.
|
|
219
|
-
|
|
220
|
-
References
|
|
221
|
-
----------
|
|
222
|
-
.. [atlas] Ronald C. Read and Robin J. Wilson,
|
|
223
|
-
*An Atlas of Graphs*.
|
|
224
|
-
Oxford University Press, 1998.
|
|
225
|
-
|
|
226
|
-
"""
|
|
227
|
-
return list(_generate_graphs())
|