netweavex 1.1.0__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.
- netweavex-1.1.0/PKG-INFO +36 -0
- netweavex-1.1.0/netweavex/__init__.py +65 -0
- netweavex-1.1.0/netweavex/algorithms/__init__.py +134 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/__init__.py +26 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/clique.py +259 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/clustering_coefficient.py +71 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/connectivity.py +412 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/density.py +396 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/distance_measures.py +150 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/dominating_set.py +154 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/kcomponents.py +368 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/matching.py +44 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/maxcut.py +143 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/ramsey.py +53 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/steinertree.py +274 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/tests/__init__.py +0 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/tests/test_approx_clust_coeff.py +41 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/tests/test_clique.py +112 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/tests/test_connectivity.py +199 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/tests/test_density.py +146 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/tests/test_distance_measures.py +59 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/tests/test_dominating_set.py +94 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/tests/test_kcomponents.py +342 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/tests/test_matching.py +8 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/tests/test_maxcut.py +94 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/tests/test_ramsey.py +31 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/tests/test_steinertree.py +306 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/tests/test_traveling_salesman.py +1014 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/tests/test_treewidth.py +274 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/tests/test_vertex_cover.py +68 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/traveling_salesman.py +1508 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/treewidth.py +255 -0
- netweavex-1.1.0/netweavex/algorithms/approximation/vertex_cover.py +83 -0
- netweavex-1.1.0/netweavex/algorithms/assortativity/__init__.py +5 -0
- netweavex-1.1.0/netweavex/algorithms/assortativity/connectivity.py +122 -0
- netweavex-1.1.0/netweavex/algorithms/assortativity/correlation.py +308 -0
- netweavex-1.1.0/netweavex/algorithms/assortativity/mixing.py +252 -0
- netweavex-1.1.0/netweavex/algorithms/assortativity/neighbor_degree.py +160 -0
- netweavex-1.1.0/netweavex/algorithms/assortativity/pairs.py +127 -0
- netweavex-1.1.0/netweavex/algorithms/assortativity/tests/__init__.py +0 -0
- netweavex-1.1.0/netweavex/algorithms/assortativity/tests/base_test.py +81 -0
- netweavex-1.1.0/netweavex/algorithms/assortativity/tests/test_connectivity.py +143 -0
- netweavex-1.1.0/netweavex/algorithms/assortativity/tests/test_correlation.py +140 -0
- netweavex-1.1.0/netweavex/algorithms/assortativity/tests/test_mixing.py +174 -0
- netweavex-1.1.0/netweavex/algorithms/assortativity/tests/test_neighbor_degree.py +107 -0
- netweavex-1.1.0/netweavex/algorithms/assortativity/tests/test_pairs.py +87 -0
- netweavex-1.1.0/netweavex/algorithms/asteroidal.py +164 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/__init__.py +89 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/basic.py +315 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/centrality.py +290 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/cluster.py +438 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/community.py +247 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/covering.py +57 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/edgelist.py +435 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/extendability.py +105 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/generators.py +603 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/link_analysis.py +316 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/matching.py +590 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/matrix.py +232 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/projection.py +525 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/redundancy.py +112 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/spectral.py +69 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/tests/__init__.py +0 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/tests/test_basic.py +125 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/tests/test_centrality.py +192 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/tests/test_cluster.py +140 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/tests/test_community.py +358 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/tests/test_covering.py +33 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/tests/test_edgelist.py +240 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/tests/test_extendability.py +334 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/tests/test_generators.py +407 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/tests/test_link_analysis.py +213 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/tests/test_matching.py +323 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/tests/test_matrix.py +133 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/tests/test_project.py +409 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/tests/test_redundancy.py +35 -0
- netweavex-1.1.0/netweavex/algorithms/bipartite/tests/test_spectral_bipartivity.py +80 -0
- netweavex-1.1.0/netweavex/algorithms/boundary.py +168 -0
- netweavex-1.1.0/netweavex/algorithms/bridges.py +205 -0
- netweavex-1.1.0/netweavex/algorithms/broadcasting.py +164 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/__init__.py +20 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/betweenness.py +596 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/betweenness_subset.py +240 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/closeness.py +306 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/current_flow_betweenness.py +364 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/current_flow_betweenness_subset.py +223 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/current_flow_closeness.py +97 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/degree_alg.py +164 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/dispersion.py +107 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/eigenvector.py +357 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/flow_matrix.py +130 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/group.py +829 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/harmonic.py +88 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/katz.py +331 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/laplacian.py +150 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/load.py +200 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/percolation.py +128 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/reaching.py +209 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/second_order.py +141 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/subgraph_alg.py +361 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/tests/__init__.py +0 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/tests/test_betweenness_centrality.py +923 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/tests/test_betweenness_centrality_subset.py +354 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/tests/test_closeness_centrality.py +298 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/tests/test_current_flow_betweenness_centrality.py +259 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/tests/test_current_flow_betweenness_centrality_subset.py +147 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/tests/test_current_flow_closeness.py +56 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/tests/test_degree_centrality.py +144 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/tests/test_dispersion.py +73 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/tests/test_eigenvector_centrality.py +186 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/tests/test_group.py +423 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/tests/test_harmonic_centrality.py +122 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/tests/test_katz_centrality.py +345 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/tests/test_laplacian_centrality.py +220 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/tests/test_load_centrality.py +344 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/tests/test_percolation_centrality.py +87 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/tests/test_reaching.py +140 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/tests/test_second_order_centrality.py +82 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/tests/test_subgraph.py +110 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/tests/test_trophic.py +302 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/tests/test_voterank.py +64 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/trophic.py +181 -0
- netweavex-1.1.0/netweavex/algorithms/centrality/voterank_alg.py +95 -0
- netweavex-1.1.0/netweavex/algorithms/chains.py +172 -0
- netweavex-1.1.0/netweavex/algorithms/chordal.py +420 -0
- netweavex-1.1.0/netweavex/algorithms/clique.py +818 -0
- netweavex-1.1.0/netweavex/algorithms/cluster.py +732 -0
- netweavex-1.1.0/netweavex/algorithms/coloring/__init__.py +4 -0
- netweavex-1.1.0/netweavex/algorithms/coloring/equitable_coloring.py +505 -0
- netweavex-1.1.0/netweavex/algorithms/coloring/greedy_coloring.py +565 -0
- netweavex-1.1.0/netweavex/algorithms/coloring/tests/__init__.py +0 -0
- netweavex-1.1.0/netweavex/algorithms/coloring/tests/test_coloring.py +863 -0
- netweavex-1.1.0/netweavex/algorithms/communicability_alg.py +152 -0
- netweavex-1.1.0/netweavex/algorithms/community/__init__.py +28 -0
- netweavex-1.1.0/netweavex/algorithms/community/asyn_fluid.py +152 -0
- netweavex-1.1.0/netweavex/algorithms/community/bipartitions.py +353 -0
- netweavex-1.1.0/netweavex/algorithms/community/centrality.py +171 -0
- netweavex-1.1.0/netweavex/algorithms/community/community_utils.py +64 -0
- netweavex-1.1.0/netweavex/algorithms/community/divisive.py +216 -0
- netweavex-1.1.0/netweavex/algorithms/community/kclique.py +79 -0
- netweavex-1.1.0/netweavex/algorithms/community/label_propagation.py +338 -0
- netweavex-1.1.0/netweavex/algorithms/community/leiden.py +751 -0
- netweavex-1.1.0/netweavex/algorithms/community/local.py +220 -0
- netweavex-1.1.0/netweavex/algorithms/community/louvain.py +362 -0
- netweavex-1.1.0/netweavex/algorithms/community/lukes.py +227 -0
- netweavex-1.1.0/netweavex/algorithms/community/modularity_max.py +450 -0
- netweavex-1.1.0/netweavex/algorithms/community/quality.py +711 -0
- netweavex-1.1.0/netweavex/algorithms/community/tests/__init__.py +0 -0
- netweavex-1.1.0/netweavex/algorithms/community/tests/test_asyn_fluid.py +147 -0
- netweavex-1.1.0/netweavex/algorithms/community/tests/test_bipartitions.py +157 -0
- netweavex-1.1.0/netweavex/algorithms/community/tests/test_centrality.py +85 -0
- netweavex-1.1.0/netweavex/algorithms/community/tests/test_divisive.py +106 -0
- netweavex-1.1.0/netweavex/algorithms/community/tests/test_kclique.py +91 -0
- netweavex-1.1.0/netweavex/algorithms/community/tests/test_label_propagation.py +241 -0
- netweavex-1.1.0/netweavex/algorithms/community/tests/test_leiden.py +463 -0
- netweavex-1.1.0/netweavex/algorithms/community/tests/test_local.py +76 -0
- netweavex-1.1.0/netweavex/algorithms/community/tests/test_louvain.py +281 -0
- netweavex-1.1.0/netweavex/algorithms/community/tests/test_lukes.py +152 -0
- netweavex-1.1.0/netweavex/algorithms/community/tests/test_modularity_max.py +340 -0
- netweavex-1.1.0/netweavex/algorithms/community/tests/test_quality.py +524 -0
- netweavex-1.1.0/netweavex/algorithms/community/tests/test_utils.py +70 -0
- netweavex-1.1.0/netweavex/algorithms/components/__init__.py +6 -0
- netweavex-1.1.0/netweavex/algorithms/components/attracting.py +115 -0
- netweavex-1.1.0/netweavex/algorithms/components/biconnected.py +393 -0
- netweavex-1.1.0/netweavex/algorithms/components/connected.py +280 -0
- netweavex-1.1.0/netweavex/algorithms/components/semiconnected.py +71 -0
- netweavex-1.1.0/netweavex/algorithms/components/strongly_connected.py +395 -0
- netweavex-1.1.0/netweavex/algorithms/components/tests/__init__.py +0 -0
- netweavex-1.1.0/netweavex/algorithms/components/tests/test_attracting.py +70 -0
- netweavex-1.1.0/netweavex/algorithms/components/tests/test_biconnected.py +248 -0
- netweavex-1.1.0/netweavex/algorithms/components/tests/test_connected.py +138 -0
- netweavex-1.1.0/netweavex/algorithms/components/tests/test_semiconnected.py +55 -0
- netweavex-1.1.0/netweavex/algorithms/components/tests/test_strongly_connected.py +204 -0
- netweavex-1.1.0/netweavex/algorithms/components/tests/test_weakly_connected.py +96 -0
- netweavex-1.1.0/netweavex/algorithms/components/weakly_connected.py +196 -0
- netweavex-1.1.0/netweavex/algorithms/connectivity/__init__.py +11 -0
- netweavex-1.1.0/netweavex/algorithms/connectivity/connectivity.py +842 -0
- netweavex-1.1.0/netweavex/algorithms/connectivity/cuts.py +661 -0
- netweavex-1.1.0/netweavex/algorithms/connectivity/disjoint_paths.py +407 -0
- netweavex-1.1.0/netweavex/algorithms/connectivity/edge_augmentation.py +1265 -0
- netweavex-1.1.0/netweavex/algorithms/connectivity/edge_kcomponents.py +592 -0
- netweavex-1.1.0/netweavex/algorithms/connectivity/kcomponents.py +278 -0
- netweavex-1.1.0/netweavex/algorithms/connectivity/kcutsets.py +233 -0
- netweavex-1.1.0/netweavex/algorithms/connectivity/stoerwagner.py +152 -0
- netweavex-1.1.0/netweavex/algorithms/connectivity/tests/__init__.py +0 -0
- netweavex-1.1.0/netweavex/algorithms/connectivity/tests/test_connectivity.py +506 -0
- netweavex-1.1.0/netweavex/algorithms/connectivity/tests/test_cuts.py +307 -0
- netweavex-1.1.0/netweavex/algorithms/connectivity/tests/test_disjoint_paths.py +249 -0
- netweavex-1.1.0/netweavex/algorithms/connectivity/tests/test_edge_augmentation.py +502 -0
- netweavex-1.1.0/netweavex/algorithms/connectivity/tests/test_edge_kcomponents.py +488 -0
- netweavex-1.1.0/netweavex/algorithms/connectivity/tests/test_kcomponents.py +441 -0
- netweavex-1.1.0/netweavex/algorithms/connectivity/tests/test_kcutsets.py +278 -0
- netweavex-1.1.0/netweavex/algorithms/connectivity/tests/test_stoer_wagner.py +102 -0
- netweavex-1.1.0/netweavex/algorithms/connectivity/utils.py +88 -0
- netweavex-1.1.0/netweavex/algorithms/core.py +588 -0
- netweavex-1.1.0/netweavex/algorithms/covering.py +142 -0
- netweavex-1.1.0/netweavex/algorithms/cuts.py +416 -0
- netweavex-1.1.0/netweavex/algorithms/cycles.py +1234 -0
- netweavex-1.1.0/netweavex/algorithms/d_separation.py +677 -0
- netweavex-1.1.0/netweavex/algorithms/dag.py +1462 -0
- netweavex-1.1.0/netweavex/algorithms/distance_measures.py +1129 -0
- netweavex-1.1.0/netweavex/algorithms/distance_regular.py +272 -0
- netweavex-1.1.0/netweavex/algorithms/dominance.py +149 -0
- netweavex-1.1.0/netweavex/algorithms/dominating.py +267 -0
- netweavex-1.1.0/netweavex/algorithms/efficiency_measures.py +166 -0
- netweavex-1.1.0/netweavex/algorithms/euler.py +470 -0
- netweavex-1.1.0/netweavex/algorithms/flow/__init__.py +11 -0
- netweavex-1.1.0/netweavex/algorithms/flow/boykovkolmogorov.py +379 -0
- netweavex-1.1.0/netweavex/algorithms/flow/capacityscaling.py +407 -0
- netweavex-1.1.0/netweavex/algorithms/flow/dinitz_alg.py +247 -0
- netweavex-1.1.0/netweavex/algorithms/flow/edmondskarp.py +255 -0
- netweavex-1.1.0/netweavex/algorithms/flow/gomory_hu.py +187 -0
- netweavex-1.1.0/netweavex/algorithms/flow/maxflow.py +686 -0
- netweavex-1.1.0/netweavex/algorithms/flow/mincost.py +356 -0
- netweavex-1.1.0/netweavex/algorithms/flow/networksimplex.py +662 -0
- netweavex-1.1.0/netweavex/algorithms/flow/preflowpush.py +434 -0
- netweavex-1.1.0/netweavex/algorithms/flow/shortestaugmentingpath.py +309 -0
- netweavex-1.1.0/netweavex/algorithms/flow/tests/__init__.py +0 -0
- netweavex-1.1.0/netweavex/algorithms/flow/tests/gl1.gpickle.bz2 +0 -0
- netweavex-1.1.0/netweavex/algorithms/flow/tests/gw1.gpickle.bz2 +0 -0
- netweavex-1.1.0/netweavex/algorithms/flow/tests/netgen-2.gpickle.bz2 +0 -0
- netweavex-1.1.0/netweavex/algorithms/flow/tests/test_gomory_hu.py +128 -0
- netweavex-1.1.0/netweavex/algorithms/flow/tests/test_maxflow.py +638 -0
- netweavex-1.1.0/netweavex/algorithms/flow/tests/test_maxflow_large_graph.py +155 -0
- netweavex-1.1.0/netweavex/algorithms/flow/tests/test_mincost.py +475 -0
- netweavex-1.1.0/netweavex/algorithms/flow/tests/test_networksimplex.py +481 -0
- netweavex-1.1.0/netweavex/algorithms/flow/tests/wlm3.gpickle.bz2 +0 -0
- netweavex-1.1.0/netweavex/algorithms/flow/utils.py +231 -0
- netweavex-1.1.0/netweavex/algorithms/graph_hashing.py +435 -0
- netweavex-1.1.0/netweavex/algorithms/graphical.py +483 -0
- netweavex-1.1.0/netweavex/algorithms/hierarchy.py +57 -0
- netweavex-1.1.0/netweavex/algorithms/hybrid.py +196 -0
- netweavex-1.1.0/netweavex/algorithms/isolate.py +107 -0
- netweavex-1.1.0/netweavex/algorithms/isomorphism/__init__.py +7 -0
- netweavex-1.1.0/netweavex/algorithms/isomorphism/ismags.py +1554 -0
- netweavex-1.1.0/netweavex/algorithms/isomorphism/isomorph.py +253 -0
- netweavex-1.1.0/netweavex/algorithms/isomorphism/isomorphvf2.py +1222 -0
- netweavex-1.1.0/netweavex/algorithms/isomorphism/matchhelpers.py +386 -0
- netweavex-1.1.0/netweavex/algorithms/isomorphism/temporalisomorphvf2.py +308 -0
- netweavex-1.1.0/netweavex/algorithms/isomorphism/tests/__init__.py +0 -0
- netweavex-1.1.0/netweavex/algorithms/isomorphism/tests/iso_r01_s80.A99 +0 -0
- netweavex-1.1.0/netweavex/algorithms/isomorphism/tests/iso_r01_s80.B99 +0 -0
- netweavex-1.1.0/netweavex/algorithms/isomorphism/tests/si2_b06_m200.A99 +0 -0
- netweavex-1.1.0/netweavex/algorithms/isomorphism/tests/si2_b06_m200.B99 +0 -0
- netweavex-1.1.0/netweavex/algorithms/isomorphism/tests/test_common.py +1040 -0
- netweavex-1.1.0/netweavex/algorithms/isomorphism/tests/test_ismags.py +916 -0
- netweavex-1.1.0/netweavex/algorithms/isomorphism/tests/test_isomorphism.py +89 -0
- netweavex-1.1.0/netweavex/algorithms/isomorphism/tests/test_isomorphvf2.py +525 -0
- netweavex-1.1.0/netweavex/algorithms/isomorphism/tests/test_match_helpers.py +109 -0
- netweavex-1.1.0/netweavex/algorithms/isomorphism/tests/test_temporalisomorphvf2.py +212 -0
- netweavex-1.1.0/netweavex/algorithms/isomorphism/tests/test_tree_isomorphism.py +202 -0
- netweavex-1.1.0/netweavex/algorithms/isomorphism/tests/test_vf2pp.py +1672 -0
- netweavex-1.1.0/netweavex/algorithms/isomorphism/tests/test_vf2pp_helpers.py +1314 -0
- netweavex-1.1.0/netweavex/algorithms/isomorphism/tests/test_vf2userfunc.py +196 -0
- netweavex-1.1.0/netweavex/algorithms/isomorphism/tree_isomorphism.py +264 -0
- netweavex-1.1.0/netweavex/algorithms/isomorphism/vf2pp.py +1063 -0
- netweavex-1.1.0/netweavex/algorithms/isomorphism/vf2userfunc.py +192 -0
- netweavex-1.1.0/netweavex/algorithms/link_analysis/__init__.py +2 -0
- netweavex-1.1.0/netweavex/algorithms/link_analysis/hits_alg.py +306 -0
- netweavex-1.1.0/netweavex/algorithms/link_analysis/pagerank_alg.py +507 -0
- netweavex-1.1.0/netweavex/algorithms/link_analysis/tests/__init__.py +0 -0
- netweavex-1.1.0/netweavex/algorithms/link_analysis/tests/test_hits.py +98 -0
- netweavex-1.1.0/netweavex/algorithms/link_analysis/tests/test_pagerank.py +213 -0
- netweavex-1.1.0/netweavex/algorithms/link_prediction.py +687 -0
- netweavex-1.1.0/netweavex/algorithms/lowest_common_ancestors.py +280 -0
- netweavex-1.1.0/netweavex/algorithms/matching.py +1148 -0
- netweavex-1.1.0/netweavex/algorithms/minors/__init__.py +27 -0
- netweavex-1.1.0/netweavex/algorithms/minors/contraction.py +739 -0
- netweavex-1.1.0/netweavex/algorithms/minors/tests/test_contraction.py +544 -0
- netweavex-1.1.0/netweavex/algorithms/mis.py +115 -0
- netweavex-1.1.0/netweavex/algorithms/moral.py +59 -0
- netweavex-1.1.0/netweavex/algorithms/node_classification.py +219 -0
- netweavex-1.1.0/netweavex/algorithms/non_randomness.py +155 -0
- netweavex-1.1.0/netweavex/algorithms/operators/__init__.py +4 -0
- netweavex-1.1.0/netweavex/algorithms/operators/all.py +324 -0
- netweavex-1.1.0/netweavex/algorithms/operators/binary.py +468 -0
- netweavex-1.1.0/netweavex/algorithms/operators/product.py +633 -0
- netweavex-1.1.0/netweavex/algorithms/operators/tests/__init__.py +0 -0
- netweavex-1.1.0/netweavex/algorithms/operators/tests/test_all.py +328 -0
- netweavex-1.1.0/netweavex/algorithms/operators/tests/test_binary.py +451 -0
- netweavex-1.1.0/netweavex/algorithms/operators/tests/test_product.py +491 -0
- netweavex-1.1.0/netweavex/algorithms/operators/tests/test_unary.py +69 -0
- netweavex-1.1.0/netweavex/algorithms/operators/unary.py +77 -0
- netweavex-1.1.0/netweavex/algorithms/perfect_graph.py +73 -0
- netweavex-1.1.0/netweavex/algorithms/planar_drawing.py +464 -0
- netweavex-1.1.0/netweavex/algorithms/planarity.py +1488 -0
- netweavex-1.1.0/netweavex/algorithms/polynomials.py +306 -0
- netweavex-1.1.0/netweavex/algorithms/reciprocity.py +98 -0
- netweavex-1.1.0/netweavex/algorithms/regular.py +167 -0
- netweavex-1.1.0/netweavex/algorithms/richclub.py +164 -0
- netweavex-1.1.0/netweavex/algorithms/shortest_paths/__init__.py +5 -0
- netweavex-1.1.0/netweavex/algorithms/shortest_paths/astar.py +239 -0
- netweavex-1.1.0/netweavex/algorithms/shortest_paths/dense.py +466 -0
- netweavex-1.1.0/netweavex/algorithms/shortest_paths/generic.py +718 -0
- netweavex-1.1.0/netweavex/algorithms/shortest_paths/tests/__init__.py +0 -0
- netweavex-1.1.0/netweavex/algorithms/shortest_paths/tests/test_astar.py +254 -0
- netweavex-1.1.0/netweavex/algorithms/shortest_paths/tests/test_dense.py +319 -0
- netweavex-1.1.0/netweavex/algorithms/shortest_paths/tests/test_dense_numpy.py +126 -0
- netweavex-1.1.0/netweavex/algorithms/shortest_paths/tests/test_generic.py +518 -0
- netweavex-1.1.0/netweavex/algorithms/shortest_paths/tests/test_unweighted.py +149 -0
- netweavex-1.1.0/netweavex/algorithms/shortest_paths/tests/test_weighted.py +983 -0
- netweavex-1.1.0/netweavex/algorithms/shortest_paths/unweighted.py +625 -0
- netweavex-1.1.0/netweavex/algorithms/shortest_paths/weighted.py +2542 -0
- netweavex-1.1.0/netweavex/algorithms/similarity.py +2107 -0
- netweavex-1.1.0/netweavex/algorithms/simple_paths.py +966 -0
- netweavex-1.1.0/netweavex/algorithms/smallworld.py +400 -0
- netweavex-1.1.0/netweavex/algorithms/smetric.py +30 -0
- netweavex-1.1.0/netweavex/algorithms/sparsifiers.py +296 -0
- netweavex-1.1.0/netweavex/algorithms/structuralholes.py +374 -0
- netweavex-1.1.0/netweavex/algorithms/summarization.py +561 -0
- netweavex-1.1.0/netweavex/algorithms/swap.py +406 -0
- netweavex-1.1.0/netweavex/algorithms/tests/__init__.py +0 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_asteroidal.py +23 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_boundary.py +154 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_bridges.py +144 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_broadcasting.py +109 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_chains.py +136 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_chordal.py +163 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_clique.py +249 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_cluster.py +678 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_communicability.py +69 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_core.py +266 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_covering.py +85 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_cuts.py +171 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_cycles.py +982 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_d_separation.py +340 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_dag.py +894 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_distance_measures.py +840 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_distance_regular.py +85 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_dominance.py +299 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_dominating.py +115 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_efficiency.py +58 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_euler.py +314 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_graph_hashing.py +872 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_graphical.py +163 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_hierarchy.py +46 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_hybrid.py +24 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_isolate.py +26 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_link_prediction.py +615 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_lowest_common_ancestors.py +459 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_matching.py +556 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_max_weight_clique.py +179 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_mis.py +62 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_moral.py +15 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_node_classification.py +140 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_non_randomness.py +60 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_perfect_graph.py +27 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_planar_drawing.py +274 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_planarity.py +618 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_polynomials.py +57 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_reciprocity.py +37 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_regular.py +88 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_richclub.py +160 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_similarity.py +1158 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_simple_paths.py +803 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_smallworld.py +76 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_smetric.py +8 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_sparsifiers.py +138 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_structuralholes.py +191 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_summarization.py +642 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_swap.py +179 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_threshold.py +270 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_time_dependent.py +431 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_tournament.py +161 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_triads.py +261 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_vitality.py +41 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_voronoi.py +103 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_walks.py +165 -0
- netweavex-1.1.0/netweavex/algorithms/tests/test_wiener.py +157 -0
- netweavex-1.1.0/netweavex/algorithms/threshold.py +981 -0
- netweavex-1.1.0/netweavex/algorithms/time_dependent.py +142 -0
- netweavex-1.1.0/netweavex/algorithms/tournament.py +406 -0
- netweavex-1.1.0/netweavex/algorithms/traversal/__init__.py +5 -0
- netweavex-1.1.0/netweavex/algorithms/traversal/beamsearch.py +90 -0
- netweavex-1.1.0/netweavex/algorithms/traversal/breadth_first_search.py +600 -0
- netweavex-1.1.0/netweavex/algorithms/traversal/depth_first_search.py +529 -0
- netweavex-1.1.0/netweavex/algorithms/traversal/edgebfs.py +185 -0
- netweavex-1.1.0/netweavex/algorithms/traversal/edgedfs.py +182 -0
- netweavex-1.1.0/netweavex/algorithms/traversal/tests/__init__.py +0 -0
- netweavex-1.1.0/netweavex/algorithms/traversal/tests/test_beamsearch.py +25 -0
- netweavex-1.1.0/netweavex/algorithms/traversal/tests/test_bfs.py +211 -0
- netweavex-1.1.0/netweavex/algorithms/traversal/tests/test_dfs.py +307 -0
- netweavex-1.1.0/netweavex/algorithms/traversal/tests/test_edgebfs.py +147 -0
- netweavex-1.1.0/netweavex/algorithms/traversal/tests/test_edgedfs.py +131 -0
- netweavex-1.1.0/netweavex/algorithms/tree/__init__.py +7 -0
- netweavex-1.1.0/netweavex/algorithms/tree/branchings.py +1034 -0
- netweavex-1.1.0/netweavex/algorithms/tree/coding.py +413 -0
- netweavex-1.1.0/netweavex/algorithms/tree/decomposition.py +88 -0
- netweavex-1.1.0/netweavex/algorithms/tree/distance_measures.py +219 -0
- netweavex-1.1.0/netweavex/algorithms/tree/mst.py +1316 -0
- netweavex-1.1.0/netweavex/algorithms/tree/operations.py +106 -0
- netweavex-1.1.0/netweavex/algorithms/tree/recognition.py +273 -0
- netweavex-1.1.0/netweavex/algorithms/tree/tests/__init__.py +0 -0
- netweavex-1.1.0/netweavex/algorithms/tree/tests/test_branchings.py +624 -0
- netweavex-1.1.0/netweavex/algorithms/tree/tests/test_coding.py +114 -0
- netweavex-1.1.0/netweavex/algorithms/tree/tests/test_decomposition.py +79 -0
- netweavex-1.1.0/netweavex/algorithms/tree/tests/test_distance_measures.py +99 -0
- netweavex-1.1.0/netweavex/algorithms/tree/tests/test_mst.py +942 -0
- netweavex-1.1.0/netweavex/algorithms/tree/tests/test_operations.py +53 -0
- netweavex-1.1.0/netweavex/algorithms/tree/tests/test_recognition.py +174 -0
- netweavex-1.1.0/netweavex/algorithms/triads.py +500 -0
- netweavex-1.1.0/netweavex/algorithms/vitality.py +76 -0
- netweavex-1.1.0/netweavex/algorithms/voronoi.py +86 -0
- netweavex-1.1.0/netweavex/algorithms/walks.py +230 -0
- netweavex-1.1.0/netweavex/algorithms/wiener.py +278 -0
- netweavex-1.1.0/netweavex/classes/__init__.py +13 -0
- netweavex-1.1.0/netweavex/classes/coreviews.py +435 -0
- netweavex-1.1.0/netweavex/classes/digraph.py +1362 -0
- netweavex-1.1.0/netweavex/classes/filters.py +95 -0
- netweavex-1.1.0/netweavex/classes/function.py +1611 -0
- netweavex-1.1.0/netweavex/classes/graph.py +2052 -0
- netweavex-1.1.0/netweavex/classes/graphviews.py +268 -0
- netweavex-1.1.0/netweavex/classes/multidigraph.py +976 -0
- netweavex-1.1.0/netweavex/classes/multigraph.py +1294 -0
- netweavex-1.1.0/netweavex/classes/reportviews.py +1663 -0
- netweavex-1.1.0/netweavex/classes/tests/__init__.py +0 -0
- netweavex-1.1.0/netweavex/classes/tests/dispatch_interface.py +192 -0
- netweavex-1.1.0/netweavex/classes/tests/historical_tests.py +476 -0
- netweavex-1.1.0/netweavex/classes/tests/test_coreviews.py +362 -0
- netweavex-1.1.0/netweavex/classes/tests/test_digraph.py +331 -0
- netweavex-1.1.0/netweavex/classes/tests/test_digraph_historical.py +110 -0
- netweavex-1.1.0/netweavex/classes/tests/test_filters.py +177 -0
- netweavex-1.1.0/netweavex/classes/tests/test_function.py +1064 -0
- netweavex-1.1.0/netweavex/classes/tests/test_graph.py +1017 -0
- netweavex-1.1.0/netweavex/classes/tests/test_graph_historical.py +12 -0
- netweavex-1.1.0/netweavex/classes/tests/test_graphviews.py +349 -0
- netweavex-1.1.0/netweavex/classes/tests/test_multidigraph.py +459 -0
- netweavex-1.1.0/netweavex/classes/tests/test_multigraph.py +528 -0
- netweavex-1.1.0/netweavex/classes/tests/test_reportviews.py +1444 -0
- netweavex-1.1.0/netweavex/classes/tests/test_special.py +131 -0
- netweavex-1.1.0/netweavex/classes/tests/test_subgraphviews.py +371 -0
- netweavex-1.1.0/netweavex/conftest.py +285 -0
- netweavex-1.1.0/netweavex/convert.py +502 -0
- netweavex-1.1.0/netweavex/convert_matrix.py +1350 -0
- netweavex-1.1.0/netweavex/drawing/__init__.py +7 -0
- netweavex-1.1.0/netweavex/drawing/layout.py +2041 -0
- netweavex-1.1.0/netweavex/drawing/nx_agraph.py +473 -0
- netweavex-1.1.0/netweavex/drawing/nx_latex.py +699 -0
- netweavex-1.1.0/netweavex/drawing/nx_pydot.py +361 -0
- netweavex-1.1.0/netweavex/drawing/nx_pylab.py +2993 -0
- netweavex-1.1.0/netweavex/drawing/tests/__init__.py +0 -0
- netweavex-1.1.0/netweavex/drawing/tests/baseline/test_display_complex.png +0 -0
- netweavex-1.1.0/netweavex/drawing/tests/baseline/test_display_empty_graph.png +0 -0
- netweavex-1.1.0/netweavex/drawing/tests/baseline/test_display_house_with_colors.png +0 -0
- netweavex-1.1.0/netweavex/drawing/tests/baseline/test_display_labels_and_colors.png +0 -0
- netweavex-1.1.0/netweavex/drawing/tests/baseline/test_display_shortest_path.png +0 -0
- netweavex-1.1.0/netweavex/drawing/tests/baseline/test_house_with_colors.png +0 -0
- netweavex-1.1.0/netweavex/drawing/tests/test_agraph.py +261 -0
- netweavex-1.1.0/netweavex/drawing/tests/test_image_comparison_pylab_mpl.py +229 -0
- netweavex-1.1.0/netweavex/drawing/tests/test_latex.py +285 -0
- netweavex-1.1.0/netweavex/drawing/tests/test_layout.py +679 -0
- netweavex-1.1.0/netweavex/drawing/tests/test_pydot.py +158 -0
- netweavex-1.1.0/netweavex/drawing/tests/test_pylab.py +1581 -0
- netweavex-1.1.0/netweavex/exception.py +131 -0
- netweavex-1.1.0/netweavex/generators/__init__.py +34 -0
- netweavex-1.1.0/netweavex/generators/atlas.dat.gz +0 -0
- netweavex-1.1.0/netweavex/generators/atlas.py +227 -0
- netweavex-1.1.0/netweavex/generators/classic.py +1102 -0
- netweavex-1.1.0/netweavex/generators/cographs.py +68 -0
- netweavex-1.1.0/netweavex/generators/community.py +1067 -0
- netweavex-1.1.0/netweavex/generators/degree_seq.py +886 -0
- netweavex-1.1.0/netweavex/generators/directed.py +572 -0
- netweavex-1.1.0/netweavex/generators/duplication.py +173 -0
- netweavex-1.1.0/netweavex/generators/ego.py +66 -0
- netweavex-1.1.0/netweavex/generators/expanders.py +502 -0
- netweavex-1.1.0/netweavex/generators/geometric.py +1037 -0
- netweavex-1.1.0/netweavex/generators/harary_graph.py +162 -0
- netweavex-1.1.0/netweavex/generators/internet_as_graphs.py +443 -0
- netweavex-1.1.0/netweavex/generators/intersection.py +125 -0
- netweavex-1.1.0/netweavex/generators/interval_graph.py +70 -0
- netweavex-1.1.0/netweavex/generators/joint_degree_seq.py +666 -0
- netweavex-1.1.0/netweavex/generators/lattice.py +404 -0
- netweavex-1.1.0/netweavex/generators/line.py +501 -0
- netweavex-1.1.0/netweavex/generators/mycielski.py +110 -0
- netweavex-1.1.0/netweavex/generators/nonisomorphic_trees.py +239 -0
- netweavex-1.1.0/netweavex/generators/random_clustered.py +117 -0
- netweavex-1.1.0/netweavex/generators/random_graphs.py +1495 -0
- netweavex-1.1.0/netweavex/generators/small.py +1121 -0
- netweavex-1.1.0/netweavex/generators/social.py +554 -0
- netweavex-1.1.0/netweavex/generators/spectral_graph_forge.py +120 -0
- netweavex-1.1.0/netweavex/generators/stochastic.py +54 -0
- netweavex-1.1.0/netweavex/generators/sudoku.py +130 -0
- netweavex-1.1.0/netweavex/generators/tests/__init__.py +0 -0
- netweavex-1.1.0/netweavex/generators/tests/test_atlas.py +75 -0
- netweavex-1.1.0/netweavex/generators/tests/test_classic.py +659 -0
- netweavex-1.1.0/netweavex/generators/tests/test_cographs.py +20 -0
- netweavex-1.1.0/netweavex/generators/tests/test_community.py +377 -0
- netweavex-1.1.0/netweavex/generators/tests/test_degree_seq.py +224 -0
- netweavex-1.1.0/netweavex/generators/tests/test_directed.py +189 -0
- netweavex-1.1.0/netweavex/generators/tests/test_duplication.py +103 -0
- netweavex-1.1.0/netweavex/generators/tests/test_ego.py +39 -0
- netweavex-1.1.0/netweavex/generators/tests/test_expanders.py +182 -0
- netweavex-1.1.0/netweavex/generators/tests/test_geometric.py +496 -0
- netweavex-1.1.0/netweavex/generators/tests/test_harary_graph.py +133 -0
- netweavex-1.1.0/netweavex/generators/tests/test_internet_as_graphs.py +221 -0
- netweavex-1.1.0/netweavex/generators/tests/test_intersection.py +28 -0
- netweavex-1.1.0/netweavex/generators/tests/test_interval_graph.py +144 -0
- netweavex-1.1.0/netweavex/generators/tests/test_joint_degree_seq.py +125 -0
- netweavex-1.1.0/netweavex/generators/tests/test_lattice.py +264 -0
- netweavex-1.1.0/netweavex/generators/tests/test_line.py +316 -0
- netweavex-1.1.0/netweavex/generators/tests/test_mycielski.py +30 -0
- netweavex-1.1.0/netweavex/generators/tests/test_nonisomorphic_trees.py +82 -0
- netweavex-1.1.0/netweavex/generators/tests/test_random_clustered.py +33 -0
- netweavex-1.1.0/netweavex/generators/tests/test_random_graphs.py +556 -0
- netweavex-1.1.0/netweavex/generators/tests/test_small.py +225 -0
- netweavex-1.1.0/netweavex/generators/tests/test_spectral_graph_forge.py +53 -0
- netweavex-1.1.0/netweavex/generators/tests/test_stochastic.py +72 -0
- netweavex-1.1.0/netweavex/generators/tests/test_sudoku.py +92 -0
- netweavex-1.1.0/netweavex/generators/tests/test_time_series.py +64 -0
- netweavex-1.1.0/netweavex/generators/tests/test_trees.py +195 -0
- netweavex-1.1.0/netweavex/generators/tests/test_triads.py +15 -0
- netweavex-1.1.0/netweavex/generators/time_series.py +74 -0
- netweavex-1.1.0/netweavex/generators/trees.py +1070 -0
- netweavex-1.1.0/netweavex/generators/triads.py +94 -0
- netweavex-1.1.0/netweavex/lazy_imports.py +188 -0
- netweavex-1.1.0/netweavex/linalg/__init__.py +13 -0
- netweavex-1.1.0/netweavex/linalg/algebraicconnectivity.py +650 -0
- netweavex-1.1.0/netweavex/linalg/attrmatrix.py +466 -0
- netweavex-1.1.0/netweavex/linalg/bethehessianmatrix.py +77 -0
- netweavex-1.1.0/netweavex/linalg/graphmatrix.py +174 -0
- netweavex-1.1.0/netweavex/linalg/laplacianmatrix.py +670 -0
- netweavex-1.1.0/netweavex/linalg/modularitymatrix.py +166 -0
- netweavex-1.1.0/netweavex/linalg/spectrum.py +228 -0
- netweavex-1.1.0/netweavex/linalg/tests/__init__.py +0 -0
- netweavex-1.1.0/netweavex/linalg/tests/test_algebraic_connectivity.py +400 -0
- netweavex-1.1.0/netweavex/linalg/tests/test_attrmatrix.py +108 -0
- netweavex-1.1.0/netweavex/linalg/tests/test_bethehessian.py +40 -0
- netweavex-1.1.0/netweavex/linalg/tests/test_graphmatrix.py +296 -0
- netweavex-1.1.0/netweavex/linalg/tests/test_laplacian.py +479 -0
- netweavex-1.1.0/netweavex/linalg/tests/test_modularity.py +86 -0
- netweavex-1.1.0/netweavex/linalg/tests/test_spectrum.py +92 -0
- netweavex-1.1.0/netweavex/readwrite/__init__.py +17 -0
- netweavex-1.1.0/netweavex/readwrite/adjlist.py +373 -0
- netweavex-1.1.0/netweavex/readwrite/edgelist.py +580 -0
- netweavex-1.1.0/netweavex/readwrite/gexf.py +1208 -0
- netweavex-1.1.0/netweavex/readwrite/gml.py +920 -0
- netweavex-1.1.0/netweavex/readwrite/graph6.py +426 -0
- netweavex-1.1.0/netweavex/readwrite/graphml.py +1093 -0
- netweavex-1.1.0/netweavex/readwrite/json_graph/__init__.py +19 -0
- netweavex-1.1.0/netweavex/readwrite/json_graph/adjacency.py +156 -0
- netweavex-1.1.0/netweavex/readwrite/json_graph/cytoscape.py +190 -0
- netweavex-1.1.0/netweavex/readwrite/json_graph/node_link.py +260 -0
- netweavex-1.1.0/netweavex/readwrite/json_graph/tests/__init__.py +0 -0
- netweavex-1.1.0/netweavex/readwrite/json_graph/tests/test_adjacency.py +78 -0
- netweavex-1.1.0/netweavex/readwrite/json_graph/tests/test_cytoscape.py +78 -0
- netweavex-1.1.0/netweavex/readwrite/json_graph/tests/test_node_link.py +109 -0
- netweavex-1.1.0/netweavex/readwrite/json_graph/tests/test_tree.py +48 -0
- netweavex-1.1.0/netweavex/readwrite/json_graph/tree.py +135 -0
- netweavex-1.1.0/netweavex/readwrite/leda.py +109 -0
- netweavex-1.1.0/netweavex/readwrite/multiline_adjlist.py +433 -0
- netweavex-1.1.0/netweavex/readwrite/p2g.py +121 -0
- netweavex-1.1.0/netweavex/readwrite/pajek.py +316 -0
- netweavex-1.1.0/netweavex/readwrite/sparse6.py +380 -0
- netweavex-1.1.0/netweavex/readwrite/tests/__init__.py +0 -0
- netweavex-1.1.0/netweavex/readwrite/tests/test_adjlist.py +354 -0
- netweavex-1.1.0/netweavex/readwrite/tests/test_edgelist.py +318 -0
- netweavex-1.1.0/netweavex/readwrite/tests/test_gexf.py +725 -0
- netweavex-1.1.0/netweavex/readwrite/tests/test_gml.py +757 -0
- netweavex-1.1.0/netweavex/readwrite/tests/test_graph6.py +187 -0
- netweavex-1.1.0/netweavex/readwrite/tests/test_graphml.py +1531 -0
- netweavex-1.1.0/netweavex/readwrite/tests/test_leda.py +30 -0
- netweavex-1.1.0/netweavex/readwrite/tests/test_p2g.py +102 -0
- netweavex-1.1.0/netweavex/readwrite/tests/test_pajek.py +150 -0
- netweavex-1.1.0/netweavex/readwrite/tests/test_sparse6.py +174 -0
- netweavex-1.1.0/netweavex/readwrite/tests/test_text.py +1742 -0
- netweavex-1.1.0/netweavex/readwrite/text.py +851 -0
- netweavex-1.1.0/netweavex/relabel.py +290 -0
- netweavex-1.1.0/netweavex/tests/__init__.py +0 -0
- netweavex-1.1.0/netweavex/tests/test_all_random_functions.py +248 -0
- netweavex-1.1.0/netweavex/tests/test_convert.py +321 -0
- netweavex-1.1.0/netweavex/tests/test_convert_numpy.py +552 -0
- netweavex-1.1.0/netweavex/tests/test_convert_pandas.py +349 -0
- netweavex-1.1.0/netweavex/tests/test_convert_scipy.py +281 -0
- netweavex-1.1.0/netweavex/tests/test_exceptions.py +40 -0
- netweavex-1.1.0/netweavex/tests/test_import.py +11 -0
- netweavex-1.1.0/netweavex/tests/test_lazy_imports.py +96 -0
- netweavex-1.1.0/netweavex/tests/test_relabel.py +358 -0
- netweavex-1.1.0/netweavex/tests/test_removed_functions_exception_messages.py +8 -0
- netweavex-1.1.0/netweavex/utils/__init__.py +8 -0
- netweavex-1.1.0/netweavex/utils/backends.py +2183 -0
- netweavex-1.1.0/netweavex/utils/configs.py +396 -0
- netweavex-1.1.0/netweavex/utils/decorators.py +1237 -0
- netweavex-1.1.0/netweavex/utils/heaps.py +338 -0
- netweavex-1.1.0/netweavex/utils/mapped_queue.py +297 -0
- netweavex-1.1.0/netweavex/utils/misc.py +716 -0
- netweavex-1.1.0/netweavex/utils/random_sequence.py +198 -0
- netweavex-1.1.0/netweavex/utils/rcm.py +159 -0
- netweavex-1.1.0/netweavex/utils/tests/__init__.py +0 -0
- netweavex-1.1.0/netweavex/utils/tests/test__init.py +11 -0
- netweavex-1.1.0/netweavex/utils/tests/test_backends.py +225 -0
- netweavex-1.1.0/netweavex/utils/tests/test_config.py +263 -0
- netweavex-1.1.0/netweavex/utils/tests/test_decorators.py +534 -0
- netweavex-1.1.0/netweavex/utils/tests/test_heaps.py +131 -0
- netweavex-1.1.0/netweavex/utils/tests/test_mapped_queue.py +268 -0
- netweavex-1.1.0/netweavex/utils/tests/test_misc.py +415 -0
- netweavex-1.1.0/netweavex/utils/tests/test_random_sequence.py +53 -0
- netweavex-1.1.0/netweavex/utils/tests/test_rcm.py +63 -0
- netweavex-1.1.0/netweavex/utils/tests/test_unionfind.py +55 -0
- netweavex-1.1.0/netweavex/utils/union_find.py +106 -0
- netweavex-1.1.0/netweavex.egg-info/PKG-INFO +36 -0
- netweavex-1.1.0/netweavex.egg-info/SOURCES.txt +605 -0
- netweavex-1.1.0/netweavex.egg-info/dependency_links.txt +1 -0
- netweavex-1.1.0/netweavex.egg-info/not-zip-safe +1 -0
- netweavex-1.1.0/netweavex.egg-info/requires.txt +17 -0
- netweavex-1.1.0/netweavex.egg-info/top_level.txt +1 -0
- netweavex-1.1.0/pyproject.toml +78 -0
- netweavex-1.1.0/setup.cfg +4 -0
netweavex-1.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: netweavex
|
|
3
|
+
Version: 1.1.0
|
|
4
|
+
Summary: Python package for creating and manipulating graphs and networks
|
|
5
|
+
License-Expression: BSD-3-Clause
|
|
6
|
+
Project-URL: Documentation, https://networkx.org/documentation/stable/
|
|
7
|
+
Keywords: Networks,Graph Theory,Mathematics,network,graph,discrete mathematics,math
|
|
8
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
9
|
+
Classifier: Intended Audience :: Developers
|
|
10
|
+
Classifier: Intended Audience :: Science/Research
|
|
11
|
+
Classifier: Operating System :: OS Independent
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
17
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
18
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
19
|
+
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
20
|
+
Classifier: Topic :: Scientific/Engineering :: Mathematics
|
|
21
|
+
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
22
|
+
Requires-Python: !=3.14.1,>=3.12
|
|
23
|
+
Provides-Extra: default
|
|
24
|
+
Requires-Dist: numpy>=2.2; extra == "default"
|
|
25
|
+
Requires-Dist: scipy>=1.15; extra == "default"
|
|
26
|
+
Requires-Dist: matplotlib>=3.10; extra == "default"
|
|
27
|
+
Requires-Dist: pandas>=2.3; extra == "default"
|
|
28
|
+
Provides-Extra: extra
|
|
29
|
+
Requires-Dist: lxml>=4.6; extra == "extra"
|
|
30
|
+
Requires-Dist: pygraphviz>=2.0; extra == "extra"
|
|
31
|
+
Requires-Dist: pydot>=3.0.1; extra == "extra"
|
|
32
|
+
Requires-Dist: sympy>=1.10; extra == "extra"
|
|
33
|
+
Provides-Extra: test
|
|
34
|
+
Requires-Dist: pytest>=7.2; extra == "test"
|
|
35
|
+
Requires-Dist: pytest-cov>=4.0; extra == "test"
|
|
36
|
+
Requires-Dist: pytest-xdist>=3.0; extra == "test"
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"""
|
|
2
|
+
NetWeaveX
|
|
3
|
+
=========
|
|
4
|
+
|
|
5
|
+
NetWeaveX is a Python package for the creation, manipulation, and study of the
|
|
6
|
+
structure, dynamics, and functions of complex networks.
|
|
7
|
+
|
|
8
|
+
Use ``import netweavex as nx``. Classes, functions, and algorithms match
|
|
9
|
+
NetworkX, including the ``"networkx"`` backend name.
|
|
10
|
+
|
|
11
|
+
See https://networkx.org for complete documentation.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
__version__ = "1.1.0"
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# These are imported in order as listed
|
|
18
|
+
from netweavex.lazy_imports import _lazy_import
|
|
19
|
+
|
|
20
|
+
from netweavex.exception import *
|
|
21
|
+
|
|
22
|
+
from netweavex import utils
|
|
23
|
+
from netweavex.utils import _clear_cache, _dispatchable
|
|
24
|
+
|
|
25
|
+
# load_and_call entry_points, set configs
|
|
26
|
+
config = utils.backends._set_configs_from_environment()
|
|
27
|
+
utils.config = utils.configs.config = config # type: ignore[attr-defined]
|
|
28
|
+
|
|
29
|
+
from netweavex import classes
|
|
30
|
+
from netweavex.classes import filters
|
|
31
|
+
from netweavex.classes import *
|
|
32
|
+
|
|
33
|
+
from netweavex import convert
|
|
34
|
+
from netweavex.convert import *
|
|
35
|
+
|
|
36
|
+
from netweavex import convert_matrix
|
|
37
|
+
from netweavex.convert_matrix import *
|
|
38
|
+
|
|
39
|
+
from netweavex import relabel
|
|
40
|
+
from netweavex.relabel import *
|
|
41
|
+
|
|
42
|
+
from netweavex import generators
|
|
43
|
+
from netweavex.generators import *
|
|
44
|
+
|
|
45
|
+
from netweavex import readwrite
|
|
46
|
+
from netweavex.readwrite import *
|
|
47
|
+
|
|
48
|
+
# Need to test with SciPy, when available
|
|
49
|
+
from netweavex import algorithms
|
|
50
|
+
from netweavex.algorithms import *
|
|
51
|
+
|
|
52
|
+
from netweavex import linalg
|
|
53
|
+
from netweavex.linalg import *
|
|
54
|
+
|
|
55
|
+
from netweavex import drawing
|
|
56
|
+
from netweavex.drawing import *
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def __getattr__(name):
|
|
60
|
+
if name == "random_tree":
|
|
61
|
+
raise AttributeError(
|
|
62
|
+
"nx.random_tree was removed in version 3.4. Use `nx.random_labeled_tree` instead.\n"
|
|
63
|
+
"See: https://networkx.org/documentation/latest/release/release_3.4.html"
|
|
64
|
+
)
|
|
65
|
+
raise AttributeError(f"module 'netweavex' has no attribute '{name}'")
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
from netweavex.algorithms.assortativity import *
|
|
2
|
+
from netweavex.algorithms.asteroidal import *
|
|
3
|
+
from netweavex.algorithms.boundary import *
|
|
4
|
+
from netweavex.algorithms.broadcasting import *
|
|
5
|
+
from netweavex.algorithms.bridges import *
|
|
6
|
+
from netweavex.algorithms.chains import *
|
|
7
|
+
from netweavex.algorithms.centrality import *
|
|
8
|
+
from netweavex.algorithms.chordal import *
|
|
9
|
+
from netweavex.algorithms.cluster import *
|
|
10
|
+
from netweavex.algorithms.clique import *
|
|
11
|
+
from netweavex.algorithms.communicability_alg import *
|
|
12
|
+
from netweavex.algorithms.components import *
|
|
13
|
+
from netweavex.algorithms.coloring import *
|
|
14
|
+
from netweavex.algorithms.core import *
|
|
15
|
+
from netweavex.algorithms.covering import *
|
|
16
|
+
from netweavex.algorithms.cycles import *
|
|
17
|
+
from netweavex.algorithms.cuts import *
|
|
18
|
+
from netweavex.algorithms.d_separation import *
|
|
19
|
+
from netweavex.algorithms.dag import *
|
|
20
|
+
from netweavex.algorithms.distance_measures import *
|
|
21
|
+
from netweavex.algorithms.distance_regular import *
|
|
22
|
+
from netweavex.algorithms.dominance import *
|
|
23
|
+
from netweavex.algorithms.dominating import *
|
|
24
|
+
from netweavex.algorithms.efficiency_measures import *
|
|
25
|
+
from netweavex.algorithms.euler import *
|
|
26
|
+
from netweavex.algorithms.graphical import *
|
|
27
|
+
from netweavex.algorithms.hierarchy import *
|
|
28
|
+
from netweavex.algorithms.hybrid import *
|
|
29
|
+
from netweavex.algorithms.link_analysis import *
|
|
30
|
+
from netweavex.algorithms.link_prediction import *
|
|
31
|
+
from netweavex.algorithms.lowest_common_ancestors import *
|
|
32
|
+
from netweavex.algorithms.isolate import *
|
|
33
|
+
from netweavex.algorithms.matching import *
|
|
34
|
+
from netweavex.algorithms.minors import *
|
|
35
|
+
from netweavex.algorithms.mis import *
|
|
36
|
+
from netweavex.algorithms.moral import *
|
|
37
|
+
from netweavex.algorithms.non_randomness import *
|
|
38
|
+
from netweavex.algorithms.operators import *
|
|
39
|
+
from netweavex.algorithms.planarity import *
|
|
40
|
+
from netweavex.algorithms.planar_drawing import *
|
|
41
|
+
from netweavex.algorithms.polynomials import *
|
|
42
|
+
from netweavex.algorithms.perfect_graph import *
|
|
43
|
+
from netweavex.algorithms.reciprocity import *
|
|
44
|
+
from netweavex.algorithms.regular import *
|
|
45
|
+
from netweavex.algorithms.richclub import *
|
|
46
|
+
from netweavex.algorithms.shortest_paths import *
|
|
47
|
+
from netweavex.algorithms.similarity import *
|
|
48
|
+
from netweavex.algorithms.graph_hashing import *
|
|
49
|
+
from netweavex.algorithms.simple_paths import *
|
|
50
|
+
from netweavex.algorithms.smallworld import *
|
|
51
|
+
from netweavex.algorithms.smetric import *
|
|
52
|
+
from netweavex.algorithms.structuralholes import *
|
|
53
|
+
from netweavex.algorithms.sparsifiers import *
|
|
54
|
+
from netweavex.algorithms.summarization import *
|
|
55
|
+
from netweavex.algorithms.swap import *
|
|
56
|
+
from netweavex.algorithms.time_dependent import *
|
|
57
|
+
from netweavex.algorithms.traversal import *
|
|
58
|
+
from netweavex.algorithms.triads import *
|
|
59
|
+
from netweavex.algorithms.vitality import *
|
|
60
|
+
from netweavex.algorithms.voronoi import *
|
|
61
|
+
from netweavex.algorithms.walks import *
|
|
62
|
+
from netweavex.algorithms.wiener import *
|
|
63
|
+
|
|
64
|
+
# Make certain subpackages available to the user as direct imports from
|
|
65
|
+
# the `networkx` namespace.
|
|
66
|
+
from netweavex.algorithms import approximation
|
|
67
|
+
from netweavex.algorithms import assortativity
|
|
68
|
+
from netweavex.algorithms import bipartite
|
|
69
|
+
from netweavex.algorithms import node_classification
|
|
70
|
+
from netweavex.algorithms import centrality
|
|
71
|
+
from netweavex.algorithms import chordal
|
|
72
|
+
from netweavex.algorithms import cluster
|
|
73
|
+
from netweavex.algorithms import clique
|
|
74
|
+
from netweavex.algorithms import components
|
|
75
|
+
from netweavex.algorithms import connectivity
|
|
76
|
+
from netweavex.algorithms import community
|
|
77
|
+
from netweavex.algorithms import coloring
|
|
78
|
+
from netweavex.algorithms import flow
|
|
79
|
+
from netweavex.algorithms import isomorphism
|
|
80
|
+
from netweavex.algorithms import link_analysis
|
|
81
|
+
from netweavex.algorithms import lowest_common_ancestors
|
|
82
|
+
from netweavex.algorithms import operators
|
|
83
|
+
from netweavex.algorithms import shortest_paths
|
|
84
|
+
from netweavex.algorithms import tournament
|
|
85
|
+
from netweavex.algorithms import traversal
|
|
86
|
+
from netweavex.algorithms import tree
|
|
87
|
+
|
|
88
|
+
# Make certain functions from some of the previous subpackages available
|
|
89
|
+
# to the user as direct imports from the `networkx` namespace.
|
|
90
|
+
from netweavex.algorithms.bipartite import complete_bipartite_graph
|
|
91
|
+
from netweavex.algorithms.bipartite import is_bipartite
|
|
92
|
+
from netweavex.algorithms.bipartite import projected_graph
|
|
93
|
+
from netweavex.algorithms.connectivity import all_pairs_node_connectivity
|
|
94
|
+
from netweavex.algorithms.connectivity import all_node_cuts
|
|
95
|
+
from netweavex.algorithms.connectivity import average_node_connectivity
|
|
96
|
+
from netweavex.algorithms.connectivity import edge_connectivity
|
|
97
|
+
from netweavex.algorithms.connectivity import edge_disjoint_paths
|
|
98
|
+
from netweavex.algorithms.connectivity import k_components
|
|
99
|
+
from netweavex.algorithms.connectivity import k_edge_components
|
|
100
|
+
from netweavex.algorithms.connectivity import k_edge_subgraphs
|
|
101
|
+
from netweavex.algorithms.connectivity import k_edge_augmentation
|
|
102
|
+
from netweavex.algorithms.connectivity import is_k_edge_connected
|
|
103
|
+
from netweavex.algorithms.connectivity import minimum_edge_cut
|
|
104
|
+
from netweavex.algorithms.connectivity import minimum_node_cut
|
|
105
|
+
from netweavex.algorithms.connectivity import node_connectivity
|
|
106
|
+
from netweavex.algorithms.connectivity import node_disjoint_paths
|
|
107
|
+
from netweavex.algorithms.connectivity import stoer_wagner
|
|
108
|
+
from netweavex.algorithms.flow import capacity_scaling
|
|
109
|
+
from netweavex.algorithms.flow import cost_of_flow
|
|
110
|
+
from netweavex.algorithms.flow import gomory_hu_tree
|
|
111
|
+
from netweavex.algorithms.flow import max_flow_min_cost
|
|
112
|
+
from netweavex.algorithms.flow import maximum_flow
|
|
113
|
+
from netweavex.algorithms.flow import maximum_flow_value
|
|
114
|
+
from netweavex.algorithms.flow import min_cost_flow
|
|
115
|
+
from netweavex.algorithms.flow import min_cost_flow_cost
|
|
116
|
+
from netweavex.algorithms.flow import minimum_cut
|
|
117
|
+
from netweavex.algorithms.flow import minimum_cut_value
|
|
118
|
+
from netweavex.algorithms.flow import network_simplex
|
|
119
|
+
from netweavex.algorithms.isomorphism import could_be_isomorphic
|
|
120
|
+
from netweavex.algorithms.isomorphism import fast_could_be_isomorphic
|
|
121
|
+
from netweavex.algorithms.isomorphism import faster_could_be_isomorphic
|
|
122
|
+
from netweavex.algorithms.isomorphism import is_isomorphic
|
|
123
|
+
from netweavex.algorithms.isomorphism.vf2pp import *
|
|
124
|
+
from netweavex.algorithms.tree.branchings import maximum_branching
|
|
125
|
+
from netweavex.algorithms.tree.branchings import maximum_spanning_arborescence
|
|
126
|
+
from netweavex.algorithms.tree.branchings import minimum_branching
|
|
127
|
+
from netweavex.algorithms.tree.branchings import minimum_spanning_arborescence
|
|
128
|
+
from netweavex.algorithms.tree.branchings import ArborescenceIterator
|
|
129
|
+
from netweavex.algorithms.tree.coding import *
|
|
130
|
+
from netweavex.algorithms.tree.decomposition import *
|
|
131
|
+
from netweavex.algorithms.tree.mst import *
|
|
132
|
+
from netweavex.algorithms.tree.operations import *
|
|
133
|
+
from netweavex.algorithms.tree.recognition import *
|
|
134
|
+
from netweavex.algorithms.tournament import is_tournament
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"""Approximations of graph properties and Heuristic methods for optimization.
|
|
2
|
+
|
|
3
|
+
The functions in this class are not imported into the top-level ``networkx``
|
|
4
|
+
namespace so the easiest way to use them is with::
|
|
5
|
+
|
|
6
|
+
>>> from netweavex.algorithms import approximation
|
|
7
|
+
|
|
8
|
+
Another option is to import the specific function with
|
|
9
|
+
``from netweavex.algorithms.approximation import function_name``.
|
|
10
|
+
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from netweavex.algorithms.approximation.clustering_coefficient import *
|
|
14
|
+
from netweavex.algorithms.approximation.clique import *
|
|
15
|
+
from netweavex.algorithms.approximation.connectivity import *
|
|
16
|
+
from netweavex.algorithms.approximation.distance_measures import *
|
|
17
|
+
from netweavex.algorithms.approximation.dominating_set import *
|
|
18
|
+
from netweavex.algorithms.approximation.kcomponents import *
|
|
19
|
+
from netweavex.algorithms.approximation.matching import *
|
|
20
|
+
from netweavex.algorithms.approximation.ramsey import *
|
|
21
|
+
from netweavex.algorithms.approximation.steinertree import *
|
|
22
|
+
from netweavex.algorithms.approximation.traveling_salesman import *
|
|
23
|
+
from netweavex.algorithms.approximation.treewidth import *
|
|
24
|
+
from netweavex.algorithms.approximation.vertex_cover import *
|
|
25
|
+
from netweavex.algorithms.approximation.maxcut import *
|
|
26
|
+
from netweavex.algorithms.approximation.density import *
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
"""Functions for computing large cliques and maximum independent sets."""
|
|
2
|
+
|
|
3
|
+
import netweavex as nx
|
|
4
|
+
from netweavex.algorithms.approximation import ramsey
|
|
5
|
+
from netweavex.utils import not_implemented_for
|
|
6
|
+
|
|
7
|
+
__all__ = [
|
|
8
|
+
"clique_removal",
|
|
9
|
+
"max_clique",
|
|
10
|
+
"large_clique_size",
|
|
11
|
+
"maximum_independent_set",
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@not_implemented_for("directed")
|
|
16
|
+
@not_implemented_for("multigraph")
|
|
17
|
+
@nx._dispatchable
|
|
18
|
+
def maximum_independent_set(G):
|
|
19
|
+
"""Returns an approximate maximum independent set.
|
|
20
|
+
|
|
21
|
+
Independent set or stable set is a set of vertices in a graph, no two of
|
|
22
|
+
which are adjacent. That is, it is a set I of vertices such that for every
|
|
23
|
+
two vertices in I, there is no edge connecting the two. Equivalently, each
|
|
24
|
+
edge in the graph has at most one endpoint in I. The size of an independent
|
|
25
|
+
set is the number of vertices it contains [1]_.
|
|
26
|
+
|
|
27
|
+
A maximum independent set is a largest independent set for a given graph G
|
|
28
|
+
and its size is denoted $\\alpha(G)$. The problem of finding such a set is called
|
|
29
|
+
the maximum independent set problem and is an NP-hard optimization problem.
|
|
30
|
+
As such, it is unlikely that there exists an efficient algorithm for finding
|
|
31
|
+
a maximum independent set of a graph.
|
|
32
|
+
|
|
33
|
+
The Independent Set algorithm is based on [2]_.
|
|
34
|
+
|
|
35
|
+
Parameters
|
|
36
|
+
----------
|
|
37
|
+
G : NetworkX graph
|
|
38
|
+
Undirected graph
|
|
39
|
+
|
|
40
|
+
Returns
|
|
41
|
+
-------
|
|
42
|
+
iset : Set
|
|
43
|
+
The apx-maximum independent set
|
|
44
|
+
|
|
45
|
+
Examples
|
|
46
|
+
--------
|
|
47
|
+
>>> G = nx.path_graph(10)
|
|
48
|
+
>>> nx.approximation.maximum_independent_set(G)
|
|
49
|
+
{0, 2, 4, 6, 9}
|
|
50
|
+
|
|
51
|
+
Raises
|
|
52
|
+
------
|
|
53
|
+
NetworkXNotImplemented
|
|
54
|
+
If the graph is directed or is a multigraph.
|
|
55
|
+
|
|
56
|
+
Notes
|
|
57
|
+
-----
|
|
58
|
+
Finds the $O(|V|/(log|V|)^2)$ apx of independent set in the worst case.
|
|
59
|
+
|
|
60
|
+
References
|
|
61
|
+
----------
|
|
62
|
+
.. [1] `Wikipedia: Independent set
|
|
63
|
+
<https://en.wikipedia.org/wiki/Independent_set_(graph_theory)>`_
|
|
64
|
+
.. [2] Boppana, R., & Halldórsson, M. M. (1992).
|
|
65
|
+
Approximating maximum independent sets by excluding subgraphs.
|
|
66
|
+
BIT Numerical Mathematics, 32(2), 180–196. Springer.
|
|
67
|
+
"""
|
|
68
|
+
iset, _ = clique_removal(G)
|
|
69
|
+
return iset
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
@not_implemented_for("directed")
|
|
73
|
+
@not_implemented_for("multigraph")
|
|
74
|
+
@nx._dispatchable
|
|
75
|
+
def max_clique(G):
|
|
76
|
+
r"""Find the Maximum Clique
|
|
77
|
+
|
|
78
|
+
Finds the $O(|V|/(log|V|)^2)$ apx of maximum clique/independent set
|
|
79
|
+
in the worst case.
|
|
80
|
+
|
|
81
|
+
Parameters
|
|
82
|
+
----------
|
|
83
|
+
G : NetworkX graph
|
|
84
|
+
Undirected graph
|
|
85
|
+
|
|
86
|
+
Returns
|
|
87
|
+
-------
|
|
88
|
+
clique : set
|
|
89
|
+
The apx-maximum clique of the graph
|
|
90
|
+
|
|
91
|
+
Examples
|
|
92
|
+
--------
|
|
93
|
+
>>> G = nx.path_graph(10)
|
|
94
|
+
>>> nx.approximation.max_clique(G)
|
|
95
|
+
{8, 9}
|
|
96
|
+
|
|
97
|
+
Raises
|
|
98
|
+
------
|
|
99
|
+
NetworkXNotImplemented
|
|
100
|
+
If the graph is directed or is a multigraph.
|
|
101
|
+
|
|
102
|
+
Notes
|
|
103
|
+
-----
|
|
104
|
+
A clique in an undirected graph G = (V, E) is a subset of the vertex set
|
|
105
|
+
`C \subseteq V` such that for every two vertices in C there exists an edge
|
|
106
|
+
connecting the two. This is equivalent to saying that the subgraph
|
|
107
|
+
induced by C is complete (in some cases, the term clique may also refer
|
|
108
|
+
to the subgraph).
|
|
109
|
+
|
|
110
|
+
A maximum clique is a clique of the largest possible size in a given graph.
|
|
111
|
+
The clique number `\omega(G)` of a graph G is the number of
|
|
112
|
+
vertices in a maximum clique in G. The intersection number of
|
|
113
|
+
G is the smallest number of cliques that together cover all edges of G.
|
|
114
|
+
|
|
115
|
+
https://en.wikipedia.org/wiki/Maximum_clique
|
|
116
|
+
|
|
117
|
+
References
|
|
118
|
+
----------
|
|
119
|
+
.. [1] Boppana, R., & Halldórsson, M. M. (1992).
|
|
120
|
+
Approximating maximum independent sets by excluding subgraphs.
|
|
121
|
+
BIT Numerical Mathematics, 32(2), 180–196. Springer.
|
|
122
|
+
doi:10.1007/BF01994876
|
|
123
|
+
"""
|
|
124
|
+
# finding the maximum clique in a graph is equivalent to finding
|
|
125
|
+
# the independent set in the complementary graph
|
|
126
|
+
cgraph = nx.complement(G)
|
|
127
|
+
iset, _ = clique_removal(cgraph)
|
|
128
|
+
return iset
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
@not_implemented_for("directed")
|
|
132
|
+
@not_implemented_for("multigraph")
|
|
133
|
+
@nx._dispatchable
|
|
134
|
+
def clique_removal(G):
|
|
135
|
+
r"""Repeatedly remove cliques from the graph.
|
|
136
|
+
|
|
137
|
+
Results in a $O(|V|/(\log |V|)^2)$ approximation of maximum clique
|
|
138
|
+
and independent set. Returns the largest independent set found, along
|
|
139
|
+
with found maximal cliques.
|
|
140
|
+
|
|
141
|
+
Parameters
|
|
142
|
+
----------
|
|
143
|
+
G : NetworkX graph
|
|
144
|
+
Undirected graph
|
|
145
|
+
|
|
146
|
+
Returns
|
|
147
|
+
-------
|
|
148
|
+
max_ind_cliques : (set, list) tuple
|
|
149
|
+
2-tuple of Maximal Independent Set and list of maximal cliques (sets).
|
|
150
|
+
|
|
151
|
+
Examples
|
|
152
|
+
--------
|
|
153
|
+
>>> G = nx.path_graph(10)
|
|
154
|
+
>>> nx.approximation.clique_removal(G)
|
|
155
|
+
({0, 2, 4, 6, 9}, [{0, 1}, {2, 3}, {4, 5}, {6, 7}, {8, 9}])
|
|
156
|
+
|
|
157
|
+
Raises
|
|
158
|
+
------
|
|
159
|
+
NetworkXNotImplemented
|
|
160
|
+
If the graph is directed or is a multigraph.
|
|
161
|
+
|
|
162
|
+
References
|
|
163
|
+
----------
|
|
164
|
+
.. [1] Boppana, R., & Halldórsson, M. M. (1992).
|
|
165
|
+
Approximating maximum independent sets by excluding subgraphs.
|
|
166
|
+
BIT Numerical Mathematics, 32(2), 180–196. Springer.
|
|
167
|
+
"""
|
|
168
|
+
graph = G.copy()
|
|
169
|
+
c_i, i_i = ramsey.ramsey_R2(graph)
|
|
170
|
+
cliques = [c_i]
|
|
171
|
+
isets = [i_i]
|
|
172
|
+
while graph:
|
|
173
|
+
graph.remove_nodes_from(c_i)
|
|
174
|
+
c_i, i_i = ramsey.ramsey_R2(graph)
|
|
175
|
+
if c_i:
|
|
176
|
+
cliques.append(c_i)
|
|
177
|
+
if i_i:
|
|
178
|
+
isets.append(i_i)
|
|
179
|
+
# Determine the largest independent set as measured by cardinality.
|
|
180
|
+
maxiset = max(isets, key=len)
|
|
181
|
+
return maxiset, cliques
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
@not_implemented_for("directed")
|
|
185
|
+
@not_implemented_for("multigraph")
|
|
186
|
+
@nx._dispatchable
|
|
187
|
+
def large_clique_size(G):
|
|
188
|
+
"""Find the size of a large clique in a graph.
|
|
189
|
+
|
|
190
|
+
A *clique* is a subset of nodes in which each pair of nodes is
|
|
191
|
+
adjacent. This function is a heuristic for finding the size of a
|
|
192
|
+
large clique in the graph.
|
|
193
|
+
|
|
194
|
+
Parameters
|
|
195
|
+
----------
|
|
196
|
+
G : NetworkX graph
|
|
197
|
+
|
|
198
|
+
Returns
|
|
199
|
+
-------
|
|
200
|
+
k: integer
|
|
201
|
+
The size of a large clique in the graph.
|
|
202
|
+
|
|
203
|
+
Examples
|
|
204
|
+
--------
|
|
205
|
+
>>> G = nx.path_graph(10)
|
|
206
|
+
>>> nx.approximation.large_clique_size(G)
|
|
207
|
+
2
|
|
208
|
+
|
|
209
|
+
Raises
|
|
210
|
+
------
|
|
211
|
+
NetworkXNotImplemented
|
|
212
|
+
If the graph is directed or is a multigraph.
|
|
213
|
+
|
|
214
|
+
Notes
|
|
215
|
+
-----
|
|
216
|
+
This implementation is from [1]_. Its worst case time complexity is
|
|
217
|
+
:math:`O(n d^2)`, where *n* is the number of nodes in the graph and
|
|
218
|
+
*d* is the maximum degree.
|
|
219
|
+
|
|
220
|
+
This function is a heuristic, which means it may work well in
|
|
221
|
+
practice, but there is no rigorous mathematical guarantee on the
|
|
222
|
+
ratio between the returned number and the actual largest clique size
|
|
223
|
+
in the graph.
|
|
224
|
+
|
|
225
|
+
References
|
|
226
|
+
----------
|
|
227
|
+
.. [1] Pattabiraman, Bharath, et al.
|
|
228
|
+
"Fast Algorithms for the Maximum Clique Problem on Massive Graphs
|
|
229
|
+
with Applications to Overlapping Community Detection."
|
|
230
|
+
*Internet Mathematics* 11.4-5 (2015): 421--448.
|
|
231
|
+
<https://doi.org/10.1080/15427951.2014.986778>
|
|
232
|
+
|
|
233
|
+
See also
|
|
234
|
+
--------
|
|
235
|
+
|
|
236
|
+
:func:`netweavex.algorithms.approximation.clique.max_clique`
|
|
237
|
+
A function that returns an approximate maximum clique with a
|
|
238
|
+
guarantee on the approximation ratio.
|
|
239
|
+
|
|
240
|
+
:mod:`netweavex.algorithms.clique`
|
|
241
|
+
Functions for finding the exact maximum clique in a graph.
|
|
242
|
+
|
|
243
|
+
"""
|
|
244
|
+
degrees = G.degree
|
|
245
|
+
|
|
246
|
+
def _clique_heuristic(G, U, size, best_size):
|
|
247
|
+
if not U:
|
|
248
|
+
return max(best_size, size)
|
|
249
|
+
u = max(U, key=degrees)
|
|
250
|
+
U.remove(u)
|
|
251
|
+
N_prime = {v for v in G[u] if degrees[v] >= best_size}
|
|
252
|
+
return _clique_heuristic(G, U & N_prime, size + 1, best_size)
|
|
253
|
+
|
|
254
|
+
best_size = 0
|
|
255
|
+
nodes = (u for u in G if degrees[u] >= best_size)
|
|
256
|
+
for u in nodes:
|
|
257
|
+
neighbors = {v for v in G[u] if degrees[v] >= best_size}
|
|
258
|
+
best_size = _clique_heuristic(G, neighbors, 1, best_size)
|
|
259
|
+
return best_size
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import netweavex as nx
|
|
2
|
+
from netweavex.utils import not_implemented_for, py_random_state
|
|
3
|
+
|
|
4
|
+
__all__ = ["average_clustering"]
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@not_implemented_for("directed")
|
|
8
|
+
@py_random_state(2)
|
|
9
|
+
@nx._dispatchable(name="approximate_average_clustering")
|
|
10
|
+
def average_clustering(G, trials=1000, seed=None):
|
|
11
|
+
r"""Estimates the average clustering coefficient of G.
|
|
12
|
+
|
|
13
|
+
The local clustering of each node in `G` is the fraction of triangles
|
|
14
|
+
that actually exist over all possible triangles in its neighborhood.
|
|
15
|
+
The average clustering coefficient of a graph `G` is the mean of
|
|
16
|
+
local clusterings.
|
|
17
|
+
|
|
18
|
+
This function finds an approximate average clustering coefficient
|
|
19
|
+
for G by repeating `n` times (defined in `trials`) the following
|
|
20
|
+
experiment: choose a node at random, choose two of its neighbors
|
|
21
|
+
at random, and check if they are connected. The approximate
|
|
22
|
+
coefficient is the fraction of triangles found over the number
|
|
23
|
+
of trials [1]_.
|
|
24
|
+
|
|
25
|
+
Parameters
|
|
26
|
+
----------
|
|
27
|
+
G : NetworkX graph
|
|
28
|
+
|
|
29
|
+
trials : integer
|
|
30
|
+
Number of trials to perform (default 1000).
|
|
31
|
+
|
|
32
|
+
seed : integer, random_state, or None (default)
|
|
33
|
+
Indicator of random number generation state.
|
|
34
|
+
See :ref:`Randomness<randomness>`.
|
|
35
|
+
|
|
36
|
+
Returns
|
|
37
|
+
-------
|
|
38
|
+
c : float
|
|
39
|
+
Approximated average clustering coefficient.
|
|
40
|
+
|
|
41
|
+
Examples
|
|
42
|
+
--------
|
|
43
|
+
>>> from netweavex.algorithms import approximation
|
|
44
|
+
>>> G = nx.erdos_renyi_graph(10, 0.2, seed=10)
|
|
45
|
+
>>> approximation.average_clustering(G, trials=1000, seed=10)
|
|
46
|
+
0.214
|
|
47
|
+
|
|
48
|
+
Raises
|
|
49
|
+
------
|
|
50
|
+
NetworkXNotImplemented
|
|
51
|
+
If G is directed.
|
|
52
|
+
|
|
53
|
+
References
|
|
54
|
+
----------
|
|
55
|
+
.. [1] Schank, Thomas, and Dorothea Wagner. Approximating clustering
|
|
56
|
+
coefficient and transitivity. Universität Karlsruhe, Fakultät für
|
|
57
|
+
Informatik, 2004.
|
|
58
|
+
https://doi.org/10.5445/IR/1000001239
|
|
59
|
+
|
|
60
|
+
"""
|
|
61
|
+
n = len(G)
|
|
62
|
+
triangles = 0
|
|
63
|
+
nodes = list(G)
|
|
64
|
+
for i in [int(seed.random() * n) for i in range(trials)]:
|
|
65
|
+
nbrs = list(G[nodes[i]])
|
|
66
|
+
if len(nbrs) < 2:
|
|
67
|
+
continue
|
|
68
|
+
u, v = seed.sample(nbrs, 2)
|
|
69
|
+
if u in G[v]:
|
|
70
|
+
triangles += 1
|
|
71
|
+
return triangles / trials
|