okstra 0.130.3 → 0.131.0
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 +21 -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/report_views.py +32 -5
- 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 +101 -6
- 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 +18 -12
- package/runtime/templates/reports/i18n/en.json +1 -0
- package/runtime/templates/reports/i18n/ko.json +1 -0
- package/runtime/templates/reports/report.css +18 -0
- package/runtime/validators/lib/fixtures.sh +6 -0
- package/runtime/validators/validate-run.py +1722 -98
- 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,77 +0,0 @@
|
|
|
1
|
-
"""Function for computing walks in a graph."""
|
|
2
|
-
|
|
3
|
-
import networkx as nx
|
|
4
|
-
|
|
5
|
-
__all__ = ["number_of_walks"]
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
@nx._dispatchable
|
|
9
|
-
def number_of_walks(G, walk_length):
|
|
10
|
-
"""Returns the number of walks connecting each pair of nodes in `G`
|
|
11
|
-
|
|
12
|
-
A *walk* is a sequence of nodes in which each adjacent pair of nodes
|
|
13
|
-
in the sequence is adjacent in the graph. A walk can repeat the same
|
|
14
|
-
edge and go in the opposite direction just as people can walk on a
|
|
15
|
-
set of paths, but standing still is not counted as part of the walk.
|
|
16
|
-
|
|
17
|
-
This function only counts the walks with `walk_length` edges. Note that
|
|
18
|
-
the number of nodes in the walk sequence is one more than `walk_length`.
|
|
19
|
-
The number of walks can grow very quickly on a larger graph
|
|
20
|
-
and with a larger walk length.
|
|
21
|
-
|
|
22
|
-
Parameters
|
|
23
|
-
----------
|
|
24
|
-
G : NetworkX graph
|
|
25
|
-
|
|
26
|
-
walk_length : int
|
|
27
|
-
A nonnegative integer representing the length of a walk.
|
|
28
|
-
|
|
29
|
-
Returns
|
|
30
|
-
-------
|
|
31
|
-
dict
|
|
32
|
-
A dictionary of dictionaries in which outer keys are source
|
|
33
|
-
nodes, inner keys are target nodes, and inner values are the
|
|
34
|
-
number of walks of length `walk_length` connecting those nodes.
|
|
35
|
-
|
|
36
|
-
Raises
|
|
37
|
-
------
|
|
38
|
-
ValueError
|
|
39
|
-
If `walk_length` is negative
|
|
40
|
-
|
|
41
|
-
Examples
|
|
42
|
-
--------
|
|
43
|
-
|
|
44
|
-
>>> G = nx.Graph([(0, 1), (1, 2)])
|
|
45
|
-
>>> walks = nx.number_of_walks(G, 2)
|
|
46
|
-
>>> walks
|
|
47
|
-
{0: {0: 1, 1: 0, 2: 1}, 1: {0: 0, 1: 2, 2: 0}, 2: {0: 1, 1: 0, 2: 1}}
|
|
48
|
-
>>> total_walks = sum(sum(tgts.values()) for _, tgts in walks.items())
|
|
49
|
-
|
|
50
|
-
You can also get the number of walks from a specific source node using the
|
|
51
|
-
returned dictionary. For example, number of walks of length 1 from node 0
|
|
52
|
-
can be found as follows:
|
|
53
|
-
|
|
54
|
-
>>> walks = nx.number_of_walks(G, 1)
|
|
55
|
-
>>> walks[0]
|
|
56
|
-
{0: 0, 1: 1, 2: 0}
|
|
57
|
-
>>> sum(walks[0].values()) # walks from 0 of length 1
|
|
58
|
-
1
|
|
59
|
-
|
|
60
|
-
Similarly, a target node can also be specified:
|
|
61
|
-
|
|
62
|
-
>>> walks[0][1]
|
|
63
|
-
1
|
|
64
|
-
|
|
65
|
-
"""
|
|
66
|
-
import scipy as sp
|
|
67
|
-
|
|
68
|
-
if walk_length < 0:
|
|
69
|
-
raise ValueError(f"`walk_length` cannot be negative: {walk_length}")
|
|
70
|
-
|
|
71
|
-
A = nx.adjacency_matrix(G, weight=None)
|
|
72
|
-
power = sp.sparse.linalg.matrix_power(A, walk_length).tocsr()
|
|
73
|
-
result = {
|
|
74
|
-
u: {v: power[u_idx, v_idx].item() for v_idx, v in enumerate(G)}
|
|
75
|
-
for u_idx, u in enumerate(G)
|
|
76
|
-
}
|
|
77
|
-
return result
|
|
@@ -1,278 +0,0 @@
|
|
|
1
|
-
"""Functions related to the Wiener Index of a graph.
|
|
2
|
-
|
|
3
|
-
The Wiener Index is a topological measure of a graph
|
|
4
|
-
related to the distance between nodes and their degree.
|
|
5
|
-
The Schultz Index and Gutman Index are similar measures.
|
|
6
|
-
They are used categorize molecules via the network of
|
|
7
|
-
atoms connected by chemical bonds. The indices are
|
|
8
|
-
correlated with functional aspects of the molecules.
|
|
9
|
-
|
|
10
|
-
References
|
|
11
|
-
----------
|
|
12
|
-
.. [1] `Wikipedia: Wiener Index <https://en.wikipedia.org/wiki/Wiener_index>`_
|
|
13
|
-
.. [2] M.V. Diudeaa and I. Gutman, Wiener-Type Topological Indices,
|
|
14
|
-
Croatica Chemica Acta, 71 (1998), 21-51.
|
|
15
|
-
https://hrcak.srce.hr/132323
|
|
16
|
-
"""
|
|
17
|
-
|
|
18
|
-
import itertools as it
|
|
19
|
-
|
|
20
|
-
import networkx as nx
|
|
21
|
-
|
|
22
|
-
__all__ = ["wiener_index", "schultz_index", "gutman_index", "hyper_wiener_index"]
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
@nx._dispatchable(edge_attrs="weight")
|
|
26
|
-
def wiener_index(G, weight=None):
|
|
27
|
-
"""Returns the Wiener index of the given graph.
|
|
28
|
-
|
|
29
|
-
The *Wiener index* of a graph is the sum of the shortest-path
|
|
30
|
-
(weighted) distances between each pair of reachable nodes.
|
|
31
|
-
For pairs of nodes in undirected graphs, only one orientation
|
|
32
|
-
of the pair is counted.
|
|
33
|
-
|
|
34
|
-
Parameters
|
|
35
|
-
----------
|
|
36
|
-
G : NetworkX graph
|
|
37
|
-
|
|
38
|
-
weight : string or None, optional (default: None)
|
|
39
|
-
If None, every edge has weight 1.
|
|
40
|
-
If a string, use this edge attribute as the edge weight.
|
|
41
|
-
Any edge attribute not present defaults to 1.
|
|
42
|
-
The edge weights are used to computing shortest-path distances.
|
|
43
|
-
|
|
44
|
-
Returns
|
|
45
|
-
-------
|
|
46
|
-
number
|
|
47
|
-
The Wiener index of the graph `G`.
|
|
48
|
-
|
|
49
|
-
Raises
|
|
50
|
-
------
|
|
51
|
-
NetworkXError
|
|
52
|
-
If the graph `G` is not connected.
|
|
53
|
-
|
|
54
|
-
Notes
|
|
55
|
-
-----
|
|
56
|
-
If a pair of nodes is not reachable, the distance is assumed to be
|
|
57
|
-
infinity. This means that for graphs that are not
|
|
58
|
-
strongly-connected, this function returns ``inf``.
|
|
59
|
-
|
|
60
|
-
The Wiener index is not usually defined for directed graphs, however
|
|
61
|
-
this function uses the natural generalization of the Wiener index to
|
|
62
|
-
directed graphs.
|
|
63
|
-
|
|
64
|
-
Examples
|
|
65
|
-
--------
|
|
66
|
-
The Wiener index of the (unweighted) complete graph on *n* nodes
|
|
67
|
-
equals the number of pairs of the *n* nodes, since each pair of
|
|
68
|
-
nodes is at distance one::
|
|
69
|
-
|
|
70
|
-
>>> n = 10
|
|
71
|
-
>>> G = nx.complete_graph(n)
|
|
72
|
-
>>> nx.wiener_index(G) == n * (n - 1) / 2
|
|
73
|
-
True
|
|
74
|
-
|
|
75
|
-
Graphs that are not strongly-connected have infinite Wiener index::
|
|
76
|
-
|
|
77
|
-
>>> G = nx.empty_graph(2)
|
|
78
|
-
>>> nx.wiener_index(G)
|
|
79
|
-
inf
|
|
80
|
-
|
|
81
|
-
References
|
|
82
|
-
----------
|
|
83
|
-
.. [1] `Wikipedia: Wiener Index <https://en.wikipedia.org/wiki/Wiener_index>`_
|
|
84
|
-
"""
|
|
85
|
-
connected = nx.is_strongly_connected(G) if G.is_directed() else nx.is_connected(G)
|
|
86
|
-
if not connected:
|
|
87
|
-
return float("inf")
|
|
88
|
-
|
|
89
|
-
spl = nx.shortest_path_length(G, weight=weight)
|
|
90
|
-
total = sum(it.chain.from_iterable(nbrs.values() for node, nbrs in spl))
|
|
91
|
-
# Need to account for double counting pairs of nodes in undirected graphs.
|
|
92
|
-
return total if G.is_directed() else total / 2
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
@nx.utils.not_implemented_for("directed")
|
|
96
|
-
@nx.utils.not_implemented_for("multigraph")
|
|
97
|
-
@nx._dispatchable(edge_attrs="weight")
|
|
98
|
-
def schultz_index(G, weight=None):
|
|
99
|
-
r"""Returns the Schultz Index (of the first kind) of `G`
|
|
100
|
-
|
|
101
|
-
The *Schultz Index* [3]_ of a graph is the sum over all node pairs of
|
|
102
|
-
distances times the sum of degrees. Consider an undirected graph `G`.
|
|
103
|
-
For each node pair ``(u, v)`` compute ``dist(u, v) * (deg(u) + deg(v)``
|
|
104
|
-
where ``dist`` is the shortest path length between two nodes and ``deg``
|
|
105
|
-
is the degree of a node.
|
|
106
|
-
|
|
107
|
-
The Schultz Index is the sum of these quantities over all (unordered)
|
|
108
|
-
pairs of nodes.
|
|
109
|
-
|
|
110
|
-
Parameters
|
|
111
|
-
----------
|
|
112
|
-
G : NetworkX graph
|
|
113
|
-
The undirected graph of interest.
|
|
114
|
-
weight : string or None, optional (default: None)
|
|
115
|
-
If None, every edge has weight 1.
|
|
116
|
-
If a string, use this edge attribute as the edge weight.
|
|
117
|
-
Any edge attribute not present defaults to 1.
|
|
118
|
-
The edge weights are used to computing shortest-path distances.
|
|
119
|
-
|
|
120
|
-
Returns
|
|
121
|
-
-------
|
|
122
|
-
number
|
|
123
|
-
The first kind of Schultz Index of the graph `G`.
|
|
124
|
-
|
|
125
|
-
Examples
|
|
126
|
-
--------
|
|
127
|
-
The Schultz Index of the (unweighted) complete graph on *n* nodes
|
|
128
|
-
equals the number of pairs of the *n* nodes times ``2 * (n - 1)``,
|
|
129
|
-
since each pair of nodes is at distance one and the sum of degree
|
|
130
|
-
of two nodes is ``2 * (n - 1)``.
|
|
131
|
-
|
|
132
|
-
>>> n = 10
|
|
133
|
-
>>> G = nx.complete_graph(n)
|
|
134
|
-
>>> nx.schultz_index(G) == (n * (n - 1) / 2) * (2 * (n - 1))
|
|
135
|
-
True
|
|
136
|
-
|
|
137
|
-
Graph that is disconnected
|
|
138
|
-
|
|
139
|
-
>>> nx.schultz_index(nx.empty_graph(2))
|
|
140
|
-
inf
|
|
141
|
-
|
|
142
|
-
References
|
|
143
|
-
----------
|
|
144
|
-
.. [1] I. Gutman, Selected properties of the Schultz molecular topological index,
|
|
145
|
-
J. Chem. Inf. Comput. Sci. 34 (1994), 1087–1089.
|
|
146
|
-
https://doi.org/10.1021/ci00021a009
|
|
147
|
-
.. [2] M.V. Diudeaa and I. Gutman, Wiener-Type Topological Indices,
|
|
148
|
-
Croatica Chemica Acta, 71 (1998), 21-51.
|
|
149
|
-
https://hrcak.srce.hr/132323
|
|
150
|
-
.. [3] H. P. Schultz, Topological organic chemistry. 1.
|
|
151
|
-
Graph theory and topological indices of alkanes,i
|
|
152
|
-
J. Chem. Inf. Comput. Sci. 29 (1989), 239–257.
|
|
153
|
-
|
|
154
|
-
"""
|
|
155
|
-
if not nx.is_connected(G):
|
|
156
|
-
return float("inf")
|
|
157
|
-
|
|
158
|
-
spl = nx.shortest_path_length(G, weight=weight)
|
|
159
|
-
d = dict(G.degree, weight=weight)
|
|
160
|
-
return sum(dist * (d[u] + d[v]) for u, info in spl for v, dist in info.items()) / 2
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
@nx.utils.not_implemented_for("directed")
|
|
164
|
-
@nx.utils.not_implemented_for("multigraph")
|
|
165
|
-
@nx._dispatchable(edge_attrs="weight")
|
|
166
|
-
def gutman_index(G, weight=None):
|
|
167
|
-
r"""Returns the Gutman Index for the graph `G`.
|
|
168
|
-
|
|
169
|
-
The *Gutman Index* measures the topology of networks, especially for molecule
|
|
170
|
-
networks of atoms connected by bonds [1]_. It is also called the Schultz Index
|
|
171
|
-
of the second kind [2]_.
|
|
172
|
-
|
|
173
|
-
Consider an undirected graph `G` with node set ``V``.
|
|
174
|
-
The Gutman Index of a graph is the sum over all (unordered) pairs of nodes
|
|
175
|
-
of nodes ``(u, v)``, with distance ``dist(u, v)`` and degrees ``deg(u)``
|
|
176
|
-
and ``deg(v)``, of ``dist(u, v) * deg(u) * deg(v)``
|
|
177
|
-
|
|
178
|
-
Parameters
|
|
179
|
-
----------
|
|
180
|
-
G : NetworkX graph
|
|
181
|
-
|
|
182
|
-
weight : string or None, optional (default: None)
|
|
183
|
-
If None, every edge has weight 1.
|
|
184
|
-
If a string, use this edge attribute as the edge weight.
|
|
185
|
-
Any edge attribute not present defaults to 1.
|
|
186
|
-
The edge weights are used to computing shortest-path distances.
|
|
187
|
-
|
|
188
|
-
Returns
|
|
189
|
-
-------
|
|
190
|
-
number
|
|
191
|
-
The Gutman Index of the graph `G`.
|
|
192
|
-
|
|
193
|
-
Examples
|
|
194
|
-
--------
|
|
195
|
-
The Gutman Index of the (unweighted) complete graph on *n* nodes
|
|
196
|
-
equals the number of pairs of the *n* nodes times ``(n - 1) * (n - 1)``,
|
|
197
|
-
since each pair of nodes is at distance one and the product of degree of two
|
|
198
|
-
vertices is ``(n - 1) * (n - 1)``.
|
|
199
|
-
|
|
200
|
-
>>> n = 10
|
|
201
|
-
>>> G = nx.complete_graph(n)
|
|
202
|
-
>>> nx.gutman_index(G) == (n * (n - 1) / 2) * ((n - 1) * (n - 1))
|
|
203
|
-
True
|
|
204
|
-
|
|
205
|
-
Graphs that are disconnected
|
|
206
|
-
|
|
207
|
-
>>> G = nx.empty_graph(2)
|
|
208
|
-
>>> nx.gutman_index(G)
|
|
209
|
-
inf
|
|
210
|
-
|
|
211
|
-
References
|
|
212
|
-
----------
|
|
213
|
-
.. [1] M.V. Diudeaa and I. Gutman, Wiener-Type Topological Indices,
|
|
214
|
-
Croatica Chemica Acta, 71 (1998), 21-51.
|
|
215
|
-
https://hrcak.srce.hr/132323
|
|
216
|
-
.. [2] I. Gutman, Selected properties of the Schultz molecular topological index,
|
|
217
|
-
J. Chem. Inf. Comput. Sci. 34 (1994), 1087–1089.
|
|
218
|
-
https://doi.org/10.1021/ci00021a009
|
|
219
|
-
|
|
220
|
-
"""
|
|
221
|
-
if not nx.is_connected(G):
|
|
222
|
-
return float("inf")
|
|
223
|
-
|
|
224
|
-
spl = nx.shortest_path_length(G, weight=weight)
|
|
225
|
-
d = dict(G.degree, weight=weight)
|
|
226
|
-
return sum(dist * d[u] * d[v] for u, vinfo in spl for v, dist in vinfo.items()) / 2
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
@nx.utils.not_implemented_for("directed")
|
|
230
|
-
@nx.utils.not_implemented_for("multigraph")
|
|
231
|
-
@nx._dispatchable(edge_attrs="weight")
|
|
232
|
-
def hyper_wiener_index(G, weight=None):
|
|
233
|
-
r"""Returns the Hyper-Wiener index of the graph `G`.
|
|
234
|
-
|
|
235
|
-
The Hyper-Wiener index of a connected graph `G` is defined as
|
|
236
|
-
|
|
237
|
-
.. math::
|
|
238
|
-
WW(G) = \frac{1}{2} \sum_{u,v \in V(G)} (d(u,v) + d(u,v)^2)
|
|
239
|
-
|
|
240
|
-
where ``d(u, v)`` is the shortest-path distance between nodes ``u`` and ``v``.
|
|
241
|
-
|
|
242
|
-
Parameters
|
|
243
|
-
----------
|
|
244
|
-
G : NetworkX graph
|
|
245
|
-
An undirected, connected graph.
|
|
246
|
-
|
|
247
|
-
weight : string or None, optional (default: None)
|
|
248
|
-
The edge attribute to use for calculating shortest-path distances.
|
|
249
|
-
If None, all edges are considered to have a weight of 1.
|
|
250
|
-
|
|
251
|
-
Returns
|
|
252
|
-
-------
|
|
253
|
-
float
|
|
254
|
-
The Hyper-Wiener index of the graph G.
|
|
255
|
-
Returns float("inf") if the graph is not connected.
|
|
256
|
-
|
|
257
|
-
References
|
|
258
|
-
----------
|
|
259
|
-
.. [1] M. Randić, "Novel molecular descriptor for structure-property studies,"
|
|
260
|
-
Chemical Physics Letters, vol. 211, pp. 478-483, 1993.
|
|
261
|
-
.. [2] `Wikipedia: Hyper-Wiener Index <https://en.wikipedia.org/wiki/Hyper-Wiener_index>`_
|
|
262
|
-
|
|
263
|
-
Examples
|
|
264
|
-
--------
|
|
265
|
-
>>> G = nx.path_graph(4)
|
|
266
|
-
>>> nx.hyper_wiener_index(G)
|
|
267
|
-
30.0
|
|
268
|
-
|
|
269
|
-
>>> G = nx.cycle_graph(4)
|
|
270
|
-
>>> nx.hyper_wiener_index(G)
|
|
271
|
-
20.0
|
|
272
|
-
"""
|
|
273
|
-
if not nx.is_connected(G):
|
|
274
|
-
return float("inf")
|
|
275
|
-
|
|
276
|
-
spl = nx.shortest_path_length(G, weight=weight)
|
|
277
|
-
total = sum(dist + dist**2 for _, lengths in spl for dist in lengths.values())
|
|
278
|
-
return total / 2
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
from .graph import Graph
|
|
2
|
-
from .digraph import DiGraph
|
|
3
|
-
from .multigraph import MultiGraph
|
|
4
|
-
from .multidigraph import MultiDiGraph
|
|
5
|
-
|
|
6
|
-
from .function import *
|
|
7
|
-
from .graphviews import subgraph_view, reverse_view
|
|
8
|
-
|
|
9
|
-
from networkx.classes import filters
|
|
10
|
-
|
|
11
|
-
from networkx.classes import coreviews
|
|
12
|
-
from networkx.classes import graphviews
|
|
13
|
-
from networkx.classes import reportviews
|