scikit-network 0.30.0__cp39-cp39-macosx_11_0_arm64.whl → 0.32.1__cp39-cp39-macosx_11_0_arm64.whl

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 (174) hide show
  1. {scikit_network-0.30.0.dist-info → scikit_network-0.32.1.dist-info}/AUTHORS.rst +3 -0
  2. {scikit_network-0.30.0.dist-info → scikit_network-0.32.1.dist-info}/METADATA +31 -3
  3. scikit_network-0.32.1.dist-info/RECORD +216 -0
  4. {scikit_network-0.30.0.dist-info → scikit_network-0.32.1.dist-info}/WHEEL +1 -1
  5. sknetwork/__init__.py +1 -1
  6. sknetwork/base.py +67 -0
  7. sknetwork/classification/base.py +24 -24
  8. sknetwork/classification/base_rank.py +17 -25
  9. sknetwork/classification/diffusion.py +35 -35
  10. sknetwork/classification/knn.py +24 -21
  11. sknetwork/classification/metrics.py +1 -1
  12. sknetwork/classification/pagerank.py +10 -10
  13. sknetwork/classification/propagation.py +23 -20
  14. sknetwork/classification/tests/test_diffusion.py +13 -3
  15. sknetwork/classification/vote.cpython-39-darwin.so +0 -0
  16. sknetwork/classification/vote.pyx +1 -3
  17. sknetwork/clustering/__init__.py +3 -1
  18. sknetwork/clustering/base.py +36 -40
  19. sknetwork/clustering/kcenters.py +253 -0
  20. sknetwork/clustering/leiden.py +241 -0
  21. sknetwork/clustering/leiden_core.cpython-39-darwin.so +0 -0
  22. sknetwork/clustering/leiden_core.pyx +124 -0
  23. sknetwork/clustering/louvain.py +133 -102
  24. sknetwork/clustering/louvain_core.cpython-39-darwin.so +0 -0
  25. sknetwork/clustering/louvain_core.pyx +86 -96
  26. sknetwork/clustering/postprocess.py +2 -2
  27. sknetwork/clustering/propagation_clustering.py +15 -19
  28. sknetwork/clustering/tests/test_API.py +8 -4
  29. sknetwork/clustering/tests/test_kcenters.py +92 -0
  30. sknetwork/clustering/tests/test_leiden.py +34 -0
  31. sknetwork/clustering/tests/test_louvain.py +3 -4
  32. sknetwork/data/__init__.py +2 -1
  33. sknetwork/data/base.py +28 -0
  34. sknetwork/data/load.py +38 -37
  35. sknetwork/data/models.py +18 -18
  36. sknetwork/data/parse.py +54 -33
  37. sknetwork/data/test_graphs.py +2 -2
  38. sknetwork/data/tests/test_API.py +1 -1
  39. sknetwork/data/tests/test_base.py +14 -0
  40. sknetwork/data/tests/test_load.py +1 -1
  41. sknetwork/data/tests/test_parse.py +9 -12
  42. sknetwork/data/tests/test_test_graphs.py +1 -2
  43. sknetwork/data/toy_graphs.py +18 -18
  44. sknetwork/embedding/__init__.py +0 -1
  45. sknetwork/embedding/base.py +21 -20
  46. sknetwork/embedding/force_atlas.py +3 -2
  47. sknetwork/embedding/louvain_embedding.py +2 -2
  48. sknetwork/embedding/random_projection.py +5 -3
  49. sknetwork/embedding/spectral.py +0 -73
  50. sknetwork/embedding/tests/test_API.py +4 -28
  51. sknetwork/embedding/tests/test_louvain_embedding.py +4 -9
  52. sknetwork/embedding/tests/test_random_projection.py +2 -2
  53. sknetwork/embedding/tests/test_spectral.py +5 -8
  54. sknetwork/embedding/tests/test_svd.py +1 -1
  55. sknetwork/gnn/base.py +4 -4
  56. sknetwork/gnn/base_layer.py +3 -3
  57. sknetwork/gnn/gnn_classifier.py +45 -89
  58. sknetwork/gnn/layer.py +1 -1
  59. sknetwork/gnn/loss.py +1 -1
  60. sknetwork/gnn/optimizer.py +4 -3
  61. sknetwork/gnn/tests/test_base_layer.py +4 -4
  62. sknetwork/gnn/tests/test_gnn_classifier.py +12 -35
  63. sknetwork/gnn/utils.py +8 -8
  64. sknetwork/hierarchy/base.py +29 -2
  65. sknetwork/hierarchy/louvain_hierarchy.py +45 -41
  66. sknetwork/hierarchy/paris.cpython-39-darwin.so +0 -0
  67. sknetwork/hierarchy/paris.pyx +7 -9
  68. sknetwork/hierarchy/postprocess.py +16 -16
  69. sknetwork/hierarchy/tests/test_API.py +1 -1
  70. sknetwork/hierarchy/tests/test_algos.py +5 -0
  71. sknetwork/hierarchy/tests/test_metrics.py +1 -1
  72. sknetwork/linalg/__init__.py +1 -1
  73. sknetwork/linalg/diteration.cpython-39-darwin.so +0 -0
  74. sknetwork/linalg/diteration.pyx +0 -2
  75. sknetwork/linalg/eig_solver.py +1 -1
  76. sknetwork/linalg/{normalization.py → normalizer.py} +18 -15
  77. sknetwork/linalg/operators.py +1 -1
  78. sknetwork/linalg/ppr_solver.py +1 -1
  79. sknetwork/linalg/push.cpython-39-darwin.so +0 -0
  80. sknetwork/linalg/push.pyx +0 -2
  81. sknetwork/linalg/svd_solver.py +1 -1
  82. sknetwork/linalg/tests/test_normalization.py +3 -7
  83. sknetwork/linalg/tests/test_operators.py +4 -8
  84. sknetwork/linalg/tests/test_ppr.py +1 -1
  85. sknetwork/linkpred/base.py +13 -2
  86. sknetwork/linkpred/nn.py +6 -6
  87. sknetwork/log.py +19 -0
  88. sknetwork/path/__init__.py +4 -3
  89. sknetwork/path/dag.py +54 -0
  90. sknetwork/path/distances.py +98 -0
  91. sknetwork/path/search.py +13 -47
  92. sknetwork/path/shortest_path.py +37 -162
  93. sknetwork/path/tests/test_dag.py +37 -0
  94. sknetwork/path/tests/test_distances.py +62 -0
  95. sknetwork/path/tests/test_search.py +26 -11
  96. sknetwork/path/tests/test_shortest_path.py +31 -36
  97. sknetwork/ranking/__init__.py +0 -1
  98. sknetwork/ranking/base.py +13 -8
  99. sknetwork/ranking/betweenness.cpython-39-darwin.so +0 -0
  100. sknetwork/ranking/betweenness.pyx +0 -2
  101. sknetwork/ranking/closeness.py +7 -10
  102. sknetwork/ranking/pagerank.py +14 -14
  103. sknetwork/ranking/postprocess.py +12 -3
  104. sknetwork/ranking/tests/test_API.py +2 -4
  105. sknetwork/ranking/tests/test_betweenness.py +3 -3
  106. sknetwork/ranking/tests/test_closeness.py +3 -7
  107. sknetwork/ranking/tests/test_pagerank.py +11 -5
  108. sknetwork/ranking/tests/test_postprocess.py +5 -0
  109. sknetwork/regression/base.py +19 -2
  110. sknetwork/regression/diffusion.py +24 -10
  111. sknetwork/regression/tests/test_diffusion.py +8 -0
  112. sknetwork/test_base.py +35 -0
  113. sknetwork/test_log.py +15 -0
  114. sknetwork/topology/__init__.py +7 -8
  115. sknetwork/topology/cliques.cpython-39-darwin.so +0 -0
  116. sknetwork/topology/cliques.pyx +149 -0
  117. sknetwork/topology/core.cpython-39-darwin.so +0 -0
  118. sknetwork/topology/core.pyx +90 -0
  119. sknetwork/topology/cycles.py +243 -0
  120. sknetwork/topology/minheap.cpython-39-darwin.so +0 -0
  121. sknetwork/{utils → topology}/minheap.pxd +1 -3
  122. sknetwork/{utils → topology}/minheap.pyx +1 -3
  123. sknetwork/topology/structure.py +3 -43
  124. sknetwork/topology/tests/test_cliques.py +11 -11
  125. sknetwork/topology/tests/test_core.py +19 -0
  126. sknetwork/topology/tests/test_cycles.py +65 -0
  127. sknetwork/topology/tests/test_structure.py +2 -16
  128. sknetwork/topology/tests/test_triangles.py +11 -15
  129. sknetwork/topology/tests/test_wl.py +72 -0
  130. sknetwork/topology/triangles.cpython-39-darwin.so +0 -0
  131. sknetwork/topology/triangles.pyx +74 -89
  132. sknetwork/topology/weisfeiler_lehman.py +56 -86
  133. sknetwork/topology/weisfeiler_lehman_core.cpython-39-darwin.so +0 -0
  134. sknetwork/topology/weisfeiler_lehman_core.pyx +0 -2
  135. sknetwork/utils/__init__.py +1 -31
  136. sknetwork/utils/check.py +2 -2
  137. sknetwork/utils/format.py +5 -3
  138. sknetwork/utils/membership.py +2 -2
  139. sknetwork/utils/tests/test_check.py +3 -3
  140. sknetwork/utils/tests/test_format.py +3 -1
  141. sknetwork/utils/values.py +1 -1
  142. sknetwork/visualization/__init__.py +2 -2
  143. sknetwork/visualization/dendrograms.py +55 -7
  144. sknetwork/visualization/graphs.py +292 -72
  145. sknetwork/visualization/tests/test_dendrograms.py +9 -9
  146. sknetwork/visualization/tests/test_graphs.py +71 -62
  147. scikit_network-0.30.0.dist-info/RECORD +0 -215
  148. sknetwork/embedding/louvain_hierarchy.py +0 -142
  149. sknetwork/embedding/tests/test_louvain_hierarchy.py +0 -19
  150. sknetwork/path/metrics.py +0 -148
  151. sknetwork/path/tests/test_metrics.py +0 -29
  152. sknetwork/ranking/harmonic.py +0 -82
  153. sknetwork/topology/dag.py +0 -74
  154. sknetwork/topology/dag_core.cpython-39-darwin.so +0 -0
  155. sknetwork/topology/dag_core.pyx +0 -38
  156. sknetwork/topology/kcliques.cpython-39-darwin.so +0 -0
  157. sknetwork/topology/kcliques.pyx +0 -193
  158. sknetwork/topology/kcore.cpython-39-darwin.so +0 -0
  159. sknetwork/topology/kcore.pyx +0 -120
  160. sknetwork/topology/tests/test_cores.py +0 -21
  161. sknetwork/topology/tests/test_dag.py +0 -26
  162. sknetwork/topology/tests/test_wl_coloring.py +0 -49
  163. sknetwork/topology/tests/test_wl_kernel.py +0 -31
  164. sknetwork/utils/base.py +0 -35
  165. sknetwork/utils/minheap.cpython-39-darwin.so +0 -0
  166. sknetwork/utils/simplex.py +0 -140
  167. sknetwork/utils/tests/test_base.py +0 -28
  168. sknetwork/utils/tests/test_bunch.py +0 -16
  169. sknetwork/utils/tests/test_projection_simplex.py +0 -33
  170. sknetwork/utils/tests/test_verbose.py +0 -15
  171. sknetwork/utils/verbose.py +0 -37
  172. {scikit_network-0.30.0.dist-info → scikit_network-0.32.1.dist-info}/LICENSE +0 -0
  173. {scikit_network-0.30.0.dist-info → scikit_network-0.32.1.dist-info}/top_level.txt +0 -0
  174. /sknetwork/{utils → data}/timeout.py +0 -0
@@ -39,3 +39,6 @@ Contributors
39
39
  * Flávio Juvenal
40
40
  * Wenzhuo Zhao
41
41
  * Henry Carscadden
42
+ * Yiwen Peng
43
+ * Ahmed Zaiou
44
+ * Laurène David
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: scikit-network
3
- Version: 0.30.0
3
+ Version: 0.32.1
4
4
  Summary: Graph algorithms
5
5
  Home-page: https://github.com/sknetwork-team/scikit-network
6
6
  Author: Scikit-network team
@@ -18,12 +18,13 @@ Classifier: Programming Language :: Cython
18
18
  Classifier: Programming Language :: Python :: 3.8
19
19
  Classifier: Programming Language :: Python :: 3.9
20
20
  Classifier: Programming Language :: Python :: 3.10
21
+ Classifier: Programming Language :: Python :: 3.11
21
22
  Requires-Python: >=3.8
22
23
  Description-Content-Type: text/x-rst
23
24
  License-File: LICENSE
24
25
  License-File: AUTHORS.rst
25
- Requires-Dist: numpy (>=1.22.4)
26
- Requires-Dist: scipy (>=1.7.3)
26
+ Requires-Dist: numpy >=1.22.4
27
+ Requires-Dist: scipy >=1.7.3
27
28
 
28
29
  .. image:: https://perso.telecom-paristech.fr/bonald/logo_sknetwork.png
29
30
  :align: right
@@ -117,6 +118,33 @@ the `Journal of Machine Learning Research <https://jmlr.org>`_:
117
118
  History
118
119
  =======
119
120
 
121
+ 0.32.1 (2024-04-02)
122
+ -------------------
123
+
124
+ * Fix documentation
125
+ * Fix wheel upload
126
+
127
+ 0.32.0 (2024-03-29)
128
+ -------------------
129
+
130
+ * Add Leiden clustering algorithm
131
+ * Add k-center clustering algorithm
132
+ * Add functions to detect and break cycles
133
+ * Add damping factor in diffusion
134
+ * Fix F1 scores
135
+ * Remove hierarchical Louvain embedding
136
+ * Get clustering coefficient for directed graphs
137
+
138
+ 0.31.0 (2023-05-22)
139
+ -------------------
140
+
141
+ * Add Python 3.11
142
+ * Add set_param / get_param to algorithms, suggested by Franz Kiraly (#557)
143
+ * Compute shortest paths by matrix-vector multiplications
144
+ * Make tools on topology (cliques, code-decomposition, etc.) as functions
145
+ * Rename parameter membership -> probs for soft classification / clustering
146
+ * Add softmax to classification by diffusion
147
+
120
148
  0.30.0 (2023-04-12)
121
149
  -------------------
122
150
 
@@ -0,0 +1,216 @@
1
+ scikit_network-0.32.1.dist-info/RECORD,,
2
+ scikit_network-0.32.1.dist-info/LICENSE,sha256=zKbJMpbSKgGEUaNr_fKgvJrvw_3W4gnJs5XdLCK5Sxo,1622
3
+ scikit_network-0.32.1.dist-info/WHEEL,sha256=JlTVwpqUzP01iqSUKAL8LrwscoYFkCFkZ28SRV9G62c,108
4
+ scikit_network-0.32.1.dist-info/AUTHORS.rst,sha256=OZUa1KqaPu_waik7LZVTdyXcvmQWkD3M3HBDVGEtkG0,924
5
+ scikit_network-0.32.1.dist-info/top_level.txt,sha256=fkwspWQ9B3csqb5ENEOoVciRY6XftnMuz4MvTDQeSsg,10
6
+ scikit_network-0.32.1.dist-info/METADATA,sha256=9bZ9qVhnKisHTj6oMLI6AyDg6uHJReQGXGVFbA8Du_E,14392
7
+ sknetwork/log.py,sha256=ORInAVh_cWIfxwaFWSblSRxwT-jG05XPRnYTTAHSKy4,443
8
+ sknetwork/__init__.py,sha256=nClqZuN1bFjz8awU3Qpm8dd3s4apgBBW40r84eAmItg,533
9
+ sknetwork/test_log.py,sha256=V4t6Ggi_fh8px5Iq7CDLlJvbXfz24macQ43Ss0tPb5I,319
10
+ sknetwork/test_base.py,sha256=PB_kJ7cNvhBXmlL-KzyLu2hf6mG7b1OQY759aYplW4k,912
11
+ sknetwork/sknetwork.py,sha256=VYoI-gwqwBKPx84cA0KnYDRofrgIXs8xtASD2nu5fE0,44
12
+ sknetwork/base.py,sha256=XJJ6MicVcSiQBWQ9fYlmUJYkXq0PRldQzExhZKuaFBo,1951
13
+ sknetwork/classification/metrics.py,sha256=kn6rkcn6r9jOsF7_bhP4SX20hrgydiA2UfCTdM12dKA,6802
14
+ sknetwork/classification/vote.pyx,sha256=Bbf74XCPH8uYDP-SrXRaA7k6Ax2x-wDzpbHMeg9le7A,1584
15
+ sknetwork/classification/diffusion.py,sha256=zE3_TRi05GgQU9TqMSuMKieVR1srnZONnpGLCUrnHWQ,5537
16
+ sknetwork/classification/__init__.py,sha256=yVv7wSuUfNLxeNBF-AhWCJys3C-XatPtMzi1wyp9Bz4,475
17
+ sknetwork/classification/base_rank.py,sha256=RGElYD6PuP4nhnenNnzpOiBojs49Afg5ahjBFEi566I,4522
18
+ sknetwork/classification/propagation.py,sha256=TqTNqnuZjelX3A7Ghw3M6k8u9fOh-Ag_eBh6FN0f5gI,5754
19
+ sknetwork/classification/vote.cpython-39-darwin.so,sha256=kPWHTuHuPWtLYwSwooufiPWZqrXGH4UmPzlAvGC6Qqg,221430
20
+ sknetwork/classification/pagerank.py,sha256=CBUeCqZisr6s5lh3VXYWA6rbiPdLyNzuSMbjazy80eA,2586
21
+ sknetwork/classification/base.py,sha256=WS-QHh4553Dr1VwJqjggSqO6hHFIAs50oPah_L23eFo,4290
22
+ sknetwork/classification/knn.py,sha256=7tiXPNOzRLPCAoELXWtqXdnPUIIDqtGdku3r1KGiE8Q,5306
23
+ sknetwork/classification/tests/test_metrics.py,sha256=eBs-5uAEz2s8gukMyfhQ07GSFoyvxtsslLuc6VgUxBU,2303
24
+ sknetwork/classification/tests/__init__.py,sha256=sy9uRiPhYG2i7uqM3P07-VUf4UcZEHeOoH9BvKCpU3s,31
25
+ sknetwork/classification/tests/test_pagerank.py,sha256=5IJpYqnz31cWT0iXjTdo1xE8Kfj3YTK0cSZnnTlyJBs,620
26
+ sknetwork/classification/tests/test_diffusion.py,sha256=tp9qNYBcaI9T1HCC6bqMpG_-eM-na-fGNeGDzMZTu2A,3183
27
+ sknetwork/classification/tests/test_knn.py,sha256=sl5kxsaca3GUTvfdx6B9BRJ1SAdoDvxFOg9VyoA20IU,784
28
+ sknetwork/classification/tests/test_API.py,sha256=FA1d0NQz3vaNVVeFbhEljPe0fD_ryRwVP4G1hdv-u_s,1124
29
+ sknetwork/classification/tests/test_propagation.py,sha256=m0Jyq59k3taoikyBxcZGILzG7dWQV3SGE45MPm0RPao,850
30
+ sknetwork/visualization/dendrograms.py,sha256=m4FbBfvJUW_gXccZWF8OWxAsbhsEcKa1fXNNCp_y4MA,9901
31
+ sknetwork/visualization/__init__.py,sha256=8rLiR13WHSWLsEVTTL6lzOZms0LZf-ZujBqOI5VnKxk,216
32
+ sknetwork/visualization/graphs.py,sha256=7iNHW3NJ7kxLw2y3SoEY_rmyCfmxLPmi0tCJ2dkS3q0,41175
33
+ sknetwork/visualization/colors.py,sha256=DjcXt9aMgLan7bRg7TZI8m_8SLWQOZ-g2HoguB1-3qA,2509
34
+ sknetwork/visualization/tests/test_graphs.py,sha256=g2YPJn9m8wD-UHZ_BL37xuJqE7ygOx3EztKLVVqphYk,9421
35
+ sknetwork/visualization/tests/__init__.py,sha256=yOVrqUD9UuI_HdYuqRP5PS7QhS-pO4RE_Ls5PLiIC_w,30
36
+ sknetwork/visualization/tests/test_dendrograms.py,sha256=UuS3VZ5XnV1u5BtW-QKbFv0wavllQpbgtsOIe5XvTlg,2466
37
+ sknetwork/topology/cliques.cpython-39-darwin.so,sha256=VvRmLRNoGIC7IKAedR1iiSLOP-VpazjJqmohLXMdcmg,259481
38
+ sknetwork/topology/weisfeiler_lehman_core.cpython-39-darwin.so,sha256=rOGhEJTyNOQGp21ye6pHyOdzTcl0ZndV_6SUW5Q8hwI,222312
39
+ sknetwork/topology/cliques.pyx,sha256=BuezL9-zJOicL1zffkpcf8uIEgqhik6dgK_agXX4gaU,4510
40
+ sknetwork/topology/minheap.pyx,sha256=iFWpXPYSAmWjYphYByAM6auUj1XHly6QovZvuy2Lpyc,3310
41
+ sknetwork/topology/weisfeiler_lehman_core.pyx,sha256=fi0rRrXHVZuIQYzPDcPCamCRQLKquchjV3N9dNuQ1Pk,3034
42
+ sknetwork/topology/minheap.cpython-39-darwin.so,sha256=sS4ypNmkgI97tfdnIelksc5mWly0BsSjdO30y3VDzx4,204233
43
+ sknetwork/topology/__init__.py,sha256=T2W2cWwcUdhfA86VuZAZqksbrgct4hiyp0HuizEnLg4,534
44
+ sknetwork/topology/triangles.cpython-39-darwin.so,sha256=kU3kvsnMRm-2F7KtMFJaoJ-F5qCM5HAdWya0pYYqSjE,108667
45
+ sknetwork/topology/cycles.py,sha256=EV2UMDktEGdJxEmAZyyjBMttJ6DqYvvfZ6mqwIQqFu0,9003
46
+ sknetwork/topology/weisfeiler_lehman.py,sha256=ACJDAmZbwDrZAvO-LsHnRaef-8KX7esM1LxVUglXtLw,4308
47
+ sknetwork/topology/core.cpython-39-darwin.so,sha256=xxfohvfnq77ALfEXwQXdH9tdOBLa0Ay0uu7wUAMdLFQ,218182
48
+ sknetwork/topology/minheap.pxd,sha256=Y_oRh8H-sNZYAWv0XM9T-ZLzYBhb5TrBM4VjlH-ZqPQ,564
49
+ sknetwork/topology/structure.py,sha256=CDfN7SL70wTHm2HPfqd7ncsZEaV1SQO3tJKYl1CdtNI,7285
50
+ sknetwork/topology/triangles.pyx,sha256=JOkA9k0CQTsT7zdPaEoW7-PdHYuoXHsB0XSuPKFLJSI,4349
51
+ sknetwork/topology/core.pyx,sha256=HwGbC84p9F9fkEw8ouNNMQtlYrAoEWhQS5hU9Cf1h94,2465
52
+ sknetwork/topology/tests/test_cycles.py,sha256=KZzMKS5ILfC_J0Fj5MFlEOL7Z9nOnlRfo4TnGdXEPWY,3150
53
+ sknetwork/topology/tests/test_structure.py,sha256=CzcZ1LxV-mI_buxz6LcTeCy3h5ofMLfOu2HUHwNSMi8,3948
54
+ sknetwork/topology/tests/test_wl.py,sha256=EJY_4xTi_-qzFsqZJkgnwLteoakdkpRAczzdMCGeXe0,2218
55
+ sknetwork/topology/tests/test_core.py,sha256=Zh9IYHGfqDqIlLycucLzqZbHvYmU-IB-J03-jlikPcI,551
56
+ sknetwork/topology/tests/__init__.py,sha256=9lKrPX4BnSJbK-VlDi9TsmAgDwqF3H423KhJ1u1Uaos,25
57
+ sknetwork/topology/tests/test_triangles.py,sha256=9g3nml3TNOiIFHLJDih5PTxWunDJemmpLQy2tmoQw4Y,1275
58
+ sknetwork/topology/tests/test_cliques.py,sha256=t97pKDMxT9RC-_YsgY-c8tQxrekyAE6i2_guvxAYHhQ,838
59
+ sknetwork/ranking/postprocess.py,sha256=-3wqBPvTM7jDdfTytINEXxM2eugJjbCZRLiLy9pkmac,919
60
+ sknetwork/ranking/__init__.py,sha256=UeYw8y0HFoBnPziqnVYXSt8jqFtkDgkCCMPhYTEIaF0,348
61
+ sknetwork/ranking/closeness.py,sha256=pETMD8uaXfADZhmzVaH4YIGX57S2vvhzVInONaAwBUM,2840
62
+ sknetwork/ranking/katz.py,sha256=uPyXkEL73_6MS4dP5XTSVSIrD5h5QJipVTVEa0L_y48,2535
63
+ sknetwork/ranking/hits.py,sha256=L39a9Ze3ITUbikmNhA_Lx-V5s_RQr0XnNkOsIgG8m98,2761
64
+ sknetwork/ranking/betweenness.cpython-39-darwin.so,sha256=bpXeEr4fNosP4-fK_S3IW0lCeW8XK2h4xr7Bi_iAwf0,130157
65
+ sknetwork/ranking/pagerank.py,sha256=Qt2SOUoLO76JVDnT4-x-b-hah9IlaHECsYNu45AnpY8,4749
66
+ sknetwork/ranking/base.py,sha256=Jo9LBK3TfXiYdxYqSmfeVC8O2D6fA5L-SRzQh3eqtnA,1512
67
+ sknetwork/ranking/betweenness.pyx,sha256=Pq9EqOHV0P8TDN_w9siP3h8HyechaAErysNwz0JT0ow,3087
68
+ sknetwork/ranking/tests/test_postprocess.py,sha256=jPLJKJYEltFpY2uct0JyJEkD1haOyNU8h_1KwiLMgZM,703
69
+ sknetwork/ranking/tests/test_closeness.py,sha256=ttBC8L_J1YDLCWhTIPhSFxu8jWuOWl_vupHFFaA_NP8,823
70
+ sknetwork/ranking/tests/__init__.py,sha256=ZVL3kCN-qV5ThJU58iaMvJKSIkZ7ke7liLtLwI4TCHY,24
71
+ sknetwork/ranking/tests/test_pagerank.py,sha256=5WHev0-d5nTOg6AEzIZyCmWSieTO3YNLNO2kB6RTYWE,2243
72
+ sknetwork/ranking/tests/test_API.py,sha256=PZ4Q5X1WT1HSAojZX72fUm4o9Y0PwocewJEoC1pfgMo,1003
73
+ sknetwork/ranking/tests/test_betweenness.py,sha256=8XA1ycLQQ7-Cm3CBfkcSDQOvD6xagAIP1--mPe9VFzo,1135
74
+ sknetwork/ranking/tests/test_hits.py,sha256=zStzrWZ-pv2Nsd-pB282FgW3KAn1TyKjz_l85tJaPJ0,491
75
+ sknetwork/linalg/diteration.pyx,sha256=gk9W6SwIxXgmjQujXWBUIoM_OwevjE3jTzFrIEkGnWI,1384
76
+ sknetwork/linalg/diteration.cpython-39-darwin.so,sha256=X3o6gZkJXlm3_VQcJ48zC8a1Y66aqUZt7PCmolHuPzw,217100
77
+ sknetwork/linalg/__init__.py,sha256=awBDY2wWiO40L5eED3H8K1BM8qtHz7aQRv1p3PcSK94,533
78
+ sknetwork/linalg/laplacian.py,sha256=_gQr8YLqMUtK_IMNgvJoQX7-uODVlvCVmc-oTsgw7MA,401
79
+ sknetwork/linalg/eig_solver.py,sha256=yq_prP5p1jbALby69wkzzH0vYKc1btmRQoiVUtTh-eA,2700
80
+ sknetwork/linalg/push.pyx,sha256=caxCZa5h9zsHhxJgDBaaetqpB0wUbFLdOUwHwj0q_t0,2358
81
+ sknetwork/linalg/ppr_solver.py,sha256=mQkCnik-vvv_oFa9n1vtMzxgvi78qW-QQONdcmC9CXA,6533
82
+ sknetwork/linalg/sparse_lowrank.py,sha256=LUhbqa01p51SYhoIb2Dmx2b9fMc-iOu69CAVHscR2Xs,5028
83
+ sknetwork/linalg/basics.py,sha256=8AFph_1G5SZP_24jrIv6qIWooO0UMglL4jMgx3ZdYIQ,1142
84
+ sknetwork/linalg/normalizer.py,sha256=kOFDPPdiGqG-KcWNiRwbS_y_nmw5fTKYTvuj_x8yBd0,2473
85
+ sknetwork/linalg/operators.py,sha256=fxitao4UYW4Hq7B258T_cAq2H3R2FN1-mwdy138w8fE,7432
86
+ sknetwork/linalg/polynome.py,sha256=_dP9Nu_6XCV0-WEQJ7E5nG6pxZWMtbj-LREu0vtxeWk,2125
87
+ sknetwork/linalg/push.cpython-39-darwin.so,sha256=CJUfmQFNE13Rz7TDoJFc8qDj-JTxHMpXz-KyklFhoTc,237830
88
+ sknetwork/linalg/svd_solver.py,sha256=vhcXwCsOar0cYDPZo7IF_ulRDsGGvZzePIeSpSCVgLk,2681
89
+ sknetwork/linalg/tests/test_svd.py,sha256=eLRmSiHt8uWzknImZtRSZmJC8OX0YDgUt9-8PePc3OA,1285
90
+ sknetwork/linalg/tests/test_operators.py,sha256=l_pBF7JZhjUSNfTReDX-lN2nA7HU7mkz7dznJ8I6lrY,2919
91
+ sknetwork/linalg/tests/__init__.py,sha256=l6yw2Ls1ndhVVcSYc059kAjQ2-VoDGZXxnBaglFZ4zo,23
92
+ sknetwork/linalg/tests/test_sparse_lowrank.py,sha256=LEDo6DChembm3xQ-vjeqqZi0ugWx7piucR9_LdDecrI,2276
93
+ sknetwork/linalg/tests/test_polynome.py,sha256=VYru9RlUIIN6dKNOiitSElPQqIxWI7mqx3dR5zd9Nv0,977
94
+ sknetwork/linalg/tests/test_ppr.py,sha256=Bh1n7W3We2N8u1RIWPyE5QQGE7esnNoUOLLRCL8Zye4,2093
95
+ sknetwork/linalg/tests/test_laplacian.py,sha256=B6UhJOmYUdNlXwNoxLLtb--nv9mx96Orl-W1Vl6PLyM,434
96
+ sknetwork/linalg/tests/test_eig.py,sha256=lUAgo4UfWuuSG5DhSk5SIT7ToLDgPG-5JCgmOe_M7Vw,1504
97
+ sknetwork/linalg/tests/test_normalization.py,sha256=nASuMYxKcsWj3gk9DF5uPKYOw93oJ-UQUWi99Fw3kmE,887
98
+ sknetwork/hierarchy/metrics.py,sha256=_wYGKx_VDE_sfbg-uUEFMhOjSLFqzC8rFHjJo1hdVL8,8046
99
+ sknetwork/hierarchy/paris.pyx,sha256=10Fu048FPklcgYiLmMKWpRW87UY04ubU0NpjESTOsLA,11683
100
+ sknetwork/hierarchy/postprocess.py,sha256=d1Fll3eqDIjiMf1c5nGuKF6I0fN93elnglkp59LARGU,12072
101
+ sknetwork/hierarchy/__init__.py,sha256=YgE2eqnwS8Q2NWP9pNY-M1bpdxRn5-C-CdykydNW7iM,412
102
+ sknetwork/hierarchy/paris.cpython-39-darwin.so,sha256=fcRT_hCJ1cNjrqCkbqAbLIY0HBhJe77-6nuYEZ0n9Nc,302807
103
+ sknetwork/hierarchy/louvain_hierarchy.py,sha256=YfwhhEe1eL7DBbs0t1-a-vdzFB2xA5LXh0VT9OL-jus,9558
104
+ sknetwork/hierarchy/base.py,sha256=MoxBiSsEJOq77YmXj_bpf4vUiPLSpQn8fnUX7YIqyd8,2693
105
+ sknetwork/hierarchy/tests/test_postprocess.py,sha256=OSrWE0gT0AcPI4LKmUL-Blfg5ErxnjS3d4rPNnA63_Y,2209
106
+ sknetwork/hierarchy/tests/test_metrics.py,sha256=UydXtXgGud9MgTKT4l_j7BplKToO2cQKuoGvkBPirAw,3160
107
+ sknetwork/hierarchy/tests/__init__.py,sha256=l2HHDiDLpoTQlwzh1mtCyp6bS8RxBdJK2DP1FGiQJMY,26
108
+ sknetwork/hierarchy/tests/test_algos.py,sha256=xMt2xzAYEm6MuK-8OKOqBwZS89aJspX2tr7T6QMHz6E,1361
109
+ sknetwork/hierarchy/tests/test_API.py,sha256=tLF-jLsfM2OFqbyVHK1o9jXVW_1PbTkMcxkAXuGjMO8,720
110
+ sknetwork/path/distances.py,sha256=8NJeL14UpGudTFCgQJaNDOXs2-aSHLCl5LHXexF_xuQ,3568
111
+ sknetwork/path/dag.py,sha256=Se5LSgQi-RwA-nXbJ1l_upjKw_MNIckeT_dh3TYWl6w,1668
112
+ sknetwork/path/shortest_path.py,sha256=_trQS__X71HQOOBXu0QTlzfOgb2ydoy-KooIKjIkpvs,2450
113
+ sknetwork/path/__init__.py,sha256=OQ7dWwlncIIsPo5kQu2akUhk_m73vQuF17LaH0siqo4,222
114
+ sknetwork/path/search.py,sha256=__63FqXFqhNTSyTGYj4yYx8ZDoew0_uCHHWhJlrIRoA,776
115
+ sknetwork/path/tests/test_dag.py,sha256=EYyghTXbHRr1Ia-8KoXoyumIFD_6q6bZx5DDcaa-ODQ,938
116
+ sknetwork/path/tests/test_search.py,sha256=mStK4ZiN1hVdZr8Q9R78AFBouuA9RIhnQ4nwGrfCjCY,1199
117
+ sknetwork/path/tests/test_shortest_path.py,sha256=Uwq4CzzjnMV6VsTlzgKnn_GwqUr2Cc0kZTgFtv_UisQ,1382
118
+ sknetwork/path/tests/__init__.py,sha256=_COAjci7RJ_XtBDGwy5aOgZ9dPSQH3j7d6qMlLHs55o,28
119
+ sknetwork/path/tests/test_distances.py,sha256=zItygI9cLMrQonLhOubvorElU5qaZumFfjMethx4rDw,2695
120
+ sknetwork/embedding/random_projection.py,sha256=NuJoPHYLjdb8dUdKOwGr7Q6lGZBSPbwmMuuY6CRzgoI,5002
121
+ sknetwork/embedding/__init__.py,sha256=ASeieiOc46EuKMUArW3kt_WJbsLxUzz0BVYycmag5Pw,410
122
+ sknetwork/embedding/svd.py,sha256=0q6a2EwnbXGxzsDpmQu0HUS_9e_VwA0lMKqes2e-77I,14734
123
+ sknetwork/embedding/force_atlas.py,sha256=amYr0E08F8TDoIxjPx3lx35JFwEP41jc4KKed1PQeZs,7452
124
+ sknetwork/embedding/spring.py,sha256=5fyHQzmIp8gY9DdI-DFvMc37mjMb64bs22ZZZ9YFDXM,7151
125
+ sknetwork/embedding/spectral.py,sha256=ds91hH6JFBsfLcTS8QEz-gP5tZUcrrGqjfnL-xMIdU0,5548
126
+ sknetwork/embedding/louvain_embedding.py,sha256=QYKxrTNLEm69PS7D0YR_k3diZQKBt6PT1T6N3xPGrMU,6950
127
+ sknetwork/embedding/base.py,sha256=D-UkpCOTw_PAjs1YFyq7jdrn3Akx4yjl5nxN2iMnd0Q,2590
128
+ sknetwork/embedding/tests/test_spring.py,sha256=tanArc4vstNZ36CLr7S8uEVdXX0iP2K9UWKQLTcsPsQ,1643
129
+ sknetwork/embedding/tests/test_svd.py,sha256=Yg9qgSdPPZR4n_DYN5bXZMJLIEz1tny1rirsPL8ejQc,1195
130
+ sknetwork/embedding/tests/test_louvain_embedding.py,sha256=GtHU8vt4X8nNLLVol08Ot4NgbMcDzQEvWcm7qWbN_BA,825
131
+ sknetwork/embedding/tests/__init__.py,sha256=QkDQtTJReK7Ldp0Y4f5-tbTdcp224r1AF7jU26alSgQ,26
132
+ sknetwork/embedding/tests/test_API.py,sha256=2c0O8S0u0hF23iys7QLHJJOz2W79rHMeEO2OMDQbglk,1489
133
+ sknetwork/embedding/tests/test_force_atlas.py,sha256=-YM4HSF5Nvpm8e4SoCHiA2o7yAkm0h_ys7GRaJ1wloI,1120
134
+ sknetwork/embedding/tests/test_random_projection.py,sha256=2bUOCw66tUKP775pGPd5STj0UmRuwvBtI5CgY8HeHKI,1193
135
+ sknetwork/embedding/tests/test_spectral.py,sha256=CH-F8fM3cYoxhjpob1m7wZV-tEr8XFD6Lxa_bFsLv3A,3897
136
+ sknetwork/clustering/leiden_core.pyx,sha256=7HGdeX6iMnSs52Px44-__kN9JhHueaQUvCmrkIGTalg,4300
137
+ sknetwork/clustering/metrics.py,sha256=VJPgmB1OvxA0SOaIQIGyJDUP1cgWFElnfdVaQ2krYrg,3060
138
+ sknetwork/clustering/leiden.py,sha256=w0oUbQLR7zCMy4wXgDa7eN2K488jjGuTdOcgWG6Eb9A,9680
139
+ sknetwork/clustering/louvain_core.cpython-39-darwin.so,sha256=otNfDgzhINfcHpD3r4CtNmtxlDc9xcU5X53Z24Q7v8g,260542
140
+ sknetwork/clustering/postprocess.py,sha256=4hx5VTQmqS2Ld2P2kvXoyvVanXVg3bMA619IHS2jWHM,2039
141
+ sknetwork/clustering/__init__.py,sha256=Ab-rmioxlaMoghrzd1RMr-L4zyrqIM8XznqrjBPGE28,435
142
+ sknetwork/clustering/kcenters.py,sha256=RFEx35vPUm9a4mzCbDwv-PmePCsdQwbuKAeaRizBMxY,8689
143
+ sknetwork/clustering/louvain.py,sha256=1mGcmy_Fd97V6bDmZb2Aa4JziCusru-gFHv5Vdxfm_0,10791
144
+ sknetwork/clustering/leiden_core.cpython-39-darwin.so,sha256=N4gyhOAe5LaTx_ksmi673KCe1puRGieCvRHLwwsTBRc,261597
145
+ sknetwork/clustering/propagation_clustering.py,sha256=ABZZtyojkrXfzsMwEcxqphzHgFC5q8sECOyanvK9D3o,3781
146
+ sknetwork/clustering/louvain_core.pyx,sha256=pMqt7WukTkBOpjofmiXMYHqRX69mkquEMapDdoskiQM,4089
147
+ sknetwork/clustering/base.py,sha256=dCF4K3nbKY24kzFeDAy7Fp-b9jDBzEoG3jj1ozuu_W8,5932
148
+ sknetwork/clustering/tests/test_postprocess.py,sha256=WSmAlqB-6Nw3eoL3NaOyNlpPr7GVnNnllkPVdyE9rXI,1378
149
+ sknetwork/clustering/tests/test_kcenters.py,sha256=3euzkt79tPZul5rP_HuJZHXydUdqT-Xk5N01qWOuaks,3477
150
+ sknetwork/clustering/tests/test_metrics.py,sha256=fbVYg2s8DXQdiYHUNuVjFMtEJg4od1Vej25mgHhGDu0,1818
151
+ sknetwork/clustering/tests/__init__.py,sha256=Ta0XKY7pklRvHyUY3Jlow3A2V4REa5geZG74xPz80Tc,27
152
+ sknetwork/clustering/tests/test_leiden.py,sha256=3KSXvxUP9H4tCJQXUfWt-45-ltyD0FrVgYjXDvRN-yQ,1155
153
+ sknetwork/clustering/tests/test_louvain.py,sha256=6eQPoKodZLBafNgpX1_zBzPzGY5w7QKzWsLuoEVZEaE,4678
154
+ sknetwork/clustering/tests/test_API.py,sha256=Eez17EngcirVHVVoybClXS5314_Yz54JFzXldubEdgg,1528
155
+ sknetwork/linkpred/nn.py,sha256=tY-qYlp0j9WCvdoHkZ9EKzCD_GlDu7tQpKD7-aC20rE,4030
156
+ sknetwork/linkpred/__init__.py,sha256=pFtM52OhDK69ceeiRyH1MDse0EbD8fqyhOsWWih47gM,72
157
+ sknetwork/linkpred/base.py,sha256=aXgWqajDYjDE-YQcooI6j0qEByJxHQiQtSjmFiID3Qk,995
158
+ sknetwork/linkpred/tests/__init__.py,sha256=05sK8Ihh9Gi2_uobPC_ErMVE4KOt0761NzzV_vJh15U,32
159
+ sknetwork/linkpred/tests/test_nn.py,sha256=T79txY2DlPgnI4JqzC88EcwCobJiM9P9v_5_ZvBTDeU,983
160
+ sknetwork/utils/values.py,sha256=UK6wck_frtPz0Q6hRugpUMNg6AARcBQ0_MIlG5CyAkc,2510
161
+ sknetwork/utils/check.py,sha256=tNOelam8GGdVjMzmk-7otNTyFBgJNKwq1z-zWmHOb9Y,12940
162
+ sknetwork/utils/neighbors.py,sha256=XNqwPM_PPpf_x-YhjEMVZJDxmazrVw9Eky3hNv9IGz0,3351
163
+ sknetwork/utils/__init__.py,sha256=FX-906qqZsXt9Q2nZdd3JT4rM0Aj39bc2O0wDpp_q-0,329
164
+ sknetwork/utils/format.py,sha256=qAa5jmp_fkQBlVL4LW14N7rrMPNk3yMApNFLxREPuiU,8766
165
+ sknetwork/utils/membership.py,sha256=dG2xJTWEjRcxyKTs5A7DFyNhO50-7UKpBIaWFfmyH_M,2162
166
+ sknetwork/utils/tfidf.py,sha256=C1qZCwZSwypi-C_II9D7lkfyxsOFefiDopTO3pBEwkc,956
167
+ sknetwork/utils/tests/test_membership.py,sha256=y4BiaCHUw5c1dJPOSJA6vgkBQlPxQ2bepL7hDV1es5U,748
168
+ sknetwork/utils/tests/__init__.py,sha256=y7PVVv2Wiz1msA5jqKOuB5BbB4UzCmDZ-pml9hIQyjo,22
169
+ sknetwork/utils/tests/test_tfidf.py,sha256=X69sepETWH1po9YXFubppvZlLeGdflqxoNEBinihp3A,445
170
+ sknetwork/utils/tests/test_values.py,sha256=BswuHPma0xCxr4gVkrkfPdMaIW6gw6ylCd5MTseo7tw,2268
171
+ sknetwork/utils/tests/test_check.py,sha256=WOLQ7J4eM4YHsSxyBNU5yPquq-0dB5FyD_tttZ1RgsQ,6764
172
+ sknetwork/utils/tests/test_neighbors.py,sha256=vF697D0cTfx4Limcmbre5JkJcLi1rUX0tS_JviX11Zg,1426
173
+ sknetwork/utils/tests/test_format.py,sha256=xSvz_IbxNnei8IrEysIOi8YpX_a6edxVE41g_lSx1mk,2245
174
+ sknetwork/gnn/base_layer.py,sha256=o5CbTVXY7Y1_TyNEMkp7P2va2HLLIq_MgnOxZ7PGQmg,3948
175
+ sknetwork/gnn/base_activation.py,sha256=XogZDdhl3QDyADvWJhMTGSnVYsKPI3PDHPu89yPL1VI,2306
176
+ sknetwork/gnn/__init__.py,sha256=m2lkDJoJZocJ18scpArsUHuzePZ8Q-ue7D3yXQ5H_RM,519
177
+ sknetwork/gnn/loss.py,sha256=P0un3iqbnFLrBbYODznVAoU_J2qAZuqHAPLiae0LCtI,5162
178
+ sknetwork/gnn/activation.py,sha256=D7o4FdbDMrBa2PQrWrvplCf14QOSzZ67d9eWN9bHY-M,3560
179
+ sknetwork/gnn/neighbor_sampler.py,sha256=TXdMRFwiT8sOdl6-S-flQZ5Rjrx1hwTzFqqiR_8PHTQ,1864
180
+ sknetwork/gnn/utils.py,sha256=A0kuBe29Eg90cEzRAgw4YmnShnzoq6ai_-01IBAf63g,4349
181
+ sknetwork/gnn/gnn_classifier.py,sha256=wSZQXjRu9ou9cEqcOXPD4gY_vKOYeC8iWXj6j1-uFrM,12613
182
+ sknetwork/gnn/layer.py,sha256=i0XiAutNal9ImAGqMtSLVEq_QiqZoGAlAWwlSGrNY8Q,5526
183
+ sknetwork/gnn/optimizer.py,sha256=vsCgfPoJtYMWREnR4tBsfPb0Ed-rHR0poBr-75lE57s,5782
184
+ sknetwork/gnn/base.py,sha256=QZ_pNi2-edAUpu-2C93DWfooS_sHulO6HL6vK108lhc,5708
185
+ sknetwork/gnn/tests/test_optimizer.py,sha256=4NvHQf66cFKy500kA68IBVv_-_pf75Hqdbq2odhJMr4,1780
186
+ sknetwork/gnn/tests/test_utils.py,sha256=ExTZqAMT3joYU1RSQ-_d1YipysgnkLKePe7ZHuMoHeY,1843
187
+ sknetwork/gnn/tests/test_gnn_classifier.py,sha256=QRjXGJK2ghHtsGc9O-FwlKzG53IHocrWZuKTAVSFjFw,5743
188
+ sknetwork/gnn/tests/test_activation.py,sha256=HZdBaJ8P8LBJ-3_Typc8Qkvsho9gNSy1-CANEz8rQ-Q,2487
189
+ sknetwork/gnn/tests/test_layers.py,sha256=apPJGgMddw_-Qiw0OsTDL3cmMJ8GTMC08dLTmiYEWW8,3176
190
+ sknetwork/gnn/tests/__init__.py,sha256=SvFOB5nn_yN-JCaYFAtzesL0zU0OihQp0s0dOP1-MKE,20
191
+ sknetwork/gnn/tests/test_neigh_sampler.py,sha256=zc_6G3JhZvKrFLJAk2UJSOHZwN7sGojC8bXTCbmaUx4,698
192
+ sknetwork/gnn/tests/test_base_layer.py,sha256=1PXvS3338vu-fI77ZnGgHfY20zkPRv_GcZKxLQmyj7I,1381
193
+ sknetwork/gnn/tests/test_loss.py,sha256=W5DA6FRd-OppeRKFgj2gtLqNvjkXkCQPmV6lg3ENu-c,1045
194
+ sknetwork/gnn/tests/test_base.py,sha256=HVsz5zABud8ZlrIJIFuAKP6N7mu2ClrTaleZbPhGOR0,3393
195
+ sknetwork/regression/diffusion.py,sha256=dV-uPGEaBLpI_sY6pl52rkKeSDQV9MZsQfSo1frYKbc,7845
196
+ sknetwork/regression/__init__.py,sha256=nRlbcR8bA2Lz-OmLPMIPhBzgDCol8oSA19qL3IninXA,141
197
+ sknetwork/regression/base.py,sha256=KIsVpnbACRH4h5W3ifMJOTlZNuztGbQP1QbZKj5aj_0,1496
198
+ sknetwork/regression/tests/__init__.py,sha256=BT8kCCMN_pv7znhIR5GSQ_XxU5brmrCYDwm4QJNRCV0,27
199
+ sknetwork/regression/tests/test_diffusion.py,sha256=-QBRgES_BF-QIgFevozLt9YXmGxJ6vxgLeYVZe92Wn8,2061
200
+ sknetwork/regression/tests/test_API.py,sha256=7fQulvKzF9yEBlLie7fL5G1ZdyiG4DAFZQZ4Lix96qs,1024
201
+ sknetwork/data/models.py,sha256=QyC_5ft7lkYzp3smmv54fHnyMUs88TYUq2FBU_KStMs,13156
202
+ sknetwork/data/test_graphs.py,sha256=OM6-7CiBN4UEAQUtE_2k5e5I72zDBL3r5fj_C2JXzNw,2484
203
+ sknetwork/data/timeout.py,sha256=kwHOLZFnOTrRhiEjtcwATYhsXbf5e8zV1OCoEKuG8Zg,1047
204
+ sknetwork/data/__init__.py,sha256=ejVS9hqX1Jf912UAazfaqIsNlppXCahEVDBv2IFdRUM,259
205
+ sknetwork/data/toy_graphs.py,sha256=2Cy7EABhYKPtjtfrW71Drz51A3mSuGu7G0P24tYiwHY,25035
206
+ sknetwork/data/parse.py,sha256=bRawtsCpm0CNgxjZ9CqpR_8nRJnW0ac561GoIlMOq1Y,26897
207
+ sknetwork/data/load.py,sha256=gC61jqFdyhPXc4-vazK85UdB4hnFQFjH9f1xpQ7JScI,14360
208
+ sknetwork/data/base.py,sha256=jeCwL-1O21CNkX1F9_eX4gl_BVNbeYabq_DSZr6ukB8,630
209
+ sknetwork/data/tests/test_test_graphs.py,sha256=dVRds-3P8JVnwfAp32fGif3zhocfPK0p2rgcYwJWsUQ,849
210
+ sknetwork/data/tests/test_parse.py,sha256=JOTFNWr77ZxKUKjw8TSbN-2dk-6YwmqN2OcrNkh7JVc,12717
211
+ sknetwork/data/tests/__init__.py,sha256=FSfkSYRKjDqIuEiEZ39Otve50qSxi7QObNnNrHHPx5s,19
212
+ sknetwork/data/tests/test_toy_graphs.py,sha256=kxOb7QpXGi8O7Kb6RmWoRUbAoyllM_-SXCRcYoH8B00,2137
213
+ sknetwork/data/tests/test_models.py,sha256=oP-X_k0vbSB4CwlV4GQVVBAQ9uI_8frFicde5yhVYAc,1915
214
+ sknetwork/data/tests/test_API.py,sha256=wJ4F4wPI3uI5WF_Pj2pMNSxSkY24Q7CO3kU8Sd5E-ac,957
215
+ sknetwork/data/tests/test_base.py,sha256=I_0BXdj-BKvdm1LpPIRtlnPChVoYRTCC9ZvTuLT2_W8,308
216
+ sknetwork/data/tests/test_load.py,sha256=9EXkw2TbDAUmpwE-kUTgxZieB4XDLF5drLVvyugX96M,3550
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.38.4)
2
+ Generator: bdist_wheel (0.42.0)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp39-cp39-macosx_11_0_arm64
5
5
 
sknetwork/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  __author__ = """scikit-network team"""
6
6
  __email__ = "thomas.bonald@telecom-paris.fr"
7
- __version__ = '0.30.0'
7
+ __version__ = '0.32.1'
8
8
 
9
9
  import sknetwork.topology
10
10
  import sknetwork.path
sknetwork/base.py ADDED
@@ -0,0 +1,67 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """
4
+ Created in June 2019
5
+ @author: Quentin Lutz <qlutz@enst.fr>
6
+ """
7
+ import inspect
8
+
9
+
10
+ class Algorithm:
11
+ """Base class for all algorithms.
12
+ """
13
+ def get_params(self):
14
+ """Get parameters as dictionary.
15
+
16
+ Returns
17
+ -------
18
+ params : dict
19
+ Parameters of the algorithm.
20
+ """
21
+ signature = inspect.signature(self.__class__.__init__)
22
+ params_exclude = ['self', 'random_state', 'verbose']
23
+ params = dict()
24
+ for param in signature.parameters.values():
25
+ name = param.name
26
+ if name not in params_exclude:
27
+ try:
28
+ value = self.__dict__[name]
29
+ except KeyError:
30
+ continue
31
+ params[name] = value
32
+ return params
33
+
34
+ def set_params(self, params: dict) -> 'Algorithm':
35
+ """Set parameters of the algorithm.
36
+
37
+ Parameters
38
+ ----------
39
+ params : dict
40
+ Parameters of the algorithm.
41
+
42
+ Returns
43
+ -------
44
+ self : :class:`Algorithm`
45
+ """
46
+ valid_params = self.get_params()
47
+ if type(params) is not dict:
48
+ raise ValueError('The parameters must be given as a dictionary.')
49
+ for name, value in params.items():
50
+ if name not in valid_params:
51
+ raise ValueError(f'Invalid parameter: {name}.')
52
+ setattr(self, name, value)
53
+ return self
54
+
55
+ def __repr__(self):
56
+ params_string = []
57
+ for name, value in self.get_params().items():
58
+ if type(value) == str:
59
+ value = "'" + value + "'"
60
+ else:
61
+ value = str(value)
62
+ params_string.append(name + '=' + value)
63
+ return self.__class__.__name__ + '(' + ', '.join(params_string) + ')'
64
+
65
+ def fit(self, *args, **kwargs):
66
+ """Fit algorithm to data."""
67
+ raise NotImplementedError
@@ -9,7 +9,7 @@ from abc import ABC
9
9
  import numpy as np
10
10
  from scipy import sparse
11
11
 
12
- from sknetwork.utils.base import Algorithm
12
+ from sknetwork.base import Algorithm
13
13
 
14
14
 
15
15
  class BaseClassifier(Algorithm, ABC):
@@ -20,25 +20,25 @@ class BaseClassifier(Algorithm, ABC):
20
20
  bipartite : bool
21
21
  If ``True``, the fitted graph is bipartite.
22
22
  labels_ : np.ndarray, shape (n_labels,)
23
- Label of each node.
24
- membership_ : sparse.csr_matrix, shape (n_row, n_labels)
25
- Membership matrix (soft classification).
23
+ Labels of nodes.
24
+ probs_ : sparse.csr_matrix, shape (n_row, n_labels)
25
+ Probability distribution over labels (soft classification).
26
26
  labels_row_ , labels_col_ : np.ndarray
27
- Label of rows and columns (for bipartite graphs).
28
- membership_row_, membership_col_ : sparse.csr_matrix, shapes (n_row, n_labels) and (n_col, n_labels)
29
- Membership matrices of rows and columns (for bipartite graphs).
27
+ Labels of rows and columns (for bipartite graphs).
28
+ probs_row_, probs_col_ : sparse.csr_matrix, shapes (n_row, n_labels) and (n_col, n_labels)
29
+ Probability distributions over labels for rows and columns (for bipartite graphs).
30
30
  """
31
31
 
32
32
  def __init__(self):
33
33
  self.bipartite = None
34
34
  self.labels_ = None
35
- self.membership_ = None
35
+ self.probs_ = None
36
36
  self.labels_row_ = None
37
37
  self.labels_col_ = None
38
- self.membership_row_ = None
39
- self.membership_col_ = None
38
+ self.probs_row_ = None
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
@@ -80,8 +80,8 @@ class BaseClassifier(Algorithm, ABC):
80
80
  Probability distribution over labels.
81
81
  """
82
82
  if columns:
83
- return self.membership_col_.toarray()
84
- return self.membership_.toarray()
83
+ return self.probs_col_.toarray()
84
+ return self.probs_.toarray()
85
85
 
86
86
  def fit_predict_proba(self, *args, **kwargs) -> np.ndarray:
87
87
  """Fit algorithm to the data and return the probability distribution over labels.
@@ -105,12 +105,12 @@ class BaseClassifier(Algorithm, ABC):
105
105
 
106
106
  Returns
107
107
  -------
108
- membership : sparse.csr_matrix
109
- Probability distribution over labels (aka membership matrix).
108
+ probs : sparse.csr_matrix
109
+ Probability distribution over labels.
110
110
  """
111
111
  if columns:
112
- return self.membership_col_
113
- return self.membership_
112
+ return self.probs_col_
113
+ return self.probs_
114
114
 
115
115
  def fit_transform(self, *args, **kwargs) -> sparse.csr_matrix:
116
116
  """Fit algorithm to the data and return the probability distribution over labels in sparse format.
@@ -118,8 +118,8 @@ class BaseClassifier(Algorithm, ABC):
118
118
 
119
119
  Returns
120
120
  -------
121
- membership : sparse.csr_matrix
122
- Probability of each label.
121
+ probs : sparse.csr_matrix
122
+ Probability distribution over labels.
123
123
  """
124
124
  self.fit(*args, **kwargs)
125
125
  return self.transform()
@@ -131,12 +131,12 @@ class BaseClassifier(Algorithm, ABC):
131
131
  self.labels_row_ = self.labels_[:n_row]
132
132
  self.labels_col_ = self.labels_[n_row:]
133
133
  self.labels_ = self.labels_row_
134
- self.membership_row_ = self.membership_[:n_row]
135
- self.membership_col_ = self.membership_[n_row:]
136
- self.membership_ = self.membership_row_
134
+ self.probs_row_ = self.probs_[:n_row]
135
+ self.probs_col_ = self.probs_[n_row:]
136
+ self.probs_ = self.probs_row_
137
137
  else:
138
138
  self.labels_row_ = self.labels_
139
139
  self.labels_col_ = self.labels_
140
- self.membership_row_ = self.membership_
141
- self.membership_col_ = self.membership_
140
+ self.probs_row_ = self.probs_
141
+ self.probs_col_ = self.probs_
142
142
  return self
@@ -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,14 +12,13 @@ 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
19
- from sknetwork.utils.verbose import VerboseMixin
20
19
 
21
20
 
22
- class RankClassifier(BaseClassifier, VerboseMixin):
21
+ class RankClassifier(BaseClassifier):
23
22
  """Generic class for ranking based classifiers.
24
23
 
25
24
  Parameters
@@ -29,27 +28,20 @@ class RankClassifier(BaseClassifier, VerboseMixin):
29
28
  n_jobs :
30
29
  If positive, number of parallel jobs allowed (-1 means maximum number).
31
30
  If ``None``, no parallel computations are made.
32
- verbose :
33
- Verbose mode.
34
31
 
35
32
  Attributes
36
33
  ----------
37
34
  labels_ : np.ndarray, shape (n_labels,)
38
35
  Label of each node.
39
- membership_ : sparse.csr_matrix, shape (n_row, n_labels)
40
- Membership matrix.
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
- membership_row_ : sparse.csr_matrix, shape (n_row, n_labels)
46
- Membership matrix of rows, for bipartite graphs.
47
- membership_col_ : sparse.csr_matrix, shape (n_col, n_labels)
48
- Membership matrix of columns, for bipartite graphs.
36
+ probs_ : sparse.csr_matrix, shape (n_row, n_labels)
37
+ Probability distribution over labels.
38
+ labels_row_, labels_col_ : np.ndarray
39
+ Labels of rows and columns, for bipartite graphs.
40
+ probs_row_, probs_col_ : sparse.csr_matrix, shape (n_row, n_labels)
41
+ Probability distributions over labels for rows and columns (for bipartite graphs).
49
42
  """
50
43
  def __init__(self, algorithm: BaseRanking, n_jobs: Optional[int] = None, verbose: bool = False):
51
44
  super(RankClassifier, self).__init__()
52
- VerboseMixin.__init__(self, verbose)
53
45
 
54
46
  self.algorithm = algorithm
55
47
  self.n_jobs = check_n_jobs(n_jobs)
@@ -78,7 +70,7 @@ class RankClassifier(BaseClassifier, VerboseMixin):
78
70
 
79
71
  @staticmethod
80
72
  def _process_scores(scores: np.ndarray) -> np.ndarray:
81
- """Post-processing of the membership matrix.
73
+ """Post-processing of the scores.
82
74
 
83
75
  Parameters
84
76
  ----------
@@ -97,9 +89,9 @@ class RankClassifier(BaseClassifier, VerboseMixin):
97
89
  self.labels_row_ = self.labels_[:n_row]
98
90
  self.labels_col_ = self.labels_[n_row:]
99
91
  self.labels_ = self.labels_row_
100
- self.membership_row_ = self.membership_[:n_row]
101
- self.membership_col_ = self.membership_[n_row:]
102
- self.membership_ = self.membership_row_
92
+ self.probs_row_ = self.probs_[:n_row]
93
+ self.probs_col_ = self.probs_[n_row:]
94
+ self.probs_ = self.probs_row_
103
95
 
104
96
  def fit(self, input_matrix: Union[sparse.csr_matrix, np.ndarray], labels: Union[np.ndarray, dict] = None,
105
97
  labels_row: Union[np.ndarray, dict] = None, labels_col: Union[np.ndarray, dict] = None) -> 'RankClassifier':
@@ -122,7 +114,7 @@ class RankClassifier(BaseClassifier, VerboseMixin):
122
114
  seeds_labels = seeds_labels.astype(int)
123
115
  labels_unique, n_classes = check_labels(seeds_labels)
124
116
  seeds_all = self._process_labels(seeds_labels)
125
- local_function = partial(self.algorithm.fit_transform, adjacency)
117
+ local_function = partial(self.algorithm.fit_predict, adjacency)
126
118
  with Pool(self.n_jobs) as pool:
127
119
  scores = np.array(pool.map(local_function, seeds_all))
128
120
  scores = scores.T
@@ -130,12 +122,12 @@ class RankClassifier(BaseClassifier, VerboseMixin):
130
122
  scores = self._process_scores(scores)
131
123
  scores = normalize(scores)
132
124
 
133
- membership = sparse.coo_matrix(scores)
134
- membership.col = labels_unique[membership.col]
125
+ probs = sparse.coo_matrix(scores)
126
+ probs.col = labels_unique[probs.col]
135
127
 
136
128
  labels = np.argmax(scores, axis=1)
137
129
  self.labels_ = labels_unique[labels]
138
- self.membership_ = sparse.csr_matrix(membership, shape=(adjacency.shape[0], np.max(seeds_labels) + 1))
130
+ self.probs_ = sparse.csr_matrix(probs, shape=(adjacency.shape[0], np.max(seeds_labels) + 1))
139
131
  self._split_vars(input_matrix.shape)
140
132
 
141
133
  return self