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.
Files changed (367) hide show
  1. package/README.md +0 -1
  2. package/docs/architecture.md +2 -2
  3. package/docs/cli.md +1 -1
  4. package/docs/for-ai/README.md +0 -2
  5. package/docs/for-ai/skills/okstra-run.md +13 -2
  6. package/docs/for-ai/skills/okstra-setup.md +4 -1
  7. package/docs/project-structure-overview.md +5 -4
  8. package/docs/task-process/implementation-planning.md +13 -0
  9. package/docs/task-process/implementation.md +17 -2
  10. package/package.json +1 -1
  11. package/runtime/BUILD.json +2 -2
  12. package/runtime/agents/workers/report-writer-worker.md +7 -0
  13. package/runtime/bin/lib/okstra/usage.sh +4 -4
  14. package/runtime/prompts/lead/okstra-lead-contract.md +2 -2
  15. package/runtime/prompts/lead/plan-body-verification.md +26 -5
  16. package/runtime/prompts/lead/report-writer.md +6 -2
  17. package/runtime/prompts/profiles/_common-contract.md +2 -1
  18. package/runtime/prompts/profiles/_implementation-deliverable.md +6 -1
  19. package/runtime/prompts/profiles/_implementation-executor.md +2 -2
  20. package/runtime/prompts/profiles/_implementation-verifier.md +33 -10
  21. package/runtime/prompts/profiles/final-verification.md +21 -6
  22. package/runtime/prompts/profiles/implementation-planning.md +21 -4
  23. package/runtime/python/okstra_ctl/codex_dispatch.py +31 -0
  24. package/runtime/python/okstra_ctl/conformance.py +49 -11
  25. package/runtime/python/okstra_ctl/report_finalize.py +52 -1
  26. package/runtime/python/okstra_ctl/report_views.py +32 -5
  27. package/runtime/python/okstra_ctl/run.py +15 -3
  28. package/runtime/python/okstra_ctl/worker_prompt_contract.py +14 -6
  29. package/runtime/python/okstra_ctl/worker_prompt_policy.py +19 -1
  30. package/runtime/python/okstra_vendor/__init__.py +0 -44
  31. package/runtime/schemas/final-report-v1.0.schema.json +101 -6
  32. package/runtime/skills/okstra-run/SKILL.md +11 -4
  33. package/runtime/skills/okstra-setup/SKILL.md +3 -2
  34. package/runtime/skills/okstra-setup/references/project-config.md +16 -7
  35. package/runtime/templates/reports/final-report.template.md +18 -12
  36. package/runtime/templates/reports/i18n/en.json +1 -0
  37. package/runtime/templates/reports/i18n/ko.json +1 -0
  38. package/runtime/templates/reports/report.css +18 -0
  39. package/runtime/validators/lib/fixtures.sh +6 -0
  40. package/runtime/validators/validate-run.py +1722 -98
  41. package/src/cli-registry.mjs +0 -7
  42. package/src/commands/lifecycle/doctor.mjs +0 -9
  43. package/src/lib/skill-catalog.mjs +0 -1
  44. package/docs/for-ai/skills/okstra-graphify.md +0 -64
  45. package/runtime/python/okstra_ctl/graphify_cmd.py +0 -225
  46. package/runtime/python/okstra_vendor/graphify/.vendored-version +0 -1
  47. package/runtime/python/okstra_vendor/graphify/__init__.py +0 -28
  48. package/runtime/python/okstra_vendor/graphify/__main__.py +0 -1371
  49. package/runtime/python/okstra_vendor/graphify/analyze.py +0 -540
  50. package/runtime/python/okstra_vendor/graphify/benchmark.py +0 -129
  51. package/runtime/python/okstra_vendor/graphify/build.py +0 -107
  52. package/runtime/python/okstra_vendor/graphify/cache.py +0 -169
  53. package/runtime/python/okstra_vendor/graphify/cluster.py +0 -137
  54. package/runtime/python/okstra_vendor/graphify/detect.py +0 -510
  55. package/runtime/python/okstra_vendor/graphify/export.py +0 -1014
  56. package/runtime/python/okstra_vendor/graphify/extract.py +0 -3277
  57. package/runtime/python/okstra_vendor/graphify/hooks.py +0 -220
  58. package/runtime/python/okstra_vendor/graphify/ingest.py +0 -297
  59. package/runtime/python/okstra_vendor/graphify/manifest.py +0 -4
  60. package/runtime/python/okstra_vendor/graphify/report.py +0 -175
  61. package/runtime/python/okstra_vendor/graphify/security.py +0 -203
  62. package/runtime/python/okstra_vendor/graphify/serve.py +0 -373
  63. package/runtime/python/okstra_vendor/graphify/skill-aider.md +0 -1184
  64. package/runtime/python/okstra_vendor/graphify/skill-claw.md +0 -1184
  65. package/runtime/python/okstra_vendor/graphify/skill-codex.md +0 -1242
  66. package/runtime/python/okstra_vendor/graphify/skill-copilot.md +0 -1268
  67. package/runtime/python/okstra_vendor/graphify/skill-droid.md +0 -1239
  68. package/runtime/python/okstra_vendor/graphify/skill-kiro.md +0 -1183
  69. package/runtime/python/okstra_vendor/graphify/skill-opencode.md +0 -1238
  70. package/runtime/python/okstra_vendor/graphify/skill-trae.md +0 -1208
  71. package/runtime/python/okstra_vendor/graphify/skill-vscode.md +0 -253
  72. package/runtime/python/okstra_vendor/graphify/skill-windows.md +0 -1245
  73. package/runtime/python/okstra_vendor/graphify/skill.md +0 -1319
  74. package/runtime/python/okstra_vendor/graphify/transcribe.py +0 -182
  75. package/runtime/python/okstra_vendor/graphify/validate.py +0 -72
  76. package/runtime/python/okstra_vendor/graphify/watch.py +0 -188
  77. package/runtime/python/okstra_vendor/graphify/wiki.py +0 -214
  78. package/runtime/python/okstra_vendor/networkx/__init__.py +0 -62
  79. package/runtime/python/okstra_vendor/networkx/algorithms/__init__.py +0 -134
  80. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/__init__.py +0 -26
  81. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/clique.py +0 -259
  82. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/clustering_coefficient.py +0 -71
  83. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/connectivity.py +0 -412
  84. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/density.py +0 -396
  85. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/distance_measures.py +0 -150
  86. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/dominating_set.py +0 -149
  87. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/kcomponents.py +0 -369
  88. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/matching.py +0 -44
  89. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/maxcut.py +0 -143
  90. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/ramsey.py +0 -53
  91. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/steinertree.py +0 -265
  92. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/traveling_salesman.py +0 -1508
  93. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/treewidth.py +0 -255
  94. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/vertex_cover.py +0 -83
  95. package/runtime/python/okstra_vendor/networkx/algorithms/assortativity/__init__.py +0 -5
  96. package/runtime/python/okstra_vendor/networkx/algorithms/assortativity/connectivity.py +0 -122
  97. package/runtime/python/okstra_vendor/networkx/algorithms/assortativity/correlation.py +0 -302
  98. package/runtime/python/okstra_vendor/networkx/algorithms/assortativity/mixing.py +0 -255
  99. package/runtime/python/okstra_vendor/networkx/algorithms/assortativity/neighbor_degree.py +0 -160
  100. package/runtime/python/okstra_vendor/networkx/algorithms/assortativity/pairs.py +0 -127
  101. package/runtime/python/okstra_vendor/networkx/algorithms/asteroidal.py +0 -164
  102. package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/__init__.py +0 -88
  103. package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/basic.py +0 -322
  104. package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/centrality.py +0 -290
  105. package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/cluster.py +0 -289
  106. package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/covering.py +0 -57
  107. package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/edgelist.py +0 -360
  108. package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/extendability.py +0 -105
  109. package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/generators.py +0 -603
  110. package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/link_analysis.py +0 -316
  111. package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/matching.py +0 -590
  112. package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/matrix.py +0 -232
  113. package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/projection.py +0 -526
  114. package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/redundancy.py +0 -112
  115. package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/spectral.py +0 -69
  116. package/runtime/python/okstra_vendor/networkx/algorithms/boundary.py +0 -168
  117. package/runtime/python/okstra_vendor/networkx/algorithms/bridges.py +0 -205
  118. package/runtime/python/okstra_vendor/networkx/algorithms/broadcasting.py +0 -164
  119. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/__init__.py +0 -20
  120. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/betweenness.py +0 -591
  121. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/betweenness_subset.py +0 -236
  122. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/closeness.py +0 -282
  123. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/current_flow_betweenness.py +0 -364
  124. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/current_flow_betweenness_subset.py +0 -227
  125. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/current_flow_closeness.py +0 -96
  126. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/degree_alg.py +0 -150
  127. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/dispersion.py +0 -107
  128. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/eigenvector.py +0 -357
  129. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/flow_matrix.py +0 -130
  130. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/group.py +0 -787
  131. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/harmonic.py +0 -88
  132. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/katz.py +0 -331
  133. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/laplacian.py +0 -150
  134. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/load.py +0 -200
  135. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/percolation.py +0 -128
  136. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/reaching.py +0 -209
  137. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/second_order.py +0 -141
  138. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/subgraph_alg.py +0 -361
  139. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/trophic.py +0 -181
  140. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/voterank_alg.py +0 -95
  141. package/runtime/python/okstra_vendor/networkx/algorithms/chains.py +0 -172
  142. package/runtime/python/okstra_vendor/networkx/algorithms/chordal.py +0 -443
  143. package/runtime/python/okstra_vendor/networkx/algorithms/clique.py +0 -818
  144. package/runtime/python/okstra_vendor/networkx/algorithms/cluster.py +0 -732
  145. package/runtime/python/okstra_vendor/networkx/algorithms/coloring/__init__.py +0 -4
  146. package/runtime/python/okstra_vendor/networkx/algorithms/coloring/equitable_coloring.py +0 -505
  147. package/runtime/python/okstra_vendor/networkx/algorithms/coloring/greedy_coloring.py +0 -565
  148. package/runtime/python/okstra_vendor/networkx/algorithms/communicability_alg.py +0 -163
  149. package/runtime/python/okstra_vendor/networkx/algorithms/community/__init__.py +0 -28
  150. package/runtime/python/okstra_vendor/networkx/algorithms/community/asyn_fluid.py +0 -153
  151. package/runtime/python/okstra_vendor/networkx/algorithms/community/bipartitions.py +0 -354
  152. package/runtime/python/okstra_vendor/networkx/algorithms/community/centrality.py +0 -171
  153. package/runtime/python/okstra_vendor/networkx/algorithms/community/community_utils.py +0 -30
  154. package/runtime/python/okstra_vendor/networkx/algorithms/community/divisive.py +0 -216
  155. package/runtime/python/okstra_vendor/networkx/algorithms/community/kclique.py +0 -79
  156. package/runtime/python/okstra_vendor/networkx/algorithms/community/label_propagation.py +0 -338
  157. package/runtime/python/okstra_vendor/networkx/algorithms/community/leiden.py +0 -162
  158. package/runtime/python/okstra_vendor/networkx/algorithms/community/local.py +0 -220
  159. package/runtime/python/okstra_vendor/networkx/algorithms/community/louvain.py +0 -384
  160. package/runtime/python/okstra_vendor/networkx/algorithms/community/lukes.py +0 -227
  161. package/runtime/python/okstra_vendor/networkx/algorithms/community/modularity_max.py +0 -452
  162. package/runtime/python/okstra_vendor/networkx/algorithms/community/quality.py +0 -347
  163. package/runtime/python/okstra_vendor/networkx/algorithms/components/__init__.py +0 -6
  164. package/runtime/python/okstra_vendor/networkx/algorithms/components/attracting.py +0 -115
  165. package/runtime/python/okstra_vendor/networkx/algorithms/components/biconnected.py +0 -394
  166. package/runtime/python/okstra_vendor/networkx/algorithms/components/connected.py +0 -282
  167. package/runtime/python/okstra_vendor/networkx/algorithms/components/semiconnected.py +0 -71
  168. package/runtime/python/okstra_vendor/networkx/algorithms/components/strongly_connected.py +0 -359
  169. package/runtime/python/okstra_vendor/networkx/algorithms/components/weakly_connected.py +0 -196
  170. package/runtime/python/okstra_vendor/networkx/algorithms/connectivity/__init__.py +0 -11
  171. package/runtime/python/okstra_vendor/networkx/algorithms/connectivity/connectivity.py +0 -811
  172. package/runtime/python/okstra_vendor/networkx/algorithms/connectivity/cuts.py +0 -616
  173. package/runtime/python/okstra_vendor/networkx/algorithms/connectivity/disjoint_paths.py +0 -408
  174. package/runtime/python/okstra_vendor/networkx/algorithms/connectivity/edge_augmentation.py +0 -1270
  175. package/runtime/python/okstra_vendor/networkx/algorithms/connectivity/edge_kcomponents.py +0 -592
  176. package/runtime/python/okstra_vendor/networkx/algorithms/connectivity/kcomponents.py +0 -220
  177. package/runtime/python/okstra_vendor/networkx/algorithms/connectivity/kcutsets.py +0 -235
  178. package/runtime/python/okstra_vendor/networkx/algorithms/connectivity/stoerwagner.py +0 -152
  179. package/runtime/python/okstra_vendor/networkx/algorithms/connectivity/utils.py +0 -88
  180. package/runtime/python/okstra_vendor/networkx/algorithms/core.py +0 -588
  181. package/runtime/python/okstra_vendor/networkx/algorithms/covering.py +0 -142
  182. package/runtime/python/okstra_vendor/networkx/algorithms/cuts.py +0 -416
  183. package/runtime/python/okstra_vendor/networkx/algorithms/cycles.py +0 -1234
  184. package/runtime/python/okstra_vendor/networkx/algorithms/d_separation.py +0 -677
  185. package/runtime/python/okstra_vendor/networkx/algorithms/dag.py +0 -1392
  186. package/runtime/python/okstra_vendor/networkx/algorithms/distance_measures.py +0 -1095
  187. package/runtime/python/okstra_vendor/networkx/algorithms/distance_regular.py +0 -272
  188. package/runtime/python/okstra_vendor/networkx/algorithms/dominance.py +0 -142
  189. package/runtime/python/okstra_vendor/networkx/algorithms/dominating.py +0 -268
  190. package/runtime/python/okstra_vendor/networkx/algorithms/efficiency_measures.py +0 -167
  191. package/runtime/python/okstra_vendor/networkx/algorithms/euler.py +0 -470
  192. package/runtime/python/okstra_vendor/networkx/algorithms/flow/__init__.py +0 -11
  193. package/runtime/python/okstra_vendor/networkx/algorithms/flow/boykovkolmogorov.py +0 -370
  194. package/runtime/python/okstra_vendor/networkx/algorithms/flow/capacityscaling.py +0 -407
  195. package/runtime/python/okstra_vendor/networkx/algorithms/flow/dinitz_alg.py +0 -238
  196. package/runtime/python/okstra_vendor/networkx/algorithms/flow/edmondskarp.py +0 -241
  197. package/runtime/python/okstra_vendor/networkx/algorithms/flow/gomory_hu.py +0 -178
  198. package/runtime/python/okstra_vendor/networkx/algorithms/flow/maxflow.py +0 -611
  199. package/runtime/python/okstra_vendor/networkx/algorithms/flow/mincost.py +0 -356
  200. package/runtime/python/okstra_vendor/networkx/algorithms/flow/networksimplex.py +0 -662
  201. package/runtime/python/okstra_vendor/networkx/algorithms/flow/preflowpush.py +0 -425
  202. package/runtime/python/okstra_vendor/networkx/algorithms/flow/shortestaugmentingpath.py +0 -300
  203. package/runtime/python/okstra_vendor/networkx/algorithms/flow/utils.py +0 -194
  204. package/runtime/python/okstra_vendor/networkx/algorithms/graph_hashing.py +0 -435
  205. package/runtime/python/okstra_vendor/networkx/algorithms/graphical.py +0 -483
  206. package/runtime/python/okstra_vendor/networkx/algorithms/hierarchy.py +0 -57
  207. package/runtime/python/okstra_vendor/networkx/algorithms/hybrid.py +0 -196
  208. package/runtime/python/okstra_vendor/networkx/algorithms/isolate.py +0 -107
  209. package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/__init__.py +0 -7
  210. package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/ismags.py +0 -1306
  211. package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/isomorph.py +0 -336
  212. package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/isomorphvf2.py +0 -1262
  213. package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/matchhelpers.py +0 -352
  214. package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/temporalisomorphvf2.py +0 -308
  215. package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/tree_isomorphism.py +0 -264
  216. package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/vf2pp.py +0 -1102
  217. package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/vf2userfunc.py +0 -192
  218. package/runtime/python/okstra_vendor/networkx/algorithms/link_analysis/__init__.py +0 -2
  219. package/runtime/python/okstra_vendor/networkx/algorithms/link_analysis/hits_alg.py +0 -337
  220. package/runtime/python/okstra_vendor/networkx/algorithms/link_analysis/pagerank_alg.py +0 -498
  221. package/runtime/python/okstra_vendor/networkx/algorithms/link_prediction.py +0 -687
  222. package/runtime/python/okstra_vendor/networkx/algorithms/lowest_common_ancestors.py +0 -280
  223. package/runtime/python/okstra_vendor/networkx/algorithms/matching.py +0 -1148
  224. package/runtime/python/okstra_vendor/networkx/algorithms/minors/__init__.py +0 -27
  225. package/runtime/python/okstra_vendor/networkx/algorithms/minors/contraction.py +0 -738
  226. package/runtime/python/okstra_vendor/networkx/algorithms/mis.py +0 -78
  227. package/runtime/python/okstra_vendor/networkx/algorithms/moral.py +0 -59
  228. package/runtime/python/okstra_vendor/networkx/algorithms/node_classification.py +0 -219
  229. package/runtime/python/okstra_vendor/networkx/algorithms/non_randomness.py +0 -155
  230. package/runtime/python/okstra_vendor/networkx/algorithms/operators/__init__.py +0 -4
  231. package/runtime/python/okstra_vendor/networkx/algorithms/operators/all.py +0 -324
  232. package/runtime/python/okstra_vendor/networkx/algorithms/operators/binary.py +0 -468
  233. package/runtime/python/okstra_vendor/networkx/algorithms/operators/product.py +0 -633
  234. package/runtime/python/okstra_vendor/networkx/algorithms/operators/unary.py +0 -77
  235. package/runtime/python/okstra_vendor/networkx/algorithms/perfect_graph.py +0 -73
  236. package/runtime/python/okstra_vendor/networkx/algorithms/planar_drawing.py +0 -464
  237. package/runtime/python/okstra_vendor/networkx/algorithms/planarity.py +0 -1463
  238. package/runtime/python/okstra_vendor/networkx/algorithms/polynomials.py +0 -306
  239. package/runtime/python/okstra_vendor/networkx/algorithms/reciprocity.py +0 -98
  240. package/runtime/python/okstra_vendor/networkx/algorithms/regular.py +0 -167
  241. package/runtime/python/okstra_vendor/networkx/algorithms/richclub.py +0 -138
  242. package/runtime/python/okstra_vendor/networkx/algorithms/shortest_paths/__init__.py +0 -5
  243. package/runtime/python/okstra_vendor/networkx/algorithms/shortest_paths/astar.py +0 -239
  244. package/runtime/python/okstra_vendor/networkx/algorithms/shortest_paths/dense.py +0 -264
  245. package/runtime/python/okstra_vendor/networkx/algorithms/shortest_paths/generic.py +0 -716
  246. package/runtime/python/okstra_vendor/networkx/algorithms/shortest_paths/unweighted.py +0 -625
  247. package/runtime/python/okstra_vendor/networkx/algorithms/shortest_paths/weighted.py +0 -2542
  248. package/runtime/python/okstra_vendor/networkx/algorithms/similarity.py +0 -2107
  249. package/runtime/python/okstra_vendor/networkx/algorithms/simple_paths.py +0 -966
  250. package/runtime/python/okstra_vendor/networkx/algorithms/smallworld.py +0 -404
  251. package/runtime/python/okstra_vendor/networkx/algorithms/smetric.py +0 -30
  252. package/runtime/python/okstra_vendor/networkx/algorithms/sparsifiers.py +0 -296
  253. package/runtime/python/okstra_vendor/networkx/algorithms/structuralholes.py +0 -374
  254. package/runtime/python/okstra_vendor/networkx/algorithms/summarization.py +0 -564
  255. package/runtime/python/okstra_vendor/networkx/algorithms/swap.py +0 -406
  256. package/runtime/python/okstra_vendor/networkx/algorithms/threshold.py +0 -981
  257. package/runtime/python/okstra_vendor/networkx/algorithms/time_dependent.py +0 -142
  258. package/runtime/python/okstra_vendor/networkx/algorithms/tournament.py +0 -406
  259. package/runtime/python/okstra_vendor/networkx/algorithms/traversal/__init__.py +0 -5
  260. package/runtime/python/okstra_vendor/networkx/algorithms/traversal/beamsearch.py +0 -90
  261. package/runtime/python/okstra_vendor/networkx/algorithms/traversal/breadth_first_search.py +0 -576
  262. package/runtime/python/okstra_vendor/networkx/algorithms/traversal/depth_first_search.py +0 -529
  263. package/runtime/python/okstra_vendor/networkx/algorithms/traversal/edgebfs.py +0 -185
  264. package/runtime/python/okstra_vendor/networkx/algorithms/traversal/edgedfs.py +0 -182
  265. package/runtime/python/okstra_vendor/networkx/algorithms/tree/__init__.py +0 -7
  266. package/runtime/python/okstra_vendor/networkx/algorithms/tree/branchings.py +0 -1042
  267. package/runtime/python/okstra_vendor/networkx/algorithms/tree/coding.py +0 -413
  268. package/runtime/python/okstra_vendor/networkx/algorithms/tree/decomposition.py +0 -88
  269. package/runtime/python/okstra_vendor/networkx/algorithms/tree/distance_measures.py +0 -219
  270. package/runtime/python/okstra_vendor/networkx/algorithms/tree/mst.py +0 -1281
  271. package/runtime/python/okstra_vendor/networkx/algorithms/tree/operations.py +0 -106
  272. package/runtime/python/okstra_vendor/networkx/algorithms/tree/recognition.py +0 -273
  273. package/runtime/python/okstra_vendor/networkx/algorithms/triads.py +0 -500
  274. package/runtime/python/okstra_vendor/networkx/algorithms/vitality.py +0 -76
  275. package/runtime/python/okstra_vendor/networkx/algorithms/voronoi.py +0 -86
  276. package/runtime/python/okstra_vendor/networkx/algorithms/walks.py +0 -77
  277. package/runtime/python/okstra_vendor/networkx/algorithms/wiener.py +0 -278
  278. package/runtime/python/okstra_vendor/networkx/classes/__init__.py +0 -13
  279. package/runtime/python/okstra_vendor/networkx/classes/coreviews.py +0 -435
  280. package/runtime/python/okstra_vendor/networkx/classes/digraph.py +0 -1363
  281. package/runtime/python/okstra_vendor/networkx/classes/filters.py +0 -95
  282. package/runtime/python/okstra_vendor/networkx/classes/function.py +0 -1549
  283. package/runtime/python/okstra_vendor/networkx/classes/graph.py +0 -2082
  284. package/runtime/python/okstra_vendor/networkx/classes/graphviews.py +0 -269
  285. package/runtime/python/okstra_vendor/networkx/classes/multidigraph.py +0 -977
  286. package/runtime/python/okstra_vendor/networkx/classes/multigraph.py +0 -1294
  287. package/runtime/python/okstra_vendor/networkx/classes/reportviews.py +0 -1447
  288. package/runtime/python/okstra_vendor/networkx/convert.py +0 -502
  289. package/runtime/python/okstra_vendor/networkx/convert_matrix.py +0 -1314
  290. package/runtime/python/okstra_vendor/networkx/drawing/__init__.py +0 -7
  291. package/runtime/python/okstra_vendor/networkx/drawing/layout.py +0 -2036
  292. package/runtime/python/okstra_vendor/networkx/drawing/nx_agraph.py +0 -470
  293. package/runtime/python/okstra_vendor/networkx/drawing/nx_latex.py +0 -570
  294. package/runtime/python/okstra_vendor/networkx/drawing/nx_pydot.py +0 -361
  295. package/runtime/python/okstra_vendor/networkx/drawing/nx_pylab.py +0 -2978
  296. package/runtime/python/okstra_vendor/networkx/exception.py +0 -131
  297. package/runtime/python/okstra_vendor/networkx/generators/__init__.py +0 -34
  298. package/runtime/python/okstra_vendor/networkx/generators/atlas.dat.gz +0 -0
  299. package/runtime/python/okstra_vendor/networkx/generators/atlas.py +0 -227
  300. package/runtime/python/okstra_vendor/networkx/generators/classic.py +0 -1091
  301. package/runtime/python/okstra_vendor/networkx/generators/cographs.py +0 -68
  302. package/runtime/python/okstra_vendor/networkx/generators/community.py +0 -1070
  303. package/runtime/python/okstra_vendor/networkx/generators/degree_seq.py +0 -886
  304. package/runtime/python/okstra_vendor/networkx/generators/directed.py +0 -572
  305. package/runtime/python/okstra_vendor/networkx/generators/duplication.py +0 -174
  306. package/runtime/python/okstra_vendor/networkx/generators/ego.py +0 -66
  307. package/runtime/python/okstra_vendor/networkx/generators/expanders.py +0 -499
  308. package/runtime/python/okstra_vendor/networkx/generators/geometric.py +0 -1037
  309. package/runtime/python/okstra_vendor/networkx/generators/harary_graph.py +0 -163
  310. package/runtime/python/okstra_vendor/networkx/generators/internet_as_graphs.py +0 -443
  311. package/runtime/python/okstra_vendor/networkx/generators/intersection.py +0 -125
  312. package/runtime/python/okstra_vendor/networkx/generators/interval_graph.py +0 -70
  313. package/runtime/python/okstra_vendor/networkx/generators/joint_degree_seq.py +0 -664
  314. package/runtime/python/okstra_vendor/networkx/generators/lattice.py +0 -405
  315. package/runtime/python/okstra_vendor/networkx/generators/line.py +0 -501
  316. package/runtime/python/okstra_vendor/networkx/generators/mycielski.py +0 -110
  317. package/runtime/python/okstra_vendor/networkx/generators/nonisomorphic_trees.py +0 -259
  318. package/runtime/python/okstra_vendor/networkx/generators/random_clustered.py +0 -117
  319. package/runtime/python/okstra_vendor/networkx/generators/random_graphs.py +0 -1416
  320. package/runtime/python/okstra_vendor/networkx/generators/small.py +0 -1070
  321. package/runtime/python/okstra_vendor/networkx/generators/social.py +0 -554
  322. package/runtime/python/okstra_vendor/networkx/generators/spectral_graph_forge.py +0 -120
  323. package/runtime/python/okstra_vendor/networkx/generators/stochastic.py +0 -54
  324. package/runtime/python/okstra_vendor/networkx/generators/sudoku.py +0 -131
  325. package/runtime/python/okstra_vendor/networkx/generators/time_series.py +0 -74
  326. package/runtime/python/okstra_vendor/networkx/generators/trees.py +0 -1070
  327. package/runtime/python/okstra_vendor/networkx/generators/triads.py +0 -94
  328. package/runtime/python/okstra_vendor/networkx/lazy_imports.py +0 -188
  329. package/runtime/python/okstra_vendor/networkx/linalg/__init__.py +0 -13
  330. package/runtime/python/okstra_vendor/networkx/linalg/algebraicconnectivity.py +0 -650
  331. package/runtime/python/okstra_vendor/networkx/linalg/attrmatrix.py +0 -466
  332. package/runtime/python/okstra_vendor/networkx/linalg/bethehessianmatrix.py +0 -77
  333. package/runtime/python/okstra_vendor/networkx/linalg/graphmatrix.py +0 -168
  334. package/runtime/python/okstra_vendor/networkx/linalg/laplacianmatrix.py +0 -512
  335. package/runtime/python/okstra_vendor/networkx/linalg/modularitymatrix.py +0 -166
  336. package/runtime/python/okstra_vendor/networkx/linalg/spectrum.py +0 -186
  337. package/runtime/python/okstra_vendor/networkx/readwrite/__init__.py +0 -17
  338. package/runtime/python/okstra_vendor/networkx/readwrite/adjlist.py +0 -330
  339. package/runtime/python/okstra_vendor/networkx/readwrite/edgelist.py +0 -489
  340. package/runtime/python/okstra_vendor/networkx/readwrite/gexf.py +0 -1084
  341. package/runtime/python/okstra_vendor/networkx/readwrite/gml.py +0 -879
  342. package/runtime/python/okstra_vendor/networkx/readwrite/graph6.py +0 -427
  343. package/runtime/python/okstra_vendor/networkx/readwrite/graphml.py +0 -1053
  344. package/runtime/python/okstra_vendor/networkx/readwrite/json_graph/__init__.py +0 -19
  345. package/runtime/python/okstra_vendor/networkx/readwrite/json_graph/adjacency.py +0 -156
  346. package/runtime/python/okstra_vendor/networkx/readwrite/json_graph/cytoscape.py +0 -190
  347. package/runtime/python/okstra_vendor/networkx/readwrite/json_graph/node_link.py +0 -261
  348. package/runtime/python/okstra_vendor/networkx/readwrite/json_graph/tree.py +0 -137
  349. package/runtime/python/okstra_vendor/networkx/readwrite/leda.py +0 -108
  350. package/runtime/python/okstra_vendor/networkx/readwrite/multiline_adjlist.py +0 -393
  351. package/runtime/python/okstra_vendor/networkx/readwrite/p2g.py +0 -113
  352. package/runtime/python/okstra_vendor/networkx/readwrite/pajek.py +0 -286
  353. package/runtime/python/okstra_vendor/networkx/readwrite/sparse6.py +0 -379
  354. package/runtime/python/okstra_vendor/networkx/readwrite/text.py +0 -851
  355. package/runtime/python/okstra_vendor/networkx/relabel.py +0 -285
  356. package/runtime/python/okstra_vendor/networkx/utils/__init__.py +0 -8
  357. package/runtime/python/okstra_vendor/networkx/utils/backends.py +0 -2171
  358. package/runtime/python/okstra_vendor/networkx/utils/configs.py +0 -396
  359. package/runtime/python/okstra_vendor/networkx/utils/decorators.py +0 -1233
  360. package/runtime/python/okstra_vendor/networkx/utils/heaps.py +0 -338
  361. package/runtime/python/okstra_vendor/networkx/utils/mapped_queue.py +0 -297
  362. package/runtime/python/okstra_vendor/networkx/utils/misc.py +0 -703
  363. package/runtime/python/okstra_vendor/networkx/utils/random_sequence.py +0 -198
  364. package/runtime/python/okstra_vendor/networkx/utils/rcm.py +0 -159
  365. package/runtime/python/okstra_vendor/networkx/utils/union_find.py +0 -106
  366. package/runtime/skills/okstra-graphify/SKILL.md +0 -169
  367. package/src/commands/graphify.mjs +0 -32
@@ -1,1070 +0,0 @@
1
- """
2
- Various small and named graphs, together with some compact generators.
3
-
4
- """
5
-
6
- __all__ = [
7
- "LCF_graph",
8
- "bull_graph",
9
- "chvatal_graph",
10
- "cubical_graph",
11
- "desargues_graph",
12
- "diamond_graph",
13
- "dodecahedral_graph",
14
- "frucht_graph",
15
- "generalized_petersen_graph",
16
- "heawood_graph",
17
- "hoffman_singleton_graph",
18
- "house_graph",
19
- "house_x_graph",
20
- "icosahedral_graph",
21
- "krackhardt_kite_graph",
22
- "moebius_kantor_graph",
23
- "octahedral_graph",
24
- "pappus_graph",
25
- "petersen_graph",
26
- "sedgewick_maze_graph",
27
- "tetrahedral_graph",
28
- "truncated_cube_graph",
29
- "truncated_tetrahedron_graph",
30
- "tutte_graph",
31
- ]
32
-
33
- from functools import wraps
34
-
35
- import networkx as nx
36
- from networkx.exception import NetworkXError
37
- from networkx.generators.classic import (
38
- complete_graph,
39
- cycle_graph,
40
- empty_graph,
41
- path_graph,
42
- )
43
-
44
-
45
- def _raise_on_directed(func):
46
- """
47
- A decorator which inspects the `create_using` argument and raises a
48
- NetworkX exception when `create_using` is a DiGraph (class or instance) for
49
- graph generators that do not support directed outputs.
50
-
51
- `create_using` may be a keyword argument or the first positional argument.
52
- """
53
-
54
- @wraps(func)
55
- def wrapper(*args, **kwargs):
56
- create_using = args[0] if args else kwargs.get("create_using")
57
- if create_using is not None:
58
- G = nx.empty_graph(create_using=create_using)
59
- if G.is_directed():
60
- raise NetworkXError("Directed Graph not supported in create_using")
61
- return func(*args, **kwargs)
62
-
63
- return wrapper
64
-
65
-
66
- @nx._dispatchable(graphs=None, returns_graph=True)
67
- def LCF_graph(n, shift_list, repeats, create_using=None):
68
- """
69
- Return the cubic graph specified in LCF notation.
70
-
71
- LCF (Lederberg-Coxeter-Fruchte) notation[1]_ is a compressed
72
- notation used in the generation of various cubic Hamiltonian
73
- graphs of high symmetry. See, for example, `dodecahedral_graph`,
74
- `desargues_graph`, `heawood_graph` and `pappus_graph`.
75
-
76
- Nodes are drawn from ``range(n)``. Each node ``n_i`` is connected with
77
- node ``n_i + shift % n`` where ``shift`` is given by cycling through
78
- the input `shift_list` `repeat` s times.
79
-
80
- Parameters
81
- ----------
82
- n : int
83
- The starting graph is the `n`-cycle with nodes ``0, ..., n-1``.
84
- The null graph is returned if `n` < 1.
85
-
86
- shift_list : list
87
- A list of integer shifts mod `n`, ``[s1, s2, .., sk]``
88
-
89
- repeats : int
90
- Integer specifying the number of times that shifts in `shift_list`
91
- are successively applied to each current node in the n-cycle
92
- to generate an edge between ``n_current`` and ``n_current + shift mod n``.
93
-
94
- Returns
95
- -------
96
- G : Graph
97
- A graph instance created from the specified LCF notation.
98
-
99
- Examples
100
- --------
101
- The utility graph $K_{3,3}$
102
-
103
- >>> G = nx.LCF_graph(6, [3, -3], 3)
104
- >>> G.edges()
105
- EdgeView([(0, 1), (0, 5), (0, 3), (1, 2), (1, 4), (2, 3), (2, 5), (3, 4), (4, 5)])
106
-
107
- The Heawood graph:
108
-
109
- >>> G = nx.LCF_graph(14, [5, -5], 7)
110
- >>> nx.is_isomorphic(G, nx.heawood_graph())
111
- True
112
-
113
- References
114
- ----------
115
- .. [1] https://en.wikipedia.org/wiki/LCF_notation
116
-
117
- """
118
- if n <= 0:
119
- return empty_graph(0, create_using)
120
-
121
- # start with the n-cycle
122
- G = cycle_graph(n, create_using)
123
- if G.is_directed():
124
- raise NetworkXError("Directed Graph not supported")
125
- G.name = "LCF_graph"
126
- nodes = sorted(G)
127
-
128
- n_extra_edges = repeats * len(shift_list)
129
- # edges are added n_extra_edges times
130
- # (not all of these need be new)
131
- if n_extra_edges < 1:
132
- return G
133
-
134
- for i in range(n_extra_edges):
135
- shift = shift_list[i % len(shift_list)] # cycle through shift_list
136
- v1 = nodes[i % n] # cycle repeatedly through nodes
137
- v2 = nodes[(i + shift) % n]
138
- G.add_edge(v1, v2)
139
- return G
140
-
141
-
142
- # -------------------------------------------------------------------------------
143
- # Various small and named graphs
144
- # -------------------------------------------------------------------------------
145
-
146
-
147
- @_raise_on_directed
148
- @nx._dispatchable(graphs=None, returns_graph=True)
149
- def bull_graph(create_using=None):
150
- """
151
- Returns the Bull Graph
152
-
153
- The Bull Graph has 5 nodes and 5 edges. It is a planar undirected
154
- graph in the form of a triangle with two disjoint pendant edges [1]_
155
- The name comes from the triangle and pendant edges representing
156
- respectively the body and legs of a bull.
157
-
158
- Parameters
159
- ----------
160
- create_using : NetworkX graph constructor, optional (default=nx.Graph)
161
- Graph type to create. If graph instance, then cleared before populated.
162
-
163
- Returns
164
- -------
165
- G : networkx Graph
166
- A bull graph with 5 nodes
167
-
168
- References
169
- ----------
170
- .. [1] https://en.wikipedia.org/wiki/Bull_graph.
171
-
172
- """
173
- G = nx.from_dict_of_lists(
174
- {0: [1, 2], 1: [0, 2, 3], 2: [0, 1, 4], 3: [1], 4: [2]},
175
- create_using=create_using,
176
- )
177
- G.name = "Bull Graph"
178
- return G
179
-
180
-
181
- @_raise_on_directed
182
- @nx._dispatchable(graphs=None, returns_graph=True)
183
- def chvatal_graph(create_using=None):
184
- """
185
- Returns the Chvátal Graph
186
-
187
- The Chvátal Graph is an undirected graph with 12 nodes and 24 edges [1]_.
188
- It has 370 distinct (directed) Hamiltonian cycles, giving a unique generalized
189
- LCF notation of order 4, two of order 6 , and 43 of order 1 [2]_.
190
-
191
- Parameters
192
- ----------
193
- create_using : NetworkX graph constructor, optional (default=nx.Graph)
194
- Graph type to create. If graph instance, then cleared before populated.
195
-
196
- Returns
197
- -------
198
- G : networkx Graph
199
- The Chvátal graph with 12 nodes and 24 edges
200
-
201
- References
202
- ----------
203
- .. [1] https://en.wikipedia.org/wiki/Chv%C3%A1tal_graph
204
- .. [2] https://mathworld.wolfram.com/ChvatalGraph.html
205
-
206
- """
207
- G = nx.from_dict_of_lists(
208
- {
209
- 0: [1, 4, 6, 9],
210
- 1: [2, 5, 7],
211
- 2: [3, 6, 8],
212
- 3: [4, 7, 9],
213
- 4: [5, 8],
214
- 5: [10, 11],
215
- 6: [10, 11],
216
- 7: [8, 11],
217
- 8: [10],
218
- 9: [10, 11],
219
- },
220
- create_using=create_using,
221
- )
222
- G.name = "Chvatal Graph"
223
- return G
224
-
225
-
226
- @_raise_on_directed
227
- @nx._dispatchable(graphs=None, returns_graph=True)
228
- def cubical_graph(create_using=None):
229
- """
230
- Returns the 3-regular Platonic Cubical Graph
231
-
232
- The skeleton of the cube (the nodes and edges) form a graph, with 8
233
- nodes, and 12 edges. It is a special case of the hypercube graph.
234
- It is one of 5 Platonic graphs, each a skeleton of its
235
- Platonic solid [1]_.
236
- Such graphs arise in parallel processing in computers.
237
-
238
- Parameters
239
- ----------
240
- create_using : NetworkX graph constructor, optional (default=nx.Graph)
241
- Graph type to create. If graph instance, then cleared before populated.
242
-
243
- Returns
244
- -------
245
- G : networkx Graph
246
- A cubical graph with 8 nodes and 12 edges
247
-
248
- See Also
249
- --------
250
- tetrahedral_graph, octahedral_graph, dodecahedral_graph, icosahedral_graph
251
-
252
- References
253
- ----------
254
- .. [1] https://en.wikipedia.org/wiki/Cube#Cubical_graph
255
-
256
- """
257
- G = nx.from_dict_of_lists(
258
- {
259
- 0: [1, 3, 4],
260
- 1: [0, 2, 7],
261
- 2: [1, 3, 6],
262
- 3: [0, 2, 5],
263
- 4: [0, 5, 7],
264
- 5: [3, 4, 6],
265
- 6: [2, 5, 7],
266
- 7: [1, 4, 6],
267
- },
268
- create_using=create_using,
269
- )
270
- G.name = "Platonic Cubical Graph"
271
- return G
272
-
273
-
274
- @nx._dispatchable(graphs=None, returns_graph=True)
275
- def desargues_graph(create_using=None):
276
- """
277
- Returns the Desargues Graph
278
-
279
- The Desargues Graph is a non-planar, distance-transitive cubic graph
280
- with 20 nodes and 30 edges [1]_. It is isomorphic to the Generalized
281
- Petersen Graph GP(10, 3). It is a symmetric graph. It can be represented
282
- in LCF notation as [5,-5,9,-9]^5 [2]_.
283
-
284
- Parameters
285
- ----------
286
- create_using : NetworkX graph constructor, optional (default=nx.Graph)
287
- Graph type to create. If graph instance, then cleared before populated.
288
-
289
- Returns
290
- -------
291
- G : networkx Graph
292
- Desargues Graph with 20 nodes and 30 edges
293
-
294
- References
295
- ----------
296
- .. [1] https://en.wikipedia.org/wiki/Desargues_graph
297
- .. [2] https://mathworld.wolfram.com/DesarguesGraph.html
298
- """
299
- G = LCF_graph(20, [5, -5, 9, -9], 5, create_using)
300
- G.name = "Desargues Graph"
301
- return G
302
-
303
-
304
- @_raise_on_directed
305
- @nx._dispatchable(graphs=None, returns_graph=True)
306
- def diamond_graph(create_using=None):
307
- """
308
- Returns the Diamond graph
309
-
310
- The Diamond Graph is planar undirected graph with 4 nodes and 5 edges.
311
- It is also sometimes known as the double triangle graph or kite graph [1]_.
312
-
313
- Parameters
314
- ----------
315
- create_using : NetworkX graph constructor, optional (default=nx.Graph)
316
- Graph type to create. If graph instance, then cleared before populated.
317
-
318
- Returns
319
- -------
320
- G : networkx Graph
321
- Diamond Graph with 4 nodes and 5 edges
322
-
323
- References
324
- ----------
325
- .. [1] https://mathworld.wolfram.com/DiamondGraph.html
326
- """
327
- G = nx.from_dict_of_lists(
328
- {0: [1, 2], 1: [0, 2, 3], 2: [0, 1, 3], 3: [1, 2]}, create_using=create_using
329
- )
330
- G.name = "Diamond Graph"
331
- return G
332
-
333
-
334
- @nx._dispatchable(graphs=None, returns_graph=True)
335
- def dodecahedral_graph(create_using=None):
336
- """
337
- Returns the Platonic Dodecahedral graph.
338
-
339
- The dodecahedral graph has 20 nodes and 30 edges. The skeleton of the
340
- dodecahedron forms a graph. It is one of 5 Platonic graphs [1]_.
341
- It can be described in LCF notation as:
342
- ``[10, 7, 4, -4, -7, 10, -4, 7, -7, 4]^2`` [2]_.
343
-
344
- Parameters
345
- ----------
346
- create_using : NetworkX graph constructor, optional (default=nx.Graph)
347
- Graph type to create. If graph instance, then cleared before populated.
348
-
349
- Returns
350
- -------
351
- G : networkx Graph
352
- Dodecahedral Graph with 20 nodes and 30 edges
353
-
354
- See Also
355
- --------
356
- tetrahedral_graph, cubical_graph, octahedral_graph, icosahedral_graph
357
-
358
- References
359
- ----------
360
- .. [1] https://en.wikipedia.org/wiki/Regular_dodecahedron#Dodecahedral_graph
361
- .. [2] https://mathworld.wolfram.com/DodecahedralGraph.html
362
-
363
- """
364
- G = LCF_graph(20, [10, 7, 4, -4, -7, 10, -4, 7, -7, 4], 2, create_using)
365
- G.name = "Dodecahedral Graph"
366
- return G
367
-
368
-
369
- @nx._dispatchable(graphs=None, returns_graph=True)
370
- def frucht_graph(create_using=None):
371
- """
372
- Returns the Frucht Graph.
373
-
374
- The Frucht Graph is the smallest cubical graph whose
375
- automorphism group consists only of the identity element [1]_.
376
- It has 12 nodes and 18 edges and no nontrivial symmetries.
377
- It is planar and Hamiltonian [2]_.
378
-
379
- Parameters
380
- ----------
381
- create_using : NetworkX graph constructor, optional (default=nx.Graph)
382
- Graph type to create. If graph instance, then cleared before populated.
383
-
384
- Returns
385
- -------
386
- G : networkx Graph
387
- Frucht Graph with 12 nodes and 18 edges
388
-
389
- References
390
- ----------
391
- .. [1] https://en.wikipedia.org/wiki/Frucht_graph
392
- .. [2] https://mathworld.wolfram.com/FruchtGraph.html
393
-
394
- """
395
- G = cycle_graph(7, create_using)
396
- G.add_edges_from(
397
- [
398
- [0, 7],
399
- [1, 7],
400
- [2, 8],
401
- [3, 9],
402
- [4, 9],
403
- [5, 10],
404
- [6, 10],
405
- [7, 11],
406
- [8, 11],
407
- [8, 9],
408
- [10, 11],
409
- ]
410
- )
411
-
412
- G.name = "Frucht Graph"
413
- return G
414
-
415
-
416
- @nx._dispatchable(graphs=None, returns_graph=True)
417
- def heawood_graph(create_using=None):
418
- """
419
- Returns the Heawood Graph, a (3,6) cage.
420
-
421
- The Heawood Graph is an undirected graph with 14 nodes and 21 edges,
422
- named after Percy John Heawood [1]_.
423
- It is cubic symmetric, nonplanar, Hamiltonian, and can be represented
424
- in LCF notation as ``[5,-5]^7`` [2]_.
425
- It is the unique (3,6)-cage: the regular cubic graph of girth 6 with
426
- minimal number of vertices [3]_.
427
-
428
- Parameters
429
- ----------
430
- create_using : NetworkX graph constructor, optional (default=nx.Graph)
431
- Graph type to create. If graph instance, then cleared before populated.
432
-
433
- Returns
434
- -------
435
- G : networkx Graph
436
- Heawood Graph with 14 nodes and 21 edges
437
-
438
- References
439
- ----------
440
- .. [1] https://en.wikipedia.org/wiki/Heawood_graph
441
- .. [2] https://mathworld.wolfram.com/HeawoodGraph.html
442
- .. [3] https://www.win.tue.nl/~aeb/graphs/Heawood.html
443
-
444
- """
445
- G = LCF_graph(14, [5, -5], 7, create_using)
446
- G.name = "Heawood Graph"
447
- return G
448
-
449
-
450
- @nx._dispatchable(graphs=None, returns_graph=True)
451
- def hoffman_singleton_graph():
452
- """
453
- Returns the Hoffman-Singleton Graph.
454
-
455
- The Hoffman–Singleton graph is a symmetrical undirected graph
456
- with 50 nodes and 175 edges.
457
- All indices lie in ``Z % 5``: that is, the integers mod 5 [1]_.
458
- It is the only regular graph of vertex degree 7, diameter 2, and girth 5.
459
- It is the unique (7,5)-cage graph and Moore graph, and contains many
460
- copies of the Petersen Graph [2]_.
461
-
462
- Returns
463
- -------
464
- G : networkx Graph
465
- Hoffman–Singleton Graph with 50 nodes and 175 edges
466
-
467
- Notes
468
- -----
469
- Constructed from pentagon and pentagram as follows: Take five pentagons $P_h$
470
- and five pentagrams $Q_i$ . Join vertex $j$ of $P_h$ to vertex $h·i+j$ of $Q_i$ [3]_.
471
-
472
- References
473
- ----------
474
- .. [1] https://blogs.ams.org/visualinsight/2016/02/01/hoffman-singleton-graph/
475
- .. [2] https://mathworld.wolfram.com/Hoffman-SingletonGraph.html
476
- .. [3] https://en.wikipedia.org/wiki/Hoffman%E2%80%93Singleton_graph
477
-
478
- """
479
- G = nx.Graph()
480
- for i in range(5):
481
- for j in range(5):
482
- G.add_edge(("pentagon", i, j), ("pentagon", i, (j - 1) % 5))
483
- G.add_edge(("pentagon", i, j), ("pentagon", i, (j + 1) % 5))
484
- G.add_edge(("pentagram", i, j), ("pentagram", i, (j - 2) % 5))
485
- G.add_edge(("pentagram", i, j), ("pentagram", i, (j + 2) % 5))
486
- for k in range(5):
487
- G.add_edge(("pentagon", i, j), ("pentagram", k, (i * k + j) % 5))
488
- G = nx.convert_node_labels_to_integers(G)
489
- G.name = "Hoffman-Singleton Graph"
490
- return G
491
-
492
-
493
- @_raise_on_directed
494
- @nx._dispatchable(graphs=None, returns_graph=True)
495
- def house_graph(create_using=None):
496
- """
497
- Returns the House graph (square with triangle on top)
498
-
499
- The house graph is a simple undirected graph with
500
- 5 nodes and 6 edges [1]_.
501
-
502
- Parameters
503
- ----------
504
- create_using : NetworkX graph constructor, optional (default=nx.Graph)
505
- Graph type to create. If graph instance, then cleared before populated.
506
-
507
- Returns
508
- -------
509
- G : networkx Graph
510
- House graph in the form of a square with a triangle on top
511
-
512
- References
513
- ----------
514
- .. [1] https://mathworld.wolfram.com/HouseGraph.html
515
- """
516
- G = nx.from_dict_of_lists(
517
- {0: [1, 2], 1: [0, 3], 2: [0, 3, 4], 3: [1, 2, 4], 4: [2, 3]},
518
- create_using=create_using,
519
- )
520
- G.name = "House Graph"
521
- return G
522
-
523
-
524
- @_raise_on_directed
525
- @nx._dispatchable(graphs=None, returns_graph=True)
526
- def house_x_graph(create_using=None):
527
- """
528
- Returns the House graph with a cross inside the house square.
529
-
530
- The House X-graph is the House graph plus the two edges connecting diagonally
531
- opposite vertices of the square base. It is also one of the two graphs
532
- obtained by removing two edges from the pentatope graph [1]_.
533
-
534
- Parameters
535
- ----------
536
- create_using : NetworkX graph constructor, optional (default=nx.Graph)
537
- Graph type to create. If graph instance, then cleared before populated.
538
-
539
- Returns
540
- -------
541
- G : networkx Graph
542
- House graph with diagonal vertices connected
543
-
544
- References
545
- ----------
546
- .. [1] https://mathworld.wolfram.com/HouseGraph.html
547
- """
548
- G = house_graph(create_using)
549
- G.add_edges_from([(0, 3), (1, 2)])
550
- G.name = "House-with-X-inside Graph"
551
- return G
552
-
553
-
554
- @_raise_on_directed
555
- @nx._dispatchable(graphs=None, returns_graph=True)
556
- def icosahedral_graph(create_using=None):
557
- """
558
- Returns the Platonic Icosahedral graph.
559
-
560
- The icosahedral graph has 12 nodes and 30 edges. It is a Platonic graph
561
- whose nodes have the connectivity of the icosahedron. It is undirected,
562
- regular and Hamiltonian [1]_.
563
-
564
- Parameters
565
- ----------
566
- create_using : NetworkX graph constructor, optional (default=nx.Graph)
567
- Graph type to create. If graph instance, then cleared before populated.
568
-
569
- Returns
570
- -------
571
- G : networkx Graph
572
- Icosahedral graph with 12 nodes and 30 edges.
573
-
574
- See Also
575
- --------
576
- tetrahedral_graph, cubical_graph, octahedral_graph, dodecahedral_graph
577
-
578
- References
579
- ----------
580
- .. [1] https://mathworld.wolfram.com/IcosahedralGraph.html
581
- """
582
- G = nx.from_dict_of_lists(
583
- {
584
- 0: [1, 5, 7, 8, 11],
585
- 1: [2, 5, 6, 8],
586
- 2: [3, 6, 8, 9],
587
- 3: [4, 6, 9, 10],
588
- 4: [5, 6, 10, 11],
589
- 5: [6, 11],
590
- 7: [8, 9, 10, 11],
591
- 8: [9],
592
- 9: [10],
593
- 10: [11],
594
- },
595
- create_using=create_using,
596
- )
597
- G.name = "Platonic Icosahedral Graph"
598
- return G
599
-
600
-
601
- @_raise_on_directed
602
- @nx._dispatchable(graphs=None, returns_graph=True)
603
- def krackhardt_kite_graph(create_using=None):
604
- """
605
- Returns the Krackhardt Kite Social Network.
606
-
607
- A 10 actor social network introduced by David Krackhardt
608
- to illustrate different centrality measures [1]_.
609
-
610
- Parameters
611
- ----------
612
- create_using : NetworkX graph constructor, optional (default=nx.Graph)
613
- Graph type to create. If graph instance, then cleared before populated.
614
-
615
- Returns
616
- -------
617
- G : networkx Graph
618
- Krackhardt Kite graph with 10 nodes and 18 edges
619
-
620
- Notes
621
- -----
622
- The traditional labeling is:
623
- Andre=1, Beverley=2, Carol=3, Diane=4,
624
- Ed=5, Fernando=6, Garth=7, Heather=8, Ike=9, Jane=10.
625
-
626
- References
627
- ----------
628
- .. [1] Krackhardt, David. "Assessing the Political Landscape: Structure,
629
- Cognition, and Power in Organizations". Administrative Science Quarterly.
630
- 35 (2): 342–369. doi:10.2307/2393394. JSTOR 2393394. June 1990.
631
-
632
- """
633
- G = nx.from_dict_of_lists(
634
- {
635
- 0: [1, 2, 3, 5],
636
- 1: [0, 3, 4, 6],
637
- 2: [0, 3, 5],
638
- 3: [0, 1, 2, 4, 5, 6],
639
- 4: [1, 3, 6],
640
- 5: [0, 2, 3, 6, 7],
641
- 6: [1, 3, 4, 5, 7],
642
- 7: [5, 6, 8],
643
- 8: [7, 9],
644
- 9: [8],
645
- },
646
- create_using=create_using,
647
- )
648
- G.name = "Krackhardt Kite Social Network"
649
- return G
650
-
651
-
652
- @nx._dispatchable(graphs=None, returns_graph=True)
653
- def moebius_kantor_graph(create_using=None):
654
- """
655
- Returns the Moebius-Kantor graph.
656
-
657
- The Möbius-Kantor graph is the cubic symmetric graph on 16 nodes.
658
- Its LCF notation is [5,-5]^8, and it is isomorphic to the generalized
659
- Petersen Graph GP(8, 3) [1]_.
660
-
661
- Parameters
662
- ----------
663
- create_using : NetworkX graph constructor, optional (default=nx.Graph)
664
- Graph type to create. If graph instance, then cleared before populated.
665
-
666
- Returns
667
- -------
668
- G : networkx Graph
669
- Moebius-Kantor graph
670
-
671
- References
672
- ----------
673
- .. [1] https://en.wikipedia.org/wiki/M%C3%B6bius%E2%80%93Kantor_graph
674
-
675
- """
676
- G = LCF_graph(16, [5, -5], 8, create_using)
677
- G.name = "Moebius-Kantor Graph"
678
- return G
679
-
680
-
681
- @_raise_on_directed
682
- @nx._dispatchable(graphs=None, returns_graph=True)
683
- def octahedral_graph(create_using=None):
684
- """
685
- Returns the Platonic Octahedral graph.
686
-
687
- The octahedral graph is the 6-node 12-edge Platonic graph having the
688
- connectivity of the octahedron [1]_. If 6 couples go to a party,
689
- and each person shakes hands with every person except his or her partner,
690
- then this graph describes the set of handshakes that take place;
691
- for this reason it is also called the cocktail party graph [2]_.
692
-
693
- Parameters
694
- ----------
695
- create_using : NetworkX graph constructor, optional (default=nx.Graph)
696
- Graph type to create. If graph instance, then cleared before populated.
697
-
698
- Returns
699
- -------
700
- G : networkx Graph
701
- Octahedral graph
702
-
703
- See Also
704
- --------
705
- tetrahedral_graph, cubical_graph, dodecahedral_graph, icosahedral_graph
706
-
707
- References
708
- ----------
709
- .. [1] https://mathworld.wolfram.com/OctahedralGraph.html
710
- .. [2] https://en.wikipedia.org/wiki/Tur%C3%A1n_graph#Special_cases
711
-
712
- """
713
- G = nx.from_dict_of_lists(
714
- {0: [1, 2, 3, 4], 1: [2, 3, 5], 2: [4, 5], 3: [4, 5], 4: [5]},
715
- create_using=create_using,
716
- )
717
- G.name = "Platonic Octahedral Graph"
718
- return G
719
-
720
-
721
- @nx._dispatchable(graphs=None, returns_graph=True)
722
- def pappus_graph():
723
- """
724
- Returns the Pappus graph.
725
-
726
- The Pappus graph is a cubic symmetric distance-regular graph with 18 nodes
727
- and 27 edges. It is Hamiltonian and can be represented in LCF notation as
728
- [5,7,-7,7,-7,-5]^3 [1]_.
729
-
730
- Returns
731
- -------
732
- G : networkx Graph
733
- Pappus graph
734
-
735
- References
736
- ----------
737
- .. [1] https://en.wikipedia.org/wiki/Pappus_graph
738
- """
739
- G = LCF_graph(18, [5, 7, -7, 7, -7, -5], 3)
740
- G.name = "Pappus Graph"
741
- return G
742
-
743
-
744
- @_raise_on_directed
745
- @nx._dispatchable(graphs=None, returns_graph=True)
746
- def petersen_graph(create_using=None):
747
- """
748
- Returns the Petersen Graph.
749
-
750
- The Peterson Graph is a cubic, undirected graph with 10 nodes and 15 edges [1]_.
751
- Julius Petersen constructed the graph as the smallest counterexample
752
- against the claim that a connected bridgeless cubic graph
753
- has an edge colouring with three colours [2]_.
754
-
755
- Parameters
756
- ----------
757
- create_using : NetworkX graph constructor, optional (default=nx.Graph)
758
- Graph type to create. If graph instance, then cleared before populated.
759
-
760
- Returns
761
- -------
762
- G : networkx Graph
763
- Petersen Graph
764
-
765
- References
766
- ----------
767
- .. [1] https://en.wikipedia.org/wiki/Petersen_graph
768
- .. [2] https://www.win.tue.nl/~aeb/drg/graphs/Petersen.html
769
- """
770
- G = nx.from_dict_of_lists(
771
- {
772
- 0: [1, 4, 5],
773
- 1: [0, 2, 6],
774
- 2: [1, 3, 7],
775
- 3: [2, 4, 8],
776
- 4: [3, 0, 9],
777
- 5: [0, 7, 8],
778
- 6: [1, 8, 9],
779
- 7: [2, 5, 9],
780
- 8: [3, 5, 6],
781
- 9: [4, 6, 7],
782
- },
783
- create_using=create_using,
784
- )
785
- G.name = "Petersen Graph"
786
- return G
787
-
788
-
789
- @nx._dispatchable(graphs=None, returns_graph=True)
790
- def generalized_petersen_graph(n, k, *, create_using=None):
791
- """
792
- Returns the Generalized Petersen Graph GP(n,k).
793
-
794
- The Generalized Peterson Graph consists of an outer cycle of n nodes
795
- connected to an inner circulant graph of n nodes, where nodes in the
796
- inner circulant are connected to their kth nearest neighbor [1]_ [2]_.
797
- A Generalized Petersen Graph is cubic with 2n nodes and 3n edges.
798
-
799
- Some well known graphs are examples of Generalized Petersen Graphs such
800
- as the Petersen Graph GP(5, 2), the Desargues graph GP(10, 3), the
801
- Moebius-Kantor graph GP(8, 3), and the dodecahedron graph GP(10, 2).
802
-
803
- Parameters
804
- ----------
805
- n : int
806
- Number of nodes in the outer cycle and inner circulant. ``n >= 3`` is required.
807
-
808
- k : int
809
- Neighbor to connect in the inner circulant. ``1 <= k <= n/2``.
810
- Note that some people require ``k < n/2`` but we and others allow equality.
811
- Also, ``k < n/2`` is equivalent to ``k <= floor((n-1)/2)``
812
-
813
- create_using : NetworkX graph constructor, optional (default=nx.Graph)
814
- Graph type to create. If graph instance, then cleared before populated.
815
-
816
- Returns
817
- -------
818
- G : networkx Graph
819
- Generalized Petersen Graph n k
820
-
821
- References
822
- ----------
823
- .. [1] https://mathworld.wolfram.com/GeneralizedPetersenGraph.html
824
- .. [2] https://en.wikipedia.org/wiki/Generalized_Petersen_graph
825
- """
826
- if n <= 2:
827
- raise NetworkXError(f"n >= 3 required. Got {n=}")
828
- if k < 1 or k > n / 2:
829
- raise NetworkXError(f" Got {n=} {k=}. Need 1 <= k <= n/2")
830
-
831
- G = nx.cycle_graph(range(n), create_using=create_using) # u-nodes
832
- if G.is_directed():
833
- raise NetworkXError("Directed Graph not supported in create_using")
834
- for i in range(n):
835
- G.add_edge(i, n + i) # add v-nodes and u to v edges
836
- G.add_edge(n + i, n + (i + k) % n) # edge from v_i to v_(i+k)%n
837
-
838
- G.name = f"Generalized Petersen Graph GP({n}, {k})"
839
- return G
840
-
841
-
842
- @nx._dispatchable(graphs=None, returns_graph=True)
843
- def sedgewick_maze_graph(create_using=None):
844
- """
845
- Return a small maze with a cycle.
846
-
847
- This is the maze used in Sedgewick, 3rd Edition, Part 5, Graph
848
- Algorithms, Chapter 18, e.g. Figure 18.2 and following [1]_.
849
- Nodes are numbered 0,..,7
850
-
851
- Parameters
852
- ----------
853
- create_using : NetworkX graph constructor, optional (default=nx.Graph)
854
- Graph type to create. If graph instance, then cleared before populated.
855
-
856
- Returns
857
- -------
858
- G : networkx Graph
859
- Small maze with a cycle
860
-
861
- References
862
- ----------
863
- .. [1] Figure 18.2, Chapter 18, Graph Algorithms (3rd Ed), Sedgewick
864
- """
865
- G = empty_graph(0, create_using)
866
- G.add_nodes_from(range(8))
867
- G.add_edges_from([[0, 2], [0, 7], [0, 5]])
868
- G.add_edges_from([[1, 7], [2, 6]])
869
- G.add_edges_from([[3, 4], [3, 5]])
870
- G.add_edges_from([[4, 5], [4, 7], [4, 6]])
871
- G.name = "Sedgewick Maze"
872
- return G
873
-
874
-
875
- @nx._dispatchable(graphs=None, returns_graph=True)
876
- def tetrahedral_graph(create_using=None):
877
- """
878
- Returns the 3-regular Platonic Tetrahedral graph.
879
-
880
- Tetrahedral graph has 4 nodes and 6 edges. It is a
881
- special case of the complete graph, K4, and wheel graph, W4.
882
- It is one of the 5 platonic graphs [1]_.
883
-
884
- Parameters
885
- ----------
886
- create_using : NetworkX graph constructor, optional (default=nx.Graph)
887
- Graph type to create. If graph instance, then cleared before populated.
888
-
889
- Returns
890
- -------
891
- G : networkx Graph
892
- Tetrahedral Graph
893
-
894
- See Also
895
- --------
896
- cubical_graph, octahedral_graph, dodecahedral_graph, icosahedral_graph
897
-
898
- References
899
- ----------
900
- .. [1] https://en.wikipedia.org/wiki/Tetrahedron#Tetrahedral_graph
901
-
902
- """
903
- G = complete_graph(4, create_using)
904
- G.name = "Platonic Tetrahedral Graph"
905
- return G
906
-
907
-
908
- @_raise_on_directed
909
- @nx._dispatchable(graphs=None, returns_graph=True)
910
- def truncated_cube_graph(create_using=None):
911
- """
912
- Returns the skeleton of the truncated cube.
913
-
914
- The truncated cube is an Archimedean solid with 14 regular
915
- faces (6 octagonal and 8 triangular), 36 edges and 24 nodes [1]_.
916
- The truncated cube is created by truncating (cutting off) the tips
917
- of the cube one third of the way into each edge [2]_.
918
-
919
- Parameters
920
- ----------
921
- create_using : NetworkX graph constructor, optional (default=nx.Graph)
922
- Graph type to create. If graph instance, then cleared before populated.
923
-
924
- Returns
925
- -------
926
- G : networkx Graph
927
- Skeleton of the truncated cube
928
-
929
- References
930
- ----------
931
- .. [1] https://en.wikipedia.org/wiki/Truncated_cube
932
- .. [2] https://www.coolmath.com/reference/polyhedra-truncated-cube
933
-
934
- """
935
- G = nx.from_dict_of_lists(
936
- {
937
- 0: [1, 2, 4],
938
- 1: [11, 14],
939
- 2: [3, 4],
940
- 3: [6, 8],
941
- 4: [5],
942
- 5: [16, 18],
943
- 6: [7, 8],
944
- 7: [10, 12],
945
- 8: [9],
946
- 9: [17, 20],
947
- 10: [11, 12],
948
- 11: [14],
949
- 12: [13],
950
- 13: [21, 22],
951
- 14: [15],
952
- 15: [19, 23],
953
- 16: [17, 18],
954
- 17: [20],
955
- 18: [19],
956
- 19: [23],
957
- 20: [21],
958
- 21: [22],
959
- 22: [23],
960
- },
961
- create_using=create_using,
962
- )
963
- G.name = "Truncated Cube Graph"
964
- return G
965
-
966
-
967
- @nx._dispatchable(graphs=None, returns_graph=True)
968
- def truncated_tetrahedron_graph(create_using=None):
969
- """
970
- Returns the skeleton of the truncated Platonic tetrahedron.
971
-
972
- The truncated tetrahedron is an Archimedean solid with 4 regular hexagonal faces,
973
- 4 equilateral triangle faces, 12 nodes and 18 edges. It can be constructed by truncating
974
- all 4 vertices of a regular tetrahedron at one third of the original edge length [1]_.
975
-
976
- Parameters
977
- ----------
978
- create_using : NetworkX graph constructor, optional (default=nx.Graph)
979
- Graph type to create. If graph instance, then cleared before populated.
980
-
981
- Returns
982
- -------
983
- G : networkx Graph
984
- Skeleton of the truncated tetrahedron
985
-
986
- References
987
- ----------
988
- .. [1] https://en.wikipedia.org/wiki/Truncated_tetrahedron
989
-
990
- """
991
- G = path_graph(12, create_using)
992
- G.add_edges_from([(0, 2), (0, 9), (1, 6), (3, 11), (4, 11), (5, 7), (8, 10)])
993
- G.name = "Truncated Tetrahedron Graph"
994
- return G
995
-
996
-
997
- @_raise_on_directed
998
- @nx._dispatchable(graphs=None, returns_graph=True)
999
- def tutte_graph(create_using=None):
1000
- """
1001
- Returns the Tutte graph.
1002
-
1003
- The Tutte graph is a cubic polyhedral, non-Hamiltonian graph. It has
1004
- 46 nodes and 69 edges.
1005
- It is a counterexample to Tait's conjecture that every 3-regular polyhedron
1006
- has a Hamiltonian cycle.
1007
- It can be realized geometrically from a tetrahedron by multiply truncating
1008
- three of its vertices [1]_.
1009
-
1010
- Parameters
1011
- ----------
1012
- create_using : NetworkX graph constructor, optional (default=nx.Graph)
1013
- Graph type to create. If graph instance, then cleared before populated.
1014
-
1015
- Returns
1016
- -------
1017
- G : networkx Graph
1018
- Tutte graph
1019
-
1020
- References
1021
- ----------
1022
- .. [1] https://en.wikipedia.org/wiki/Tutte_graph
1023
- """
1024
- G = nx.from_dict_of_lists(
1025
- {
1026
- 0: [1, 2, 3],
1027
- 1: [4, 26],
1028
- 2: [10, 11],
1029
- 3: [18, 19],
1030
- 4: [5, 33],
1031
- 5: [6, 29],
1032
- 6: [7, 27],
1033
- 7: [8, 14],
1034
- 8: [9, 38],
1035
- 9: [10, 37],
1036
- 10: [39],
1037
- 11: [12, 39],
1038
- 12: [13, 35],
1039
- 13: [14, 15],
1040
- 14: [34],
1041
- 15: [16, 22],
1042
- 16: [17, 44],
1043
- 17: [18, 43],
1044
- 18: [45],
1045
- 19: [20, 45],
1046
- 20: [21, 41],
1047
- 21: [22, 23],
1048
- 22: [40],
1049
- 23: [24, 27],
1050
- 24: [25, 32],
1051
- 25: [26, 31],
1052
- 26: [33],
1053
- 27: [28],
1054
- 28: [29, 32],
1055
- 29: [30],
1056
- 30: [31, 33],
1057
- 31: [32],
1058
- 34: [35, 38],
1059
- 35: [36],
1060
- 36: [37, 39],
1061
- 37: [38],
1062
- 40: [41, 44],
1063
- 41: [42],
1064
- 42: [43, 45],
1065
- 43: [44],
1066
- },
1067
- create_using=create_using,
1068
- )
1069
- G.name = "Tutte's Graph"
1070
- return G