py3plex 1.1.7__tar.gz → 2.0.1__tar.gz

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 (1148) hide show
  1. py3plex-2.0.1/MANIFEST.in +5 -0
  2. py3plex-2.0.1/PKG-INFO +385 -0
  3. py3plex-2.0.1/README.md +281 -0
  4. py3plex-2.0.1/py3plex/__init__.py +383 -0
  5. py3plex-2.0.1/py3plex/_parallel.py +281 -0
  6. py3plex-2.0.1/py3plex/algebra/fixed_point.py +69 -0
  7. py3plex-2.0.1/py3plex/algebra/paths.py +331 -0
  8. py3plex-2.0.1/py3plex/algebra/semiring.py +276 -0
  9. py3plex-2.0.1/py3plex/algebra/witness.py +77 -0
  10. py3plex-2.0.1/py3plex/algorithms/advanced_random_generators.py +486 -0
  11. py3plex-2.0.1/py3plex/algorithms/attribute_correlation.py +615 -0
  12. py3plex-2.0.1/py3plex/algorithms/centrality/approx_pagerank.py +165 -0
  13. py3plex-2.0.1/py3plex/algorithms/centrality_toolkit.py +471 -0
  14. py3plex-2.0.1/py3plex/algorithms/community_detection/auto_select.py +560 -0
  15. py3plex-2.0.1/py3plex/algorithms/community_detection/autocommunity.py +472 -0
  16. py3plex-2.0.1/py3plex/algorithms/community_detection/autocommunity_executor.py +1260 -0
  17. py3plex-2.0.1/py3plex/algorithms/community_detection/distributional.py +506 -0
  18. py3plex-2.0.1/py3plex/algorithms/community_detection/flow_hierarchy.py +868 -0
  19. py3plex-2.0.1/py3plex/algorithms/community_detection/label_propagation.py +511 -0
  20. py3plex-2.0.1/py3plex/algorithms/community_detection/leiden_uq.py +636 -0
  21. py3plex-2.0.1/py3plex/algorithms/community_detection/runner.py +510 -0
  22. py3plex-2.0.1/py3plex/algorithms/community_detection/sbm_wrapper.py +242 -0
  23. py3plex-2.0.1/py3plex/algorithms/community_detection/spectral_multilayer.py +821 -0
  24. py3plex-2.0.1/py3plex/algorithms/community_detection/successive_halving.py +602 -0
  25. py3plex-2.0.1/py3plex/algorithms/graph_summarization.py +481 -0
  26. py3plex-2.0.1/py3plex/algorithms/layer_similarity.py +429 -0
  27. py3plex-2.0.1/py3plex/algorithms/multilayer_algorithms/centrality.py +2400 -0
  28. py3plex-2.0.1/py3plex/algorithms/multilayer_clustering.py +479 -0
  29. py3plex-2.0.1/py3plex/algorithms/network_classification/PPR.py +148 -0
  30. py3plex-2.0.1/py3plex/algorithms/network_classification/label_propagation.py +243 -0
  31. py3plex-2.0.1/py3plex/algorithms/node_ranking/__init__.py +462 -0
  32. py3plex-2.0.1/py3plex/algorithms/node_ranking/node_ranking.py +100 -0
  33. py3plex-2.0.1/py3plex/algorithms/robustness_testing.py +457 -0
  34. py3plex-2.0.1/py3plex/algorithms/routing/multiplex_paths.py +654 -0
  35. py3plex-2.0.1/py3plex/algorithms/sbm/inference_vi.py +399 -0
  36. py3plex-2.0.1/py3plex/algorithms/sbm/model_selection.py +217 -0
  37. py3plex-2.0.1/py3plex/algorithms/sbm/multilayer_sbm.py +301 -0
  38. py3plex-2.0.1/py3plex/algorithms/sbm/objectives.py +250 -0
  39. py3plex-2.0.1/py3plex/algorithms/sbm/uq.py +339 -0
  40. py3plex-2.0.1/py3plex/algorithms/sbm/utils.py +259 -0
  41. py3plex-2.0.1/py3plex/algorithms/statistical_report.py +435 -0
  42. py3plex-2.0.1/py3plex/algorithms/statistics/correlation_networks.py +101 -0
  43. py3plex-2.0.1/py3plex/algorithms/statistics/multilayer_statistics.py +2401 -0
  44. py3plex-2.0.1/py3plex/algorithms/temporal/centrality.py +188 -0
  45. py3plex-2.0.1/py3plex/algorithms/temporal/community.py +261 -0
  46. py3plex-2.0.1/py3plex/centrality/robustness.py +566 -0
  47. py3plex-2.0.1/py3plex/claims/generator.py +247 -0
  48. py3plex-2.0.1/py3plex/claims/learner.py +290 -0
  49. py3plex-2.0.1/py3plex/claims/types.py +353 -0
  50. py3plex-2.0.1/py3plex/cli.py +3785 -0
  51. py3plex-2.0.1/py3plex/comparison/executor.py +126 -0
  52. py3plex-2.0.1/py3plex/comparison/metrics.py +465 -0
  53. py3plex-2.0.1/py3plex/comparison/result.py +152 -0
  54. py3plex-2.0.1/py3plex/compat/convert.py +203 -0
  55. py3plex-2.0.1/py3plex/compat/converters/dgl_converter.py +66 -0
  56. py3plex-2.0.1/py3plex/compat/converters/networkx_converter.py +280 -0
  57. py3plex-2.0.1/py3plex/compat/converters/pyg_converter.py +70 -0
  58. py3plex-2.0.1/py3plex/compat/converters/scipy_converter.py +319 -0
  59. py3plex-2.0.1/py3plex/compat/equality.py +290 -0
  60. py3plex-2.0.1/py3plex/compat/ir.py +675 -0
  61. py3plex-2.0.1/py3plex/compat/schema.py +303 -0
  62. py3plex-2.0.1/py3plex/compat/sidecar.py +285 -0
  63. py3plex-2.0.1/py3plex/config.py +279 -0
  64. py3plex-2.0.1/py3plex/contracts/contract.py +253 -0
  65. py3plex-2.0.1/py3plex/contracts/predicates.py +615 -0
  66. py3plex-2.0.1/py3plex/core/immutable.py +233 -0
  67. py3plex-2.0.1/py3plex/core/lazy_evaluation.py +264 -0
  68. py3plex-2.0.1/py3plex/core/multinet.py +4757 -0
  69. py3plex-2.0.1/py3plex/core/parsers.py +988 -0
  70. py3plex-2.0.1/py3plex/core/temporal_multinet.py +519 -0
  71. py3plex-2.0.1/py3plex/counterexamples/engine.py +490 -0
  72. py3plex-2.0.1/py3plex/counterfactual/comparator.py +373 -0
  73. py3plex-2.0.1/py3plex/counterfactual/presets.py +183 -0
  74. py3plex-2.0.1/py3plex/counterfactual/spec.py +531 -0
  75. py3plex-2.0.1/py3plex/datasets/_loaders.py +291 -0
  76. py3plex-2.0.1/py3plex/diagnostics/builders.py +325 -0
  77. py3plex-2.0.1/py3plex/diagnostics/core.py +315 -0
  78. py3plex-2.0.1/py3plex/diagnostics/utils.py +163 -0
  79. py3plex-2.0.1/py3plex/dsl/__init__.py +709 -0
  80. py3plex-2.0.1/py3plex/dsl/algebra.py +353 -0
  81. py3plex-2.0.1/py3plex/dsl/ast.py +2291 -0
  82. py3plex-2.0.1/py3plex/dsl/benchmark.py +364 -0
  83. py3plex-2.0.1/py3plex/dsl/benchmark_result.py +161 -0
  84. py3plex-2.0.1/py3plex/dsl/builder.py +7486 -0
  85. py3plex-2.0.1/py3plex/dsl/cache.py +266 -0
  86. py3plex-2.0.1/py3plex/dsl/community_uq.py +435 -0
  87. py3plex-2.0.1/py3plex/dsl/compositional_uq.py +351 -0
  88. py3plex-2.0.1/py3plex/dsl/errors.py +676 -0
  89. py3plex-2.0.1/py3plex/dsl/executor.py +7356 -0
  90. py3plex-2.0.1/py3plex/dsl/executor_semiring.py +333 -0
  91. py3plex-2.0.1/py3plex/dsl/executors/benchmark_executor.py +662 -0
  92. py3plex-2.0.1/py3plex/dsl/explain.py +549 -0
  93. py3plex-2.0.1/py3plex/dsl/export.py +389 -0
  94. py3plex-2.0.1/py3plex/dsl/expressions.py +237 -0
  95. py3plex-2.0.1/py3plex/dsl/fastpath.py +655 -0
  96. py3plex-2.0.1/py3plex/dsl/layers.py +604 -0
  97. py3plex-2.0.1/py3plex/dsl/lint/rules/dsl001_unknown_layer.py +137 -0
  98. py3plex-2.0.1/py3plex/dsl/lint/rules/dsl201_unsatisfiable.py +117 -0
  99. py3plex-2.0.1/py3plex/dsl/lint/types.py +85 -0
  100. py3plex-2.0.1/py3plex/dsl/metrics.py +243 -0
  101. py3plex-2.0.1/py3plex/dsl/operators.py +241 -0
  102. py3plex-2.0.1/py3plex/dsl/patterns/__init__.py +40 -0
  103. py3plex-2.0.1/py3plex/dsl/patterns/builder.py +279 -0
  104. py3plex-2.0.1/py3plex/dsl/patterns/compiler.py +327 -0
  105. py3plex-2.0.1/py3plex/dsl/patterns/engine.py +500 -0
  106. py3plex-2.0.1/py3plex/dsl/patterns/ir.py +399 -0
  107. py3plex-2.0.1/py3plex/dsl/plan.py +114 -0
  108. py3plex-2.0.1/py3plex/dsl/planner.py +839 -0
  109. py3plex-2.0.1/py3plex/dsl/program/cache.py +245 -0
  110. py3plex-2.0.1/py3plex/dsl/program/cost.py +863 -0
  111. py3plex-2.0.1/py3plex/dsl/program/diff.py +222 -0
  112. py3plex-2.0.1/py3plex/dsl/program/executor.py +762 -0
  113. py3plex-2.0.1/py3plex/dsl/program/explain.py +191 -0
  114. py3plex-2.0.1/py3plex/dsl/program/program.py +907 -0
  115. py3plex-2.0.1/py3plex/dsl/program/rewrite.py +1480 -0
  116. py3plex-2.0.1/py3plex/dsl/program/types.py +1092 -0
  117. py3plex-2.0.1/py3plex/dsl/provenance.py +544 -0
  118. py3plex-2.0.1/py3plex/dsl/result.py +2065 -0
  119. py3plex-2.0.1/py3plex/dsl/selection_uq.py +342 -0
  120. py3plex-2.0.1/py3plex/dsl/serializer.py +288 -0
  121. py3plex-2.0.1/py3plex/dsl/uq_algebra.py +897 -0
  122. py3plex-2.0.1/py3plex/dsl/uq_resolution.py +722 -0
  123. py3plex-2.0.1/py3plex/dsl/warnings.py +489 -0
  124. py3plex-2.0.1/py3plex/dsl_legacy.py +2182 -0
  125. py3plex-2.0.1/py3plex/dynamics/_utils.py +196 -0
  126. py3plex-2.0.1/py3plex/dynamics/compartmental.py +415 -0
  127. py3plex-2.0.1/py3plex/dynamics/core.py +677 -0
  128. py3plex-2.0.1/py3plex/dynamics/executor.py +482 -0
  129. py3plex-2.0.1/py3plex/dynamics/models.py +685 -0
  130. py3plex-2.0.1/py3plex/embeddings/cache.py +145 -0
  131. py3plex-2.0.1/py3plex/embeddings/link_ops.py +155 -0
  132. py3plex-2.0.1/py3plex/embeddings/metapath2vec.py +614 -0
  133. py3plex-2.0.1/py3plex/ergonomics.py +388 -0
  134. py3plex-2.0.1/py3plex/experiments/artifacts.py +214 -0
  135. py3plex-2.0.1/py3plex/experiments/env.py +74 -0
  136. py3plex-2.0.1/py3plex/experiments/model.py +304 -0
  137. py3plex-2.0.1/py3plex/experiments/runner.py +165 -0
  138. py3plex-2.0.1/py3plex/experiments/store.py +231 -0
  139. py3plex-2.0.1/py3plex/fast_examples.py +120 -0
  140. py3plex-2.0.1/py3plex/io/exceptions.py +36 -0
  141. py3plex-2.0.1/py3plex/io/formats/arrow_format.py +333 -0
  142. py3plex-2.0.1/py3plex/io/multinet_bridge.py +399 -0
  143. py3plex-2.0.1/py3plex/meta/builder.py +776 -0
  144. py3plex-2.0.1/py3plex/meta/result.py +106 -0
  145. py3plex-2.0.1/py3plex/meta/stats.py +355 -0
  146. py3plex-2.0.1/py3plex/meta/utils.py +333 -0
  147. py3plex-2.0.1/py3plex/ml/embedding/utils.py +149 -0
  148. py3plex-2.0.1/py3plex/nullmodels/executor.py +126 -0
  149. py3plex-2.0.1/py3plex/nullmodels/models.py +397 -0
  150. py3plex-2.0.1/py3plex/optimizer/cost_model.py +274 -0
  151. py3plex-2.0.1/py3plex/optimizer/logical_plan.py +188 -0
  152. py3plex-2.0.1/py3plex/optimizer/optimizer.py +186 -0
  153. py3plex-2.0.1/py3plex/optimizer/physical_plan.py +441 -0
  154. py3plex-2.0.1/py3plex/optimizer/plan_nodes.py +270 -0
  155. py3plex-2.0.1/py3plex/optimizer/rules.py +536 -0
  156. py3plex-2.0.1/py3plex/out_of_core/executor.py +861 -0
  157. py3plex-2.0.1/py3plex/out_of_core/network.py +402 -0
  158. py3plex-2.0.1/py3plex/out_of_core/readers.py +306 -0
  159. py3plex-2.0.1/py3plex/out_of_core/spill.py +278 -0
  160. py3plex-2.0.1/py3plex/paths/algorithms.py +422 -0
  161. py3plex-2.0.1/py3plex/paths/executor.py +112 -0
  162. py3plex-2.0.1/py3plex/pipeline.py +757 -0
  163. py3plex-2.0.1/py3plex/plugins/base.py +258 -0
  164. py3plex-2.0.1/py3plex/provenance/bundle.py +217 -0
  165. py3plex-2.0.1/py3plex/provenance/capture.py +276 -0
  166. py3plex-2.0.1/py3plex/provenance/replay.py +252 -0
  167. py3plex-2.0.1/py3plex/provenance/schema.py +342 -0
  168. py3plex-2.0.1/py3plex/requirements.py +842 -0
  169. py3plex-2.0.1/py3plex/selection/capabilities.py +311 -0
  170. py3plex-2.0.1/py3plex/selection/community_registry.py +282 -0
  171. py3plex-2.0.1/py3plex/selection/evaluate.py +278 -0
  172. py3plex-2.0.1/py3plex/selection/result.py +331 -0
  173. py3plex-2.0.1/py3plex/semiring/core.py +383 -0
  174. py3plex-2.0.1/py3plex/semiring/pareto.py +138 -0
  175. py3plex-2.0.1/py3plex/semiring/types.py +47 -0
  176. py3plex-2.0.1/py3plex/sensitivity/executor.py +350 -0
  177. py3plex-2.0.1/py3plex/sensitivity/metrics.py +287 -0
  178. py3plex-2.0.1/py3plex/sensitivity/perturbations.py +263 -0
  179. py3plex-2.0.1/py3plex/sensitivity/types.py +204 -0
  180. py3plex-2.0.1/py3plex/stats/provenance.py +79 -0
  181. py3plex-2.0.1/py3plex/stats/registry.py +236 -0
  182. py3plex-2.0.1/py3plex/stats/uncertainty.py +527 -0
  183. py3plex-2.0.1/py3plex/temporal_view.py +277 -0
  184. py3plex-2.0.1/py3plex/uncertainty/bootstrap.py +431 -0
  185. py3plex-2.0.1/py3plex/uncertainty/community_ensemble.py +605 -0
  186. py3plex-2.0.1/py3plex/uncertainty/community_result.py +680 -0
  187. py3plex-2.0.1/py3plex/uncertainty/estimation.py +543 -0
  188. py3plex-2.0.1/py3plex/uncertainty/noise_models.py +510 -0
  189. py3plex-2.0.1/py3plex/uncertainty/null_models.py +496 -0
  190. py3plex-2.0.1/py3plex/uncertainty/partition_metrics.py +334 -0
  191. py3plex-2.0.1/py3plex/uncertainty/partition_reducers.py +851 -0
  192. py3plex-2.0.1/py3plex/uncertainty/partition_uq.py +566 -0
  193. py3plex-2.0.1/py3plex/uncertainty/resampling_graph.py +286 -0
  194. py3plex-2.0.1/py3plex/uncertainty/runner.py +178 -0
  195. py3plex-2.0.1/py3plex/uncertainty/selection_execution.py +280 -0
  196. py3plex-2.0.1/py3plex/uncertainty/selection_reducers.py +507 -0
  197. py3plex-2.0.1/py3plex/uncertainty/stratification.py +364 -0
  198. py3plex-2.0.1/py3plex/utils.py +445 -0
  199. py3plex-2.0.1/py3plex/visualization/benchmark_visualizations.py +301 -0
  200. py3plex-2.0.1/py3plex/visualization/bezier.py +175 -0
  201. py3plex-2.0.1/py3plex/visualization/multilayer.py +2549 -0
  202. py3plex-2.0.1/py3plex/visualization/pymnet_style.py +686 -0
  203. py3plex-2.0.1/py3plex/visualization/sankey.py +254 -0
  204. py3plex-2.0.1/py3plex.egg-info/PKG-INFO +385 -0
  205. py3plex-2.0.1/py3plex.egg-info/SOURCES.txt +930 -0
  206. py3plex-2.0.1/py3plex.egg-info/requires.txt +94 -0
  207. py3plex-2.0.1/py3plex_mcp/__init__.py +24 -0
  208. py3plex-2.0.1/pyproject.toml +321 -0
  209. py3plex-2.0.1/tests/test_book_conf.py +78 -0
  210. py3plex-2.0.1/tests/test_book_manuscript_integrity.py +189 -0
  211. py3plex-2.0.1/tests/test_data_files_presence.py +28 -0
  212. py3plex-2.0.1/tests/test_dependency_cleanup.py +38 -0
  213. py3plex-2.0.1/tests/test_dsl_ast_immutability.py +154 -0
  214. py3plex-2.0.1/tests/test_dsl_compiler_explain.py +175 -0
  215. py3plex-2.0.1/tests/test_dsl_compiler_pipeline.py +242 -0
  216. py3plex-2.0.1/tests/test_dsl_layer_resolution.py +182 -0
  217. py3plex-2.0.1/tests/test_dsl_metric_registry.py +171 -0
  218. py3plex-2.0.1/tests/test_dsl_patterns.py +589 -0
  219. py3plex-2.0.1/tests/test_dsl_patterns_correctness.py +247 -0
  220. py3plex-2.0.1/tests/test_dsl_planner_config.py +167 -0
  221. py3plex-2.0.1/tests/test_dynamics_metamorphic.py +327 -0
  222. py3plex-2.0.1/tests/test_example_CBSSD.py +190 -0
  223. py3plex-2.0.1/tests/test_meta_utils.py +39 -0
  224. py3plex-2.0.1/tests/test_ml_embedding_evaluation.py +159 -0
  225. py3plex-2.0.1/tests/test_multilayer_statistics.py +849 -0
  226. py3plex-2.0.1/tests/test_node_ranking_comprehensive.py +299 -0
  227. py3plex-2.0.1/tests/test_program.py +556 -0
  228. py3plex-2.0.1/tests/test_sir_long_convergence.py +492 -0
  229. py3plex-2.0.1/tests/test_utils_search_paths.py +48 -0
  230. py3plex-2.0.1/tests/test_version_consistency.py +97 -0
  231. py3plex-2.0.1/tests/test_wrappers_benchmark_nodes.py +298 -0
  232. py3plex-1.1.7/MANIFEST.in +0 -2
  233. py3plex-1.1.7/PKG-INFO +0 -363
  234. py3plex-1.1.7/README.md +0 -264
  235. py3plex-1.1.7/py3plex/__init__.py +0 -383
  236. py3plex-1.1.7/py3plex/_parallel.py +0 -272
  237. py3plex-1.1.7/py3plex/algebra/fixed_point.py +0 -70
  238. py3plex-1.1.7/py3plex/algebra/paths.py +0 -332
  239. py3plex-1.1.7/py3plex/algebra/semiring.py +0 -276
  240. py3plex-1.1.7/py3plex/algebra/witness.py +0 -77
  241. py3plex-1.1.7/py3plex/algorithms/advanced_random_generators.py +0 -487
  242. py3plex-1.1.7/py3plex/algorithms/attribute_correlation.py +0 -615
  243. py3plex-1.1.7/py3plex/algorithms/centrality/approx_pagerank.py +0 -166
  244. py3plex-1.1.7/py3plex/algorithms/centrality_toolkit.py +0 -471
  245. py3plex-1.1.7/py3plex/algorithms/community_detection/auto_select.py +0 -560
  246. py3plex-1.1.7/py3plex/algorithms/community_detection/autocommunity.py +0 -474
  247. py3plex-1.1.7/py3plex/algorithms/community_detection/autocommunity_executor.py +0 -1260
  248. py3plex-1.1.7/py3plex/algorithms/community_detection/distributional.py +0 -504
  249. py3plex-1.1.7/py3plex/algorithms/community_detection/flow_hierarchy.py +0 -869
  250. py3plex-1.1.7/py3plex/algorithms/community_detection/label_propagation.py +0 -511
  251. py3plex-1.1.7/py3plex/algorithms/community_detection/leiden_uq.py +0 -640
  252. py3plex-1.1.7/py3plex/algorithms/community_detection/runner.py +0 -510
  253. py3plex-1.1.7/py3plex/algorithms/community_detection/sbm_wrapper.py +0 -243
  254. py3plex-1.1.7/py3plex/algorithms/community_detection/spectral_multilayer.py +0 -821
  255. py3plex-1.1.7/py3plex/algorithms/community_detection/successive_halving.py +0 -603
  256. py3plex-1.1.7/py3plex/algorithms/graph_summarization.py +0 -482
  257. py3plex-1.1.7/py3plex/algorithms/layer_similarity.py +0 -432
  258. py3plex-1.1.7/py3plex/algorithms/multilayer_algorithms/centrality.py +0 -2400
  259. py3plex-1.1.7/py3plex/algorithms/multilayer_clustering.py +0 -479
  260. py3plex-1.1.7/py3plex/algorithms/network_classification/PPR.py +0 -148
  261. py3plex-1.1.7/py3plex/algorithms/network_classification/label_propagation.py +0 -242
  262. py3plex-1.1.7/py3plex/algorithms/node_ranking/__init__.py +0 -414
  263. py3plex-1.1.7/py3plex/algorithms/node_ranking/node_ranking.py +0 -256
  264. py3plex-1.1.7/py3plex/algorithms/robustness_testing.py +0 -458
  265. py3plex-1.1.7/py3plex/algorithms/routing/multiplex_paths.py +0 -655
  266. py3plex-1.1.7/py3plex/algorithms/sbm/inference_vi.py +0 -399
  267. py3plex-1.1.7/py3plex/algorithms/sbm/model_selection.py +0 -218
  268. py3plex-1.1.7/py3plex/algorithms/sbm/multilayer_sbm.py +0 -303
  269. py3plex-1.1.7/py3plex/algorithms/sbm/objectives.py +0 -251
  270. py3plex-1.1.7/py3plex/algorithms/sbm/uq.py +0 -339
  271. py3plex-1.1.7/py3plex/algorithms/sbm/utils.py +0 -259
  272. py3plex-1.1.7/py3plex/algorithms/statistical_report.py +0 -437
  273. py3plex-1.1.7/py3plex/algorithms/statistics/correlation_networks.py +0 -85
  274. py3plex-1.1.7/py3plex/algorithms/statistics/multilayer_statistics.py +0 -2393
  275. py3plex-1.1.7/py3plex/algorithms/temporal/centrality.py +0 -190
  276. py3plex-1.1.7/py3plex/algorithms/temporal/community.py +0 -262
  277. py3plex-1.1.7/py3plex/centrality/robustness.py +0 -583
  278. py3plex-1.1.7/py3plex/claims/generator.py +0 -247
  279. py3plex-1.1.7/py3plex/claims/learner.py +0 -293
  280. py3plex-1.1.7/py3plex/claims/types.py +0 -353
  281. py3plex-1.1.7/py3plex/cli.py +0 -3788
  282. py3plex-1.1.7/py3plex/comparison/executor.py +0 -127
  283. py3plex-1.1.7/py3plex/comparison/metrics.py +0 -465
  284. py3plex-1.1.7/py3plex/comparison/result.py +0 -152
  285. py3plex-1.1.7/py3plex/compat/convert.py +0 -204
  286. py3plex-1.1.7/py3plex/compat/converters/dgl_converter.py +0 -66
  287. py3plex-1.1.7/py3plex/compat/converters/networkx_converter.py +0 -275
  288. py3plex-1.1.7/py3plex/compat/converters/pyg_converter.py +0 -70
  289. py3plex-1.1.7/py3plex/compat/converters/scipy_converter.py +0 -321
  290. py3plex-1.1.7/py3plex/compat/equality.py +0 -290
  291. py3plex-1.1.7/py3plex/compat/ir.py +0 -679
  292. py3plex-1.1.7/py3plex/compat/schema.py +0 -306
  293. py3plex-1.1.7/py3plex/compat/sidecar.py +0 -243
  294. py3plex-1.1.7/py3plex/config.py +0 -279
  295. py3plex-1.1.7/py3plex/contracts/contract.py +0 -253
  296. py3plex-1.1.7/py3plex/contracts/predicates.py +0 -615
  297. py3plex-1.1.7/py3plex/core/immutable.py +0 -233
  298. py3plex-1.1.7/py3plex/core/lazy_evaluation.py +0 -265
  299. py3plex-1.1.7/py3plex/core/multinet.py +0 -4754
  300. py3plex-1.1.7/py3plex/core/parsers.py +0 -985
  301. py3plex-1.1.7/py3plex/core/temporal_multinet.py +0 -520
  302. py3plex-1.1.7/py3plex/counterexamples/engine.py +0 -490
  303. py3plex-1.1.7/py3plex/counterfactual/comparator.py +0 -373
  304. py3plex-1.1.7/py3plex/counterfactual/presets.py +0 -188
  305. py3plex-1.1.7/py3plex/counterfactual/spec.py +0 -531
  306. py3plex-1.1.7/py3plex/datasets/_loaders.py +0 -291
  307. py3plex-1.1.7/py3plex/diagnostics/builders.py +0 -325
  308. py3plex-1.1.7/py3plex/diagnostics/core.py +0 -315
  309. py3plex-1.1.7/py3plex/diagnostics/utils.py +0 -163
  310. py3plex-1.1.7/py3plex/dsl/__init__.py +0 -636
  311. py3plex-1.1.7/py3plex/dsl/algebra.py +0 -354
  312. py3plex-1.1.7/py3plex/dsl/ast.py +0 -2287
  313. py3plex-1.1.7/py3plex/dsl/benchmark.py +0 -364
  314. py3plex-1.1.7/py3plex/dsl/benchmark_result.py +0 -161
  315. py3plex-1.1.7/py3plex/dsl/builder.py +0 -7455
  316. py3plex-1.1.7/py3plex/dsl/cache.py +0 -266
  317. py3plex-1.1.7/py3plex/dsl/community_uq.py +0 -438
  318. py3plex-1.1.7/py3plex/dsl/compositional_uq.py +0 -357
  319. py3plex-1.1.7/py3plex/dsl/errors.py +0 -676
  320. py3plex-1.1.7/py3plex/dsl/executor.py +0 -7328
  321. py3plex-1.1.7/py3plex/dsl/executor_semiring.py +0 -335
  322. py3plex-1.1.7/py3plex/dsl/executors/benchmark_executor.py +0 -664
  323. py3plex-1.1.7/py3plex/dsl/explain.py +0 -549
  324. py3plex-1.1.7/py3plex/dsl/export.py +0 -390
  325. py3plex-1.1.7/py3plex/dsl/expressions.py +0 -237
  326. py3plex-1.1.7/py3plex/dsl/fastpath.py +0 -655
  327. py3plex-1.1.7/py3plex/dsl/layers.py +0 -605
  328. py3plex-1.1.7/py3plex/dsl/lint/rules/dsl001_unknown_layer.py +0 -134
  329. py3plex-1.1.7/py3plex/dsl/lint/rules/dsl201_unsatisfiable.py +0 -117
  330. py3plex-1.1.7/py3plex/dsl/lint/types.py +0 -85
  331. py3plex-1.1.7/py3plex/dsl/patterns/__init__.py +0 -66
  332. py3plex-1.1.7/py3plex/dsl/patterns/builder.py +0 -502
  333. py3plex-1.1.7/py3plex/dsl/patterns/compiler.py +0 -233
  334. py3plex-1.1.7/py3plex/dsl/patterns/engine.py +0 -528
  335. py3plex-1.1.7/py3plex/dsl/patterns/ir.py +0 -349
  336. py3plex-1.1.7/py3plex/dsl/planner.py +0 -840
  337. py3plex-1.1.7/py3plex/dsl/program/cache.py +0 -246
  338. py3plex-1.1.7/py3plex/dsl/program/cost.py +0 -866
  339. py3plex-1.1.7/py3plex/dsl/program/diff.py +0 -222
  340. py3plex-1.1.7/py3plex/dsl/program/executor.py +0 -762
  341. py3plex-1.1.7/py3plex/dsl/program/explain.py +0 -192
  342. py3plex-1.1.7/py3plex/dsl/program/program.py +0 -706
  343. py3plex-1.1.7/py3plex/dsl/program/rewrite.py +0 -1489
  344. py3plex-1.1.7/py3plex/dsl/program/types.py +0 -1100
  345. py3plex-1.1.7/py3plex/dsl/provenance.py +0 -544
  346. py3plex-1.1.7/py3plex/dsl/result.py +0 -2191
  347. py3plex-1.1.7/py3plex/dsl/selection_uq.py +0 -343
  348. py3plex-1.1.7/py3plex/dsl/serializer.py +0 -289
  349. py3plex-1.1.7/py3plex/dsl/uq_algebra.py +0 -897
  350. py3plex-1.1.7/py3plex/dsl/uq_resolution.py +0 -722
  351. py3plex-1.1.7/py3plex/dsl/warnings.py +0 -489
  352. py3plex-1.1.7/py3plex/dsl_legacy.py +0 -2182
  353. py3plex-1.1.7/py3plex/dynamics/_utils.py +0 -197
  354. py3plex-1.1.7/py3plex/dynamics/compartmental.py +0 -415
  355. py3plex-1.1.7/py3plex/dynamics/core.py +0 -678
  356. py3plex-1.1.7/py3plex/dynamics/executor.py +0 -482
  357. py3plex-1.1.7/py3plex/dynamics/models.py +0 -685
  358. py3plex-1.1.7/py3plex/embeddings/cache.py +0 -146
  359. py3plex-1.1.7/py3plex/embeddings/link_ops.py +0 -155
  360. py3plex-1.1.7/py3plex/embeddings/metapath2vec.py +0 -614
  361. py3plex-1.1.7/py3plex/ergonomics.py +0 -388
  362. py3plex-1.1.7/py3plex/experiments/artifacts.py +0 -217
  363. py3plex-1.1.7/py3plex/experiments/env.py +0 -75
  364. py3plex-1.1.7/py3plex/experiments/model.py +0 -304
  365. py3plex-1.1.7/py3plex/experiments/runner.py +0 -166
  366. py3plex-1.1.7/py3plex/experiments/store.py +0 -231
  367. py3plex-1.1.7/py3plex/fast_examples.py +0 -121
  368. py3plex-1.1.7/py3plex/io/exceptions.py +0 -36
  369. py3plex-1.1.7/py3plex/io/formats/arrow_format.py +0 -333
  370. py3plex-1.1.7/py3plex/io/multinet_bridge.py +0 -399
  371. py3plex-1.1.7/py3plex/meta/builder.py +0 -776
  372. py3plex-1.1.7/py3plex/meta/result.py +0 -107
  373. py3plex-1.1.7/py3plex/meta/stats.py +0 -356
  374. py3plex-1.1.7/py3plex/meta/utils.py +0 -336
  375. py3plex-1.1.7/py3plex/ml/embedding/utils.py +0 -149
  376. py3plex-1.1.7/py3plex/nullmodels/executor.py +0 -126
  377. py3plex-1.1.7/py3plex/nullmodels/models.py +0 -397
  378. py3plex-1.1.7/py3plex/optimizer/cost_model.py +0 -274
  379. py3plex-1.1.7/py3plex/optimizer/logical_plan.py +0 -188
  380. py3plex-1.1.7/py3plex/optimizer/optimizer.py +0 -188
  381. py3plex-1.1.7/py3plex/optimizer/physical_plan.py +0 -460
  382. py3plex-1.1.7/py3plex/optimizer/plan_nodes.py +0 -277
  383. py3plex-1.1.7/py3plex/optimizer/rules.py +0 -552
  384. py3plex-1.1.7/py3plex/out_of_core/executor.py +0 -865
  385. py3plex-1.1.7/py3plex/out_of_core/network.py +0 -405
  386. py3plex-1.1.7/py3plex/out_of_core/readers.py +0 -308
  387. py3plex-1.1.7/py3plex/out_of_core/spill.py +0 -280
  388. py3plex-1.1.7/py3plex/paths/algorithms.py +0 -422
  389. py3plex-1.1.7/py3plex/paths/executor.py +0 -112
  390. py3plex-1.1.7/py3plex/pipeline.py +0 -757
  391. py3plex-1.1.7/py3plex/plugins/base.py +0 -258
  392. py3plex-1.1.7/py3plex/provenance/bundle.py +0 -219
  393. py3plex-1.1.7/py3plex/provenance/capture.py +0 -276
  394. py3plex-1.1.7/py3plex/provenance/replay.py +0 -253
  395. py3plex-1.1.7/py3plex/provenance/schema.py +0 -342
  396. py3plex-1.1.7/py3plex/requirements.py +0 -842
  397. py3plex-1.1.7/py3plex/selection/capabilities.py +0 -311
  398. py3plex-1.1.7/py3plex/selection/community_registry.py +0 -283
  399. py3plex-1.1.7/py3plex/selection/evaluate.py +0 -278
  400. py3plex-1.1.7/py3plex/selection/result.py +0 -332
  401. py3plex-1.1.7/py3plex/semiring/core.py +0 -383
  402. py3plex-1.1.7/py3plex/semiring/pareto.py +0 -139
  403. py3plex-1.1.7/py3plex/semiring/types.py +0 -47
  404. py3plex-1.1.7/py3plex/sensitivity/executor.py +0 -352
  405. py3plex-1.1.7/py3plex/sensitivity/metrics.py +0 -287
  406. py3plex-1.1.7/py3plex/sensitivity/perturbations.py +0 -264
  407. py3plex-1.1.7/py3plex/sensitivity/types.py +0 -205
  408. py3plex-1.1.7/py3plex/stats/provenance.py +0 -80
  409. py3plex-1.1.7/py3plex/stats/registry.py +0 -236
  410. py3plex-1.1.7/py3plex/stats/uncertainty.py +0 -521
  411. py3plex-1.1.7/py3plex/temporal_view.py +0 -277
  412. py3plex-1.1.7/py3plex/uncertainty/bootstrap.py +0 -433
  413. py3plex-1.1.7/py3plex/uncertainty/community_ensemble.py +0 -606
  414. py3plex-1.1.7/py3plex/uncertainty/community_result.py +0 -680
  415. py3plex-1.1.7/py3plex/uncertainty/estimation.py +0 -510
  416. py3plex-1.1.7/py3plex/uncertainty/noise_models.py +0 -513
  417. py3plex-1.1.7/py3plex/uncertainty/null_models.py +0 -497
  418. py3plex-1.1.7/py3plex/uncertainty/partition_metrics.py +0 -335
  419. py3plex-1.1.7/py3plex/uncertainty/partition_reducers.py +0 -853
  420. py3plex-1.1.7/py3plex/uncertainty/partition_uq.py +0 -571
  421. py3plex-1.1.7/py3plex/uncertainty/resampling_graph.py +0 -287
  422. py3plex-1.1.7/py3plex/uncertainty/runner.py +0 -180
  423. py3plex-1.1.7/py3plex/uncertainty/selection_execution.py +0 -281
  424. py3plex-1.1.7/py3plex/uncertainty/selection_reducers.py +0 -507
  425. py3plex-1.1.7/py3plex/uncertainty/stratification.py +0 -365
  426. py3plex-1.1.7/py3plex/utils.py +0 -487
  427. py3plex-1.1.7/py3plex/visualization/benchmark_visualizations.py +0 -301
  428. py3plex-1.1.7/py3plex/visualization/bezier.py +0 -157
  429. py3plex-1.1.7/py3plex/visualization/multilayer.py +0 -2549
  430. py3plex-1.1.7/py3plex/visualization/pymnet_style.py +0 -688
  431. py3plex-1.1.7/py3plex/visualization/sankey.py +0 -254
  432. py3plex-1.1.7/py3plex.egg-info/PKG-INFO +0 -363
  433. py3plex-1.1.7/py3plex.egg-info/SOURCES.txt +0 -915
  434. py3plex-1.1.7/py3plex.egg-info/requires.txt +0 -88
  435. py3plex-1.1.7/py3plex_mcp/__init__.py +0 -24
  436. py3plex-1.1.7/pyproject.toml +0 -311
  437. py3plex-1.1.7/tests/test_book_conf.py +0 -78
  438. py3plex-1.1.7/tests/test_book_manuscript_integrity.py +0 -53
  439. py3plex-1.1.7/tests/test_data_files_presence.py +0 -28
  440. py3plex-1.1.7/tests/test_dsl_patterns.py +0 -589
  441. py3plex-1.1.7/tests/test_example_CBSSD.py +0 -205
  442. py3plex-1.1.7/tests/test_multilayer_statistics.py +0 -825
  443. py3plex-1.1.7/tests/test_node_ranking_comprehensive.py +0 -246
  444. py3plex-1.1.7/tests/test_program.py +0 -518
  445. py3plex-1.1.7/tests/test_utils_search_paths.py +0 -71
  446. py3plex-1.1.7/tests/test_version_consistency.py +0 -66
  447. py3plex-1.1.7/tests/test_wrappers_benchmark_nodes.py +0 -297
  448. {py3plex-1.1.7 → py3plex-2.0.1}/LICENSE +0 -0
  449. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/__main__.py +0 -0
  450. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/agent.py +0 -0
  451. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algebra/__init__.py +0 -0
  452. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algebra/backend.py +0 -0
  453. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algebra/closure.py +0 -0
  454. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algebra/lift.py +0 -0
  455. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algebra/registry.py +0 -0
  456. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/__init__.py +0 -0
  457. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/centrality/__init__.py +0 -0
  458. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/centrality/approx_betweenness.py +0 -0
  459. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/centrality/approx_closeness.py +0 -0
  460. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/centrality/explain.py +0 -0
  461. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/community_comparison.py +0 -0
  462. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/community_detection/NoRC.py +0 -0
  463. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/community_detection/__init__.py +0 -0
  464. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/community_detection/budget.py +0 -0
  465. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/community_detection/community_louvain.py +0 -0
  466. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/community_detection/community_measures.py +0 -0
  467. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/community_detection/community_ranking.py +0 -0
  468. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/community_detection/community_wrapper.py +0 -0
  469. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/__init__.py +0 -0
  470. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/conftest.py +0 -0
  471. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/examples/python/example-bipartite.py +0 -0
  472. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/examples/python/example-file-io.py +0 -0
  473. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/examples/python/example-multiplex.py +0 -0
  474. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/examples/python/example-networkx.py +0 -0
  475. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/examples/python/example-simple.py +0 -0
  476. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/examples/python/example-trigram-expanded.py +0 -0
  477. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/examples/python/example-trigram.py +0 -0
  478. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/infomap.py +0 -0
  479. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/interfaces/python/setup.py +0 -0
  480. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/community_detection/leiden_multilayer.py +0 -0
  481. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/community_detection/multilayer_benchmark.py +0 -0
  482. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/community_detection/multilayer_modularity.py +0 -0
  483. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/community_detection/multilayer_quality_metrics.py +0 -0
  484. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/community_detection/node_ranking.py +0 -0
  485. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/community_detection/sbm_metrics.py +0 -0
  486. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/curvature/__init__.py +0 -0
  487. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/curvature/ollivier_ricci_multilayer.py +0 -0
  488. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/general/__init__.py +0 -0
  489. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/general/benchmark_classification.py +0 -0
  490. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/general/walkers.py +0 -0
  491. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/hedwig/__init__.py +0 -0
  492. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/hedwig/__main__.py +0 -0
  493. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/hedwig/assets/builtin.n3 +0 -0
  494. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/__init__.py +0 -0
  495. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/converters.py +0 -0
  496. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/example.py +0 -0
  497. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/helpers.py +0 -0
  498. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/kb.py +0 -0
  499. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/load.py +0 -0
  500. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/predicate.py +0 -0
  501. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/rule.py +0 -0
  502. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/settings.py +0 -0
  503. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/term_parsers.py +0 -0
  504. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/hedwig/learners/__init__.py +0 -0
  505. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/hedwig/learners/bottomup.py +0 -0
  506. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/hedwig/learners/learner.py +0 -0
  507. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/hedwig/learners/optimal.py +0 -0
  508. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/hedwig/stats/__init__.py +0 -0
  509. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/hedwig/stats/adjustment.py +0 -0
  510. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/hedwig/stats/scorefunctions.py +0 -0
  511. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/hedwig/stats/significance.py +0 -0
  512. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/hedwig/stats/validate.py +0 -0
  513. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/meta_flow_report.py +0 -0
  514. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/multicentrality.py +0 -0
  515. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/multilayer_algorithms/__init__.py +0 -0
  516. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/multilayer_algorithms/entanglement.py +0 -0
  517. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/multilayer_algorithms/multirank.py +0 -0
  518. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/multilayer_algorithms/multixrank.py +0 -0
  519. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/multilayer_algorithms/supra_matrix_function_centrality.py +0 -0
  520. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/multilayer_algorithms/versatility.py +0 -0
  521. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/network_classification/__init__.py +0 -0
  522. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/requirements_registry.py +0 -0
  523. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/routing/__init__.py +0 -0
  524. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/sbm/__init__.py +0 -0
  525. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/sbm/conversions.py +0 -0
  526. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/sbm/diagnostics.py +0 -0
  527. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/sir_multiplex.py +0 -0
  528. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/statistics/__init__.py +0 -0
  529. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/statistics/basic_statistics.py +0 -0
  530. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/statistics/bayesian_distances.py +0 -0
  531. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/statistics/bayesiantests.py +0 -0
  532. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/statistics/critical_distances.py +0 -0
  533. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/statistics/enrichment_modules.py +0 -0
  534. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/statistics/powerlaw.py +0 -0
  535. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/statistics/stats_comparison.py +0 -0
  536. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/statistics/topology.py +0 -0
  537. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/temporal/__init__.py +0 -0
  538. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/temporal_multiplex/__init__.py +0 -0
  539. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/algorithms/term_parsers/__init__.py +0 -0
  540. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/alignment/__init__.py +0 -0
  541. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/alignment/features.py +0 -0
  542. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/alignment/metrics.py +0 -0
  543. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/alignment/solvers.py +0 -0
  544. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/benchmarks/__init__.py +0 -0
  545. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/benchmarks/budget.py +0 -0
  546. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/benchmarks/metrics.py +0 -0
  547. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/benchmarks/runners.py +0 -0
  548. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/centrality/__init__.py +0 -0
  549. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/claims/__init__.py +0 -0
  550. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/claims/scorer.py +0 -0
  551. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/comparison/__init__.py +0 -0
  552. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/compat/__init__.py +0 -0
  553. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/compat/converters/__init__.py +0 -0
  554. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/compat/converters/igraph_converter.py +0 -0
  555. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/compat/exceptions.py +0 -0
  556. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/contracts/__init__.py +0 -0
  557. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/contracts/engine.py +0 -0
  558. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/contracts/failure_modes.py +0 -0
  559. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/contracts/result.py +0 -0
  560. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/core/HINMINE/IO.py +0 -0
  561. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/core/HINMINE/__init__.py +0 -0
  562. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/core/HINMINE/dataStructures.py +0 -0
  563. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/core/HINMINE/decomposition.py +0 -0
  564. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/core/__init__.py +0 -0
  565. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/core/converters.py +0 -0
  566. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/core/nx_compat.py +0 -0
  567. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/core/random_generators.py +0 -0
  568. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/core/schema_validation.py +0 -0
  569. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/core/supporting.py +0 -0
  570. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/core/types.py +0 -0
  571. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/counterexamples/__init__.py +0 -0
  572. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/counterexamples/claim_lang.py +0 -0
  573. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/counterexamples/ddmin.py +0 -0
  574. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/counterexamples/types.py +0 -0
  575. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/counterexamples/witness.py +0 -0
  576. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/counterfactual/__init__.py +0 -0
  577. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/counterfactual/engine.py +0 -0
  578. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/counterfactual/result.py +0 -0
  579. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/datasets/__init__.py +0 -0
  580. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/datasets/_data/aarhus_cs.edges +0 -0
  581. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/datasets/_data/synthetic_multilayer.edges +0 -0
  582. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/datasets/_generators.py +0 -0
  583. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/diagnostics/__init__.py +0 -0
  584. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/diagnostics/codes.py +0 -0
  585. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dsl/attribution.py +0 -0
  586. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dsl/communities.py +0 -0
  587. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dsl/context.py +0 -0
  588. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dsl/executors/__init__.py +0 -0
  589. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dsl/lint/__init__.py +0 -0
  590. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dsl/lint/diagnostic.py +0 -0
  591. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dsl/lint/lint_context.py +0 -0
  592. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dsl/lint/rules/__init__.py +0 -0
  593. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dsl/lint/rules/base.py +0 -0
  594. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dsl/lint/rules/dsl002_unknown_attribute.py +0 -0
  595. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dsl/lint/rules/dsl101_type_mismatch.py +0 -0
  596. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dsl/lint/rules/dsl202_redundant.py +0 -0
  597. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dsl/lint/rules/perf301_full_scan.py +0 -0
  598. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dsl/lint/rules/perf302_cross_layer.py +0 -0
  599. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dsl/lint/schema.py +0 -0
  600. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dsl/lint/type_resolver.py +0 -0
  601. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dsl/operator_registry.py +0 -0
  602. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dsl/patterns/result.py +0 -0
  603. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dsl/predictive.py +0 -0
  604. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dsl/program/__init__.py +0 -0
  605. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dsl/program/distribution.py +0 -0
  606. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dsl/reduction.py +0 -0
  607. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dsl/registry.py +0 -0
  608. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dynamics/__init__.py +0 -0
  609. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dynamics/ast.py +0 -0
  610. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dynamics/builder.py +0 -0
  611. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dynamics/config.py +0 -0
  612. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dynamics/errors.py +0 -0
  613. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dynamics/processes.py +0 -0
  614. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dynamics/registry.py +0 -0
  615. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dynamics/result.py +0 -0
  616. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/dynamics/serializer.py +0 -0
  617. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/embeddings/__init__.py +0 -0
  618. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/embeddings/base.py +0 -0
  619. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/embeddings/netmf.py +0 -0
  620. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/errors.py +0 -0
  621. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/exceptions.py +0 -0
  622. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/experiments/__init__.py +0 -0
  623. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/experiments/cli.py +0 -0
  624. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/experiments/errors.py +0 -0
  625. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/experiments/utils.py +0 -0
  626. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/graph_ops.py +0 -0
  627. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/io/__init__.py +0 -0
  628. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/io/api.py +0 -0
  629. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/io/canonical_format.py +0 -0
  630. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/io/converters.py +0 -0
  631. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/io/formats/__init__.py +0 -0
  632. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/io/formats/csv_format.py +0 -0
  633. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/io/formats/json_format.py +0 -0
  634. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/io/parquet_format.py +0 -0
  635. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/io/schema.py +0 -0
  636. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/lab/__init__.py +0 -0
  637. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/lab/base.py +0 -0
  638. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/linter.py +0 -0
  639. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/logging_config.py +0 -0
  640. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/meta/__init__.py +0 -0
  641. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/ml/__init__.py +0 -0
  642. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/ml/embedding/__init__.py +0 -0
  643. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/ml/embedding/base.py +0 -0
  644. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/ml/embedding/deepwalk.py +0 -0
  645. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/ml/embedding/evaluation.py +0 -0
  646. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/ml/embedding/line.py +0 -0
  647. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/ml/embedding/metapath2vec.py +0 -0
  648. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/ml/embedding/multiplex.py +0 -0
  649. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/ml/embedding/netmf.py +0 -0
  650. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/ml/embedding/node2vec.py +0 -0
  651. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/ml/embedding/similarity.py +0 -0
  652. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/ml/embedding/trainer.py +0 -0
  653. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/multinet/__init__.py +0 -0
  654. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/multinet/aggregation.py +0 -0
  655. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/nullmodels/__init__.py +0 -0
  656. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/nullmodels/result.py +0 -0
  657. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/optimizer/__init__.py +0 -0
  658. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/out_of_core/__init__.py +0 -0
  659. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/out_of_core/cli.py +0 -0
  660. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/out_of_core/errors.py +0 -0
  661. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/out_of_core/operators.py +0 -0
  662. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/out_of_core/schema.py +0 -0
  663. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/out_of_core/utils.py +0 -0
  664. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/paths/__init__.py +0 -0
  665. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/paths/result.py +0 -0
  666. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/plugins/__init__.py +0 -0
  667. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/plugins/examples.py +0 -0
  668. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/plugins/registry.py +0 -0
  669. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/profiling.py +0 -0
  670. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/provenance/__init__.py +0 -0
  671. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/robustness/__init__.py +0 -0
  672. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/robustness/experiments.py +0 -0
  673. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/robustness/perturbations.py +0 -0
  674. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/runtime/__init__.py +0 -0
  675. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/runtime/capabilities.py +0 -0
  676. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/selection/__init__.py +0 -0
  677. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/selection/metric_registry.py +0 -0
  678. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/selection/wins.py +0 -0
  679. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/semiring/__init__.py +0 -0
  680. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/semiring/engine.py +0 -0
  681. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/semiring/registry.py +0 -0
  682. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/sensitivity/__init__.py +0 -0
  683. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/stats/__init__.py +0 -0
  684. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/stats/statvalue.py +0 -0
  685. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/temporal_utils.py +0 -0
  686. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/temporal_utils_extended.py +0 -0
  687. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/uncertainty/__init__.py +0 -0
  688. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/uncertainty/ci_utils.py +0 -0
  689. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/uncertainty/context.py +0 -0
  690. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/uncertainty/partition.py +0 -0
  691. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/uncertainty/partition_types.py +0 -0
  692. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/uncertainty/plan.py +0 -0
  693. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/uncertainty/reducers/__init__.py +0 -0
  694. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/uncertainty/reducers/base.py +0 -0
  695. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/uncertainty/selection_types.py +0 -0
  696. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/uncertainty/selection_uq.py +0 -0
  697. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/uncertainty/types.py +0 -0
  698. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/validation.py +0 -0
  699. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/visualization/__init__.py +0 -0
  700. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/visualization/colors.py +0 -0
  701. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/visualization/drawing_machinery.py +0 -0
  702. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/visualization/embedding_visualization/__init__.py +0 -0
  703. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/visualization/embedding_visualization/embedding_tools.py +0 -0
  704. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/visualization/embedding_visualization/embedding_visualization.py +0 -0
  705. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/visualization/fa2/__init__.py +0 -0
  706. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/visualization/fa2/fa2util.py +0 -0
  707. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/visualization/fa2/forceatlas2.py +0 -0
  708. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/visualization/layout_algorithms.py +0 -0
  709. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/visualization/polyfit.py +0 -0
  710. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/visualization/ricci_layout.py +0 -0
  711. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/visualization/ricci_multilayer_vis.py +0 -0
  712. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/workflows.py +0 -0
  713. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/wrappers/__init__.py +0 -0
  714. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/wrappers/benchmark_nodes.py +0 -0
  715. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/wrappers/r_interop.py +0 -0
  716. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex/wrappers/train_node2vec_embedding.py +0 -0
  717. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex.egg-info/dependency_links.txt +0 -0
  718. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex.egg-info/entry_points.txt +0 -0
  719. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex.egg-info/not-zip-safe +0 -0
  720. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex.egg-info/top_level.txt +0 -0
  721. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex_mcp/errors.py +0 -0
  722. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex_mcp/registry.py +0 -0
  723. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex_mcp/safe_paths.py +0 -0
  724. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex_mcp/schemas.py +0 -0
  725. {py3plex-1.1.7 → py3plex-2.0.1}/py3plex_mcp/server.py +0 -0
  726. {py3plex-1.1.7 → py3plex-2.0.1}/setup.cfg +0 -0
  727. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_advanced_metrics_properties.py +0 -0
  728. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_agent_api.py +0 -0
  729. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_agents_documentation_claims.py +0 -0
  730. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_agents_ergonomics_features.py +0 -0
  731. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_agents_golden_paths.py +0 -0
  732. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_aggregation.py +0 -0
  733. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_algebra_backend.py +0 -0
  734. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_algebra_core.py +0 -0
  735. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_algebra_fixed_point.py +0 -0
  736. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_algebra_paths.py +0 -0
  737. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_algebra_registry.py +0 -0
  738. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_algebra_witness.py +0 -0
  739. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_algorithm_properties.py +0 -0
  740. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_algorithms_attribute_correlation.py +0 -0
  741. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_algorithms_correlation_networks.py +0 -0
  742. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_algorithms_init.py +0 -0
  743. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_algorithms_random_generators.py +0 -0
  744. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_algorithms_requirements_registry.py +0 -0
  745. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_algorithms_statistics_bayesian_distances.py +0 -0
  746. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_alignment.py +0 -0
  747. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_alignment_contracts.py +0 -0
  748. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_alignment_correctness_additional.py +0 -0
  749. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_approximate_centrality.py +0 -0
  750. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_ast_roundtrip.py +0 -0
  751. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_ast_roundtrip_integration.py +0 -0
  752. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_attribute_correlation.py +0 -0
  753. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_attribute_correlation_contracts.py +0 -0
  754. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_auto_community.py +0 -0
  755. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_autocommunity_benchmarks.py +0 -0
  756. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_autocommunity_executor.py +0 -0
  757. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_autocommunity_meta.py +0 -0
  758. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_autocommunity_successive_halving.py +0 -0
  759. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_bayesian_distances.py +0 -0
  760. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_bench_aggregation_unit.py +0 -0
  761. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_benchmark_budget_fairness.py +0 -0
  762. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_benchmark_dsl_basic.py +0 -0
  763. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_benchmark_integration.py +0 -0
  764. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_benchmark_multiplex_centrality.py +0 -0
  765. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_benchmark_time.py +0 -0
  766. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_benchmarks_budget.py +0 -0
  767. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_benchmarks_init.py +0 -0
  768. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_book_snippets.py +0 -0
  769. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_builder_dsl_mutate.py +0 -0
  770. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_capabilities_basic.py +0 -0
  771. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_capabilities_optional_missing.py +0 -0
  772. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_centrality_explain.py +0 -0
  773. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_centrality_explain_integration.py +0 -0
  774. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_centrality_robustness.py +0 -0
  775. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_centrality_robustness_oracles.py +0 -0
  776. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_centrality_uncertainty.py +0 -0
  777. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_centrality_weight_handling.py +0 -0
  778. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_check_api_consistency.py +0 -0
  779. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_check_doc_coverage.py +0 -0
  780. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_check_type_coverage.py +0 -0
  781. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_ci_python_versions.py +0 -0
  782. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_claim_learning.py +0 -0
  783. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_claims_types.py +0 -0
  784. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_cli.py +0 -0
  785. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_cli_check.py +0 -0
  786. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_cli_ergonomics.py +0 -0
  787. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_cli_piping.py +0 -0
  788. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_clustering_multilayer.py +0 -0
  789. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_code_improvements.py +0 -0
  790. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_community_detection_modules.py +0 -0
  791. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_community_distribution.py +0 -0
  792. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_community_measures.py +0 -0
  793. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_comparison.py +0 -0
  794. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_comparison_executor.py +0 -0
  795. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_comparison_metrics.py +0 -0
  796. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_comparison_metrics_additional.py +0 -0
  797. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_comparison_result.py +0 -0
  798. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_comparison_uninitialized_and_resistance_oracles.py +0 -0
  799. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_compat_exceptions.py +0 -0
  800. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_compat_roundtrip.py +0 -0
  801. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_config_api.py +0 -0
  802. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_config_benchmark.py +0 -0
  803. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_contracts.py +0 -0
  804. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_contracts_basic.py +0 -0
  805. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_contracts_extended.py +0 -0
  806. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_contracts_failure_modes.py +0 -0
  807. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_contracts_integration.py +0 -0
  808. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_core_functionality.py +0 -0
  809. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_core_immutable.py +0 -0
  810. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_core_lazy_evaluation.py +0 -0
  811. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_core_multinet_and_parsers.py +0 -0
  812. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_core_multinet_correctness.py +0 -0
  813. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_core_multiplex_edges.py +0 -0
  814. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_core_schema_validation.py +0 -0
  815. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_core_supporting.py +0 -0
  816. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_correlation_networks.py +0 -0
  817. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_counterexamples.py +0 -0
  818. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_counterexamples_properties.py +0 -0
  819. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_counterfactual.py +0 -0
  820. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_counterfactual_presets.py +0 -0
  821. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_coverage_grouping.py +0 -0
  822. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_create_mosaic_banner.py +0 -0
  823. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_create_showcase_flow.py +0 -0
  824. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_crosshair_pure_functions.py +0 -0
  825. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_datasets.py +0 -0
  826. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_datasets_contracts.py +0 -0
  827. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_datasets_oracles.py +0 -0
  828. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_degenerate_networks.py +0 -0
  829. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_determinism_randomness.py +0 -0
  830. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_diagnostics.py +0 -0
  831. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_diagnostics_utils.py +0 -0
  832. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_doc_conf.py +0 -0
  833. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_docs_embeddings_section.py +0 -0
  834. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_docs_examples.py +0 -0
  835. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_docs_quality_pass.py +0 -0
  836. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_doctests.py +0 -0
  837. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dplyr_integration.py +0 -0
  838. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl.py +0 -0
  839. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_aggregation_enhancements.py +0 -0
  840. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_ast_equivalence.py +0 -0
  841. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_auto_community.py +0 -0
  842. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_communities.py +0 -0
  843. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_community_filtering.py +0 -0
  844. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_community_uq_integration.py +0 -0
  845. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_compact_compute.py +0 -0
  846. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_compositional_uq.py +0 -0
  847. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_condition_semantics.py +0 -0
  848. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_d_factory.py +0 -0
  849. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_documentation_examples.py +0 -0
  850. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_dplyr_style.py +0 -0
  851. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_dynamics_integration.py +0 -0
  852. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_edge_grouping_coverage.py +0 -0
  853. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_edge_queries.py +0 -0
  854. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_enhancements.py +0 -0
  855. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_ergonomics.py +0 -0
  856. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_errors.py +0 -0
  857. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_errors_extended.py +0 -0
  858. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_executor_additional.py +0 -0
  859. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_explain.py +0 -0
  860. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_export.py +0 -0
  861. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_expressions.py +0 -0
  862. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_extensions.py +0 -0
  863. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_graphops_equivalence.py +0 -0
  864. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_grouping_coverage.py +0 -0
  865. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_interactive.py +0 -0
  866. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_joins.py +0 -0
  867. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_layer_selection.py +0 -0
  868. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_layer_set_algebra.py +0 -0
  869. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_legacy_approximate.py +0 -0
  870. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_legacy_edges.py +0 -0
  871. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_lint.py +0 -0
  872. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_operators.py +0 -0
  873. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_patterns_quick_reference.py +0 -0
  874. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_pipes.py +0 -0
  875. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_planner.py +0 -0
  876. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_predict_reduce.py +0 -0
  877. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_program_rewrite.py +0 -0
  878. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_program_types.py +0 -0
  879. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_progress_logging.py +0 -0
  880. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_properties.py +0 -0
  881. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_provenance.py +0 -0
  882. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_query_optimization.py +0 -0
  883. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_query_zoo.py +0 -0
  884. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_result_algebra_edge_cases.py +0 -0
  885. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_selection_fastpath.py +0 -0
  886. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_semiring_integration.py +0 -0
  887. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_serializer.py +0 -0
  888. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_smart_defaults.py +0 -0
  889. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_temporal_range_execution.py +0 -0
  890. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_uncertainty.py +0 -0
  891. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_uq_ergonomics.py +0 -0
  892. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_uq_propagation.py +0 -0
  893. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_v2.py +0 -0
  894. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dsl_zoo_features.py +0 -0
  895. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dynamics.py +0 -0
  896. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dynamics_algorithm_contracts.py +0 -0
  897. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dynamics_config_and_results_correctness.py +0 -0
  898. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dynamics_conservation.py +0 -0
  899. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dynamics_core.py +0 -0
  900. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dynamics_executor_edge_cases.py +0 -0
  901. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dynamics_parallel_determinism.py +0 -0
  902. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dynamics_reference_runs.py +0 -0
  903. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dynamics_uq_integration.py +0 -0
  904. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_dynamics_utils.py +0 -0
  905. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_edge_cases.py +0 -0
  906. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_edgelist_format.py +0 -0
  907. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_embeddings_direct_units.py +0 -0
  908. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_ergonomic_helpers.py +0 -0
  909. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_ergonomics.py +0 -0
  910. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_ergonomics_helpers.py +0 -0
  911. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_errors.py +0 -0
  912. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_example_community_detection.py +0 -0
  913. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_example_decomposition_and_classification.py +0 -0
  914. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_example_decomposition_ground_truth.py +0 -0
  915. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_example_dsl_builder_api.py +0 -0
  916. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_example_dynamics_core_examples.py +0 -0
  917. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_example_embedding_construction.py +0 -0
  918. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_example_embedding_visualization.py +0 -0
  919. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_example_incidence_gadget_encoding.py +0 -0
  920. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_example_interactive_multilayer.py +0 -0
  921. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_example_inverse_network.py +0 -0
  922. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_example_layer_extraction.py +0 -0
  923. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_example_manipulation.py +0 -0
  924. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_example_multilayer_vectorized_aggregation.py +0 -0
  925. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_example_multiplex_aggregate.py +0 -0
  926. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_example_multiplex_dynamics.py +0 -0
  927. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_example_n2v_embedding.py +0 -0
  928. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_example_network_decomposition.py +0 -0
  929. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_example_network_decomposition_meta_paths.py +0 -0
  930. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_example_numeric_encoding.py +0 -0
  931. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_example_pattern_matching.py +0 -0
  932. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_example_ppr.py +0 -0
  933. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_examples_zoo_consolidation.py +0 -0
  934. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_exception_taxonomy.py +0 -0
  935. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_exceptions.py +0 -0
  936. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_experiments.py +0 -0
  937. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_explain_attribution.py +0 -0
  938. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_fast_examples.py +0 -0
  939. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_flagship_progress_demo.py +0 -0
  940. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_flow_hierarchy.py +0 -0
  941. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_fuzzing_properties.py +0 -0
  942. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_generate_all_outputs.py +0 -0
  943. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_generate_quickstart_outputs.py +0 -0
  944. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_generate_visualization_images.py +0 -0
  945. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_golden_toy_examples.py +0 -0
  946. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_graph_ops.py +0 -0
  947. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_graph_summarization.py +0 -0
  948. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_hedwig_adjustment.py +0 -0
  949. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_hedwig_significance.py +0 -0
  950. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_improved_errors.py +0 -0
  951. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_incidence_gadget_encoding.py +0 -0
  952. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_infomap_fix.py +0 -0
  953. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_interlayer_links_fix.py +0 -0
  954. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_io_api_edge_cases.py +0 -0
  955. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_io_arrow.py +0 -0
  956. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_io_contracts_additional.py +0 -0
  957. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_io_converters.py +0 -0
  958. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_io_exceptions.py +0 -0
  959. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_io_integration.py +0 -0
  960. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_io_roundtrip.py +0 -0
  961. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_io_schema.py +0 -0
  962. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_issue_19_fix.py +0 -0
  963. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_lab.py +0 -0
  964. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_lab_additional.py +0 -0
  965. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_lab_correctness.py +0 -0
  966. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_label_propagation.py +0 -0
  967. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_layer_extraction_fix.py +0 -0
  968. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_layer_similarity.py +0 -0
  969. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_layout_algorithms.py +0 -0
  970. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_lazy_evaluation.py +0 -0
  971. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_leiden_multilayer.py +0 -0
  972. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_link_checker.py +0 -0
  973. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_linter.py +0 -0
  974. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_logging_conversion.py +0 -0
  975. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_main_module.py +0 -0
  976. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_master_regulators_example.py +0 -0
  977. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_math_invariants.py +0 -0
  978. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_mcp_server.py +0 -0
  979. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_meta_analysis.py +0 -0
  980. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_meta_flow_report.py +0 -0
  981. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_metamorphic.py +0 -0
  982. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_metapath2vec.py +0 -0
  983. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_ml_embedding_primitives.py +0 -0
  984. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_monoplex_nx_wrapper.py +0 -0
  985. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_mpc.py +0 -0
  986. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_multilayer_centrality.py +0 -0
  987. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_multilayer_clustering_coefficients.py +0 -0
  988. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_multilayer_cornercases.py +0 -0
  989. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_multilayer_edge_fix.py +0 -0
  990. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_multilayer_embedding_models.py +0 -0
  991. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_multilayer_integration.py +0 -0
  992. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_multilayer_leiden_uq.py +0 -0
  993. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_multilayer_modularity.py +0 -0
  994. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_multilayer_quality_metrics.py +0 -0
  995. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_multilayer_visualizations.py +0 -0
  996. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_multinet_aggregation.py +0 -0
  997. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_multinet_aggregation_additional.py +0 -0
  998. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_multiplex_layer_interop.py +0 -0
  999. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_multiplex_participation.py +0 -0
  1000. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_multiplex_properties.py +0 -0
  1001. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_multirank.py +0 -0
  1002. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_multixrank.py +0 -0
  1003. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_network_conversion.py +0 -0
  1004. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_network_version.py +0 -0
  1005. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_networkx_compatibility.py +0 -0
  1006. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_new_algorithms.py +0 -0
  1007. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_new_multilayer_metrics.py +0 -0
  1008. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_node_edge_parity.py +0 -0
  1009. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_norc.py +0 -0
  1010. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_nullmodel_sanity.py +0 -0
  1011. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_nullmodels.py +0 -0
  1012. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_nullmodels_contracts.py +0 -0
  1013. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_nx_compat_extended.py +0 -0
  1014. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_ollivier_ricci_multilayer.py +0 -0
  1015. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_optimizer_submodules.py +0 -0
  1016. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_out_of_core.py +0 -0
  1017. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_parallel.py +0 -0
  1018. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_parallel_execution.py +0 -0
  1019. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_parsers_comprehensive.py +0 -0
  1020. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_parsers_coverage.py +0 -0
  1021. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_partition_uq.py +0 -0
  1022. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_partition_uq_integration.py +0 -0
  1023. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_paths.py +0 -0
  1024. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_paths_additional.py +0 -0
  1025. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_paths_contracts.py +0 -0
  1026. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_paths_executor.py +0 -0
  1027. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_paths_result.py +0 -0
  1028. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_performance_core.py +0 -0
  1029. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_pipeline.py +0 -0
  1030. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_plugin_examples.py +0 -0
  1031. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_plugin_system.py +0 -0
  1032. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_plugins.py +0 -0
  1033. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_plugins_contracts.py +0 -0
  1034. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_profiling.py +0 -0
  1035. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_profiling_additional.py +0 -0
  1036. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_program_cost_executor.py +0 -0
  1037. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_properties.py +0 -0
  1038. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_provenance_canonical.py +0 -0
  1039. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_provenance_replay.py +0 -0
  1040. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_provenance_schema.py +0 -0
  1041. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_public_api_exports.py +0 -0
  1042. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_pymnet_style.py +0 -0
  1043. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_pypi_publish_workflow.py +0 -0
  1044. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_query_algebra.py +0 -0
  1045. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_query_equivalence.py +0 -0
  1046. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_r_interop.py +0 -0
  1047. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_random_generators_additional.py +0 -0
  1048. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_random_generators_extended.py +0 -0
  1049. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_random_walkers.py +0 -0
  1050. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_random_walks.py +0 -0
  1051. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_readme_contributor_onboarding.py +0 -0
  1052. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_readme_flagship_example.py +0 -0
  1053. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_requirements.py +0 -0
  1054. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_result_explain_debug.py +0 -0
  1055. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_ricci_visualization.py +0 -0
  1056. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_robustness.py +0 -0
  1057. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_robustness_additional.py +0 -0
  1058. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_robustness_testing.py +0 -0
  1059. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_root_conftest.py +0 -0
  1060. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_roundtrip_invariants.py +0 -0
  1061. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_run_quickstart_snippets.py +0 -0
  1062. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_sankey_visualization.py +0 -0
  1063. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_sbm_autocommunity.py +0 -0
  1064. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_sbm_generator.py +0 -0
  1065. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_sbm_metrics.py +0 -0
  1066. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_sbm_runner_integration.py +0 -0
  1067. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_schema_and_immutable.py +0 -0
  1068. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_seeding.py +0 -0
  1069. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_selection_uq.py +0 -0
  1070. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_selection_uq_empty_groups.py +0 -0
  1071. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_selection_uq_integration.py +0 -0
  1072. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_semiring_negative_cases.py +0 -0
  1073. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_semiring_pareto.py +0 -0
  1074. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_semiring_registry.py +0 -0
  1075. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_semiring_types.py +0 -0
  1076. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_semiring_verification.py +0 -0
  1077. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_sensitivity_executor.py +0 -0
  1078. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_sidecar.py +0 -0
  1079. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_sir_epidemic.py +0 -0
  1080. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_sir_multiplex.py +0 -0
  1081. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_spectral_multilayer.py +0 -0
  1082. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_statistical_report.py +0 -0
  1083. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_stats_comparison.py +0 -0
  1084. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_stats_core.py +0 -0
  1085. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_stats_edge_cases.py +0 -0
  1086. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_stats_provenance.py +0 -0
  1087. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_stats_provenance_dataclass.py +0 -0
  1088. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_stats_registry.py +0 -0
  1089. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_stats_scalar_uncertainty.py +0 -0
  1090. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_stats_verify.py +0 -0
  1091. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_stratified_uq.py +0 -0
  1092. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_streaming_topk.py +0 -0
  1093. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_successive_halving.py +0 -0
  1094. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_supporting_extended.py +0 -0
  1095. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_supra_matrix_function_centrality.py +0 -0
  1096. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_temporal.py +0 -0
  1097. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_temporal_algorithms.py +0 -0
  1098. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_temporal_builder.py +0 -0
  1099. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_temporal_dsl.py +0 -0
  1100. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_temporal_duration_parsing.py +0 -0
  1101. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_temporal_multinet.py +0 -0
  1102. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_temporal_utils.py +0 -0
  1103. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_temporal_utils_extended.py +0 -0
  1104. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_temporal_view.py +0 -0
  1105. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_temporal_windowed_queries.py +0 -0
  1106. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_tensor_representation.py +0 -0
  1107. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_tutorial_10min.py +0 -0
  1108. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_uncertainty.py +0 -0
  1109. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_uncertainty_additional.py +0 -0
  1110. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_uncertainty_builder_integration.py +0 -0
  1111. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_uncertainty_defaults.py +0 -0
  1112. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_uncertainty_dsl_integration.py +0 -0
  1113. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_uncertainty_engines.py +0 -0
  1114. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_uncertainty_oracles.py +0 -0
  1115. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_uncertainty_runner.py +0 -0
  1116. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_uq_algebra.py +0 -0
  1117. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_uq_integration.py +0 -0
  1118. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_uq_resolution.py +0 -0
  1119. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_uq_spine.py +0 -0
  1120. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_user_journey_simulation.py +0 -0
  1121. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_utils.py +0 -0
  1122. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_utils_coverage.py +0 -0
  1123. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_utils_extended.py +0 -0
  1124. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_validation.py +0 -0
  1125. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_validation_module.py +0 -0
  1126. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_verification_api_differential.py +0 -0
  1127. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_verification_centrality.py +0 -0
  1128. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_verification_communities.py +0 -0
  1129. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_verification_determinism_parallelism.py +0 -0
  1130. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_verification_dsl_equivalence.py +0 -0
  1131. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_verification_metamorphic_harness.py +0 -0
  1132. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_verification_provenance_oracles.py +0 -0
  1133. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_versatility.py +0 -0
  1134. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_visualization_benchmark.py +0 -0
  1135. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_visualization_bezier.py +0 -0
  1136. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_visualization_colors.py +0 -0
  1137. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_visualization_imports.py +0 -0
  1138. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_visualization_layouts.py +0 -0
  1139. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_visualization_multilayer_additional.py +0 -0
  1140. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_visualization_polyfit.py +0 -0
  1141. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_visualization_ricci_layout_helpers.py +0 -0
  1142. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_visualization_supra_heatmap.py +0 -0
  1143. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_visualize_matrix_fix.py +0 -0
  1144. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_workflows.py +0 -0
  1145. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_wrappers_additional.py +0 -0
  1146. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_wrappers_node2vec.py +0 -0
  1147. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_wrappers_r_interop.py +0 -0
  1148. {py3plex-1.1.7 → py3plex-2.0.1}/tests/test_wrappers_train_node2vec.py +0 -0
@@ -0,0 +1,5 @@
1
+ include py3plex/algorithms/hedwig/assets/*
2
+ include py3plex/datasets/_data/*
3
+ global-exclude *.py[cod]
4
+ global-exclude __pycache__/*
5
+ prune **/__pycache__
py3plex-2.0.1/PKG-INFO ADDED
@@ -0,0 +1,385 @@
1
+ Metadata-Version: 2.4
2
+ Name: py3plex
3
+ Version: 2.0.1
4
+ Summary: A Multilayer network analysis python3 library
5
+ Author-email: Blaž Škrlj <blaz.skrlj@ijs.si>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/SkBlaz/py3plex
8
+ Project-URL: Documentation, https://skblaz.github.io/py3plex/
9
+ Project-URL: Repository, https://github.com/SkBlaz/py3plex
10
+ Project-URL: Bug Tracker, https://github.com/SkBlaz/py3plex/issues
11
+ Keywords: network analysis,multilayer networks,heterogeneous networks,graph visualization,network science
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Intended Audience :: Science/Research
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.8
17
+ Classifier: Programming Language :: Python :: 3.9
18
+ Classifier: Programming Language :: Python :: 3.10
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
22
+ Classifier: Topic :: Scientific/Engineering :: Information Analysis
23
+ Classifier: Topic :: Scientific/Engineering :: Visualization
24
+ Requires-Python: >=3.8
25
+ Description-Content-Type: text/markdown
26
+ License-File: LICENSE
27
+ Requires-Dist: numpy>=1.19.0
28
+ Requires-Dist: scipy>=1.5.0
29
+ Requires-Dist: networkx>=2.5
30
+ Requires-Dist: tqdm>=4.40.0
31
+ Requires-Dist: matplotlib>=3.3.0
32
+ Requires-Dist: scikit-learn>=0.24.0
33
+ Requires-Dist: bitarray>=2.0.0
34
+ Requires-Dist: seaborn>=0.11.0
35
+ Provides-Extra: dev
36
+ Requires-Dist: pytest>=7.0; extra == "dev"
37
+ Requires-Dist: pytest-timeout>=2.1; extra == "dev"
38
+ Requires-Dist: pytest-cov>=4.0; extra == "dev"
39
+ Requires-Dist: pytest-benchmark<5.0,>=4.0; extra == "dev"
40
+ Requires-Dist: pytest-rerunfailures>=12.0; extra == "dev"
41
+ Requires-Dist: black>=23.0; extra == "dev"
42
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
43
+ Requires-Dist: mypy>=1.0; extra == "dev"
44
+ Requires-Dist: types-six>=1.16.0; extra == "dev"
45
+ Requires-Dist: pre-commit>=3.0; extra == "dev"
46
+ Requires-Dist: crosshair-tool>=0.0.60; extra == "dev"
47
+ Requires-Dist: icontract>=2.6.0; extra == "dev"
48
+ Requires-Dist: z3-solver>=4.12.0; extra == "dev"
49
+ Requires-Dist: hypothesis>=6.0; extra == "dev"
50
+ Provides-Extra: tests
51
+ Requires-Dist: pytest>=7.0; extra == "tests"
52
+ Requires-Dist: pytest-timeout>=2.1; extra == "tests"
53
+ Requires-Dist: pytest-cov>=4.0; extra == "tests"
54
+ Requires-Dist: pytest-rerunfailures>=12.0; extra == "tests"
55
+ Requires-Dist: hypothesis>=6.0; extra == "tests"
56
+ Requires-Dist: hypothesis-networkx>=0.2.0; extra == "tests"
57
+ Requires-Dist: networkx>=2.5; extra == "tests"
58
+ Requires-Dist: numpy>=1.19.0; extra == "tests"
59
+ Requires-Dist: scipy>=1.5.0; extra == "tests"
60
+ Requires-Dist: python-louvain>=0.16; extra == "tests"
61
+ Provides-Extra: infomap
62
+ Requires-Dist: infomap>=2.0.0; extra == "infomap"
63
+ Provides-Extra: algos
64
+ Requires-Dist: python-louvain>=0.16; extra == "algos"
65
+ Requires-Dist: cdlib>=0.3.0; extra == "algos"
66
+ Requires-Dist: gensim>=4.0.0; extra == "algos"
67
+ Requires-Dist: rdflib>=6.0.0; extra == "algos"
68
+ Provides-Extra: viz
69
+ Requires-Dist: plotly>=5.0.0; extra == "viz"
70
+ Requires-Dist: python-igraph>=0.10.0; extra == "viz"
71
+ Provides-Extra: workflows
72
+ Requires-Dist: pyyaml>=5.1; extra == "workflows"
73
+ Provides-Extra: arrow
74
+ Requires-Dist: pyarrow>=10.0.0; extra == "arrow"
75
+ Provides-Extra: compat
76
+ Requires-Dist: networkx>=2.5; extra == "compat"
77
+ Requires-Dist: scipy>=1.5.0; extra == "compat"
78
+ Requires-Dist: pandas>=1.2.0; extra == "compat"
79
+ Requires-Dist: pyarrow>=10.0.0; extra == "compat"
80
+ Provides-Extra: igraph
81
+ Requires-Dist: python-igraph>=0.10.0; extra == "igraph"
82
+ Provides-Extra: pyg
83
+ Requires-Dist: torch>=1.10.0; extra == "pyg"
84
+ Requires-Dist: torch-geometric>=2.0.0; extra == "pyg"
85
+ Provides-Extra: dgl-compat
86
+ Requires-Dist: dgl>=0.9.0; extra == "dgl-compat"
87
+ Provides-Extra: mcp
88
+ Requires-Dist: mcp>=0.9.0; python_version >= "3.10" and extra == "mcp"
89
+ Provides-Extra: examples
90
+ Requires-Dist: sympy>=1.9; extra == "examples"
91
+ Provides-Extra: optional
92
+ Requires-Dist: infomap>=2.0.0; extra == "optional"
93
+ Requires-Dist: python-louvain>=0.16; extra == "optional"
94
+ Requires-Dist: cdlib>=0.3.0; extra == "optional"
95
+ Requires-Dist: gensim>=4.0.0; extra == "optional"
96
+ Requires-Dist: rdflib>=6.0.0; extra == "optional"
97
+ Requires-Dist: plotly>=5.0.0; extra == "optional"
98
+ Requires-Dist: python-igraph>=0.10.0; extra == "optional"
99
+ Requires-Dist: pyyaml>=5.1; extra == "optional"
100
+ Requires-Dist: pyarrow>=10.0.0; extra == "optional"
101
+ Requires-Dist: mcp>=0.9.0; python_version >= "3.10" and extra == "optional"
102
+ Requires-Dist: sympy>=1.9; extra == "optional"
103
+ Dynamic: license-file
104
+
105
+
106
+ <img src="https://github.com/user-attachments/assets/47e16a25-cd58-41eb-9ccd-b40191758d91" alt="py3plex logo" width="400">
107
+
108
+ [![Tests](https://github.com/SkBlaz/py3plex/actions/workflows/tests.yml/badge.svg)](https://github.com/SkBlaz/py3plex/actions/workflows/tests.yml)
109
+ [![Examples](https://github.com/SkBlaz/py3plex/actions/workflows/examples.yml/badge.svg)](https://github.com/SkBlaz/py3plex/actions/workflows/examples.yml)
110
+ [![Tutorial](https://github.com/SkBlaz/py3plex/actions/workflows/tutorial-validation.yml/badge.svg)](https://github.com/SkBlaz/py3plex/actions/workflows/tutorial-validation.yml)
111
+ [![Code Quality](https://github.com/SkBlaz/py3plex/actions/workflows/code-quality.yml/badge.svg)](https://github.com/SkBlaz/py3plex/actions/workflows/code-quality.yml)
112
+ [![Benchmarks](https://github.com/SkBlaz/py3plex/actions/workflows/benchmarks.yml/badge.svg)](https://github.com/SkBlaz/py3plex/actions/workflows/benchmarks.yml)
113
+ [![Documentation](https://github.com/SkBlaz/py3plex/actions/workflows/doc-coverage.yml/badge.svg)](https://github.com/SkBlaz/py3plex/actions/workflows/doc-coverage.yml)
114
+ [![Formal Verification](https://github.com/SkBlaz/py3plex/actions/workflows/verify.yml/badge.svg)](https://github.com/SkBlaz/py3plex/actions/workflows/verify.yml)
115
+ [![Fuzzing](https://github.com/SkBlaz/py3plex/actions/workflows/fuzzing.yml/badge.svg)](https://github.com/SkBlaz/py3plex/actions/workflows/fuzzing.yml)
116
+ [![PyPI version](https://img.shields.io/pypi/v/py3plex.svg)](https://pypi.org/project/py3plex/)
117
+ [![PyPI - Downloads](https://img.shields.io/pypi/dm/py3plex)](https://pypistats.org/packages/py3plex)
118
+ ![CLI Tool](https://img.shields.io/badge/CLI%20Tool-Available-brightgreen)
119
+ ![Docker](https://img.shields.io/badge/Docker-Available-blue)
120
+ ![Lines of Code](https://img.shields.io/badge/lines-211.9K-blue)
121
+ ![Test Count](https://img.shields.io/badge/tests-9.3K-blue)
122
+
123
+ *Multilayer networks* are complex networks with additional information assigned to nodes or edges (or both). This library includes
124
+ some of the state-of-the-art algorithms for decomposition, visualization and analysis of such networks.
125
+
126
+ **Key Features:**
127
+ * SQL-like DSL for intuitive network queries with smart defaults
128
+ * Multilayer network visualization and analysis
129
+ * Community detection and centrality measures
130
+ * Network decomposition and embeddings
131
+
132
+
133
+ ```python
134
+ from py3plex.core import datasets
135
+ from py3plex.dsl import Q
136
+
137
+ # Load a built-in multilayer biological network (~500 nodes, 4 layers)
138
+ network = datasets.fetch_multilayer("human_ppi_gene_disease_drug")
139
+
140
+ # Find key regulator candidates with integrated community detection and uncertainty quantification
141
+ master_regulators = (
142
+ Q.communities( # Automated community detection
143
+ mode="pareto", # Multi-objective Pareto selection
144
+ uq=True, # Uncertainty quantification enabled
145
+ uq_n_samples=30, # Robustness via 30 perturbed runs
146
+ uq_method="seed", # Vary random seeds for stability
147
+ seed=42, # Reproducibility
148
+ write_attrs={ # Attribute names for community info
149
+ "community_id": "community_id",
150
+ "community_stability": "community_stability",
151
+ },
152
+ )
153
+ .nodes() # Switch to node-level analysis
154
+ .node_type("gene") # Filter by node type
155
+ .where(degree__gt=3) # Remove peripheral nodes
156
+ .uq(method="perturbation", n_samples=100, ci=0.95, seed=42) # Quantify confidence
157
+ .compute("betweenness_centrality", "pagerank", "degree_centrality")
158
+ .per_layer() # Group by layer
159
+ .top_k(30, "betweenness_centrality__mean") # Top 30 per layer by mean
160
+ .end_grouping()
161
+ .coverage(mode="at_least", k=2) # Keep nodes that are hubs in ≥2 layers
162
+ .mutate( # Create derived influence score
163
+ score=lambda row: (
164
+ 0.5 * row.get("betweenness_centrality__mean", 0.0) +
165
+ 0.3 * row.get("pagerank__mean", 0.0) +
166
+ 0.2 * row.get("degree_centrality__mean", 0.0)
167
+ )
168
+ )
169
+ .order_by("score", desc=True)
170
+ .limit(20) # Final top 20 candidates
171
+ .explain(neighbors_top=5) # Enrich: community ID, top 5 partners, layers
172
+ .execute(network)
173
+ )
174
+
175
+ df = master_regulators.to_pandas(expand_uncertainty=True, expand_explanations=True)
176
+ print(df[["id", "layer", "community_id",
177
+ "betweenness_centrality__mean", "betweenness_centrality_ci95_low",
178
+ "betweenness_centrality_ci95_high", "score", "top_neighbors"]].head(10))
179
+ ```
180
+
181
+ Uses a strict two-phase flow:
182
+
183
+ 1. **Build query** on `Q...` (`.where()`, `.compute()`, `.order_by()`, `.per_layer()`, `.coverage()`, ...)
184
+ 2. **Execute once** with `.execute(network)`
185
+ 3. **Handle results** on `QueryResult` (`.to_pandas()`, `.group_summary()`, `.to_json()`, ...)
186
+
187
+ **Example output:**
188
+ ```
189
+ id layer community_id betweenness_centrality__mean betweenness_centrality_ci95_low betweenness_centrality_ci95_high score top_neighbors
190
+ 0 252 0 42 0.025961 0.021820 0.030102 0.015577 [{'id': '91', 'weight': 2.3}, {'id': '419', 'weight': 1.9}]
191
+ 1 91 0 42 0.024918 0.020902 0.028934 0.014951 [{'id': '252', 'weight': 2.3}, {'id': '103', 'weight': 2.1}]
192
+ 2 419 0 42 0.024184 0.020298 0.028070 0.014510 [{'id': '252', 'weight': 1.9}, {'id': '91', 'weight': 1.7}]
193
+ 3 103 0 42 0.023450 0.019596 0.027304 0.014069 [{'id': '91', 'weight': 2.1}, {'id': '252', 'weight': 1.8}]
194
+ 4 375 0 42 0.022716 0.018894 0.026538 0.013628 [{'id': '91', 'weight': 1.8}, {'id': '252', 'weight': 1.6}]
195
+ ```
196
+
197
+
198
+ **Key features demonstrated:**
199
+ - **Streamlined API**: Community detection integrated directly into the DSL query chain
200
+ - **AutoCommunity**: Multi-objective Pareto-optimal selection across algorithms (Louvain, Leiden, etc.)
201
+ - **Uncertainty Quantification**: Confidence intervals for both community detection and centrality measures
202
+ - **Cross-layer analysis**: `.coverage(mode="at_least", k=2)` keeps only nodes that are hubs in ≥2 layers
203
+ - **Interpretability**: `.explain()` enriches results with community IDs, top interaction partners, and layer presence
204
+ - **Composite scoring**: Weighted combination of multiple centrality measures for robust ranking
205
+
206
+ ### Ecosystem positioning
207
+
208
+ | Comparator | Focus | py3plex 2.0 relation |
209
+ |---|---|---|
210
+ | **py3plex 2019** | Early py3plex multilayer analysis + visualization | Historical base; 2.0 expands into reproducible DSL/workflow-first analysis. |
211
+ | **pymnet** | Formal multilayer modeling and metrics | Strongest Python formal multilayer peer; py3plex emphasizes workflows, UQ, and reproducibility. |
212
+ | **MultiNetX** | Lightweight NetworkX-style multilayer utilities | Similar graph object tooling; py3plex offers broader end-to-end analysis workflows. |
213
+ | **muxViz** | Visual multilayer analytics (R ecosystem) | Strong visual analytics peer; py3plex emphasizes scriptable Python workflows. |
214
+ | **R `multinet`** | Multiplex social-network mining | Social-network-focused peer; py3plex targets broader heterogeneous multilayer science use cases. |
215
+ | **tnetwork / DyNetx** | Temporal and dynamic graph workflows | Temporal overlap; py3plex adds multilayer semantics, DSL querying, and integrated dynamics. |
216
+ | **Reticula / Raphtory / pathpy** | Temporal-engine and path-centric ecosystems | Strong temporal/path engines; py3plex focuses on multilayer workflow integration and analyst ergonomics. |
217
+ | **NetworkX / igraph / graph-tool** | General-purpose graph analysis stacks | Core graph ecosystem overlap; py3plex adds layer-aware abstractions and reproducible multilayer workflows. |
218
+ | **tidygraph** | Fluent graph-as-table manipulation | Similar analyst grammar style; py3plex adapts it to Python multilayer semantics. |
219
+ | **NDlib** | Diffusion and epidemic simulation | Dynamics overlap; py3plex embeds dynamics inside multilayer, queryable, uncertainty-aware pipelines. |
220
+ | **PyTorch Geometric / DGL** | Graph deep learning frameworks | Adjacent graph-ML layer; py3plex focuses on preparation, querying, and scientific analysis workflows. |
221
+ | **Neo4j / Cypher** | Persistent property-graph querying | Query overlap; py3plex provides in-memory scientific multilayer DSL + metrics + exports. |
222
+ | **py3plex 2.0** | Query-driven reproducible multilayer analysis | Python-native workflow layer: DSL/builder API, layer algebra, UQ, temporal/dynamics, null models, and CLI. |
223
+
224
+ ![Py3plex Visualization Showcase](example_images/py3plex_showcase.png)
225
+
226
+ ## Getting Started
227
+
228
+ ### Installation
229
+
230
+ We recommend using [uv](https://docs.astral.sh/uv/) for fast, reliable Python environment management:
231
+
232
+ ```bash
233
+ # Install uv (if not already installed)
234
+ curl -LsSf https://astral.sh/uv/install.sh | sh
235
+
236
+ # Create and activate virtual environment
237
+ uv venv .venv
238
+ source .venv/bin/activate # On Windows: .venv\Scripts\activate
239
+
240
+ # Install py3plex
241
+ uv pip install py3plex
242
+
243
+ # Or install from source with development dependencies
244
+ uv pip install -e ".[dev]"
245
+ ```
246
+
247
+ Alternatively, use pip:
248
+ ```bash
249
+ pip install py3plex
250
+ ```
251
+
252
+ ### Optional Features
253
+
254
+ Install additional features as needed:
255
+
256
+ ```bash
257
+ # MCP server for AI agent integration (requires Python 3.10+)
258
+ pip install py3plex[mcp]
259
+
260
+ # Community detection algorithms
261
+ pip install py3plex[algos]
262
+
263
+ # Advanced visualization
264
+ pip install py3plex[viz]
265
+
266
+ # All optional features
267
+ pip install py3plex[mcp,algos,viz]
268
+
269
+ # Common optional feature bundle (algorithms + visualization + workflows + arrow + mcp)
270
+ pip install py3plex[optional]
271
+ ```
272
+
273
+ ### Contributing (First PR Quick Path)
274
+
275
+ If this is your first contribution, use this sequence:
276
+
277
+ ```bash
278
+ # 1) Create local dev environment and install package
279
+ make setup
280
+ make dev-install
281
+
282
+ # 2) Run formatting and checks before opening a PR
283
+ make format
284
+ make lint
285
+ make test
286
+ ```
287
+
288
+ Helpful commands:
289
+
290
+ ```bash
291
+ make help # List all project commands
292
+ make ci # Run lint + tests in CI-style order
293
+ ```
294
+
295
+ Safety notes for contributors:
296
+ - Keep changes focused and add tests next to the feature you modify.
297
+ - Do not add new markdown files unless explicitly requested (enforced by `tests/test_link_checker.py` to prevent documentation drift).
298
+ - Prefer running targeted tests first, then broader checks before opening a PR.
299
+ - For docs-only updates, run `make docs-check` before opening a PR.
300
+
301
+ ### MCP Integration (AI Agents)
302
+
303
+ py3plex provides a Model Context Protocol (MCP) server for integration with AI coding assistants:
304
+
305
+ **Requirements**: Python 3.10 or higher (due to MCP SDK dependency)
306
+
307
+ ```bash
308
+ # Install with MCP support (Python 3.10+ required)
309
+ pip install py3plex[mcp]
310
+
311
+ # Start MCP server
312
+ py3plex-mcp
313
+ ```
314
+
315
+ **Configure Claude Desktop** (`claude_desktop_config.json`):
316
+ ```json
317
+ {
318
+ "mcpServers": {
319
+ "py3plex": {
320
+ "command": "py3plex-mcp"
321
+ }
322
+ }
323
+ }
324
+ ```
325
+
326
+ The MCP server exposes:
327
+ - **7 tools**: Load networks, run queries (with DSL v2 support), detect communities, export results, and more
328
+ - **3 resources**: Complete documentation, DSL v2 reference, and tool schemas
329
+ - **DSL v2 support**: Modern builder API with type hints (`Q.nodes().where(degree__gt=5).compute('pagerank')`)
330
+ - **Security-first**: Safe file access, automatic output directory, structured errors
331
+
332
+ See [AGENTS.md](AGENTS.md#mcp-integration-model-context-protocol) for complete MCP documentation including DSL v2 examples.
333
+
334
+ ### Resources
335
+
336
+ * **Documentation:** [https://skblaz.github.io/py3plex/](https://skblaz.github.io/py3plex/)
337
+ * **Technical Book (PDF):** [Practical Multilayer Network Analysis with Py3plex](docs/py3plex_book.pdf) - Complete handbook (106 pages)
338
+ * **Examples:** [examples/](examples/) - 170+ example scripts demonstrating usage
339
+
340
+ ## License
341
+
342
+ Py3plex is released under the [MIT License](LICENSE).
343
+
344
+ **Note on licensing:** Prior to version 1.0, the project was distributed under the BSD-3-Clause license. Starting with version 1.0, the license was changed to MIT to better align with the broader Python scientific ecosystem and simplify contribution and reuse. Both licenses are permissive and OSI-approved.
345
+
346
+ # Citations
347
+ ```
348
+ @Article{Skrlj2019,
349
+ author={Skrlj, Blaz
350
+ and Kralj, Jan
351
+ and Lavrac, Nada},
352
+ title={Py3plex toolkit for visualization and analysis of multilayer networks},
353
+ journal={Applied Network Science},
354
+ year={2019},
355
+ volume={4},
356
+ number={1},
357
+ pages={94},
358
+ abstract={Complex networks are used as means for representing multimodal, real-life systems. With increasing amounts of data that lead to large multilayer networks consisting of different node and edge types, that can also be subject to temporal change, there is an increasing need for versatile visualization and analysis software. This work presents a lightweight Python library, Py3plex, which focuses on the visualization and analysis of multilayer networks. The library implements a set of simple graphical primitives supporting intra- as well as inter-layer visualization. It also supports many common operations on multilayer networks, such as aggregation, slicing, indexing, traversal, and more. The paper also focuses on how node embeddings can be used to speed up contemporary (multilayer) layout computation. The library's functionality is showcased on both real and synthetic networks.},
359
+ issn={2364-8228},
360
+ doi={10.1007/s41109-019-0203-7},
361
+ url={https://doi.org/10.1007/s41109-019-0203-7}
362
+ }
363
+ ```
364
+ and
365
+ ```
366
+ @InProceedings{10.1007/978-3-030-05411-3_60,
367
+ author="{\v{S}}krlj, Bla{\v{z}}
368
+ and Kralj, Jan
369
+ and Lavra{\v{c}}, Nada",
370
+ editor="Aiello, Luca Maria
371
+ and Cherifi, Chantal
372
+ and Cherifi, Hocine
373
+ and Lambiotte, Renaud
374
+ and Li{\'o}, Pietro
375
+ and Rocha, Luis M.",
376
+ title="Py3plex: A Library for Scalable Multilayer Network Analysis and Visualization",
377
+ booktitle="Complex Networks and Their Applications VII",
378
+ year="2019",
379
+ publisher="Springer International Publishing",
380
+ address="Cham",
381
+ pages="757--768",
382
+ abstract="Real-life systems are commonly represented as networks of interacting entities. While homogeneous networks consist of nodes of a single node type, multilayer networks are characterized by multiple types of nodes or edges, all present in the same system. Analysis and visualization of such networks represent a challenge for real-life complex network applications. The presented Py3plex Python-based library facilitates the exploration and visualization of multilayer networks. The library includes a diagonal projection-based network visualization, developed specifically for large networks with multiple node (and edge) types. The library also includes state-of-the-art methods for network decomposition and statistical analysis. The Py3plex functionality is showcased on real-world multilayer networks from the domains of biology and on synthetic networks.",
383
+ isbn="978-3-030-05411-3"
384
+ }
385
+ ```