Python-EasyGraph 1.4.6__tar.gz → 1.5.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {python_easygraph-1.4.6/Python_EasyGraph.egg-info → python_easygraph-1.5.1}/PKG-INFO +9 -7
- {python_easygraph-1.4.6 → python_easygraph-1.5.1/Python_EasyGraph.egg-info}/PKG-INFO +9 -7
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/Python_EasyGraph.egg-info/SOURCES.txt +13 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/Python_EasyGraph.egg-info/requires.txt +1 -1
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/README.md +5 -4
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/cpp_easygraph.cpp +1 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/centrality/centrality.h +9 -1
- python_easygraph-1.5.1/cpp_easygraph/functions/centrality/katz_centrality.cpp +120 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datasets/__init__.py +19 -7
- python_easygraph-1.5.1/easygraph/datasets/amazon_photo.py +110 -0
- python_easygraph-1.5.1/easygraph/datasets/arxiv.py +106 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datasets/citation_graph.py +3 -3
- python_easygraph-1.5.1/easygraph/datasets/coauthor.py +118 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datasets/dynamic/email_enron.py +1 -2
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datasets/dynamic/email_eu.py +1 -2
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datasets/dynamic/hospital_lyon.py +4 -3
- python_easygraph-1.5.1/easygraph/datasets/facebook_ego.py +109 -0
- python_easygraph-1.5.1/easygraph/datasets/flickr.py +129 -0
- python_easygraph-1.5.1/easygraph/datasets/github.py +125 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datasets/graph_dataset_base.py +1 -2
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datasets/ppi.py +2 -1
- python_easygraph-1.5.1/easygraph/datasets/reddit.py +104 -0
- python_easygraph-1.5.1/easygraph/datasets/roadnet.py +107 -0
- python_easygraph-1.5.1/easygraph/datasets/twitter_ego.py +65 -0
- python_easygraph-1.5.1/easygraph/datasets/web_google.py +118 -0
- python_easygraph-1.5.1/easygraph/datasets/wiki_topcats.py +105 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/centrality/__init__.py +1 -0
- python_easygraph-1.5.1/easygraph/functions/centrality/katz_centrality.py +105 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/model/hypergraphs/hwnn.py +1 -1
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/nn/convs/hypergraphs/hwnn_conv.py +1 -1
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/pyproject.toml +1 -1
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/setup.py +4 -3
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/CMakeLists.txt +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/LICENSE +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/MANIFEST.in +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/Python_EasyGraph.egg-info/dependency_links.txt +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/Python_EasyGraph.egg-info/top_level.txt +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/README.rst +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/CMakeLists.txt +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/classes/__init__.h +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/classes/coo_graph.h +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/classes/csr_graph.h +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/classes/directed_graph.cpp +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/classes/directed_graph.h +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/classes/graph.cpp +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/classes/graph.h +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/classes/linkgraph.h +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/classes/operation.cpp +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/classes/operation.h +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/classes/segment_tree.cpp +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/common/common.cpp +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/common/common.h +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/common/utils.cpp +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/common/utils.h +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/__init__.h +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/basic/__init__.h +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/basic/avg_degree.cpp +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/basic/avg_degree.h +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/basic/cluster.cpp +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/basic/cluster.h +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/centrality/__init__.h +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/centrality/betweenness.cpp +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/centrality/closeness.cpp +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/components/__init__.h +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/components/biconnected.cpp +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/components/biconnected.h +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/components/connected.cpp +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/components/connected.h +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/components/strongly_connected.cpp +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/components/strongly_connected.h +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/cores/__init__.h +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/cores/k_cores.cpp +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/cores/k_cores.h +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/pagerank/__init__.h +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/pagerank/pagerank.cpp +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/pagerank/pagerank.h +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/path/__init__.h +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/path/mst.cpp +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/path/mst.h +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/path/path.cpp +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/path/path.h +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/structural_holes/__init__.h +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/structural_holes/evaluation.cpp +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/structural_holes/evaluation.h +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/_global.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/classes/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/classes/base.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/classes/directed_graph.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/classes/directed_multigraph.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/classes/graph.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/classes/graphviews.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/classes/hypergraph.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/classes/multigraph.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/classes/operation.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/classes/test_base_graph_class.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/classes/tests/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/classes/tests/test_base.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/classes/tests/test_directed_graph.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/classes/tests/test_graph.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/classes/tests/test_graphV2.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/classes/tests/test_hypergraph.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/classes/tests/test_multidigraph.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/classes/tests/test_multigraph.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/classes/tests/test_operation.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/convert.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datapipe/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datapipe/common.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datapipe/loader.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datapipe/normalize.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datasets/dynamic/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datasets/dynamic/load_dataset.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datasets/get_sample_graph.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datasets/gnn_benchmark.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datasets/hypergraph/House_Committees.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datasets/hypergraph/Yelp.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datasets/hypergraph/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datasets/hypergraph/_global.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datasets/hypergraph/cat_edge_Cooking.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datasets/hypergraph/coauthorship.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datasets/hypergraph/cocitation.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datasets/hypergraph/contact_primary_school.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datasets/hypergraph/cooking_200.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datasets/hypergraph/hypergraph_dataset_base.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datasets/hypergraph/loadDeepSetDatasets.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datasets/hypergraph/mathoverflow_answers.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datasets/hypergraph/senate_committees.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datasets/hypergraph/trivago_clicks.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datasets/hypergraph/walmart_trips.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datasets/karate.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/datasets/utils.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/exception.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/experiments/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/experiments/base.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/experiments/hypergraphs/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/experiments/hypergraphs/hypergraph.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/experiments/vertex_classification.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/basic/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/basic/avg_degree.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/basic/cluster.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/basic/localassort.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/basic/predecessor_path_based.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/basic/tests/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/basic/tests/test_avg_degree.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/basic/tests/test_cluster.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/basic/tests/test_localassort.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/basic/tests/test_predecessor.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/centrality/betweenness.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/centrality/closeness.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/centrality/degree.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/centrality/ego_betweenness.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/centrality/flowbetweenness.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/centrality/laplacian.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/centrality/pagerank.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/centrality/tests/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/centrality/tests/test_betweenness.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/centrality/tests/test_closeness.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/centrality/tests/test_degree.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/centrality/tests/test_egobetweenness.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/centrality/tests/test_flowbetweenness.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/centrality/tests/test_laplacian.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/centrality/tests/test_pagerank.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/community/LPA.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/community/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/community/ego_graph.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/community/louvain.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/community/modularity.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/community/modularity_max_detection.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/community/motif.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/community/tests/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/community/tests/test_LPA.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/community/tests/test_ego_graph.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/community/tests/test_louvian.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/community/tests/test_modularity.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/community/tests/test_modularity_max_detection.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/community/tests/test_motif.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/components/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/components/biconnected.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/components/connected.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/components/strongly_connected.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/components/tests/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/components/tests/test_biconnected.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/components/tests/test_connected.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/components/tests/test_strongly_connected.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/components/tests/test_weakly_connected.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/components/weakly_connected.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/core/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/core/k_core.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/core/tests/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/core/tests/test_k_core.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/drawing/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/drawing/defaults.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/drawing/drawing.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/drawing/geometry.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/drawing/layout.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/drawing/plot.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/drawing/positioning.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/drawing/simulator.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/drawing/tests/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/drawing/tests/test_drawing.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/drawing/tests/test_geometry.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/drawing/tests/test_plot.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/drawing/tests/test_positioning.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/drawing/utils.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/graph_embedding/NOBE.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/graph_embedding/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/graph_embedding/deepwalk.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/graph_embedding/line.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/graph_embedding/net_emb_example_citeseer.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/graph_embedding/node2vec.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/graph_embedding/sdne.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/graph_embedding/tests/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/graph_embedding/tests/test_deepwalk.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/graph_embedding/tests/test_line.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/graph_embedding/tests/test_nobe.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/graph_embedding/tests/test_node2vec.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/graph_embedding/tests/test_sdne.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/graph_generator/RandomNetwork.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/graph_generator/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/graph_generator/classic.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/graph_generator/tests/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/graph_generator/tests/test_Random_Network.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/graph_generator/tests/test_classic.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/hypergraph/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/hypergraph/assortativity.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/hypergraph/centrality/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/hypergraph/centrality/cycle_ratio.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/hypergraph/centrality/degree.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/hypergraph/centrality/hypercoreness.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/hypergraph/centrality/s_centrality.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/hypergraph/centrality/vector_centrality.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/hypergraph/hypergraph_clustering.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/hypergraph/hypergraph_operation.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/hypergraph/null_model/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/hypergraph/null_model/hypergraph_classic.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/hypergraph/null_model/lattice.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/hypergraph/null_model/random.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/hypergraph/null_model/simple.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/hypergraph/null_model/tests/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/hypergraph/null_model/tests/test_classic.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/hypergraph/null_model/tests/test_lattice.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/hypergraph/null_model/tests/test_simple.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/hypergraph/null_model/uniform.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/hypergraph/tests/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/hypergraph/tests/test_assortativity.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/hypergraph/tests/test_centrality.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/hypergraph/tests/test_hypergraph_clustering.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/hypergraph/tests/test_hypergraph_operation.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/isolate.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/path/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/path/average_shortest_path_length.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/path/bridges.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/path/diameter.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/path/mst.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/path/path.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/path/tests/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/path/tests/test_average_shortest_path_length.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/path/tests/test_bridges.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/path/tests/test_diameter.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/path/tests/test_mst.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/path/tests/test_path.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/structural_holes/AP_Greedy.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/structural_holes/HAM.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/structural_holes/HIS.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/structural_holes/ICC.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/structural_holes/MaxD.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/structural_holes/NOBE.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/structural_holes/SHII_metric.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/structural_holes/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/structural_holes/evaluation.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/structural_holes/maxBlock.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/structural_holes/metrics.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/structural_holes/weakTie.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/tests/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/functions/tests/test_isolate.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/ml_metrics/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/ml_metrics/base.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/ml_metrics/classification.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/ml_metrics/hypergraphs/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/ml_metrics/hypergraphs/hypergraph.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/model/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/model/hypergraphs/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/model/hypergraphs/dhcf.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/model/hypergraphs/dhne.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/model/hypergraphs/hgnn.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/model/hypergraphs/hgnnp.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/model/hypergraphs/hnhn.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/model/hypergraphs/hypergcn.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/model/hypergraphs/setgnn.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/model/hypergraphs/unignn.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/nn/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/nn/convs/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/nn/convs/common.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/nn/convs/hypergraphs/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/nn/convs/hypergraphs/dhcf_conv.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/nn/convs/hypergraphs/halfnlh_conv.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/nn/convs/hypergraphs/hgnn_conv.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/nn/convs/hypergraphs/hgnnp_conv.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/nn/convs/hypergraphs/hnhn_conv.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/nn/convs/hypergraphs/hypergcn_conv.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/nn/convs/hypergraphs/unignn_conv.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/nn/convs/pma.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/nn/loss.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/nn/regularization.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/nn/tests/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/nn/tests/test_gatconv.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/nn/tests/test_gcnconv.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/nn/tests/test_graphsageconv.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/nn/tests/test_regularization.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/readwrite/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/readwrite/edgelist.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/readwrite/gexf.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/readwrite/gml.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/readwrite/graphml.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/readwrite/graphviz.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/readwrite/json_graph/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/readwrite/json_graph/node_link.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/readwrite/pajek.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/readwrite/pickle.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/readwrite/tests/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/readwrite/tests/test_edgelist.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/readwrite/tests/test_gexf.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/readwrite/tests/test_gml.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/readwrite/tests/test_graphml.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/readwrite/tests/test_graphviz.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/readwrite/tests/test_pajek.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/readwrite/tests/test_pickle.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/readwrite/tests/test_ucinet.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/readwrite/ucinet.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/tests/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/tests/script_test_cpp_easygraph.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/tests/teddy_test_cpp_easygraph_sanity_check.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/tests/test_convert.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/tests/test_cpp_easygraph.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/utils/__init__.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/utils/alias.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/utils/convert_class.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/utils/convert_to_matrix.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/utils/decorators.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/utils/download.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/utils/exception.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/utils/index_of_node.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/utils/logging.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/utils/mapped_queue.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/utils/misc.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/utils/relabel.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/utils/sparse.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/easygraph/utils/type_change.py +0 -0
- {python_easygraph-1.4.6 → python_easygraph-1.5.1}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: Python-EasyGraph
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.5.1
|
|
4
4
|
Summary: Easy Graph
|
|
5
5
|
Home-page: https://github.com/easy-graph/Easy-Graph
|
|
6
6
|
Author: Fudan DataNET Group
|
|
@@ -11,13 +11,14 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
11
11
|
Classifier: Programming Language :: Python :: 3.11
|
|
12
12
|
Classifier: Programming Language :: Python :: 3.12
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.13
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
14
15
|
Classifier: License :: OSI Approved :: BSD License
|
|
15
16
|
Classifier: Operating System :: OS Independent
|
|
16
|
-
Requires-Python: >=3.8, <3.
|
|
17
|
+
Requires-Python: >=3.8, <3.15
|
|
17
18
|
Description-Content-Type: text/markdown
|
|
18
19
|
License-File: LICENSE
|
|
19
20
|
Requires-Dist: numpy>=1.23.1; python_version >= "3.10"
|
|
20
|
-
Requires-Dist: numpy>=1.19.5; python_version >= "3.7" and python_version <= "3.
|
|
21
|
+
Requires-Dist: numpy>=1.19.5; python_version >= "3.7" and python_version <= "3.14"
|
|
21
22
|
Requires-Dist: tqdm>=4.49.0
|
|
22
23
|
Requires-Dist: joblib>=1.2.0
|
|
23
24
|
Requires-Dist: six>=1.16.0
|
|
@@ -100,9 +101,10 @@ It bridges the gap between EasyGraph and higher-order relationships. EasyHypergr
|
|
|
100
101
|
👉 For more details, please refer to its [documentation](https://easy-graph.github.io/docs/eggpu.html) page.
|
|
101
102
|
|
|
102
103
|
# News
|
|
103
|
-
- [
|
|
104
|
-
- [
|
|
105
|
-
- [
|
|
104
|
+
- [09-29-2025] 🎉 Thanks to our amazing community! EasyGraph has reached 900,000 downloads!
|
|
105
|
+
- [07-27-2025] 🎉 We released EasyGraph 1.5! This version integrates the HWNN model and supports 11 representative network datasets.
|
|
106
|
+
- [05-30-2025] 🎉 Our paper "EasyHypergraph: an open-source software for fast and memory-saving analysis and learning of higher-order networks" was accepted by Humanities and Social Sciences Communications (Nature Portfolio)! [[PDF](https://www.nature.com/articles/s41599-025-05180-5)]
|
|
107
|
+
- [12-04-2024] 🎉 We received the "Top Open Source Certificate" by International Open Benchmark Council! [[Certificate](https://chenyang03.wordpress.com/wp-content/uploads/2025/07/image.png?w=1024)]
|
|
106
108
|
- [11-22-2024] We released EasyGraph 1.4.1! This version now fully supports Python 3.13.
|
|
107
109
|
- [09-27-2024] 🎉 EasyGraph has reached 500,000 downloads!
|
|
108
110
|
- [09-20-2024] We released EasyGraph 1.4! This version features GPU-powered functions for efficient large network analysis.
|
|
@@ -111,7 +113,7 @@ It bridges the gap between EasyGraph and higher-order relationships. EasyHypergr
|
|
|
111
113
|
- [03-06-2024] 🎉 We received the Shanghai Open Source Innovation Outstanding Achievement Award (Grand Prize)! [News](https://news.fudan.edu.cn/2024/0401/c2463a139799/page.htm)
|
|
112
114
|
- [02-05-2024] We released EasyGraph 1.1! This version features hypergraph analysis and learning for higher-order network modeling and representation.
|
|
113
115
|
- [08-17-2023] We released EasyGraph 1.0!
|
|
114
|
-
- [08-08-2023] 🎉 Our paper "EasyGraph: A Multifunctional, Cross-Platform, and Effective Library for Interdisciplinary Network Analysis" was accepted by Patterns (Cell Press)!
|
|
116
|
+
- [08-08-2023] 🎉 Our paper "EasyGraph: A Multifunctional, Cross-Platform, and Effective Library for Interdisciplinary Network Analysis" was accepted by Patterns (Cell Press)! [[PDF](https://www.sciencedirect.com/science/article/pii/S2666389923002180)]
|
|
115
117
|
- [07-22-2020] First public release of EasyGraph!
|
|
116
118
|
|
|
117
119
|
# Stargazers
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: Python-EasyGraph
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.5.1
|
|
4
4
|
Summary: Easy Graph
|
|
5
5
|
Home-page: https://github.com/easy-graph/Easy-Graph
|
|
6
6
|
Author: Fudan DataNET Group
|
|
@@ -11,13 +11,14 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
11
11
|
Classifier: Programming Language :: Python :: 3.11
|
|
12
12
|
Classifier: Programming Language :: Python :: 3.12
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.13
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
14
15
|
Classifier: License :: OSI Approved :: BSD License
|
|
15
16
|
Classifier: Operating System :: OS Independent
|
|
16
|
-
Requires-Python: >=3.8, <3.
|
|
17
|
+
Requires-Python: >=3.8, <3.15
|
|
17
18
|
Description-Content-Type: text/markdown
|
|
18
19
|
License-File: LICENSE
|
|
19
20
|
Requires-Dist: numpy>=1.23.1; python_version >= "3.10"
|
|
20
|
-
Requires-Dist: numpy>=1.19.5; python_version >= "3.7" and python_version <= "3.
|
|
21
|
+
Requires-Dist: numpy>=1.19.5; python_version >= "3.7" and python_version <= "3.14"
|
|
21
22
|
Requires-Dist: tqdm>=4.49.0
|
|
22
23
|
Requires-Dist: joblib>=1.2.0
|
|
23
24
|
Requires-Dist: six>=1.16.0
|
|
@@ -100,9 +101,10 @@ It bridges the gap between EasyGraph and higher-order relationships. EasyHypergr
|
|
|
100
101
|
👉 For more details, please refer to its [documentation](https://easy-graph.github.io/docs/eggpu.html) page.
|
|
101
102
|
|
|
102
103
|
# News
|
|
103
|
-
- [
|
|
104
|
-
- [
|
|
105
|
-
- [
|
|
104
|
+
- [09-29-2025] 🎉 Thanks to our amazing community! EasyGraph has reached 900,000 downloads!
|
|
105
|
+
- [07-27-2025] 🎉 We released EasyGraph 1.5! This version integrates the HWNN model and supports 11 representative network datasets.
|
|
106
|
+
- [05-30-2025] 🎉 Our paper "EasyHypergraph: an open-source software for fast and memory-saving analysis and learning of higher-order networks" was accepted by Humanities and Social Sciences Communications (Nature Portfolio)! [[PDF](https://www.nature.com/articles/s41599-025-05180-5)]
|
|
107
|
+
- [12-04-2024] 🎉 We received the "Top Open Source Certificate" by International Open Benchmark Council! [[Certificate](https://chenyang03.wordpress.com/wp-content/uploads/2025/07/image.png?w=1024)]
|
|
106
108
|
- [11-22-2024] We released EasyGraph 1.4.1! This version now fully supports Python 3.13.
|
|
107
109
|
- [09-27-2024] 🎉 EasyGraph has reached 500,000 downloads!
|
|
108
110
|
- [09-20-2024] We released EasyGraph 1.4! This version features GPU-powered functions for efficient large network analysis.
|
|
@@ -111,7 +113,7 @@ It bridges the gap between EasyGraph and higher-order relationships. EasyHypergr
|
|
|
111
113
|
- [03-06-2024] 🎉 We received the Shanghai Open Source Innovation Outstanding Achievement Award (Grand Prize)! [News](https://news.fudan.edu.cn/2024/0401/c2463a139799/page.htm)
|
|
112
114
|
- [02-05-2024] We released EasyGraph 1.1! This version features hypergraph analysis and learning for higher-order network modeling and representation.
|
|
113
115
|
- [08-17-2023] We released EasyGraph 1.0!
|
|
114
|
-
- [08-08-2023] 🎉 Our paper "EasyGraph: A Multifunctional, Cross-Platform, and Effective Library for Interdisciplinary Network Analysis" was accepted by Patterns (Cell Press)!
|
|
116
|
+
- [08-08-2023] 🎉 Our paper "EasyGraph: A Multifunctional, Cross-Platform, and Effective Library for Interdisciplinary Network Analysis" was accepted by Patterns (Cell Press)! [[PDF](https://www.sciencedirect.com/science/article/pii/S2666389923002180)]
|
|
115
117
|
- [07-22-2020] First public release of EasyGraph!
|
|
116
118
|
|
|
117
119
|
# Stargazers
|
|
@@ -37,6 +37,7 @@ cpp_easygraph/functions/centrality/__init__.h
|
|
|
37
37
|
cpp_easygraph/functions/centrality/betweenness.cpp
|
|
38
38
|
cpp_easygraph/functions/centrality/centrality.h
|
|
39
39
|
cpp_easygraph/functions/centrality/closeness.cpp
|
|
40
|
+
cpp_easygraph/functions/centrality/katz_centrality.cpp
|
|
40
41
|
cpp_easygraph/functions/components/__init__.h
|
|
41
42
|
cpp_easygraph/functions/components/biconnected.cpp
|
|
42
43
|
cpp_easygraph/functions/components/biconnected.h
|
|
@@ -86,13 +87,24 @@ easygraph/datapipe/common.py
|
|
|
86
87
|
easygraph/datapipe/loader.py
|
|
87
88
|
easygraph/datapipe/normalize.py
|
|
88
89
|
easygraph/datasets/__init__.py
|
|
90
|
+
easygraph/datasets/amazon_photo.py
|
|
91
|
+
easygraph/datasets/arxiv.py
|
|
89
92
|
easygraph/datasets/citation_graph.py
|
|
93
|
+
easygraph/datasets/coauthor.py
|
|
94
|
+
easygraph/datasets/facebook_ego.py
|
|
95
|
+
easygraph/datasets/flickr.py
|
|
90
96
|
easygraph/datasets/get_sample_graph.py
|
|
97
|
+
easygraph/datasets/github.py
|
|
91
98
|
easygraph/datasets/gnn_benchmark.py
|
|
92
99
|
easygraph/datasets/graph_dataset_base.py
|
|
93
100
|
easygraph/datasets/karate.py
|
|
94
101
|
easygraph/datasets/ppi.py
|
|
102
|
+
easygraph/datasets/reddit.py
|
|
103
|
+
easygraph/datasets/roadnet.py
|
|
104
|
+
easygraph/datasets/twitter_ego.py
|
|
95
105
|
easygraph/datasets/utils.py
|
|
106
|
+
easygraph/datasets/web_google.py
|
|
107
|
+
easygraph/datasets/wiki_topcats.py
|
|
96
108
|
easygraph/datasets/dynamic/__init__.py
|
|
97
109
|
easygraph/datasets/dynamic/email_enron.py
|
|
98
110
|
easygraph/datasets/dynamic/email_eu.py
|
|
@@ -136,6 +148,7 @@ easygraph/functions/centrality/closeness.py
|
|
|
136
148
|
easygraph/functions/centrality/degree.py
|
|
137
149
|
easygraph/functions/centrality/ego_betweenness.py
|
|
138
150
|
easygraph/functions/centrality/flowbetweenness.py
|
|
151
|
+
easygraph/functions/centrality/katz_centrality.py
|
|
139
152
|
easygraph/functions/centrality/laplacian.py
|
|
140
153
|
easygraph/functions/centrality/pagerank.py
|
|
141
154
|
easygraph/functions/centrality/tests/__init__.py
|
|
@@ -52,9 +52,10 @@ It bridges the gap between EasyGraph and higher-order relationships. EasyHypergr
|
|
|
52
52
|
👉 For more details, please refer to its [documentation](https://easy-graph.github.io/docs/eggpu.html) page.
|
|
53
53
|
|
|
54
54
|
# News
|
|
55
|
-
- [
|
|
56
|
-
- [
|
|
57
|
-
- [
|
|
55
|
+
- [09-29-2025] 🎉 Thanks to our amazing community! EasyGraph has reached 900,000 downloads!
|
|
56
|
+
- [07-27-2025] 🎉 We released EasyGraph 1.5! This version integrates the HWNN model and supports 11 representative network datasets.
|
|
57
|
+
- [05-30-2025] 🎉 Our paper "EasyHypergraph: an open-source software for fast and memory-saving analysis and learning of higher-order networks" was accepted by Humanities and Social Sciences Communications (Nature Portfolio)! [[PDF](https://www.nature.com/articles/s41599-025-05180-5)]
|
|
58
|
+
- [12-04-2024] 🎉 We received the "Top Open Source Certificate" by International Open Benchmark Council! [[Certificate](https://chenyang03.wordpress.com/wp-content/uploads/2025/07/image.png?w=1024)]
|
|
58
59
|
- [11-22-2024] We released EasyGraph 1.4.1! This version now fully supports Python 3.13.
|
|
59
60
|
- [09-27-2024] 🎉 EasyGraph has reached 500,000 downloads!
|
|
60
61
|
- [09-20-2024] We released EasyGraph 1.4! This version features GPU-powered functions for efficient large network analysis.
|
|
@@ -63,7 +64,7 @@ It bridges the gap between EasyGraph and higher-order relationships. EasyHypergr
|
|
|
63
64
|
- [03-06-2024] 🎉 We received the Shanghai Open Source Innovation Outstanding Achievement Award (Grand Prize)! [News](https://news.fudan.edu.cn/2024/0401/c2463a139799/page.htm)
|
|
64
65
|
- [02-05-2024] We released EasyGraph 1.1! This version features hypergraph analysis and learning for higher-order network modeling and representation.
|
|
65
66
|
- [08-17-2023] We released EasyGraph 1.0!
|
|
66
|
-
- [08-08-2023] 🎉 Our paper "EasyGraph: A Multifunctional, Cross-Platform, and Effective Library for Interdisciplinary Network Analysis" was accepted by Patterns (Cell Press)!
|
|
67
|
+
- [08-08-2023] 🎉 Our paper "EasyGraph: A Multifunctional, Cross-Platform, and Effective Library for Interdisciplinary Network Analysis" was accepted by Patterns (Cell Press)! [[PDF](https://www.sciencedirect.com/science/article/pii/S2666389923002180)]
|
|
67
68
|
- [07-22-2020] First public release of EasyGraph!
|
|
68
69
|
|
|
69
70
|
# Stargazers
|
|
@@ -77,6 +77,7 @@ PYBIND11_MODULE(cpp_easygraph, m) {
|
|
|
77
77
|
|
|
78
78
|
m.def("cpp_closeness_centrality", &closeness_centrality, py::arg("G"), py::arg("weight") = "weight", py::arg("cutoff") = py::none(), py::arg("sources") = py::none());
|
|
79
79
|
m.def("cpp_betweenness_centrality", &betweenness_centrality, py::arg("G"), py::arg("weight") = "weight", py::arg("cutoff") = py::none(),py::arg("sources") = py::none(), py::arg("normalized") = py::bool_(true), py::arg("endpoints") = py::bool_(false));
|
|
80
|
+
m.def("cpp_katz_centrality", &cpp_katz_centrality, py::arg("G"), py::arg("alpha") = 0.1, py::arg("beta") = 1.0, py::arg("max_iter") = 1000, py::arg("tol") = 1e-6, py::arg("normalized") = true);
|
|
80
81
|
m.def("cpp_k_core", &core_decomposition, py::arg("G"));
|
|
81
82
|
m.def("cpp_density", &density, py::arg("G"));
|
|
82
83
|
m.def("cpp_constraint", &constraint, py::arg("G"), py::arg("nodes") = py::none(), py::arg("weight") = py::none(), py::arg("n_workers") = py::none());
|
{python_easygraph-1.4.6 → python_easygraph-1.5.1}/cpp_easygraph/functions/centrality/centrality.h
RENAMED
|
@@ -4,4 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
py::object closeness_centrality(py::object G, py::object weight, py::object cutoff, py::object sources);
|
|
6
6
|
py::object betweenness_centrality(py::object G, py::object weight, py::object cutoff, py::object sources,
|
|
7
|
-
py::object normalized, py::object endpoints);
|
|
7
|
+
py::object normalized, py::object endpoints);
|
|
8
|
+
py::object cpp_katz_centrality(
|
|
9
|
+
py::object G,
|
|
10
|
+
py::object py_alpha,
|
|
11
|
+
py::object py_beta,
|
|
12
|
+
py::object py_max_iter,
|
|
13
|
+
py::object py_tol,
|
|
14
|
+
py::object py_normalized
|
|
15
|
+
);
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
#include <cmath>
|
|
2
|
+
#include <vector>
|
|
3
|
+
#include <pybind11/pybind11.h>
|
|
4
|
+
#include <pybind11/stl.h>
|
|
5
|
+
#include "centrality.h"
|
|
6
|
+
#include "../../classes/graph.h"
|
|
7
|
+
|
|
8
|
+
namespace py = pybind11;
|
|
9
|
+
|
|
10
|
+
py::object cpp_katz_centrality(
|
|
11
|
+
py::object G,
|
|
12
|
+
py::object py_alpha,
|
|
13
|
+
py::object py_beta,
|
|
14
|
+
py::object py_max_iter,
|
|
15
|
+
py::object py_tol,
|
|
16
|
+
py::object py_normalized
|
|
17
|
+
) {
|
|
18
|
+
try {
|
|
19
|
+
Graph& graph = G.cast<Graph&>();
|
|
20
|
+
auto csr = graph.gen_CSR();
|
|
21
|
+
int n = csr->nodes.size();
|
|
22
|
+
|
|
23
|
+
if (n == 0) {
|
|
24
|
+
return py::dict();
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Initialize vectors
|
|
28
|
+
std::vector<double> x0(n, 1.0);
|
|
29
|
+
std::vector<double> x1(n);
|
|
30
|
+
std::vector<double>* x_prev = &x0;
|
|
31
|
+
std::vector<double>* x_next = &x1;
|
|
32
|
+
|
|
33
|
+
// Process beta parameter
|
|
34
|
+
std::vector<double> b(n);
|
|
35
|
+
if (py::isinstance<py::float_>(py_beta) || py::isinstance<py::int_>(py_beta)) {
|
|
36
|
+
double beta_val = py_beta.cast<double>();
|
|
37
|
+
for (int i = 0; i < n; i++) {
|
|
38
|
+
b[i] = beta_val;
|
|
39
|
+
}
|
|
40
|
+
} else if (py::isinstance<py::dict>(py_beta)) {
|
|
41
|
+
py::dict beta_dict = py_beta.cast<py::dict>();
|
|
42
|
+
for (int i = 0; i < n; i++) {
|
|
43
|
+
node_t internal_id = csr->nodes[i];
|
|
44
|
+
py::object node_obj = graph.id_to_node[py::cast(internal_id)];
|
|
45
|
+
if (beta_dict.contains(node_obj)) {
|
|
46
|
+
b[i] = beta_dict[node_obj].cast<double>();
|
|
47
|
+
} else {
|
|
48
|
+
b[i] = 1.0;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
} else {
|
|
52
|
+
throw py::type_error("beta must be a float or a dict");
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Extract parameters
|
|
56
|
+
double alpha = py_alpha.cast<double>();
|
|
57
|
+
int max_iter = py_max_iter.cast<int>();
|
|
58
|
+
double tol = py_tol.cast<double>();
|
|
59
|
+
bool normalized = py_normalized.cast<bool>();
|
|
60
|
+
|
|
61
|
+
// Iterative updates
|
|
62
|
+
int iter = 0;
|
|
63
|
+
for (; iter < max_iter; iter++) {
|
|
64
|
+
for (int i = 0; i < n; i++) {
|
|
65
|
+
double sum = 0.0;
|
|
66
|
+
int start = csr->V[i];
|
|
67
|
+
int end = csr->V[i + 1];
|
|
68
|
+
for (int jj = start; jj < end; jj++) {
|
|
69
|
+
int j = csr->E[jj];
|
|
70
|
+
sum += (*x_prev)[j];
|
|
71
|
+
}
|
|
72
|
+
(*x_next)[i] = alpha * sum + b[i];
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Check convergence
|
|
76
|
+
double change = 0.0;
|
|
77
|
+
for (int i = 0; i < n; i++) {
|
|
78
|
+
change += std::abs((*x_next)[i] - (*x_prev)[i]);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (change < tol) {
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
std::swap(x_prev, x_next);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// Handle convergence failure
|
|
89
|
+
if (iter == max_iter) {
|
|
90
|
+
throw std::runtime_error("Katz centrality failed to converge in " + std::to_string(max_iter) + " iterations");
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Normalization
|
|
94
|
+
std::vector<double>& x_final = *x_next;
|
|
95
|
+
if (normalized) {
|
|
96
|
+
double norm = 0.0;
|
|
97
|
+
for (double val : x_final) {
|
|
98
|
+
norm += val * val;
|
|
99
|
+
}
|
|
100
|
+
norm = std::sqrt(norm);
|
|
101
|
+
if (norm > 0) {
|
|
102
|
+
for (int i = 0; i < n; i++) {
|
|
103
|
+
x_final[i] /= norm;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Prepare results
|
|
109
|
+
py::dict result;
|
|
110
|
+
for (int i = 0; i < n; i++) {
|
|
111
|
+
node_t internal_id = csr->nodes[i];
|
|
112
|
+
py::object node_obj = graph.id_to_node[py::cast(internal_id)];
|
|
113
|
+
result[node_obj] = x_final[i];
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return result;
|
|
117
|
+
} catch (const std::exception& e) {
|
|
118
|
+
throw std::runtime_error(e.what());
|
|
119
|
+
}
|
|
120
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# risky imports
|
|
1
2
|
try:
|
|
2
3
|
from easygraph.datasets.get_sample_graph import *
|
|
3
4
|
from easygraph.datasets.gnn_benchmark import *
|
|
@@ -8,16 +9,27 @@ try:
|
|
|
8
9
|
from easygraph.datasets.karate import KarateClubDataset
|
|
9
10
|
from easygraph.datasets.mathoverflow_answers import mathoverflow_answers
|
|
10
11
|
|
|
11
|
-
from .citation_graph import CitationGraphDataset
|
|
12
|
-
from .citation_graph import CiteseerGraphDataset
|
|
13
|
-
from .citation_graph import CoraBinary
|
|
14
|
-
from .citation_graph import CoraGraphDataset
|
|
15
|
-
from .citation_graph import PubmedGraphDataset
|
|
16
12
|
from .ppi import LegacyPPIDataset
|
|
17
13
|
from .ppi import PPIDataset
|
|
18
|
-
|
|
19
|
-
except:
|
|
14
|
+
except Exception as e:
|
|
20
15
|
print(
|
|
21
16
|
" Please install Pytorch before use graph-related datasets and"
|
|
22
17
|
" hypergraph-related datasets."
|
|
23
18
|
)
|
|
19
|
+
|
|
20
|
+
from .amazon_photo import AmazonPhotoDataset
|
|
21
|
+
from .arxiv import ArxivHEPTHDataset
|
|
22
|
+
from .citation_graph import CitationGraphDataset
|
|
23
|
+
from .citation_graph import CiteseerGraphDataset
|
|
24
|
+
from .citation_graph import CoraBinary
|
|
25
|
+
from .citation_graph import CoraGraphDataset
|
|
26
|
+
from .citation_graph import PubmedGraphDataset
|
|
27
|
+
from .coauthor import CoauthorCSDataset
|
|
28
|
+
from .facebook_ego import FacebookEgoNetDataset
|
|
29
|
+
from .flickr import FlickrDataset
|
|
30
|
+
from .github import GitHubUsersDataset
|
|
31
|
+
from .reddit import RedditDataset
|
|
32
|
+
from .roadnet import RoadNetCADataset
|
|
33
|
+
from .twitter_ego import TwitterEgoDataset
|
|
34
|
+
from .web_google import WebGoogleDataset
|
|
35
|
+
from .wiki_topcats import WikiTopCatsDataset
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import os
|
|
2
|
+
|
|
3
|
+
import easygraph as eg
|
|
4
|
+
import numpy as np
|
|
5
|
+
import scipy.sparse as sp
|
|
6
|
+
|
|
7
|
+
from easygraph.classes.graph import Graph
|
|
8
|
+
|
|
9
|
+
from .graph_dataset_base import EasyGraphBuiltinDataset
|
|
10
|
+
from .utils import data_type_dict
|
|
11
|
+
from .utils import download
|
|
12
|
+
from .utils import extract_archive
|
|
13
|
+
from .utils import tensor
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class AmazonPhotoDataset(EasyGraphBuiltinDataset):
|
|
17
|
+
r"""Amazon Electronics Photo co-purchase graph dataset.
|
|
18
|
+
|
|
19
|
+
Nodes represent products, and edges link products frequently co-purchased.
|
|
20
|
+
Node features are bag-of-words of product reviews. The task is to classify
|
|
21
|
+
the product category.
|
|
22
|
+
|
|
23
|
+
Statistics:
|
|
24
|
+
|
|
25
|
+
- Nodes: 7,650
|
|
26
|
+
- Edges: 119,081
|
|
27
|
+
- Number of Classes: 8
|
|
28
|
+
- Features: 745
|
|
29
|
+
|
|
30
|
+
Parameters
|
|
31
|
+
----------
|
|
32
|
+
raw_dir : str, optional
|
|
33
|
+
Raw file directory to download/contains the input data directory. Default: None
|
|
34
|
+
force_reload : bool, optional
|
|
35
|
+
Whether to reload the dataset. Default: False
|
|
36
|
+
verbose : bool, optional
|
|
37
|
+
Whether to print out progress information. Default: True
|
|
38
|
+
transform : callable, optional
|
|
39
|
+
A transform that takes in a :class:`~easygraph.Graph` object and returns
|
|
40
|
+
a transformed version. The :class:`~easygraph.Graph` object will be
|
|
41
|
+
transformed before every access.
|
|
42
|
+
|
|
43
|
+
Examples
|
|
44
|
+
--------
|
|
45
|
+
>>> from easygraph.datasets import AmazonPhotoDataset
|
|
46
|
+
>>> dataset = AmazonPhotoDataset()
|
|
47
|
+
>>> g = dataset[0]
|
|
48
|
+
>>> print(g.number_of_nodes())
|
|
49
|
+
>>> print(g.number_of_edges())
|
|
50
|
+
>>> print(g.nodes[0]['feat'].shape)
|
|
51
|
+
>>> print(g.nodes[0]['label'])
|
|
52
|
+
>>> print(dataset.num_classes)
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
def __init__(self, raw_dir=None, force_reload=False, verbose=True, transform=None):
|
|
56
|
+
name = "amazon_photo"
|
|
57
|
+
url = "https://data.dgl.ai/dataset/amazon_co_buy_photo.zip"
|
|
58
|
+
super(AmazonPhotoDataset, self).__init__(
|
|
59
|
+
name=name,
|
|
60
|
+
url=url,
|
|
61
|
+
raw_dir=raw_dir,
|
|
62
|
+
force_reload=force_reload,
|
|
63
|
+
verbose=verbose,
|
|
64
|
+
transform=transform,
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
def process(self):
|
|
68
|
+
path = os.path.join(self.raw_path, "amazon_co_buy_photo.npz")
|
|
69
|
+
data = np.load(path)
|
|
70
|
+
|
|
71
|
+
adj = sp.csr_matrix(
|
|
72
|
+
(data["adj_data"], data["adj_indices"], data["adj_indptr"]),
|
|
73
|
+
shape=data["adj_shape"],
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
features = sp.csr_matrix(
|
|
77
|
+
(data["attr_data"], data["attr_indices"], data["attr_indptr"]),
|
|
78
|
+
shape=data["attr_shape"],
|
|
79
|
+
).todense()
|
|
80
|
+
|
|
81
|
+
labels = data["labels"]
|
|
82
|
+
|
|
83
|
+
g = eg.Graph()
|
|
84
|
+
g.add_edges_from(list(zip(*adj.nonzero())))
|
|
85
|
+
|
|
86
|
+
for i in range(features.shape[0]):
|
|
87
|
+
g.add_node(i, feat=np.array(features[i]).squeeze(), label=int(labels[i]))
|
|
88
|
+
|
|
89
|
+
self._g = g
|
|
90
|
+
self._num_classes = len(np.unique(labels))
|
|
91
|
+
|
|
92
|
+
if self.verbose:
|
|
93
|
+
print("Finished loading AmazonPhoto dataset.")
|
|
94
|
+
print(f" NumNodes: {g.number_of_nodes()}")
|
|
95
|
+
print(f" NumEdges: {g.number_of_edges()}")
|
|
96
|
+
print(f" NumFeats: {features.shape[1]}")
|
|
97
|
+
print(f" NumClasses: {self._num_classes}")
|
|
98
|
+
|
|
99
|
+
def __getitem__(self, idx):
|
|
100
|
+
assert idx == 0, "AmazonPhotoDataset only contains one graph"
|
|
101
|
+
if self._g is None:
|
|
102
|
+
raise ValueError("Graph has not been loaded or processed correctly.")
|
|
103
|
+
return self._g if self._transform is None else self._transform(self._g)
|
|
104
|
+
|
|
105
|
+
def __len__(self):
|
|
106
|
+
return 1
|
|
107
|
+
|
|
108
|
+
@property
|
|
109
|
+
def num_classes(self):
|
|
110
|
+
return self._num_classes
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"""Arxiv HEP-TH Citation Network
|
|
2
|
+
|
|
3
|
+
This dataset represents the citation network of preprints from the High Energy Physics - Theory (HEP-TH) category on arXiv, covering the period from January 1993 to April 2003.
|
|
4
|
+
|
|
5
|
+
Each node corresponds to a paper, and a directed edge from paper A to paper B indicates that A cites B.
|
|
6
|
+
|
|
7
|
+
No features or labels are included in this dataset.
|
|
8
|
+
|
|
9
|
+
Statistics:
|
|
10
|
+
- Nodes: 27,770
|
|
11
|
+
- Edges: 352,807
|
|
12
|
+
- Features: None
|
|
13
|
+
- Labels: None
|
|
14
|
+
|
|
15
|
+
Reference:
|
|
16
|
+
J. Leskovec, J. Kleinberg and C. Faloutsos, "Graphs over Time: Densification Laws, Shrinking Diameters and Possible Explanations,"
|
|
17
|
+
in KDD 2005. Dataset: https://snap.stanford.edu/data/cit-HepTh.html
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
import gzip
|
|
21
|
+
import os
|
|
22
|
+
import shutil
|
|
23
|
+
|
|
24
|
+
import easygraph as eg
|
|
25
|
+
|
|
26
|
+
from easygraph.classes.graph import Graph
|
|
27
|
+
|
|
28
|
+
from .graph_dataset_base import EasyGraphBuiltinDataset
|
|
29
|
+
from .utils import download
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class ArxivHEPTHDataset(EasyGraphBuiltinDataset):
|
|
33
|
+
r"""Arxiv HEP-TH citation network dataset.
|
|
34
|
+
|
|
35
|
+
Parameters
|
|
36
|
+
----------
|
|
37
|
+
raw_dir : str, optional
|
|
38
|
+
Directory to store the raw downloaded files. Default: None
|
|
39
|
+
force_reload : bool, optional
|
|
40
|
+
Whether to re-download and process the dataset. Default: False
|
|
41
|
+
verbose : bool, optional
|
|
42
|
+
Whether to print detailed processing logs. Default: True
|
|
43
|
+
transform : callable, optional
|
|
44
|
+
Optional transform to apply on the graph.
|
|
45
|
+
|
|
46
|
+
Examples
|
|
47
|
+
--------
|
|
48
|
+
>>> from easygraph.datasets import ArxivHEPTHDataset
|
|
49
|
+
>>> dataset = ArxivHEPTHDataset()
|
|
50
|
+
>>> g = dataset[0]
|
|
51
|
+
>>> print("Nodes:", g.number_of_nodes())
|
|
52
|
+
>>> print("Edges:", g.number_of_edges())
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
def __init__(self, raw_dir=None, force_reload=False, verbose=True, transform=None):
|
|
56
|
+
name = "cit-HepTh"
|
|
57
|
+
url = "https://snap.stanford.edu/data/cit-HepTh.txt.gz"
|
|
58
|
+
super(ArxivHEPTHDataset, self).__init__(
|
|
59
|
+
name=name,
|
|
60
|
+
url=url,
|
|
61
|
+
raw_dir=raw_dir,
|
|
62
|
+
force_reload=force_reload,
|
|
63
|
+
verbose=verbose,
|
|
64
|
+
transform=transform,
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
def download(self):
|
|
68
|
+
r"""Download and decompress the .txt.gz file."""
|
|
69
|
+
compressed_path = os.path.join(self.raw_dir, self.name + ".txt.gz")
|
|
70
|
+
extracted_path = os.path.join(self.raw_path, self.name + ".txt")
|
|
71
|
+
|
|
72
|
+
download(self.url, path=compressed_path)
|
|
73
|
+
|
|
74
|
+
if not os.path.exists(self.raw_path):
|
|
75
|
+
os.makedirs(self.raw_path)
|
|
76
|
+
|
|
77
|
+
with gzip.open(compressed_path, "rb") as f_in:
|
|
78
|
+
with open(extracted_path, "wb") as f_out:
|
|
79
|
+
shutil.copyfileobj(f_in, f_out)
|
|
80
|
+
|
|
81
|
+
def process(self):
|
|
82
|
+
graph = eg.DiGraph() # Citation network is directed
|
|
83
|
+
edge_list_path = os.path.join(self.raw_path, self.name + ".txt")
|
|
84
|
+
|
|
85
|
+
with open(edge_list_path, "r") as f:
|
|
86
|
+
for line in f:
|
|
87
|
+
if line.startswith("#") or line.strip() == "":
|
|
88
|
+
continue
|
|
89
|
+
u, v = map(int, line.strip().split())
|
|
90
|
+
graph.add_edge(u, v)
|
|
91
|
+
|
|
92
|
+
self._g = graph
|
|
93
|
+
self._num_nodes = graph.number_of_nodes()
|
|
94
|
+
self._num_edges = graph.number_of_edges()
|
|
95
|
+
|
|
96
|
+
if self.verbose:
|
|
97
|
+
print("Finished loading Arxiv HEP-TH dataset.")
|
|
98
|
+
print(f" NumNodes: {self._num_nodes}")
|
|
99
|
+
print(f" NumEdges: {self._num_edges}")
|
|
100
|
+
|
|
101
|
+
def __getitem__(self, idx):
|
|
102
|
+
assert idx == 0, "ArxivHEPTHDataset only contains one graph"
|
|
103
|
+
return self._g if self._transform is None else self._transform(self._g)
|
|
104
|
+
|
|
105
|
+
def __len__(self):
|
|
106
|
+
return 1
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
"""Cora, citeseer, pubmed dataset.
|
|
1
|
+
"""Cora, citeseer, pubmed dataset."""
|
|
2
2
|
|
|
3
|
-
"""
|
|
4
3
|
from __future__ import absolute_import
|
|
5
4
|
|
|
6
5
|
import os
|
|
@@ -53,9 +52,10 @@ class CitationGraphDataset(EasyGraphBuiltinDataset):
|
|
|
53
52
|
reorder : bool
|
|
54
53
|
Whether to reorder the graph using :func:`~eg.reorder_graph`. Default: False.
|
|
55
54
|
"""
|
|
55
|
+
|
|
56
56
|
_urls = {
|
|
57
57
|
"cora_v2": "dataset/cora_v2.zip",
|
|
58
|
-
"citeseer": "dataset/
|
|
58
|
+
"citeseer": "dataset/citeseer.zip",
|
|
59
59
|
"pubmed": "dataset/pubmed.zip",
|
|
60
60
|
}
|
|
61
61
|
|