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.
Files changed (388) hide show
  1. {python_easygraph-1.6.1/Python_EasyGraph.egg-info → python_easygraph-1.6.2}/PKG-INFO +3 -2
  2. {python_easygraph-1.6.1 → python_easygraph-1.6.2/Python_EasyGraph.egg-info}/PKG-INFO +3 -2
  3. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/Python_EasyGraph.egg-info/SOURCES.txt +29 -0
  4. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/README.md +2 -1
  5. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/classes/linkgraph.h +3 -1
  6. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/cpp_easygraph.cpp +12 -0
  7. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/__init__.h +2 -1
  8. python_easygraph-1.6.2/cpp_easygraph/functions/community/LPA.cpp +146 -0
  9. python_easygraph-1.6.2/cpp_easygraph/functions/community/LPA.h +7 -0
  10. python_easygraph-1.6.2/cpp_easygraph/functions/community/__init__.h +10 -0
  11. python_easygraph-1.6.2/cpp_easygraph/functions/community/ego_graph.cpp +155 -0
  12. python_easygraph-1.6.2/cpp_easygraph/functions/community/ego_graph.h +23 -0
  13. python_easygraph-1.6.2/cpp_easygraph/functions/community/graph_coloring.cpp +135 -0
  14. python_easygraph-1.6.2/cpp_easygraph/functions/community/graph_coloring.h +12 -0
  15. python_easygraph-1.6.2/cpp_easygraph/functions/community/greedy_modularity.cpp +289 -0
  16. python_easygraph-1.6.2/cpp_easygraph/functions/community/greedy_modularity.h +11 -0
  17. python_easygraph-1.6.2/cpp_easygraph/functions/community/indexed_heap.h +191 -0
  18. python_easygraph-1.6.2/cpp_easygraph/functions/community/localsearch.cpp +613 -0
  19. python_easygraph-1.6.2/cpp_easygraph/functions/community/localsearch.h +13 -0
  20. python_easygraph-1.6.2/cpp_easygraph/functions/community/louvain.cpp +544 -0
  21. python_easygraph-1.6.2/cpp_easygraph/functions/community/louvain.h +20 -0
  22. python_easygraph-1.6.2/cpp_easygraph/functions/community/modularity.cpp +213 -0
  23. python_easygraph-1.6.2/cpp_easygraph/functions/community/modularity.h +11 -0
  24. python_easygraph-1.6.2/cpp_easygraph/functions/community/motif.cpp +553 -0
  25. python_easygraph-1.6.2/cpp_easygraph/functions/community/motif.h +11 -0
  26. python_easygraph-1.6.2/cpp_easygraph/functions/community/subgraph.cpp +179 -0
  27. python_easygraph-1.6.2/cpp_easygraph/functions/community/subgraph.h +10 -0
  28. python_easygraph-1.6.2/cpp_easygraph/functions/community/tests/__init__.py +1 -0
  29. python_easygraph-1.6.2/cpp_easygraph/functions/community/tests/cpp_LPA_test.py +139 -0
  30. python_easygraph-1.6.2/cpp_easygraph/functions/community/tests/cpp_ego_graph_test.py +254 -0
  31. python_easygraph-1.6.2/cpp_easygraph/functions/community/tests/cpp_enumerate_subgraph_test.py +143 -0
  32. python_easygraph-1.6.2/cpp_easygraph/functions/community/tests/cpp_greedy_modularity_test.py +117 -0
  33. python_easygraph-1.6.2/cpp_easygraph/functions/community/tests/cpp_localsearch_test.py +188 -0
  34. python_easygraph-1.6.2/cpp_easygraph/functions/community/tests/cpp_louvain_test.py +178 -0
  35. python_easygraph-1.6.2/cpp_easygraph/functions/community/tests/cpp_modularity_test.py +161 -0
  36. python_easygraph-1.6.2/cpp_easygraph/functions/community/tests/run_all_tests.py +55 -0
  37. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/modularity_max_detection.py +3 -3
  38. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/setup.py +1 -1
  39. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/CMakeLists.txt +0 -0
  40. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/LICENSE +0 -0
  41. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/MANIFEST.in +0 -0
  42. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/Python_EasyGraph.egg-info/dependency_links.txt +0 -0
  43. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/Python_EasyGraph.egg-info/requires.txt +0 -0
  44. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/Python_EasyGraph.egg-info/top_level.txt +0 -0
  45. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/README.rst +0 -0
  46. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/CMakeLists.txt +0 -0
  47. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/classes/__init__.h +0 -0
  48. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/classes/coo_graph.h +0 -0
  49. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/classes/csr_graph.h +0 -0
  50. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/classes/directed_graph.cpp +0 -0
  51. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/classes/directed_graph.h +0 -0
  52. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/classes/graph.cpp +0 -0
  53. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/classes/graph.h +0 -0
  54. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/classes/operation.cpp +0 -0
  55. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/classes/operation.h +0 -0
  56. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/classes/segment_tree.cpp +0 -0
  57. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/common/common.cpp +0 -0
  58. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/common/common.h +0 -0
  59. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/common/utils.cpp +0 -0
  60. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/common/utils.h +0 -0
  61. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/basic/__init__.h +0 -0
  62. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/basic/avg_degree.cpp +0 -0
  63. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/basic/avg_degree.h +0 -0
  64. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/basic/cluster.cpp +0 -0
  65. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/basic/cluster.h +0 -0
  66. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/centrality/__init__.h +0 -0
  67. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/centrality/betweenness.cpp +0 -0
  68. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/centrality/centrality.h +0 -0
  69. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/centrality/closeness.cpp +0 -0
  70. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/centrality/degree.cpp +0 -0
  71. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/centrality/eigenvector.cpp +0 -0
  72. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/centrality/katz_centrality.cpp +0 -0
  73. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/components/__init__.h +0 -0
  74. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/components/biconnected.cpp +0 -0
  75. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/components/biconnected.h +0 -0
  76. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/components/connected.cpp +0 -0
  77. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/components/connected.h +0 -0
  78. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/components/strongly_connected.cpp +0 -0
  79. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/components/strongly_connected.h +0 -0
  80. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/cores/__init__.h +0 -0
  81. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/cores/k_cores.cpp +0 -0
  82. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/cores/k_cores.h +0 -0
  83. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/pagerank/__init__.h +0 -0
  84. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/pagerank/pagerank.cpp +0 -0
  85. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/pagerank/pagerank.h +0 -0
  86. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/path/__init__.h +0 -0
  87. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/path/average_shortest_path_length.cpp +0 -0
  88. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/path/diameter.cpp +0 -0
  89. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/path/mst.cpp +0 -0
  90. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/path/mst.h +0 -0
  91. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/path/path.cpp +0 -0
  92. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/path/path.h +0 -0
  93. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/structural_holes/__init__.h +0 -0
  94. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/structural_holes/evaluation.cpp +0 -0
  95. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/cpp_easygraph/functions/structural_holes/evaluation.h +0 -0
  96. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/__init__.py +0 -0
  97. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/_global.py +0 -0
  98. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/__init__.py +0 -0
  99. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/base.py +0 -0
  100. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/directed_graph.py +0 -0
  101. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/directed_multigraph.py +0 -0
  102. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/graph.py +0 -0
  103. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/graphviews.py +0 -0
  104. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/hypergraph.py +0 -0
  105. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/multigraph.py +0 -0
  106. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/operation.py +0 -0
  107. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/test_base_graph_class.py +0 -0
  108. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/tests/__init__.py +0 -0
  109. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/tests/test_base.py +0 -0
  110. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/tests/test_directed_graph.py +0 -0
  111. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/tests/test_graph.py +0 -0
  112. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/tests/test_graphV2.py +0 -0
  113. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/tests/test_hypergraph.py +0 -0
  114. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/tests/test_multidigraph.py +0 -0
  115. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/tests/test_multigraph.py +0 -0
  116. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/classes/tests/test_operation.py +0 -0
  117. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/convert.py +0 -0
  118. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datapipe/__init__.py +0 -0
  119. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datapipe/common.py +0 -0
  120. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datapipe/loader.py +0 -0
  121. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datapipe/normalize.py +0 -0
  122. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/__init__.py +0 -0
  123. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/amazon_photo.py +0 -0
  124. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/arxiv.py +0 -0
  125. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/citation_graph.py +0 -0
  126. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/coauthor.py +0 -0
  127. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/dynamic/__init__.py +0 -0
  128. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/dynamic/email_enron.py +0 -0
  129. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/dynamic/email_eu.py +0 -0
  130. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/dynamic/hospital_lyon.py +0 -0
  131. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/dynamic/load_dataset.py +0 -0
  132. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/facebook_ego.py +0 -0
  133. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/flickr.py +0 -0
  134. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/get_sample_graph.py +0 -0
  135. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/github.py +0 -0
  136. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/gnn_benchmark.py +0 -0
  137. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/graph_dataset_base.py +0 -0
  138. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/House_Committees.py +0 -0
  139. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/Yelp.py +0 -0
  140. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/__init__.py +0 -0
  141. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/_global.py +0 -0
  142. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/cat_edge_Cooking.py +0 -0
  143. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/coauthorship.py +0 -0
  144. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/cocitation.py +0 -0
  145. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/contact_primary_school.py +0 -0
  146. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/cooking_200.py +0 -0
  147. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/hypergraph_dataset_base.py +0 -0
  148. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/loadDeepSetDatasets.py +0 -0
  149. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/mathoverflow_answers.py +0 -0
  150. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/senate_committees.py +0 -0
  151. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/trivago_clicks.py +0 -0
  152. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/hypergraph/walmart_trips.py +0 -0
  153. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/karate.py +0 -0
  154. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/ppi.py +0 -0
  155. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/reddit.py +0 -0
  156. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/roadnet.py +0 -0
  157. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/twitter_ego.py +0 -0
  158. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/utils.py +0 -0
  159. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/web_google.py +0 -0
  160. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/datasets/wiki_topcats.py +0 -0
  161. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/exception.py +0 -0
  162. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/experiments/__init__.py +0 -0
  163. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/experiments/base.py +0 -0
  164. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/experiments/hypergraphs/__init__.py +0 -0
  165. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/experiments/hypergraphs/hypergraph.py +0 -0
  166. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/experiments/vertex_classification.py +0 -0
  167. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/__init__.py +0 -0
  168. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/basic/__init__.py +0 -0
  169. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/basic/avg_degree.py +0 -0
  170. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/basic/cluster.py +0 -0
  171. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/basic/localassort.py +0 -0
  172. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/basic/predecessor_path_based.py +0 -0
  173. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/basic/tests/__init__.py +0 -0
  174. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/basic/tests/test_avg_degree.py +0 -0
  175. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/basic/tests/test_cluster.py +0 -0
  176. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/basic/tests/test_localassort.py +0 -0
  177. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/basic/tests/test_predecessor.py +0 -0
  178. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/__init__.py +0 -0
  179. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/betweenness.py +0 -0
  180. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/closeness.py +0 -0
  181. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/degree.py +0 -0
  182. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/ego_betweenness.py +0 -0
  183. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/eigenvector.py +0 -0
  184. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/flowbetweenness.py +0 -0
  185. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/katz_centrality.py +0 -0
  186. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/laplacian.py +0 -0
  187. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/pagerank.py +0 -0
  188. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/tests/__init__.py +0 -0
  189. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/tests/test_betweenness.py +0 -0
  190. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/tests/test_closeness.py +0 -0
  191. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/tests/test_degree.py +0 -0
  192. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/tests/test_egobetweenness.py +0 -0
  193. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/tests/test_flowbetweenness.py +0 -0
  194. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/tests/test_laplacian.py +0 -0
  195. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/centrality/tests/test_pagerank.py +0 -0
  196. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/LPA.py +0 -0
  197. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/__init__.py +0 -0
  198. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/ego_graph.py +0 -0
  199. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/localsearch.py +0 -0
  200. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/louvain.py +0 -0
  201. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/modularity.py +0 -0
  202. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/motif.py +0 -0
  203. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/tests/__init__.py +0 -0
  204. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/tests/test_LPA.py +0 -0
  205. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/tests/test_LS.py +0 -0
  206. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/tests/test_ego_graph.py +0 -0
  207. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/tests/test_louvian.py +0 -0
  208. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/tests/test_modularity.py +0 -0
  209. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/tests/test_modularity_max_detection.py +0 -0
  210. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/community/tests/test_motif.py +0 -0
  211. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/components/__init__.py +0 -0
  212. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/components/biconnected.py +0 -0
  213. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/components/connected.py +0 -0
  214. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/components/strongly_connected.py +0 -0
  215. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/components/tests/__init__.py +0 -0
  216. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/components/tests/test_biconnected.py +0 -0
  217. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/components/tests/test_connected.py +0 -0
  218. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/components/tests/test_strongly_connected.py +0 -0
  219. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/components/tests/test_weakly_connected.py +0 -0
  220. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/components/weakly_connected.py +0 -0
  221. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/core/__init__.py +0 -0
  222. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/core/k_core.py +0 -0
  223. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/core/tests/__init__.py +0 -0
  224. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/core/tests/test_k_core.py +0 -0
  225. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/drawing/__init__.py +0 -0
  226. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/drawing/defaults.py +0 -0
  227. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/drawing/drawing.py +0 -0
  228. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/drawing/geometry.py +0 -0
  229. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/drawing/layout.py +0 -0
  230. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/drawing/plot.py +0 -0
  231. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/drawing/positioning.py +0 -0
  232. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/drawing/simulator.py +0 -0
  233. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/drawing/tests/__init__.py +0 -0
  234. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/drawing/tests/test_drawing.py +0 -0
  235. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/drawing/tests/test_geometry.py +0 -0
  236. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/drawing/tests/test_plot.py +0 -0
  237. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/drawing/tests/test_positioning.py +0 -0
  238. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/drawing/utils.py +0 -0
  239. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_embedding/NOBE.py +0 -0
  240. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_embedding/__init__.py +0 -0
  241. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_embedding/deepwalk.py +0 -0
  242. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_embedding/line.py +0 -0
  243. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_embedding/net_emb_example_citeseer.py +0 -0
  244. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_embedding/node2vec.py +0 -0
  245. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_embedding/sdne.py +0 -0
  246. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_embedding/tests/__init__.py +0 -0
  247. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_embedding/tests/test_deepwalk.py +0 -0
  248. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_embedding/tests/test_line.py +0 -0
  249. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_embedding/tests/test_nobe.py +0 -0
  250. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_embedding/tests/test_node2vec.py +0 -0
  251. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_embedding/tests/test_sdne.py +0 -0
  252. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_generator/RandomNetwork.py +0 -0
  253. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_generator/__init__.py +0 -0
  254. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_generator/classic.py +0 -0
  255. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_generator/tests/__init__.py +0 -0
  256. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_generator/tests/test_Random_Network.py +0 -0
  257. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/graph_generator/tests/test_classic.py +0 -0
  258. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/__init__.py +0 -0
  259. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/assortativity.py +0 -0
  260. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/centrality/__init__.py +0 -0
  261. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/centrality/cycle_ratio.py +0 -0
  262. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/centrality/degree.py +0 -0
  263. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/centrality/hypercoreness.py +0 -0
  264. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/centrality/s_centrality.py +0 -0
  265. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/centrality/vector_centrality.py +0 -0
  266. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/hypergraph_clustering.py +0 -0
  267. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/hypergraph_operation.py +0 -0
  268. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/null_model/__init__.py +0 -0
  269. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/null_model/hypergraph_classic.py +0 -0
  270. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/null_model/lattice.py +0 -0
  271. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/null_model/random.py +0 -0
  272. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/null_model/simple.py +0 -0
  273. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/null_model/tests/__init__.py +0 -0
  274. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/null_model/tests/test_classic.py +0 -0
  275. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/null_model/tests/test_lattice.py +0 -0
  276. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/null_model/tests/test_simple.py +0 -0
  277. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/null_model/uniform.py +0 -0
  278. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/tests/__init__.py +0 -0
  279. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/tests/test_assortativity.py +0 -0
  280. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/tests/test_centrality.py +0 -0
  281. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/tests/test_hypergraph_clustering.py +0 -0
  282. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/hypergraph/tests/test_hypergraph_operation.py +0 -0
  283. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/isolate.py +0 -0
  284. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/path/__init__.py +0 -0
  285. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/path/average_shortest_path_length.py +0 -0
  286. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/path/bridges.py +0 -0
  287. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/path/diameter.py +0 -0
  288. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/path/mst.py +0 -0
  289. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/path/path.py +0 -0
  290. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/path/tests/__init__.py +0 -0
  291. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/path/tests/test_average_shortest_path_length.py +0 -0
  292. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/path/tests/test_bridges.py +0 -0
  293. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/path/tests/test_diameter.py +0 -0
  294. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/path/tests/test_mst.py +0 -0
  295. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/path/tests/test_path.py +0 -0
  296. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/structural_holes/AP_Greedy.py +0 -0
  297. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/structural_holes/HAM.py +0 -0
  298. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/structural_holes/HIS.py +0 -0
  299. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/structural_holes/ICC.py +0 -0
  300. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/structural_holes/MaxD.py +0 -0
  301. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/structural_holes/NOBE.py +0 -0
  302. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/structural_holes/SHII_metric.py +0 -0
  303. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/structural_holes/__init__.py +0 -0
  304. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/structural_holes/evaluation.py +0 -0
  305. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/structural_holes/maxBlock.py +0 -0
  306. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/structural_holes/metrics.py +0 -0
  307. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/structural_holes/weakTie.py +0 -0
  308. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/tests/__init__.py +0 -0
  309. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/functions/tests/test_isolate.py +0 -0
  310. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/ml_metrics/__init__.py +0 -0
  311. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/ml_metrics/base.py +0 -0
  312. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/ml_metrics/classification.py +0 -0
  313. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/ml_metrics/hypergraphs/__init__.py +0 -0
  314. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/ml_metrics/hypergraphs/hypergraph.py +0 -0
  315. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/model/__init__.py +0 -0
  316. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/model/hypergraphs/__init__.py +0 -0
  317. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/model/hypergraphs/dhcf.py +0 -0
  318. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/model/hypergraphs/dhne.py +0 -0
  319. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/model/hypergraphs/hgnn.py +0 -0
  320. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/model/hypergraphs/hgnnp.py +0 -0
  321. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/model/hypergraphs/hnhn.py +0 -0
  322. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/model/hypergraphs/hwnn.py +0 -0
  323. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/model/hypergraphs/hypergcn.py +0 -0
  324. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/model/hypergraphs/setgnn.py +0 -0
  325. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/model/hypergraphs/unignn.py +0 -0
  326. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/__init__.py +0 -0
  327. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/convs/__init__.py +0 -0
  328. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/convs/common.py +0 -0
  329. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/convs/hypergraphs/__init__.py +0 -0
  330. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/convs/hypergraphs/dhcf_conv.py +0 -0
  331. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/convs/hypergraphs/halfnlh_conv.py +0 -0
  332. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/convs/hypergraphs/hgnn_conv.py +0 -0
  333. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/convs/hypergraphs/hgnnp_conv.py +0 -0
  334. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/convs/hypergraphs/hnhn_conv.py +0 -0
  335. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/convs/hypergraphs/hwnn_conv.py +0 -0
  336. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/convs/hypergraphs/hypergcn_conv.py +0 -0
  337. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/convs/hypergraphs/unignn_conv.py +0 -0
  338. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/convs/pma.py +0 -0
  339. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/loss.py +0 -0
  340. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/regularization.py +0 -0
  341. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/tests/__init__.py +0 -0
  342. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/tests/test_gatconv.py +0 -0
  343. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/tests/test_gcnconv.py +0 -0
  344. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/tests/test_graphsageconv.py +0 -0
  345. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/nn/tests/test_regularization.py +0 -0
  346. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/__init__.py +0 -0
  347. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/edgelist.py +0 -0
  348. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/gexf.py +0 -0
  349. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/gml.py +0 -0
  350. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/graphml.py +0 -0
  351. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/graphviz.py +0 -0
  352. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/json_graph/__init__.py +0 -0
  353. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/json_graph/node_link.py +0 -0
  354. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/pajek.py +0 -0
  355. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/pickle.py +0 -0
  356. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/tests/__init__.py +0 -0
  357. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/tests/test_edgelist.py +0 -0
  358. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/tests/test_gexf.py +0 -0
  359. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/tests/test_gml.py +0 -0
  360. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/tests/test_graphml.py +0 -0
  361. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/tests/test_graphviz.py +0 -0
  362. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/tests/test_pajek.py +0 -0
  363. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/tests/test_pickle.py +0 -0
  364. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/tests/test_ucinet.py +0 -0
  365. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/readwrite/ucinet.py +0 -0
  366. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/tests/__init__.py +0 -0
  367. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/tests/script_test_cpp_easygraph.py +0 -0
  368. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/tests/teddy_test_cpp_easygraph_sanity_check.py +0 -0
  369. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/tests/test_convert.py +0 -0
  370. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/tests/test_cpp_easygraph.py +0 -0
  371. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/tests/test_hif.py +0 -0
  372. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/HIF.py +0 -0
  373. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/__init__.py +0 -0
  374. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/alias.py +0 -0
  375. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/convert_class.py +0 -0
  376. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/convert_to_matrix.py +0 -0
  377. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/decorators.py +0 -0
  378. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/download.py +0 -0
  379. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/exception.py +0 -0
  380. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/index_of_node.py +0 -0
  381. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/logging.py +0 -0
  382. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/mapped_queue.py +0 -0
  383. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/misc.py +0 -0
  384. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/relabel.py +0 -0
  385. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/sparse.py +0 -0
  386. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/easygraph/utils/type_change.py +0 -0
  387. {python_easygraph-1.6.1 → python_easygraph-1.6.2}/pyproject.toml +0 -0
  388. {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.1
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://static.pepy.tech/personalized-badge/python-easygraph?period=total&units=international_system&left_color=brightgreen&right_color=yellowgreen&left_text=Downloads
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.1
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://static.pepy.tech/personalized-badge/python-easygraph?period=total&units=international_system&left_color=brightgreen&right_color=yellowgreen&left_text=Downloads
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://static.pepy.tech/personalized-badge/python-easygraph?period=total&units=international_system&left_color=brightgreen&right_color=yellowgreen&left_text=Downloads
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))
@@ -86,4 +86,6 @@ struct compare_node {
86
86
  bool operator < (const compare_node &rhs) const {
87
87
  return d > rhs.d;
88
88
  }
89
- };
89
+ };
90
+
91
+ std::vector<double> _dijkstra(const Graph_L& G_l, int source, int target);
@@ -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
  }
@@ -6,4 +6,5 @@
6
6
  #include "structural_holes/__init__.h"
7
7
  #include "cores/__init__.h"
8
8
  #include "centrality/__init__.h"
9
- #include "pagerank/__init__.h"
9
+ #include "pagerank/__init__.h"
10
+ #include "community/__init__.h"
@@ -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,7 @@
1
+ #pragma once
2
+
3
+ #include <pybind11/pybind11.h>
4
+
5
+ namespace py = pybind11;
6
+
7
+ py::object cpp_LPA(py::object G);
@@ -0,0 +1,10 @@
1
+ #pragma once
2
+
3
+ #include "modularity.h"
4
+ #include "greedy_modularity.h"
5
+ #include "motif.h"
6
+ #include "louvain.h"
7
+ #include "LPA.h"
8
+ #include "ego_graph.h"
9
+ #include "graph_coloring.h"
10
+ #include "localsearch.h"
@@ -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(), [&degree](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(), [&degree](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);