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,489 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
**********
|
|
3
|
-
Edge Lists
|
|
4
|
-
**********
|
|
5
|
-
Read and write NetworkX graphs as edge lists.
|
|
6
|
-
|
|
7
|
-
The multi-line adjacency list format is useful for graphs with nodes
|
|
8
|
-
that can be meaningfully represented as strings. With the edgelist
|
|
9
|
-
format simple edge data can be stored but node or graph data is not.
|
|
10
|
-
There is no way of representing isolated nodes unless the node has a
|
|
11
|
-
self-loop edge.
|
|
12
|
-
|
|
13
|
-
Format
|
|
14
|
-
------
|
|
15
|
-
You can read or write three formats of edge lists with these functions.
|
|
16
|
-
|
|
17
|
-
Node pairs with no data::
|
|
18
|
-
|
|
19
|
-
1 2
|
|
20
|
-
|
|
21
|
-
Python dictionary as data::
|
|
22
|
-
|
|
23
|
-
1 2 {'weight':7, 'color':'green'}
|
|
24
|
-
|
|
25
|
-
Arbitrary data::
|
|
26
|
-
|
|
27
|
-
1 2 7 green
|
|
28
|
-
"""
|
|
29
|
-
|
|
30
|
-
__all__ = [
|
|
31
|
-
"generate_edgelist",
|
|
32
|
-
"write_edgelist",
|
|
33
|
-
"parse_edgelist",
|
|
34
|
-
"read_edgelist",
|
|
35
|
-
"read_weighted_edgelist",
|
|
36
|
-
"write_weighted_edgelist",
|
|
37
|
-
]
|
|
38
|
-
|
|
39
|
-
import networkx as nx
|
|
40
|
-
from networkx.utils import open_file
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
def generate_edgelist(G, delimiter=" ", data=True):
|
|
44
|
-
"""Generate a single line of the graph G in edge list format.
|
|
45
|
-
|
|
46
|
-
Parameters
|
|
47
|
-
----------
|
|
48
|
-
G : NetworkX graph
|
|
49
|
-
|
|
50
|
-
delimiter : string, optional
|
|
51
|
-
Separator for node labels
|
|
52
|
-
|
|
53
|
-
data : bool or list of keys
|
|
54
|
-
If False generate no edge data. If True use a dictionary
|
|
55
|
-
representation of edge data. If a list of keys use a list of data
|
|
56
|
-
values corresponding to the keys.
|
|
57
|
-
|
|
58
|
-
Returns
|
|
59
|
-
-------
|
|
60
|
-
lines : string
|
|
61
|
-
Lines of data in adjlist format.
|
|
62
|
-
|
|
63
|
-
Examples
|
|
64
|
-
--------
|
|
65
|
-
>>> G = nx.lollipop_graph(4, 3)
|
|
66
|
-
>>> G[1][2]["weight"] = 3
|
|
67
|
-
>>> G[3][4]["capacity"] = 12
|
|
68
|
-
>>> for line in nx.generate_edgelist(G, data=False):
|
|
69
|
-
... print(line)
|
|
70
|
-
0 1
|
|
71
|
-
0 2
|
|
72
|
-
0 3
|
|
73
|
-
1 2
|
|
74
|
-
1 3
|
|
75
|
-
2 3
|
|
76
|
-
3 4
|
|
77
|
-
4 5
|
|
78
|
-
5 6
|
|
79
|
-
|
|
80
|
-
>>> for line in nx.generate_edgelist(G):
|
|
81
|
-
... print(line)
|
|
82
|
-
0 1 {}
|
|
83
|
-
0 2 {}
|
|
84
|
-
0 3 {}
|
|
85
|
-
1 2 {'weight': 3}
|
|
86
|
-
1 3 {}
|
|
87
|
-
2 3 {}
|
|
88
|
-
3 4 {'capacity': 12}
|
|
89
|
-
4 5 {}
|
|
90
|
-
5 6 {}
|
|
91
|
-
|
|
92
|
-
>>> for line in nx.generate_edgelist(G, data=["weight"]):
|
|
93
|
-
... print(line)
|
|
94
|
-
0 1
|
|
95
|
-
0 2
|
|
96
|
-
0 3
|
|
97
|
-
1 2 3
|
|
98
|
-
1 3
|
|
99
|
-
2 3
|
|
100
|
-
3 4
|
|
101
|
-
4 5
|
|
102
|
-
5 6
|
|
103
|
-
|
|
104
|
-
See Also
|
|
105
|
-
--------
|
|
106
|
-
write_adjlist, read_adjlist
|
|
107
|
-
"""
|
|
108
|
-
if data is True:
|
|
109
|
-
for u, v, d in G.edges(data=True):
|
|
110
|
-
e = u, v, dict(d)
|
|
111
|
-
yield delimiter.join(map(str, e))
|
|
112
|
-
elif data is False:
|
|
113
|
-
for u, v in G.edges(data=False):
|
|
114
|
-
e = u, v
|
|
115
|
-
yield delimiter.join(map(str, e))
|
|
116
|
-
else:
|
|
117
|
-
for u, v, d in G.edges(data=True):
|
|
118
|
-
e = [u, v]
|
|
119
|
-
try:
|
|
120
|
-
e.extend(d[k] for k in data)
|
|
121
|
-
except KeyError:
|
|
122
|
-
pass # missing data for this edge, should warn?
|
|
123
|
-
yield delimiter.join(map(str, e))
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
@open_file(1, mode="wb")
|
|
127
|
-
def write_edgelist(G, path, comments="#", delimiter=" ", data=True, encoding="utf-8"):
|
|
128
|
-
"""Write graph as a list of edges.
|
|
129
|
-
|
|
130
|
-
Parameters
|
|
131
|
-
----------
|
|
132
|
-
G : graph
|
|
133
|
-
A NetworkX graph
|
|
134
|
-
path : file or string
|
|
135
|
-
File or filename to write. If a file is provided, it must be
|
|
136
|
-
opened in 'wb' mode. Filenames ending in .gz or .bz2 will be compressed.
|
|
137
|
-
comments : string, optional
|
|
138
|
-
The character used to indicate the start of a comment
|
|
139
|
-
delimiter : string, optional
|
|
140
|
-
The string used to separate values. The default is whitespace.
|
|
141
|
-
data : bool or list, optional
|
|
142
|
-
If False write no edge data.
|
|
143
|
-
If True write a string representation of the edge data dictionary..
|
|
144
|
-
If a list (or other iterable) is provided, write the keys specified
|
|
145
|
-
in the list.
|
|
146
|
-
encoding: string, optional
|
|
147
|
-
Specify which encoding to use when writing file.
|
|
148
|
-
|
|
149
|
-
Examples
|
|
150
|
-
--------
|
|
151
|
-
>>> G = nx.path_graph(4)
|
|
152
|
-
>>> nx.write_edgelist(G, "test.edgelist")
|
|
153
|
-
>>> G = nx.path_graph(4)
|
|
154
|
-
>>> fh = open("test.edgelist", "wb")
|
|
155
|
-
>>> nx.write_edgelist(G, fh)
|
|
156
|
-
>>> nx.write_edgelist(G, "test.edgelist.gz")
|
|
157
|
-
>>> nx.write_edgelist(G, "test.edgelist_nodata.gz", data=False)
|
|
158
|
-
|
|
159
|
-
>>> G = nx.Graph()
|
|
160
|
-
>>> G.add_edge(1, 2, weight=7, color="red")
|
|
161
|
-
>>> nx.write_edgelist(G, "test.edgelist_bigger_nodata", data=False)
|
|
162
|
-
>>> nx.write_edgelist(G, "test.edgelist_color", data=["color"])
|
|
163
|
-
>>> nx.write_edgelist(G, "test.edgelist_color_weight", data=["color", "weight"])
|
|
164
|
-
|
|
165
|
-
See Also
|
|
166
|
-
--------
|
|
167
|
-
read_edgelist
|
|
168
|
-
write_weighted_edgelist
|
|
169
|
-
"""
|
|
170
|
-
|
|
171
|
-
for line in generate_edgelist(G, delimiter, data):
|
|
172
|
-
line += "\n"
|
|
173
|
-
path.write(line.encode(encoding))
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
@nx._dispatchable(graphs=None, returns_graph=True)
|
|
177
|
-
def parse_edgelist(
|
|
178
|
-
lines, comments="#", delimiter=None, create_using=None, nodetype=None, data=True
|
|
179
|
-
):
|
|
180
|
-
"""Parse lines of an edge list representation of a graph.
|
|
181
|
-
|
|
182
|
-
Parameters
|
|
183
|
-
----------
|
|
184
|
-
lines : list or iterator of strings
|
|
185
|
-
Input data in edgelist format
|
|
186
|
-
comments : string, optional
|
|
187
|
-
Marker for comment lines. Default is `'#'`. To specify that no character
|
|
188
|
-
should be treated as a comment, use ``comments=None``.
|
|
189
|
-
delimiter : string, optional
|
|
190
|
-
Separator for node labels. Default is `None`, meaning any whitespace.
|
|
191
|
-
create_using : NetworkX graph constructor, optional (default=nx.Graph)
|
|
192
|
-
Graph type to create. If graph instance, then cleared before populated.
|
|
193
|
-
nodetype : Python type, optional
|
|
194
|
-
Convert nodes to this type. Default is `None`, meaning no conversion is
|
|
195
|
-
performed.
|
|
196
|
-
data : bool or list of (label,type) tuples
|
|
197
|
-
If `False` generate no edge data or if `True` use a dictionary
|
|
198
|
-
representation of edge data or a list tuples specifying dictionary
|
|
199
|
-
key names and types for edge data.
|
|
200
|
-
|
|
201
|
-
Returns
|
|
202
|
-
-------
|
|
203
|
-
G: NetworkX Graph
|
|
204
|
-
The graph corresponding to lines
|
|
205
|
-
|
|
206
|
-
Examples
|
|
207
|
-
--------
|
|
208
|
-
Edgelist with no data:
|
|
209
|
-
|
|
210
|
-
>>> lines = ["1 2", "2 3", "3 4"]
|
|
211
|
-
>>> G = nx.parse_edgelist(lines, nodetype=int)
|
|
212
|
-
>>> list(G)
|
|
213
|
-
[1, 2, 3, 4]
|
|
214
|
-
>>> list(G.edges())
|
|
215
|
-
[(1, 2), (2, 3), (3, 4)]
|
|
216
|
-
|
|
217
|
-
Edgelist with data in Python dictionary representation:
|
|
218
|
-
|
|
219
|
-
>>> lines = ["1 2 {'weight': 3}", "2 3 {'weight': 27}", "3 4 {'weight': 3.0}"]
|
|
220
|
-
>>> G = nx.parse_edgelist(lines, nodetype=int)
|
|
221
|
-
>>> list(G)
|
|
222
|
-
[1, 2, 3, 4]
|
|
223
|
-
>>> list(G.edges(data=True))
|
|
224
|
-
[(1, 2, {'weight': 3}), (2, 3, {'weight': 27}), (3, 4, {'weight': 3.0})]
|
|
225
|
-
|
|
226
|
-
Edgelist with data in a list:
|
|
227
|
-
|
|
228
|
-
>>> lines = ["1 2 3", "2 3 27", "3 4 3.0"]
|
|
229
|
-
>>> G = nx.parse_edgelist(lines, nodetype=int, data=(("weight", float),))
|
|
230
|
-
>>> list(G)
|
|
231
|
-
[1, 2, 3, 4]
|
|
232
|
-
>>> list(G.edges(data=True))
|
|
233
|
-
[(1, 2, {'weight': 3.0}), (2, 3, {'weight': 27.0}), (3, 4, {'weight': 3.0})]
|
|
234
|
-
|
|
235
|
-
See Also
|
|
236
|
-
--------
|
|
237
|
-
read_weighted_edgelist
|
|
238
|
-
"""
|
|
239
|
-
from ast import literal_eval
|
|
240
|
-
|
|
241
|
-
G = nx.empty_graph(0, create_using)
|
|
242
|
-
for line in lines:
|
|
243
|
-
if comments is not None:
|
|
244
|
-
p = line.find(comments)
|
|
245
|
-
if p >= 0:
|
|
246
|
-
line = line[:p]
|
|
247
|
-
if not line:
|
|
248
|
-
continue
|
|
249
|
-
# split line, should have 2 or more
|
|
250
|
-
s = line.rstrip("\n").split(delimiter)
|
|
251
|
-
if len(s) < 2:
|
|
252
|
-
continue
|
|
253
|
-
u = s.pop(0)
|
|
254
|
-
v = s.pop(0)
|
|
255
|
-
d = s
|
|
256
|
-
if nodetype is not None:
|
|
257
|
-
try:
|
|
258
|
-
u = nodetype(u)
|
|
259
|
-
v = nodetype(v)
|
|
260
|
-
except Exception as err:
|
|
261
|
-
raise TypeError(
|
|
262
|
-
f"Failed to convert nodes {u},{v} to type {nodetype}."
|
|
263
|
-
) from err
|
|
264
|
-
|
|
265
|
-
if len(d) == 0 or data is False:
|
|
266
|
-
# no data or data type specified
|
|
267
|
-
edgedata = {}
|
|
268
|
-
elif data is True:
|
|
269
|
-
# no edge types specified
|
|
270
|
-
try: # try to evaluate as dictionary
|
|
271
|
-
if delimiter == ",":
|
|
272
|
-
edgedata_str = ",".join(d)
|
|
273
|
-
else:
|
|
274
|
-
edgedata_str = " ".join(d)
|
|
275
|
-
edgedata = dict(literal_eval(edgedata_str.strip()))
|
|
276
|
-
except Exception as err:
|
|
277
|
-
raise TypeError(
|
|
278
|
-
f"Failed to convert edge data ({d}) to dictionary."
|
|
279
|
-
) from err
|
|
280
|
-
else:
|
|
281
|
-
# convert edge data to dictionary with specified keys and type
|
|
282
|
-
if len(d) != len(data):
|
|
283
|
-
raise IndexError(
|
|
284
|
-
f"Edge data {d} and data_keys {data} are not the same length"
|
|
285
|
-
)
|
|
286
|
-
edgedata = {}
|
|
287
|
-
for (edge_key, edge_type), edge_value in zip(data, d):
|
|
288
|
-
try:
|
|
289
|
-
edge_value = edge_type(edge_value)
|
|
290
|
-
except Exception as err:
|
|
291
|
-
raise TypeError(
|
|
292
|
-
f"Failed to convert {edge_key} data {edge_value} "
|
|
293
|
-
f"to type {edge_type}."
|
|
294
|
-
) from err
|
|
295
|
-
edgedata.update({edge_key: edge_value})
|
|
296
|
-
G.add_edge(u, v, **edgedata)
|
|
297
|
-
return G
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
@open_file(0, mode="rb")
|
|
301
|
-
@nx._dispatchable(graphs=None, returns_graph=True)
|
|
302
|
-
def read_edgelist(
|
|
303
|
-
path,
|
|
304
|
-
comments="#",
|
|
305
|
-
delimiter=None,
|
|
306
|
-
create_using=None,
|
|
307
|
-
nodetype=None,
|
|
308
|
-
data=True,
|
|
309
|
-
edgetype=None,
|
|
310
|
-
encoding="utf-8",
|
|
311
|
-
):
|
|
312
|
-
"""Read a graph from a list of edges.
|
|
313
|
-
|
|
314
|
-
Parameters
|
|
315
|
-
----------
|
|
316
|
-
path : file or string
|
|
317
|
-
File or filename to read. If a file is provided, it must be
|
|
318
|
-
opened in 'rb' mode.
|
|
319
|
-
Filenames ending in .gz or .bz2 will be decompressed.
|
|
320
|
-
comments : string, optional
|
|
321
|
-
The character used to indicate the start of a comment. To specify that
|
|
322
|
-
no character should be treated as a comment, use ``comments=None``.
|
|
323
|
-
delimiter : string, optional
|
|
324
|
-
The string used to separate values. The default is whitespace.
|
|
325
|
-
create_using : NetworkX graph constructor, optional (default=nx.Graph)
|
|
326
|
-
Graph type to create. If graph instance, then cleared before populated.
|
|
327
|
-
nodetype : int, float, str, Python type, optional
|
|
328
|
-
Convert node data from strings to specified type
|
|
329
|
-
data : bool or list of (label,type) tuples
|
|
330
|
-
Tuples specifying dictionary key names and types for edge data
|
|
331
|
-
edgetype : int, float, str, Python type, optional OBSOLETE
|
|
332
|
-
Convert edge data from strings to specified type and use as 'weight'
|
|
333
|
-
encoding: string, optional
|
|
334
|
-
Specify which encoding to use when reading file.
|
|
335
|
-
|
|
336
|
-
Returns
|
|
337
|
-
-------
|
|
338
|
-
G : graph
|
|
339
|
-
A networkx Graph or other type specified with create_using
|
|
340
|
-
|
|
341
|
-
Examples
|
|
342
|
-
--------
|
|
343
|
-
>>> nx.write_edgelist(nx.path_graph(4), "test.edgelist_P4")
|
|
344
|
-
>>> G = nx.read_edgelist("test.edgelist_P4")
|
|
345
|
-
|
|
346
|
-
>>> fh = open("test.edgelist_P4", "rb")
|
|
347
|
-
>>> G = nx.read_edgelist(fh)
|
|
348
|
-
>>> fh.close()
|
|
349
|
-
|
|
350
|
-
>>> G = nx.read_edgelist("test.edgelist_P4", nodetype=int)
|
|
351
|
-
>>> G = nx.read_edgelist("test.edgelist_P4", create_using=nx.DiGraph)
|
|
352
|
-
|
|
353
|
-
Edgelist with data in a list:
|
|
354
|
-
|
|
355
|
-
>>> textline = "1 2 3"
|
|
356
|
-
>>> fh = open("test.textline", "w")
|
|
357
|
-
>>> d = fh.write(textline)
|
|
358
|
-
>>> fh.close()
|
|
359
|
-
>>> G = nx.read_edgelist("test.textline", nodetype=int, data=(("weight", float),))
|
|
360
|
-
>>> list(G)
|
|
361
|
-
[1, 2]
|
|
362
|
-
>>> list(G.edges(data=True))
|
|
363
|
-
[(1, 2, {'weight': 3.0})]
|
|
364
|
-
|
|
365
|
-
See parse_edgelist() for more examples of formatting.
|
|
366
|
-
|
|
367
|
-
See Also
|
|
368
|
-
--------
|
|
369
|
-
parse_edgelist
|
|
370
|
-
write_edgelist
|
|
371
|
-
|
|
372
|
-
Notes
|
|
373
|
-
-----
|
|
374
|
-
Since nodes must be hashable, the function nodetype must return hashable
|
|
375
|
-
types (e.g. int, float, str, frozenset - or tuples of those, etc.)
|
|
376
|
-
"""
|
|
377
|
-
lines = (line if isinstance(line, str) else line.decode(encoding) for line in path)
|
|
378
|
-
return parse_edgelist(
|
|
379
|
-
lines,
|
|
380
|
-
comments=comments,
|
|
381
|
-
delimiter=delimiter,
|
|
382
|
-
create_using=create_using,
|
|
383
|
-
nodetype=nodetype,
|
|
384
|
-
data=data,
|
|
385
|
-
)
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
def write_weighted_edgelist(G, path, comments="#", delimiter=" ", encoding="utf-8"):
|
|
389
|
-
"""Write graph G as a list of edges with numeric weights.
|
|
390
|
-
|
|
391
|
-
Parameters
|
|
392
|
-
----------
|
|
393
|
-
G : graph
|
|
394
|
-
A NetworkX graph
|
|
395
|
-
path : file or string
|
|
396
|
-
File or filename to write. If a file is provided, it must be
|
|
397
|
-
opened in 'wb' mode.
|
|
398
|
-
Filenames ending in .gz or .bz2 will be compressed.
|
|
399
|
-
comments : string, optional
|
|
400
|
-
The character used to indicate the start of a comment
|
|
401
|
-
delimiter : string, optional
|
|
402
|
-
The string used to separate values. The default is whitespace.
|
|
403
|
-
encoding: string, optional
|
|
404
|
-
Specify which encoding to use when writing file.
|
|
405
|
-
|
|
406
|
-
Examples
|
|
407
|
-
--------
|
|
408
|
-
>>> G = nx.Graph()
|
|
409
|
-
>>> G.add_edge(1, 2, weight=7)
|
|
410
|
-
>>> nx.write_weighted_edgelist(G, "test.weighted.edgelist")
|
|
411
|
-
|
|
412
|
-
See Also
|
|
413
|
-
--------
|
|
414
|
-
read_edgelist
|
|
415
|
-
write_edgelist
|
|
416
|
-
read_weighted_edgelist
|
|
417
|
-
"""
|
|
418
|
-
write_edgelist(
|
|
419
|
-
G,
|
|
420
|
-
path,
|
|
421
|
-
comments=comments,
|
|
422
|
-
delimiter=delimiter,
|
|
423
|
-
data=("weight",),
|
|
424
|
-
encoding=encoding,
|
|
425
|
-
)
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
@nx._dispatchable(graphs=None, returns_graph=True)
|
|
429
|
-
def read_weighted_edgelist(
|
|
430
|
-
path,
|
|
431
|
-
comments="#",
|
|
432
|
-
delimiter=None,
|
|
433
|
-
create_using=None,
|
|
434
|
-
nodetype=None,
|
|
435
|
-
encoding="utf-8",
|
|
436
|
-
):
|
|
437
|
-
"""Read a graph as list of edges with numeric weights.
|
|
438
|
-
|
|
439
|
-
Parameters
|
|
440
|
-
----------
|
|
441
|
-
path : file or string
|
|
442
|
-
File or filename to read. If a file is provided, it must be
|
|
443
|
-
opened in 'rb' mode.
|
|
444
|
-
Filenames ending in .gz or .bz2 will be decompressed.
|
|
445
|
-
comments : string, optional
|
|
446
|
-
The character used to indicate the start of a comment.
|
|
447
|
-
delimiter : string, optional
|
|
448
|
-
The string used to separate values. The default is whitespace.
|
|
449
|
-
create_using : NetworkX graph constructor, optional (default=nx.Graph)
|
|
450
|
-
Graph type to create. If graph instance, then cleared before populated.
|
|
451
|
-
nodetype : int, float, str, Python type, optional
|
|
452
|
-
Convert node data from strings to specified type
|
|
453
|
-
encoding: string, optional
|
|
454
|
-
Specify which encoding to use when reading file.
|
|
455
|
-
|
|
456
|
-
Returns
|
|
457
|
-
-------
|
|
458
|
-
G : graph
|
|
459
|
-
A networkx Graph or other type specified with create_using
|
|
460
|
-
|
|
461
|
-
Notes
|
|
462
|
-
-----
|
|
463
|
-
Since nodes must be hashable, the function nodetype must return hashable
|
|
464
|
-
types (e.g. int, float, str, frozenset - or tuples of those, etc.)
|
|
465
|
-
|
|
466
|
-
Example edgelist file format.
|
|
467
|
-
|
|
468
|
-
With numeric edge data::
|
|
469
|
-
|
|
470
|
-
# read with
|
|
471
|
-
# >>> G=nx.read_weighted_edgelist(fh)
|
|
472
|
-
# source target data
|
|
473
|
-
a b 1
|
|
474
|
-
a c 3.14159
|
|
475
|
-
d e 42
|
|
476
|
-
|
|
477
|
-
See Also
|
|
478
|
-
--------
|
|
479
|
-
write_weighted_edgelist
|
|
480
|
-
"""
|
|
481
|
-
return read_edgelist(
|
|
482
|
-
path,
|
|
483
|
-
comments=comments,
|
|
484
|
-
delimiter=delimiter,
|
|
485
|
-
create_using=create_using,
|
|
486
|
-
nodetype=nodetype,
|
|
487
|
-
data=(("weight", float),),
|
|
488
|
-
encoding=encoding,
|
|
489
|
-
)
|