scikit-network 0.31.0__tar.gz → 0.33.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of scikit-network might be problematic. Click here for more details.

Files changed (274) hide show
  1. {scikit-network-0.31.0 → scikit-network-0.33.0}/AUTHORS.rst +3 -1
  2. {scikit-network-0.31.0 → scikit-network-0.33.0}/HISTORY.rst +22 -0
  3. {scikit-network-0.31.0 → scikit-network-0.33.0}/PKG-INFO +25 -6
  4. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/reference/clustering.rst +11 -0
  5. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/reference/embedding.rst +0 -4
  6. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/reference/topology.rst +6 -0
  7. scikit-network-0.33.0/docs/reference/visualization.rst +18 -0
  8. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/tutorials/clustering/index.rst +2 -1
  9. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/tutorials/embedding/index.rst +0 -1
  10. {scikit-network-0.31.0 → scikit-network-0.33.0}/scikit_network.egg-info/PKG-INFO +25 -6
  11. {scikit-network-0.31.0 → scikit-network-0.33.0}/scikit_network.egg-info/SOURCES.txt +9 -3
  12. {scikit-network-0.31.0 → scikit-network-0.33.0}/setup.cfg +2 -2
  13. {scikit-network-0.31.0 → scikit-network-0.33.0}/setup.py +3 -3
  14. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/__init__.py +1 -1
  15. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/classification/base.py +1 -1
  16. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/classification/base_rank.py +3 -3
  17. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/classification/diffusion.py +25 -16
  18. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/classification/knn.py +23 -16
  19. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/classification/metrics.py +4 -4
  20. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/classification/pagerank.py +12 -8
  21. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/classification/propagation.py +25 -17
  22. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/classification/tests/test_diffusion.py +10 -0
  23. scikit-network-0.31.0/sknetwork/clustering/louvain_core.cpp → scikit-network-0.33.0/sknetwork/classification/vote.cpp +12968 -11092
  24. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/clustering/__init__.py +3 -1
  25. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/clustering/base.py +1 -1
  26. scikit-network-0.33.0/sknetwork/clustering/kcenters.py +253 -0
  27. scikit-network-0.33.0/sknetwork/clustering/leiden.py +242 -0
  28. scikit-network-0.33.0/sknetwork/clustering/leiden_core.cpp +31531 -0
  29. scikit-network-0.33.0/sknetwork/clustering/leiden_core.pyx +124 -0
  30. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/clustering/louvain.py +118 -83
  31. scikit-network-0.33.0/sknetwork/clustering/louvain_core.cpp +31176 -0
  32. scikit-network-0.33.0/sknetwork/clustering/louvain_core.pyx +124 -0
  33. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/clustering/postprocess.py +2 -2
  34. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/clustering/propagation_clustering.py +4 -4
  35. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/clustering/tests/test_API.py +7 -3
  36. scikit-network-0.33.0/sknetwork/clustering/tests/test_kcenters.py +60 -0
  37. scikit-network-0.33.0/sknetwork/clustering/tests/test_leiden.py +34 -0
  38. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/clustering/tests/test_louvain.py +2 -3
  39. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/data/__init__.py +1 -1
  40. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/data/base.py +7 -2
  41. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/data/load.py +20 -25
  42. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/data/models.py +15 -15
  43. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/data/parse.py +57 -34
  44. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/data/tests/test_API.py +3 -3
  45. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/data/tests/test_base.py +2 -2
  46. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/data/tests/test_parse.py +9 -12
  47. scikit-network-0.33.0/sknetwork/data/tests/test_toy_graphs.py +68 -0
  48. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/data/toy_graphs.py +35 -43
  49. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/embedding/__init__.py +0 -1
  50. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/embedding/base.py +23 -19
  51. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/embedding/force_atlas.py +3 -2
  52. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/embedding/louvain_embedding.py +1 -27
  53. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/embedding/random_projection.py +5 -3
  54. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/embedding/spectral.py +0 -73
  55. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/embedding/svd.py +0 -4
  56. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/embedding/tests/test_API.py +4 -28
  57. scikit-network-0.33.0/sknetwork/embedding/tests/test_louvain_embedding.py +33 -0
  58. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/embedding/tests/test_spectral.py +2 -5
  59. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/embedding/tests/test_svd.py +7 -1
  60. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/gnn/base_layer.py +3 -3
  61. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/gnn/gnn_classifier.py +41 -87
  62. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/gnn/layer.py +1 -1
  63. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/gnn/loss.py +1 -1
  64. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/gnn/optimizer.py +4 -3
  65. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/gnn/tests/test_base_layer.py +4 -4
  66. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/gnn/tests/test_gnn_classifier.py +12 -39
  67. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/gnn/utils.py +8 -8
  68. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/hierarchy/base.py +27 -0
  69. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/hierarchy/louvain_hierarchy.py +55 -47
  70. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/hierarchy/paris.cpp +27641 -20925
  71. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/hierarchy/paris.pyx +11 -10
  72. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/hierarchy/postprocess.py +16 -16
  73. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/hierarchy/tests/test_algos.py +5 -0
  74. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/hierarchy/tests/test_metrics.py +4 -4
  75. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/linalg/__init__.py +1 -1
  76. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/linalg/diteration.cpp +13927 -8097
  77. scikit-network-0.31.0/sknetwork/linalg/normalization.py → scikit-network-0.33.0/sknetwork/linalg/normalizer.py +17 -14
  78. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/linalg/operators.py +1 -1
  79. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/linalg/ppr_solver.py +1 -1
  80. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/linalg/push.cpp +23093 -16922
  81. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/linalg/tests/test_normalization.py +3 -7
  82. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/linalg/tests/test_operators.py +2 -6
  83. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/linalg/tests/test_ppr.py +1 -1
  84. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/linkpred/base.py +12 -1
  85. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/linkpred/nn.py +6 -6
  86. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/path/distances.py +11 -4
  87. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/path/shortest_path.py +1 -1
  88. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/path/tests/test_distances.py +7 -0
  89. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/path/tests/test_search.py +2 -2
  90. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/ranking/base.py +11 -6
  91. scikit-network-0.33.0/sknetwork/ranking/betweenness.cpp +9668 -0
  92. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/ranking/pagerank.py +13 -12
  93. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/ranking/tests/test_API.py +0 -2
  94. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/ranking/tests/test_betweenness.py +1 -1
  95. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/ranking/tests/test_pagerank.py +11 -5
  96. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/regression/base.py +18 -1
  97. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/regression/diffusion.py +30 -14
  98. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/regression/tests/test_diffusion.py +8 -0
  99. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/topology/__init__.py +3 -1
  100. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/topology/cliques.cpp +23502 -16858
  101. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/topology/core.cpp +22743 -16511
  102. scikit-network-0.33.0/sknetwork/topology/cycles.py +243 -0
  103. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/topology/minheap.cpp +19468 -13478
  104. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/topology/structure.py +2 -42
  105. scikit-network-0.33.0/sknetwork/topology/tests/test_cycles.py +65 -0
  106. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/topology/tests/test_structure.py +2 -16
  107. scikit-network-0.33.0/sknetwork/topology/triangles.cpp +8856 -0
  108. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/topology/triangles.pyx +7 -4
  109. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/topology/weisfeiler_lehman_core.cpp +14754 -8924
  110. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/utils/__init__.py +1 -1
  111. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/utils/format.py +1 -1
  112. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/utils/membership.py +2 -2
  113. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/utils/values.py +5 -3
  114. scikit-network-0.33.0/sknetwork/visualization/__init__.py +4 -0
  115. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/visualization/dendrograms.py +55 -7
  116. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/visualization/graphs.py +261 -44
  117. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/visualization/tests/test_dendrograms.py +9 -9
  118. scikit-network-0.33.0/sknetwork/visualization/tests/test_graphs.py +176 -0
  119. scikit-network-0.31.0/docs/reference/visualization.rst +0 -18
  120. scikit-network-0.31.0/sknetwork/classification/vote.cpp +0 -21699
  121. scikit-network-0.31.0/sknetwork/clustering/louvain_core.pyx +0 -132
  122. scikit-network-0.31.0/sknetwork/data/tests/test_toy_graphs.py +0 -68
  123. scikit-network-0.31.0/sknetwork/embedding/louvain_hierarchy.py +0 -142
  124. scikit-network-0.31.0/sknetwork/embedding/tests/test_louvain_embedding.py +0 -33
  125. scikit-network-0.31.0/sknetwork/embedding/tests/test_louvain_hierarchy.py +0 -19
  126. scikit-network-0.31.0/sknetwork/ranking/betweenness.cpp +0 -6638
  127. scikit-network-0.31.0/sknetwork/topology/triangles.cpp +0 -5006
  128. scikit-network-0.31.0/sknetwork/visualization/__init__.py +0 -4
  129. scikit-network-0.31.0/sknetwork/visualization/tests/test_graphs.py +0 -170
  130. {scikit-network-0.31.0 → scikit-network-0.33.0}/CONTRIBUTING.rst +0 -0
  131. {scikit-network-0.31.0 → scikit-network-0.33.0}/LICENSE +0 -0
  132. {scikit-network-0.31.0 → scikit-network-0.33.0}/MANIFEST.in +0 -0
  133. {scikit-network-0.31.0 → scikit-network-0.33.0}/README.rst +0 -0
  134. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/Makefile +0 -0
  135. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/authors.rst +0 -0
  136. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/conf.py +0 -0
  137. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/contributing.rst +0 -0
  138. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/first_steps.rst +0 -0
  139. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/genindex.rst +0 -0
  140. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/glossary.rst +0 -0
  141. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/history.rst +0 -0
  142. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/index.rst +0 -0
  143. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/make.bat +0 -0
  144. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/readme.rst +0 -0
  145. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/reference/classification.rst +0 -0
  146. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/reference/data.rst +0 -0
  147. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/reference/gnn.rst +0 -0
  148. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/reference/hierarchy.rst +0 -0
  149. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/reference/linalg.rst +0 -0
  150. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/reference/linkpred.rst +0 -0
  151. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/reference/path.rst +0 -0
  152. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/reference/ranking.rst +0 -0
  153. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/reference/regression.rst +0 -0
  154. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/reference/utils.rst +0 -0
  155. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/tutorials/classification/index.rst +0 -0
  156. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/tutorials/data/index.rst +0 -0
  157. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/tutorials/gnn/index.rst +0 -0
  158. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/tutorials/hierarchy/index.rst +0 -0
  159. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/tutorials/linkpred/index.rst +0 -0
  160. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/tutorials/overview/index.rst +0 -0
  161. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/tutorials/path/index.rst +0 -0
  162. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/tutorials/ranking/index.rst +0 -0
  163. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/tutorials/regression/index.rst +0 -0
  164. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/tutorials/topology/index.rst +0 -0
  165. {scikit-network-0.31.0 → scikit-network-0.33.0}/docs/tutorials/visualization/index.rst +0 -0
  166. {scikit-network-0.31.0 → scikit-network-0.33.0}/scikit_network.egg-info/dependency_links.txt +0 -0
  167. {scikit-network-0.31.0 → scikit-network-0.33.0}/scikit_network.egg-info/not-zip-safe +0 -0
  168. {scikit-network-0.31.0 → scikit-network-0.33.0}/scikit_network.egg-info/requires.txt +0 -0
  169. {scikit-network-0.31.0 → scikit-network-0.33.0}/scikit_network.egg-info/top_level.txt +0 -0
  170. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/base.py +0 -0
  171. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/classification/__init__.py +0 -0
  172. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/classification/tests/__init__.py +0 -0
  173. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/classification/tests/test_API.py +0 -0
  174. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/classification/tests/test_knn.py +0 -0
  175. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/classification/tests/test_metrics.py +0 -0
  176. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/classification/tests/test_pagerank.py +0 -0
  177. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/classification/tests/test_propagation.py +0 -0
  178. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/classification/vote.pyx +0 -0
  179. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/clustering/metrics.py +0 -0
  180. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/clustering/tests/__init__.py +0 -0
  181. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/clustering/tests/test_metrics.py +0 -0
  182. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/clustering/tests/test_postprocess.py +0 -0
  183. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/data/test_graphs.py +0 -0
  184. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/data/tests/__init__.py +0 -0
  185. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/data/tests/test_load.py +0 -0
  186. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/data/tests/test_models.py +0 -0
  187. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/data/tests/test_test_graphs.py +0 -0
  188. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/data/timeout.py +0 -0
  189. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/embedding/spring.py +0 -0
  190. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/embedding/tests/__init__.py +0 -0
  191. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/embedding/tests/test_force_atlas.py +0 -0
  192. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/embedding/tests/test_random_projection.py +0 -0
  193. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/embedding/tests/test_spring.py +0 -0
  194. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/gnn/__init__.py +0 -0
  195. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/gnn/activation.py +0 -0
  196. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/gnn/base.py +0 -0
  197. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/gnn/base_activation.py +0 -0
  198. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/gnn/neighbor_sampler.py +0 -0
  199. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/gnn/tests/__init__.py +0 -0
  200. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/gnn/tests/test_activation.py +0 -0
  201. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/gnn/tests/test_base.py +0 -0
  202. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/gnn/tests/test_layers.py +0 -0
  203. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/gnn/tests/test_loss.py +0 -0
  204. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/gnn/tests/test_neigh_sampler.py +0 -0
  205. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/gnn/tests/test_optimizer.py +0 -0
  206. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/gnn/tests/test_utils.py +0 -0
  207. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/hierarchy/__init__.py +0 -0
  208. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/hierarchy/metrics.py +0 -0
  209. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/hierarchy/tests/__init__.py +0 -0
  210. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/hierarchy/tests/test_API.py +0 -0
  211. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/hierarchy/tests/test_postprocess.py +0 -0
  212. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/linalg/basics.py +0 -0
  213. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/linalg/diteration.pyx +0 -0
  214. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/linalg/eig_solver.py +0 -0
  215. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/linalg/laplacian.py +0 -0
  216. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/linalg/polynome.py +0 -0
  217. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/linalg/push.pyx +0 -0
  218. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/linalg/sparse_lowrank.py +0 -0
  219. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/linalg/svd_solver.py +0 -0
  220. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/linalg/tests/__init__.py +0 -0
  221. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/linalg/tests/test_eig.py +0 -0
  222. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/linalg/tests/test_laplacian.py +0 -0
  223. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/linalg/tests/test_polynome.py +0 -0
  224. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/linalg/tests/test_sparse_lowrank.py +0 -0
  225. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/linalg/tests/test_svd.py +0 -0
  226. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/linkpred/__init__.py +0 -0
  227. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/linkpred/tests/__init__.py +0 -0
  228. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/linkpred/tests/test_nn.py +0 -0
  229. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/log.py +0 -0
  230. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/path/__init__.py +0 -0
  231. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/path/dag.py +0 -0
  232. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/path/search.py +0 -0
  233. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/path/tests/__init__.py +0 -0
  234. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/path/tests/test_dag.py +0 -0
  235. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/path/tests/test_shortest_path.py +0 -0
  236. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/ranking/__init__.py +0 -0
  237. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/ranking/betweenness.pyx +0 -0
  238. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/ranking/closeness.py +0 -0
  239. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/ranking/hits.py +0 -0
  240. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/ranking/katz.py +0 -0
  241. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/ranking/postprocess.py +0 -0
  242. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/ranking/tests/__init__.py +0 -0
  243. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/ranking/tests/test_closeness.py +0 -0
  244. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/ranking/tests/test_hits.py +0 -0
  245. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/ranking/tests/test_postprocess.py +0 -0
  246. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/regression/__init__.py +0 -0
  247. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/regression/tests/__init__.py +0 -0
  248. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/regression/tests/test_API.py +0 -0
  249. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/sknetwork.py +0 -0
  250. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/test_base.py +0 -0
  251. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/test_log.py +0 -0
  252. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/topology/cliques.pyx +0 -0
  253. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/topology/core.pyx +0 -0
  254. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/topology/minheap.pxd +0 -0
  255. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/topology/minheap.pyx +0 -0
  256. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/topology/tests/__init__.py +0 -0
  257. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/topology/tests/test_cliques.py +0 -0
  258. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/topology/tests/test_core.py +0 -0
  259. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/topology/tests/test_triangles.py +0 -0
  260. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/topology/tests/test_wl.py +0 -0
  261. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/topology/weisfeiler_lehman.py +0 -0
  262. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/topology/weisfeiler_lehman_core.pyx +0 -0
  263. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/utils/check.py +0 -0
  264. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/utils/neighbors.py +0 -0
  265. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/utils/tests/__init__.py +0 -0
  266. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/utils/tests/test_check.py +0 -0
  267. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/utils/tests/test_format.py +0 -0
  268. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/utils/tests/test_membership.py +0 -0
  269. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/utils/tests/test_neighbors.py +0 -0
  270. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/utils/tests/test_tfidf.py +0 -0
  271. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/utils/tests/test_values.py +0 -0
  272. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/utils/tfidf.py +0 -0
  273. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/visualization/colors.py +0 -0
  274. {scikit-network-0.31.0 → scikit-network-0.33.0}/sknetwork/visualization/tests/__init__.py +0 -0
@@ -13,7 +13,6 @@ Development Lead
13
13
  * Simon Delarue <simon.delarue@telecom-paris.fr>
14
14
  * Marc Jeanmougin <marc.jeanmougin@telecom-paris.fr>
15
15
 
16
-
17
16
  Former lead
18
17
  -----------
19
18
 
@@ -39,3 +38,6 @@ Contributors
39
38
  * Flávio Juvenal
40
39
  * Wenzhuo Zhao
41
40
  * Henry Carscadden
41
+ * Yiwen Peng
42
+ * Ahmed Zaiou
43
+ * Laurène David
@@ -2,6 +2,28 @@
2
2
  History
3
3
  =======
4
4
 
5
+ 0.33.0 (2024-07-16)
6
+ -------------------
7
+
8
+ * Add Python 3.12
9
+ * Drop Python 3.8
10
+
11
+ 0.32.1 (2024-04-02)
12
+ -------------------
13
+
14
+ * Fix documentation
15
+ * Fix wheel upload
16
+
17
+ 0.32.0 (2024-03-29)
18
+ -------------------
19
+
20
+ * Add Leiden clustering algorithm
21
+ * Add k-center clustering algorithm
22
+ * Add functions to detect and break cycles
23
+ * Add damping factor in diffusion
24
+ * Fix F1 scores
25
+ * Remove hierarchical Louvain embedding
26
+ * Get clustering coefficient for directed graphs
5
27
 
6
28
  0.31.0 (2023-05-22)
7
29
  -------------------
@@ -1,13 +1,12 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: scikit-network
3
- Version: 0.31.0
3
+ Version: 0.33.0
4
4
  Summary: Graph algorithms
5
5
  Home-page: https://github.com/sknetwork-team/scikit-network
6
6
  Author: Scikit-network team
7
7
  Author-email: bonald@enst.fr
8
8
  License: BSD license
9
9
  Keywords: sknetwork
10
- Platform: UNKNOWN
11
10
  Classifier: Development Status :: 3 - Alpha
12
11
  Classifier: Intended Audience :: Developers
13
12
  Classifier: Intended Audience :: Information Technology
@@ -16,11 +15,11 @@ Classifier: Intended Audience :: Science/Research
16
15
  Classifier: License :: OSI Approved :: BSD License
17
16
  Classifier: Natural Language :: English
18
17
  Classifier: Programming Language :: Cython
19
- Classifier: Programming Language :: Python :: 3.8
20
18
  Classifier: Programming Language :: Python :: 3.9
21
19
  Classifier: Programming Language :: Python :: 3.10
22
20
  Classifier: Programming Language :: Python :: 3.11
23
- Requires-Python: >=3.8
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Requires-Python: >=3.9
24
23
  Description-Content-Type: text/x-rst
25
24
  License-File: LICENSE
26
25
  License-File: AUTHORS.rst
@@ -117,6 +116,28 @@ the `Journal of Machine Learning Research <https://jmlr.org>`_:
117
116
  History
118
117
  =======
119
118
 
119
+ 0.33.0 (2024-07-16)
120
+ -------------------
121
+
122
+ * Add Python 3.12
123
+ * Drop Python 3.8
124
+
125
+ 0.32.1 (2024-04-02)
126
+ -------------------
127
+
128
+ * Fix documentation
129
+ * Fix wheel upload
130
+
131
+ 0.32.0 (2024-03-29)
132
+ -------------------
133
+
134
+ * Add Leiden clustering algorithm
135
+ * Add k-center clustering algorithm
136
+ * Add functions to detect and break cycles
137
+ * Add damping factor in diffusion
138
+ * Fix F1 scores
139
+ * Remove hierarchical Louvain embedding
140
+ * Get clustering coefficient for directed graphs
120
141
 
121
142
  0.31.0 (2023-05-22)
122
143
  -------------------
@@ -492,5 +513,3 @@ History
492
513
  ------------------
493
514
 
494
515
  * First release on PyPI.
495
-
496
-
@@ -49,6 +49,17 @@ When the graph is weighted, the degree of a node is replaced by its weight (sum
49
49
 
50
50
  .. autoclass:: sknetwork.clustering.Louvain
51
51
 
52
+ Leiden
53
+ ------
54
+
55
+ .. autoclass:: sknetwork.clustering.Leiden
56
+
57
+ K-centers
58
+ ---------
59
+
60
+ .. autoclass:: sknetwork.clustering.KCenters
61
+
62
+
52
63
  Propagation
53
64
  -----------
54
65
  .. autoclass:: sknetwork.clustering.PropagationClustering
@@ -37,10 +37,6 @@ Louvain
37
37
 
38
38
  .. autoclass:: sknetwork.embedding.LouvainEmbedding
39
39
 
40
- Hierarchical Louvain
41
- --------------------
42
-
43
- .. autoclass:: sknetwork.embedding.LouvainNE
44
40
 
45
41
  Force Atlas
46
42
  -----------
@@ -19,8 +19,14 @@ Structure
19
19
 
20
20
  .. autofunction:: sknetwork.topology.is_bipartite
21
21
 
22
+ Cycles
23
+ ------
24
+
22
25
  .. autofunction:: sknetwork.topology.is_acyclic
23
26
 
27
+ .. autofunction:: sknetwork.topology.get_cycles
28
+
29
+ .. autofunction:: sknetwork.topology.break_cycles
24
30
 
25
31
  Core decomposition
26
32
  ------------------
@@ -0,0 +1,18 @@
1
+ .. _visualization:
2
+
3
+ Visualization
4
+ *************
5
+
6
+ Visualization tools.
7
+
8
+ Graphs
9
+ ------
10
+
11
+ .. autofunction:: sknetwork.visualization.graphs.visualize_graph
12
+
13
+ .. autofunction:: sknetwork.visualization.graphs.visualize_bigraph
14
+
15
+ Dendrograms
16
+ -----------
17
+
18
+ .. autofunction:: sknetwork.visualization.dendrograms.visualize_dendrogram
@@ -7,5 +7,6 @@ Clustering
7
7
  .. toctree::
8
8
 
9
9
  louvain
10
+ leiden
11
+ kcenters
10
12
  propagation
11
-
@@ -10,7 +10,6 @@ Embedding
10
10
  pca
11
11
  random_projection
12
12
  louvain_embedding
13
- louvain_hierarchy
14
13
  spring
15
14
  forceatlas
16
15
 
@@ -1,13 +1,12 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: scikit-network
3
- Version: 0.31.0
3
+ Version: 0.33.0
4
4
  Summary: Graph algorithms
5
5
  Home-page: https://github.com/sknetwork-team/scikit-network
6
6
  Author: Scikit-network team
7
7
  Author-email: bonald@enst.fr
8
8
  License: BSD license
9
9
  Keywords: sknetwork
10
- Platform: UNKNOWN
11
10
  Classifier: Development Status :: 3 - Alpha
12
11
  Classifier: Intended Audience :: Developers
13
12
  Classifier: Intended Audience :: Information Technology
@@ -16,11 +15,11 @@ Classifier: Intended Audience :: Science/Research
16
15
  Classifier: License :: OSI Approved :: BSD License
17
16
  Classifier: Natural Language :: English
18
17
  Classifier: Programming Language :: Cython
19
- Classifier: Programming Language :: Python :: 3.8
20
18
  Classifier: Programming Language :: Python :: 3.9
21
19
  Classifier: Programming Language :: Python :: 3.10
22
20
  Classifier: Programming Language :: Python :: 3.11
23
- Requires-Python: >=3.8
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Requires-Python: >=3.9
24
23
  Description-Content-Type: text/x-rst
25
24
  License-File: LICENSE
26
25
  License-File: AUTHORS.rst
@@ -117,6 +116,28 @@ the `Journal of Machine Learning Research <https://jmlr.org>`_:
117
116
  History
118
117
  =======
119
118
 
119
+ 0.33.0 (2024-07-16)
120
+ -------------------
121
+
122
+ * Add Python 3.12
123
+ * Drop Python 3.8
124
+
125
+ 0.32.1 (2024-04-02)
126
+ -------------------
127
+
128
+ * Fix documentation
129
+ * Fix wheel upload
130
+
131
+ 0.32.0 (2024-03-29)
132
+ -------------------
133
+
134
+ * Add Leiden clustering algorithm
135
+ * Add k-center clustering algorithm
136
+ * Add functions to detect and break cycles
137
+ * Add damping factor in diffusion
138
+ * Fix F1 scores
139
+ * Remove hierarchical Louvain embedding
140
+ * Get clustering coefficient for directed graphs
120
141
 
121
142
  0.31.0 (2023-05-22)
122
143
  -------------------
@@ -492,5 +513,3 @@ History
492
513
  ------------------
493
514
 
494
515
  * First release on PyPI.
495
-
496
-
@@ -7,6 +7,7 @@ README.rst
7
7
  setup.cfg
8
8
  setup.py
9
9
  ./sknetwork/classification/vote.cpp
10
+ ./sknetwork/clustering/leiden_core.cpp
10
11
  ./sknetwork/clustering/louvain_core.cpp
11
12
  ./sknetwork/hierarchy/paris.cpp
12
13
  ./sknetwork/linalg/diteration.cpp
@@ -85,6 +86,9 @@ sknetwork/classification/tests/test_pagerank.py
85
86
  sknetwork/classification/tests/test_propagation.py
86
87
  sknetwork/clustering/__init__.py
87
88
  sknetwork/clustering/base.py
89
+ sknetwork/clustering/kcenters.py
90
+ sknetwork/clustering/leiden.py
91
+ sknetwork/clustering/leiden_core.pyx
88
92
  sknetwork/clustering/louvain.py
89
93
  sknetwork/clustering/louvain_core.pyx
90
94
  sknetwork/clustering/metrics.py
@@ -92,6 +96,8 @@ sknetwork/clustering/postprocess.py
92
96
  sknetwork/clustering/propagation_clustering.py
93
97
  sknetwork/clustering/tests/__init__.py
94
98
  sknetwork/clustering/tests/test_API.py
99
+ sknetwork/clustering/tests/test_kcenters.py
100
+ sknetwork/clustering/tests/test_leiden.py
95
101
  sknetwork/clustering/tests/test_louvain.py
96
102
  sknetwork/clustering/tests/test_metrics.py
97
103
  sknetwork/clustering/tests/test_postprocess.py
@@ -115,7 +121,6 @@ sknetwork/embedding/__init__.py
115
121
  sknetwork/embedding/base.py
116
122
  sknetwork/embedding/force_atlas.py
117
123
  sknetwork/embedding/louvain_embedding.py
118
- sknetwork/embedding/louvain_hierarchy.py
119
124
  sknetwork/embedding/random_projection.py
120
125
  sknetwork/embedding/spectral.py
121
126
  sknetwork/embedding/spring.py
@@ -124,7 +129,6 @@ sknetwork/embedding/tests/__init__.py
124
129
  sknetwork/embedding/tests/test_API.py
125
130
  sknetwork/embedding/tests/test_force_atlas.py
126
131
  sknetwork/embedding/tests/test_louvain_embedding.py
127
- sknetwork/embedding/tests/test_louvain_hierarchy.py
128
132
  sknetwork/embedding/tests/test_random_projection.py
129
133
  sknetwork/embedding/tests/test_spectral.py
130
134
  sknetwork/embedding/tests/test_spring.py
@@ -166,7 +170,7 @@ sknetwork/linalg/basics.py
166
170
  sknetwork/linalg/diteration.pyx
167
171
  sknetwork/linalg/eig_solver.py
168
172
  sknetwork/linalg/laplacian.py
169
- sknetwork/linalg/normalization.py
173
+ sknetwork/linalg/normalizer.py
170
174
  sknetwork/linalg/operators.py
171
175
  sknetwork/linalg/polynome.py
172
176
  sknetwork/linalg/ppr_solver.py
@@ -221,6 +225,7 @@ sknetwork/regression/tests/test_diffusion.py
221
225
  sknetwork/topology/__init__.py
222
226
  sknetwork/topology/cliques.pyx
223
227
  sknetwork/topology/core.pyx
228
+ sknetwork/topology/cycles.py
224
229
  sknetwork/topology/minheap.pxd
225
230
  sknetwork/topology/minheap.pyx
226
231
  sknetwork/topology/structure.py
@@ -230,6 +235,7 @@ sknetwork/topology/weisfeiler_lehman_core.pyx
230
235
  sknetwork/topology/tests/__init__.py
231
236
  sknetwork/topology/tests/test_cliques.py
232
237
  sknetwork/topology/tests/test_core.py
238
+ sknetwork/topology/tests/test_cycles.py
233
239
  sknetwork/topology/tests/test_structure.py
234
240
  sknetwork/topology/tests/test_triangles.py
235
241
  sknetwork/topology/tests/test_wl.py
@@ -1,5 +1,5 @@
1
1
  [bumpversion]
2
- current_version = 0.31.0
2
+ current_version = 0.33.0
3
3
  commit = True
4
4
  tag = True
5
5
 
@@ -21,7 +21,7 @@ test = pytest
21
21
  collect_ignore = ['setup.py']
22
22
 
23
23
  [options]
24
- python_requires = >=3.8
24
+ python_requires = >=3.9
25
25
 
26
26
  [egg_info]
27
27
  tag_build =
@@ -135,10 +135,10 @@ setup(
135
135
  'License :: OSI Approved :: BSD License',
136
136
  'Natural Language :: English',
137
137
  'Programming Language :: Cython',
138
- 'Programming Language :: Python :: 3.8',
139
138
  'Programming Language :: Python :: 3.9',
140
139
  'Programming Language :: Python :: 3.10',
141
- 'Programming Language :: Python :: 3.11'
140
+ 'Programming Language :: Python :: 3.11',
141
+ 'Programming Language :: Python :: 3.12'
142
142
  ],
143
143
  description="Graph algorithms",
144
144
  install_requires=requirements,
@@ -153,7 +153,7 @@ setup(
153
153
  test_suite='tests',
154
154
  tests_require=test_requirements,
155
155
  url='https://github.com/sknetwork-team/scikit-network',
156
- version='0.31.0',
156
+ version='0.33.0',
157
157
  zip_safe=False,
158
158
  ext_modules=ext_modules,
159
159
  include_dirs=[numpy.get_include()],
@@ -4,7 +4,7 @@
4
4
 
5
5
  __author__ = """scikit-network team"""
6
6
  __email__ = "thomas.bonald@telecom-paris.fr"
7
- __version__ = '0.31.0'
7
+ __version__ = '0.33.0'
8
8
 
9
9
  import sknetwork.topology
10
10
  import sknetwork.path
@@ -38,7 +38,7 @@ class BaseClassifier(Algorithm, ABC):
38
38
  self.probs_row_ = None
39
39
  self.probs_col_ = None
40
40
 
41
- def predict(self, columns=False) -> np.ndarray:
41
+ def predict(self, columns: bool = False) -> np.ndarray:
42
42
  """Return the labels predicted by the algorithm.
43
43
 
44
44
  Parameters
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  # -*- coding: utf-8 -*-
3
3
  """
4
- Created on March 2020
4
+ Created in March 2020
5
5
  @author: Nathan de Lara <nathan.delara@polytechnique.org>
6
6
  """
7
7
  from functools import partial
@@ -12,7 +12,7 @@ import numpy as np
12
12
  from scipy import sparse
13
13
 
14
14
  from sknetwork.classification.base import BaseClassifier
15
- from sknetwork.linalg.normalization import normalize
15
+ from sknetwork.linalg.normalizer import normalize
16
16
  from sknetwork.ranking.base import BaseRanking
17
17
  from sknetwork.utils.check import check_labels, check_n_jobs
18
18
  from sknetwork.utils.format import get_adjacency_values
@@ -114,7 +114,7 @@ class RankClassifier(BaseClassifier):
114
114
  seeds_labels = seeds_labels.astype(int)
115
115
  labels_unique, n_classes = check_labels(seeds_labels)
116
116
  seeds_all = self._process_labels(seeds_labels)
117
- local_function = partial(self.algorithm.fit_transform, adjacency)
117
+ local_function = partial(self.algorithm.fit_predict, adjacency)
118
118
  with Pool(self.n_jobs) as pool:
119
119
  scores = np.array(pool.map(local_function, seeds_all))
120
120
  scores = scores.T
@@ -11,7 +11,7 @@ from scipy import sparse
11
11
 
12
12
  from sknetwork.classification.base import BaseClassifier
13
13
  from sknetwork.path.distances import get_distances
14
- from sknetwork.linalg.normalization import normalize
14
+ from sknetwork.linalg.normalizer import normalize
15
15
  from sknetwork.utils.format import get_adjacency_values
16
16
  from sknetwork.utils.membership import get_membership
17
17
  from sknetwork.utils.neighbors import get_degrees
@@ -38,11 +38,14 @@ class DiffusionClassifier(BaseClassifier):
38
38
  Labels of nodes.
39
39
  probs_ : sparse.csr_matrix, shape (n_row, n_labels)
40
40
  Probability distribution over labels.
41
- labels_row_, labels_col_ : np.ndarray
42
- Labels of rows and columns, for bipartite graphs.
43
- probs_row_, probs_col_ : sparse.csr_matrix, shape (n_row, n_labels)
44
- Probability distributions over labels for rows and columns (for bipartite graphs).
45
-
41
+ labels_row_ : np.ndarray
42
+ Labels of rows, for bipartite graphs.
43
+ labels_col_ : np.ndarray
44
+ Labels of columns, for bipartite graphs.
45
+ probs_row_ : sparse.csr_matrix, shape (n_row, n_labels)
46
+ Probability distributions over labels of rows, for bipartite graphs.
47
+ probs_col_ : sparse.csr_matrix, shape (n_col, n_labels)
48
+ Probability distributions over labels of columns, for bipartite graphs.
46
49
  Example
47
50
  -------
48
51
  >>> from sknetwork.data import karate_club
@@ -52,7 +55,7 @@ class DiffusionClassifier(BaseClassifier):
52
55
  >>> labels_true = graph.labels
53
56
  >>> labels = {0: labels_true[0], 33: labels_true[33]}
54
57
  >>> labels_pred = diffusion.fit_predict(adjacency, labels)
55
- >>> np.round(np.mean(labels_pred == labels_true), 2)
58
+ >>> round(np.mean(labels_pred == labels_true), 2)
56
59
  0.97
57
60
 
58
61
  References
@@ -71,20 +74,23 @@ class DiffusionClassifier(BaseClassifier):
71
74
  self.scale = scale
72
75
 
73
76
  def fit(self, input_matrix: Union[sparse.csr_matrix, np.ndarray],
74
- labels: Optional[Union[dict, np.ndarray]] = None, labels_row: Optional[Union[dict, np.ndarray]] = None,
75
- labels_col: Optional[Union[dict, np.ndarray]] = None, force_bipartite: bool = False) \
77
+ labels: Optional[Union[dict, list, np.ndarray]] = None,
78
+ labels_row: Optional[Union[dict, list, np.ndarray]] = None,
79
+ labels_col: Optional[Union[dict, list, np.ndarray]] = None, force_bipartite: bool = False) \
76
80
  -> 'DiffusionClassifier':
77
81
  """Compute the solution to the Dirichlet problem (temperatures at equilibrium).
78
82
 
79
83
  Parameters
80
84
  ----------
81
- input_matrix :
85
+ input_matrix : sparse.csr_matrix, np.ndarray
82
86
  Adjacency matrix or biadjacency matrix of the graph.
83
- labels :
87
+ labels : dict, np.ndarray
84
88
  Known labels (dictionary or vector of int). Negative values ignored.
85
- labels_row, labels_col :
86
- Labels of rows and columns for bipartite graphs. Negative values ignored.
87
- force_bipartite :
89
+ labels_row : dict, np.ndarray
90
+ Labels of rows for bipartite graphs. Negative values ignored.
91
+ labels_col : dict, np.ndarray
92
+ Labels of columns for bipartite graphs. Negative values ignored.
93
+ force_bipartite : bool
88
94
  If ``True``, consider the input matrix as a biadjacency matrix (default = ``False``).
89
95
 
90
96
  Returns
@@ -98,7 +104,10 @@ class DiffusionClassifier(BaseClassifier):
98
104
  labels = values.astype(int)
99
105
  if (labels < 0).all():
100
106
  raise ValueError('At least one node must be given a non-negative label.')
101
- temperatures = get_membership(labels).toarray()
107
+ labels_reindex = labels.copy()
108
+ labels_unique, inverse = np.unique(labels[labels >= 0], return_inverse=True)
109
+ labels_reindex[labels >= 0] = inverse
110
+ temperatures = get_membership(labels_reindex).toarray()
102
111
  temperatures_seeds = temperatures[labels >= 0]
103
112
  temperatures[labels < 0] = 0.5
104
113
  diffusion = normalize(adjacency)
@@ -107,7 +116,7 @@ class DiffusionClassifier(BaseClassifier):
107
116
  temperatures[labels >= 0] = temperatures_seeds
108
117
  if self.centering:
109
118
  temperatures -= temperatures.mean(axis=0)
110
- labels_ = temperatures.argmax(axis=1)
119
+ labels_ = labels_unique[temperatures.argmax(axis=1)]
111
120
 
112
121
  # softmax
113
122
  if self.centering:
@@ -12,7 +12,7 @@ from scipy import sparse
12
12
 
13
13
  from sknetwork.classification.base import BaseClassifier
14
14
  from sknetwork.embedding.base import BaseEmbedding
15
- from sknetwork.linalg.normalization import get_norms, normalize
15
+ from sknetwork.linalg.normalizer import get_norms, normalize
16
16
  from sknetwork.utils.check import check_n_neighbors
17
17
  from sknetwork.utils.format import get_adjacency_values
18
18
 
@@ -22,12 +22,12 @@ class NNClassifier(BaseClassifier):
22
22
 
23
23
  Parameters
24
24
  ----------
25
- n_neighbors :
25
+ n_neighbors : int
26
26
  Number of nearest neighbors .
27
- embedding_method :
27
+ embedding_method : :class:`BaseEmbedding`
28
28
  Embedding method used to represent nodes in vector space.
29
29
  If ``None`` (default), use identity.
30
- normalize :
30
+ normalize : bool
31
31
  If ``True``, apply normalization so that all vectors have norm 1 in the embedding space.
32
32
 
33
33
  Attributes
@@ -36,10 +36,14 @@ class NNClassifier(BaseClassifier):
36
36
  Labels of nodes.
37
37
  probs_ : sparse.csr_matrix, shape (n_row, n_labels)
38
38
  Probability distribution over labels.
39
- labels_row_, labels_col_ : np.ndarray
40
- Labels of rows and columns, for bipartite graphs.
41
- probs_row_, probs_col_ : sparse.csr_matrix, shape (n_row, n_labels)
42
- Probability distributions over labels for rows and columns (for bipartite graphs).
39
+ labels_row_ : np.ndarray
40
+ Labels of rows, for bipartite graphs.
41
+ labels_col_ : np.ndarray
42
+ Labels of columns, for bipartite graphs.
43
+ probs_row_ : sparse.csr_matrix, shape (n_row, n_labels)
44
+ Probability distributions over labels of rows, for bipartite graphs.
45
+ probs_col_ : sparse.csr_matrix, shape (n_col, n_labels)
46
+ Probability distributions over labels of columns, for bipartite graphs.
43
47
 
44
48
  Example
45
49
  -------
@@ -51,7 +55,7 @@ class NNClassifier(BaseClassifier):
51
55
  >>> labels_true = graph.labels
52
56
  >>> labels = {0: labels_true[0], 33: labels_true[33]}
53
57
  >>> labels_pred = classifier.fit_predict(adjacency, labels)
54
- >>> np.round(np.mean(labels_pred == labels_true), 2)
58
+ >>> round(np.mean(labels_pred == labels_true), 2)
55
59
  0.82
56
60
  """
57
61
  def __init__(self, n_neighbors: int = 3, embedding_method: Optional[BaseEmbedding] = None, normalize: bool = True):
@@ -93,18 +97,21 @@ class NNClassifier(BaseClassifier):
93
97
 
94
98
  return probs, labels
95
99
 
96
- def fit(self, input_matrix: Union[sparse.csr_matrix, np.ndarray], labels: Union[np.ndarray, dict] = None,
97
- labels_row: Union[np.ndarray, dict] = None, labels_col: Union[np.ndarray, dict] = None) -> 'NNClassifier':
100
+ def fit(self, input_matrix: Union[sparse.csr_matrix, np.ndarray], labels: Union[np.ndarray, list, dict] = None,
101
+ labels_row: Union[np.ndarray, list, dict] = None,
102
+ labels_col: Union[np.ndarray, list, dict] = None) -> 'NNClassifier':
98
103
  """Node classification by k-nearest neighbors in the embedding space.
99
104
 
100
105
  Parameters
101
106
  ----------
102
- input_matrix :
107
+ input_matrix : sparse.csr_matrix, np.ndarray
103
108
  Adjacency matrix or biadjacency matrix of the graph.
104
- labels :
105
- Known labels (dictionary or array). Negative values ignored.
106
- labels_row, labels_col :
107
- Known labels of rows and columns (for bipartite graphs).
109
+ labels : np.ndarray, dict
110
+ Known labels. Negative values ignored.
111
+ labels_row : np.ndarray, dict
112
+ Known labels of rows, for bipartite graphs.
113
+ labels_col : np.ndarray, dict
114
+ Known labels of columns, for bipartite graphs.
108
115
 
109
116
  Returns
110
117
  -------
@@ -34,7 +34,7 @@ def get_accuracy_score(labels_true: np.ndarray, labels_pred: np.ndarray) -> floa
34
34
  >>> import numpy as np
35
35
  >>> labels_true = np.array([0, 0, 1, 1])
36
36
  >>> labels_pred = np.array([0, 0, 0, 1])
37
- >>> get_accuracy_score(labels_true, labels_pred)
37
+ >>> round(get_accuracy_score(labels_true, labels_pred), 2)
38
38
  0.75
39
39
  """
40
40
  check_vector_format(labels_true, labels_pred)
@@ -105,7 +105,7 @@ def get_f1_score(labels_true: np.ndarray, labels_pred: np.ndarray, return_precis
105
105
  >>> import numpy as np
106
106
  >>> labels_true = np.array([0, 0, 1, 1])
107
107
  >>> labels_pred = np.array([0, 0, 0, 1])
108
- >>> np.round(get_f1_score(labels_true, labels_pred), 2)
108
+ >>> round(get_f1_score(labels_true, labels_pred), 2)
109
109
  0.67
110
110
  """
111
111
  values = set(labels_true[labels_true >= 0]) | set(labels_pred[labels_pred >= 0])
@@ -158,7 +158,7 @@ def get_f1_scores(labels_true: np.ndarray, labels_pred: np.ndarray, return_preci
158
158
  mask = counts_pred > 0
159
159
  precisions[mask] = counts_correct[mask] / counts_pred[mask]
160
160
  f1_scores = np.zeros(n_labels)
161
- mask = (counts_true > 0) & (counts_pred > 0)
161
+ mask = (precisions > 0) & (recalls > 0)
162
162
  f1_scores[mask] = 2 / (1 / precisions[mask] + 1 / recalls[mask])
163
163
  if return_precision_recall:
164
164
  return f1_scores, precisions, recalls
@@ -188,7 +188,7 @@ def get_average_f1_score(labels_true: np.ndarray, labels_pred: np.ndarray, avera
188
188
  >>> import numpy as np
189
189
  >>> labels_true = np.array([0, 0, 1, 1])
190
190
  >>> labels_pred = np.array([0, 0, 0, 1])
191
- >>> np.round(get_average_f1_score(labels_true, labels_pred), 2)
191
+ >>> round(get_average_f1_score(labels_true, labels_pred), 2)
192
192
  0.73
193
193
  """
194
194
  if average == 'micro':
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  # -*- coding: utf-8 -*-
3
3
  """
4
- Created on March 2020
4
+ Created in March 2020
5
5
  @author: Nathan de Lara <nathan.delara@polytechnique.org>
6
6
  """
7
7
  from typing import Optional
@@ -17,9 +17,9 @@ class PageRankClassifier(RankClassifier):
17
17
 
18
18
  Parameters
19
19
  ----------
20
- damping_factor:
20
+ damping_factor: float
21
21
  Probability to continue the random walk.
22
- solver : :obj:`str`
22
+ solver : str
23
23
  Which solver to use: 'piteration', 'diteration', 'bicgstab', 'lanczos'.
24
24
  n_iter : int
25
25
  Number of iterations for some solvers such as ``'piteration'`` or ``'diteration'``.
@@ -29,13 +29,17 @@ class PageRankClassifier(RankClassifier):
29
29
  Attributes
30
30
  ----------
31
31
  labels_ : np.ndarray, shape (n_labels,)
32
- Label of each node.
32
+ Labels of nodes.
33
33
  probs_ : sparse.csr_matrix, shape (n_row, n_labels)
34
34
  Probability distribution over labels.
35
- labels_row_, labels_col_ : np.ndarray
36
- Labels of rows and columns, for bipartite graphs.
37
- probs_row_, probs_col_ : sparse.csr_matrix, shape (n_row, n_labels)
38
- Probability distributions over labels for rows and columns (for bipartite graphs).
35
+ labels_row_ : np.ndarray
36
+ Labels of rows, for bipartite graphs.
37
+ labels_col_ : np.ndarray
38
+ Labels of columns, for bipartite graphs.
39
+ probs_row_ : sparse.csr_matrix, shape (n_row, n_labels)
40
+ Probability distributions over labels of rows, for bipartite graphs.
41
+ probs_col_ : sparse.csr_matrix, shape (n_col, n_labels)
42
+ Probability distributions over labels of columns, for bipartite graphs.
39
43
 
40
44
  Example
41
45
  -------