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
@@ -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
  -------
@@ -87,18 +91,22 @@ class Propagation(BaseClassifier):
87
91
  labels = labels[index_seed]
88
92
  return index_seed.astype(np.int32), index_remain.astype(np.int32), labels.astype(np.int32)
89
93
 
90
- def fit(self, input_matrix: Union[sparse.csr_matrix, np.ndarray], labels: Union[np.ndarray, dict] = None,
91
- labels_row: Union[np.ndarray, dict] = None, labels_col: Union[np.ndarray, dict] = None) -> 'Propagation':
94
+ def fit(self, input_matrix: Union[sparse.csr_matrix, np.ndarray], labels: Union[np.ndarray, list, dict] = None,
95
+ labels_row: Union[np.ndarray, list, dict] = None,
96
+ labels_col: Union[np.ndarray, list, dict] = None) -> 'Propagation':
92
97
  """Node classification by label propagation.
93
98
 
94
99
  Parameters
95
100
  ----------
96
- input_matrix :
101
+ input_matrix : sparse.csr_matrix, np.ndarray
97
102
  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).
103
+ labels : array, list or dict
104
+ Known labels. Negative values ignored.
105
+ labels_row : array, list or dict
106
+ Known labels of rows, for bipartite graphs.
107
+ labels_col : array, list or dict
108
+ Known labels of columns, for bipartite graphs.
109
+
102
110
  Returns
103
111
  -------
104
112
  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})