scikit-network 0.31.0__cp39-cp39-win_amd64.whl → 0.33.0__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 (126) hide show
  1. {scikit_network-0.31.0.dist-info → scikit_network-0.33.0.dist-info}/AUTHORS.rst +3 -1
  2. {scikit_network-0.31.0.dist-info → scikit_network-0.33.0.dist-info}/METADATA +27 -5
  3. scikit_network-0.33.0.dist-info/RECORD +228 -0
  4. {scikit_network-0.31.0.dist-info → scikit_network-0.33.0.dist-info}/WHEEL +1 -1
  5. sknetwork/__init__.py +1 -1
  6. sknetwork/classification/base.py +1 -1
  7. sknetwork/classification/base_rank.py +3 -3
  8. sknetwork/classification/diffusion.py +25 -16
  9. sknetwork/classification/knn.py +23 -16
  10. sknetwork/classification/metrics.py +4 -4
  11. sknetwork/classification/pagerank.py +12 -8
  12. sknetwork/classification/propagation.py +25 -17
  13. sknetwork/classification/tests/test_diffusion.py +10 -0
  14. sknetwork/classification/vote.cp39-win_amd64.pyd +0 -0
  15. sknetwork/classification/vote.cpp +14549 -8668
  16. sknetwork/clustering/__init__.py +3 -1
  17. sknetwork/clustering/base.py +1 -1
  18. sknetwork/clustering/kcenters.py +253 -0
  19. sknetwork/clustering/leiden.py +242 -0
  20. sknetwork/clustering/leiden_core.cp39-win_amd64.pyd +0 -0
  21. sknetwork/clustering/leiden_core.cpp +31564 -0
  22. sknetwork/clustering/leiden_core.pyx +124 -0
  23. sknetwork/clustering/louvain.py +118 -83
  24. sknetwork/clustering/louvain_core.cp39-win_amd64.pyd +0 -0
  25. sknetwork/clustering/louvain_core.cpp +21876 -16332
  26. sknetwork/clustering/louvain_core.pyx +86 -94
  27. sknetwork/clustering/postprocess.py +2 -2
  28. sknetwork/clustering/propagation_clustering.py +4 -4
  29. sknetwork/clustering/tests/test_API.py +7 -3
  30. sknetwork/clustering/tests/test_kcenters.py +60 -0
  31. sknetwork/clustering/tests/test_leiden.py +34 -0
  32. sknetwork/clustering/tests/test_louvain.py +2 -3
  33. sknetwork/data/__init__.py +1 -1
  34. sknetwork/data/base.py +7 -2
  35. sknetwork/data/load.py +20 -25
  36. sknetwork/data/models.py +15 -15
  37. sknetwork/data/parse.py +57 -34
  38. sknetwork/data/tests/test_API.py +3 -3
  39. sknetwork/data/tests/test_base.py +2 -2
  40. sknetwork/data/tests/test_parse.py +9 -12
  41. sknetwork/data/tests/test_toy_graphs.py +33 -33
  42. sknetwork/data/toy_graphs.py +35 -43
  43. sknetwork/embedding/__init__.py +0 -1
  44. sknetwork/embedding/base.py +23 -19
  45. sknetwork/embedding/force_atlas.py +3 -2
  46. sknetwork/embedding/louvain_embedding.py +1 -27
  47. sknetwork/embedding/random_projection.py +5 -3
  48. sknetwork/embedding/spectral.py +0 -73
  49. sknetwork/embedding/svd.py +0 -4
  50. sknetwork/embedding/tests/test_API.py +4 -28
  51. sknetwork/embedding/tests/test_louvain_embedding.py +13 -13
  52. sknetwork/embedding/tests/test_spectral.py +2 -5
  53. sknetwork/embedding/tests/test_svd.py +7 -1
  54. sknetwork/gnn/base_layer.py +3 -3
  55. sknetwork/gnn/gnn_classifier.py +41 -87
  56. sknetwork/gnn/layer.py +1 -1
  57. sknetwork/gnn/loss.py +1 -1
  58. sknetwork/gnn/optimizer.py +4 -3
  59. sknetwork/gnn/tests/test_base_layer.py +4 -4
  60. sknetwork/gnn/tests/test_gnn_classifier.py +12 -39
  61. sknetwork/gnn/utils.py +8 -8
  62. sknetwork/hierarchy/base.py +27 -0
  63. sknetwork/hierarchy/louvain_hierarchy.py +55 -47
  64. sknetwork/hierarchy/paris.cp39-win_amd64.pyd +0 -0
  65. sknetwork/hierarchy/paris.cpp +27667 -20915
  66. sknetwork/hierarchy/paris.pyx +11 -10
  67. sknetwork/hierarchy/postprocess.py +16 -16
  68. sknetwork/hierarchy/tests/test_algos.py +5 -0
  69. sknetwork/hierarchy/tests/test_metrics.py +4 -4
  70. sknetwork/linalg/__init__.py +1 -1
  71. sknetwork/linalg/diteration.cp39-win_amd64.pyd +0 -0
  72. sknetwork/linalg/diteration.cpp +13916 -8050
  73. sknetwork/linalg/{normalization.py → normalizer.py} +17 -14
  74. sknetwork/linalg/operators.py +1 -1
  75. sknetwork/linalg/ppr_solver.py +1 -1
  76. sknetwork/linalg/push.cp39-win_amd64.pyd +0 -0
  77. sknetwork/linalg/push.cpp +23187 -16973
  78. sknetwork/linalg/tests/test_normalization.py +3 -7
  79. sknetwork/linalg/tests/test_operators.py +2 -6
  80. sknetwork/linalg/tests/test_ppr.py +1 -1
  81. sknetwork/linkpred/base.py +12 -1
  82. sknetwork/linkpred/nn.py +6 -6
  83. sknetwork/path/distances.py +11 -4
  84. sknetwork/path/shortest_path.py +1 -1
  85. sknetwork/path/tests/test_distances.py +7 -0
  86. sknetwork/path/tests/test_search.py +2 -2
  87. sknetwork/ranking/base.py +11 -6
  88. sknetwork/ranking/betweenness.cp39-win_amd64.pyd +0 -0
  89. sknetwork/ranking/betweenness.cpp +5256 -2190
  90. sknetwork/ranking/pagerank.py +13 -12
  91. sknetwork/ranking/tests/test_API.py +0 -2
  92. sknetwork/ranking/tests/test_betweenness.py +1 -1
  93. sknetwork/ranking/tests/test_pagerank.py +11 -5
  94. sknetwork/regression/base.py +18 -1
  95. sknetwork/regression/diffusion.py +30 -14
  96. sknetwork/regression/tests/test_diffusion.py +8 -0
  97. sknetwork/topology/__init__.py +3 -1
  98. sknetwork/topology/cliques.cp39-win_amd64.pyd +0 -0
  99. sknetwork/topology/cliques.cpp +23528 -16848
  100. sknetwork/topology/core.cp39-win_amd64.pyd +0 -0
  101. sknetwork/topology/core.cpp +22849 -16581
  102. sknetwork/topology/cycles.py +243 -0
  103. sknetwork/topology/minheap.cp39-win_amd64.pyd +0 -0
  104. sknetwork/topology/minheap.cpp +19495 -13469
  105. sknetwork/topology/structure.py +2 -42
  106. sknetwork/topology/tests/test_cycles.py +65 -0
  107. sknetwork/topology/tests/test_structure.py +2 -16
  108. sknetwork/topology/triangles.cp39-win_amd64.pyd +0 -0
  109. sknetwork/topology/triangles.cpp +5283 -1397
  110. sknetwork/topology/triangles.pyx +7 -4
  111. sknetwork/topology/weisfeiler_lehman_core.cp39-win_amd64.pyd +0 -0
  112. sknetwork/topology/weisfeiler_lehman_core.cpp +14781 -8915
  113. sknetwork/utils/__init__.py +1 -1
  114. sknetwork/utils/format.py +1 -1
  115. sknetwork/utils/membership.py +2 -2
  116. sknetwork/utils/values.py +5 -3
  117. sknetwork/visualization/__init__.py +2 -2
  118. sknetwork/visualization/dendrograms.py +55 -7
  119. sknetwork/visualization/graphs.py +261 -44
  120. sknetwork/visualization/tests/test_dendrograms.py +9 -9
  121. sknetwork/visualization/tests/test_graphs.py +63 -57
  122. scikit_network-0.31.0.dist-info/RECORD +0 -221
  123. sknetwork/embedding/louvain_hierarchy.py +0 -142
  124. sknetwork/embedding/tests/test_louvain_hierarchy.py +0 -19
  125. {scikit_network-0.31.0.dist-info → scikit_network-0.33.0.dist-info}/LICENSE +0 -0
  126. {scikit_network-0.31.0.dist-info → scikit_network-0.33.0.dist-info}/top_level.txt +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
@@ -1,6 +1,6 @@
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
@@ -15,16 +15,16 @@ Classifier: Intended Audience :: Science/Research
15
15
  Classifier: License :: OSI Approved :: BSD License
16
16
  Classifier: Natural Language :: English
17
17
  Classifier: Programming Language :: Cython
18
- Classifier: Programming Language :: Python :: 3.8
19
18
  Classifier: Programming Language :: Python :: 3.9
20
19
  Classifier: Programming Language :: Python :: 3.10
21
20
  Classifier: Programming Language :: Python :: 3.11
22
- Requires-Python: >=3.8
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Requires-Python: >=3.9
23
23
  Description-Content-Type: text/x-rst
24
24
  License-File: LICENSE
25
25
  License-File: AUTHORS.rst
26
- Requires-Dist: numpy (>=1.22.4)
27
- Requires-Dist: scipy (>=1.7.3)
26
+ Requires-Dist: numpy >=1.22.4
27
+ Requires-Dist: scipy >=1.7.3
28
28
 
29
29
  .. image:: https://perso.telecom-paristech.fr/bonald/logo_sknetwork.png
30
30
  :align: right
@@ -118,6 +118,28 @@ the `Journal of Machine Learning Research <https://jmlr.org>`_:
118
118
  History
119
119
  =======
120
120
 
121
+ 0.33.0 (2024-07-16)
122
+ -------------------
123
+
124
+ * Add Python 3.12
125
+ * Drop Python 3.8
126
+
127
+ 0.32.1 (2024-04-02)
128
+ -------------------
129
+
130
+ * Fix documentation
131
+ * Fix wheel upload
132
+
133
+ 0.32.0 (2024-03-29)
134
+ -------------------
135
+
136
+ * Add Leiden clustering algorithm
137
+ * Add k-center clustering algorithm
138
+ * Add functions to detect and break cycles
139
+ * Add damping factor in diffusion
140
+ * Fix F1 scores
141
+ * Remove hierarchical Louvain embedding
142
+ * Get clustering coefficient for directed graphs
121
143
 
122
144
  0.31.0 (2023-05-22)
123
145
  -------------------
@@ -0,0 +1,228 @@
1
+ sknetwork/__init__.py,sha256=qVhfMlfW4ek8wa9mv2zIyb_BiMWl5twz8457vyHTAEg,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=WPNeSya95g3X3wEG_X-7aTIvAoBFIGQcXHMts58i1ts,5698
11
+ sknetwork/classification/knn.py,sha256=OHKNzFQlSPtkdi8Ih7HgiIh2fn6fv0T7-Eu66CsdBHg,5472
12
+ sknetwork/classification/metrics.py,sha256=S_Ze1gqsC9KMZs2K81BDtxRpsv6YvwEss3-v-ekdqmM,7011
13
+ sknetwork/classification/pagerank.py,sha256=Nvmj-Y1YFXQxCZpcUhXfKlc6S5BebnIkJZ8DRsyzDTs,2652
14
+ sknetwork/classification/propagation.py,sha256=jH5UOM2JkjW-1oxBLx7NaceOwKDBw0hiYKp415Hc8q4,5945
15
+ sknetwork/classification/vote.cp39-win_amd64.pyd,sha256=0attXwO5fM1gQInDFgli8Xk7KWSjJX5D4ZWJg5ZNzaE,157184
16
+ sknetwork/classification/vote.cpp,sha256=3XvHCgPlMgRdRWEkw9uDk8-HgtPc5__bNdXxb_7oCwU,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=THQdYR_DhGF8xJLTEiSmd8cx0Y70ms5nZ1emnoqcxBg,9924
29
+ sknetwork/clustering/leiden_core.cp39-win_amd64.pyd,sha256=xK91ZXqXJNHO5bi7y4BqHxRcejXTARG9YRN6WeyT7G0,201728
30
+ sknetwork/clustering/leiden_core.cpp,sha256=WTVPqmwEQ02Qt5l1Yt8RvuIe5qsWfRDFHrbfj1Woc4g,1205016
31
+ sknetwork/clustering/leiden_core.pyx,sha256=kEppO0iSs0UqK3ybtSVIHRSojJ4KNfe6pUNo9sShh7E,4424
32
+ sknetwork/clustering/louvain.py,sha256=BjBlOw70MVgZHwpIWYo4CmLlzC58jALSTqbRE7x8z4I,11111
33
+ sknetwork/clustering/louvain_core.cp39-win_amd64.pyd,sha256=KVtWS5N6K9vV21TJdNAtXSW73c_QfHw83nJm_LMJuRA,197632
34
+ sknetwork/clustering/louvain_core.cpp,sha256=TRftGdCtrOj9PtEFQGGi1nGaJn20b_KoOrW6LSB55Bw,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=BWvcTo8iNDFbKawVrRe8N6q4ujS0Co4MHpkT-P8_A9U,2037
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=qt9xm8RuVQqJQct_A2aCytKjTkMmegnPaRFcHqFbyDY,261
47
+ sknetwork/data/base.py,sha256=m0nrETIA9bDkqP_hkUVjQlmbwgdQI_Z0M6wctao6N2A,706
48
+ sknetwork/data/load.py,sha256=cIHn3LDRo208n1Yrqq_kaqgrHKEn8qmi5YiX4gGGx3Y,14762
49
+ sknetwork/data/models.py,sha256=x4s-Ty3Rj0S6MZ4ml2qf9BJFGeUXh8_YzIzbOikBo5Q,13645
50
+ sknetwork/data/parse.py,sha256=k9iJSOrA3cPZwBYuMnTLvaBK3ycDsRStcVq00HCjNO0,27639
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=VDEwMLEuu562G2u22xpwobcNTl756ZiL6Moc4XtJbn4,25243
54
+ sknetwork/data/tests/__init__.py,sha256=LtUcKFe5CeBpspRwa6A2uX2cVEf_uPpOo2mGkH7W8cI,20
55
+ sknetwork/data/tests/test_API.py,sha256=4T9-zFggcr-0aJAENR8ZMOnOvmbltepFhdiQjPt5jC0,993
56
+ sknetwork/data/tests/test_base.py,sha256=2UZOH_c12jCOy-77-ahoj1uGdbmA42pFVrFV9NCAYbU,326
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=vn-TTT9w8TX8Lzof9fV8eEnJr5_NyBj1Zd3rSPB7IU4,2265
62
+ sknetwork/embedding/__init__.py,sha256=hTtHHVXNdwdGSZuAmLvTm3yMmHWxYKrFwwo1MuOPTUI,418
63
+ sknetwork/embedding/base.py,sha256=cm52qsqGsPesvDOF5LxOp8rwLhs36dvNlDu_e9jBU0A,2757
64
+ sknetwork/embedding/force_atlas.py,sha256=yjlL5Qfv19KJdwtziTDOklrW_HP5CkMJIoOL6t2cYsA,7650
65
+ sknetwork/embedding/louvain_embedding.py,sha256=MWPaZyDtmeEsjDaHMqaztn-3T5U_Q7kWnaHTchPzITc,6230
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=ycn5fIaw7K7vTz7_MGxKN8XtDsnTqUIqXIADO8_M_GE,15001
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=0WTNALEfnJoDo5P84DyXmwpcmbuUXqR3G5S_iM0W30A,1149
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=LXIDhxUDxJBLnVnq567yVqs0eTJFPqBhzriPBOqa6k0,1506
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=RmqgyRgKkdU1Bht5i390xulBzLkuvFwqFkUnZGx7r9c,12915
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=MoO0mlvuFUFNYssl1zOAWlcyg-2OLzJI6VFPjIS1FiA,10118
102
+ sknetwork/hierarchy/metrics.py,sha256=5WZLsSLYKifLIQ9aPrXyzvPtTFN5ROSlNivhV-n9VuY,8280
103
+ sknetwork/hierarchy/paris.cp39-win_amd64.pyd,sha256=3X5c7LHsX56UEjA1ThqriaQ3TgWeY0LW5tm6VTSLhgo,226816
104
+ sknetwork/hierarchy/paris.cpp,sha256=vYkuRGN-BYv411ym2455Y_8qnnqvh_k5-rh2dT5wYSI,1472503
105
+ sknetwork/hierarchy/paris.pyx,sha256=CSr7eJBGPQoHff3czQpDuaW3V16ZsgdnVoFQ_rkFWBk,12129
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=sljCTCIXNvanQ3Bf-g0x0jyjXs05EBlCR9Rcy-j9kTU,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=R_98AOBum-W_xsfAIw_xe2Jyo49F24Z6KhUm0W6TDMs,147456
115
+ sknetwork/linalg/diteration.cpp,sha256=zX2-YycRqpq2eEmijzkFuM9aA0M9nxxf11Ax5Gvse6k,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=WIS0rDozRZmDk2LPOEohAOOQib8SNXanzDm9nDZNNEc,165376
124
+ sknetwork/linalg/push.cpp,sha256=_a7JhhX0vQE1EhZ62zvbpPb5rKDagdnX89xtkZyQnPE,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=uZ8dSy2HhO-UMGMR0OyeWl1eW3idGAGl0qfIOFghST8,74752
155
+ sknetwork/ranking/betweenness.cpp,sha256=6OQrJJYyq7Ba7rCmvDVdcC-YyGzNTB1mVdM55a-WIrk,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=CopcR4EN8xN3T-7bz5g65eJLoMioCN0jtSY77w9HR40,8115
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=2hOtZmCEC3cA9dkKg0weU75yMsrcOnT7L7rPMKvHlG8,186368
177
+ sknetwork/topology/cliques.cpp,sha256=AuIbIJg8O1Dq77fy69Qr2slR5wthrB4mohPuJL1j6MI,1223582
178
+ sknetwork/topology/cliques.pyx,sha256=y6Ee5oaX7IdVhXXjSOazqT5dYo4gSTQ8Mq0u1Abg0vw,4659
179
+ sknetwork/topology/core.cp39-win_amd64.pyd,sha256=iWolxUSFutEUMoTADIR7Q9xFTkNMsizNgav9Z6s6Cdc,156672
180
+ sknetwork/topology/core.cpp,sha256=jj7E1c67E65ccw-Ts_6QdPPyR8QIZ3FePVsvjoVcTbg,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=7IGqlJplPox-qu9IBJ-rcS9gL7FdJSSXzm4172K56uI,134656
184
+ sknetwork/topology/minheap.cpp,sha256=YJHIv7zPKiL4r4GexZcGnU6A13pGu4QsFMdOcKccPnA,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=01xwaUZafAS4hBLhYP9c4yuO-uYMxbw1Qm4HNywIqmg,60416
189
+ sknetwork/topology/triangles.cpp,sha256=t-ixPvaku_VWclQD3f5qWDzFG6ltyLfhCLQyPc0WJNE,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=aU379Kqs0hAgXKwm5k6Qc-TAzmW1srD6QovgAjEPBwo,156672
193
+ sknetwork/topology/weisfeiler_lehman_core.cpp,sha256=tUPW6EiP44seR-oLmXmQKxpGwHu9t-FC9cVoG_x0dBc,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=ZF_Xx7FhOeHOsqmiBpwO1_bmGj2uoE6knq47oMpMN70,332
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=fqD2iGRwzPG44Vy6c1Us8koggqkWkRGSENZfJonJ2Uw,2671
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=vLsuL2AUyrc8B5nxM2K713QPRjf7i1PRaoRXYbY44L4,42215
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.33.0.dist-info/AUTHORS.rst,sha256=_GVYaZmiOIOk8o_2X2dGicyCy-1seStrLAZdsk8zKEI,966
224
+ scikit_network-0.33.0.dist-info/LICENSE,sha256=BJ1Hth1QjBmjIfHcp1sVxlkEqHYM58Vn5bcpYcggMZE,1656
225
+ scikit_network-0.33.0.dist-info/METADATA,sha256=PzTdCbvlCrvHqifMwdHv1PYO6hV3Z5SlhJFXu883PgU,14992
226
+ scikit_network-0.33.0.dist-info/WHEEL,sha256=IOiaTK2n2qfpcM4gTpfQdKcMwVKZrIq4mlPd3WeRras,99
227
+ scikit_network-0.33.0.dist-info/top_level.txt,sha256=fkwspWQ9B3csqb5ENEOoVciRY6XftnMuz4MvTDQeSsg,10
228
+ scikit_network-0.33.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.38.4)
2
+ Generator: setuptools (70.3.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.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
  -------