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.
- py3plex-2.0.1/MANIFEST.in +5 -0
- py3plex-2.0.1/PKG-INFO +385 -0
- py3plex-2.0.1/README.md +281 -0
- py3plex-2.0.1/py3plex/__init__.py +383 -0
- py3plex-2.0.1/py3plex/_parallel.py +281 -0
- py3plex-2.0.1/py3plex/algebra/fixed_point.py +69 -0
- py3plex-2.0.1/py3plex/algebra/paths.py +331 -0
- py3plex-2.0.1/py3plex/algebra/semiring.py +276 -0
- py3plex-2.0.1/py3plex/algebra/witness.py +77 -0
- py3plex-2.0.1/py3plex/algorithms/advanced_random_generators.py +486 -0
- py3plex-2.0.1/py3plex/algorithms/attribute_correlation.py +615 -0
- py3plex-2.0.1/py3plex/algorithms/centrality/approx_pagerank.py +165 -0
- py3plex-2.0.1/py3plex/algorithms/centrality_toolkit.py +471 -0
- py3plex-2.0.1/py3plex/algorithms/community_detection/auto_select.py +560 -0
- py3plex-2.0.1/py3plex/algorithms/community_detection/autocommunity.py +472 -0
- py3plex-2.0.1/py3plex/algorithms/community_detection/autocommunity_executor.py +1260 -0
- py3plex-2.0.1/py3plex/algorithms/community_detection/distributional.py +506 -0
- py3plex-2.0.1/py3plex/algorithms/community_detection/flow_hierarchy.py +868 -0
- py3plex-2.0.1/py3plex/algorithms/community_detection/label_propagation.py +511 -0
- py3plex-2.0.1/py3plex/algorithms/community_detection/leiden_uq.py +636 -0
- py3plex-2.0.1/py3plex/algorithms/community_detection/runner.py +510 -0
- py3plex-2.0.1/py3plex/algorithms/community_detection/sbm_wrapper.py +242 -0
- py3plex-2.0.1/py3plex/algorithms/community_detection/spectral_multilayer.py +821 -0
- py3plex-2.0.1/py3plex/algorithms/community_detection/successive_halving.py +602 -0
- py3plex-2.0.1/py3plex/algorithms/graph_summarization.py +481 -0
- py3plex-2.0.1/py3plex/algorithms/layer_similarity.py +429 -0
- py3plex-2.0.1/py3plex/algorithms/multilayer_algorithms/centrality.py +2400 -0
- py3plex-2.0.1/py3plex/algorithms/multilayer_clustering.py +479 -0
- py3plex-2.0.1/py3plex/algorithms/network_classification/PPR.py +148 -0
- py3plex-2.0.1/py3plex/algorithms/network_classification/label_propagation.py +243 -0
- py3plex-2.0.1/py3plex/algorithms/node_ranking/__init__.py +462 -0
- py3plex-2.0.1/py3plex/algorithms/node_ranking/node_ranking.py +100 -0
- py3plex-2.0.1/py3plex/algorithms/robustness_testing.py +457 -0
- py3plex-2.0.1/py3plex/algorithms/routing/multiplex_paths.py +654 -0
- py3plex-2.0.1/py3plex/algorithms/sbm/inference_vi.py +399 -0
- py3plex-2.0.1/py3plex/algorithms/sbm/model_selection.py +217 -0
- py3plex-2.0.1/py3plex/algorithms/sbm/multilayer_sbm.py +301 -0
- py3plex-2.0.1/py3plex/algorithms/sbm/objectives.py +250 -0
- py3plex-2.0.1/py3plex/algorithms/sbm/uq.py +339 -0
- py3plex-2.0.1/py3plex/algorithms/sbm/utils.py +259 -0
- py3plex-2.0.1/py3plex/algorithms/statistical_report.py +435 -0
- py3plex-2.0.1/py3plex/algorithms/statistics/correlation_networks.py +101 -0
- py3plex-2.0.1/py3plex/algorithms/statistics/multilayer_statistics.py +2401 -0
- py3plex-2.0.1/py3plex/algorithms/temporal/centrality.py +188 -0
- py3plex-2.0.1/py3plex/algorithms/temporal/community.py +261 -0
- py3plex-2.0.1/py3plex/centrality/robustness.py +566 -0
- py3plex-2.0.1/py3plex/claims/generator.py +247 -0
- py3plex-2.0.1/py3plex/claims/learner.py +290 -0
- py3plex-2.0.1/py3plex/claims/types.py +353 -0
- py3plex-2.0.1/py3plex/cli.py +3785 -0
- py3plex-2.0.1/py3plex/comparison/executor.py +126 -0
- py3plex-2.0.1/py3plex/comparison/metrics.py +465 -0
- py3plex-2.0.1/py3plex/comparison/result.py +152 -0
- py3plex-2.0.1/py3plex/compat/convert.py +203 -0
- py3plex-2.0.1/py3plex/compat/converters/dgl_converter.py +66 -0
- py3plex-2.0.1/py3plex/compat/converters/networkx_converter.py +280 -0
- py3plex-2.0.1/py3plex/compat/converters/pyg_converter.py +70 -0
- py3plex-2.0.1/py3plex/compat/converters/scipy_converter.py +319 -0
- py3plex-2.0.1/py3plex/compat/equality.py +290 -0
- py3plex-2.0.1/py3plex/compat/ir.py +675 -0
- py3plex-2.0.1/py3plex/compat/schema.py +303 -0
- py3plex-2.0.1/py3plex/compat/sidecar.py +285 -0
- py3plex-2.0.1/py3plex/config.py +279 -0
- py3plex-2.0.1/py3plex/contracts/contract.py +253 -0
- py3plex-2.0.1/py3plex/contracts/predicates.py +615 -0
- py3plex-2.0.1/py3plex/core/immutable.py +233 -0
- py3plex-2.0.1/py3plex/core/lazy_evaluation.py +264 -0
- py3plex-2.0.1/py3plex/core/multinet.py +4757 -0
- py3plex-2.0.1/py3plex/core/parsers.py +988 -0
- py3plex-2.0.1/py3plex/core/temporal_multinet.py +519 -0
- py3plex-2.0.1/py3plex/counterexamples/engine.py +490 -0
- py3plex-2.0.1/py3plex/counterfactual/comparator.py +373 -0
- py3plex-2.0.1/py3plex/counterfactual/presets.py +183 -0
- py3plex-2.0.1/py3plex/counterfactual/spec.py +531 -0
- py3plex-2.0.1/py3plex/datasets/_loaders.py +291 -0
- py3plex-2.0.1/py3plex/diagnostics/builders.py +325 -0
- py3plex-2.0.1/py3plex/diagnostics/core.py +315 -0
- py3plex-2.0.1/py3plex/diagnostics/utils.py +163 -0
- py3plex-2.0.1/py3plex/dsl/__init__.py +709 -0
- py3plex-2.0.1/py3plex/dsl/algebra.py +353 -0
- py3plex-2.0.1/py3plex/dsl/ast.py +2291 -0
- py3plex-2.0.1/py3plex/dsl/benchmark.py +364 -0
- py3plex-2.0.1/py3plex/dsl/benchmark_result.py +161 -0
- py3plex-2.0.1/py3plex/dsl/builder.py +7486 -0
- py3plex-2.0.1/py3plex/dsl/cache.py +266 -0
- py3plex-2.0.1/py3plex/dsl/community_uq.py +435 -0
- py3plex-2.0.1/py3plex/dsl/compositional_uq.py +351 -0
- py3plex-2.0.1/py3plex/dsl/errors.py +676 -0
- py3plex-2.0.1/py3plex/dsl/executor.py +7356 -0
- py3plex-2.0.1/py3plex/dsl/executor_semiring.py +333 -0
- py3plex-2.0.1/py3plex/dsl/executors/benchmark_executor.py +662 -0
- py3plex-2.0.1/py3plex/dsl/explain.py +549 -0
- py3plex-2.0.1/py3plex/dsl/export.py +389 -0
- py3plex-2.0.1/py3plex/dsl/expressions.py +237 -0
- py3plex-2.0.1/py3plex/dsl/fastpath.py +655 -0
- py3plex-2.0.1/py3plex/dsl/layers.py +604 -0
- py3plex-2.0.1/py3plex/dsl/lint/rules/dsl001_unknown_layer.py +137 -0
- py3plex-2.0.1/py3plex/dsl/lint/rules/dsl201_unsatisfiable.py +117 -0
- py3plex-2.0.1/py3plex/dsl/lint/types.py +85 -0
- py3plex-2.0.1/py3plex/dsl/metrics.py +243 -0
- py3plex-2.0.1/py3plex/dsl/operators.py +241 -0
- py3plex-2.0.1/py3plex/dsl/patterns/__init__.py +40 -0
- py3plex-2.0.1/py3plex/dsl/patterns/builder.py +279 -0
- py3plex-2.0.1/py3plex/dsl/patterns/compiler.py +327 -0
- py3plex-2.0.1/py3plex/dsl/patterns/engine.py +500 -0
- py3plex-2.0.1/py3plex/dsl/patterns/ir.py +399 -0
- py3plex-2.0.1/py3plex/dsl/plan.py +114 -0
- py3plex-2.0.1/py3plex/dsl/planner.py +839 -0
- py3plex-2.0.1/py3plex/dsl/program/cache.py +245 -0
- py3plex-2.0.1/py3plex/dsl/program/cost.py +863 -0
- py3plex-2.0.1/py3plex/dsl/program/diff.py +222 -0
- py3plex-2.0.1/py3plex/dsl/program/executor.py +762 -0
- py3plex-2.0.1/py3plex/dsl/program/explain.py +191 -0
- py3plex-2.0.1/py3plex/dsl/program/program.py +907 -0
- py3plex-2.0.1/py3plex/dsl/program/rewrite.py +1480 -0
- py3plex-2.0.1/py3plex/dsl/program/types.py +1092 -0
- py3plex-2.0.1/py3plex/dsl/provenance.py +544 -0
- py3plex-2.0.1/py3plex/dsl/result.py +2065 -0
- py3plex-2.0.1/py3plex/dsl/selection_uq.py +342 -0
- py3plex-2.0.1/py3plex/dsl/serializer.py +288 -0
- py3plex-2.0.1/py3plex/dsl/uq_algebra.py +897 -0
- py3plex-2.0.1/py3plex/dsl/uq_resolution.py +722 -0
- py3plex-2.0.1/py3plex/dsl/warnings.py +489 -0
- py3plex-2.0.1/py3plex/dsl_legacy.py +2182 -0
- py3plex-2.0.1/py3plex/dynamics/_utils.py +196 -0
- py3plex-2.0.1/py3plex/dynamics/compartmental.py +415 -0
- py3plex-2.0.1/py3plex/dynamics/core.py +677 -0
- py3plex-2.0.1/py3plex/dynamics/executor.py +482 -0
- py3plex-2.0.1/py3plex/dynamics/models.py +685 -0
- py3plex-2.0.1/py3plex/embeddings/cache.py +145 -0
- py3plex-2.0.1/py3plex/embeddings/link_ops.py +155 -0
- py3plex-2.0.1/py3plex/embeddings/metapath2vec.py +614 -0
- py3plex-2.0.1/py3plex/ergonomics.py +388 -0
- py3plex-2.0.1/py3plex/experiments/artifacts.py +214 -0
- py3plex-2.0.1/py3plex/experiments/env.py +74 -0
- py3plex-2.0.1/py3plex/experiments/model.py +304 -0
- py3plex-2.0.1/py3plex/experiments/runner.py +165 -0
- py3plex-2.0.1/py3plex/experiments/store.py +231 -0
- py3plex-2.0.1/py3plex/fast_examples.py +120 -0
- py3plex-2.0.1/py3plex/io/exceptions.py +36 -0
- py3plex-2.0.1/py3plex/io/formats/arrow_format.py +333 -0
- py3plex-2.0.1/py3plex/io/multinet_bridge.py +399 -0
- py3plex-2.0.1/py3plex/meta/builder.py +776 -0
- py3plex-2.0.1/py3plex/meta/result.py +106 -0
- py3plex-2.0.1/py3plex/meta/stats.py +355 -0
- py3plex-2.0.1/py3plex/meta/utils.py +333 -0
- py3plex-2.0.1/py3plex/ml/embedding/utils.py +149 -0
- py3plex-2.0.1/py3plex/nullmodels/executor.py +126 -0
- py3plex-2.0.1/py3plex/nullmodels/models.py +397 -0
- py3plex-2.0.1/py3plex/optimizer/cost_model.py +274 -0
- py3plex-2.0.1/py3plex/optimizer/logical_plan.py +188 -0
- py3plex-2.0.1/py3plex/optimizer/optimizer.py +186 -0
- py3plex-2.0.1/py3plex/optimizer/physical_plan.py +441 -0
- py3plex-2.0.1/py3plex/optimizer/plan_nodes.py +270 -0
- py3plex-2.0.1/py3plex/optimizer/rules.py +536 -0
- py3plex-2.0.1/py3plex/out_of_core/executor.py +861 -0
- py3plex-2.0.1/py3plex/out_of_core/network.py +402 -0
- py3plex-2.0.1/py3plex/out_of_core/readers.py +306 -0
- py3plex-2.0.1/py3plex/out_of_core/spill.py +278 -0
- py3plex-2.0.1/py3plex/paths/algorithms.py +422 -0
- py3plex-2.0.1/py3plex/paths/executor.py +112 -0
- py3plex-2.0.1/py3plex/pipeline.py +757 -0
- py3plex-2.0.1/py3plex/plugins/base.py +258 -0
- py3plex-2.0.1/py3plex/provenance/bundle.py +217 -0
- py3plex-2.0.1/py3plex/provenance/capture.py +276 -0
- py3plex-2.0.1/py3plex/provenance/replay.py +252 -0
- py3plex-2.0.1/py3plex/provenance/schema.py +342 -0
- py3plex-2.0.1/py3plex/requirements.py +842 -0
- py3plex-2.0.1/py3plex/selection/capabilities.py +311 -0
- py3plex-2.0.1/py3plex/selection/community_registry.py +282 -0
- py3plex-2.0.1/py3plex/selection/evaluate.py +278 -0
- py3plex-2.0.1/py3plex/selection/result.py +331 -0
- py3plex-2.0.1/py3plex/semiring/core.py +383 -0
- py3plex-2.0.1/py3plex/semiring/pareto.py +138 -0
- py3plex-2.0.1/py3plex/semiring/types.py +47 -0
- py3plex-2.0.1/py3plex/sensitivity/executor.py +350 -0
- py3plex-2.0.1/py3plex/sensitivity/metrics.py +287 -0
- py3plex-2.0.1/py3plex/sensitivity/perturbations.py +263 -0
- py3plex-2.0.1/py3plex/sensitivity/types.py +204 -0
- py3plex-2.0.1/py3plex/stats/provenance.py +79 -0
- py3plex-2.0.1/py3plex/stats/registry.py +236 -0
- py3plex-2.0.1/py3plex/stats/uncertainty.py +527 -0
- py3plex-2.0.1/py3plex/temporal_view.py +277 -0
- py3plex-2.0.1/py3plex/uncertainty/bootstrap.py +431 -0
- py3plex-2.0.1/py3plex/uncertainty/community_ensemble.py +605 -0
- py3plex-2.0.1/py3plex/uncertainty/community_result.py +680 -0
- py3plex-2.0.1/py3plex/uncertainty/estimation.py +543 -0
- py3plex-2.0.1/py3plex/uncertainty/noise_models.py +510 -0
- py3plex-2.0.1/py3plex/uncertainty/null_models.py +496 -0
- py3plex-2.0.1/py3plex/uncertainty/partition_metrics.py +334 -0
- py3plex-2.0.1/py3plex/uncertainty/partition_reducers.py +851 -0
- py3plex-2.0.1/py3plex/uncertainty/partition_uq.py +566 -0
- py3plex-2.0.1/py3plex/uncertainty/resampling_graph.py +286 -0
- py3plex-2.0.1/py3plex/uncertainty/runner.py +178 -0
- py3plex-2.0.1/py3plex/uncertainty/selection_execution.py +280 -0
- py3plex-2.0.1/py3plex/uncertainty/selection_reducers.py +507 -0
- py3plex-2.0.1/py3plex/uncertainty/stratification.py +364 -0
- py3plex-2.0.1/py3plex/utils.py +445 -0
- py3plex-2.0.1/py3plex/visualization/benchmark_visualizations.py +301 -0
- py3plex-2.0.1/py3plex/visualization/bezier.py +175 -0
- py3plex-2.0.1/py3plex/visualization/multilayer.py +2549 -0
- py3plex-2.0.1/py3plex/visualization/pymnet_style.py +686 -0
- py3plex-2.0.1/py3plex/visualization/sankey.py +254 -0
- py3plex-2.0.1/py3plex.egg-info/PKG-INFO +385 -0
- py3plex-2.0.1/py3plex.egg-info/SOURCES.txt +930 -0
- py3plex-2.0.1/py3plex.egg-info/requires.txt +94 -0
- py3plex-2.0.1/py3plex_mcp/__init__.py +24 -0
- py3plex-2.0.1/pyproject.toml +321 -0
- py3plex-2.0.1/tests/test_book_manuscript_integrity.py +189 -0
- py3plex-2.0.1/tests/test_dependency_cleanup.py +38 -0
- py3plex-2.0.1/tests/test_dsl_ast_immutability.py +154 -0
- py3plex-2.0.1/tests/test_dsl_compiler_explain.py +175 -0
- py3plex-2.0.1/tests/test_dsl_compiler_pipeline.py +242 -0
- py3plex-2.0.1/tests/test_dsl_layer_resolution.py +182 -0
- py3plex-2.0.1/tests/test_dsl_metric_registry.py +171 -0
- py3plex-2.0.1/tests/test_dsl_patterns.py +589 -0
- py3plex-2.0.1/tests/test_dsl_patterns_correctness.py +247 -0
- py3plex-2.0.1/tests/test_dsl_planner_config.py +167 -0
- py3plex-2.0.1/tests/test_dynamics_metamorphic.py +327 -0
- py3plex-2.0.1/tests/test_meta_utils.py +39 -0
- py3plex-2.0.1/tests/test_multilayer_statistics.py +849 -0
- py3plex-2.0.1/tests/test_node_ranking_comprehensive.py +299 -0
- py3plex-2.0.1/tests/test_program.py +556 -0
- py3plex-2.0.1/tests/test_sir_long_convergence.py +492 -0
- py3plex-2.0.1/tests/test_version_consistency.py +97 -0
- py3plex-2.0.1/tests/test_wrappers_benchmark_nodes.py +298 -0
- py3plex-2.0.0/MANIFEST.in +0 -2
- py3plex-2.0.0/PKG-INFO +0 -388
- py3plex-2.0.0/README.md +0 -289
- py3plex-2.0.0/py3plex/__init__.py +0 -383
- py3plex-2.0.0/py3plex/_parallel.py +0 -272
- py3plex-2.0.0/py3plex/algebra/fixed_point.py +0 -70
- py3plex-2.0.0/py3plex/algebra/paths.py +0 -332
- py3plex-2.0.0/py3plex/algebra/semiring.py +0 -276
- py3plex-2.0.0/py3plex/algebra/witness.py +0 -77
- py3plex-2.0.0/py3plex/algorithms/advanced_random_generators.py +0 -487
- py3plex-2.0.0/py3plex/algorithms/attribute_correlation.py +0 -615
- py3plex-2.0.0/py3plex/algorithms/centrality/approx_pagerank.py +0 -166
- py3plex-2.0.0/py3plex/algorithms/centrality_toolkit.py +0 -471
- py3plex-2.0.0/py3plex/algorithms/community_detection/auto_select.py +0 -560
- py3plex-2.0.0/py3plex/algorithms/community_detection/autocommunity.py +0 -474
- py3plex-2.0.0/py3plex/algorithms/community_detection/autocommunity_executor.py +0 -1260
- py3plex-2.0.0/py3plex/algorithms/community_detection/distributional.py +0 -504
- py3plex-2.0.0/py3plex/algorithms/community_detection/flow_hierarchy.py +0 -869
- py3plex-2.0.0/py3plex/algorithms/community_detection/label_propagation.py +0 -511
- py3plex-2.0.0/py3plex/algorithms/community_detection/leiden_uq.py +0 -640
- py3plex-2.0.0/py3plex/algorithms/community_detection/runner.py +0 -510
- py3plex-2.0.0/py3plex/algorithms/community_detection/sbm_wrapper.py +0 -243
- py3plex-2.0.0/py3plex/algorithms/community_detection/spectral_multilayer.py +0 -821
- py3plex-2.0.0/py3plex/algorithms/community_detection/successive_halving.py +0 -603
- py3plex-2.0.0/py3plex/algorithms/graph_summarization.py +0 -482
- py3plex-2.0.0/py3plex/algorithms/layer_similarity.py +0 -432
- py3plex-2.0.0/py3plex/algorithms/multilayer_algorithms/centrality.py +0 -2400
- py3plex-2.0.0/py3plex/algorithms/multilayer_clustering.py +0 -479
- py3plex-2.0.0/py3plex/algorithms/network_classification/PPR.py +0 -148
- py3plex-2.0.0/py3plex/algorithms/network_classification/label_propagation.py +0 -242
- py3plex-2.0.0/py3plex/algorithms/node_ranking/__init__.py +0 -414
- py3plex-2.0.0/py3plex/algorithms/node_ranking/node_ranking.py +0 -256
- py3plex-2.0.0/py3plex/algorithms/robustness_testing.py +0 -458
- py3plex-2.0.0/py3plex/algorithms/routing/multiplex_paths.py +0 -655
- py3plex-2.0.0/py3plex/algorithms/sbm/inference_vi.py +0 -399
- py3plex-2.0.0/py3plex/algorithms/sbm/model_selection.py +0 -218
- py3plex-2.0.0/py3plex/algorithms/sbm/multilayer_sbm.py +0 -303
- py3plex-2.0.0/py3plex/algorithms/sbm/objectives.py +0 -251
- py3plex-2.0.0/py3plex/algorithms/sbm/uq.py +0 -339
- py3plex-2.0.0/py3plex/algorithms/sbm/utils.py +0 -259
- py3plex-2.0.0/py3plex/algorithms/statistical_report.py +0 -437
- py3plex-2.0.0/py3plex/algorithms/statistics/correlation_networks.py +0 -85
- py3plex-2.0.0/py3plex/algorithms/statistics/multilayer_statistics.py +0 -2393
- py3plex-2.0.0/py3plex/algorithms/temporal/centrality.py +0 -190
- py3plex-2.0.0/py3plex/algorithms/temporal/community.py +0 -262
- py3plex-2.0.0/py3plex/centrality/robustness.py +0 -583
- py3plex-2.0.0/py3plex/claims/generator.py +0 -247
- py3plex-2.0.0/py3plex/claims/learner.py +0 -293
- py3plex-2.0.0/py3plex/claims/types.py +0 -353
- py3plex-2.0.0/py3plex/cli.py +0 -3788
- py3plex-2.0.0/py3plex/comparison/executor.py +0 -127
- py3plex-2.0.0/py3plex/comparison/metrics.py +0 -465
- py3plex-2.0.0/py3plex/comparison/result.py +0 -152
- py3plex-2.0.0/py3plex/compat/convert.py +0 -204
- py3plex-2.0.0/py3plex/compat/converters/dgl_converter.py +0 -66
- py3plex-2.0.0/py3plex/compat/converters/networkx_converter.py +0 -275
- py3plex-2.0.0/py3plex/compat/converters/pyg_converter.py +0 -70
- py3plex-2.0.0/py3plex/compat/converters/scipy_converter.py +0 -321
- py3plex-2.0.0/py3plex/compat/equality.py +0 -290
- py3plex-2.0.0/py3plex/compat/ir.py +0 -679
- py3plex-2.0.0/py3plex/compat/schema.py +0 -306
- py3plex-2.0.0/py3plex/compat/sidecar.py +0 -243
- py3plex-2.0.0/py3plex/config.py +0 -279
- py3plex-2.0.0/py3plex/contracts/contract.py +0 -253
- py3plex-2.0.0/py3plex/contracts/predicates.py +0 -615
- py3plex-2.0.0/py3plex/core/immutable.py +0 -233
- py3plex-2.0.0/py3plex/core/lazy_evaluation.py +0 -265
- py3plex-2.0.0/py3plex/core/multinet.py +0 -4754
- py3plex-2.0.0/py3plex/core/parsers.py +0 -985
- py3plex-2.0.0/py3plex/core/temporal_multinet.py +0 -520
- py3plex-2.0.0/py3plex/counterexamples/engine.py +0 -490
- py3plex-2.0.0/py3plex/counterfactual/comparator.py +0 -373
- py3plex-2.0.0/py3plex/counterfactual/presets.py +0 -188
- py3plex-2.0.0/py3plex/counterfactual/spec.py +0 -531
- py3plex-2.0.0/py3plex/datasets/_loaders.py +0 -291
- py3plex-2.0.0/py3plex/diagnostics/builders.py +0 -325
- py3plex-2.0.0/py3plex/diagnostics/core.py +0 -315
- py3plex-2.0.0/py3plex/diagnostics/utils.py +0 -163
- py3plex-2.0.0/py3plex/dsl/__init__.py +0 -636
- py3plex-2.0.0/py3plex/dsl/algebra.py +0 -354
- py3plex-2.0.0/py3plex/dsl/ast.py +0 -2292
- py3plex-2.0.0/py3plex/dsl/benchmark.py +0 -364
- py3plex-2.0.0/py3plex/dsl/benchmark_result.py +0 -161
- py3plex-2.0.0/py3plex/dsl/builder.py +0 -7458
- py3plex-2.0.0/py3plex/dsl/cache.py +0 -266
- py3plex-2.0.0/py3plex/dsl/community_uq.py +0 -438
- py3plex-2.0.0/py3plex/dsl/compositional_uq.py +0 -357
- py3plex-2.0.0/py3plex/dsl/errors.py +0 -676
- py3plex-2.0.0/py3plex/dsl/executor.py +0 -7328
- py3plex-2.0.0/py3plex/dsl/executor_semiring.py +0 -335
- py3plex-2.0.0/py3plex/dsl/executors/benchmark_executor.py +0 -664
- py3plex-2.0.0/py3plex/dsl/explain.py +0 -549
- py3plex-2.0.0/py3plex/dsl/export.py +0 -390
- py3plex-2.0.0/py3plex/dsl/expressions.py +0 -237
- py3plex-2.0.0/py3plex/dsl/fastpath.py +0 -655
- py3plex-2.0.0/py3plex/dsl/layers.py +0 -605
- py3plex-2.0.0/py3plex/dsl/lint/rules/dsl001_unknown_layer.py +0 -134
- py3plex-2.0.0/py3plex/dsl/lint/rules/dsl201_unsatisfiable.py +0 -117
- py3plex-2.0.0/py3plex/dsl/lint/types.py +0 -85
- py3plex-2.0.0/py3plex/dsl/patterns/__init__.py +0 -66
- py3plex-2.0.0/py3plex/dsl/patterns/builder.py +0 -502
- py3plex-2.0.0/py3plex/dsl/patterns/compiler.py +0 -233
- py3plex-2.0.0/py3plex/dsl/patterns/engine.py +0 -528
- py3plex-2.0.0/py3plex/dsl/patterns/ir.py +0 -349
- py3plex-2.0.0/py3plex/dsl/planner.py +0 -840
- py3plex-2.0.0/py3plex/dsl/program/cache.py +0 -246
- py3plex-2.0.0/py3plex/dsl/program/cost.py +0 -866
- py3plex-2.0.0/py3plex/dsl/program/diff.py +0 -222
- py3plex-2.0.0/py3plex/dsl/program/executor.py +0 -762
- py3plex-2.0.0/py3plex/dsl/program/explain.py +0 -192
- py3plex-2.0.0/py3plex/dsl/program/program.py +0 -706
- py3plex-2.0.0/py3plex/dsl/program/rewrite.py +0 -1489
- py3plex-2.0.0/py3plex/dsl/program/types.py +0 -1100
- py3plex-2.0.0/py3plex/dsl/provenance.py +0 -544
- py3plex-2.0.0/py3plex/dsl/result.py +0 -2191
- py3plex-2.0.0/py3plex/dsl/selection_uq.py +0 -343
- py3plex-2.0.0/py3plex/dsl/serializer.py +0 -289
- py3plex-2.0.0/py3plex/dsl/uq_algebra.py +0 -897
- py3plex-2.0.0/py3plex/dsl/uq_resolution.py +0 -723
- py3plex-2.0.0/py3plex/dsl/warnings.py +0 -489
- py3plex-2.0.0/py3plex/dsl_legacy.py +0 -2182
- py3plex-2.0.0/py3plex/dynamics/_utils.py +0 -197
- py3plex-2.0.0/py3plex/dynamics/compartmental.py +0 -415
- py3plex-2.0.0/py3plex/dynamics/core.py +0 -678
- py3plex-2.0.0/py3plex/dynamics/executor.py +0 -482
- py3plex-2.0.0/py3plex/dynamics/models.py +0 -685
- py3plex-2.0.0/py3plex/embeddings/cache.py +0 -146
- py3plex-2.0.0/py3plex/embeddings/link_ops.py +0 -155
- py3plex-2.0.0/py3plex/embeddings/metapath2vec.py +0 -614
- py3plex-2.0.0/py3plex/ergonomics.py +0 -388
- py3plex-2.0.0/py3plex/experiments/artifacts.py +0 -217
- py3plex-2.0.0/py3plex/experiments/env.py +0 -75
- py3plex-2.0.0/py3plex/experiments/model.py +0 -304
- py3plex-2.0.0/py3plex/experiments/runner.py +0 -166
- py3plex-2.0.0/py3plex/experiments/store.py +0 -231
- py3plex-2.0.0/py3plex/fast_examples.py +0 -121
- py3plex-2.0.0/py3plex/io/exceptions.py +0 -36
- py3plex-2.0.0/py3plex/io/formats/arrow_format.py +0 -333
- py3plex-2.0.0/py3plex/io/multinet_bridge.py +0 -399
- py3plex-2.0.0/py3plex/meta/builder.py +0 -776
- py3plex-2.0.0/py3plex/meta/result.py +0 -107
- py3plex-2.0.0/py3plex/meta/stats.py +0 -356
- py3plex-2.0.0/py3plex/meta/utils.py +0 -336
- py3plex-2.0.0/py3plex/ml/embedding/utils.py +0 -149
- py3plex-2.0.0/py3plex/nullmodels/executor.py +0 -126
- py3plex-2.0.0/py3plex/nullmodels/models.py +0 -397
- py3plex-2.0.0/py3plex/optimizer/cost_model.py +0 -274
- py3plex-2.0.0/py3plex/optimizer/logical_plan.py +0 -188
- py3plex-2.0.0/py3plex/optimizer/optimizer.py +0 -188
- py3plex-2.0.0/py3plex/optimizer/physical_plan.py +0 -460
- py3plex-2.0.0/py3plex/optimizer/plan_nodes.py +0 -277
- py3plex-2.0.0/py3plex/optimizer/rules.py +0 -552
- py3plex-2.0.0/py3plex/out_of_core/executor.py +0 -865
- py3plex-2.0.0/py3plex/out_of_core/network.py +0 -405
- py3plex-2.0.0/py3plex/out_of_core/readers.py +0 -308
- py3plex-2.0.0/py3plex/out_of_core/spill.py +0 -280
- py3plex-2.0.0/py3plex/paths/algorithms.py +0 -422
- py3plex-2.0.0/py3plex/paths/executor.py +0 -112
- py3plex-2.0.0/py3plex/pipeline.py +0 -757
- py3plex-2.0.0/py3plex/plugins/base.py +0 -258
- py3plex-2.0.0/py3plex/provenance/bundle.py +0 -219
- py3plex-2.0.0/py3plex/provenance/capture.py +0 -276
- py3plex-2.0.0/py3plex/provenance/replay.py +0 -253
- py3plex-2.0.0/py3plex/provenance/schema.py +0 -342
- py3plex-2.0.0/py3plex/requirements.py +0 -842
- py3plex-2.0.0/py3plex/selection/capabilities.py +0 -311
- py3plex-2.0.0/py3plex/selection/community_registry.py +0 -283
- py3plex-2.0.0/py3plex/selection/evaluate.py +0 -278
- py3plex-2.0.0/py3plex/selection/result.py +0 -332
- py3plex-2.0.0/py3plex/semiring/core.py +0 -383
- py3plex-2.0.0/py3plex/semiring/pareto.py +0 -139
- py3plex-2.0.0/py3plex/semiring/types.py +0 -47
- py3plex-2.0.0/py3plex/sensitivity/executor.py +0 -352
- py3plex-2.0.0/py3plex/sensitivity/metrics.py +0 -287
- py3plex-2.0.0/py3plex/sensitivity/perturbations.py +0 -264
- py3plex-2.0.0/py3plex/sensitivity/types.py +0 -205
- py3plex-2.0.0/py3plex/stats/provenance.py +0 -80
- py3plex-2.0.0/py3plex/stats/registry.py +0 -236
- py3plex-2.0.0/py3plex/stats/uncertainty.py +0 -521
- py3plex-2.0.0/py3plex/temporal_view.py +0 -277
- py3plex-2.0.0/py3plex/uncertainty/bootstrap.py +0 -433
- py3plex-2.0.0/py3plex/uncertainty/community_ensemble.py +0 -606
- py3plex-2.0.0/py3plex/uncertainty/community_result.py +0 -680
- py3plex-2.0.0/py3plex/uncertainty/estimation.py +0 -510
- py3plex-2.0.0/py3plex/uncertainty/noise_models.py +0 -513
- py3plex-2.0.0/py3plex/uncertainty/null_models.py +0 -497
- py3plex-2.0.0/py3plex/uncertainty/partition_metrics.py +0 -335
- py3plex-2.0.0/py3plex/uncertainty/partition_reducers.py +0 -853
- py3plex-2.0.0/py3plex/uncertainty/partition_uq.py +0 -571
- py3plex-2.0.0/py3plex/uncertainty/resampling_graph.py +0 -287
- py3plex-2.0.0/py3plex/uncertainty/runner.py +0 -180
- py3plex-2.0.0/py3plex/uncertainty/selection_execution.py +0 -281
- py3plex-2.0.0/py3plex/uncertainty/selection_reducers.py +0 -507
- py3plex-2.0.0/py3plex/uncertainty/stratification.py +0 -365
- py3plex-2.0.0/py3plex/utils.py +0 -445
- py3plex-2.0.0/py3plex/visualization/benchmark_visualizations.py +0 -301
- py3plex-2.0.0/py3plex/visualization/bezier.py +0 -157
- py3plex-2.0.0/py3plex/visualization/multilayer.py +0 -2549
- py3plex-2.0.0/py3plex/visualization/pymnet_style.py +0 -688
- py3plex-2.0.0/py3plex/visualization/sankey.py +0 -254
- py3plex-2.0.0/py3plex.egg-info/PKG-INFO +0 -388
- py3plex-2.0.0/py3plex.egg-info/SOURCES.txt +0 -916
- py3plex-2.0.0/py3plex.egg-info/requires.txt +0 -88
- py3plex-2.0.0/py3plex_mcp/__init__.py +0 -24
- py3plex-2.0.0/pyproject.toml +0 -311
- py3plex-2.0.0/tests/test_book_manuscript_integrity.py +0 -53
- py3plex-2.0.0/tests/test_dsl_patterns.py +0 -589
- py3plex-2.0.0/tests/test_multilayer_statistics.py +0 -825
- py3plex-2.0.0/tests/test_node_ranking_comprehensive.py +0 -246
- py3plex-2.0.0/tests/test_program.py +0 -518
- py3plex-2.0.0/tests/test_version_consistency.py +0 -93
- py3plex-2.0.0/tests/test_wrappers_benchmark_nodes.py +0 -297
- {py3plex-2.0.0 → py3plex-2.0.1}/LICENSE +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/__main__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/agent.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algebra/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algebra/backend.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algebra/closure.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algebra/lift.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algebra/registry.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/centrality/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/centrality/approx_betweenness.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/centrality/approx_closeness.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/centrality/explain.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_comparison.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/NoRC.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/budget.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/community_louvain.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/community_measures.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/community_ranking.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/community_wrapper.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/conftest.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/examples/python/example-bipartite.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/examples/python/example-file-io.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/examples/python/example-multiplex.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/examples/python/example-networkx.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/examples/python/example-simple.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/examples/python/example-trigram-expanded.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/examples/python/example-trigram.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/infomap.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/infomap/interfaces/python/setup.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/leiden_multilayer.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/multilayer_benchmark.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/multilayer_modularity.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/multilayer_quality_metrics.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/node_ranking.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/community_detection/sbm_metrics.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/curvature/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/curvature/ollivier_ricci_multilayer.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/general/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/general/benchmark_classification.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/general/walkers.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/__main__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/assets/builtin.n3 +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/converters.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/example.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/helpers.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/kb.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/load.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/predicate.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/rule.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/settings.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/core/term_parsers.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/learners/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/learners/bottomup.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/learners/learner.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/learners/optimal.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/stats/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/stats/adjustment.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/stats/scorefunctions.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/stats/significance.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/hedwig/stats/validate.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/meta_flow_report.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/multicentrality.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/multilayer_algorithms/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/multilayer_algorithms/entanglement.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/multilayer_algorithms/multirank.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/multilayer_algorithms/multixrank.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/multilayer_algorithms/supra_matrix_function_centrality.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/multilayer_algorithms/versatility.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/network_classification/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/requirements_registry.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/routing/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/sbm/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/sbm/conversions.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/sbm/diagnostics.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/sir_multiplex.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/statistics/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/statistics/basic_statistics.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/statistics/bayesian_distances.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/statistics/bayesiantests.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/statistics/critical_distances.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/statistics/enrichment_modules.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/statistics/powerlaw.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/statistics/stats_comparison.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/statistics/topology.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/temporal/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/temporal_multiplex/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/algorithms/term_parsers/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/alignment/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/alignment/features.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/alignment/metrics.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/alignment/solvers.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/benchmarks/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/benchmarks/budget.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/benchmarks/metrics.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/benchmarks/runners.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/centrality/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/claims/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/claims/scorer.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/comparison/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/compat/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/compat/converters/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/compat/converters/igraph_converter.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/compat/exceptions.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/contracts/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/contracts/engine.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/contracts/failure_modes.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/contracts/result.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/core/HINMINE/IO.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/core/HINMINE/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/core/HINMINE/dataStructures.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/core/HINMINE/decomposition.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/core/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/core/converters.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/core/nx_compat.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/core/random_generators.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/core/schema_validation.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/core/supporting.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/core/types.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/counterexamples/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/counterexamples/claim_lang.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/counterexamples/ddmin.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/counterexamples/types.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/counterexamples/witness.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/counterfactual/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/counterfactual/engine.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/counterfactual/result.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/datasets/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/datasets/_data/aarhus_cs.edges +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/datasets/_data/synthetic_multilayer.edges +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/datasets/_generators.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/diagnostics/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/diagnostics/codes.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/attribution.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/communities.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/context.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/executors/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/lint/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/lint/diagnostic.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/lint/lint_context.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/lint/rules/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/lint/rules/base.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/lint/rules/dsl002_unknown_attribute.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/lint/rules/dsl101_type_mismatch.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/lint/rules/dsl202_redundant.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/lint/rules/perf301_full_scan.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/lint/rules/perf302_cross_layer.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/lint/schema.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/lint/type_resolver.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/operator_registry.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/patterns/result.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/predictive.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/program/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/program/distribution.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/reduction.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dsl/registry.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dynamics/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dynamics/ast.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dynamics/builder.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dynamics/config.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dynamics/errors.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dynamics/processes.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dynamics/registry.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dynamics/result.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/dynamics/serializer.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/embeddings/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/embeddings/base.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/embeddings/netmf.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/errors.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/exceptions.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/experiments/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/experiments/cli.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/experiments/errors.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/experiments/utils.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/graph_ops.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/io/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/io/api.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/io/canonical_format.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/io/converters.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/io/formats/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/io/formats/csv_format.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/io/formats/json_format.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/io/parquet_format.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/io/schema.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/lab/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/lab/base.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/linter.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/logging_config.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/meta/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/ml/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/ml/embedding/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/ml/embedding/base.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/ml/embedding/deepwalk.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/ml/embedding/evaluation.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/ml/embedding/line.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/ml/embedding/metapath2vec.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/ml/embedding/multiplex.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/ml/embedding/netmf.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/ml/embedding/node2vec.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/ml/embedding/similarity.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/ml/embedding/trainer.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/multinet/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/multinet/aggregation.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/nullmodels/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/nullmodels/result.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/optimizer/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/out_of_core/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/out_of_core/cli.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/out_of_core/errors.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/out_of_core/operators.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/out_of_core/schema.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/out_of_core/utils.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/paths/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/paths/result.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/plugins/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/plugins/examples.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/plugins/registry.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/profiling.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/provenance/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/robustness/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/robustness/experiments.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/robustness/perturbations.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/runtime/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/runtime/capabilities.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/selection/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/selection/metric_registry.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/selection/wins.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/semiring/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/semiring/engine.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/semiring/registry.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/sensitivity/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/stats/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/stats/statvalue.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/temporal_utils.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/temporal_utils_extended.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/uncertainty/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/uncertainty/ci_utils.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/uncertainty/context.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/uncertainty/partition.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/uncertainty/partition_types.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/uncertainty/plan.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/uncertainty/reducers/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/uncertainty/reducers/base.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/uncertainty/selection_types.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/uncertainty/selection_uq.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/uncertainty/types.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/validation.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/visualization/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/visualization/colors.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/visualization/drawing_machinery.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/visualization/embedding_visualization/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/visualization/embedding_visualization/embedding_tools.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/visualization/embedding_visualization/embedding_visualization.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/visualization/fa2/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/visualization/fa2/fa2util.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/visualization/fa2/forceatlas2.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/visualization/layout_algorithms.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/visualization/polyfit.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/visualization/ricci_layout.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/visualization/ricci_multilayer_vis.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/workflows.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/wrappers/__init__.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/wrappers/benchmark_nodes.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/wrappers/r_interop.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex/wrappers/train_node2vec_embedding.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex.egg-info/dependency_links.txt +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex.egg-info/entry_points.txt +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex.egg-info/not-zip-safe +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex.egg-info/top_level.txt +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex_mcp/errors.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex_mcp/registry.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex_mcp/safe_paths.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex_mcp/schemas.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/py3plex_mcp/server.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/setup.cfg +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_advanced_metrics_properties.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_agent_api.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_agents_documentation_claims.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_agents_ergonomics_features.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_agents_golden_paths.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_aggregation.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_algebra_backend.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_algebra_core.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_algebra_fixed_point.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_algebra_paths.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_algebra_registry.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_algebra_witness.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_algorithm_properties.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_algorithms_attribute_correlation.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_algorithms_correlation_networks.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_algorithms_init.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_algorithms_random_generators.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_algorithms_requirements_registry.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_algorithms_statistics_bayesian_distances.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_alignment.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_alignment_contracts.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_alignment_correctness_additional.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_approximate_centrality.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_ast_roundtrip.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_ast_roundtrip_integration.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_attribute_correlation.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_attribute_correlation_contracts.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_auto_community.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_autocommunity_benchmarks.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_autocommunity_executor.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_autocommunity_meta.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_autocommunity_successive_halving.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_bayesian_distances.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_bench_aggregation_unit.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_benchmark_budget_fairness.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_benchmark_dsl_basic.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_benchmark_integration.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_benchmark_multiplex_centrality.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_benchmark_time.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_benchmarks_budget.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_benchmarks_init.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_book_conf.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_book_snippets.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_builder_dsl_mutate.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_capabilities_basic.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_capabilities_optional_missing.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_centrality_explain.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_centrality_explain_integration.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_centrality_robustness.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_centrality_robustness_oracles.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_centrality_uncertainty.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_centrality_weight_handling.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_check_api_consistency.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_check_doc_coverage.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_check_type_coverage.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_ci_python_versions.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_claim_learning.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_claims_types.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_cli.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_cli_check.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_cli_ergonomics.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_cli_piping.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_clustering_multilayer.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_code_improvements.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_community_detection_modules.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_community_distribution.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_community_measures.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_comparison.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_comparison_executor.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_comparison_metrics.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_comparison_metrics_additional.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_comparison_result.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_comparison_uninitialized_and_resistance_oracles.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_compat_exceptions.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_compat_roundtrip.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_config_api.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_config_benchmark.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_contracts.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_contracts_basic.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_contracts_extended.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_contracts_failure_modes.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_contracts_integration.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_core_functionality.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_core_immutable.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_core_lazy_evaluation.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_core_multinet_and_parsers.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_core_multinet_correctness.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_core_multiplex_edges.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_core_schema_validation.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_core_supporting.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_correlation_networks.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_counterexamples.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_counterexamples_properties.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_counterfactual.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_counterfactual_presets.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_coverage_grouping.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_create_mosaic_banner.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_create_showcase_flow.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_crosshair_pure_functions.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_data_files_presence.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_datasets.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_datasets_contracts.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_datasets_oracles.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_degenerate_networks.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_determinism_randomness.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_diagnostics.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_diagnostics_utils.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_doc_conf.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_docs_embeddings_section.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_docs_examples.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_docs_quality_pass.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_doctests.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dplyr_integration.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_aggregation_enhancements.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_ast_equivalence.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_auto_community.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_communities.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_community_filtering.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_community_uq_integration.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_compact_compute.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_compositional_uq.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_condition_semantics.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_d_factory.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_documentation_examples.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_dplyr_style.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_dynamics_integration.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_edge_grouping_coverage.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_edge_queries.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_enhancements.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_ergonomics.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_errors.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_errors_extended.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_executor_additional.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_explain.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_export.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_expressions.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_extensions.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_graphops_equivalence.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_grouping_coverage.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_interactive.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_joins.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_layer_selection.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_layer_set_algebra.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_legacy_approximate.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_legacy_edges.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_lint.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_operators.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_patterns_quick_reference.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_pipes.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_planner.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_predict_reduce.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_program_rewrite.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_program_types.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_progress_logging.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_properties.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_provenance.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_query_optimization.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_query_zoo.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_result_algebra_edge_cases.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_selection_fastpath.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_semiring_integration.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_serializer.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_smart_defaults.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_temporal_range_execution.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_uncertainty.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_uq_ergonomics.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_uq_propagation.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_v2.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dsl_zoo_features.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dynamics.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dynamics_algorithm_contracts.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dynamics_config_and_results_correctness.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dynamics_conservation.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dynamics_core.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dynamics_executor_edge_cases.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dynamics_parallel_determinism.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dynamics_reference_runs.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dynamics_uq_integration.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_dynamics_utils.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_edge_cases.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_edgelist_format.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_embeddings_direct_units.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_ergonomic_helpers.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_ergonomics.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_ergonomics_helpers.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_errors.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_CBSSD.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_community_detection.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_decomposition_and_classification.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_decomposition_ground_truth.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_dsl_builder_api.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_dynamics_core_examples.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_embedding_construction.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_embedding_visualization.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_incidence_gadget_encoding.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_interactive_multilayer.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_inverse_network.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_layer_extraction.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_manipulation.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_multilayer_vectorized_aggregation.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_multiplex_aggregate.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_multiplex_dynamics.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_n2v_embedding.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_network_decomposition.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_network_decomposition_meta_paths.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_numeric_encoding.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_pattern_matching.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_example_ppr.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_examples_zoo_consolidation.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_exception_taxonomy.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_exceptions.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_experiments.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_explain_attribution.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_fast_examples.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_flagship_progress_demo.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_flow_hierarchy.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_fuzzing_properties.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_generate_all_outputs.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_generate_quickstart_outputs.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_generate_visualization_images.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_golden_toy_examples.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_graph_ops.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_graph_summarization.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_hedwig_adjustment.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_hedwig_significance.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_improved_errors.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_incidence_gadget_encoding.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_infomap_fix.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_interlayer_links_fix.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_io_api_edge_cases.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_io_arrow.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_io_contracts_additional.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_io_converters.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_io_exceptions.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_io_integration.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_io_roundtrip.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_io_schema.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_issue_19_fix.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_lab.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_lab_additional.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_lab_correctness.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_label_propagation.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_layer_extraction_fix.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_layer_similarity.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_layout_algorithms.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_lazy_evaluation.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_leiden_multilayer.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_link_checker.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_linter.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_logging_conversion.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_main_module.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_master_regulators_example.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_math_invariants.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_mcp_server.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_meta_analysis.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_meta_flow_report.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_metamorphic.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_metapath2vec.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_ml_embedding_evaluation.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_ml_embedding_primitives.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_monoplex_nx_wrapper.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_mpc.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multilayer_centrality.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multilayer_clustering_coefficients.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multilayer_cornercases.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multilayer_edge_fix.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multilayer_embedding_models.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multilayer_integration.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multilayer_leiden_uq.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multilayer_modularity.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multilayer_quality_metrics.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multilayer_visualizations.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multinet_aggregation.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multinet_aggregation_additional.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multiplex_layer_interop.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multiplex_participation.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multiplex_properties.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multirank.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_multixrank.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_network_conversion.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_network_version.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_networkx_compatibility.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_new_algorithms.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_new_multilayer_metrics.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_node_edge_parity.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_norc.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_nullmodel_sanity.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_nullmodels.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_nullmodels_contracts.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_nx_compat_extended.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_ollivier_ricci_multilayer.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_optimizer_submodules.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_out_of_core.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_parallel.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_parallel_execution.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_parsers_comprehensive.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_parsers_coverage.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_partition_uq.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_partition_uq_integration.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_paths.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_paths_additional.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_paths_contracts.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_paths_executor.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_paths_result.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_performance_core.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_pipeline.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_plugin_examples.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_plugin_system.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_plugins.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_plugins_contracts.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_profiling.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_profiling_additional.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_program_cost_executor.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_properties.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_provenance_canonical.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_provenance_replay.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_provenance_schema.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_public_api_exports.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_pymnet_style.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_pypi_publish_workflow.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_query_algebra.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_query_equivalence.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_r_interop.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_random_generators_additional.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_random_generators_extended.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_random_walkers.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_random_walks.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_readme_contributor_onboarding.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_readme_flagship_example.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_requirements.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_result_explain_debug.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_ricci_visualization.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_robustness.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_robustness_additional.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_robustness_testing.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_root_conftest.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_roundtrip_invariants.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_run_quickstart_snippets.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_sankey_visualization.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_sbm_autocommunity.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_sbm_generator.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_sbm_metrics.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_sbm_runner_integration.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_schema_and_immutable.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_seeding.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_selection_uq.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_selection_uq_empty_groups.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_selection_uq_integration.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_semiring_negative_cases.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_semiring_pareto.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_semiring_registry.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_semiring_types.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_semiring_verification.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_sensitivity_executor.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_sidecar.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_sir_epidemic.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_sir_multiplex.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_spectral_multilayer.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_statistical_report.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_stats_comparison.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_stats_core.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_stats_edge_cases.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_stats_provenance.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_stats_provenance_dataclass.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_stats_registry.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_stats_scalar_uncertainty.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_stats_verify.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_stratified_uq.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_streaming_topk.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_successive_halving.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_supporting_extended.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_supra_matrix_function_centrality.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_temporal.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_temporal_algorithms.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_temporal_builder.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_temporal_dsl.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_temporal_duration_parsing.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_temporal_multinet.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_temporal_utils.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_temporal_utils_extended.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_temporal_view.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_temporal_windowed_queries.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_tensor_representation.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_tutorial_10min.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_uncertainty.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_uncertainty_additional.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_uncertainty_builder_integration.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_uncertainty_defaults.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_uncertainty_dsl_integration.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_uncertainty_engines.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_uncertainty_oracles.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_uncertainty_runner.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_uq_algebra.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_uq_integration.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_uq_resolution.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_uq_spine.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_user_journey_simulation.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_utils.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_utils_coverage.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_utils_extended.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_utils_search_paths.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_validation.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_validation_module.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_verification_api_differential.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_verification_centrality.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_verification_communities.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_verification_determinism_parallelism.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_verification_dsl_equivalence.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_verification_metamorphic_harness.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_verification_provenance_oracles.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_versatility.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_visualization_benchmark.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_visualization_bezier.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_visualization_colors.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_visualization_imports.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_visualization_layouts.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_visualization_multilayer_additional.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_visualization_polyfit.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_visualization_ricci_layout_helpers.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_visualization_supra_heatmap.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_visualize_matrix_fix.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_workflows.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_wrappers_additional.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_wrappers_node2vec.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_wrappers_r_interop.py +0 -0
- {py3plex-2.0.0 → py3plex-2.0.1}/tests/test_wrappers_train_node2vec.py +0 -0
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
|
+
[](https://github.com/SkBlaz/py3plex/actions/workflows/tests.yml)
|
|
109
|
+
[](https://github.com/SkBlaz/py3plex/actions/workflows/examples.yml)
|
|
110
|
+
[](https://github.com/SkBlaz/py3plex/actions/workflows/tutorial-validation.yml)
|
|
111
|
+
[](https://github.com/SkBlaz/py3plex/actions/workflows/code-quality.yml)
|
|
112
|
+
[](https://github.com/SkBlaz/py3plex/actions/workflows/benchmarks.yml)
|
|
113
|
+
[](https://github.com/SkBlaz/py3plex/actions/workflows/doc-coverage.yml)
|
|
114
|
+
[](https://github.com/SkBlaz/py3plex/actions/workflows/verify.yml)
|
|
115
|
+
[](https://github.com/SkBlaz/py3plex/actions/workflows/fuzzing.yml)
|
|
116
|
+
[](https://pypi.org/project/py3plex/)
|
|
117
|
+
[](https://pypistats.org/packages/py3plex)
|
|
118
|
+

|
|
119
|
+

|
|
120
|
+

|
|
121
|
+

|
|
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
|
+

|
|
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
|
+
```
|