scikit-network 0.30.0__cp39-cp39-win_amd64.whl → 0.32.1__cp39-cp39-win_amd64.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 (187) 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 +228 -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.cp39-win_amd64.pyd +0 -0
  16. sknetwork/classification/vote.cpp +14482 -10351
  17. sknetwork/classification/vote.pyx +1 -3
  18. sknetwork/clustering/__init__.py +3 -1
  19. sknetwork/clustering/base.py +36 -40
  20. sknetwork/clustering/kcenters.py +253 -0
  21. sknetwork/clustering/leiden.py +241 -0
  22. sknetwork/clustering/leiden_core.cp39-win_amd64.pyd +0 -0
  23. sknetwork/clustering/leiden_core.cpp +31564 -0
  24. sknetwork/clustering/leiden_core.pyx +124 -0
  25. sknetwork/clustering/louvain.py +133 -102
  26. sknetwork/clustering/louvain_core.cp39-win_amd64.pyd +0 -0
  27. sknetwork/clustering/louvain_core.cpp +22457 -18792
  28. sknetwork/clustering/louvain_core.pyx +86 -96
  29. sknetwork/clustering/postprocess.py +2 -2
  30. sknetwork/clustering/propagation_clustering.py +15 -19
  31. sknetwork/clustering/tests/test_API.py +8 -4
  32. sknetwork/clustering/tests/test_kcenters.py +92 -0
  33. sknetwork/clustering/tests/test_leiden.py +34 -0
  34. sknetwork/clustering/tests/test_louvain.py +3 -4
  35. sknetwork/data/__init__.py +2 -1
  36. sknetwork/data/base.py +28 -0
  37. sknetwork/data/load.py +38 -37
  38. sknetwork/data/models.py +18 -18
  39. sknetwork/data/parse.py +54 -33
  40. sknetwork/data/test_graphs.py +2 -2
  41. sknetwork/data/tests/test_API.py +1 -1
  42. sknetwork/data/tests/test_base.py +14 -0
  43. sknetwork/data/tests/test_load.py +1 -1
  44. sknetwork/data/tests/test_parse.py +9 -12
  45. sknetwork/data/tests/test_test_graphs.py +1 -2
  46. sknetwork/data/toy_graphs.py +18 -18
  47. sknetwork/embedding/__init__.py +0 -1
  48. sknetwork/embedding/base.py +21 -20
  49. sknetwork/embedding/force_atlas.py +3 -2
  50. sknetwork/embedding/louvain_embedding.py +2 -2
  51. sknetwork/embedding/random_projection.py +5 -3
  52. sknetwork/embedding/spectral.py +0 -73
  53. sknetwork/embedding/tests/test_API.py +4 -28
  54. sknetwork/embedding/tests/test_louvain_embedding.py +4 -9
  55. sknetwork/embedding/tests/test_random_projection.py +2 -2
  56. sknetwork/embedding/tests/test_spectral.py +5 -8
  57. sknetwork/embedding/tests/test_svd.py +1 -1
  58. sknetwork/gnn/base.py +4 -4
  59. sknetwork/gnn/base_layer.py +3 -3
  60. sknetwork/gnn/gnn_classifier.py +45 -89
  61. sknetwork/gnn/layer.py +1 -1
  62. sknetwork/gnn/loss.py +1 -1
  63. sknetwork/gnn/optimizer.py +4 -3
  64. sknetwork/gnn/tests/test_base_layer.py +4 -4
  65. sknetwork/gnn/tests/test_gnn_classifier.py +12 -35
  66. sknetwork/gnn/utils.py +8 -8
  67. sknetwork/hierarchy/base.py +29 -2
  68. sknetwork/hierarchy/louvain_hierarchy.py +45 -41
  69. sknetwork/hierarchy/paris.cp39-win_amd64.pyd +0 -0
  70. sknetwork/hierarchy/paris.cpp +27369 -22852
  71. sknetwork/hierarchy/paris.pyx +7 -9
  72. sknetwork/hierarchy/postprocess.py +16 -16
  73. sknetwork/hierarchy/tests/test_API.py +1 -1
  74. sknetwork/hierarchy/tests/test_algos.py +5 -0
  75. sknetwork/hierarchy/tests/test_metrics.py +1 -1
  76. sknetwork/linalg/__init__.py +1 -1
  77. sknetwork/linalg/diteration.cp39-win_amd64.pyd +0 -0
  78. sknetwork/linalg/diteration.cpp +13474 -9454
  79. sknetwork/linalg/diteration.pyx +0 -2
  80. sknetwork/linalg/eig_solver.py +1 -1
  81. sknetwork/linalg/{normalization.py → normalizer.py} +18 -15
  82. sknetwork/linalg/operators.py +1 -1
  83. sknetwork/linalg/ppr_solver.py +1 -1
  84. sknetwork/linalg/push.cp39-win_amd64.pyd +0 -0
  85. sknetwork/linalg/push.cpp +22993 -18807
  86. sknetwork/linalg/push.pyx +0 -2
  87. sknetwork/linalg/svd_solver.py +1 -1
  88. sknetwork/linalg/tests/test_normalization.py +3 -7
  89. sknetwork/linalg/tests/test_operators.py +4 -8
  90. sknetwork/linalg/tests/test_ppr.py +1 -1
  91. sknetwork/linkpred/base.py +13 -2
  92. sknetwork/linkpred/nn.py +6 -6
  93. sknetwork/log.py +19 -0
  94. sknetwork/path/__init__.py +4 -3
  95. sknetwork/path/dag.py +54 -0
  96. sknetwork/path/distances.py +98 -0
  97. sknetwork/path/search.py +13 -47
  98. sknetwork/path/shortest_path.py +37 -162
  99. sknetwork/path/tests/test_dag.py +37 -0
  100. sknetwork/path/tests/test_distances.py +62 -0
  101. sknetwork/path/tests/test_search.py +26 -11
  102. sknetwork/path/tests/test_shortest_path.py +31 -36
  103. sknetwork/ranking/__init__.py +0 -1
  104. sknetwork/ranking/base.py +13 -8
  105. sknetwork/ranking/betweenness.cp39-win_amd64.pyd +0 -0
  106. sknetwork/ranking/betweenness.cpp +5709 -3017
  107. sknetwork/ranking/betweenness.pyx +0 -2
  108. sknetwork/ranking/closeness.py +7 -10
  109. sknetwork/ranking/pagerank.py +14 -14
  110. sknetwork/ranking/postprocess.py +12 -3
  111. sknetwork/ranking/tests/test_API.py +2 -4
  112. sknetwork/ranking/tests/test_betweenness.py +3 -3
  113. sknetwork/ranking/tests/test_closeness.py +3 -7
  114. sknetwork/ranking/tests/test_pagerank.py +11 -5
  115. sknetwork/ranking/tests/test_postprocess.py +5 -0
  116. sknetwork/regression/base.py +19 -2
  117. sknetwork/regression/diffusion.py +24 -10
  118. sknetwork/regression/tests/test_diffusion.py +8 -0
  119. sknetwork/test_base.py +35 -0
  120. sknetwork/test_log.py +15 -0
  121. sknetwork/topology/__init__.py +7 -8
  122. sknetwork/topology/cliques.cp39-win_amd64.pyd +0 -0
  123. sknetwork/topology/{kcliques.cpp → cliques.cpp} +23412 -20276
  124. sknetwork/topology/cliques.pyx +149 -0
  125. sknetwork/topology/core.cp39-win_amd64.pyd +0 -0
  126. sknetwork/topology/{kcore.cpp → core.cpp} +21732 -18867
  127. sknetwork/topology/core.pyx +90 -0
  128. sknetwork/topology/cycles.py +243 -0
  129. sknetwork/topology/minheap.cp39-win_amd64.pyd +0 -0
  130. sknetwork/{utils → topology}/minheap.cpp +19452 -15368
  131. sknetwork/{utils → topology}/minheap.pxd +1 -3
  132. sknetwork/{utils → topology}/minheap.pyx +1 -3
  133. sknetwork/topology/structure.py +3 -43
  134. sknetwork/topology/tests/test_cliques.py +11 -11
  135. sknetwork/topology/tests/test_core.py +19 -0
  136. sknetwork/topology/tests/test_cycles.py +65 -0
  137. sknetwork/topology/tests/test_structure.py +2 -16
  138. sknetwork/topology/tests/test_triangles.py +11 -15
  139. sknetwork/topology/tests/test_wl.py +72 -0
  140. sknetwork/topology/triangles.cp39-win_amd64.pyd +0 -0
  141. sknetwork/topology/triangles.cpp +5056 -2696
  142. sknetwork/topology/triangles.pyx +74 -89
  143. sknetwork/topology/weisfeiler_lehman.py +56 -86
  144. sknetwork/topology/weisfeiler_lehman_core.cp39-win_amd64.pyd +0 -0
  145. sknetwork/topology/weisfeiler_lehman_core.cpp +14727 -10622
  146. sknetwork/topology/weisfeiler_lehman_core.pyx +0 -2
  147. sknetwork/utils/__init__.py +1 -31
  148. sknetwork/utils/check.py +2 -2
  149. sknetwork/utils/format.py +5 -3
  150. sknetwork/utils/membership.py +2 -2
  151. sknetwork/utils/tests/test_check.py +3 -3
  152. sknetwork/utils/tests/test_format.py +3 -1
  153. sknetwork/utils/values.py +1 -1
  154. sknetwork/visualization/__init__.py +2 -2
  155. sknetwork/visualization/dendrograms.py +55 -7
  156. sknetwork/visualization/graphs.py +292 -72
  157. sknetwork/visualization/tests/test_dendrograms.py +9 -9
  158. sknetwork/visualization/tests/test_graphs.py +71 -62
  159. scikit_network-0.30.0.dist-info/RECORD +0 -227
  160. sknetwork/embedding/louvain_hierarchy.py +0 -142
  161. sknetwork/embedding/tests/test_louvain_hierarchy.py +0 -19
  162. sknetwork/path/metrics.py +0 -148
  163. sknetwork/path/tests/test_metrics.py +0 -29
  164. sknetwork/ranking/harmonic.py +0 -82
  165. sknetwork/topology/dag.py +0 -74
  166. sknetwork/topology/dag_core.cp39-win_amd64.pyd +0 -0
  167. sknetwork/topology/dag_core.cpp +0 -23350
  168. sknetwork/topology/dag_core.pyx +0 -38
  169. sknetwork/topology/kcliques.cp39-win_amd64.pyd +0 -0
  170. sknetwork/topology/kcliques.pyx +0 -193
  171. sknetwork/topology/kcore.cp39-win_amd64.pyd +0 -0
  172. sknetwork/topology/kcore.pyx +0 -120
  173. sknetwork/topology/tests/test_cores.py +0 -21
  174. sknetwork/topology/tests/test_dag.py +0 -26
  175. sknetwork/topology/tests/test_wl_coloring.py +0 -49
  176. sknetwork/topology/tests/test_wl_kernel.py +0 -31
  177. sknetwork/utils/base.py +0 -35
  178. sknetwork/utils/minheap.cp39-win_amd64.pyd +0 -0
  179. sknetwork/utils/simplex.py +0 -140
  180. sknetwork/utils/tests/test_base.py +0 -28
  181. sknetwork/utils/tests/test_bunch.py +0 -16
  182. sknetwork/utils/tests/test_projection_simplex.py +0 -33
  183. sknetwork/utils/tests/test_verbose.py +0 -15
  184. sknetwork/utils/verbose.py +0 -37
  185. {scikit_network-0.30.0.dist-info → scikit_network-0.32.1.dist-info}/LICENSE +0 -0
  186. {scikit_network-0.30.0.dist-info → scikit_network-0.32.1.dist-info}/top_level.txt +0 -0
  187. /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,228 @@
1
+ sknetwork/__init__.py,sha256=hbJ__5rv06WI2XnJW8lWLpJkXp3Ju9hyR0aGBzdG0IY,554
2
+ sknetwork/base.py,sha256=_63mkwqXFDke_0ve9DIZJiMHboMYqBONa7B08gao440,2018
3
+ sknetwork/log.py,sha256=qDR-dnlzJC0ETlotPAy_IbLiQPgu8Vn90mgkqfvT5W0,462
4
+ sknetwork/sknetwork.py,sha256=Qtq3EpSkdAFqQNQPDXTAouXS784LkR8Rh2D5s5w5_tc,47
5
+ sknetwork/test_base.py,sha256=hdbe2ldftbPp6Y0-bAWehKy9cyyd3Adj9UX6NgYq0QQ,947
6
+ sknetwork/test_log.py,sha256=ucX3w138eDyD0Wnpk9QEsPoQgAPTJNPy9twzMf5TjQ8,334
7
+ sknetwork/classification/__init__.py,sha256=QoS3fTnCZ0nFdlDkEphEYqj1NDEf23_aqsfP0G4zLMM,483
8
+ sknetwork/classification/base.py,sha256=a6JczKf23arkC4Xx6rUEI0gLFAPoyPXKTXCdhV6_bWI,4432
9
+ sknetwork/classification/base_rank.py,sha256=BChHu6sDkdq_M6coJsC3hac3HWPE2lholi3g97J6lWw,4655
10
+ sknetwork/classification/diffusion.py,sha256=uliGned1_GGJLACzXMNFtkYbTyvHgfaUNgS535ZzreQ,5670
11
+ sknetwork/classification/knn.py,sha256=p9ZHNdaMOnrd6dmVNyieGBYrhFMrjXnkD8MFCxVmJqw,5444
12
+ sknetwork/classification/metrics.py,sha256=f66RlKyauNJFr8iuud4s9tntnEa4_Lp28zVWuwhUE44,7007
13
+ sknetwork/classification/pagerank.py,sha256=Nvmj-Y1YFXQxCZpcUhXfKlc6S5BebnIkJZ8DRsyzDTs,2652
14
+ sknetwork/classification/propagation.py,sha256=WkB4yG3V13a0d5yYuuecuHblQ2Z0L5PKLpL3gUgy8zs,5905
15
+ sknetwork/classification/vote.cp39-win_amd64.pyd,sha256=G-DACcFfnfHy4FNZN-qibz6vHNxyEfU29vgHCRLOk6g,156672
16
+ sknetwork/classification/vote.cpp,sha256=8rjK9bLANsU_I6TwLzcY0eLdf6V8SBq88y2KW3KKhG8,1023080
17
+ sknetwork/classification/vote.pyx,sha256=-mNsL96aaA1UL-qfeUgZlbdvKZUK9R4MLmq0BNFWVKA,1640
18
+ sknetwork/classification/tests/__init__.py,sha256=Per0oy1Frnm5jB7dnpod1g_xbgYhqkNteWQV5cemcH0,32
19
+ sknetwork/classification/tests/test_API.py,sha256=WV5cY8yhTHBHYRbDE3InZ4v-agymxLPMKxa2NqjbWZo,1154
20
+ sknetwork/classification/tests/test_diffusion.py,sha256=GuWNuE4PGZ4hqCLtRe-DfwjD3uUBFeHa0ByMEtsAUMM,3260
21
+ sknetwork/classification/tests/test_knn.py,sha256=EWuWiJJSsfthfvb3x0ejUjdccRBZIFpmG6nv7F8VkOk,807
22
+ sknetwork/classification/tests/test_metrics.py,sha256=9eqBvRiMdVUHf7WhjfwzMcUJFALt4Ufmx5LhBzou8Ww,2356
23
+ sknetwork/classification/tests/test_pagerank.py,sha256=8ywBVzfJOtz_gTIn7XYr0nvHlVwvmZERLrG3LkQHeTU,640
24
+ sknetwork/classification/tests/test_propagation.py,sha256=GzhpCpg0ijLvXuWtABolq02k0-Yh3UHJ2rAKpdQlTxI,874
25
+ sknetwork/clustering/__init__.py,sha256=Ju06e1zwMUfOn_1soTOlxJJu1F5u9VNxFXWN8TTParo,443
26
+ sknetwork/clustering/base.py,sha256=LsH_wlP19lDnIZWVUXbKwSta05ii5dWMqS-J-AkY6HE,6104
27
+ sknetwork/clustering/kcenters.py,sha256=MKmsR7zWTITeEAqFyRDKpglU7yZZEjR8H0TLJXdDjtw,8942
28
+ sknetwork/clustering/leiden.py,sha256=x2M1tVMlupu3KK8D7RpfB0hzV5iwf0den1y9NwC1Jko,9921
29
+ sknetwork/clustering/leiden_core.cp39-win_amd64.pyd,sha256=3_rJe3iosaFlTR22Y8HewAqx7owSEK6FWyHEJz179N4,201216
30
+ sknetwork/clustering/leiden_core.cpp,sha256=d9_D3KllPS80xs0gy56HZ-5c-5LCtYtsUeCwlMdA2qA,1205016
31
+ sknetwork/clustering/leiden_core.pyx,sha256=kEppO0iSs0UqK3ybtSVIHRSojJ4KNfe6pUNo9sShh7E,4424
32
+ sknetwork/clustering/louvain.py,sha256=Em7A22oNamwBb0IAFySLa9HUmdu4LjAuo3XAtJqtHC0,11077
33
+ sknetwork/clustering/louvain_core.cp39-win_amd64.pyd,sha256=hphpeUa-2RMNL3BZN2w407o971h60qovXuC7MazV3Ho,197120
34
+ sknetwork/clustering/louvain_core.cpp,sha256=zeWTe4GxT7KgwwD64ApfLpLR6sZCNj75pNlPvs_7J74,1185580
35
+ sknetwork/clustering/louvain_core.pyx,sha256=2KPnBhBeSlIxmoScZW7jwsmVxJyAyHQs3pcH9AfBM2Y,4213
36
+ sknetwork/clustering/metrics.py,sha256=ptLLtUpFtdKLZ4lcx_MN-PpOrzv--PWhAcEFoFghccM,3151
37
+ sknetwork/clustering/postprocess.py,sha256=uynPXvjYXiFNShxGZyLkpIwRl5nIlIVEm-auMCNZA0o,2105
38
+ sknetwork/clustering/propagation_clustering.py,sha256=s-Y7EQEqGM2wdl1zAOQzfmy-8LGab1eB00u_AOkYzl0,3885
39
+ sknetwork/clustering/tests/__init__.py,sha256=tCA27jkL3pdstka9XWQEA1NbC6ZqL7Rf-1V1UcySCEE,28
40
+ sknetwork/clustering/tests/test_API.py,sha256=PKxuTh49IyKzwkLfgFAmJiuBhWJQBEYtNxzOEYgc5uE,1566
41
+ sknetwork/clustering/tests/test_kcenters.py,sha256=f2nBCcj4TRZ9FJVn7r60w1AI5gzDP1s70ve9aW1PbDs,3569
42
+ sknetwork/clustering/tests/test_leiden.py,sha256=oEN0Dz9popCEYE-qqEdmTEqqr3af9TB3WDmRNWYAidE,1189
43
+ sknetwork/clustering/tests/test_louvain.py,sha256=rYZLrb8Ld_F2KDCos5RP9-1szkVXHnXLWHd4SbOwvAY,4807
44
+ sknetwork/clustering/tests/test_metrics.py,sha256=ZTr4T-d-g6kQJinei9VH6Teb_rOScmj5XLG168EI5LQ,1868
45
+ sknetwork/clustering/tests/test_postprocess.py,sha256=41l4coS_1CHqGOCnnucqxU6UkXws89YVMjef162ZTEQ,1417
46
+ sknetwork/data/__init__.py,sha256=QScOMfOfm2j7rPaNLPGNc9TwHQGebWRZCBHHbmZarO8,265
47
+ sknetwork/data/base.py,sha256=O_EN3j1hoSbHc96qxx-dAe5SsLGdLE1cqiX9fl0xjAw,658
48
+ sknetwork/data/load.py,sha256=AkFI4qdzP2mPd43Rm321NQa4uSERb5D4Hs2lciuyn-Y,14769
49
+ sknetwork/data/models.py,sha256=luDuvYYcruOEw94iXNEnl5IbYJCVGtxB6jhDWVBmJH0,13615
50
+ sknetwork/data/parse.py,sha256=bmAM5LdMleZfYQ8hx1NEd3TIRjxwemoVOsNHEGv-0ss,27539
51
+ sknetwork/data/test_graphs.py,sha256=KRRok5ElYWh1NV3i_2enLLjdeKe8zBg_3xqFXgOOY6I,2568
52
+ sknetwork/data/timeout.py,sha256=mXSqgKFRc6AVZBlIobN2xPYJjAyQOClKH3KQJ5M_4Sw,1085
53
+ sknetwork/data/toy_graphs.py,sha256=xdgNQjzwswpkCVioUR0_EzoQiS6QbuOAD0mgTs3Fphg,25654
54
+ sknetwork/data/tests/__init__.py,sha256=LtUcKFe5CeBpspRwa6A2uX2cVEf_uPpOo2mGkH7W8cI,20
55
+ sknetwork/data/tests/test_API.py,sha256=aytP2cJV9px-d-SogJn4SYPnTFJ1Xt2coEW7-EiljjM,987
56
+ sknetwork/data/tests/test_base.py,sha256=h1-1fEyWuVpAOnZDFmkSuhngrQdv3N2vEMa_Wpt8dVU,322
57
+ sknetwork/data/tests/test_load.py,sha256=wuLVlJ-lquoIrsr0UBI-gakW7BjGBZaSyEPavxX0NVY,3645
58
+ sknetwork/data/tests/test_models.py,sha256=_2y5xZrWbE3XZltd4n-z84YwyJhPcpaBa2TxXMvhXF4,1967
59
+ sknetwork/data/tests/test_parse.py,sha256=K_HTO7L5axpnt2Fs3hmOMudufZZ2shps94COEABcMx4,12967
60
+ sknetwork/data/tests/test_test_graphs.py,sha256=3QWshIikkBtRl3C7ATc_zO5UkwOh1wZwD7gYm0CEj8o,878
61
+ sknetwork/data/tests/test_toy_graphs.py,sha256=wQ2X-CVv9oycBUAaB68aJqg-0o3yMlaVtZ9D4thZJrc,2205
62
+ sknetwork/embedding/__init__.py,sha256=hTtHHVXNdwdGSZuAmLvTm3yMmHWxYKrFwwo1MuOPTUI,418
63
+ sknetwork/embedding/base.py,sha256=YWKLjfChvWKWuD3FE5mlqtNVzczzvfojLQvvgV73ACM,2681
64
+ sknetwork/embedding/force_atlas.py,sha256=yjlL5Qfv19KJdwtziTDOklrW_HP5CkMJIoOL6t2cYsA,7650
65
+ sknetwork/embedding/louvain_embedding.py,sha256=3jSFxiWImFc1bUEY1ZXdbvslRxL9wl2CeERZFGF5qKM,7124
66
+ sknetwork/embedding/random_projection.py,sha256=b5zGehuWT-dpA1KSw5xv3UZXZGNcP8PalEjXYWfgPT8,5137
67
+ sknetwork/embedding/spectral.py,sha256=xN_5yxJV2KJ--DOpv7tyy5yU25BHVBWnXbywQ0L_6YE,5689
68
+ sknetwork/embedding/spring.py,sha256=Cl1airI_mSWmV1isKmcxqjY1uxw7NcH7xMwHc8ADmHA,7349
69
+ sknetwork/embedding/svd.py,sha256=isI2y9GfCGA5VJmogHrtq2MDVaxuWCZsEvh4YqgfB2k,15097
70
+ sknetwork/embedding/tests/__init__.py,sha256=PsZQYFNrSmRW_KIuNX3qVtxtZVn8yV18d0mk8Y6ieck,27
71
+ sknetwork/embedding/tests/test_API.py,sha256=0KKY3p_bF2f3QPsReW9IrAtC5KGw1Ok3J0kYUT1hrl8,1538
72
+ sknetwork/embedding/tests/test_force_atlas.py,sha256=dYiyWroqB7UKNW9MTYpGP6e7tF_qPWqVZNmZBndd_ks,1155
73
+ sknetwork/embedding/tests/test_louvain_embedding.py,sha256=yPKM_JG2v_kzYkp4lZ7laalZNq0qhjM6pWmyGWecCkk,853
74
+ sknetwork/embedding/tests/test_random_projection.py,sha256=zz6q0G-pG-G2gOefhr-yuPBQhNDNtXB8jz7_dld1ZpE,1221
75
+ sknetwork/embedding/tests/test_spectral.py,sha256=w-gokQ_UgeXSQv69BB_Dk6shkWiO6iJbJGl5ih0JNRI,3978
76
+ sknetwork/embedding/tests/test_spring.py,sha256=z3eT-mFcfNSoMWPKQF-Dz_ZjAsJplQrx1yspiaeFRBw,1693
77
+ sknetwork/embedding/tests/test_svd.py,sha256=OZTpXRemHEpGYSfYb2AosXhLgruaRpAhyQjNcqQhw0Y,1232
78
+ sknetwork/gnn/__init__.py,sha256=808PNZEYNHZrIBpKqPzAMKES8yhN6QXEVUWkZVJIJWI,529
79
+ sknetwork/gnn/activation.py,sha256=rhvEXgrIix4nZ9I3WYZ0e1MID_DESCCC_XlVcOa4Wpo,3677
80
+ sknetwork/gnn/base.py,sha256=qHnKsfsUW4LIdwm3vzfAahBjweCkIDRzk62i4piNBuc,5889
81
+ sknetwork/gnn/base_activation.py,sha256=Kxs_d4aPOpMRXZMBAW7WKkA_uWLXRM7XM-JqE4nFHhc,2395
82
+ sknetwork/gnn/base_layer.py,sha256=_zL_SyVYvhxch9N1i44Qkgar_M5xVRz7JcxqUjVwDjY,4057
83
+ sknetwork/gnn/gnn_classifier.py,sha256=EyanIIdGfeshOU_3IwH90PX6GG5nCav6msQN9zfJixo,12918
84
+ sknetwork/gnn/layer.py,sha256=JBNFABBgGtMeXdQaS8wGnsSd7Jqs18jbIguITTOCQRE,5679
85
+ sknetwork/gnn/loss.py,sha256=FwULPjbUe3OFIhIBKJoNfdYX41ALckX2ANKvC69yyoI,5342
86
+ sknetwork/gnn/neighbor_sampler.py,sha256=l5OkylbRQsDpmkfeHAaSA7gHi5l7OUKtL4YvH-YTMWM,1929
87
+ sknetwork/gnn/optimizer.py,sha256=Ijtt0VhhD_pUI2Qk8u3GLuO2mQvfVkBqW0cYF-Zqo2I,5946
88
+ sknetwork/gnn/utils.py,sha256=7sNUhWyO_juS3Of67qSwbMThGH-C-Y3NzHxLq2x7S68,4476
89
+ sknetwork/gnn/tests/__init__.py,sha256=_q1IzwMWdNgX90qzdbVkr0LV4NTjFzXg81z4-TM93cw,21
90
+ sknetwork/gnn/tests/test_activation.py,sha256=UznwTCvOeCX80n5urtoDhnM8lskDM67AsVFiY-ViqzU,2543
91
+ sknetwork/gnn/tests/test_base.py,sha256=EN3QjzsSwzpOgyIYHwA6mgCDRBigx7YQ5iSQXQbw_pM,3468
92
+ sknetwork/gnn/tests/test_base_layer.py,sha256=1TfVD7xaI6VUVWZuSmOwDR7Ct0iVFvpmcxUf8L6EaqY,1418
93
+ sknetwork/gnn/tests/test_gnn_classifier.py,sha256=MQYFGWQRF5bTzKB_td3wmtcUZvJl4uoc4pXmOHiutls,5873
94
+ sknetwork/gnn/tests/test_layers.py,sha256=6Rbz_jJm3m5e6XWZA3P8Bfzlss9nBoiE4rSz2Tc-QKo,3256
95
+ sknetwork/gnn/tests/test_loss.py,sha256=QvzXKW_xzirXUSkiDm9HgqJPHJdd55FOpuHWZzxyeKs,1078
96
+ sknetwork/gnn/tests/test_neigh_sampler.py,sha256=7yhKZSRg2sZd3kFNs-qdj1LKgM7X8xZBNoOYYkYRfek,721
97
+ sknetwork/gnn/tests/test_optimizer.py,sha256=OZnIeO__kNt8HXLHr-WHGzvDsTy4LvJ19p9jcFVzXME,1823
98
+ sknetwork/gnn/tests/test_utils.py,sha256=MJvOXEWouRiIVaPM76W0hizt3jFb-1_BXHLd1zkPzSg,1884
99
+ sknetwork/hierarchy/__init__.py,sha256=-2-y7iBVQRanXLSl9kY8VASJVqx37trYmVNcz74QsUc,418
100
+ sknetwork/hierarchy/base.py,sha256=DvVUNgJgfaFlWyl4QbdHmp-VldPMFLPx9irt74kpyrU,2789
101
+ sknetwork/hierarchy/louvain_hierarchy.py,sha256=MqIWRoqAl3ufgsV8r707T8qlwaqB_km_yczRcJWh_4w,9826
102
+ sknetwork/hierarchy/metrics.py,sha256=5WZLsSLYKifLIQ9aPrXyzvPtTFN5ROSlNivhV-n9VuY,8280
103
+ sknetwork/hierarchy/paris.cp39-win_amd64.pyd,sha256=JErucoU1WNe0SLtxaSsnhAkM2_Ns9C1V2gY1NNX4-zk,225792
104
+ sknetwork/hierarchy/paris.cpp,sha256=XlqV42nuD1iVNlK3VFUa5uePZm7pLvq3Wd1i-nLxhJk,1470932
105
+ sknetwork/hierarchy/paris.pyx,sha256=YfHQwrZx4ddzsKZ9K4yv1obIrZSVDzY0WjVhM5Qi8DI,11998
106
+ sknetwork/hierarchy/postprocess.py,sha256=81Hj7eCHvU_2mdq0FTeYuZAqk4FIudZfZbvU39_sqyM,12422
107
+ sknetwork/hierarchy/tests/__init__.py,sha256=jRlC4pbyKuxaiXvByYK-4ix7DwYWxpjwKNvSXZ7rQJE,27
108
+ sknetwork/hierarchy/tests/test_API.py,sha256=f0QtuCDA5dRwhPogtwbjsVlDRTpk84ewkXgc6rHCSWU,744
109
+ sknetwork/hierarchy/tests/test_algos.py,sha256=HbF1QCFcpbrybRLrz7C0-2yY7s97vciWNiktbbvubwg,1395
110
+ sknetwork/hierarchy/tests/test_metrics.py,sha256=rcdFVeWf50bYnem55gmUaDfE6AmJuW8RtYEQcigqZ60,3222
111
+ sknetwork/hierarchy/tests/test_postprocess.py,sha256=Bm1_XU6OgwZr_1B28IA5m_HZRqI7GMwlTLpzkXux__Y,2266
112
+ sknetwork/linalg/__init__.py,sha256=COkAHs_EsxWzd_tHl6qq8laEfSsjoMuWVx3VbNFEgzU,542
113
+ sknetwork/linalg/basics.py,sha256=WDlylrkBTCQpjXGtzs8kshJYfpo0h3uM8TMhHmnAnnM,1179
114
+ sknetwork/linalg/diteration.cp39-win_amd64.pyd,sha256=rTZry5OGB6jjzr9MvCpmEWFd3M8wnnZQ-3PSND0jJTc,146944
115
+ sknetwork/linalg/diteration.cpp,sha256=cNIUsJNU48q4HFZRkN9yJ0YJWch6zsfHymHZN9elUcA,1019890
116
+ sknetwork/linalg/diteration.pyx,sha256=1r7a1usqftiBNTPOAwHFQPK__nZ67J-87wQLM25GqEU,1431
117
+ sknetwork/linalg/eig_solver.py,sha256=lMqxTg66_T-LsgGqc9oo_ngxpTceekavnCFOANWEpPA,2793
118
+ sknetwork/linalg/laplacian.py,sha256=qifd-8iltcTKCQW-7fG5z3XfwVrrrCeaBqbViBQCLf0,416
119
+ sknetwork/linalg/normalizer.py,sha256=Z0-paMHwp51aY_ssCP2RfXNVQqTFA9gsIHfy-fhG5QI,2559
120
+ sknetwork/linalg/operators.py,sha256=nNTtdI_I0HEhnpHOxUYRHmEzUDcz9CbwjDc5eEKzlNQ,7657
121
+ sknetwork/linalg/polynome.py,sha256=qnIhfpRk26JMinuNCrZO1EDj5ci65ZLxkKJyhO7HxpE,2201
122
+ sknetwork/linalg/ppr_solver.py,sha256=D7LUMQgFAtnGhh8pxpKrISH1H9d5MknFpHib8bPA5x4,6703
123
+ sknetwork/linalg/push.cp39-win_amd64.pyd,sha256=dMCXnYgtHKv1n8L-DVLCoCJZxvFwOyRNm2FKlCm6YOs,165376
124
+ sknetwork/linalg/push.cpp,sha256=RtJhLOjOHYJzFlqd4XOiEP6WPoHoxIwjON_aeoXC2yE,1156787
125
+ sknetwork/linalg/push.pyx,sha256=79ycseJ1jOznzc1_KSexTGy_0dlX1jQVnf_WI8Ufvgc,2429
126
+ sknetwork/linalg/sparse_lowrank.py,sha256=-6-cNRs6tpiNqA8ah3mBKWap3Nh9GQHTFIarPjIiC7U,5170
127
+ sknetwork/linalg/svd_solver.py,sha256=XxP4AyKQInBQN3imcbtahXseZ4YyKj4ZI2UAJK1mDs4,2772
128
+ sknetwork/linalg/tests/__init__.py,sha256=i2cO6oXoryXdEJ-HdSFZsY7LZdNit7W3GC8J8LAUMU4,24
129
+ sknetwork/linalg/tests/test_eig.py,sha256=c_BpjP_S7xCwYgk2N7kaFfsjV1-nfUYCu3Rys07bPeo,1548
130
+ sknetwork/linalg/tests/test_laplacian.py,sha256=iGI4bFmYfhCbymlN4wcnE0tV9GmApC3g7bDL3Qx8dR0,452
131
+ sknetwork/linalg/tests/test_normalization.py,sha256=tYw6JKDekgsNJEZDvxdtCSHoltvWAu7XgZ6BtVy85e0,921
132
+ sknetwork/linalg/tests/test_operators.py,sha256=AaOekSv0_mnt7KKs61gve4drT_I7PdG5CxLQSgUXYXQ,2985
133
+ sknetwork/linalg/tests/test_polynome.py,sha256=-F0iMhYd1lVFau6ILxq7Mr5BtJxJPB-TX3ya3tQwzOM,1015
134
+ sknetwork/linalg/tests/test_ppr.py,sha256=6FlYnOlpWw2A98iH2Xp45DjbtqB5pPfymVVKhNFmCws,2143
135
+ sknetwork/linalg/tests/test_sparse_lowrank.py,sha256=Vqeey1W8jB85zT0L4c5TEGTL0hyQ9zX4FQ6EEI4tmHE,2337
136
+ sknetwork/linalg/tests/test_svd.py,sha256=9Uu89-1vTlaJ_H82MUwzGz-iiYf_wFiZMyfelVBRHMI,1323
137
+ sknetwork/linkpred/__init__.py,sha256=a7t20Q3xpm1M5IXnyErmucoQuHnGwPTNKAD42oYHEWQ,74
138
+ sknetwork/linkpred/base.py,sha256=hEImortSlZbfMav5uG8AR3ajKn9IXuookuIXhyBuvSw,1041
139
+ sknetwork/linkpred/nn.py,sha256=y0RB1rrKTr23PFklH2M2V7jcXfssl9SLdidtFozFxKg,4156
140
+ sknetwork/linkpred/tests/__init__.py,sha256=vghxhmK0F5SJOYIb9HZV0h3AVXsCVEPwkgfM7aPpV9M,33
141
+ sknetwork/linkpred/tests/test_nn.py,sha256=-1r8LyU34XXvhHnvJA53fGmOd6Ei2jGG6-LHtYvHYGc,1010
142
+ sknetwork/path/__init__.py,sha256=FU7sn-HrqXGbJQzCIlQgE95LGDwwMRzBe-qp4rTt-3A,227
143
+ sknetwork/path/dag.py,sha256=UAhn3uL2hlCybyOY0ZBnFh1aJnWwWpZ4pfhg-Ay2JKU,1722
144
+ sknetwork/path/distances.py,sha256=HsehKUOtoL8dCybTTm_mALTH9szOHkCRKkw3ref7-PA,3666
145
+ sknetwork/path/search.py,sha256=SD6iV6m_OdygudaJ3vaNyLQtlGZrHjfCvA0BIFPPAN0,807
146
+ sknetwork/path/shortest_path.py,sha256=gr7nB8woh3xBrS0gybylpQ31uDYCE2N4WEi2vTpke2Y,2511
147
+ sknetwork/path/tests/__init__.py,sha256=ntNGJ8p6RZkIrYnePF-TESyoidEXx8fw6A9OBNAlIqo,29
148
+ sknetwork/path/tests/test_dag.py,sha256=lualgStm0Boqx88j38tNuRKrW7Ala5ZfIHzlKdFbVRM,975
149
+ sknetwork/path/tests/test_distances.py,sha256=V9ZukcbwZ9HUDIg1-bKunkT4RHN94y2tkl0DRTKpefY,2757
150
+ sknetwork/path/tests/test_search.py,sha256=wJzwbbe86axJRmausJp-KcsNTB9n7kpo6YBd77SjV20,1239
151
+ sknetwork/path/tests/test_shortest_path.py,sha256=zeM-qgbTs3i29gvF568otKOKgv_pbryV_yGefThLEIY,1422
152
+ sknetwork/ranking/__init__.py,sha256=lbkUSZ3alkLK0xGiUx5ptPqhQKIjIKK80uPk0KymJPc,356
153
+ sknetwork/ranking/base.py,sha256=W3gw9j_ikhyETr3dpEYo9RINUUHlSn8Dez_eAnlIsDg,1573
154
+ sknetwork/ranking/betweenness.cp39-win_amd64.pyd,sha256=sPncSfYoA1TsSAAD7d1v-m_5CUSAR6q-b0iynwmaQBY,74752
155
+ sknetwork/ranking/betweenness.cpp,sha256=93mX2kAG-xRLJrgRq3c9XVt8uipzVX8wT__64KXEKKc,380616
156
+ sknetwork/ranking/betweenness.pyx,sha256=fe5_gwRQ0TaFi_0-vUGfy6XC5kW5un5xly7-xVDgxrU,3184
157
+ sknetwork/ranking/closeness.py,sha256=CvdAaqsM8HvAi6zGCuLcVF0BUu9n9UPBz_YxZhFF_sM,2932
158
+ sknetwork/ranking/hits.py,sha256=uhGJH2C0U9hLsVRutI6M1ulbEIM7L6dCeYqiAhtTD9A,2855
159
+ sknetwork/ranking/katz.py,sha256=WQpxJq_qqvjFm1ZG_P1ynfpzLlPu-dXCJ9luK-8sRjY,2618
160
+ sknetwork/ranking/pagerank.py,sha256=jzh5dFuM4k5E6UknDFx6WVU2HA30enYbe95RUYmssi0,4859
161
+ sknetwork/ranking/postprocess.py,sha256=F2yP6AsaK9ylTzukLCdtJET7_KnprrxkyWTSKQOnODk,956
162
+ sknetwork/ranking/tests/__init__.py,sha256=46AJCs9irV6PtFg8CVH8TqpqHA6ajs29-3rsL3zxZQ8,25
163
+ sknetwork/ranking/tests/test_API.py,sha256=wPRPjYGcyxEqRt7g4SH7FEZt1sFKBqo2LhCRq0g9pF4,1035
164
+ sknetwork/ranking/tests/test_betweenness.py,sha256=CEqRSOYOgnLUND54GBglDAUdzr6EGRxEPN3iMrYpE34,1173
165
+ sknetwork/ranking/tests/test_closeness.py,sha256=7LSiT-H5S1vuaOj4NHpotg0voIWjgJfVlgR96_V2ny8,853
166
+ sknetwork/ranking/tests/test_hits.py,sha256=aOPsAyU3GNyb_Mcujd7U_TLBtzWn91SuOPyZZRUF9MU,511
167
+ sknetwork/ranking/tests/test_pagerank.py,sha256=LlRJLoq-By1WVOuY71OAh46vCIvERQ0qiIgOgpvw6aM,2305
168
+ sknetwork/ranking/tests/test_postprocess.py,sha256=TpyU3_DKbnSwuf0HEuEYMiNbdI6Z5oP1JNO6kWigFkc,729
169
+ sknetwork/regression/__init__.py,sha256=FYnlc-DKS1Mz2lKVCtKldjSgtvzxMmkd5kwKq2HdNmE,145
170
+ sknetwork/regression/base.py,sha256=gTBqtaE-tMmtcnWh0pPsK9fg7eEUF1UaDdINE2nLNI8,1557
171
+ sknetwork/regression/diffusion.py,sha256=sUKbAf0VNmMHQmw_-Dba25omL4oEpWhyYU1qZJ_QA2E,8053
172
+ sknetwork/regression/tests/__init__.py,sha256=GvqvsSMbqMYwRmWw4VrZntwccz1jOPqrqufAZqw_NAc,28
173
+ sknetwork/regression/tests/test_API.py,sha256=7x_n8bG8hUcJVRYDbdC6GvPmwW5cE7HmASlu5SHnwFI,1056
174
+ sknetwork/regression/tests/test_diffusion.py,sha256=_ivBfsfmRQyiFChMS8N1J7HoJDhZtKdeydBIu7SuSvU,2117
175
+ sknetwork/topology/__init__.py,sha256=Ho06JPdSeiy5sq-Cv3e9y4AiFVMUQ_RUNUDDpKegWnM,542
176
+ sknetwork/topology/cliques.cp39-win_amd64.pyd,sha256=WGeviRTVXbSVbRJka82mLHnCVAIvoAgnGG7WuFQwnO8,185856
177
+ sknetwork/topology/cliques.cpp,sha256=du0XZmC70o0y2NAsudarRkenbLgX3phS2Gu6e-tCSVk,1223582
178
+ sknetwork/topology/cliques.pyx,sha256=y6Ee5oaX7IdVhXXjSOazqT5dYo4gSTQ8Mq0u1Abg0vw,4659
179
+ sknetwork/topology/core.cp39-win_amd64.pyd,sha256=C7O6RYoO-Xf7cHvxTqE4Ma6lwBNBJiXNVlFvltAV4_U,156160
180
+ sknetwork/topology/core.cpp,sha256=Il-4VwXW-hih1IIVZnDPBwoLKxN9snnqUjo9TaFMt2o,1132865
181
+ sknetwork/topology/core.pyx,sha256=0PO4HnOYivjrFY1NMlXHd7wscu0R5Fg-Toj3YVRwXDo,2555
182
+ sknetwork/topology/cycles.py,sha256=EgVtANHvY-MBcIe3yRVaBYzz1amsiV6GfuDEMIO3Kl0,9246
183
+ sknetwork/topology/minheap.cp39-win_amd64.pyd,sha256=rXKJymVOX-N2dbFvKTfWtNYqlnXrn0LqIYfYfbqv_qE,134656
184
+ sknetwork/topology/minheap.cpp,sha256=uqyaeMu9AM-G5DigPgIXabAqRtGApboXGENMWdBwU0U,1016262
185
+ sknetwork/topology/minheap.pxd,sha256=AHeBNN8wGzT429K6AyhbrFUoBkWVwbkyUIY6TkeJ80g,584
186
+ sknetwork/topology/minheap.pyx,sha256=KOmjjlljgkGUJNL8PQ6WaNzx-Ro84QoSve_8baDN1B0,3419
187
+ sknetwork/topology/structure.py,sha256=28mSnrukLU_GDil8e5ouLZ9PuoQyJ0UmQ4WgMu9Wzew,7479
188
+ sknetwork/topology/triangles.cp39-win_amd64.pyd,sha256=5BFF2rQRg1NNnePPGFtLGf4olPy8SP023eN6zoXpay0,59904
189
+ sknetwork/topology/triangles.cpp,sha256=t9PP8RWF4eFY7xKvtp7EtEK0jtcZz5VqzGyexpaJIAw,354316
190
+ sknetwork/topology/triangles.pyx,sha256=q_f23ZidyizvR9P4X4OIX8o8bAZZTtV7tnjXqmyYZuY,4500
191
+ sknetwork/topology/weisfeiler_lehman.py,sha256=U5b5RoTFtqBeFwkuBXs4g0Px2UWRFePyneu-tfgnY_I,4441
192
+ sknetwork/topology/weisfeiler_lehman_core.cp39-win_amd64.pyd,sha256=n4eaLTDuxrEf6hiDxr4cDYsBu6IVf6UKoImNsImUXgI,156672
193
+ sknetwork/topology/weisfeiler_lehman_core.cpp,sha256=g4OHUQnLmxTeCQN06HTW3Bu3vujwcBB6hDm4dkhe3G8,1027132
194
+ sknetwork/topology/weisfeiler_lehman_core.pyx,sha256=lpUV1BpxtedsGBfOl19b8OFXCIbyaAA4ZYlW6BzSxbw,3148
195
+ sknetwork/topology/tests/__init__.py,sha256=84T-xv8JCFeA9D7Rxw9gy3_dNAoE8CY1k1pYcuG8K3s,26
196
+ sknetwork/topology/tests/test_cliques.py,sha256=vdRMDmF8AKkIWE-LnU2yGzk1wzwzq9PdggpeS-8wfRw,866
197
+ sknetwork/topology/tests/test_core.py,sha256=7w9lrzsQ5Pn7QzxA0F_L58cXCABFir7rtLn2DZdPKsk,570
198
+ sknetwork/topology/tests/test_cycles.py,sha256=iKhfvZf-GjlcVCFwRzo9OkxPfnT_pM-eLKW72VIvRy0,3215
199
+ sknetwork/topology/tests/test_structure.py,sha256=BIJuO39ROQRA-xipUfk8PajHQ0Uk9EY6C-c3JYkmBSg,4033
200
+ sknetwork/topology/tests/test_triangles.py,sha256=5AYxNQ8DkKTvpShWEWV-v1r7WZx1DuylChcEmVF0yTk,1313
201
+ sknetwork/topology/tests/test_wl.py,sha256=vesYcnlJHPphk2RJLzKJH9N6aYpPeKLFJko1E8kBdtc,2290
202
+ sknetwork/utils/__init__.py,sha256=ceT5UU4JRxCqpDlPj84gPBaKMRsI6b_YfaBzkK67Qo4,336
203
+ sknetwork/utils/check.py,sha256=LWUkHwDzr9Z9IyT7AIsrQyDrRAMjO2bzWyFsv_P9Ask,13295
204
+ sknetwork/utils/format.py,sha256=g_cfUlETJp7AppCiVKG2VZPexH-H9rVNGF4hXh2rshM,8987
205
+ sknetwork/utils/membership.py,sha256=kan9WuytJCyBAZi0CfM0SJEf527XB4WAYMkIctD5D9w,2244
206
+ sknetwork/utils/neighbors.py,sha256=-EwBXigM3mn2qvVTi_aPmG0XifDMojZgsMQ9_A8cLkk,3466
207
+ sknetwork/utils/tfidf.py,sha256=vvISEaZJa7RZrNNgQEAHgMH2rJToARuNWcVjnA8u7po,993
208
+ sknetwork/utils/values.py,sha256=aUc2fuI56J78_6P-S2mT4NhHgiiIZp6D2feNKcsQmG4,2584
209
+ sknetwork/utils/tests/__init__.py,sha256=JQuARG8Ycb5apL6PUy_wuEHsLjmEZFOPQUKWRgTMdCY,23
210
+ sknetwork/utils/tests/test_check.py,sha256=LxYAubg6YZ0RHYFz_R3byNtw3EQ6hsHxPPI3QgP1DLg,6954
211
+ sknetwork/utils/tests/test_format.py,sha256=NJrRBI-kFF8dYFmTwuFF7VUnHS6Mz75DG-RB-iGk8ag,2308
212
+ sknetwork/utils/tests/test_membership.py,sha256=d_TobwpRl2K3qCcFBDQV1bGCSmF7Ls3r2s_XGvJC3Sg,772
213
+ sknetwork/utils/tests/test_neighbors.py,sha256=Q7-Y23CcF4vn5lcyEqjaojEAk7-pG03Mf59O1Rz3IUs,1467
214
+ sknetwork/utils/tests/test_tfidf.py,sha256=KYz_LSxi625kKL-v5-uA1-YQOliIfgXCmNXTAZtgpmw,463
215
+ sknetwork/utils/tests/test_values.py,sha256=K3ctTXpSy9fwiHnpFVlHX5KeTd2wNF4kbFiTXe_gQq8,2334
216
+ sknetwork/visualization/__init__.py,sha256=Ww8O1hby1xf_mtRgFftc9srMzvbFgWOzj_khKkqq9Mg,220
217
+ sknetwork/visualization/colors.py,sha256=NhyMQeetfH16khnJD2gD_uZJkBD3JQDV0K3Jzacamqw,2543
218
+ sknetwork/visualization/dendrograms.py,sha256=HtubynuGsJ5b7bD5I8dIKL5UqhqynmqOhw_wJt6VGUA,10178
219
+ sknetwork/visualization/graphs.py,sha256=SJDta3IUolBDI69kFdF7WGmjcLsfqkQNw5ixvJwoNuk,42214
220
+ sknetwork/visualization/tests/__init__.py,sha256=hrso2pNVzMWn4D2pRyWA_xAMib-xacKjm-rf91MyGGk,31
221
+ sknetwork/visualization/tests/test_dendrograms.py,sha256=e0u3qL9SlWlrQiVAeCVXxq7P6-mU0GaCz3FBu6cm_HA,2519
222
+ sknetwork/visualization/tests/test_graphs.py,sha256=FPZcgGj9asTjOvtkXpENYjeE8xtwh1ES4XYWcYe56Jo,9597
223
+ scikit_network-0.32.1.dist-info/AUTHORS.rst,sha256=t2CJQFYm_OvWod1zQx4Tw-BeKLVlpQjQ0APBIOnYRPE,968
224
+ scikit_network-0.32.1.dist-info/LICENSE,sha256=BJ1Hth1QjBmjIfHcp1sVxlkEqHYM58Vn5bcpYcggMZE,1656
225
+ scikit_network-0.32.1.dist-info/METADATA,sha256=cmHp6cheSqpUDU3TEOHmo-VKw-6fBXvAw2U5SewlIFQ,14907
226
+ scikit_network-0.32.1.dist-info/WHEEL,sha256=GZFS91_ufm4WrNPBaFVPB9MvOXR6bMZQhPcZRRTN5YM,100
227
+ scikit_network-0.32.1.dist-info/top_level.txt,sha256=fkwspWQ9B3csqb5ENEOoVciRY6XftnMuz4MvTDQeSsg,10
228
+ scikit_network-0.32.1.dist-info/RECORD,,
@@ -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-win_amd64
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