scikit-network 0.31.0__cp311-cp311-win_amd64.whl → 0.32.1__cp311-cp311-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 (114) hide show
  1. {scikit_network-0.31.0.dist-info → scikit_network-0.32.1.dist-info}/AUTHORS.rst +3 -0
  2. {scikit_network-0.31.0.dist-info → scikit_network-0.32.1.dist-info}/METADATA +19 -3
  3. {scikit_network-0.31.0.dist-info → scikit_network-0.32.1.dist-info}/RECORD +112 -105
  4. {scikit_network-0.31.0.dist-info → scikit_network-0.32.1.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 +21 -13
  9. sknetwork/classification/knn.py +19 -13
  10. sknetwork/classification/metrics.py +1 -1
  11. sknetwork/classification/pagerank.py +12 -8
  12. sknetwork/classification/propagation.py +22 -15
  13. sknetwork/classification/tests/test_diffusion.py +10 -0
  14. sknetwork/classification/vote.cp311-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 +241 -0
  20. sknetwork/clustering/leiden_core.cp311-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.cp311-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 +92 -0
  31. sknetwork/clustering/tests/test_leiden.py +34 -0
  32. sknetwork/clustering/tests/test_louvain.py +2 -3
  33. sknetwork/data/load.py +2 -4
  34. sknetwork/data/parse.py +41 -20
  35. sknetwork/data/tests/test_parse.py +9 -12
  36. sknetwork/embedding/__init__.py +0 -1
  37. sknetwork/embedding/base.py +20 -19
  38. sknetwork/embedding/force_atlas.py +3 -2
  39. sknetwork/embedding/louvain_embedding.py +1 -1
  40. sknetwork/embedding/random_projection.py +5 -3
  41. sknetwork/embedding/spectral.py +0 -73
  42. sknetwork/embedding/tests/test_API.py +4 -28
  43. sknetwork/embedding/tests/test_louvain_embedding.py +4 -9
  44. sknetwork/embedding/tests/test_spectral.py +2 -5
  45. sknetwork/embedding/tests/test_svd.py +1 -1
  46. sknetwork/gnn/base_layer.py +3 -3
  47. sknetwork/gnn/gnn_classifier.py +40 -86
  48. sknetwork/gnn/layer.py +1 -1
  49. sknetwork/gnn/loss.py +1 -1
  50. sknetwork/gnn/optimizer.py +4 -3
  51. sknetwork/gnn/tests/test_base_layer.py +4 -4
  52. sknetwork/gnn/tests/test_gnn_classifier.py +12 -39
  53. sknetwork/gnn/utils.py +8 -8
  54. sknetwork/hierarchy/base.py +27 -0
  55. sknetwork/hierarchy/louvain_hierarchy.py +45 -41
  56. sknetwork/hierarchy/paris.cp311-win_amd64.pyd +0 -0
  57. sknetwork/hierarchy/paris.cpp +27521 -20771
  58. sknetwork/hierarchy/paris.pyx +7 -7
  59. sknetwork/hierarchy/postprocess.py +16 -16
  60. sknetwork/hierarchy/tests/test_algos.py +5 -0
  61. sknetwork/linalg/__init__.py +1 -1
  62. sknetwork/linalg/diteration.cp311-win_amd64.pyd +0 -0
  63. sknetwork/linalg/diteration.cpp +13916 -8050
  64. sknetwork/linalg/{normalization.py → normalizer.py} +17 -14
  65. sknetwork/linalg/operators.py +1 -1
  66. sknetwork/linalg/ppr_solver.py +1 -1
  67. sknetwork/linalg/push.cp311-win_amd64.pyd +0 -0
  68. sknetwork/linalg/push.cpp +23187 -16973
  69. sknetwork/linalg/tests/test_normalization.py +3 -7
  70. sknetwork/linalg/tests/test_operators.py +2 -6
  71. sknetwork/linalg/tests/test_ppr.py +1 -1
  72. sknetwork/linkpred/base.py +12 -1
  73. sknetwork/linkpred/nn.py +6 -6
  74. sknetwork/path/distances.py +11 -4
  75. sknetwork/path/shortest_path.py +1 -1
  76. sknetwork/path/tests/test_distances.py +7 -0
  77. sknetwork/path/tests/test_search.py +2 -2
  78. sknetwork/ranking/base.py +11 -6
  79. sknetwork/ranking/betweenness.cp311-win_amd64.pyd +0 -0
  80. sknetwork/ranking/betweenness.cpp +5256 -2190
  81. sknetwork/ranking/pagerank.py +13 -12
  82. sknetwork/ranking/tests/test_API.py +0 -2
  83. sknetwork/ranking/tests/test_betweenness.py +1 -1
  84. sknetwork/ranking/tests/test_pagerank.py +11 -5
  85. sknetwork/regression/base.py +18 -1
  86. sknetwork/regression/diffusion.py +24 -10
  87. sknetwork/regression/tests/test_diffusion.py +8 -0
  88. sknetwork/topology/__init__.py +3 -1
  89. sknetwork/topology/cliques.cp311-win_amd64.pyd +0 -0
  90. sknetwork/topology/cliques.cpp +23528 -16848
  91. sknetwork/topology/core.cp311-win_amd64.pyd +0 -0
  92. sknetwork/topology/core.cpp +22849 -16581
  93. sknetwork/topology/cycles.py +243 -0
  94. sknetwork/topology/minheap.cp311-win_amd64.pyd +0 -0
  95. sknetwork/topology/minheap.cpp +19495 -13469
  96. sknetwork/topology/structure.py +2 -42
  97. sknetwork/topology/tests/test_cycles.py +65 -0
  98. sknetwork/topology/tests/test_structure.py +2 -16
  99. sknetwork/topology/triangles.cp311-win_amd64.pyd +0 -0
  100. sknetwork/topology/triangles.cpp +5283 -1397
  101. sknetwork/topology/triangles.pyx +7 -4
  102. sknetwork/topology/weisfeiler_lehman_core.cp311-win_amd64.pyd +0 -0
  103. sknetwork/topology/weisfeiler_lehman_core.cpp +14781 -8915
  104. sknetwork/utils/format.py +1 -1
  105. sknetwork/utils/membership.py +2 -2
  106. sknetwork/visualization/__init__.py +2 -2
  107. sknetwork/visualization/dendrograms.py +55 -7
  108. sknetwork/visualization/graphs.py +261 -44
  109. sknetwork/visualization/tests/test_dendrograms.py +9 -9
  110. sknetwork/visualization/tests/test_graphs.py +63 -57
  111. sknetwork/embedding/louvain_hierarchy.py +0 -142
  112. sknetwork/embedding/tests/test_louvain_hierarchy.py +0 -19
  113. {scikit_network-0.31.0.dist-info → scikit_network-0.32.1.dist-info}/LICENSE +0 -0
  114. {scikit_network-0.31.0.dist-info → scikit_network-0.32.1.dist-info}/top_level.txt +0 -0
@@ -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
  -------
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  # coding: utf-8
3
3
  """
4
- Created on April 2020
4
+ Created in April 2020
5
5
  @author: Thomas Bonald <tbonald@enst.fr>
6
6
  """
7
7
 
@@ -12,7 +12,7 @@ from scipy import sparse
12
12
 
13
13
  from sknetwork.classification.base import BaseClassifier
14
14
  from sknetwork.classification.vote import vote_update
15
- from sknetwork.linalg.normalization import normalize
15
+ from sknetwork.linalg.normalizer import normalize
16
16
  from sknetwork.utils.format import get_adjacency_values
17
17
  from sknetwork.utils.membership import get_membership
18
18
 
@@ -25,9 +25,9 @@ class Propagation(BaseClassifier):
25
25
  n_iter : float
26
26
  Maximum number of iterations (-1 for infinity).
27
27
  node_order : str
28
- * `'random'`: node labels are updated in random order.
29
- * `'increasing'`: node labels are updated by increasing order of (in-)weight.
30
- * `'decreasing'`: node labels are updated by decreasing order of (in-)weight.
28
+ * ``'random'``: node labels are updated in random order.
29
+ * ``'increasing'``: node labels are updated by increasing order of (in-) weight.
30
+ * ``'decreasing'``: node labels are updated by decreasing order of (in-) weight.
31
31
  * Otherwise, node labels are updated by index order.
32
32
  weighted : bool
33
33
  If ``True``, the vote of each neighbor is proportional to the edge weight.
@@ -36,13 +36,17 @@ class Propagation(BaseClassifier):
36
36
  Attributes
37
37
  ----------
38
38
  labels_ : np.ndarray, shape (n_labels,)
39
- Label of each node.
39
+ Labels of nodes.
40
40
  probs_ : sparse.csr_matrix, shape (n_row, n_labels)
41
41
  Probability distribution over labels.
42
- labels_row_, labels_col_ : np.ndarray
43
- Labels of rows and columns, for bipartite graphs.
44
- probs_row_, probs_col_ : sparse.csr_matrix, shape (n_row, n_labels)
45
- Probability distributions over labels for rows and columns (for bipartite graphs).
42
+ labels_row_ : np.ndarray
43
+ Labels of rows, for bipartite graphs.
44
+ labels_col_ : np.ndarray
45
+ Labels of columns, for bipartite graphs.
46
+ probs_row_ : sparse.csr_matrix, shape (n_row, n_labels)
47
+ Probability distributions over labels of rows, for bipartite graphs.
48
+ probs_col_ : sparse.csr_matrix, shape (n_col, n_labels)
49
+ Probability distributions over labels of columns, for bipartite graphs.
46
50
 
47
51
  Example
48
52
  -------
@@ -93,12 +97,15 @@ class Propagation(BaseClassifier):
93
97
 
94
98
  Parameters
95
99
  ----------
96
- input_matrix :
100
+ input_matrix : sparse.csr_matrix, np.ndarray
97
101
  Adjacency matrix or biadjacency matrix of the graph.
98
- labels :
99
- Known labels (dictionary or array). Negative values ignored.
100
- labels_row, labels_col :
101
- Known labels of rows and columns (for bipartite graphs).
102
+ labels : np.ndarray, dict
103
+ Known labels. Negative values ignored.
104
+ labels_row : np.ndarray, dict
105
+ Known labels of rows, for bipartite graphs.
106
+ labels_col : np.ndarray, dict
107
+ Known labels of columns, for bipartite graphs.
108
+
102
109
  Returns
103
110
  -------
104
111
  self: :class:`Propagation`
@@ -36,6 +36,7 @@ class TestDiffusionClassifier(unittest.TestCase):
36
36
  algo.fit(biadjacency, labels_row=labels_row, labels_col=labels_col)
37
37
  self.assertTrue(len(algo.labels_row_) == n_row)
38
38
  self.assertTrue(len(algo.labels_col_) == n_col)
39
+ self.assertTrue(all(algo.labels_col_ == algo.predict(columns=True)))
39
40
 
40
41
  def test_predict(self):
41
42
  adjacency = test_graph()
@@ -65,3 +66,12 @@ class TestDiffusionClassifier(unittest.TestCase):
65
66
  self.assertTrue(membership.shape == (n_row, 2))
66
67
  membership = algo.transform(columns=True)
67
68
  self.assertTrue(membership.shape == (n_col, 2))
69
+
70
+ def test_reindex_label(self):
71
+ adjacency = test_graph()
72
+ n_nodes = adjacency.shape[0]
73
+ labels = {0: 0, 1: 2, 2: 3}
74
+ algo = DiffusionClassifier()
75
+ labels_pred = algo.fit_predict(adjacency, labels=labels)
76
+ self.assertTrue(len(labels_pred) == n_nodes)
77
+ self.assertTrue(set(list(labels_pred)) == {0, 2, 3})