Python-EasyGraph 1.6.1__tar.gz → 1.6.2__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.
- {python_easygraph-1.6.1/Python_EasyGraph.egg-info → python_easygraph-1.6.2}/PKG-INFO +3 -2
- {python_easygraph-1.6.1 → python_easygraph-1.6.2/Python_EasyGraph.egg-info}/PKG-INFO +3 -2
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/Python_EasyGraph.egg-info/SOURCES.txt +29 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/README.md +2 -1
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/classes/linkgraph.h +3 -1
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/cpp_easygraph.cpp +12 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/__init__.h +2 -1
- python_easygraph-1.6.2/cpp_easygraph/functions/community/LPA.cpp +146 -0
- python_easygraph-1.6.2/cpp_easygraph/functions/community/LPA.h +7 -0
- python_easygraph-1.6.2/cpp_easygraph/functions/community/__init__.h +10 -0
- python_easygraph-1.6.2/cpp_easygraph/functions/community/ego_graph.cpp +155 -0
- python_easygraph-1.6.2/cpp_easygraph/functions/community/ego_graph.h +23 -0
- python_easygraph-1.6.2/cpp_easygraph/functions/community/graph_coloring.cpp +135 -0
- python_easygraph-1.6.2/cpp_easygraph/functions/community/graph_coloring.h +12 -0
- python_easygraph-1.6.2/cpp_easygraph/functions/community/greedy_modularity.cpp +289 -0
- python_easygraph-1.6.2/cpp_easygraph/functions/community/greedy_modularity.h +11 -0
- python_easygraph-1.6.2/cpp_easygraph/functions/community/indexed_heap.h +191 -0
- python_easygraph-1.6.2/cpp_easygraph/functions/community/localsearch.cpp +613 -0
- python_easygraph-1.6.2/cpp_easygraph/functions/community/localsearch.h +13 -0
- python_easygraph-1.6.2/cpp_easygraph/functions/community/louvain.cpp +544 -0
- python_easygraph-1.6.2/cpp_easygraph/functions/community/louvain.h +20 -0
- python_easygraph-1.6.2/cpp_easygraph/functions/community/modularity.cpp +213 -0
- python_easygraph-1.6.2/cpp_easygraph/functions/community/modularity.h +11 -0
- python_easygraph-1.6.2/cpp_easygraph/functions/community/motif.cpp +553 -0
- python_easygraph-1.6.2/cpp_easygraph/functions/community/motif.h +11 -0
- python_easygraph-1.6.2/cpp_easygraph/functions/community/subgraph.cpp +179 -0
- python_easygraph-1.6.2/cpp_easygraph/functions/community/subgraph.h +10 -0
- python_easygraph-1.6.2/cpp_easygraph/functions/community/tests/__init__.py +1 -0
- python_easygraph-1.6.2/cpp_easygraph/functions/community/tests/cpp_LPA_test.py +139 -0
- python_easygraph-1.6.2/cpp_easygraph/functions/community/tests/cpp_ego_graph_test.py +254 -0
- python_easygraph-1.6.2/cpp_easygraph/functions/community/tests/cpp_enumerate_subgraph_test.py +143 -0
- python_easygraph-1.6.2/cpp_easygraph/functions/community/tests/cpp_greedy_modularity_test.py +117 -0
- python_easygraph-1.6.2/cpp_easygraph/functions/community/tests/cpp_localsearch_test.py +188 -0
- python_easygraph-1.6.2/cpp_easygraph/functions/community/tests/cpp_louvain_test.py +178 -0
- python_easygraph-1.6.2/cpp_easygraph/functions/community/tests/cpp_modularity_test.py +161 -0
- python_easygraph-1.6.2/cpp_easygraph/functions/community/tests/run_all_tests.py +55 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/modularity_max_detection.py +3 -3
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/setup.py +1 -1
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/CMakeLists.txt +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/LICENSE +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/MANIFEST.in +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/Python_EasyGraph.egg-info/dependency_links.txt +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/Python_EasyGraph.egg-info/requires.txt +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/Python_EasyGraph.egg-info/top_level.txt +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/README.rst +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/CMakeLists.txt +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/classes/__init__.h +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/classes/coo_graph.h +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/classes/csr_graph.h +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/classes/directed_graph.cpp +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/classes/directed_graph.h +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/classes/graph.cpp +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/classes/graph.h +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/classes/operation.cpp +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/classes/operation.h +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/classes/segment_tree.cpp +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/common/common.cpp +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/common/common.h +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/common/utils.cpp +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/common/utils.h +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/basic/__init__.h +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/basic/avg_degree.cpp +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/basic/avg_degree.h +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/basic/cluster.cpp +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/basic/cluster.h +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/centrality/__init__.h +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/centrality/betweenness.cpp +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/centrality/centrality.h +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/centrality/closeness.cpp +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/centrality/degree.cpp +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/centrality/eigenvector.cpp +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/centrality/katz_centrality.cpp +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/components/__init__.h +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/components/biconnected.cpp +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/components/biconnected.h +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/components/connected.cpp +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/components/connected.h +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/components/strongly_connected.cpp +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/components/strongly_connected.h +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/cores/__init__.h +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/cores/k_cores.cpp +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/cores/k_cores.h +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/pagerank/__init__.h +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/pagerank/pagerank.cpp +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/pagerank/pagerank.h +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/path/__init__.h +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/path/average_shortest_path_length.cpp +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/path/diameter.cpp +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/path/mst.cpp +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/path/mst.h +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/path/path.cpp +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/path/path.h +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/structural_holes/__init__.h +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/structural_holes/evaluation.cpp +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/structural_holes/evaluation.h +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/_global.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/base.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/directed_graph.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/directed_multigraph.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/graph.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/graphviews.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/hypergraph.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/multigraph.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/operation.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/test_base_graph_class.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/tests/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/tests/test_base.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/tests/test_directed_graph.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/tests/test_graph.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/tests/test_graphV2.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/tests/test_hypergraph.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/tests/test_multidigraph.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/tests/test_multigraph.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/tests/test_operation.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/convert.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datapipe/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datapipe/common.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datapipe/loader.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datapipe/normalize.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/amazon_photo.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/arxiv.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/citation_graph.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/coauthor.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/dynamic/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/dynamic/email_enron.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/dynamic/email_eu.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/dynamic/hospital_lyon.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/dynamic/load_dataset.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/facebook_ego.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/flickr.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/get_sample_graph.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/github.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/gnn_benchmark.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/graph_dataset_base.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/House_Committees.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/Yelp.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/_global.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/cat_edge_Cooking.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/coauthorship.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/cocitation.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/contact_primary_school.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/cooking_200.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/hypergraph_dataset_base.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/loadDeepSetDatasets.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/mathoverflow_answers.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/senate_committees.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/trivago_clicks.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/walmart_trips.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/karate.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/ppi.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/reddit.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/roadnet.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/twitter_ego.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/utils.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/web_google.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/wiki_topcats.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/exception.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/experiments/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/experiments/base.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/experiments/hypergraphs/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/experiments/hypergraphs/hypergraph.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/experiments/vertex_classification.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/basic/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/basic/avg_degree.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/basic/cluster.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/basic/localassort.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/basic/predecessor_path_based.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/basic/tests/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/basic/tests/test_avg_degree.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/basic/tests/test_cluster.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/basic/tests/test_localassort.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/basic/tests/test_predecessor.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/betweenness.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/closeness.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/degree.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/ego_betweenness.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/eigenvector.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/flowbetweenness.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/katz_centrality.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/laplacian.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/pagerank.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/tests/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/tests/test_betweenness.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/tests/test_closeness.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/tests/test_degree.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/tests/test_egobetweenness.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/tests/test_flowbetweenness.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/tests/test_laplacian.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/tests/test_pagerank.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/LPA.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/ego_graph.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/localsearch.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/louvain.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/modularity.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/motif.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/tests/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/tests/test_LPA.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/tests/test_LS.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/tests/test_ego_graph.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/tests/test_louvian.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/tests/test_modularity.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/tests/test_modularity_max_detection.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/tests/test_motif.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/components/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/components/biconnected.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/components/connected.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/components/strongly_connected.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/components/tests/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/components/tests/test_biconnected.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/components/tests/test_connected.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/components/tests/test_strongly_connected.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/components/tests/test_weakly_connected.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/components/weakly_connected.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/core/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/core/k_core.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/core/tests/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/core/tests/test_k_core.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/drawing/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/drawing/defaults.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/drawing/drawing.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/drawing/geometry.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/drawing/layout.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/drawing/plot.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/drawing/positioning.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/drawing/simulator.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/drawing/tests/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/drawing/tests/test_drawing.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/drawing/tests/test_geometry.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/drawing/tests/test_plot.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/drawing/tests/test_positioning.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/drawing/utils.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_embedding/NOBE.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_embedding/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_embedding/deepwalk.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_embedding/line.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_embedding/net_emb_example_citeseer.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_embedding/node2vec.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_embedding/sdne.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_embedding/tests/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_embedding/tests/test_deepwalk.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_embedding/tests/test_line.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_embedding/tests/test_nobe.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_embedding/tests/test_node2vec.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_embedding/tests/test_sdne.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_generator/RandomNetwork.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_generator/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_generator/classic.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_generator/tests/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_generator/tests/test_Random_Network.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_generator/tests/test_classic.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/assortativity.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/centrality/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/centrality/cycle_ratio.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/centrality/degree.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/centrality/hypercoreness.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/centrality/s_centrality.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/centrality/vector_centrality.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/hypergraph_clustering.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/hypergraph_operation.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/null_model/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/null_model/hypergraph_classic.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/null_model/lattice.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/null_model/random.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/null_model/simple.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/null_model/tests/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/null_model/tests/test_classic.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/null_model/tests/test_lattice.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/null_model/tests/test_simple.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/null_model/uniform.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/tests/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/tests/test_assortativity.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/tests/test_centrality.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/tests/test_hypergraph_clustering.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/tests/test_hypergraph_operation.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/isolate.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/path/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/path/average_shortest_path_length.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/path/bridges.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/path/diameter.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/path/mst.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/path/path.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/path/tests/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/path/tests/test_average_shortest_path_length.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/path/tests/test_bridges.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/path/tests/test_diameter.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/path/tests/test_mst.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/path/tests/test_path.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/structural_holes/AP_Greedy.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/structural_holes/HAM.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/structural_holes/HIS.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/structural_holes/ICC.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/structural_holes/MaxD.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/structural_holes/NOBE.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/structural_holes/SHII_metric.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/structural_holes/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/structural_holes/evaluation.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/structural_holes/maxBlock.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/structural_holes/metrics.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/structural_holes/weakTie.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/tests/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/tests/test_isolate.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/ml_metrics/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/ml_metrics/base.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/ml_metrics/classification.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/ml_metrics/hypergraphs/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/ml_metrics/hypergraphs/hypergraph.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/model/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/model/hypergraphs/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/model/hypergraphs/dhcf.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/model/hypergraphs/dhne.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/model/hypergraphs/hgnn.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/model/hypergraphs/hgnnp.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/model/hypergraphs/hnhn.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/model/hypergraphs/hwnn.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/model/hypergraphs/hypergcn.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/model/hypergraphs/setgnn.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/model/hypergraphs/unignn.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/convs/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/convs/common.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/convs/hypergraphs/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/convs/hypergraphs/dhcf_conv.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/convs/hypergraphs/halfnlh_conv.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/convs/hypergraphs/hgnn_conv.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/convs/hypergraphs/hgnnp_conv.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/convs/hypergraphs/hnhn_conv.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/convs/hypergraphs/hwnn_conv.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/convs/hypergraphs/hypergcn_conv.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/convs/hypergraphs/unignn_conv.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/convs/pma.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/loss.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/regularization.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/tests/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/tests/test_gatconv.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/tests/test_gcnconv.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/tests/test_graphsageconv.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/tests/test_regularization.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/edgelist.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/gexf.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/gml.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/graphml.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/graphviz.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/json_graph/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/json_graph/node_link.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/pajek.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/pickle.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/tests/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/tests/test_edgelist.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/tests/test_gexf.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/tests/test_gml.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/tests/test_graphml.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/tests/test_graphviz.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/tests/test_pajek.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/tests/test_pickle.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/tests/test_ucinet.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/ucinet.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/tests/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/tests/script_test_cpp_easygraph.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/tests/teddy_test_cpp_easygraph_sanity_check.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/tests/test_convert.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/tests/test_cpp_easygraph.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/tests/test_hif.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/HIF.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/__init__.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/alias.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/convert_class.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/convert_to_matrix.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/decorators.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/download.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/exception.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/index_of_node.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/logging.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/mapped_queue.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/misc.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/relabel.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/sparse.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/type_change.py +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/pyproject.toml +0 -0
- {python_easygraph-1.6.1 → python_easygraph-1.6.2}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: Python-EasyGraph
|
|
3
|
-
Version: 1.6.
|
|
3
|
+
Version: 1.6.2
|
|
4
4
|
Summary: Easy Graph
|
|
5
5
|
Home-page: https://github.com/easy-graph/Easy-Graph
|
|
6
6
|
Author: Fudan DataNET Group
|
|
@@ -71,7 +71,7 @@ ___________________________________________________________________________
|
|
|
71
71
|
[python-url]: https://pypi.org/project/Python-EasyGraph/
|
|
72
72
|
[license-image]: https://img.shields.io/pypi/l/Python-EasyGraph?label=License
|
|
73
73
|
[license-url]: https://github.com/easy-graph/Easy-Graph/blob/master/LICENSE
|
|
74
|
-
[downloads-image]: https://
|
|
74
|
+
[downloads-image]: https://img.shields.io/pepy/dt/python-easygraph?label=Downloads&labelColor=brightgreen&color=yellowgreen
|
|
75
75
|
[downloads-url]: https://pypi.org/project/Python-EasyGraph/
|
|
76
76
|
|
|
77
77
|
- **Documentation:** https://easy-graph.github.io/
|
|
@@ -118,6 +118,7 @@ It bridges the gap between EasyGraph and higher-order relationships. EasyHypergr
|
|
|
118
118
|
- [11-04-2023] [EasyGraph:多功能、跨平台、高效率的跨学科网络分析库 (in Chinese)](https://swarma.org/?p=46252)
|
|
119
119
|
|
|
120
120
|
## 🚀 Releases & Milestones
|
|
121
|
+
- [05-07-2026] EasyGraph **v1.6.1** released (Add OpenMP-powered path-based functions)
|
|
121
122
|
- [02-01-2026] EasyGraph **v1.6** released (OpenMP-powered functions for large network analysis)
|
|
122
123
|
- **[01-16-2026] 🎉 1M Downloads! Thanks to our amazing community!**
|
|
123
124
|
- [01-01-2026] EasyGraph **v1.5.3** released ([The Hypergraph Interchange Format (HIF) standard](https://github.com/HIF-org/HIF-standard))
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: Python-EasyGraph
|
|
3
|
-
Version: 1.6.
|
|
3
|
+
Version: 1.6.2
|
|
4
4
|
Summary: Easy Graph
|
|
5
5
|
Home-page: https://github.com/easy-graph/Easy-Graph
|
|
6
6
|
Author: Fudan DataNET Group
|
|
@@ -71,7 +71,7 @@ ___________________________________________________________________________
|
|
|
71
71
|
[python-url]: https://pypi.org/project/Python-EasyGraph/
|
|
72
72
|
[license-image]: https://img.shields.io/pypi/l/Python-EasyGraph?label=License
|
|
73
73
|
[license-url]: https://github.com/easy-graph/Easy-Graph/blob/master/LICENSE
|
|
74
|
-
[downloads-image]: https://
|
|
74
|
+
[downloads-image]: https://img.shields.io/pepy/dt/python-easygraph?label=Downloads&labelColor=brightgreen&color=yellowgreen
|
|
75
75
|
[downloads-url]: https://pypi.org/project/Python-EasyGraph/
|
|
76
76
|
|
|
77
77
|
- **Documentation:** https://easy-graph.github.io/
|
|
@@ -118,6 +118,7 @@ It bridges the gap between EasyGraph and higher-order relationships. EasyHypergr
|
|
|
118
118
|
- [11-04-2023] [EasyGraph:多功能、跨平台、高效率的跨学科网络分析库 (in Chinese)](https://swarma.org/?p=46252)
|
|
119
119
|
|
|
120
120
|
## 🚀 Releases & Milestones
|
|
121
|
+
- [05-07-2026] EasyGraph **v1.6.1** released (Add OpenMP-powered path-based functions)
|
|
121
122
|
- [02-01-2026] EasyGraph **v1.6** released (OpenMP-powered functions for large network analysis)
|
|
122
123
|
- **[01-16-2026] 🎉 1M Downloads! Thanks to our amazing community!**
|
|
123
124
|
- [01-01-2026] EasyGraph **v1.5.3** released ([The Hypergraph Interchange Format (HIF) standard](https://github.com/HIF-org/HIF-standard))
|
|
@@ -40,6 +40,35 @@ cpp_easygraph/functions/centrality/closeness.cpp
|
|
|
40
40
|
cpp_easygraph/functions/centrality/degree.cpp
|
|
41
41
|
cpp_easygraph/functions/centrality/eigenvector.cpp
|
|
42
42
|
cpp_easygraph/functions/centrality/katz_centrality.cpp
|
|
43
|
+
cpp_easygraph/functions/community/LPA.cpp
|
|
44
|
+
cpp_easygraph/functions/community/LPA.h
|
|
45
|
+
cpp_easygraph/functions/community/__init__.h
|
|
46
|
+
cpp_easygraph/functions/community/ego_graph.cpp
|
|
47
|
+
cpp_easygraph/functions/community/ego_graph.h
|
|
48
|
+
cpp_easygraph/functions/community/graph_coloring.cpp
|
|
49
|
+
cpp_easygraph/functions/community/graph_coloring.h
|
|
50
|
+
cpp_easygraph/functions/community/greedy_modularity.cpp
|
|
51
|
+
cpp_easygraph/functions/community/greedy_modularity.h
|
|
52
|
+
cpp_easygraph/functions/community/indexed_heap.h
|
|
53
|
+
cpp_easygraph/functions/community/localsearch.cpp
|
|
54
|
+
cpp_easygraph/functions/community/localsearch.h
|
|
55
|
+
cpp_easygraph/functions/community/louvain.cpp
|
|
56
|
+
cpp_easygraph/functions/community/louvain.h
|
|
57
|
+
cpp_easygraph/functions/community/modularity.cpp
|
|
58
|
+
cpp_easygraph/functions/community/modularity.h
|
|
59
|
+
cpp_easygraph/functions/community/motif.cpp
|
|
60
|
+
cpp_easygraph/functions/community/motif.h
|
|
61
|
+
cpp_easygraph/functions/community/subgraph.cpp
|
|
62
|
+
cpp_easygraph/functions/community/subgraph.h
|
|
63
|
+
cpp_easygraph/functions/community/tests/__init__.py
|
|
64
|
+
cpp_easygraph/functions/community/tests/cpp_LPA_test.py
|
|
65
|
+
cpp_easygraph/functions/community/tests/cpp_ego_graph_test.py
|
|
66
|
+
cpp_easygraph/functions/community/tests/cpp_enumerate_subgraph_test.py
|
|
67
|
+
cpp_easygraph/functions/community/tests/cpp_greedy_modularity_test.py
|
|
68
|
+
cpp_easygraph/functions/community/tests/cpp_localsearch_test.py
|
|
69
|
+
cpp_easygraph/functions/community/tests/cpp_louvain_test.py
|
|
70
|
+
cpp_easygraph/functions/community/tests/cpp_modularity_test.py
|
|
71
|
+
cpp_easygraph/functions/community/tests/run_all_tests.py
|
|
43
72
|
cpp_easygraph/functions/components/__init__.h
|
|
44
73
|
cpp_easygraph/functions/components/biconnected.cpp
|
|
45
74
|
cpp_easygraph/functions/components/biconnected.h
|
|
@@ -16,7 +16,7 @@ ___________________________________________________________________________
|
|
|
16
16
|
[python-url]: https://pypi.org/project/Python-EasyGraph/
|
|
17
17
|
[license-image]: https://img.shields.io/pypi/l/Python-EasyGraph?label=License
|
|
18
18
|
[license-url]: https://github.com/easy-graph/Easy-Graph/blob/master/LICENSE
|
|
19
|
-
[downloads-image]: https://
|
|
19
|
+
[downloads-image]: https://img.shields.io/pepy/dt/python-easygraph?label=Downloads&labelColor=brightgreen&color=yellowgreen
|
|
20
20
|
[downloads-url]: https://pypi.org/project/Python-EasyGraph/
|
|
21
21
|
|
|
22
22
|
- **Documentation:** https://easy-graph.github.io/
|
|
@@ -63,6 +63,7 @@ It bridges the gap between EasyGraph and higher-order relationships. EasyHypergr
|
|
|
63
63
|
- [11-04-2023] [EasyGraph:多功能、跨平台、高效率的跨学科网络分析库 (in Chinese)](https://swarma.org/?p=46252)
|
|
64
64
|
|
|
65
65
|
## 🚀 Releases & Milestones
|
|
66
|
+
- [05-07-2026] EasyGraph **v1.6.1** released (Add OpenMP-powered path-based functions)
|
|
66
67
|
- [02-01-2026] EasyGraph **v1.6** released (OpenMP-powered functions for large network analysis)
|
|
67
68
|
- **[01-16-2026] 🎉 1M Downloads! Thanks to our amazing community!**
|
|
68
69
|
- [01-01-2026] EasyGraph **v1.5.3** released ([The Hypergraph Interchange Format (HIF) standard](https://github.com/HIF-org/HIF-standard))
|
|
@@ -105,4 +105,16 @@ PYBIND11_MODULE(cpp_easygraph, m) {
|
|
|
105
105
|
m.def("cpp_eccentricity", &eccentricity, py::arg("G"), py::arg("v") = py::none(), py::arg("sp") = py::none());
|
|
106
106
|
m.def("cpp_connected_components_undirected", &connected_component_undirected, py::arg("G"));
|
|
107
107
|
m.def("cpp_connected_components_directed", &connected_component_directed, py::arg("G"));
|
|
108
|
+
|
|
109
|
+
// community methods
|
|
110
|
+
m.def("cpp_modularity", &cpp_modularity, py::arg("G"), py::arg("communities"), py::arg("weight") = py::str("weight"));
|
|
111
|
+
m.def("cpp_greedy_modularity_communities", &cpp_greedy_modularity_communities, py::arg("G"), py::arg("weight") = py::str("weight"));
|
|
112
|
+
m.def("cpp_enumerate_subgraph", &cpp_enumerate_subgraph, py::arg("G"), py::arg("k"));
|
|
113
|
+
m.def("cpp_random_enumerate_subgraph", &cpp_random_enumerate_subgraph, py::arg("G"), py::arg("k"), py::arg("cut_prob"));
|
|
114
|
+
m.def("cpp_louvain_communities", &cpp_louvain_communities, py::arg("G"), py::arg("weight") = py::str("weight"), py::arg("threshold") = py::float_(0.00002), py::arg("resolution") = py::float_(1.0));
|
|
115
|
+
m.def("cpp_louvain_communities_serial", &cpp_louvain_communities_serial, py::arg("G"), py::arg("weight") = py::str("weight"), py::arg("threshold") = py::float_(0.00002), py::arg("resolution") = py::float_(1.0));
|
|
116
|
+
m.def("cpp_LPA", &cpp_LPA, py::arg("G"));
|
|
117
|
+
m.def("cpp_ego_graph", &cpp_ego_graph, py::arg("G"), py::arg("n"), py::arg("radius") = py::int_(1), py::arg("center") = py::bool_(true), py::arg("undirected") = py::bool_(false), py::arg("distance") = py::none());
|
|
118
|
+
m.def("cpp_ego_graph_csr", &cpp_ego_graph_csr, py::arg("G"), py::arg("n"), py::arg("radius") = py::int_(1), py::arg("center") = py::bool_(true), py::arg("undirected") = py::bool_(false), py::arg("distance") = py::none());
|
|
119
|
+
m.def("cpp_localsearch", &cpp_localsearch, py::arg("G"), py::arg("center_num") = py::none(), py::arg("auto_choose_centers") = py::bool_(false), py::arg("maximum_tree") = py::bool_(true), py::arg("seed") = py::none(), py::arg("self_loop") = py::bool_(false));
|
|
108
120
|
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
#include <vector>
|
|
2
|
+
#include <unordered_map>
|
|
3
|
+
#include <algorithm>
|
|
4
|
+
#include <random>
|
|
5
|
+
#include <queue>
|
|
6
|
+
#include <cstdint>
|
|
7
|
+
#include <pybind11/pybind11.h>
|
|
8
|
+
#include <pybind11/stl.h>
|
|
9
|
+
#include "../../classes/graph.h"
|
|
10
|
+
#include "../../classes/linkgraph.h"
|
|
11
|
+
#include "../../common/utils.h"
|
|
12
|
+
|
|
13
|
+
namespace py = pybind11;
|
|
14
|
+
using namespace std;
|
|
15
|
+
|
|
16
|
+
py::object cpp_LPA(py::object G) {
|
|
17
|
+
Graph& G_ = G.cast<Graph&>();
|
|
18
|
+
Graph_L linkgraph = G_._get_linkgraph_structure();
|
|
19
|
+
int n = linkgraph.n;
|
|
20
|
+
|
|
21
|
+
py::dict id_to_node = G_.id_to_node;
|
|
22
|
+
|
|
23
|
+
if (n <= 1) {
|
|
24
|
+
py::dict result;
|
|
25
|
+
if (n == 1) {
|
|
26
|
+
py::list node_list;
|
|
27
|
+
node_list.append(id_to_node[py::cast(1)]);
|
|
28
|
+
result[py::cast(1)] = node_list;
|
|
29
|
+
}
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
vector<vector<int>> adj(n + 1);
|
|
34
|
+
for (int u = 1; u <= n; ++u) {
|
|
35
|
+
for (int e = linkgraph.head[u]; e != -1; e = linkgraph.edges[e].next) {
|
|
36
|
+
int v = linkgraph.edges[e].to;
|
|
37
|
+
if (u != v) {
|
|
38
|
+
adj[u].push_back(v);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
for (int u = 1; u <= n; ++u) {
|
|
44
|
+
if (adj[u].size() > 1) {
|
|
45
|
+
sort(adj[u].begin(), adj[u].end());
|
|
46
|
+
adj[u].erase(unique(adj[u].begin(), adj[u].end()), adj[u].end());
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
vector<int> labels(n);
|
|
51
|
+
vector<int> nodes(n);
|
|
52
|
+
for (int i = 0; i < n; ++i) {
|
|
53
|
+
labels[i] = i;
|
|
54
|
+
nodes[i] = i + 1;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
random_device rd;
|
|
58
|
+
mt19937 gen(rd());
|
|
59
|
+
|
|
60
|
+
const int MAX_ITERATIONS = 1000;
|
|
61
|
+
int iteration_count = 0;
|
|
62
|
+
|
|
63
|
+
vector<int> label_count(n, 0);
|
|
64
|
+
vector<int> active_labels;
|
|
65
|
+
active_labels.reserve(128);
|
|
66
|
+
|
|
67
|
+
while (iteration_count < MAX_ITERATIONS) {
|
|
68
|
+
iteration_count++;
|
|
69
|
+
|
|
70
|
+
shuffle(nodes.begin(), nodes.end(), gen);
|
|
71
|
+
|
|
72
|
+
bool changed = false;
|
|
73
|
+
for (int node : nodes) {
|
|
74
|
+
int max_count = 0;
|
|
75
|
+
|
|
76
|
+
for (int neighbor : adj[node]) {
|
|
77
|
+
int neighbor_label = labels[neighbor - 1];
|
|
78
|
+
if (label_count[neighbor_label] == 0) {
|
|
79
|
+
active_labels.push_back(neighbor_label);
|
|
80
|
+
}
|
|
81
|
+
label_count[neighbor_label]++;
|
|
82
|
+
if (label_count[neighbor_label] > max_count) {
|
|
83
|
+
max_count = label_count[neighbor_label];
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
if (max_count > 0) {
|
|
88
|
+
int current_label = labels[node - 1];
|
|
89
|
+
|
|
90
|
+
vector<int> best_labels;
|
|
91
|
+
for (int label : active_labels) {
|
|
92
|
+
if (label_count[label] == max_count) {
|
|
93
|
+
best_labels.push_back(label);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
bool current_is_best = false;
|
|
98
|
+
for (int label : best_labels) {
|
|
99
|
+
if (label == current_label) {
|
|
100
|
+
current_is_best = true;
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (!current_is_best) {
|
|
106
|
+
changed = true;
|
|
107
|
+
|
|
108
|
+
if (best_labels.size() == 1) {
|
|
109
|
+
labels[node - 1] = best_labels[0];
|
|
110
|
+
} else {
|
|
111
|
+
uniform_int_distribution<> dis(0, best_labels.size() - 1);
|
|
112
|
+
labels[node - 1] = best_labels[dis(gen)];
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
for (int label : active_labels) {
|
|
118
|
+
label_count[label] = 0;
|
|
119
|
+
}
|
|
120
|
+
active_labels.clear();
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if (!changed) {
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
unordered_map<int, vector<int>> label_to_nodes;
|
|
129
|
+
for (int i = 0; i < n; ++i) {
|
|
130
|
+
int label = labels[i];
|
|
131
|
+
label_to_nodes[label].push_back(i + 1);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
py::dict result;
|
|
135
|
+
int community_id = 1;
|
|
136
|
+
for (const auto& pair : label_to_nodes) {
|
|
137
|
+
py::list node_list;
|
|
138
|
+
for (int internal_id : pair.second) {
|
|
139
|
+
node_list.append(id_to_node[py::cast(internal_id)]);
|
|
140
|
+
}
|
|
141
|
+
result[py::cast(community_id)] = node_list;
|
|
142
|
+
community_id++;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return result;
|
|
146
|
+
}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
#include "ego_graph.h"
|
|
2
|
+
#include "subgraph.h"
|
|
3
|
+
#include "../../classes/graph.h"
|
|
4
|
+
#include "../../classes/directed_graph.h"
|
|
5
|
+
#include "../../classes/csr_graph.h"
|
|
6
|
+
#include "../../common/utils.h"
|
|
7
|
+
#include "../../classes/linkgraph.h"
|
|
8
|
+
#include "../path/path.h"
|
|
9
|
+
#include <algorithm>
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
struct _EgoGraphCore {
|
|
13
|
+
Graph_L G_l;
|
|
14
|
+
std::vector<node_t> node_ids;
|
|
15
|
+
std::unordered_map<node_t, int> node_to_idx;
|
|
16
|
+
py::dict id_to_node_py;
|
|
17
|
+
bool has_error = false;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
static _EgoGraphCore _cpp_ego_graph_compute_impl(
|
|
22
|
+
Graph& G_,
|
|
23
|
+
py::object n,
|
|
24
|
+
double radius_val,
|
|
25
|
+
bool center_val,
|
|
26
|
+
bool undirected_val,
|
|
27
|
+
bool is_directed,
|
|
28
|
+
const std::string& weight_key) {
|
|
29
|
+
|
|
30
|
+
_EgoGraphCore out;
|
|
31
|
+
|
|
32
|
+
if (G_.node_to_id.contains(n) == 0) {
|
|
33
|
+
PyErr_Format(PyExc_KeyError, "Node %R is not in the graph.", n.ptr());
|
|
34
|
+
out.has_error = true;
|
|
35
|
+
return out;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
node_t center_id = G_.node_to_id[n].cast<node_t>();
|
|
39
|
+
out.id_to_node_py = G_.id_to_node;
|
|
40
|
+
|
|
41
|
+
if (G_.linkgraph_dirty || G_.linkgraph_structure.max_deg == -1) {
|
|
42
|
+
if (undirected_val) {
|
|
43
|
+
out.G_l = graph_to_linkgraph(G_, false, weight_key, true, false);
|
|
44
|
+
} else {
|
|
45
|
+
out.G_l = graph_to_linkgraph(G_, is_directed, weight_key, true, false);
|
|
46
|
+
}
|
|
47
|
+
G_.linkgraph_dirty = false;
|
|
48
|
+
G_.linkgraph_structure = out.G_l; // also cache the freshly built linkgraph
|
|
49
|
+
} else {
|
|
50
|
+
out.G_l = G_.linkgraph_structure;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
std::vector<double> dist = _dijkstra(out.G_l, center_id, -1);
|
|
54
|
+
int N = out.G_l.n;
|
|
55
|
+
for (int i = 1; i <= N; i++) {
|
|
56
|
+
if (dist[i] > radius_val) continue;
|
|
57
|
+
if (!center_val && i == (int)center_id) continue;
|
|
58
|
+
out.node_to_idx[i] = (int)out.node_ids.size();
|
|
59
|
+
out.node_ids.push_back(i);
|
|
60
|
+
}
|
|
61
|
+
return out;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
static _EgoGraphCore _cpp_ego_graph_compute(
|
|
66
|
+
py::object G,
|
|
67
|
+
py::object n,
|
|
68
|
+
py::object radius,
|
|
69
|
+
py::object center,
|
|
70
|
+
py::object undirected,
|
|
71
|
+
py::object distance) {
|
|
72
|
+
|
|
73
|
+
bool is_directed = G.attr("is_directed")().cast<bool>();
|
|
74
|
+
bool center_val = center.cast<bool>();
|
|
75
|
+
bool undirected_val = undirected.cast<bool>();
|
|
76
|
+
double radius_val = radius.cast<double>();
|
|
77
|
+
std::string weight_key = weight_to_string(distance);
|
|
78
|
+
|
|
79
|
+
if (is_directed) {
|
|
80
|
+
DiGraph& G_ = G.cast<DiGraph&>();
|
|
81
|
+
return _cpp_ego_graph_compute_impl(
|
|
82
|
+
G_, n, radius_val, center_val, undirected_val, is_directed, weight_key);
|
|
83
|
+
} else {
|
|
84
|
+
Graph& G_ = G.cast<Graph&>();
|
|
85
|
+
return _cpp_ego_graph_compute_impl(
|
|
86
|
+
G_, n, radius_val, center_val, undirected_val, is_directed, weight_key);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
py::object cpp_ego_graph(
|
|
92
|
+
py::object G,
|
|
93
|
+
py::object n,
|
|
94
|
+
py::object radius,
|
|
95
|
+
py::object center,
|
|
96
|
+
py::object undirected,
|
|
97
|
+
py::object distance) {
|
|
98
|
+
|
|
99
|
+
_EgoGraphCore core = _cpp_ego_graph_compute(G, n, radius, center, undirected, distance);
|
|
100
|
+
if (core.has_error) return py::none();
|
|
101
|
+
|
|
102
|
+
return nodes_subgraph_cpp(G, core.node_ids);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
py::object cpp_ego_graph_csr(
|
|
107
|
+
py::object G,
|
|
108
|
+
py::object n,
|
|
109
|
+
py::object radius,
|
|
110
|
+
py::object center,
|
|
111
|
+
py::object undirected,
|
|
112
|
+
py::object distance) {
|
|
113
|
+
|
|
114
|
+
_EgoGraphCore core = _cpp_ego_graph_compute(G, n, radius, center, undirected, distance);
|
|
115
|
+
if (core.has_error) return py::none();
|
|
116
|
+
|
|
117
|
+
int n_nodes = (int)core.node_ids.size();
|
|
118
|
+
if (n_nodes == 0) {
|
|
119
|
+
return py::dict();
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
std::vector<int> V(n_nodes + 1, 0);
|
|
123
|
+
std::vector<int> E;
|
|
124
|
+
std::vector<double> W;
|
|
125
|
+
|
|
126
|
+
for (int new_u = 0; new_u < n_nodes; new_u++) {
|
|
127
|
+
node_t u = core.node_ids[new_u];
|
|
128
|
+
V[new_u + 1] = V[new_u];
|
|
129
|
+
|
|
130
|
+
int edge_idx = core.G_l.head[u];
|
|
131
|
+
while (edge_idx != -1 && edge_idx < core.G_l.e) {
|
|
132
|
+
node_t v = core.G_l.edges[edge_idx].to;
|
|
133
|
+
auto it = core.node_to_idx.find(v);
|
|
134
|
+
if (it != core.node_to_idx.end()) {
|
|
135
|
+
E.push_back(it->second);
|
|
136
|
+
W.push_back(core.G_l.edges[edge_idx].w);
|
|
137
|
+
V[new_u + 1]++;
|
|
138
|
+
}
|
|
139
|
+
edge_idx = core.G_l.edges[edge_idx].next;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
py::list original_nodes;
|
|
144
|
+
for (node_t internal_id : core.node_ids) {
|
|
145
|
+
original_nodes.append(core.id_to_node_py[py::cast(internal_id)]);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
py::dict result;
|
|
149
|
+
result["nodes"] = original_nodes;
|
|
150
|
+
result["V"] = py::cast(V);
|
|
151
|
+
result["E"] = py::cast(E);
|
|
152
|
+
result["W"] = py::cast(W);
|
|
153
|
+
|
|
154
|
+
return result;
|
|
155
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <pybind11/pybind11.h>
|
|
4
|
+
|
|
5
|
+
namespace py = pybind11;
|
|
6
|
+
|
|
7
|
+
py::object cpp_ego_graph(
|
|
8
|
+
py::object G,
|
|
9
|
+
py::object n,
|
|
10
|
+
py::object radius = py::int_(1),
|
|
11
|
+
py::object center = py::bool_(true),
|
|
12
|
+
py::object undirected = py::bool_(false),
|
|
13
|
+
py::object distance = py::none()
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
py::object cpp_ego_graph_csr(
|
|
17
|
+
py::object G,
|
|
18
|
+
py::object n,
|
|
19
|
+
py::object radius = py::int_(1),
|
|
20
|
+
py::object center = py::bool_(true),
|
|
21
|
+
py::object undirected = py::bool_(false),
|
|
22
|
+
py::object distance = py::none()
|
|
23
|
+
);
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
#include <vector>
|
|
2
|
+
#include <unordered_map>
|
|
3
|
+
#include <algorithm>
|
|
4
|
+
#include <iostream>
|
|
5
|
+
#include <random>
|
|
6
|
+
#include <numeric>
|
|
7
|
+
#include <cstdint>
|
|
8
|
+
#include <chrono>
|
|
9
|
+
#include <queue>
|
|
10
|
+
#include <cstring>
|
|
11
|
+
|
|
12
|
+
#ifdef _OPENMP
|
|
13
|
+
#include <omp.h>
|
|
14
|
+
#else
|
|
15
|
+
#warning "OpenMP is not available: omp_graph_coloring will fall back to single-threaded execution."
|
|
16
|
+
#endif
|
|
17
|
+
|
|
18
|
+
#include "../../classes/linkgraph.h"
|
|
19
|
+
|
|
20
|
+
using namespace std;
|
|
21
|
+
|
|
22
|
+
vector<int> greedy_graph_coloring(const Graph_L& G) {
|
|
23
|
+
int n = G.n;
|
|
24
|
+
if (n == 0) return vector<int>();
|
|
25
|
+
|
|
26
|
+
vector<int> degree(n + 1, 0);
|
|
27
|
+
for (int v = 1; v <= n; ++v) {
|
|
28
|
+
for (int e = G.head[v]; e != -1; e = G.edges[e].next) {
|
|
29
|
+
degree[v]++;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
vector<int> nodes(n);
|
|
34
|
+
iota(nodes.begin(), nodes.end(), 1);
|
|
35
|
+
sort(nodes.begin(), nodes.end(), [°ree](int a, int b) {
|
|
36
|
+
return degree[a] > degree[b];
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
vector<int> colors(n, -1);
|
|
40
|
+
vector<int> used(n + 1, -1);
|
|
41
|
+
|
|
42
|
+
for (int u : nodes) {
|
|
43
|
+
for (int e = G.head[u]; e != -1; e = G.edges[e].next) {
|
|
44
|
+
int v = G.edges[e].to;
|
|
45
|
+
if (v == u) continue;
|
|
46
|
+
int neighbor_color = colors[v - 1];
|
|
47
|
+
if (neighbor_color != -1) {
|
|
48
|
+
used[neighbor_color] = u;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
int cr = 0;
|
|
53
|
+
while (cr <= n && used[cr] == u) {
|
|
54
|
+
cr++;
|
|
55
|
+
}
|
|
56
|
+
colors[u - 1] = cr;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return colors;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
vector<int> omp_graph_coloring(const Graph_L& G) {
|
|
63
|
+
int n = G.n;
|
|
64
|
+
if (n == 0) return vector<int>();
|
|
65
|
+
|
|
66
|
+
vector<int> degree(n + 1, 0);
|
|
67
|
+
for (int v = 1; v <= n; ++v) {
|
|
68
|
+
for (int e = G.head[v]; e != -1; e = G.edges[e].next) {
|
|
69
|
+
degree[v]++;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
vector<int> nodes(n);
|
|
74
|
+
iota(nodes.begin(), nodes.end(), 1);
|
|
75
|
+
sort(nodes.begin(), nodes.end(), [°ree](int a, int b) {
|
|
76
|
+
return degree[a] > degree[b];
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
vector<int> colors(n, -1);
|
|
80
|
+
|
|
81
|
+
#pragma omp parallel
|
|
82
|
+
{
|
|
83
|
+
vector<int> local_used(n + 1, -1);
|
|
84
|
+
|
|
85
|
+
#pragma omp for schedule(guided)
|
|
86
|
+
for (int i = 0; i < n; ++i) {
|
|
87
|
+
int u = nodes[i];
|
|
88
|
+
|
|
89
|
+
fill(local_used.begin(), local_used.end(), -1);
|
|
90
|
+
|
|
91
|
+
for (int e = G.head[u]; e != -1; e = G.edges[e].next) {
|
|
92
|
+
int v = G.edges[e].to;
|
|
93
|
+
if (v == u) continue;
|
|
94
|
+
int neighbor_color = colors[v - 1];
|
|
95
|
+
if (neighbor_color != -1 && neighbor_color <= n) {
|
|
96
|
+
local_used[neighbor_color] = u;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
int cr = 0;
|
|
101
|
+
while (cr <= n && local_used[cr] == u) {
|
|
102
|
+
cr++;
|
|
103
|
+
}
|
|
104
|
+
colors[u - 1] = cr;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return colors;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
bool verify_coloring(const Graph_L& g, const vector<int>& colors) {
|
|
112
|
+
int n = g.n;
|
|
113
|
+
for (int v = 1; v <= n; v++) {
|
|
114
|
+
int v_color = colors[v - 1];
|
|
115
|
+
for (int e = g.head[v]; e != -1; e = g.edges[e].next) {
|
|
116
|
+
int u = g.edges[e].to;
|
|
117
|
+
if (u == v) continue;
|
|
118
|
+
int u_color = colors[u - 1];
|
|
119
|
+
if (v_color == u_color) {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
int count_colors(const vector<int>& colors) {
|
|
128
|
+
int max_color = -1;
|
|
129
|
+
for (int c : colors) {
|
|
130
|
+
if (c > max_color) {
|
|
131
|
+
max_color = c;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return max_color + 1;
|
|
135
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <vector>
|
|
4
|
+
#include "../../classes/linkgraph.h"
|
|
5
|
+
|
|
6
|
+
std::vector<int> greedy_graph_coloring(const Graph_L& G);
|
|
7
|
+
|
|
8
|
+
std::vector<int> omp_graph_coloring(const Graph_L& G);
|
|
9
|
+
|
|
10
|
+
bool verify_coloring(const Graph_L& g, const std::vector<int>& colors);
|
|
11
|
+
|
|
12
|
+
int count_colors(const std::vector<int>& colors);
|