okstra 0.113.0 → 0.115.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 (348) hide show
  1. package/README.kr.md +2 -2
  2. package/README.md +2 -2
  3. package/docs/for-ai/README.md +2 -2
  4. package/docs/for-ai/skills/{okstra-brief.md → okstra-brief-gen.md} +3 -3
  5. package/docs/for-ai/skills/okstra-inspect.md +1 -1
  6. package/docs/kr/architecture.md +11 -11
  7. package/docs/kr/cli.md +1 -1
  8. package/docs/kr/follow-ups/2026-07-10-final-report-option-3.md +51 -0
  9. package/docs/project-structure-overview.md +2 -2
  10. package/package.json +1 -1
  11. package/runtime/BUILD.json +2 -2
  12. package/runtime/agents/workers/report-writer-worker.md +1 -0
  13. package/runtime/prompts/lead/context-loader.md +2 -2
  14. package/runtime/prompts/lead/okstra-lead-contract.md +1 -1
  15. package/runtime/prompts/profiles/_common-contract.md +3 -3
  16. package/runtime/prompts/profiles/implementation-planning.md +1 -1
  17. package/runtime/prompts/profiles/requirements-discovery.md +2 -2
  18. package/runtime/python/okstra_ctl/fix_cycles.py +1 -1
  19. package/runtime/python/okstra_ctl/implementation_stage.py +46 -39
  20. package/runtime/python/okstra_ctl/report_views.py +151 -12
  21. package/runtime/python/okstra_ctl/run.py +24 -24
  22. package/runtime/python/okstra_ctl/wizard.py +3 -3
  23. package/runtime/python/okstra_ctl/worktree.py +1 -1
  24. package/runtime/python/okstra_token_usage/claude.py +58 -19
  25. package/runtime/python/okstra_token_usage/collect.py +3 -1
  26. package/runtime/python/okstra_vendor/__init__.py +3 -0
  27. package/runtime/schemas/final-report-v1.0.schema.json +20 -0
  28. package/runtime/skills/{okstra-brief → okstra-brief-gen}/SKILL.md +6 -6
  29. package/runtime/skills/{okstra-brief → okstra-brief-gen}/references/reporter-confirmations.md +1 -1
  30. package/runtime/skills/{okstra-brief → okstra-brief-gen}/references/tracker-recursion.md +1 -1
  31. package/runtime/skills/okstra-inspect/SKILL.md +2 -2
  32. package/runtime/templates/reports/brief.template.md +2 -2
  33. package/runtime/templates/reports/final-report.template.md +14 -0
  34. package/runtime/templates/reports/i18n/en.json +23 -12
  35. package/runtime/templates/reports/i18n/ko.json +23 -12
  36. package/runtime/templates/reports/report.css +55 -0
  37. package/runtime/templates/reports/report.js +53 -1
  38. package/runtime/validators/validate-brief.py +5 -5
  39. package/runtime/validators/validate-brief.sh +1 -1
  40. package/src/commands/lifecycle/uninstall.mjs +2 -1
  41. package/src/lib/skill-catalog.mjs +2 -1
  42. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/tests/__init__.py +0 -0
  43. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/tests/test_approx_clust_coeff.py +0 -41
  44. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/tests/test_clique.py +0 -112
  45. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/tests/test_connectivity.py +0 -199
  46. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/tests/test_density.py +0 -146
  47. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/tests/test_distance_measures.py +0 -59
  48. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/tests/test_dominating_set.py +0 -78
  49. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/tests/test_kcomponents.py +0 -303
  50. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/tests/test_matching.py +0 -8
  51. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/tests/test_maxcut.py +0 -94
  52. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/tests/test_ramsey.py +0 -31
  53. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/tests/test_steinertree.py +0 -306
  54. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/tests/test_traveling_salesman.py +0 -1014
  55. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/tests/test_treewidth.py +0 -274
  56. package/runtime/python/okstra_vendor/networkx/algorithms/approximation/tests/test_vertex_cover.py +0 -68
  57. package/runtime/python/okstra_vendor/networkx/algorithms/assortativity/tests/__init__.py +0 -0
  58. package/runtime/python/okstra_vendor/networkx/algorithms/assortativity/tests/base_test.py +0 -81
  59. package/runtime/python/okstra_vendor/networkx/algorithms/assortativity/tests/test_connectivity.py +0 -143
  60. package/runtime/python/okstra_vendor/networkx/algorithms/assortativity/tests/test_correlation.py +0 -122
  61. package/runtime/python/okstra_vendor/networkx/algorithms/assortativity/tests/test_mixing.py +0 -174
  62. package/runtime/python/okstra_vendor/networkx/algorithms/assortativity/tests/test_neighbor_degree.py +0 -107
  63. package/runtime/python/okstra_vendor/networkx/algorithms/assortativity/tests/test_pairs.py +0 -87
  64. package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/tests/__init__.py +0 -0
  65. package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/tests/test_basic.py +0 -125
  66. package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/tests/test_centrality.py +0 -192
  67. package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/tests/test_cluster.py +0 -84
  68. package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/tests/test_covering.py +0 -33
  69. package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/tests/test_edgelist.py +0 -240
  70. package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/tests/test_extendability.py +0 -334
  71. package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/tests/test_generators.py +0 -407
  72. package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/tests/test_link_analysis.py +0 -218
  73. package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/tests/test_matching.py +0 -327
  74. package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/tests/test_matrix.py +0 -138
  75. package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/tests/test_project.py +0 -409
  76. package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/tests/test_redundancy.py +0 -35
  77. package/runtime/python/okstra_vendor/networkx/algorithms/bipartite/tests/test_spectral_bipartivity.py +0 -80
  78. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/tests/__init__.py +0 -0
  79. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/tests/test_betweenness_centrality.py +0 -923
  80. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/tests/test_betweenness_centrality_subset.py +0 -354
  81. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/tests/test_closeness_centrality.py +0 -274
  82. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/tests/test_current_flow_betweenness_centrality.py +0 -259
  83. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/tests/test_current_flow_betweenness_centrality_subset.py +0 -147
  84. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/tests/test_current_flow_closeness.py +0 -43
  85. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/tests/test_degree_centrality.py +0 -144
  86. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/tests/test_dispersion.py +0 -73
  87. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/tests/test_eigenvector_centrality.py +0 -186
  88. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/tests/test_group.py +0 -277
  89. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/tests/test_harmonic_centrality.py +0 -122
  90. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/tests/test_katz_centrality.py +0 -345
  91. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/tests/test_laplacian_centrality.py +0 -220
  92. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/tests/test_load_centrality.py +0 -344
  93. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/tests/test_percolation_centrality.py +0 -87
  94. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/tests/test_reaching.py +0 -140
  95. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/tests/test_second_order_centrality.py +0 -82
  96. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/tests/test_subgraph.py +0 -110
  97. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/tests/test_trophic.py +0 -302
  98. package/runtime/python/okstra_vendor/networkx/algorithms/centrality/tests/test_voterank.py +0 -64
  99. package/runtime/python/okstra_vendor/networkx/algorithms/coloring/tests/__init__.py +0 -0
  100. package/runtime/python/okstra_vendor/networkx/algorithms/coloring/tests/test_coloring.py +0 -863
  101. package/runtime/python/okstra_vendor/networkx/algorithms/community/tests/__init__.py +0 -0
  102. package/runtime/python/okstra_vendor/networkx/algorithms/community/tests/test_asyn_fluid.py +0 -147
  103. package/runtime/python/okstra_vendor/networkx/algorithms/community/tests/test_bipartitions.py +0 -157
  104. package/runtime/python/okstra_vendor/networkx/algorithms/community/tests/test_centrality.py +0 -85
  105. package/runtime/python/okstra_vendor/networkx/algorithms/community/tests/test_divisive.py +0 -106
  106. package/runtime/python/okstra_vendor/networkx/algorithms/community/tests/test_kclique.py +0 -91
  107. package/runtime/python/okstra_vendor/networkx/algorithms/community/tests/test_label_propagation.py +0 -241
  108. package/runtime/python/okstra_vendor/networkx/algorithms/community/tests/test_leiden.py +0 -138
  109. package/runtime/python/okstra_vendor/networkx/algorithms/community/tests/test_local.py +0 -76
  110. package/runtime/python/okstra_vendor/networkx/algorithms/community/tests/test_louvain.py +0 -264
  111. package/runtime/python/okstra_vendor/networkx/algorithms/community/tests/test_lukes.py +0 -152
  112. package/runtime/python/okstra_vendor/networkx/algorithms/community/tests/test_modularity_max.py +0 -340
  113. package/runtime/python/okstra_vendor/networkx/algorithms/community/tests/test_quality.py +0 -139
  114. package/runtime/python/okstra_vendor/networkx/algorithms/community/tests/test_utils.py +0 -26
  115. package/runtime/python/okstra_vendor/networkx/algorithms/components/tests/__init__.py +0 -0
  116. package/runtime/python/okstra_vendor/networkx/algorithms/components/tests/test_attracting.py +0 -70
  117. package/runtime/python/okstra_vendor/networkx/algorithms/components/tests/test_biconnected.py +0 -248
  118. package/runtime/python/okstra_vendor/networkx/algorithms/components/tests/test_connected.py +0 -138
  119. package/runtime/python/okstra_vendor/networkx/algorithms/components/tests/test_semiconnected.py +0 -55
  120. package/runtime/python/okstra_vendor/networkx/algorithms/components/tests/test_strongly_connected.py +0 -193
  121. package/runtime/python/okstra_vendor/networkx/algorithms/components/tests/test_weakly_connected.py +0 -96
  122. package/runtime/python/okstra_vendor/networkx/algorithms/connectivity/tests/__init__.py +0 -0
  123. package/runtime/python/okstra_vendor/networkx/algorithms/connectivity/tests/test_connectivity.py +0 -421
  124. package/runtime/python/okstra_vendor/networkx/algorithms/connectivity/tests/test_cuts.py +0 -309
  125. package/runtime/python/okstra_vendor/networkx/algorithms/connectivity/tests/test_disjoint_paths.py +0 -249
  126. package/runtime/python/okstra_vendor/networkx/algorithms/connectivity/tests/test_edge_augmentation.py +0 -502
  127. package/runtime/python/okstra_vendor/networkx/algorithms/connectivity/tests/test_edge_kcomponents.py +0 -488
  128. package/runtime/python/okstra_vendor/networkx/algorithms/connectivity/tests/test_kcomponents.py +0 -323
  129. package/runtime/python/okstra_vendor/networkx/algorithms/connectivity/tests/test_kcutsets.py +0 -280
  130. package/runtime/python/okstra_vendor/networkx/algorithms/connectivity/tests/test_stoer_wagner.py +0 -102
  131. package/runtime/python/okstra_vendor/networkx/algorithms/flow/tests/__init__.py +0 -0
  132. package/runtime/python/okstra_vendor/networkx/algorithms/flow/tests/gl1.gpickle.bz2 +0 -0
  133. package/runtime/python/okstra_vendor/networkx/algorithms/flow/tests/gw1.gpickle.bz2 +0 -0
  134. package/runtime/python/okstra_vendor/networkx/algorithms/flow/tests/netgen-2.gpickle.bz2 +0 -0
  135. package/runtime/python/okstra_vendor/networkx/algorithms/flow/tests/test_gomory_hu.py +0 -128
  136. package/runtime/python/okstra_vendor/networkx/algorithms/flow/tests/test_maxflow.py +0 -573
  137. package/runtime/python/okstra_vendor/networkx/algorithms/flow/tests/test_maxflow_large_graph.py +0 -155
  138. package/runtime/python/okstra_vendor/networkx/algorithms/flow/tests/test_mincost.py +0 -475
  139. package/runtime/python/okstra_vendor/networkx/algorithms/flow/tests/test_networksimplex.py +0 -481
  140. package/runtime/python/okstra_vendor/networkx/algorithms/flow/tests/wlm3.gpickle.bz2 +0 -0
  141. package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/tests/__init__.py +0 -0
  142. package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/tests/iso_r01_s80.A99 +0 -0
  143. package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/tests/iso_r01_s80.B99 +0 -0
  144. package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/tests/si2_b06_m200.A99 +0 -0
  145. package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/tests/si2_b06_m200.B99 +0 -0
  146. package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/tests/test_ismags.py +0 -719
  147. package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/tests/test_isomorphism.py +0 -103
  148. package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/tests/test_isomorphvf2.py +0 -490
  149. package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/tests/test_match_helpers.py +0 -64
  150. package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/tests/test_temporalisomorphvf2.py +0 -212
  151. package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/tests/test_tree_isomorphism.py +0 -202
  152. package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/tests/test_vf2pp.py +0 -1655
  153. package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/tests/test_vf2pp_helpers.py +0 -3118
  154. package/runtime/python/okstra_vendor/networkx/algorithms/isomorphism/tests/test_vf2userfunc.py +0 -196
  155. package/runtime/python/okstra_vendor/networkx/algorithms/link_analysis/tests/__init__.py +0 -0
  156. package/runtime/python/okstra_vendor/networkx/algorithms/link_analysis/tests/test_hits.py +0 -77
  157. package/runtime/python/okstra_vendor/networkx/algorithms/link_analysis/tests/test_pagerank.py +0 -213
  158. package/runtime/python/okstra_vendor/networkx/algorithms/minors/tests/test_contraction.py +0 -544
  159. package/runtime/python/okstra_vendor/networkx/algorithms/operators/tests/__init__.py +0 -0
  160. package/runtime/python/okstra_vendor/networkx/algorithms/operators/tests/test_all.py +0 -328
  161. package/runtime/python/okstra_vendor/networkx/algorithms/operators/tests/test_binary.py +0 -451
  162. package/runtime/python/okstra_vendor/networkx/algorithms/operators/tests/test_product.py +0 -491
  163. package/runtime/python/okstra_vendor/networkx/algorithms/operators/tests/test_unary.py +0 -55
  164. package/runtime/python/okstra_vendor/networkx/algorithms/shortest_paths/tests/__init__.py +0 -0
  165. package/runtime/python/okstra_vendor/networkx/algorithms/shortest_paths/tests/test_astar.py +0 -254
  166. package/runtime/python/okstra_vendor/networkx/algorithms/shortest_paths/tests/test_dense.py +0 -212
  167. package/runtime/python/okstra_vendor/networkx/algorithms/shortest_paths/tests/test_dense_numpy.py +0 -88
  168. package/runtime/python/okstra_vendor/networkx/algorithms/shortest_paths/tests/test_generic.py +0 -511
  169. package/runtime/python/okstra_vendor/networkx/algorithms/shortest_paths/tests/test_unweighted.py +0 -149
  170. package/runtime/python/okstra_vendor/networkx/algorithms/shortest_paths/tests/test_weighted.py +0 -983
  171. package/runtime/python/okstra_vendor/networkx/algorithms/tests/__init__.py +0 -0
  172. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_asteroidal.py +0 -23
  173. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_boundary.py +0 -154
  174. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_bridges.py +0 -144
  175. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_broadcasting.py +0 -109
  176. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_chains.py +0 -136
  177. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_chordal.py +0 -129
  178. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_clique.py +0 -300
  179. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_cluster.py +0 -678
  180. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_communicability.py +0 -80
  181. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_core.py +0 -266
  182. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_covering.py +0 -85
  183. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_cuts.py +0 -171
  184. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_cycles.py +0 -984
  185. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_d_separation.py +0 -340
  186. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_dag.py +0 -835
  187. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_distance_measures.py +0 -831
  188. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_distance_regular.py +0 -85
  189. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_dominance.py +0 -299
  190. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_dominating.py +0 -115
  191. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_efficiency.py +0 -58
  192. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_euler.py +0 -314
  193. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_graph_hashing.py +0 -872
  194. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_graphical.py +0 -163
  195. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_hierarchy.py +0 -46
  196. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_hybrid.py +0 -24
  197. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_isolate.py +0 -26
  198. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_link_prediction.py +0 -615
  199. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_lowest_common_ancestors.py +0 -459
  200. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_matching.py +0 -556
  201. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_max_weight_clique.py +0 -179
  202. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_mis.py +0 -62
  203. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_moral.py +0 -15
  204. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_node_classification.py +0 -140
  205. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_non_randomness.py +0 -60
  206. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_perfect_graph.py +0 -27
  207. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_planar_drawing.py +0 -274
  208. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_planarity.py +0 -556
  209. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_polynomials.py +0 -57
  210. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_reciprocity.py +0 -37
  211. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_regular.py +0 -88
  212. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_richclub.py +0 -149
  213. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_similarity.py +0 -1158
  214. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_simple_paths.py +0 -803
  215. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_smallworld.py +0 -76
  216. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_smetric.py +0 -8
  217. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_sparsifiers.py +0 -138
  218. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_structuralholes.py +0 -191
  219. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_summarization.py +0 -642
  220. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_swap.py +0 -179
  221. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_threshold.py +0 -270
  222. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_time_dependent.py +0 -431
  223. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_tournament.py +0 -161
  224. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_triads.py +0 -248
  225. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_vitality.py +0 -41
  226. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_voronoi.py +0 -103
  227. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_walks.py +0 -54
  228. package/runtime/python/okstra_vendor/networkx/algorithms/tests/test_wiener.py +0 -157
  229. package/runtime/python/okstra_vendor/networkx/algorithms/traversal/tests/__init__.py +0 -0
  230. package/runtime/python/okstra_vendor/networkx/algorithms/traversal/tests/test_beamsearch.py +0 -25
  231. package/runtime/python/okstra_vendor/networkx/algorithms/traversal/tests/test_bfs.py +0 -203
  232. package/runtime/python/okstra_vendor/networkx/algorithms/traversal/tests/test_dfs.py +0 -307
  233. package/runtime/python/okstra_vendor/networkx/algorithms/traversal/tests/test_edgebfs.py +0 -147
  234. package/runtime/python/okstra_vendor/networkx/algorithms/traversal/tests/test_edgedfs.py +0 -131
  235. package/runtime/python/okstra_vendor/networkx/algorithms/tree/tests/__init__.py +0 -0
  236. package/runtime/python/okstra_vendor/networkx/algorithms/tree/tests/test_branchings.py +0 -624
  237. package/runtime/python/okstra_vendor/networkx/algorithms/tree/tests/test_coding.py +0 -114
  238. package/runtime/python/okstra_vendor/networkx/algorithms/tree/tests/test_decomposition.py +0 -79
  239. package/runtime/python/okstra_vendor/networkx/algorithms/tree/tests/test_distance_measures.py +0 -99
  240. package/runtime/python/okstra_vendor/networkx/algorithms/tree/tests/test_mst.py +0 -934
  241. package/runtime/python/okstra_vendor/networkx/algorithms/tree/tests/test_operations.py +0 -53
  242. package/runtime/python/okstra_vendor/networkx/algorithms/tree/tests/test_recognition.py +0 -174
  243. package/runtime/python/okstra_vendor/networkx/classes/tests/__init__.py +0 -0
  244. package/runtime/python/okstra_vendor/networkx/classes/tests/dispatch_interface.py +0 -192
  245. package/runtime/python/okstra_vendor/networkx/classes/tests/historical_tests.py +0 -476
  246. package/runtime/python/okstra_vendor/networkx/classes/tests/test_coreviews.py +0 -362
  247. package/runtime/python/okstra_vendor/networkx/classes/tests/test_digraph.py +0 -331
  248. package/runtime/python/okstra_vendor/networkx/classes/tests/test_digraph_historical.py +0 -110
  249. package/runtime/python/okstra_vendor/networkx/classes/tests/test_filters.py +0 -177
  250. package/runtime/python/okstra_vendor/networkx/classes/tests/test_function.py +0 -1045
  251. package/runtime/python/okstra_vendor/networkx/classes/tests/test_graph.py +0 -950
  252. package/runtime/python/okstra_vendor/networkx/classes/tests/test_graph_historical.py +0 -12
  253. package/runtime/python/okstra_vendor/networkx/classes/tests/test_graphviews.py +0 -349
  254. package/runtime/python/okstra_vendor/networkx/classes/tests/test_multidigraph.py +0 -459
  255. package/runtime/python/okstra_vendor/networkx/classes/tests/test_multigraph.py +0 -528
  256. package/runtime/python/okstra_vendor/networkx/classes/tests/test_reportviews.py +0 -1421
  257. package/runtime/python/okstra_vendor/networkx/classes/tests/test_special.py +0 -131
  258. package/runtime/python/okstra_vendor/networkx/classes/tests/test_subgraphviews.py +0 -371
  259. package/runtime/python/okstra_vendor/networkx/conftest.py +0 -261
  260. package/runtime/python/okstra_vendor/networkx/drawing/tests/__init__.py +0 -0
  261. package/runtime/python/okstra_vendor/networkx/drawing/tests/baseline/test_display_complex.png +0 -0
  262. package/runtime/python/okstra_vendor/networkx/drawing/tests/baseline/test_display_empty_graph.png +0 -0
  263. package/runtime/python/okstra_vendor/networkx/drawing/tests/baseline/test_display_house_with_colors.png +0 -0
  264. package/runtime/python/okstra_vendor/networkx/drawing/tests/baseline/test_display_labels_and_colors.png +0 -0
  265. package/runtime/python/okstra_vendor/networkx/drawing/tests/baseline/test_display_shortest_path.png +0 -0
  266. package/runtime/python/okstra_vendor/networkx/drawing/tests/baseline/test_house_with_colors.png +0 -0
  267. package/runtime/python/okstra_vendor/networkx/drawing/tests/test_agraph.py +0 -237
  268. package/runtime/python/okstra_vendor/networkx/drawing/tests/test_image_comparison_pylab_mpl.py +0 -229
  269. package/runtime/python/okstra_vendor/networkx/drawing/tests/test_latex.py +0 -285
  270. package/runtime/python/okstra_vendor/networkx/drawing/tests/test_layout.py +0 -631
  271. package/runtime/python/okstra_vendor/networkx/drawing/tests/test_pydot.py +0 -146
  272. package/runtime/python/okstra_vendor/networkx/drawing/tests/test_pylab.py +0 -1582
  273. package/runtime/python/okstra_vendor/networkx/generators/tests/__init__.py +0 -0
  274. package/runtime/python/okstra_vendor/networkx/generators/tests/test_atlas.py +0 -75
  275. package/runtime/python/okstra_vendor/networkx/generators/tests/test_classic.py +0 -642
  276. package/runtime/python/okstra_vendor/networkx/generators/tests/test_cographs.py +0 -20
  277. package/runtime/python/okstra_vendor/networkx/generators/tests/test_community.py +0 -362
  278. package/runtime/python/okstra_vendor/networkx/generators/tests/test_degree_seq.py +0 -224
  279. package/runtime/python/okstra_vendor/networkx/generators/tests/test_directed.py +0 -189
  280. package/runtime/python/okstra_vendor/networkx/generators/tests/test_duplication.py +0 -103
  281. package/runtime/python/okstra_vendor/networkx/generators/tests/test_ego.py +0 -39
  282. package/runtime/python/okstra_vendor/networkx/generators/tests/test_expanders.py +0 -182
  283. package/runtime/python/okstra_vendor/networkx/generators/tests/test_geometric.py +0 -488
  284. package/runtime/python/okstra_vendor/networkx/generators/tests/test_harary_graph.py +0 -133
  285. package/runtime/python/okstra_vendor/networkx/generators/tests/test_internet_as_graphs.py +0 -221
  286. package/runtime/python/okstra_vendor/networkx/generators/tests/test_intersection.py +0 -28
  287. package/runtime/python/okstra_vendor/networkx/generators/tests/test_interval_graph.py +0 -144
  288. package/runtime/python/okstra_vendor/networkx/generators/tests/test_joint_degree_seq.py +0 -125
  289. package/runtime/python/okstra_vendor/networkx/generators/tests/test_lattice.py +0 -264
  290. package/runtime/python/okstra_vendor/networkx/generators/tests/test_line.py +0 -316
  291. package/runtime/python/okstra_vendor/networkx/generators/tests/test_mycielski.py +0 -30
  292. package/runtime/python/okstra_vendor/networkx/generators/tests/test_nonisomorphic_trees.py +0 -82
  293. package/runtime/python/okstra_vendor/networkx/generators/tests/test_random_clustered.py +0 -33
  294. package/runtime/python/okstra_vendor/networkx/generators/tests/test_random_graphs.py +0 -495
  295. package/runtime/python/okstra_vendor/networkx/generators/tests/test_small.py +0 -220
  296. package/runtime/python/okstra_vendor/networkx/generators/tests/test_spectral_graph_forge.py +0 -49
  297. package/runtime/python/okstra_vendor/networkx/generators/tests/test_stochastic.py +0 -72
  298. package/runtime/python/okstra_vendor/networkx/generators/tests/test_sudoku.py +0 -92
  299. package/runtime/python/okstra_vendor/networkx/generators/tests/test_time_series.py +0 -64
  300. package/runtime/python/okstra_vendor/networkx/generators/tests/test_trees.py +0 -195
  301. package/runtime/python/okstra_vendor/networkx/generators/tests/test_triads.py +0 -15
  302. package/runtime/python/okstra_vendor/networkx/linalg/tests/__init__.py +0 -0
  303. package/runtime/python/okstra_vendor/networkx/linalg/tests/test_algebraic_connectivity.py +0 -400
  304. package/runtime/python/okstra_vendor/networkx/linalg/tests/test_attrmatrix.py +0 -108
  305. package/runtime/python/okstra_vendor/networkx/linalg/tests/test_bethehessian.py +0 -40
  306. package/runtime/python/okstra_vendor/networkx/linalg/tests/test_graphmatrix.py +0 -275
  307. package/runtime/python/okstra_vendor/networkx/linalg/tests/test_laplacian.py +0 -334
  308. package/runtime/python/okstra_vendor/networkx/linalg/tests/test_modularity.py +0 -86
  309. package/runtime/python/okstra_vendor/networkx/linalg/tests/test_spectrum.py +0 -70
  310. package/runtime/python/okstra_vendor/networkx/readwrite/json_graph/tests/__init__.py +0 -0
  311. package/runtime/python/okstra_vendor/networkx/readwrite/json_graph/tests/test_adjacency.py +0 -78
  312. package/runtime/python/okstra_vendor/networkx/readwrite/json_graph/tests/test_cytoscape.py +0 -78
  313. package/runtime/python/okstra_vendor/networkx/readwrite/json_graph/tests/test_node_link.py +0 -109
  314. package/runtime/python/okstra_vendor/networkx/readwrite/json_graph/tests/test_tree.py +0 -48
  315. package/runtime/python/okstra_vendor/networkx/readwrite/tests/__init__.py +0 -0
  316. package/runtime/python/okstra_vendor/networkx/readwrite/tests/test_adjlist.py +0 -354
  317. package/runtime/python/okstra_vendor/networkx/readwrite/tests/test_edgelist.py +0 -318
  318. package/runtime/python/okstra_vendor/networkx/readwrite/tests/test_gexf.py +0 -612
  319. package/runtime/python/okstra_vendor/networkx/readwrite/tests/test_gml.py +0 -744
  320. package/runtime/python/okstra_vendor/networkx/readwrite/tests/test_graph6.py +0 -181
  321. package/runtime/python/okstra_vendor/networkx/readwrite/tests/test_graphml.py +0 -1531
  322. package/runtime/python/okstra_vendor/networkx/readwrite/tests/test_leda.py +0 -30
  323. package/runtime/python/okstra_vendor/networkx/readwrite/tests/test_p2g.py +0 -63
  324. package/runtime/python/okstra_vendor/networkx/readwrite/tests/test_pajek.py +0 -128
  325. package/runtime/python/okstra_vendor/networkx/readwrite/tests/test_sparse6.py +0 -166
  326. package/runtime/python/okstra_vendor/networkx/readwrite/tests/test_text.py +0 -1742
  327. package/runtime/python/okstra_vendor/networkx/tests/__init__.py +0 -0
  328. package/runtime/python/okstra_vendor/networkx/tests/test_all_random_functions.py +0 -248
  329. package/runtime/python/okstra_vendor/networkx/tests/test_convert.py +0 -321
  330. package/runtime/python/okstra_vendor/networkx/tests/test_convert_numpy.py +0 -531
  331. package/runtime/python/okstra_vendor/networkx/tests/test_convert_pandas.py +0 -349
  332. package/runtime/python/okstra_vendor/networkx/tests/test_convert_scipy.py +0 -281
  333. package/runtime/python/okstra_vendor/networkx/tests/test_exceptions.py +0 -40
  334. package/runtime/python/okstra_vendor/networkx/tests/test_import.py +0 -11
  335. package/runtime/python/okstra_vendor/networkx/tests/test_lazy_imports.py +0 -96
  336. package/runtime/python/okstra_vendor/networkx/tests/test_relabel.py +0 -349
  337. package/runtime/python/okstra_vendor/networkx/tests/test_removed_functions_exception_messages.py +0 -8
  338. package/runtime/python/okstra_vendor/networkx/utils/tests/__init__.py +0 -0
  339. package/runtime/python/okstra_vendor/networkx/utils/tests/test__init.py +0 -11
  340. package/runtime/python/okstra_vendor/networkx/utils/tests/test_backends.py +0 -225
  341. package/runtime/python/okstra_vendor/networkx/utils/tests/test_config.py +0 -263
  342. package/runtime/python/okstra_vendor/networkx/utils/tests/test_decorators.py +0 -510
  343. package/runtime/python/okstra_vendor/networkx/utils/tests/test_heaps.py +0 -131
  344. package/runtime/python/okstra_vendor/networkx/utils/tests/test_mapped_queue.py +0 -268
  345. package/runtime/python/okstra_vendor/networkx/utils/tests/test_misc.py +0 -393
  346. package/runtime/python/okstra_vendor/networkx/utils/tests/test_random_sequence.py +0 -53
  347. package/runtime/python/okstra_vendor/networkx/utils/tests/test_rcm.py +0 -63
  348. package/runtime/python/okstra_vendor/networkx/utils/tests/test_unionfind.py +0 -55
@@ -1,345 +0,0 @@
1
- import math
2
-
3
- import pytest
4
-
5
- import networkx as nx
6
-
7
-
8
- class TestKatzCentrality:
9
- def test_K5(self):
10
- """Katz centrality: K5"""
11
- G = nx.complete_graph(5)
12
- alpha = 0.1
13
- b = nx.katz_centrality(G, alpha)
14
- v = math.sqrt(1 / 5.0)
15
- b_answer = dict.fromkeys(G, v)
16
- for n in sorted(G):
17
- assert b[n] == pytest.approx(b_answer[n], abs=1e-7)
18
- nstart = {n: 1 for n in G}
19
- b = nx.katz_centrality(G, alpha, nstart=nstart)
20
- for n in sorted(G):
21
- assert b[n] == pytest.approx(b_answer[n], abs=1e-7)
22
-
23
- def test_P3(self):
24
- """Katz centrality: P3"""
25
- alpha = 0.1
26
- G = nx.path_graph(3)
27
- b_answer = {0: 0.5598852584152165, 1: 0.6107839182711449, 2: 0.5598852584152162}
28
- b = nx.katz_centrality(G, alpha)
29
- for n in sorted(G):
30
- assert b[n] == pytest.approx(b_answer[n], abs=1e-4)
31
-
32
- def test_maxiter(self):
33
- with pytest.raises(nx.PowerIterationFailedConvergence):
34
- nx.katz_centrality(nx.path_graph(3), 0.1, max_iter=0)
35
-
36
- def test_beta_as_scalar(self):
37
- alpha = 0.1
38
- beta = 0.1
39
- b_answer = {0: 0.5598852584152165, 1: 0.6107839182711449, 2: 0.5598852584152162}
40
- G = nx.path_graph(3)
41
- b = nx.katz_centrality(G, alpha, beta)
42
- for n in sorted(G):
43
- assert b[n] == pytest.approx(b_answer[n], abs=1e-4)
44
-
45
- def test_beta_as_dict(self):
46
- alpha = 0.1
47
- beta = {0: 1.0, 1: 1.0, 2: 1.0}
48
- b_answer = {0: 0.5598852584152165, 1: 0.6107839182711449, 2: 0.5598852584152162}
49
- G = nx.path_graph(3)
50
- b = nx.katz_centrality(G, alpha, beta)
51
- for n in sorted(G):
52
- assert b[n] == pytest.approx(b_answer[n], abs=1e-4)
53
-
54
- def test_multiple_alpha(self):
55
- alpha_list = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]
56
- for alpha in alpha_list:
57
- b_answer = {
58
- 0.1: {
59
- 0: 0.5598852584152165,
60
- 1: 0.6107839182711449,
61
- 2: 0.5598852584152162,
62
- },
63
- 0.2: {
64
- 0: 0.5454545454545454,
65
- 1: 0.6363636363636365,
66
- 2: 0.5454545454545454,
67
- },
68
- 0.3: {
69
- 0: 0.5333964609104419,
70
- 1: 0.6564879518897746,
71
- 2: 0.5333964609104419,
72
- },
73
- 0.4: {
74
- 0: 0.5232045649263551,
75
- 1: 0.6726915834767423,
76
- 2: 0.5232045649263551,
77
- },
78
- 0.5: {
79
- 0: 0.5144957746691622,
80
- 1: 0.6859943117075809,
81
- 2: 0.5144957746691622,
82
- },
83
- 0.6: {
84
- 0: 0.5069794004195823,
85
- 1: 0.6970966755769258,
86
- 2: 0.5069794004195823,
87
- },
88
- }
89
- G = nx.path_graph(3)
90
- b = nx.katz_centrality(G, alpha)
91
- for n in sorted(G):
92
- assert b[n] == pytest.approx(b_answer[alpha][n], abs=1e-4)
93
-
94
- def test_multigraph(self):
95
- with pytest.raises(nx.NetworkXException):
96
- nx.katz_centrality(nx.MultiGraph(), 0.1)
97
-
98
- def test_empty(self):
99
- e = nx.katz_centrality(nx.Graph(), 0.1)
100
- assert e == {}
101
-
102
- def test_bad_beta(self):
103
- with pytest.raises(nx.NetworkXException):
104
- G = nx.Graph([(0, 1)])
105
- beta = {0: 77}
106
- nx.katz_centrality(G, 0.1, beta=beta)
107
-
108
- def test_bad_beta_number(self):
109
- with pytest.raises(nx.NetworkXException):
110
- G = nx.Graph([(0, 1)])
111
- nx.katz_centrality(G, 0.1, beta="foo")
112
-
113
-
114
- class TestKatzCentralityNumpy:
115
- @classmethod
116
- def setup_class(cls):
117
- global np
118
- np = pytest.importorskip("numpy")
119
- pytest.importorskip("scipy")
120
-
121
- def test_K5(self):
122
- """Katz centrality: K5"""
123
- G = nx.complete_graph(5)
124
- alpha = 0.1
125
- b = nx.katz_centrality(G, alpha)
126
- v = math.sqrt(1 / 5.0)
127
- b_answer = dict.fromkeys(G, v)
128
- for n in sorted(G):
129
- assert b[n] == pytest.approx(b_answer[n], abs=1e-7)
130
- b = nx.eigenvector_centrality_numpy(G)
131
- for n in sorted(G):
132
- assert b[n] == pytest.approx(b_answer[n], abs=1e-3)
133
-
134
- def test_P3(self):
135
- """Katz centrality: P3"""
136
- alpha = 0.1
137
- G = nx.path_graph(3)
138
- b_answer = {0: 0.5598852584152165, 1: 0.6107839182711449, 2: 0.5598852584152162}
139
- b = nx.katz_centrality_numpy(G, alpha)
140
- for n in sorted(G):
141
- assert b[n] == pytest.approx(b_answer[n], abs=1e-4)
142
-
143
- def test_beta_as_scalar(self):
144
- alpha = 0.1
145
- beta = 0.1
146
- b_answer = {0: 0.5598852584152165, 1: 0.6107839182711449, 2: 0.5598852584152162}
147
- G = nx.path_graph(3)
148
- b = nx.katz_centrality_numpy(G, alpha, beta)
149
- for n in sorted(G):
150
- assert b[n] == pytest.approx(b_answer[n], abs=1e-4)
151
-
152
- def test_beta_as_dict(self):
153
- alpha = 0.1
154
- beta = {0: 1.0, 1: 1.0, 2: 1.0}
155
- b_answer = {0: 0.5598852584152165, 1: 0.6107839182711449, 2: 0.5598852584152162}
156
- G = nx.path_graph(3)
157
- b = nx.katz_centrality_numpy(G, alpha, beta)
158
- for n in sorted(G):
159
- assert b[n] == pytest.approx(b_answer[n], abs=1e-4)
160
-
161
- def test_multiple_alpha(self):
162
- alpha_list = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]
163
- for alpha in alpha_list:
164
- b_answer = {
165
- 0.1: {
166
- 0: 0.5598852584152165,
167
- 1: 0.6107839182711449,
168
- 2: 0.5598852584152162,
169
- },
170
- 0.2: {
171
- 0: 0.5454545454545454,
172
- 1: 0.6363636363636365,
173
- 2: 0.5454545454545454,
174
- },
175
- 0.3: {
176
- 0: 0.5333964609104419,
177
- 1: 0.6564879518897746,
178
- 2: 0.5333964609104419,
179
- },
180
- 0.4: {
181
- 0: 0.5232045649263551,
182
- 1: 0.6726915834767423,
183
- 2: 0.5232045649263551,
184
- },
185
- 0.5: {
186
- 0: 0.5144957746691622,
187
- 1: 0.6859943117075809,
188
- 2: 0.5144957746691622,
189
- },
190
- 0.6: {
191
- 0: 0.5069794004195823,
192
- 1: 0.6970966755769258,
193
- 2: 0.5069794004195823,
194
- },
195
- }
196
- G = nx.path_graph(3)
197
- b = nx.katz_centrality_numpy(G, alpha)
198
- for n in sorted(G):
199
- assert b[n] == pytest.approx(b_answer[alpha][n], abs=1e-4)
200
-
201
- def test_multigraph(self):
202
- with pytest.raises(nx.NetworkXException):
203
- nx.katz_centrality(nx.MultiGraph(), 0.1)
204
-
205
- def test_empty(self):
206
- e = nx.katz_centrality(nx.Graph(), 0.1)
207
- assert e == {}
208
-
209
- def test_bad_beta(self):
210
- with pytest.raises(nx.NetworkXException):
211
- G = nx.Graph([(0, 1)])
212
- beta = {0: 77}
213
- nx.katz_centrality_numpy(G, 0.1, beta=beta)
214
-
215
- def test_bad_beta_numbe(self):
216
- with pytest.raises(nx.NetworkXException):
217
- G = nx.Graph([(0, 1)])
218
- nx.katz_centrality_numpy(G, 0.1, beta="foo")
219
-
220
- def test_K5_unweighted(self):
221
- """Katz centrality: K5"""
222
- G = nx.complete_graph(5)
223
- alpha = 0.1
224
- b = nx.katz_centrality(G, alpha, weight=None)
225
- v = math.sqrt(1 / 5.0)
226
- b_answer = dict.fromkeys(G, v)
227
- for n in sorted(G):
228
- assert b[n] == pytest.approx(b_answer[n], abs=1e-7)
229
- b = nx.eigenvector_centrality_numpy(G, weight=None)
230
- for n in sorted(G):
231
- assert b[n] == pytest.approx(b_answer[n], abs=1e-3)
232
-
233
- def test_P3_unweighted(self):
234
- """Katz centrality: P3"""
235
- alpha = 0.1
236
- G = nx.path_graph(3)
237
- b_answer = {0: 0.5598852584152165, 1: 0.6107839182711449, 2: 0.5598852584152162}
238
- b = nx.katz_centrality_numpy(G, alpha, weight=None)
239
- for n in sorted(G):
240
- assert b[n] == pytest.approx(b_answer[n], abs=1e-4)
241
-
242
-
243
- class TestKatzCentralityDirected:
244
- @classmethod
245
- def setup_class(cls):
246
- G = nx.DiGraph()
247
- edges = [
248
- (1, 2),
249
- (1, 3),
250
- (2, 4),
251
- (3, 2),
252
- (3, 5),
253
- (4, 2),
254
- (4, 5),
255
- (4, 6),
256
- (5, 6),
257
- (5, 7),
258
- (5, 8),
259
- (6, 8),
260
- (7, 1),
261
- (7, 5),
262
- (7, 8),
263
- (8, 6),
264
- (8, 7),
265
- ]
266
- G.add_edges_from(edges, weight=2.0)
267
- cls.G = G.reverse()
268
- cls.G.alpha = 0.1
269
- cls.G.evc = [
270
- 0.3289589783189635,
271
- 0.2832077296243516,
272
- 0.3425906003685471,
273
- 0.3970420865198392,
274
- 0.41074871061646284,
275
- 0.272257430756461,
276
- 0.4201989685435462,
277
- 0.34229059218038554,
278
- ]
279
-
280
- H = nx.DiGraph(edges)
281
- cls.H = G.reverse()
282
- cls.H.alpha = 0.1
283
- cls.H.evc = [
284
- 0.3289589783189635,
285
- 0.2832077296243516,
286
- 0.3425906003685471,
287
- 0.3970420865198392,
288
- 0.41074871061646284,
289
- 0.272257430756461,
290
- 0.4201989685435462,
291
- 0.34229059218038554,
292
- ]
293
-
294
- def test_katz_centrality_weighted(self):
295
- G = self.G
296
- alpha = self.G.alpha
297
- p = nx.katz_centrality(G, alpha, weight="weight")
298
- for a, b in zip(list(p.values()), self.G.evc):
299
- assert a == pytest.approx(b, abs=1e-7)
300
-
301
- def test_katz_centrality_unweighted(self):
302
- H = self.H
303
- alpha = self.H.alpha
304
- p = nx.katz_centrality(H, alpha, weight="weight")
305
- for a, b in zip(list(p.values()), self.H.evc):
306
- assert a == pytest.approx(b, abs=1e-7)
307
-
308
-
309
- class TestKatzCentralityDirectedNumpy(TestKatzCentralityDirected):
310
- @classmethod
311
- def setup_class(cls):
312
- global np
313
- np = pytest.importorskip("numpy")
314
- pytest.importorskip("scipy")
315
- super().setup_class()
316
-
317
- def test_katz_centrality_weighted(self):
318
- G = self.G
319
- alpha = self.G.alpha
320
- p = nx.katz_centrality_numpy(G, alpha, weight="weight")
321
- for a, b in zip(list(p.values()), self.G.evc):
322
- assert a == pytest.approx(b, abs=1e-7)
323
-
324
- def test_katz_centrality_unweighted(self):
325
- H = self.H
326
- alpha = self.H.alpha
327
- p = nx.katz_centrality_numpy(H, alpha, weight="weight")
328
- for a, b in zip(list(p.values()), self.H.evc):
329
- assert a == pytest.approx(b, abs=1e-7)
330
-
331
-
332
- class TestKatzEigenvectorVKatz:
333
- @classmethod
334
- def setup_class(cls):
335
- global np
336
- np = pytest.importorskip("numpy")
337
- pytest.importorskip("scipy")
338
-
339
- def test_eigenvector_v_katz_random(self):
340
- G = nx.gnp_random_graph(10, 0.5, seed=1234)
341
- l = max(np.linalg.eigvals(nx.adjacency_matrix(G).todense()))
342
- e = nx.eigenvector_centrality_numpy(G)
343
- k = nx.katz_centrality_numpy(G, 1.0 / l)
344
- for n in G:
345
- assert e[n] == pytest.approx(k[n], abs=1e-7)
@@ -1,220 +0,0 @@
1
- import pytest
2
-
3
- import networkx as nx
4
-
5
- np = pytest.importorskip("numpy")
6
- sp = pytest.importorskip("scipy")
7
-
8
-
9
- def test_laplacian_centrality_null_graph():
10
- G = nx.Graph()
11
- with pytest.raises(nx.NetworkXPointlessConcept):
12
- d = nx.laplacian_centrality(G, normalized=False)
13
-
14
-
15
- def test_laplacian_centrality_single_node():
16
- """See gh-6571"""
17
- G = nx.empty_graph(1)
18
- assert nx.laplacian_centrality(G, normalized=False) == {0: 0}
19
- with pytest.raises(ZeroDivisionError):
20
- nx.laplacian_centrality(G, normalized=True)
21
-
22
-
23
- def test_laplacian_centrality_unconnected_nodes():
24
- """laplacian_centrality on a unconnected node graph should return 0
25
-
26
- For graphs without edges, the Laplacian energy is 0 and is unchanged with
27
- node removal, so::
28
-
29
- LC(v) = LE(G) - LE(G - v) = 0 - 0 = 0
30
- """
31
- G = nx.empty_graph(3)
32
- assert nx.laplacian_centrality(G, normalized=False) == {0: 0, 1: 0, 2: 0}
33
-
34
-
35
- def test_laplacian_centrality_empty_graph():
36
- G = nx.empty_graph(3)
37
- with pytest.raises(ZeroDivisionError):
38
- d = nx.laplacian_centrality(G, normalized=True)
39
-
40
-
41
- def test_laplacian_centrality_E():
42
- E = nx.Graph()
43
- E.add_weighted_edges_from(
44
- [(0, 1, 4), (4, 5, 1), (0, 2, 2), (2, 1, 1), (1, 3, 2), (1, 4, 2)]
45
- )
46
- d = nx.laplacian_centrality(E)
47
- exact = {
48
- 0: 0.700000,
49
- 1: 0.900000,
50
- 2: 0.280000,
51
- 3: 0.220000,
52
- 4: 0.260000,
53
- 5: 0.040000,
54
- }
55
-
56
- for n, dc in d.items():
57
- assert exact[n] == pytest.approx(dc, abs=1e-7)
58
-
59
- # Check not normalized
60
- full_energy = 200
61
- dnn = nx.laplacian_centrality(E, normalized=False)
62
- for n, dc in dnn.items():
63
- assert exact[n] * full_energy == pytest.approx(dc, abs=1e-7)
64
-
65
- # Check unweighted not-normalized version
66
- duw_nn = nx.laplacian_centrality(E, normalized=False, weight=None)
67
- exact_uw_nn = {
68
- 0: 18,
69
- 1: 34,
70
- 2: 18,
71
- 3: 10,
72
- 4: 16,
73
- 5: 6,
74
- }
75
- for n, dc in duw_nn.items():
76
- assert exact_uw_nn[n] == pytest.approx(dc, abs=1e-7)
77
-
78
- # Check unweighted version
79
- duw = nx.laplacian_centrality(E, weight=None)
80
- full_energy = 42
81
- for n, dc in duw.items():
82
- assert exact_uw_nn[n] / full_energy == pytest.approx(dc, abs=1e-7)
83
-
84
-
85
- def test_laplacian_centrality_KC():
86
- KC = nx.karate_club_graph()
87
- d = nx.laplacian_centrality(KC)
88
- exact = {
89
- 0: 0.2543593,
90
- 1: 0.1724524,
91
- 2: 0.2166053,
92
- 3: 0.0964646,
93
- 4: 0.0350344,
94
- 5: 0.0571109,
95
- 6: 0.0540713,
96
- 7: 0.0788674,
97
- 8: 0.1222204,
98
- 9: 0.0217565,
99
- 10: 0.0308751,
100
- 11: 0.0215965,
101
- 12: 0.0174372,
102
- 13: 0.118861,
103
- 14: 0.0366341,
104
- 15: 0.0548712,
105
- 16: 0.0172772,
106
- 17: 0.0191969,
107
- 18: 0.0225564,
108
- 19: 0.0331147,
109
- 20: 0.0279955,
110
- 21: 0.0246361,
111
- 22: 0.0382339,
112
- 23: 0.1294193,
113
- 24: 0.0227164,
114
- 25: 0.0644697,
115
- 26: 0.0281555,
116
- 27: 0.075188,
117
- 28: 0.0364742,
118
- 29: 0.0707087,
119
- 30: 0.0708687,
120
- 31: 0.131019,
121
- 32: 0.2370821,
122
- 33: 0.3066709,
123
- }
124
- for n, dc in d.items():
125
- assert exact[n] == pytest.approx(dc, abs=1e-7)
126
-
127
- # Check not normalized
128
- full_energy = 12502
129
- dnn = nx.laplacian_centrality(KC, normalized=False)
130
- for n, dc in dnn.items():
131
- assert exact[n] * full_energy == pytest.approx(dc, abs=1e-3)
132
-
133
-
134
- def test_laplacian_centrality_K():
135
- K = nx.krackhardt_kite_graph()
136
- d = nx.laplacian_centrality(K)
137
- exact = {
138
- 0: 0.3010753,
139
- 1: 0.3010753,
140
- 2: 0.2258065,
141
- 3: 0.483871,
142
- 4: 0.2258065,
143
- 5: 0.3870968,
144
- 6: 0.3870968,
145
- 7: 0.1935484,
146
- 8: 0.0752688,
147
- 9: 0.0322581,
148
- }
149
- for n, dc in d.items():
150
- assert exact[n] == pytest.approx(dc, abs=1e-7)
151
-
152
- # Check not normalized
153
- full_energy = 186
154
- dnn = nx.laplacian_centrality(K, normalized=False)
155
- for n, dc in dnn.items():
156
- assert exact[n] * full_energy == pytest.approx(dc, abs=1e-3)
157
-
158
-
159
- def test_laplacian_centrality_P3():
160
- P3 = nx.path_graph(3)
161
- d = nx.laplacian_centrality(P3)
162
- exact = {0: 0.6, 1: 1.0, 2: 0.6}
163
- for n, dc in d.items():
164
- assert exact[n] == pytest.approx(dc, abs=1e-7)
165
-
166
-
167
- def test_laplacian_centrality_K5():
168
- K5 = nx.complete_graph(5)
169
- d = nx.laplacian_centrality(K5)
170
- exact = {0: 0.52, 1: 0.52, 2: 0.52, 3: 0.52, 4: 0.52}
171
- for n, dc in d.items():
172
- assert exact[n] == pytest.approx(dc, abs=1e-7)
173
-
174
-
175
- def test_laplacian_centrality_FF():
176
- FF = nx.florentine_families_graph()
177
- d = nx.laplacian_centrality(FF)
178
- exact = {
179
- "Acciaiuoli": 0.0804598,
180
- "Medici": 0.4022989,
181
- "Castellani": 0.1724138,
182
- "Peruzzi": 0.183908,
183
- "Strozzi": 0.2528736,
184
- "Barbadori": 0.137931,
185
- "Ridolfi": 0.2183908,
186
- "Tornabuoni": 0.2183908,
187
- "Albizzi": 0.1954023,
188
- "Salviati": 0.1149425,
189
- "Pazzi": 0.0344828,
190
- "Bischeri": 0.1954023,
191
- "Guadagni": 0.2298851,
192
- "Ginori": 0.045977,
193
- "Lamberteschi": 0.0574713,
194
- }
195
- for n, dc in d.items():
196
- assert exact[n] == pytest.approx(dc, abs=1e-7)
197
-
198
-
199
- def test_laplacian_centrality_DG():
200
- DG = nx.DiGraph([(0, 5), (1, 5), (2, 5), (3, 5), (4, 5), (5, 6), (5, 7), (5, 8)])
201
- d = nx.laplacian_centrality(DG)
202
- exact = {
203
- 0: 0.2123352,
204
- 5: 0.515391,
205
- 1: 0.2123352,
206
- 2: 0.2123352,
207
- 3: 0.2123352,
208
- 4: 0.2123352,
209
- 6: 0.2952031,
210
- 7: 0.2952031,
211
- 8: 0.2952031,
212
- }
213
- for n, dc in d.items():
214
- assert exact[n] == pytest.approx(dc, abs=1e-7)
215
-
216
- # Check not normalized
217
- full_energy = 9.50704
218
- dnn = nx.laplacian_centrality(DG, normalized=False)
219
- for n, dc in dnn.items():
220
- assert exact[n] * full_energy == pytest.approx(dc, abs=1e-4)