py3plex 2.0.0__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 (1144) 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_manuscript_integrity.py +189 -0
  210. py3plex-2.0.1/tests/test_dependency_cleanup.py +38 -0
  211. py3plex-2.0.1/tests/test_dsl_ast_immutability.py +154 -0
  212. py3plex-2.0.1/tests/test_dsl_compiler_explain.py +175 -0
  213. py3plex-2.0.1/tests/test_dsl_compiler_pipeline.py +242 -0
  214. py3plex-2.0.1/tests/test_dsl_layer_resolution.py +182 -0
  215. py3plex-2.0.1/tests/test_dsl_metric_registry.py +171 -0
  216. py3plex-2.0.1/tests/test_dsl_patterns.py +589 -0
  217. py3plex-2.0.1/tests/test_dsl_patterns_correctness.py +247 -0
  218. py3plex-2.0.1/tests/test_dsl_planner_config.py +167 -0
  219. py3plex-2.0.1/tests/test_dynamics_metamorphic.py +327 -0
  220. py3plex-2.0.1/tests/test_meta_utils.py +39 -0
  221. py3plex-2.0.1/tests/test_multilayer_statistics.py +849 -0
  222. py3plex-2.0.1/tests/test_node_ranking_comprehensive.py +299 -0
  223. py3plex-2.0.1/tests/test_program.py +556 -0
  224. py3plex-2.0.1/tests/test_sir_long_convergence.py +492 -0
  225. py3plex-2.0.1/tests/test_version_consistency.py +97 -0
  226. py3plex-2.0.1/tests/test_wrappers_benchmark_nodes.py +298 -0
  227. py3plex-2.0.0/MANIFEST.in +0 -2
  228. py3plex-2.0.0/PKG-INFO +0 -388
  229. py3plex-2.0.0/README.md +0 -289
  230. py3plex-2.0.0/py3plex/__init__.py +0 -383
  231. py3plex-2.0.0/py3plex/_parallel.py +0 -272
  232. py3plex-2.0.0/py3plex/algebra/fixed_point.py +0 -70
  233. py3plex-2.0.0/py3plex/algebra/paths.py +0 -332
  234. py3plex-2.0.0/py3plex/algebra/semiring.py +0 -276
  235. py3plex-2.0.0/py3plex/algebra/witness.py +0 -77
  236. py3plex-2.0.0/py3plex/algorithms/advanced_random_generators.py +0 -487
  237. py3plex-2.0.0/py3plex/algorithms/attribute_correlation.py +0 -615
  238. py3plex-2.0.0/py3plex/algorithms/centrality/approx_pagerank.py +0 -166
  239. py3plex-2.0.0/py3plex/algorithms/centrality_toolkit.py +0 -471
  240. py3plex-2.0.0/py3plex/algorithms/community_detection/auto_select.py +0 -560
  241. py3plex-2.0.0/py3plex/algorithms/community_detection/autocommunity.py +0 -474
  242. py3plex-2.0.0/py3plex/algorithms/community_detection/autocommunity_executor.py +0 -1260
  243. py3plex-2.0.0/py3plex/algorithms/community_detection/distributional.py +0 -504
  244. py3plex-2.0.0/py3plex/algorithms/community_detection/flow_hierarchy.py +0 -869
  245. py3plex-2.0.0/py3plex/algorithms/community_detection/label_propagation.py +0 -511
  246. py3plex-2.0.0/py3plex/algorithms/community_detection/leiden_uq.py +0 -640
  247. py3plex-2.0.0/py3plex/algorithms/community_detection/runner.py +0 -510
  248. py3plex-2.0.0/py3plex/algorithms/community_detection/sbm_wrapper.py +0 -243
  249. py3plex-2.0.0/py3plex/algorithms/community_detection/spectral_multilayer.py +0 -821
  250. py3plex-2.0.0/py3plex/algorithms/community_detection/successive_halving.py +0 -603
  251. py3plex-2.0.0/py3plex/algorithms/graph_summarization.py +0 -482
  252. py3plex-2.0.0/py3plex/algorithms/layer_similarity.py +0 -432
  253. py3plex-2.0.0/py3plex/algorithms/multilayer_algorithms/centrality.py +0 -2400
  254. py3plex-2.0.0/py3plex/algorithms/multilayer_clustering.py +0 -479
  255. py3plex-2.0.0/py3plex/algorithms/network_classification/PPR.py +0 -148
  256. py3plex-2.0.0/py3plex/algorithms/network_classification/label_propagation.py +0 -242
  257. py3plex-2.0.0/py3plex/algorithms/node_ranking/__init__.py +0 -414
  258. py3plex-2.0.0/py3plex/algorithms/node_ranking/node_ranking.py +0 -256
  259. py3plex-2.0.0/py3plex/algorithms/robustness_testing.py +0 -458
  260. py3plex-2.0.0/py3plex/algorithms/routing/multiplex_paths.py +0 -655
  261. py3plex-2.0.0/py3plex/algorithms/sbm/inference_vi.py +0 -399
  262. py3plex-2.0.0/py3plex/algorithms/sbm/model_selection.py +0 -218
  263. py3plex-2.0.0/py3plex/algorithms/sbm/multilayer_sbm.py +0 -303
  264. py3plex-2.0.0/py3plex/algorithms/sbm/objectives.py +0 -251
  265. py3plex-2.0.0/py3plex/algorithms/sbm/uq.py +0 -339
  266. py3plex-2.0.0/py3plex/algorithms/sbm/utils.py +0 -259
  267. py3plex-2.0.0/py3plex/algorithms/statistical_report.py +0 -437
  268. py3plex-2.0.0/py3plex/algorithms/statistics/correlation_networks.py +0 -85
  269. py3plex-2.0.0/py3plex/algorithms/statistics/multilayer_statistics.py +0 -2393
  270. py3plex-2.0.0/py3plex/algorithms/temporal/centrality.py +0 -190
  271. py3plex-2.0.0/py3plex/algorithms/temporal/community.py +0 -262
  272. py3plex-2.0.0/py3plex/centrality/robustness.py +0 -583
  273. py3plex-2.0.0/py3plex/claims/generator.py +0 -247
  274. py3plex-2.0.0/py3plex/claims/learner.py +0 -293
  275. py3plex-2.0.0/py3plex/claims/types.py +0 -353
  276. py3plex-2.0.0/py3plex/cli.py +0 -3788
  277. py3plex-2.0.0/py3plex/comparison/executor.py +0 -127
  278. py3plex-2.0.0/py3plex/comparison/metrics.py +0 -465
  279. py3plex-2.0.0/py3plex/comparison/result.py +0 -152
  280. py3plex-2.0.0/py3plex/compat/convert.py +0 -204
  281. py3plex-2.0.0/py3plex/compat/converters/dgl_converter.py +0 -66
  282. py3plex-2.0.0/py3plex/compat/converters/networkx_converter.py +0 -275
  283. py3plex-2.0.0/py3plex/compat/converters/pyg_converter.py +0 -70
  284. py3plex-2.0.0/py3plex/compat/converters/scipy_converter.py +0 -321
  285. py3plex-2.0.0/py3plex/compat/equality.py +0 -290
  286. py3plex-2.0.0/py3plex/compat/ir.py +0 -679
  287. py3plex-2.0.0/py3plex/compat/schema.py +0 -306
  288. py3plex-2.0.0/py3plex/compat/sidecar.py +0 -243
  289. py3plex-2.0.0/py3plex/config.py +0 -279
  290. py3plex-2.0.0/py3plex/contracts/contract.py +0 -253
  291. py3plex-2.0.0/py3plex/contracts/predicates.py +0 -615
  292. py3plex-2.0.0/py3plex/core/immutable.py +0 -233
  293. py3plex-2.0.0/py3plex/core/lazy_evaluation.py +0 -265
  294. py3plex-2.0.0/py3plex/core/multinet.py +0 -4754
  295. py3plex-2.0.0/py3plex/core/parsers.py +0 -985
  296. py3plex-2.0.0/py3plex/core/temporal_multinet.py +0 -520
  297. py3plex-2.0.0/py3plex/counterexamples/engine.py +0 -490
  298. py3plex-2.0.0/py3plex/counterfactual/comparator.py +0 -373
  299. py3plex-2.0.0/py3plex/counterfactual/presets.py +0 -188
  300. py3plex-2.0.0/py3plex/counterfactual/spec.py +0 -531
  301. py3plex-2.0.0/py3plex/datasets/_loaders.py +0 -291
  302. py3plex-2.0.0/py3plex/diagnostics/builders.py +0 -325
  303. py3plex-2.0.0/py3plex/diagnostics/core.py +0 -315
  304. py3plex-2.0.0/py3plex/diagnostics/utils.py +0 -163
  305. py3plex-2.0.0/py3plex/dsl/__init__.py +0 -636
  306. py3plex-2.0.0/py3plex/dsl/algebra.py +0 -354
  307. py3plex-2.0.0/py3plex/dsl/ast.py +0 -2292
  308. py3plex-2.0.0/py3plex/dsl/benchmark.py +0 -364
  309. py3plex-2.0.0/py3plex/dsl/benchmark_result.py +0 -161
  310. py3plex-2.0.0/py3plex/dsl/builder.py +0 -7458
  311. py3plex-2.0.0/py3plex/dsl/cache.py +0 -266
  312. py3plex-2.0.0/py3plex/dsl/community_uq.py +0 -438
  313. py3plex-2.0.0/py3plex/dsl/compositional_uq.py +0 -357
  314. py3plex-2.0.0/py3plex/dsl/errors.py +0 -676
  315. py3plex-2.0.0/py3plex/dsl/executor.py +0 -7328
  316. py3plex-2.0.0/py3plex/dsl/executor_semiring.py +0 -335
  317. py3plex-2.0.0/py3plex/dsl/executors/benchmark_executor.py +0 -664
  318. py3plex-2.0.0/py3plex/dsl/explain.py +0 -549
  319. py3plex-2.0.0/py3plex/dsl/export.py +0 -390
  320. py3plex-2.0.0/py3plex/dsl/expressions.py +0 -237
  321. py3plex-2.0.0/py3plex/dsl/fastpath.py +0 -655
  322. py3plex-2.0.0/py3plex/dsl/layers.py +0 -605
  323. py3plex-2.0.0/py3plex/dsl/lint/rules/dsl001_unknown_layer.py +0 -134
  324. py3plex-2.0.0/py3plex/dsl/lint/rules/dsl201_unsatisfiable.py +0 -117
  325. py3plex-2.0.0/py3plex/dsl/lint/types.py +0 -85
  326. py3plex-2.0.0/py3plex/dsl/patterns/__init__.py +0 -66
  327. py3plex-2.0.0/py3plex/dsl/patterns/builder.py +0 -502
  328. py3plex-2.0.0/py3plex/dsl/patterns/compiler.py +0 -233
  329. py3plex-2.0.0/py3plex/dsl/patterns/engine.py +0 -528
  330. py3plex-2.0.0/py3plex/dsl/patterns/ir.py +0 -349
  331. py3plex-2.0.0/py3plex/dsl/planner.py +0 -840
  332. py3plex-2.0.0/py3plex/dsl/program/cache.py +0 -246
  333. py3plex-2.0.0/py3plex/dsl/program/cost.py +0 -866
  334. py3plex-2.0.0/py3plex/dsl/program/diff.py +0 -222
  335. py3plex-2.0.0/py3plex/dsl/program/executor.py +0 -762
  336. py3plex-2.0.0/py3plex/dsl/program/explain.py +0 -192
  337. py3plex-2.0.0/py3plex/dsl/program/program.py +0 -706
  338. py3plex-2.0.0/py3plex/dsl/program/rewrite.py +0 -1489
  339. py3plex-2.0.0/py3plex/dsl/program/types.py +0 -1100
  340. py3plex-2.0.0/py3plex/dsl/provenance.py +0 -544
  341. py3plex-2.0.0/py3plex/dsl/result.py +0 -2191
  342. py3plex-2.0.0/py3plex/dsl/selection_uq.py +0 -343
  343. py3plex-2.0.0/py3plex/dsl/serializer.py +0 -289
  344. py3plex-2.0.0/py3plex/dsl/uq_algebra.py +0 -897
  345. py3plex-2.0.0/py3plex/dsl/uq_resolution.py +0 -723
  346. py3plex-2.0.0/py3plex/dsl/warnings.py +0 -489
  347. py3plex-2.0.0/py3plex/dsl_legacy.py +0 -2182
  348. py3plex-2.0.0/py3plex/dynamics/_utils.py +0 -197
  349. py3plex-2.0.0/py3plex/dynamics/compartmental.py +0 -415
  350. py3plex-2.0.0/py3plex/dynamics/core.py +0 -678
  351. py3plex-2.0.0/py3plex/dynamics/executor.py +0 -482
  352. py3plex-2.0.0/py3plex/dynamics/models.py +0 -685
  353. py3plex-2.0.0/py3plex/embeddings/cache.py +0 -146
  354. py3plex-2.0.0/py3plex/embeddings/link_ops.py +0 -155
  355. py3plex-2.0.0/py3plex/embeddings/metapath2vec.py +0 -614
  356. py3plex-2.0.0/py3plex/ergonomics.py +0 -388
  357. py3plex-2.0.0/py3plex/experiments/artifacts.py +0 -217
  358. py3plex-2.0.0/py3plex/experiments/env.py +0 -75
  359. py3plex-2.0.0/py3plex/experiments/model.py +0 -304
  360. py3plex-2.0.0/py3plex/experiments/runner.py +0 -166
  361. py3plex-2.0.0/py3plex/experiments/store.py +0 -231
  362. py3plex-2.0.0/py3plex/fast_examples.py +0 -121
  363. py3plex-2.0.0/py3plex/io/exceptions.py +0 -36
  364. py3plex-2.0.0/py3plex/io/formats/arrow_format.py +0 -333
  365. py3plex-2.0.0/py3plex/io/multinet_bridge.py +0 -399
  366. py3plex-2.0.0/py3plex/meta/builder.py +0 -776
  367. py3plex-2.0.0/py3plex/meta/result.py +0 -107
  368. py3plex-2.0.0/py3plex/meta/stats.py +0 -356
  369. py3plex-2.0.0/py3plex/meta/utils.py +0 -336
  370. py3plex-2.0.0/py3plex/ml/embedding/utils.py +0 -149
  371. py3plex-2.0.0/py3plex/nullmodels/executor.py +0 -126
  372. py3plex-2.0.0/py3plex/nullmodels/models.py +0 -397
  373. py3plex-2.0.0/py3plex/optimizer/cost_model.py +0 -274
  374. py3plex-2.0.0/py3plex/optimizer/logical_plan.py +0 -188
  375. py3plex-2.0.0/py3plex/optimizer/optimizer.py +0 -188
  376. py3plex-2.0.0/py3plex/optimizer/physical_plan.py +0 -460
  377. py3plex-2.0.0/py3plex/optimizer/plan_nodes.py +0 -277
  378. py3plex-2.0.0/py3plex/optimizer/rules.py +0 -552
  379. py3plex-2.0.0/py3plex/out_of_core/executor.py +0 -865
  380. py3plex-2.0.0/py3plex/out_of_core/network.py +0 -405
  381. py3plex-2.0.0/py3plex/out_of_core/readers.py +0 -308
  382. py3plex-2.0.0/py3plex/out_of_core/spill.py +0 -280
  383. py3plex-2.0.0/py3plex/paths/algorithms.py +0 -422
  384. py3plex-2.0.0/py3plex/paths/executor.py +0 -112
  385. py3plex-2.0.0/py3plex/pipeline.py +0 -757
  386. py3plex-2.0.0/py3plex/plugins/base.py +0 -258
  387. py3plex-2.0.0/py3plex/provenance/bundle.py +0 -219
  388. py3plex-2.0.0/py3plex/provenance/capture.py +0 -276
  389. py3plex-2.0.0/py3plex/provenance/replay.py +0 -253
  390. py3plex-2.0.0/py3plex/provenance/schema.py +0 -342
  391. py3plex-2.0.0/py3plex/requirements.py +0 -842
  392. py3plex-2.0.0/py3plex/selection/capabilities.py +0 -311
  393. py3plex-2.0.0/py3plex/selection/community_registry.py +0 -283
  394. py3plex-2.0.0/py3plex/selection/evaluate.py +0 -278
  395. py3plex-2.0.0/py3plex/selection/result.py +0 -332
  396. py3plex-2.0.0/py3plex/semiring/core.py +0 -383
  397. py3plex-2.0.0/py3plex/semiring/pareto.py +0 -139
  398. py3plex-2.0.0/py3plex/semiring/types.py +0 -47
  399. py3plex-2.0.0/py3plex/sensitivity/executor.py +0 -352
  400. py3plex-2.0.0/py3plex/sensitivity/metrics.py +0 -287
  401. py3plex-2.0.0/py3plex/sensitivity/perturbations.py +0 -264
  402. py3plex-2.0.0/py3plex/sensitivity/types.py +0 -205
  403. py3plex-2.0.0/py3plex/stats/provenance.py +0 -80
  404. py3plex-2.0.0/py3plex/stats/registry.py +0 -236
  405. py3plex-2.0.0/py3plex/stats/uncertainty.py +0 -521
  406. py3plex-2.0.0/py3plex/temporal_view.py +0 -277
  407. py3plex-2.0.0/py3plex/uncertainty/bootstrap.py +0 -433
  408. py3plex-2.0.0/py3plex/uncertainty/community_ensemble.py +0 -606
  409. py3plex-2.0.0/py3plex/uncertainty/community_result.py +0 -680
  410. py3plex-2.0.0/py3plex/uncertainty/estimation.py +0 -510
  411. py3plex-2.0.0/py3plex/uncertainty/noise_models.py +0 -513
  412. py3plex-2.0.0/py3plex/uncertainty/null_models.py +0 -497
  413. py3plex-2.0.0/py3plex/uncertainty/partition_metrics.py +0 -335
  414. py3plex-2.0.0/py3plex/uncertainty/partition_reducers.py +0 -853
  415. py3plex-2.0.0/py3plex/uncertainty/partition_uq.py +0 -571
  416. py3plex-2.0.0/py3plex/uncertainty/resampling_graph.py +0 -287
  417. py3plex-2.0.0/py3plex/uncertainty/runner.py +0 -180
  418. py3plex-2.0.0/py3plex/uncertainty/selection_execution.py +0 -281
  419. py3plex-2.0.0/py3plex/uncertainty/selection_reducers.py +0 -507
  420. py3plex-2.0.0/py3plex/uncertainty/stratification.py +0 -365
  421. py3plex-2.0.0/py3plex/utils.py +0 -445
  422. py3plex-2.0.0/py3plex/visualization/benchmark_visualizations.py +0 -301
  423. py3plex-2.0.0/py3plex/visualization/bezier.py +0 -157
  424. py3plex-2.0.0/py3plex/visualization/multilayer.py +0 -2549
  425. py3plex-2.0.0/py3plex/visualization/pymnet_style.py +0 -688
  426. py3plex-2.0.0/py3plex/visualization/sankey.py +0 -254
  427. py3plex-2.0.0/py3plex.egg-info/PKG-INFO +0 -388
  428. py3plex-2.0.0/py3plex.egg-info/SOURCES.txt +0 -916
  429. py3plex-2.0.0/py3plex.egg-info/requires.txt +0 -88
  430. py3plex-2.0.0/py3plex_mcp/__init__.py +0 -24
  431. py3plex-2.0.0/pyproject.toml +0 -311
  432. py3plex-2.0.0/tests/test_book_manuscript_integrity.py +0 -53
  433. py3plex-2.0.0/tests/test_dsl_patterns.py +0 -589
  434. py3plex-2.0.0/tests/test_multilayer_statistics.py +0 -825
  435. py3plex-2.0.0/tests/test_node_ranking_comprehensive.py +0 -246
  436. py3plex-2.0.0/tests/test_program.py +0 -518
  437. py3plex-2.0.0/tests/test_version_consistency.py +0 -93
  438. py3plex-2.0.0/tests/test_wrappers_benchmark_nodes.py +0 -297
  439. {py3plex-2.0.0 → py3plex-2.0.1}/LICENSE +0 -0
  440. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/__main__.py +0 -0
  441. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/agent.py +0 -0
  442. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algebra/__init__.py +0 -0
  443. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algebra/backend.py +0 -0
  444. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algebra/closure.py +0 -0
  445. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algebra/lift.py +0 -0
  446. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algebra/registry.py +0 -0
  447. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/__init__.py +0 -0
  448. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/centrality/__init__.py +0 -0
  449. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/centrality/approx_betweenness.py +0 -0
  450. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/centrality/approx_closeness.py +0 -0
  451. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/centrality/explain.py +0 -0
  452. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_comparison.py +0 -0
  453. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/NoRC.py +0 -0
  454. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/__init__.py +0 -0
  455. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/budget.py +0 -0
  456. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/community_louvain.py +0 -0
  457. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/community_measures.py +0 -0
  458. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/community_ranking.py +0 -0
  459. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/community_wrapper.py +0 -0
  460. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/__init__.py +0 -0
  461. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/conftest.py +0 -0
  462. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/examples/python/example-bipartite.py +0 -0
  463. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/examples/python/example-file-io.py +0 -0
  464. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/examples/python/example-multiplex.py +0 -0
  465. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/examples/python/example-networkx.py +0 -0
  466. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/examples/python/example-simple.py +0 -0
  467. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/examples/python/example-trigram-expanded.py +0 -0
  468. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/examples/python/example-trigram.py +0 -0
  469. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/infomap.py +0 -0
  470. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/interfaces/python/setup.py +0 -0
  471. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/leiden_multilayer.py +0 -0
  472. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/multilayer_benchmark.py +0 -0
  473. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/multilayer_modularity.py +0 -0
  474. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/multilayer_quality_metrics.py +0 -0
  475. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/node_ranking.py +0 -0
  476. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/sbm_metrics.py +0 -0
  477. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/curvature/__init__.py +0 -0
  478. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/curvature/ollivier_ricci_multilayer.py +0 -0
  479. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/general/__init__.py +0 -0
  480. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/general/benchmark_classification.py +0 -0
  481. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/general/walkers.py +0 -0
  482. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/__init__.py +0 -0
  483. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/__main__.py +0 -0
  484. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/assets/builtin.n3 +0 -0
  485. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/__init__.py +0 -0
  486. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/converters.py +0 -0
  487. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/example.py +0 -0
  488. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/helpers.py +0 -0
  489. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/kb.py +0 -0
  490. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/load.py +0 -0
  491. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/predicate.py +0 -0
  492. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/rule.py +0 -0
  493. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/settings.py +0 -0
  494. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/term_parsers.py +0 -0
  495. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/learners/__init__.py +0 -0
  496. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/learners/bottomup.py +0 -0
  497. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/learners/learner.py +0 -0
  498. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/learners/optimal.py +0 -0
  499. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/stats/__init__.py +0 -0
  500. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/stats/adjustment.py +0 -0
  501. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/stats/scorefunctions.py +0 -0
  502. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/stats/significance.py +0 -0
  503. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/stats/validate.py +0 -0
  504. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/meta_flow_report.py +0 -0
  505. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/multicentrality.py +0 -0
  506. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/multilayer_algorithms/__init__.py +0 -0
  507. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/multilayer_algorithms/entanglement.py +0 -0
  508. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/multilayer_algorithms/multirank.py +0 -0
  509. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/multilayer_algorithms/multixrank.py +0 -0
  510. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/multilayer_algorithms/supra_matrix_function_centrality.py +0 -0
  511. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/multilayer_algorithms/versatility.py +0 -0
  512. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/network_classification/__init__.py +0 -0
  513. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/requirements_registry.py +0 -0
  514. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/routing/__init__.py +0 -0
  515. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/sbm/__init__.py +0 -0
  516. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/sbm/conversions.py +0 -0
  517. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/sbm/diagnostics.py +0 -0
  518. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/sir_multiplex.py +0 -0
  519. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/statistics/__init__.py +0 -0
  520. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/statistics/basic_statistics.py +0 -0
  521. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/statistics/bayesian_distances.py +0 -0
  522. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/statistics/bayesiantests.py +0 -0
  523. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/statistics/critical_distances.py +0 -0
  524. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/statistics/enrichment_modules.py +0 -0
  525. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/statistics/powerlaw.py +0 -0
  526. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/statistics/stats_comparison.py +0 -0
  527. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/statistics/topology.py +0 -0
  528. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/temporal/__init__.py +0 -0
  529. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/temporal_multiplex/__init__.py +0 -0
  530. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/term_parsers/__init__.py +0 -0
  531. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/alignment/__init__.py +0 -0
  532. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/alignment/features.py +0 -0
  533. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/alignment/metrics.py +0 -0
  534. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/alignment/solvers.py +0 -0
  535. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/benchmarks/__init__.py +0 -0
  536. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/benchmarks/budget.py +0 -0
  537. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/benchmarks/metrics.py +0 -0
  538. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/benchmarks/runners.py +0 -0
  539. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/centrality/__init__.py +0 -0
  540. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/claims/__init__.py +0 -0
  541. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/claims/scorer.py +0 -0
  542. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/comparison/__init__.py +0 -0
  543. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/compat/__init__.py +0 -0
  544. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/compat/converters/__init__.py +0 -0
  545. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/compat/converters/igraph_converter.py +0 -0
  546. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/compat/exceptions.py +0 -0
  547. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/contracts/__init__.py +0 -0
  548. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/contracts/engine.py +0 -0
  549. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/contracts/failure_modes.py +0 -0
  550. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/contracts/result.py +0 -0
  551. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/core/HINMINE/IO.py +0 -0
  552. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/core/HINMINE/__init__.py +0 -0
  553. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/core/HINMINE/dataStructures.py +0 -0
  554. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/core/HINMINE/decomposition.py +0 -0
  555. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/core/__init__.py +0 -0
  556. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/core/converters.py +0 -0
  557. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/core/nx_compat.py +0 -0
  558. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/core/random_generators.py +0 -0
  559. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/core/schema_validation.py +0 -0
  560. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/core/supporting.py +0 -0
  561. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/core/types.py +0 -0
  562. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/counterexamples/__init__.py +0 -0
  563. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/counterexamples/claim_lang.py +0 -0
  564. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/counterexamples/ddmin.py +0 -0
  565. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/counterexamples/types.py +0 -0
  566. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/counterexamples/witness.py +0 -0
  567. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/counterfactual/__init__.py +0 -0
  568. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/counterfactual/engine.py +0 -0
  569. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/counterfactual/result.py +0 -0
  570. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/datasets/__init__.py +0 -0
  571. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/datasets/_data/aarhus_cs.edges +0 -0
  572. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/datasets/_data/synthetic_multilayer.edges +0 -0
  573. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/datasets/_generators.py +0 -0
  574. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/diagnostics/__init__.py +0 -0
  575. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/diagnostics/codes.py +0 -0
  576. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/attribution.py +0 -0
  577. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/communities.py +0 -0
  578. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/context.py +0 -0
  579. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/executors/__init__.py +0 -0
  580. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/lint/__init__.py +0 -0
  581. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/lint/diagnostic.py +0 -0
  582. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/lint/lint_context.py +0 -0
  583. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/lint/rules/__init__.py +0 -0
  584. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/lint/rules/base.py +0 -0
  585. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/lint/rules/dsl002_unknown_attribute.py +0 -0
  586. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/lint/rules/dsl101_type_mismatch.py +0 -0
  587. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/lint/rules/dsl202_redundant.py +0 -0
  588. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/lint/rules/perf301_full_scan.py +0 -0
  589. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/lint/rules/perf302_cross_layer.py +0 -0
  590. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/lint/schema.py +0 -0
  591. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/lint/type_resolver.py +0 -0
  592. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/operator_registry.py +0 -0
  593. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/patterns/result.py +0 -0
  594. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/predictive.py +0 -0
  595. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/program/__init__.py +0 -0
  596. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/program/distribution.py +0 -0
  597. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/reduction.py +0 -0
  598. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/registry.py +0 -0
  599. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dynamics/__init__.py +0 -0
  600. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dynamics/ast.py +0 -0
  601. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dynamics/builder.py +0 -0
  602. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dynamics/config.py +0 -0
  603. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dynamics/errors.py +0 -0
  604. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dynamics/processes.py +0 -0
  605. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dynamics/registry.py +0 -0
  606. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dynamics/result.py +0 -0
  607. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dynamics/serializer.py +0 -0
  608. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/embeddings/__init__.py +0 -0
  609. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/embeddings/base.py +0 -0
  610. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/embeddings/netmf.py +0 -0
  611. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/errors.py +0 -0
  612. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/exceptions.py +0 -0
  613. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/experiments/__init__.py +0 -0
  614. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/experiments/cli.py +0 -0
  615. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/experiments/errors.py +0 -0
  616. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/experiments/utils.py +0 -0
  617. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/graph_ops.py +0 -0
  618. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/io/__init__.py +0 -0
  619. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/io/api.py +0 -0
  620. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/io/canonical_format.py +0 -0
  621. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/io/converters.py +0 -0
  622. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/io/formats/__init__.py +0 -0
  623. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/io/formats/csv_format.py +0 -0
  624. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/io/formats/json_format.py +0 -0
  625. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/io/parquet_format.py +0 -0
  626. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/io/schema.py +0 -0
  627. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/lab/__init__.py +0 -0
  628. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/lab/base.py +0 -0
  629. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/linter.py +0 -0
  630. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/logging_config.py +0 -0
  631. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/meta/__init__.py +0 -0
  632. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/ml/__init__.py +0 -0
  633. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/ml/embedding/__init__.py +0 -0
  634. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/ml/embedding/base.py +0 -0
  635. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/ml/embedding/deepwalk.py +0 -0
  636. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/ml/embedding/evaluation.py +0 -0
  637. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/ml/embedding/line.py +0 -0
  638. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/ml/embedding/metapath2vec.py +0 -0
  639. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/ml/embedding/multiplex.py +0 -0
  640. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/ml/embedding/netmf.py +0 -0
  641. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/ml/embedding/node2vec.py +0 -0
  642. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/ml/embedding/similarity.py +0 -0
  643. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/ml/embedding/trainer.py +0 -0
  644. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/multinet/__init__.py +0 -0
  645. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/multinet/aggregation.py +0 -0
  646. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/nullmodels/__init__.py +0 -0
  647. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/nullmodels/result.py +0 -0
  648. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/optimizer/__init__.py +0 -0
  649. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/out_of_core/__init__.py +0 -0
  650. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/out_of_core/cli.py +0 -0
  651. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/out_of_core/errors.py +0 -0
  652. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/out_of_core/operators.py +0 -0
  653. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/out_of_core/schema.py +0 -0
  654. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/out_of_core/utils.py +0 -0
  655. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/paths/__init__.py +0 -0
  656. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/paths/result.py +0 -0
  657. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/plugins/__init__.py +0 -0
  658. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/plugins/examples.py +0 -0
  659. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/plugins/registry.py +0 -0
  660. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/profiling.py +0 -0
  661. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/provenance/__init__.py +0 -0
  662. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/robustness/__init__.py +0 -0
  663. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/robustness/experiments.py +0 -0
  664. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/robustness/perturbations.py +0 -0
  665. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/runtime/__init__.py +0 -0
  666. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/runtime/capabilities.py +0 -0
  667. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/selection/__init__.py +0 -0
  668. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/selection/metric_registry.py +0 -0
  669. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/selection/wins.py +0 -0
  670. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/semiring/__init__.py +0 -0
  671. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/semiring/engine.py +0 -0
  672. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/semiring/registry.py +0 -0
  673. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/sensitivity/__init__.py +0 -0
  674. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/stats/__init__.py +0 -0
  675. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/stats/statvalue.py +0 -0
  676. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/temporal_utils.py +0 -0
  677. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/temporal_utils_extended.py +0 -0
  678. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/uncertainty/__init__.py +0 -0
  679. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/uncertainty/ci_utils.py +0 -0
  680. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/uncertainty/context.py +0 -0
  681. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/uncertainty/partition.py +0 -0
  682. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/uncertainty/partition_types.py +0 -0
  683. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/uncertainty/plan.py +0 -0
  684. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/uncertainty/reducers/__init__.py +0 -0
  685. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/uncertainty/reducers/base.py +0 -0
  686. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/uncertainty/selection_types.py +0 -0
  687. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/uncertainty/selection_uq.py +0 -0
  688. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/uncertainty/types.py +0 -0
  689. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/validation.py +0 -0
  690. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/visualization/__init__.py +0 -0
  691. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/visualization/colors.py +0 -0
  692. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/visualization/drawing_machinery.py +0 -0
  693. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/visualization/embedding_visualization/__init__.py +0 -0
  694. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/visualization/embedding_visualization/embedding_tools.py +0 -0
  695. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/visualization/embedding_visualization/embedding_visualization.py +0 -0
  696. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/visualization/fa2/__init__.py +0 -0
  697. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/visualization/fa2/fa2util.py +0 -0
  698. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/visualization/fa2/forceatlas2.py +0 -0
  699. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/visualization/layout_algorithms.py +0 -0
  700. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/visualization/polyfit.py +0 -0
  701. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/visualization/ricci_layout.py +0 -0
  702. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/visualization/ricci_multilayer_vis.py +0 -0
  703. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/workflows.py +0 -0
  704. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/wrappers/__init__.py +0 -0
  705. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/wrappers/benchmark_nodes.py +0 -0
  706. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/wrappers/r_interop.py +0 -0
  707. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/wrappers/train_node2vec_embedding.py +0 -0
  708. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex.egg-info/dependency_links.txt +0 -0
  709. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex.egg-info/entry_points.txt +0 -0
  710. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex.egg-info/not-zip-safe +0 -0
  711. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex.egg-info/top_level.txt +0 -0
  712. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex_mcp/errors.py +0 -0
  713. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex_mcp/registry.py +0 -0
  714. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex_mcp/safe_paths.py +0 -0
  715. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex_mcp/schemas.py +0 -0
  716. {py3plex-2.0.0 → py3plex-2.0.1}/py3plex_mcp/server.py +0 -0
  717. {py3plex-2.0.0 → py3plex-2.0.1}/setup.cfg +0 -0
  718. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_advanced_metrics_properties.py +0 -0
  719. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_agent_api.py +0 -0
  720. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_agents_documentation_claims.py +0 -0
  721. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_agents_ergonomics_features.py +0 -0
  722. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_agents_golden_paths.py +0 -0
  723. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_aggregation.py +0 -0
  724. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_algebra_backend.py +0 -0
  725. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_algebra_core.py +0 -0
  726. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_algebra_fixed_point.py +0 -0
  727. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_algebra_paths.py +0 -0
  728. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_algebra_registry.py +0 -0
  729. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_algebra_witness.py +0 -0
  730. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_algorithm_properties.py +0 -0
  731. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_algorithms_attribute_correlation.py +0 -0
  732. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_algorithms_correlation_networks.py +0 -0
  733. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_algorithms_init.py +0 -0
  734. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_algorithms_random_generators.py +0 -0
  735. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_algorithms_requirements_registry.py +0 -0
  736. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_algorithms_statistics_bayesian_distances.py +0 -0
  737. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_alignment.py +0 -0
  738. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_alignment_contracts.py +0 -0
  739. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_alignment_correctness_additional.py +0 -0
  740. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_approximate_centrality.py +0 -0
  741. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_ast_roundtrip.py +0 -0
  742. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_ast_roundtrip_integration.py +0 -0
  743. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_attribute_correlation.py +0 -0
  744. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_attribute_correlation_contracts.py +0 -0
  745. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_auto_community.py +0 -0
  746. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_autocommunity_benchmarks.py +0 -0
  747. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_autocommunity_executor.py +0 -0
  748. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_autocommunity_meta.py +0 -0
  749. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_autocommunity_successive_halving.py +0 -0
  750. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_bayesian_distances.py +0 -0
  751. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_bench_aggregation_unit.py +0 -0
  752. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_benchmark_budget_fairness.py +0 -0
  753. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_benchmark_dsl_basic.py +0 -0
  754. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_benchmark_integration.py +0 -0
  755. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_benchmark_multiplex_centrality.py +0 -0
  756. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_benchmark_time.py +0 -0
  757. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_benchmarks_budget.py +0 -0
  758. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_benchmarks_init.py +0 -0
  759. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_book_conf.py +0 -0
  760. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_book_snippets.py +0 -0
  761. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_builder_dsl_mutate.py +0 -0
  762. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_capabilities_basic.py +0 -0
  763. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_capabilities_optional_missing.py +0 -0
  764. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_centrality_explain.py +0 -0
  765. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_centrality_explain_integration.py +0 -0
  766. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_centrality_robustness.py +0 -0
  767. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_centrality_robustness_oracles.py +0 -0
  768. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_centrality_uncertainty.py +0 -0
  769. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_centrality_weight_handling.py +0 -0
  770. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_check_api_consistency.py +0 -0
  771. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_check_doc_coverage.py +0 -0
  772. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_check_type_coverage.py +0 -0
  773. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_ci_python_versions.py +0 -0
  774. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_claim_learning.py +0 -0
  775. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_claims_types.py +0 -0
  776. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_cli.py +0 -0
  777. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_cli_check.py +0 -0
  778. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_cli_ergonomics.py +0 -0
  779. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_cli_piping.py +0 -0
  780. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_clustering_multilayer.py +0 -0
  781. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_code_improvements.py +0 -0
  782. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_community_detection_modules.py +0 -0
  783. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_community_distribution.py +0 -0
  784. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_community_measures.py +0 -0
  785. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_comparison.py +0 -0
  786. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_comparison_executor.py +0 -0
  787. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_comparison_metrics.py +0 -0
  788. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_comparison_metrics_additional.py +0 -0
  789. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_comparison_result.py +0 -0
  790. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_comparison_uninitialized_and_resistance_oracles.py +0 -0
  791. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_compat_exceptions.py +0 -0
  792. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_compat_roundtrip.py +0 -0
  793. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_config_api.py +0 -0
  794. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_config_benchmark.py +0 -0
  795. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_contracts.py +0 -0
  796. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_contracts_basic.py +0 -0
  797. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_contracts_extended.py +0 -0
  798. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_contracts_failure_modes.py +0 -0
  799. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_contracts_integration.py +0 -0
  800. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_core_functionality.py +0 -0
  801. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_core_immutable.py +0 -0
  802. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_core_lazy_evaluation.py +0 -0
  803. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_core_multinet_and_parsers.py +0 -0
  804. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_core_multinet_correctness.py +0 -0
  805. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_core_multiplex_edges.py +0 -0
  806. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_core_schema_validation.py +0 -0
  807. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_core_supporting.py +0 -0
  808. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_correlation_networks.py +0 -0
  809. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_counterexamples.py +0 -0
  810. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_counterexamples_properties.py +0 -0
  811. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_counterfactual.py +0 -0
  812. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_counterfactual_presets.py +0 -0
  813. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_coverage_grouping.py +0 -0
  814. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_create_mosaic_banner.py +0 -0
  815. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_create_showcase_flow.py +0 -0
  816. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_crosshair_pure_functions.py +0 -0
  817. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_data_files_presence.py +0 -0
  818. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_datasets.py +0 -0
  819. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_datasets_contracts.py +0 -0
  820. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_datasets_oracles.py +0 -0
  821. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_degenerate_networks.py +0 -0
  822. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_determinism_randomness.py +0 -0
  823. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_diagnostics.py +0 -0
  824. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_diagnostics_utils.py +0 -0
  825. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_doc_conf.py +0 -0
  826. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_docs_embeddings_section.py +0 -0
  827. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_docs_examples.py +0 -0
  828. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_docs_quality_pass.py +0 -0
  829. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_doctests.py +0 -0
  830. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dplyr_integration.py +0 -0
  831. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl.py +0 -0
  832. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_aggregation_enhancements.py +0 -0
  833. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_ast_equivalence.py +0 -0
  834. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_auto_community.py +0 -0
  835. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_communities.py +0 -0
  836. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_community_filtering.py +0 -0
  837. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_community_uq_integration.py +0 -0
  838. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_compact_compute.py +0 -0
  839. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_compositional_uq.py +0 -0
  840. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_condition_semantics.py +0 -0
  841. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_d_factory.py +0 -0
  842. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_documentation_examples.py +0 -0
  843. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_dplyr_style.py +0 -0
  844. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_dynamics_integration.py +0 -0
  845. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_edge_grouping_coverage.py +0 -0
  846. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_edge_queries.py +0 -0
  847. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_enhancements.py +0 -0
  848. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_ergonomics.py +0 -0
  849. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_errors.py +0 -0
  850. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_errors_extended.py +0 -0
  851. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_executor_additional.py +0 -0
  852. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_explain.py +0 -0
  853. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_export.py +0 -0
  854. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_expressions.py +0 -0
  855. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_extensions.py +0 -0
  856. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_graphops_equivalence.py +0 -0
  857. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_grouping_coverage.py +0 -0
  858. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_interactive.py +0 -0
  859. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_joins.py +0 -0
  860. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_layer_selection.py +0 -0
  861. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_layer_set_algebra.py +0 -0
  862. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_legacy_approximate.py +0 -0
  863. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_legacy_edges.py +0 -0
  864. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_lint.py +0 -0
  865. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_operators.py +0 -0
  866. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_patterns_quick_reference.py +0 -0
  867. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_pipes.py +0 -0
  868. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_planner.py +0 -0
  869. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_predict_reduce.py +0 -0
  870. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_program_rewrite.py +0 -0
  871. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_program_types.py +0 -0
  872. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_progress_logging.py +0 -0
  873. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_properties.py +0 -0
  874. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_provenance.py +0 -0
  875. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_query_optimization.py +0 -0
  876. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_query_zoo.py +0 -0
  877. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_result_algebra_edge_cases.py +0 -0
  878. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_selection_fastpath.py +0 -0
  879. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_semiring_integration.py +0 -0
  880. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_serializer.py +0 -0
  881. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_smart_defaults.py +0 -0
  882. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_temporal_range_execution.py +0 -0
  883. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_uncertainty.py +0 -0
  884. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_uq_ergonomics.py +0 -0
  885. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_uq_propagation.py +0 -0
  886. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_v2.py +0 -0
  887. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_zoo_features.py +0 -0
  888. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dynamics.py +0 -0
  889. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dynamics_algorithm_contracts.py +0 -0
  890. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dynamics_config_and_results_correctness.py +0 -0
  891. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dynamics_conservation.py +0 -0
  892. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dynamics_core.py +0 -0
  893. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dynamics_executor_edge_cases.py +0 -0
  894. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dynamics_parallel_determinism.py +0 -0
  895. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dynamics_reference_runs.py +0 -0
  896. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dynamics_uq_integration.py +0 -0
  897. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dynamics_utils.py +0 -0
  898. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_edge_cases.py +0 -0
  899. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_edgelist_format.py +0 -0
  900. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_embeddings_direct_units.py +0 -0
  901. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_ergonomic_helpers.py +0 -0
  902. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_ergonomics.py +0 -0
  903. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_ergonomics_helpers.py +0 -0
  904. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_errors.py +0 -0
  905. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_CBSSD.py +0 -0
  906. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_community_detection.py +0 -0
  907. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_decomposition_and_classification.py +0 -0
  908. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_decomposition_ground_truth.py +0 -0
  909. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_dsl_builder_api.py +0 -0
  910. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_dynamics_core_examples.py +0 -0
  911. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_embedding_construction.py +0 -0
  912. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_embedding_visualization.py +0 -0
  913. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_incidence_gadget_encoding.py +0 -0
  914. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_interactive_multilayer.py +0 -0
  915. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_inverse_network.py +0 -0
  916. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_layer_extraction.py +0 -0
  917. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_manipulation.py +0 -0
  918. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_multilayer_vectorized_aggregation.py +0 -0
  919. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_multiplex_aggregate.py +0 -0
  920. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_multiplex_dynamics.py +0 -0
  921. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_n2v_embedding.py +0 -0
  922. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_network_decomposition.py +0 -0
  923. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_network_decomposition_meta_paths.py +0 -0
  924. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_numeric_encoding.py +0 -0
  925. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_pattern_matching.py +0 -0
  926. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_ppr.py +0 -0
  927. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_examples_zoo_consolidation.py +0 -0
  928. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_exception_taxonomy.py +0 -0
  929. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_exceptions.py +0 -0
  930. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_experiments.py +0 -0
  931. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_explain_attribution.py +0 -0
  932. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_fast_examples.py +0 -0
  933. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_flagship_progress_demo.py +0 -0
  934. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_flow_hierarchy.py +0 -0
  935. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_fuzzing_properties.py +0 -0
  936. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_generate_all_outputs.py +0 -0
  937. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_generate_quickstart_outputs.py +0 -0
  938. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_generate_visualization_images.py +0 -0
  939. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_golden_toy_examples.py +0 -0
  940. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_graph_ops.py +0 -0
  941. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_graph_summarization.py +0 -0
  942. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_hedwig_adjustment.py +0 -0
  943. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_hedwig_significance.py +0 -0
  944. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_improved_errors.py +0 -0
  945. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_incidence_gadget_encoding.py +0 -0
  946. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_infomap_fix.py +0 -0
  947. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_interlayer_links_fix.py +0 -0
  948. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_io_api_edge_cases.py +0 -0
  949. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_io_arrow.py +0 -0
  950. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_io_contracts_additional.py +0 -0
  951. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_io_converters.py +0 -0
  952. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_io_exceptions.py +0 -0
  953. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_io_integration.py +0 -0
  954. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_io_roundtrip.py +0 -0
  955. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_io_schema.py +0 -0
  956. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_issue_19_fix.py +0 -0
  957. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_lab.py +0 -0
  958. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_lab_additional.py +0 -0
  959. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_lab_correctness.py +0 -0
  960. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_label_propagation.py +0 -0
  961. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_layer_extraction_fix.py +0 -0
  962. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_layer_similarity.py +0 -0
  963. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_layout_algorithms.py +0 -0
  964. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_lazy_evaluation.py +0 -0
  965. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_leiden_multilayer.py +0 -0
  966. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_link_checker.py +0 -0
  967. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_linter.py +0 -0
  968. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_logging_conversion.py +0 -0
  969. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_main_module.py +0 -0
  970. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_master_regulators_example.py +0 -0
  971. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_math_invariants.py +0 -0
  972. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_mcp_server.py +0 -0
  973. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_meta_analysis.py +0 -0
  974. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_meta_flow_report.py +0 -0
  975. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_metamorphic.py +0 -0
  976. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_metapath2vec.py +0 -0
  977. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_ml_embedding_evaluation.py +0 -0
  978. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_ml_embedding_primitives.py +0 -0
  979. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_monoplex_nx_wrapper.py +0 -0
  980. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_mpc.py +0 -0
  981. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multilayer_centrality.py +0 -0
  982. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multilayer_clustering_coefficients.py +0 -0
  983. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multilayer_cornercases.py +0 -0
  984. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multilayer_edge_fix.py +0 -0
  985. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multilayer_embedding_models.py +0 -0
  986. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multilayer_integration.py +0 -0
  987. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multilayer_leiden_uq.py +0 -0
  988. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multilayer_modularity.py +0 -0
  989. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multilayer_quality_metrics.py +0 -0
  990. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multilayer_visualizations.py +0 -0
  991. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multinet_aggregation.py +0 -0
  992. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multinet_aggregation_additional.py +0 -0
  993. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multiplex_layer_interop.py +0 -0
  994. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multiplex_participation.py +0 -0
  995. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multiplex_properties.py +0 -0
  996. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multirank.py +0 -0
  997. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multixrank.py +0 -0
  998. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_network_conversion.py +0 -0
  999. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_network_version.py +0 -0
  1000. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_networkx_compatibility.py +0 -0
  1001. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_new_algorithms.py +0 -0
  1002. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_new_multilayer_metrics.py +0 -0
  1003. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_node_edge_parity.py +0 -0
  1004. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_norc.py +0 -0
  1005. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_nullmodel_sanity.py +0 -0
  1006. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_nullmodels.py +0 -0
  1007. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_nullmodels_contracts.py +0 -0
  1008. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_nx_compat_extended.py +0 -0
  1009. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_ollivier_ricci_multilayer.py +0 -0
  1010. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_optimizer_submodules.py +0 -0
  1011. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_out_of_core.py +0 -0
  1012. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_parallel.py +0 -0
  1013. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_parallel_execution.py +0 -0
  1014. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_parsers_comprehensive.py +0 -0
  1015. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_parsers_coverage.py +0 -0
  1016. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_partition_uq.py +0 -0
  1017. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_partition_uq_integration.py +0 -0
  1018. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_paths.py +0 -0
  1019. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_paths_additional.py +0 -0
  1020. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_paths_contracts.py +0 -0
  1021. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_paths_executor.py +0 -0
  1022. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_paths_result.py +0 -0
  1023. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_performance_core.py +0 -0
  1024. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_pipeline.py +0 -0
  1025. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_plugin_examples.py +0 -0
  1026. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_plugin_system.py +0 -0
  1027. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_plugins.py +0 -0
  1028. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_plugins_contracts.py +0 -0
  1029. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_profiling.py +0 -0
  1030. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_profiling_additional.py +0 -0
  1031. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_program_cost_executor.py +0 -0
  1032. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_properties.py +0 -0
  1033. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_provenance_canonical.py +0 -0
  1034. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_provenance_replay.py +0 -0
  1035. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_provenance_schema.py +0 -0
  1036. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_public_api_exports.py +0 -0
  1037. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_pymnet_style.py +0 -0
  1038. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_pypi_publish_workflow.py +0 -0
  1039. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_query_algebra.py +0 -0
  1040. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_query_equivalence.py +0 -0
  1041. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_r_interop.py +0 -0
  1042. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_random_generators_additional.py +0 -0
  1043. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_random_generators_extended.py +0 -0
  1044. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_random_walkers.py +0 -0
  1045. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_random_walks.py +0 -0
  1046. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_readme_contributor_onboarding.py +0 -0
  1047. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_readme_flagship_example.py +0 -0
  1048. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_requirements.py +0 -0
  1049. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_result_explain_debug.py +0 -0
  1050. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_ricci_visualization.py +0 -0
  1051. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_robustness.py +0 -0
  1052. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_robustness_additional.py +0 -0
  1053. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_robustness_testing.py +0 -0
  1054. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_root_conftest.py +0 -0
  1055. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_roundtrip_invariants.py +0 -0
  1056. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_run_quickstart_snippets.py +0 -0
  1057. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_sankey_visualization.py +0 -0
  1058. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_sbm_autocommunity.py +0 -0
  1059. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_sbm_generator.py +0 -0
  1060. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_sbm_metrics.py +0 -0
  1061. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_sbm_runner_integration.py +0 -0
  1062. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_schema_and_immutable.py +0 -0
  1063. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_seeding.py +0 -0
  1064. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_selection_uq.py +0 -0
  1065. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_selection_uq_empty_groups.py +0 -0
  1066. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_selection_uq_integration.py +0 -0
  1067. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_semiring_negative_cases.py +0 -0
  1068. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_semiring_pareto.py +0 -0
  1069. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_semiring_registry.py +0 -0
  1070. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_semiring_types.py +0 -0
  1071. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_semiring_verification.py +0 -0
  1072. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_sensitivity_executor.py +0 -0
  1073. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_sidecar.py +0 -0
  1074. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_sir_epidemic.py +0 -0
  1075. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_sir_multiplex.py +0 -0
  1076. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_spectral_multilayer.py +0 -0
  1077. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_statistical_report.py +0 -0
  1078. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_stats_comparison.py +0 -0
  1079. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_stats_core.py +0 -0
  1080. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_stats_edge_cases.py +0 -0
  1081. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_stats_provenance.py +0 -0
  1082. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_stats_provenance_dataclass.py +0 -0
  1083. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_stats_registry.py +0 -0
  1084. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_stats_scalar_uncertainty.py +0 -0
  1085. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_stats_verify.py +0 -0
  1086. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_stratified_uq.py +0 -0
  1087. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_streaming_topk.py +0 -0
  1088. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_successive_halving.py +0 -0
  1089. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_supporting_extended.py +0 -0
  1090. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_supra_matrix_function_centrality.py +0 -0
  1091. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_temporal.py +0 -0
  1092. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_temporal_algorithms.py +0 -0
  1093. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_temporal_builder.py +0 -0
  1094. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_temporal_dsl.py +0 -0
  1095. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_temporal_duration_parsing.py +0 -0
  1096. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_temporal_multinet.py +0 -0
  1097. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_temporal_utils.py +0 -0
  1098. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_temporal_utils_extended.py +0 -0
  1099. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_temporal_view.py +0 -0
  1100. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_temporal_windowed_queries.py +0 -0
  1101. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_tensor_representation.py +0 -0
  1102. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_tutorial_10min.py +0 -0
  1103. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_uncertainty.py +0 -0
  1104. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_uncertainty_additional.py +0 -0
  1105. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_uncertainty_builder_integration.py +0 -0
  1106. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_uncertainty_defaults.py +0 -0
  1107. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_uncertainty_dsl_integration.py +0 -0
  1108. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_uncertainty_engines.py +0 -0
  1109. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_uncertainty_oracles.py +0 -0
  1110. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_uncertainty_runner.py +0 -0
  1111. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_uq_algebra.py +0 -0
  1112. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_uq_integration.py +0 -0
  1113. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_uq_resolution.py +0 -0
  1114. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_uq_spine.py +0 -0
  1115. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_user_journey_simulation.py +0 -0
  1116. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_utils.py +0 -0
  1117. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_utils_coverage.py +0 -0
  1118. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_utils_extended.py +0 -0
  1119. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_utils_search_paths.py +0 -0
  1120. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_validation.py +0 -0
  1121. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_validation_module.py +0 -0
  1122. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_verification_api_differential.py +0 -0
  1123. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_verification_centrality.py +0 -0
  1124. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_verification_communities.py +0 -0
  1125. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_verification_determinism_parallelism.py +0 -0
  1126. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_verification_dsl_equivalence.py +0 -0
  1127. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_verification_metamorphic_harness.py +0 -0
  1128. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_verification_provenance_oracles.py +0 -0
  1129. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_versatility.py +0 -0
  1130. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_visualization_benchmark.py +0 -0
  1131. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_visualization_bezier.py +0 -0
  1132. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_visualization_colors.py +0 -0
  1133. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_visualization_imports.py +0 -0
  1134. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_visualization_layouts.py +0 -0
  1135. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_visualization_multilayer_additional.py +0 -0
  1136. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_visualization_polyfit.py +0 -0
  1137. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_visualization_ricci_layout_helpers.py +0 -0
  1138. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_visualization_supra_heatmap.py +0 -0
  1139. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_visualize_matrix_fix.py +0 -0
  1140. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_workflows.py +0 -0
  1141. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_wrappers_additional.py +0 -0
  1142. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_wrappers_node2vec.py +0 -0
  1143. {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_wrappers_r_interop.py +0 -0
  1144. {py3plex-2.0.0 → 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
+ ```