scikit-network 0.31.0__cp310-cp310-win_amd64.whl → 0.33.0__cp310-cp310-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.cp310-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.cp310-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.cp310-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.cp310-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.cp310-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.cp310-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.cp310-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.cp310-win_amd64.pyd +0 -0
  99. sknetwork/topology/cliques.cpp +23528 -16848
  100. sknetwork/topology/core.cp310-win_amd64.pyd +0 -0
  101. sknetwork/topology/core.cpp +22849 -16581
  102. sknetwork/topology/cycles.py +243 -0
  103. sknetwork/topology/minheap.cp310-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.cp310-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.cp310-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,6 +1,6 @@
1
1
  #!/usr/bin/env python3
2
2
  # -*- coding: utf-8 -*-
3
- """tests for visualization/graphs.py"""
3
+ """tests for visualization of graphs"""
4
4
 
5
5
  import tempfile
6
6
  import unittest
@@ -10,7 +10,7 @@ from scipy import sparse
10
10
 
11
11
  from sknetwork.data.test_graphs import test_disconnected_graph, test_bigraph_disconnect
12
12
  from sknetwork.data.toy_graphs import karate_club, painters, movie_actor, bow_tie, star_wars
13
- from sknetwork.visualization.graphs import svg_graph, svg_bigraph, svg_text, rescale
13
+ from sknetwork.visualization.graphs import visualize_graph, visualize_bigraph, svg_graph, svg_bigraph, svg_text, rescale
14
14
 
15
15
 
16
16
  # noinspection DuplicatedCode
@@ -21,74 +21,77 @@ class TestVisualization(unittest.TestCase):
21
21
  adjacency = graph.adjacency
22
22
  position = graph.position
23
23
  labels = graph.labels
24
+ image = visualize_graph(adjacency, position, labels=labels)
25
+ self.assertEqual(image[1:4], 'svg')
26
+ # alias
24
27
  image = svg_graph(adjacency, position, labels=labels)
25
28
  self.assertEqual(image[1:4], 'svg')
26
- image = svg_graph(adjacency, position, labels=list(labels))
29
+ image = visualize_graph(adjacency, position, labels=list(labels))
27
30
  self.assertEqual(image[1:4], 'svg')
28
- image = svg_graph(adjacency, position, display_edges=False)
31
+ image = visualize_graph(adjacency, position, display_edges=False)
29
32
  self.assertEqual(image[1:4], 'svg')
30
- image = svg_graph(adjacency, position, height=None)
33
+ image = visualize_graph(adjacency, position, height=None)
31
34
  self.assertEqual(image[1:4], 'svg')
32
- image = svg_graph(adjacency, position, height=300, width=None)
35
+ image = visualize_graph(adjacency, position, height=300, width=None)
33
36
  self.assertEqual(image[1:4], 'svg')
34
- image = svg_graph(adjacency, position, height=None, width=200)
37
+ image = visualize_graph(adjacency, position, height=None, width=200)
35
38
  self.assertEqual(image[1:4], 'svg')
36
39
  n = adjacency.shape[0]
37
40
  edge_labels = [(0, 1, 0), (1, 1, 1), (3, 10, 2)]
38
- image = svg_graph(adjacency, position=None, names=np.arange(n), labels=np.arange(n), scores=np.arange(n),
39
- seeds=[0, 1], width=200, height=200, margin=10, margin_text=5, scale=3,
40
- node_order=np.flip(np.arange(n)),
41
- node_size=5, node_size_min=2, node_size_max=6, display_node_weight=True,
42
- node_weights=np.arange(n),
43
- node_width=2, node_width_max=5, node_color='red', edge_width=2, edge_width_min=2,
44
- edge_width_max=4, edge_color='blue', edge_labels=edge_labels, display_edge_weight=True,
45
- font_size=14)
41
+ image = visualize_graph(adjacency, position=None, names=np.arange(n), labels=np.arange(n), scores=np.arange(n),
42
+ seeds=[0, 1], width=200, height=200, margin=10, margin_text=5, scale=3,
43
+ node_order=np.flip(np.arange(n)),
44
+ node_size=5, node_size_min=2, node_size_max=6, display_node_weight=True,
45
+ node_weights=np.arange(n),
46
+ node_width=2, node_width_max=5, node_color='red', edge_width=2, edge_width_min=2,
47
+ edge_width_max=4, edge_color='blue', edge_labels=edge_labels, display_edge_weight=True,
48
+ font_size=14)
46
49
  self.assertEqual(image[1:4], 'svg')
47
- image = svg_graph(adjacency, position=None, labels={0: 0})
50
+ image = visualize_graph(adjacency, position=None, labels={0: 0})
48
51
  self.assertEqual(image[1:4], 'svg')
49
- image = svg_graph(adjacency, position=None, scores={0: 0})
52
+ image = visualize_graph(adjacency, position=None, scores={0: 0})
50
53
  self.assertEqual(image[1:4], 'svg')
51
- image = svg_graph(adjacency=None, position=position)
54
+ image = visualize_graph(adjacency=None, position=position)
52
55
  self.assertEqual(image[1:4], 'svg')
53
- image = svg_graph(adjacency=None, position=position, edge_labels=edge_labels)
56
+ image = visualize_graph(adjacency=None, position=position, edge_labels=edge_labels)
54
57
  self.assertEqual(image[1:4], 'svg')
55
- image = svg_graph(adjacency, position, labels, label_colors={0: "red", 1: "blue"})
58
+ image = visualize_graph(adjacency, position, labels, label_colors={0: "red", 1: "blue"})
56
59
  self.assertEqual(image[1:4], 'svg')
57
- image = svg_graph(adjacency, position, labels, label_colors=["red", "blue"])
60
+ image = visualize_graph(adjacency, position, labels, label_colors=["red", "blue"])
58
61
  self.assertEqual(image[1:4], 'svg')
59
- image = svg_graph(adjacency, position, labels, node_weights=np.arange(adjacency.shape[0]))
62
+ image = visualize_graph(adjacency, position, labels, node_weights=np.arange(adjacency.shape[0]))
60
63
  self.assertEqual(image[1:4], 'svg')
61
- image = svg_graph(adjacency, position, scores=list(np.arange(n)))
64
+ image = visualize_graph(adjacency, position, scores=list(np.arange(n)))
62
65
  self.assertEqual(image[1:4], 'svg')
63
- image = svg_graph(adjacency, position, seeds={0: 1, 2: 1})
66
+ image = visualize_graph(adjacency, position, seeds={0: 1, 2: 1})
64
67
  self.assertEqual(image[1:4], 'svg')
65
- image = svg_graph(adjacency, position, labels=np.arange(n), name_position='left')
68
+ image = visualize_graph(adjacency, position, labels=np.arange(n), name_position='left')
66
69
  self.assertEqual(image[1:4], 'svg')
67
- image = svg_graph(adjacency, position, scale=2, labels=np.arange(n), name_position='left')
70
+ image = visualize_graph(adjacency, position, scale=2, labels=np.arange(n), name_position='left')
68
71
  self.assertEqual(image[1:4], 'svg')
69
72
  with self.assertRaises(ValueError):
70
- svg_graph(adjacency, position, labels=[0, 1])
73
+ visualize_graph(adjacency, position, labels=[0, 1])
71
74
  with self.assertRaises(ValueError):
72
- svg_graph(adjacency, position, scores=[0, 1])
73
- svg_graph(adjacency, position, scale=2, labels=np.arange(n), name_position='left')
75
+ visualize_graph(adjacency, position, scores=[0, 1])
76
+ visualize_graph(adjacency, position, scale=2, labels=np.arange(n), name_position='left')
74
77
 
75
78
  def test_directed(self):
76
79
  graph = painters(True)
77
80
  adjacency = graph.adjacency
78
81
  position = graph.position
79
82
  names = graph.names
80
- image = svg_graph(adjacency, position, names=names)
83
+ image = visualize_graph(adjacency, position, names=names)
81
84
  self.assertEqual(image[1:4], 'svg')
82
- image = svg_graph(adjacency, position, display_edges=False)
85
+ image = visualize_graph(adjacency, position, display_edges=False)
83
86
  self.assertEqual(image[1:4], 'svg')
84
87
  n = adjacency.shape[0]
85
- image = svg_graph(adjacency, position=None, names=np.arange(n), labels=np.arange(n), scores=np.arange(n),
86
- name_position='below', seeds=[0, 1], width=200, height=200, margin=10, margin_text=5,
87
- scale=3, node_order=np.flip(np.arange(n)),
88
- node_size=5, node_size_min=2, node_size_max=6, display_node_weight=True,
89
- node_weights=np.arange(n),
90
- node_width=2, node_width_max=5, node_color='red', edge_width=2, edge_width_min=2,
91
- edge_width_max=4, edge_color='blue', display_edge_weight=True, font_size=14)
88
+ image = visualize_graph(adjacency, position=None, names=np.arange(n), labels=np.arange(n), scores=np.arange(n),
89
+ name_position='below', seeds=[0, 1], width=200, height=200, margin=10, margin_text=5,
90
+ scale=3, node_order=np.flip(np.arange(n)),
91
+ node_size=5, node_size_min=2, node_size_max=6, display_node_weight=True,
92
+ node_weights=np.arange(n),
93
+ node_width=2, node_width_max=5, node_color='red', edge_width=2, edge_width_min=2,
94
+ edge_width_max=4, edge_color='blue', display_edge_weight=True, font_size=14)
92
95
  self.assertEqual(image[1:4], 'svg')
93
96
 
94
97
  def test_bipartite(self):
@@ -96,54 +99,57 @@ class TestVisualization(unittest.TestCase):
96
99
  biadjacency = graph.biadjacency
97
100
  names_row = graph.names_row
98
101
  names_col = graph.names_col
102
+ image = visualize_bigraph(biadjacency, names_row, names_col)
103
+ self.assertEqual(image[1:4], 'svg')
104
+ # alias
99
105
  image = svg_bigraph(biadjacency, names_row, names_col)
100
106
  self.assertEqual(image[1:4], 'svg')
101
- image = svg_bigraph(biadjacency, display_edges=False)
107
+ image = visualize_bigraph(biadjacency, display_edges=False)
102
108
  self.assertEqual(image[1:4], 'svg')
103
- image = svg_bigraph(biadjacency, reorder=False)
109
+ image = visualize_bigraph(biadjacency, reorder=False)
104
110
  self.assertEqual(image[1:4], 'svg')
105
111
  n_row, n_col = biadjacency.shape
106
112
  position_row = np.random.random((n_row, 2))
107
113
  position_col = np.random.random((n_col, 2))
108
114
  edge_labels = [(0, 1, 0), (1, 1, 1), (3, 10, 2)]
109
- image = svg_bigraph(biadjacency=biadjacency, names_row=np.arange(n_row), names_col=np.arange(n_col),
110
- labels_row=np.arange(n_row), labels_col=np.arange(n_col), scores_row=np.arange(n_row),
111
- scores_col=np.arange(n_col), seeds_row=[0, 1], seeds_col=[1, 2],
112
- position_row=position_row, position_col=position_col, color_row='red', color_col='white',
113
- width=200, height=200, margin=10, margin_text=5, scale=3, node_size=5,
114
- node_size_min=1, node_size_max=30, node_weights_row=np.arange(n_row),
115
- node_weights_col=np.arange(n_col), display_node_weight=True, node_width=2, node_width_max=5,
116
- edge_labels=edge_labels, edge_width=2, edge_width_min=0.3, edge_width_max=4,
117
- edge_color='red', display_edge_weight=True, font_size=14)
115
+ image = visualize_bigraph(biadjacency=biadjacency, names_row=np.arange(n_row), names_col=np.arange(n_col),
116
+ labels_row=np.arange(n_row), labels_col=np.arange(n_col), scores_row=np.arange(n_row),
117
+ scores_col=np.arange(n_col), seeds_row=[0, 1], seeds_col=[1, 2],
118
+ position_row=position_row, position_col=position_col, color_row='red', color_col='white',
119
+ width=200, height=200, margin=10, margin_text=5, scale=3, node_size=5,
120
+ node_size_min=1, node_size_max=30, node_weights_row=np.arange(n_row),
121
+ node_weights_col=np.arange(n_col), display_node_weight=True, node_width=2, node_width_max=5,
122
+ edge_labels=edge_labels, edge_width=2, edge_width_min=0.3, edge_width_max=4,
123
+ edge_color='red', display_edge_weight=True, font_size=14)
118
124
  self.assertEqual(image[1:4], 'svg')
119
125
 
120
126
  def test_disconnect(self):
121
127
  adjacency = test_disconnected_graph()
122
128
  position = np.random.random((adjacency.shape[0], 2))
123
- image = svg_graph(adjacency, position)
129
+ image = visualize_graph(adjacency, position)
124
130
  self.assertEqual(image[1:4], 'svg')
125
131
  biadjacency = test_bigraph_disconnect()
126
- image = svg_bigraph(biadjacency)
132
+ image = visualize_bigraph(biadjacency)
127
133
  self.assertEqual(image[1:4], 'svg')
128
134
 
129
135
  def test_probs(self):
130
136
  adjacency = bow_tie()
131
137
  probs = np.array([[.5, .5], [0, 0], [1, 0], [0, 1], [0, 1]])
132
- image = svg_graph(adjacency, probs=probs)
138
+ image = visualize_graph(adjacency, probs=probs)
133
139
  self.assertEqual(image[1:4], 'svg')
134
140
  probs = sparse.csr_matrix(probs)
135
- image = svg_graph(adjacency, probs=probs)
141
+ image = visualize_graph(adjacency, probs=probs)
136
142
  self.assertEqual(image[1:4], 'svg')
137
143
  biadjacency = star_wars()
138
144
  probs_row = sparse.csr_matrix([[.5, .5], [0, 0], [1, 0], [0, 1]])
139
145
  probs_col = sparse.csr_matrix([[.5, .5], [0, 0], [1, 0]])
140
- image = svg_bigraph(biadjacency, probs_row=probs_row, probs_col=probs_col)
146
+ image = visualize_bigraph(biadjacency, probs_row=probs_row, probs_col=probs_col)
141
147
  self.assertEqual(image[1:4], 'svg')
142
148
 
143
149
  def test_labels(self):
144
150
  adjacency = bow_tie()
145
151
  names = ["aa", "bb", "<>", "a&b", ""]
146
- image = svg_graph(adjacency, names=names)
152
+ image = visualize_graph(adjacency, names=names)
147
153
  self.assertEqual(image[1:4], 'svg')
148
154
 
149
155
  def test_text(self):
@@ -160,11 +166,11 @@ class TestVisualization(unittest.TestCase):
160
166
  graph = karate_club(True)
161
167
  adjacency = graph.adjacency
162
168
  position = graph.position
163
- _ = svg_graph(adjacency, position, filename=filename)
169
+ _ = visualize_graph(adjacency, position, filename=filename)
164
170
  with open(filename + '.svg', 'r') as f:
165
171
  row = f.readline()
166
172
  self.assertEqual(row[1:4], 'svg')
167
- _ = svg_bigraph(adjacency, position, filename=filename)
173
+ _ = visualize_bigraph(adjacency, position, filename=filename)
168
174
  with open(filename + '.svg', 'r') as f:
169
175
  row = f.readline()
170
176
  self.assertEqual(row[1:4], 'svg')
@@ -1,221 +0,0 @@
1
- sknetwork/__init__.py,sha256=kBpEmTMrIJ3j_joqBDtQZvyALtCVOc41FnSvwUNMtCQ,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=JyRplfH2EdmXLMkE65HE-Oes8qpAyicZG8pL7_-vvnU,4424
9
- sknetwork/classification/base_rank.py,sha256=pAEbkFJWg_6iJTe37PPTQf0FTlzb4NyYhFC-DG-gTPg,4660
10
- sknetwork/classification/diffusion.py,sha256=gHa07SeI07LIRBhhUY1EZPJaAUb-8To5b699bp3_BWI,5146
11
- sknetwork/classification/knn.py,sha256=-a0Uny_yyGoc4JZ-dPqzouoCMCWQLzEkqcSceuEgnok,5128
12
- sknetwork/classification/metrics.py,sha256=1sPqOqliIexvL6ozNy9QTDKfHLV9Sqz5rGoSr3Gjv0M,7012
13
- sknetwork/classification/pagerank.py,sha256=1B5V-l7pYa4Bvl4o58VByYqxanDA6qKGJ71IS_EXMnI,2485
14
- sknetwork/classification/propagation.py,sha256=eHEG4plzQwxIXvp7mEMJVv23uhUn35iEWTVKjELtsWI,5614
15
- sknetwork/classification/vote.cp310-win_amd64.pyd,sha256=hA1WHQgi0nPO4Hg7IHwEaVUOSXQti21PtIW_Mbt7O_M,126464
16
- sknetwork/classification/vote.cpp,sha256=nX38hIU5dURwY9okIosSpp36JCN7SVD9f9YabRrjBEY,794586
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=lokZLSmvAw0unEWQ6IDPz5DjyEo2uWbmCbX18uzUxK0,2816
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=HAWSDCezfp1FkAQPIxOinB84G_L4cOlrjwnLyqPUths,343
26
- sknetwork/clustering/base.py,sha256=_4VBTkhqk11UuL_TCrdUARJ5Q4RTRQvaQ36sB-RF61s,6107
27
- sknetwork/clustering/louvain.py,sha256=9OJX0KcjVyO-BtNTIRCQJZejriS2dsMzAPoYk6YHYE0,9961
28
- sknetwork/clustering/louvain_core.cp310-win_amd64.pyd,sha256=g_zEYAs70vmBQp1bQgshyK-4WJWYZlwUitsR9B4M5aM,162304
29
- sknetwork/clustering/louvain_core.cpp,sha256=BJ09lz5YcgfzH1k5DUqk5mtQ9eDGU_DY3tRkXub5m4E,955083
30
- sknetwork/clustering/louvain_core.pyx,sha256=SQMoZxV2t7CRKShc16aC0Ry-_ZSMl-Gm-91B1fvbrjY,4617
31
- sknetwork/clustering/metrics.py,sha256=ptLLtUpFtdKLZ4lcx_MN-PpOrzv--PWhAcEFoFghccM,3151
32
- sknetwork/clustering/postprocess.py,sha256=Xk9FOPPBLemoROd--qgd9gc4I6xgMOXPKG-LSXqfEZQ,2101
33
- sknetwork/clustering/propagation_clustering.py,sha256=HMTZB_kuwoSOrPgzSTJ-sC0y9PRcm6TLQwE5O5nX8Dc,3840
34
- sknetwork/clustering/tests/__init__.py,sha256=tCA27jkL3pdstka9XWQEA1NbC6ZqL7Rf-1V1UcySCEE,28
35
- sknetwork/clustering/tests/test_API.py,sha256=0bDJZkcLQc8HkASnEgV89-OJ2-W02etjqUHPzflRH8I,1518
36
- sknetwork/clustering/tests/test_louvain.py,sha256=nkYC0zHd0n5eUhZxbLpKZPP-J1gZyn2jtuFAWPgBmq0,4811
37
- sknetwork/clustering/tests/test_metrics.py,sha256=ZTr4T-d-g6kQJinei9VH6Teb_rOScmj5XLG168EI5LQ,1868
38
- sknetwork/clustering/tests/test_postprocess.py,sha256=41l4coS_1CHqGOCnnucqxU6UkXws89YVMjef162ZTEQ,1417
39
- sknetwork/data/__init__.py,sha256=QScOMfOfm2j7rPaNLPGNc9TwHQGebWRZCBHHbmZarO8,265
40
- sknetwork/data/base.py,sha256=O_EN3j1hoSbHc96qxx-dAe5SsLGdLE1cqiX9fl0xjAw,658
41
- sknetwork/data/load.py,sha256=XJ6vcSh09O1hNI82k40nRJJF674npeG9DHk5wjzvsJE,14931
42
- sknetwork/data/models.py,sha256=luDuvYYcruOEw94iXNEnl5IbYJCVGtxB6jhDWVBmJH0,13615
43
- sknetwork/data/parse.py,sha256=-EgABauVkJ2EJS0NOp7_H5wNdqw6WPfZYAHs-6Fhtfg,26329
44
- sknetwork/data/test_graphs.py,sha256=KRRok5ElYWh1NV3i_2enLLjdeKe8zBg_3xqFXgOOY6I,2568
45
- sknetwork/data/timeout.py,sha256=mXSqgKFRc6AVZBlIobN2xPYJjAyQOClKH3KQJ5M_4Sw,1085
46
- sknetwork/data/toy_graphs.py,sha256=xdgNQjzwswpkCVioUR0_EzoQiS6QbuOAD0mgTs3Fphg,25654
47
- sknetwork/data/tests/__init__.py,sha256=LtUcKFe5CeBpspRwa6A2uX2cVEf_uPpOo2mGkH7W8cI,20
48
- sknetwork/data/tests/test_API.py,sha256=aytP2cJV9px-d-SogJn4SYPnTFJ1Xt2coEW7-EiljjM,987
49
- sknetwork/data/tests/test_base.py,sha256=h1-1fEyWuVpAOnZDFmkSuhngrQdv3N2vEMa_Wpt8dVU,322
50
- sknetwork/data/tests/test_load.py,sha256=wuLVlJ-lquoIrsr0UBI-gakW7BjGBZaSyEPavxX0NVY,3645
51
- sknetwork/data/tests/test_models.py,sha256=_2y5xZrWbE3XZltd4n-z84YwyJhPcpaBa2TxXMvhXF4,1967
52
- sknetwork/data/tests/test_parse.py,sha256=jJtOu9oQ920a8hzce_p0PPfBmjWtt6yfxPH-Azs0SV0,13006
53
- sknetwork/data/tests/test_test_graphs.py,sha256=3QWshIikkBtRl3C7ATc_zO5UkwOh1wZwD7gYm0CEj8o,878
54
- sknetwork/data/tests/test_toy_graphs.py,sha256=wQ2X-CVv9oycBUAaB68aJqg-0o3yMlaVtZ9D4thZJrc,2205
55
- sknetwork/embedding/__init__.py,sha256=XvDQcRkxf5Kbf51Ai6X74AgSAXMarFgP8_AGxeIZY7Q,479
56
- sknetwork/embedding/base.py,sha256=cupvrObiI19invfNBrfQtUqtMgYyKMb_gCUF-c3da_k,2851
57
- sknetwork/embedding/force_atlas.py,sha256=D1UOepcBnAXGleC-kCxIIRY1o5kPj-jLRUWw15IagR4,7626
58
- sknetwork/embedding/louvain_embedding.py,sha256=eU6THTLBqTokRwhj7q7lztXpXjla5LazGbgAHagleP8,7127
59
- sknetwork/embedding/louvain_hierarchy.py,sha256=PYfBgOyN6Bi61PNlbQIW6dD-6-fz5m7v2UMvy5lYKpo,5850
60
- sknetwork/embedding/random_projection.py,sha256=enjMO6sltf4zBLmavqS17X0iknrir5GkDWe8Rfgx7gQ,5053
61
- sknetwork/embedding/spectral.py,sha256=wZspZ9MvjwK9G-b3ys7gr8fD4goeWigYwd7mXMDcTUM,8335
62
- sknetwork/embedding/spring.py,sha256=Cl1airI_mSWmV1isKmcxqjY1uxw7NcH7xMwHc8ADmHA,7349
63
- sknetwork/embedding/svd.py,sha256=isI2y9GfCGA5VJmogHrtq2MDVaxuWCZsEvh4YqgfB2k,15097
64
- sknetwork/embedding/tests/__init__.py,sha256=PsZQYFNrSmRW_KIuNX3qVtxtZVn8yV18d0mk8Y6ieck,27
65
- sknetwork/embedding/tests/test_API.py,sha256=CVIg2qkAOCjz2dgGdT8gCImXiICRGX0KZGrKC-9LQTU,2652
66
- sknetwork/embedding/tests/test_force_atlas.py,sha256=dYiyWroqB7UKNW9MTYpGP6e7tF_qPWqVZNmZBndd_ks,1155
67
- sknetwork/embedding/tests/test_louvain_embedding.py,sha256=bsjMQy4nTmBLtrpalzr-8sKXOksZ5HvInRtYLrNSD9k,1189
68
- sknetwork/embedding/tests/test_louvain_hierarchy.py,sha256=QgOQRz0dkw-CesDk78wWKOD-bbR_tqHEBvitfn7POIY,753
69
- sknetwork/embedding/tests/test_random_projection.py,sha256=zz6q0G-pG-G2gOefhr-yuPBQhNDNtXB8jz7_dld1ZpE,1221
70
- sknetwork/embedding/tests/test_spectral.py,sha256=B7QR01IhxAbS-j4nFxY5TxReiP425u6B77-WXLShLy4,4348
71
- sknetwork/embedding/tests/test_spring.py,sha256=z3eT-mFcfNSoMWPKQF-Dz_ZjAsJplQrx1yspiaeFRBw,1693
72
- sknetwork/embedding/tests/test_svd.py,sha256=jn8Osv7eMzWHfdtFkuCB189cdJ0v2Af4Bm9bQ7QjzmQ,1212
73
- sknetwork/gnn/__init__.py,sha256=808PNZEYNHZrIBpKqPzAMKES8yhN6QXEVUWkZVJIJWI,529
74
- sknetwork/gnn/activation.py,sha256=rhvEXgrIix4nZ9I3WYZ0e1MID_DESCCC_XlVcOa4Wpo,3677
75
- sknetwork/gnn/base.py,sha256=qHnKsfsUW4LIdwm3vzfAahBjweCkIDRzk62i4piNBuc,5889
76
- sknetwork/gnn/base_activation.py,sha256=Kxs_d4aPOpMRXZMBAW7WKkA_uWLXRM7XM-JqE4nFHhc,2395
77
- sknetwork/gnn/base_layer.py,sha256=mGiMee2HKAdqlBcKLvr6ylRG-BrraBg68cGe4n6S-Q0,4085
78
- sknetwork/gnn/gnn_classifier.py,sha256=wgP03SVNOXrPiBnKw061iLY3RFkZrp9UeDWYwk7cMXc,14746
79
- sknetwork/gnn/layer.py,sha256=agAIKeoWcae4-QBeztGDCmowq68U_Cv3m2-4jZWBE04,5684
80
- sknetwork/gnn/loss.py,sha256=2cSOj-MbXjmrZbH-KQdEG6IYvSjdwMCnN7SUnI_fd7U,5342
81
- sknetwork/gnn/neighbor_sampler.py,sha256=l5OkylbRQsDpmkfeHAaSA7gHi5l7OUKtL4YvH-YTMWM,1929
82
- sknetwork/gnn/optimizer.py,sha256=DNL4AXAkO5bUhyK34MFBlZ7QaydYNtgjbhjJ_kjUsN4,5902
83
- sknetwork/gnn/utils.py,sha256=OZQuxNO2CAe_KVuXNCFyOzYA1HqwpJFWWpuuhlSesaU,4448
84
- sknetwork/gnn/tests/__init__.py,sha256=_q1IzwMWdNgX90qzdbVkr0LV4NTjFzXg81z4-TM93cw,21
85
- sknetwork/gnn/tests/test_activation.py,sha256=UznwTCvOeCX80n5urtoDhnM8lskDM67AsVFiY-ViqzU,2543
86
- sknetwork/gnn/tests/test_base.py,sha256=EN3QjzsSwzpOgyIYHwA6mgCDRBigx7YQ5iSQXQbw_pM,3468
87
- sknetwork/gnn/tests/test_base_layer.py,sha256=J1cVNOXOe1_iwaKqq6EAFBa_KG-fVthDDEETNWJaNqw,1432
88
- sknetwork/gnn/tests/test_gnn_classifier.py,sha256=xw7CKwTEltLBA5hI2ZVZmdbeGato4btLH4ia_tG_bbA,7120
89
- sknetwork/gnn/tests/test_layers.py,sha256=6Rbz_jJm3m5e6XWZA3P8Bfzlss9nBoiE4rSz2Tc-QKo,3256
90
- sknetwork/gnn/tests/test_loss.py,sha256=QvzXKW_xzirXUSkiDm9HgqJPHJdd55FOpuHWZzxyeKs,1078
91
- sknetwork/gnn/tests/test_neigh_sampler.py,sha256=7yhKZSRg2sZd3kFNs-qdj1LKgM7X8xZBNoOYYkYRfek,721
92
- sknetwork/gnn/tests/test_optimizer.py,sha256=OZnIeO__kNt8HXLHr-WHGzvDsTy4LvJ19p9jcFVzXME,1823
93
- sknetwork/gnn/tests/test_utils.py,sha256=MJvOXEWouRiIVaPM76W0hizt3jFb-1_BXHLd1zkPzSg,1884
94
- sknetwork/hierarchy/__init__.py,sha256=-2-y7iBVQRanXLSl9kY8VASJVqx37trYmVNcz74QsUc,418
95
- sknetwork/hierarchy/base.py,sha256=ugPo_VM6sPfZusqAAxcyaV02vP64SJbi91KjoxxozTs,2091
96
- sknetwork/hierarchy/louvain_hierarchy.py,sha256=QWgGQNoZxRoOBULDbC-1J-jRg7duDX8ItcL19WHpIlY,9367
97
- sknetwork/hierarchy/metrics.py,sha256=5WZLsSLYKifLIQ9aPrXyzvPtTFN5ROSlNivhV-n9VuY,8280
98
- sknetwork/hierarchy/paris.cp310-win_amd64.pyd,sha256=eH5WGnA6mPKomBgfMosz6QhAfE18jPaTtsMjJYhbDPs,189440
99
- sknetwork/hierarchy/paris.cpp,sha256=2GCmXkOtFkRhcst8hZfZlTK8CywVZoJhjSfR2QaAhvs,1191817
100
- sknetwork/hierarchy/paris.pyx,sha256=YVB5H1AtBDvWgX5kywaSaxnYgiQhSzu-9_3Yqj7aCAs,11915
101
- sknetwork/hierarchy/postprocess.py,sha256=h8v3Ft0li53ewkbpdeiM4j2Xw8tjPbvpJkpqIJstZ-Y,12313
102
- sknetwork/hierarchy/tests/__init__.py,sha256=jRlC4pbyKuxaiXvByYK-4ix7DwYWxpjwKNvSXZ7rQJE,27
103
- sknetwork/hierarchy/tests/test_API.py,sha256=f0QtuCDA5dRwhPogtwbjsVlDRTpk84ewkXgc6rHCSWU,744
104
- sknetwork/hierarchy/tests/test_algos.py,sha256=DtIlYH9zqX0tiX0nmuvL5jTAZiqMhb56F7IQRV-jeMc,1172
105
- sknetwork/hierarchy/tests/test_metrics.py,sha256=rcdFVeWf50bYnem55gmUaDfE6AmJuW8RtYEQcigqZ60,3222
106
- sknetwork/hierarchy/tests/test_postprocess.py,sha256=Bm1_XU6OgwZr_1B28IA5m_HZRqI7GMwlTLpzkXux__Y,2266
107
- sknetwork/linalg/__init__.py,sha256=_qdALdabKv3x8CAuhq6UB4R9jRewNfpgh6XCRnhHvCE,545
108
- sknetwork/linalg/basics.py,sha256=WDlylrkBTCQpjXGtzs8kshJYfpo0h3uM8TMhHmnAnnM,1179
109
- sknetwork/linalg/diteration.cp310-win_amd64.pyd,sha256=biKSHJ12CS4QfWO7NUID1jE5MZ1TZT5wV1lqJcgr8dM,116736
110
- sknetwork/linalg/diteration.cpp,sha256=UaIFr5VOvl1YCYE2YtH0EhbfSvMSmuVeHSvRf3cB_JE,791453
111
- sknetwork/linalg/diteration.pyx,sha256=1r7a1usqftiBNTPOAwHFQPK__nZ67J-87wQLM25GqEU,1431
112
- sknetwork/linalg/eig_solver.py,sha256=lMqxTg66_T-LsgGqc9oo_ngxpTceekavnCFOANWEpPA,2793
113
- sknetwork/linalg/laplacian.py,sha256=qifd-8iltcTKCQW-7fG5z3XfwVrrrCeaBqbViBQCLf0,416
114
- sknetwork/linalg/normalization.py,sha256=-bmgWOLZtzfCd7U4NBJ2h5f6m2C6BbYvtRwAoptp_Eo,2423
115
- sknetwork/linalg/operators.py,sha256=PPGw20FDAXWj89_CD-lVVh9oA30-O29-XtN_yIygKcM,7660
116
- sknetwork/linalg/polynome.py,sha256=qnIhfpRk26JMinuNCrZO1EDj5ci65ZLxkKJyhO7HxpE,2201
117
- sknetwork/linalg/ppr_solver.py,sha256=Vr8H5f3R8qwvqlhmvlt8p2t09v83WCLyx9mlCvXVLe8,6706
118
- sknetwork/linalg/push.cp310-win_amd64.pyd,sha256=mNaytKtPt7atPP8oRrMNTvdx6tHcWfSphO-p_JWxDs0,132096
119
- sknetwork/linalg/push.cpp,sha256=5WuXwnkFat9lOUijko0fybc9Iee42DmTjjNsHzIk_lk,911049
120
- sknetwork/linalg/push.pyx,sha256=79ycseJ1jOznzc1_KSexTGy_0dlX1jQVnf_WI8Ufvgc,2429
121
- sknetwork/linalg/sparse_lowrank.py,sha256=-6-cNRs6tpiNqA8ah3mBKWap3Nh9GQHTFIarPjIiC7U,5170
122
- sknetwork/linalg/svd_solver.py,sha256=XxP4AyKQInBQN3imcbtahXseZ4YyKj4ZI2UAJK1mDs4,2772
123
- sknetwork/linalg/tests/__init__.py,sha256=i2cO6oXoryXdEJ-HdSFZsY7LZdNit7W3GC8J8LAUMU4,24
124
- sknetwork/linalg/tests/test_eig.py,sha256=c_BpjP_S7xCwYgk2N7kaFfsjV1-nfUYCu3Rys07bPeo,1548
125
- sknetwork/linalg/tests/test_laplacian.py,sha256=iGI4bFmYfhCbymlN4wcnE0tV9GmApC3g7bDL3Qx8dR0,452
126
- sknetwork/linalg/tests/test_normalization.py,sha256=mwUzdftJg0ZucOi5hf1X0dqOhfMJWyhjpIdymIYeEyc,1142
127
- sknetwork/linalg/tests/test_operators.py,sha256=0m5jWpCuK-gLfq6EdclDC69KxNViYM_2AfNiAPt7QMU,3179
128
- sknetwork/linalg/tests/test_polynome.py,sha256=-F0iMhYd1lVFau6ILxq7Mr5BtJxJPB-TX3ya3tQwzOM,1015
129
- sknetwork/linalg/tests/test_ppr.py,sha256=uN8vTEemFSDLJJYW2W9EVKb8x25ynB8Bez0D7q-B3NQ,2139
130
- sknetwork/linalg/tests/test_sparse_lowrank.py,sha256=Vqeey1W8jB85zT0L4c5TEGTL0hyQ9zX4FQ6EEI4tmHE,2337
131
- sknetwork/linalg/tests/test_svd.py,sha256=9Uu89-1vTlaJ_H82MUwzGz-iiYf_wFiZMyfelVBRHMI,1323
132
- sknetwork/linkpred/__init__.py,sha256=a7t20Q3xpm1M5IXnyErmucoQuHnGwPTNKAD42oYHEWQ,74
133
- sknetwork/linkpred/base.py,sha256=7eoKAAHSs5a31wRooV7MAHS6aDyeSz9sdDYbBo5JD7M,782
134
- sknetwork/linkpred/nn.py,sha256=I9r5xiob1lFAcNfF7369LOLzwZMJJrzFofJOvEL0Sws,4085
135
- sknetwork/linkpred/tests/__init__.py,sha256=vghxhmK0F5SJOYIb9HZV0h3AVXsCVEPwkgfM7aPpV9M,33
136
- sknetwork/linkpred/tests/test_nn.py,sha256=-1r8LyU34XXvhHnvJA53fGmOd6Ei2jGG6-LHtYvHYGc,1010
137
- sknetwork/path/__init__.py,sha256=FU7sn-HrqXGbJQzCIlQgE95LGDwwMRzBe-qp4rTt-3A,227
138
- sknetwork/path/dag.py,sha256=UAhn3uL2hlCybyOY0ZBnFh1aJnWwWpZ4pfhg-Ay2JKU,1722
139
- sknetwork/path/distances.py,sha256=f_XrITrz_EkTzNmclOomkGwH1abZ-PiwFlgFufrS0qA,3445
140
- sknetwork/path/search.py,sha256=SD6iV6m_OdygudaJ3vaNyLQtlGZrHjfCvA0BIFPPAN0,807
141
- sknetwork/path/shortest_path.py,sha256=jvijMKYg9p-u5__P7WHhzvkNyBwJSn_29GIeYpS2q-g,2509
142
- sknetwork/path/tests/__init__.py,sha256=ntNGJ8p6RZkIrYnePF-TESyoidEXx8fw6A9OBNAlIqo,29
143
- sknetwork/path/tests/test_dag.py,sha256=lualgStm0Boqx88j38tNuRKrW7Ala5ZfIHzlKdFbVRM,975
144
- sknetwork/path/tests/test_distances.py,sha256=yNkg6MiH3nfrFvEuL_DGMgiUkKa8SyhlqudOhwCoPR0,2327
145
- sknetwork/path/tests/test_search.py,sha256=JqauA2PRb-NbmMhlX80GEe2iNQAhSVdqu1G3eKDkri8,1243
146
- sknetwork/path/tests/test_shortest_path.py,sha256=zeM-qgbTs3i29gvF568otKOKgv_pbryV_yGefThLEIY,1422
147
- sknetwork/ranking/__init__.py,sha256=lbkUSZ3alkLK0xGiUx5ptPqhQKIjIKK80uPk0KymJPc,356
148
- sknetwork/ranking/base.py,sha256=7HxTw136hWuqOHPLgtpcboWZTxBx00tBYuJt-O9P7q8,1497
149
- sknetwork/ranking/betweenness.cp310-win_amd64.pyd,sha256=681Ro-R6GGaUmLI7Y7LC8ZKV7f7nlTNVl80Xo9-QXHY,65536
150
- sknetwork/ranking/betweenness.cpp,sha256=ap4WiJkEEFNIy5xFBp1AuE3ga7roheOp1hpzaPGG6I8,265626
151
- sknetwork/ranking/betweenness.pyx,sha256=fe5_gwRQ0TaFi_0-vUGfy6XC5kW5un5xly7-xVDgxrU,3184
152
- sknetwork/ranking/closeness.py,sha256=CvdAaqsM8HvAi6zGCuLcVF0BUu9n9UPBz_YxZhFF_sM,2932
153
- sknetwork/ranking/hits.py,sha256=uhGJH2C0U9hLsVRutI6M1ulbEIM7L6dCeYqiAhtTD9A,2855
154
- sknetwork/ranking/katz.py,sha256=WQpxJq_qqvjFm1ZG_P1ynfpzLlPu-dXCJ9luK-8sRjY,2618
155
- sknetwork/ranking/pagerank.py,sha256=-cgPvGfiITFSs5X6GJca2Pq4UATK3W8s6Vpr6potjD4,4789
156
- sknetwork/ranking/postprocess.py,sha256=F2yP6AsaK9ylTzukLCdtJET7_KnprrxkyWTSKQOnODk,956
157
- sknetwork/ranking/tests/__init__.py,sha256=46AJCs9irV6PtFg8CVH8TqpqHA6ajs29-3rsL3zxZQ8,25
158
- sknetwork/ranking/tests/test_API.py,sha256=ZyPjemb2imUDaJhDBl0IMnJAx0bRXA75kPm_rrM-AX8,1145
159
- sknetwork/ranking/tests/test_betweenness.py,sha256=m-mYofSfLvswGvcIPOjZcfWG9HbbjY9RI8x0Eb9zD90,1175
160
- sknetwork/ranking/tests/test_closeness.py,sha256=7LSiT-H5S1vuaOj4NHpotg0voIWjgJfVlgR96_V2ny8,853
161
- sknetwork/ranking/tests/test_hits.py,sha256=aOPsAyU3GNyb_Mcujd7U_TLBtzWn91SuOPyZZRUF9MU,511
162
- sknetwork/ranking/tests/test_pagerank.py,sha256=e_f7Y33ITMDZyFgvZaRxrTyIODgvXwKgDK8BgMyitw0,1983
163
- sknetwork/ranking/tests/test_postprocess.py,sha256=TpyU3_DKbnSwuf0HEuEYMiNbdI6Z5oP1JNO6kWigFkc,729
164
- sknetwork/regression/__init__.py,sha256=FYnlc-DKS1Mz2lKVCtKldjSgtvzxMmkd5kwKq2HdNmE,145
165
- sknetwork/regression/base.py,sha256=Dnvr3egl7pWpYVUjRITgsjOXsxjN76KtCd4nEy8wFuc,1123
166
- sknetwork/regression/diffusion.py,sha256=GagoWzmlc86w8eY_df-kIbbyNVNXzrhE1XJIkLFSTNU,7462
167
- sknetwork/regression/tests/__init__.py,sha256=GvqvsSMbqMYwRmWw4VrZntwccz1jOPqrqufAZqw_NAc,28
168
- sknetwork/regression/tests/test_API.py,sha256=7x_n8bG8hUcJVRYDbdC6GvPmwW5cE7HmASlu5SHnwFI,1056
169
- sknetwork/regression/tests/test_diffusion.py,sha256=kUncxGwUnXFn15TfAkQKqE4syVvg_-ERNZGwua1JJoo,1734
170
- sknetwork/topology/__init__.py,sha256=nf6yGfRNIFYL65UJNiGvZUqemGUJrwcj7k3Q-vF-7A4,361
171
- sknetwork/topology/cliques.cp310-win_amd64.pyd,sha256=wyvQO0V8L_GjtLZpcr90QYElVx75rEtoABz3eS_Hk24,144896
172
- sknetwork/topology/cliques.cpp,sha256=21DO6ucynhs4MMi0qOdo8e1cofL-dCeHZOnZMgCCGBI,951751
173
- sknetwork/topology/cliques.pyx,sha256=y6Ee5oaX7IdVhXXjSOazqT5dYo4gSTQ8Mq0u1Abg0vw,4659
174
- sknetwork/topology/core.cp310-win_amd64.pyd,sha256=CIJna37udMYNwNgk_nMourwJGGTZ3Q6oyX3QE2R3BOY,124928
175
- sknetwork/topology/core.cpp,sha256=WscYFFfdKJgYnqMWmOr2kQM4xWyN8IQCkAZ5G1iPIyY,882271
176
- sknetwork/topology/core.pyx,sha256=0PO4HnOYivjrFY1NMlXHd7wscu0R5Fg-Toj3YVRwXDo,2555
177
- sknetwork/topology/minheap.cp310-win_amd64.pyd,sha256=Ch_CHpBrql22Fp4oehjG0IXEDHb-wfx1EuhokBH0mbw,104448
178
- sknetwork/topology/minheap.cpp,sha256=IMIBpRCsecqlH0hgUjReKrCaTSQdufsGcSylmKtytLM,778758
179
- sknetwork/topology/minheap.pxd,sha256=AHeBNN8wGzT429K6AyhbrFUoBkWVwbkyUIY6TkeJ80g,584
180
- sknetwork/topology/minheap.pyx,sha256=KOmjjlljgkGUJNL8PQ6WaNzx-Ro84QoSve_8baDN1B0,3419
181
- sknetwork/topology/structure.py,sha256=BBMZ1OHKvPWYurYjQORfX98tBPtN43rZngbUQiWKnmI,8852
182
- sknetwork/topology/triangles.cp310-win_amd64.pyd,sha256=zBFeP31YrPlFitjrpDsXenV4F1cGkr7o6Kgx2qwoAPA,39424
183
- sknetwork/topology/triangles.cpp,sha256=he2Kpp53YjIjT4fsEIgtPw3NEtRO0lIBhDCaaO9bON0,201093
184
- sknetwork/topology/triangles.pyx,sha256=NAuWB4UG7WiC71xqW9W_oQlr4yB3QZA-qNTbjPL4IdQ,4291
185
- sknetwork/topology/weisfeiler_lehman.py,sha256=U5b5RoTFtqBeFwkuBXs4g0Px2UWRFePyneu-tfgnY_I,4441
186
- sknetwork/topology/weisfeiler_lehman_core.cp310-win_amd64.pyd,sha256=MeuBnSUXI7ErUDLGWzlHKkGdJDLMqQ5uUVl-CMA57YA,126464
187
- sknetwork/topology/weisfeiler_lehman_core.cpp,sha256=4jJggzELpdPJ7cxuDqM14rUxtwqYWCB1Litp1a4eHlo,798124
188
- sknetwork/topology/weisfeiler_lehman_core.pyx,sha256=lpUV1BpxtedsGBfOl19b8OFXCIbyaAA4ZYlW6BzSxbw,3148
189
- sknetwork/topology/tests/__init__.py,sha256=84T-xv8JCFeA9D7Rxw9gy3_dNAoE8CY1k1pYcuG8K3s,26
190
- sknetwork/topology/tests/test_cliques.py,sha256=vdRMDmF8AKkIWE-LnU2yGzk1wzwzq9PdggpeS-8wfRw,866
191
- sknetwork/topology/tests/test_core.py,sha256=7w9lrzsQ5Pn7QzxA0F_L58cXCABFir7rtLn2DZdPKsk,570
192
- sknetwork/topology/tests/test_structure.py,sha256=MJcPSCNSxairXVc_FO4nCsqJu7f_-zyy1VC4sFL8b90,4734
193
- sknetwork/topology/tests/test_triangles.py,sha256=5AYxNQ8DkKTvpShWEWV-v1r7WZx1DuylChcEmVF0yTk,1313
194
- sknetwork/topology/tests/test_wl.py,sha256=vesYcnlJHPphk2RJLzKJH9N6aYpPeKLFJko1E8kBdtc,2290
195
- sknetwork/utils/__init__.py,sha256=ceT5UU4JRxCqpDlPj84gPBaKMRsI6b_YfaBzkK67Qo4,336
196
- sknetwork/utils/check.py,sha256=LWUkHwDzr9Z9IyT7AIsrQyDrRAMjO2bzWyFsv_P9Ask,13295
197
- sknetwork/utils/format.py,sha256=5gKHLLBuGboIqmtNKiwzrC_qbh-sPi_mejhJ_8teaLs,8974
198
- sknetwork/utils/membership.py,sha256=claXsrZd6BVT4WuuI0P00tqapbczvAxtLAWMWNQ78KE,2234
199
- sknetwork/utils/neighbors.py,sha256=-EwBXigM3mn2qvVTi_aPmG0XifDMojZgsMQ9_A8cLkk,3466
200
- sknetwork/utils/tfidf.py,sha256=vvISEaZJa7RZrNNgQEAHgMH2rJToARuNWcVjnA8u7po,993
201
- sknetwork/utils/values.py,sha256=aUc2fuI56J78_6P-S2mT4NhHgiiIZp6D2feNKcsQmG4,2584
202
- sknetwork/utils/tests/__init__.py,sha256=JQuARG8Ycb5apL6PUy_wuEHsLjmEZFOPQUKWRgTMdCY,23
203
- sknetwork/utils/tests/test_check.py,sha256=LxYAubg6YZ0RHYFz_R3byNtw3EQ6hsHxPPI3QgP1DLg,6954
204
- sknetwork/utils/tests/test_format.py,sha256=NJrRBI-kFF8dYFmTwuFF7VUnHS6Mz75DG-RB-iGk8ag,2308
205
- sknetwork/utils/tests/test_membership.py,sha256=d_TobwpRl2K3qCcFBDQV1bGCSmF7Ls3r2s_XGvJC3Sg,772
206
- sknetwork/utils/tests/test_neighbors.py,sha256=Q7-Y23CcF4vn5lcyEqjaojEAk7-pG03Mf59O1Rz3IUs,1467
207
- sknetwork/utils/tests/test_tfidf.py,sha256=KYz_LSxi625kKL-v5-uA1-YQOliIfgXCmNXTAZtgpmw,463
208
- sknetwork/utils/tests/test_values.py,sha256=K3ctTXpSy9fwiHnpFVlHX5KeTd2wNF4kbFiTXe_gQq8,2334
209
- sknetwork/visualization/__init__.py,sha256=0gVE7r4oXW6IPlNzq2EXwvr_oRDwCjtuhBh0FN-4I4Y,162
210
- sknetwork/visualization/colors.py,sha256=NhyMQeetfH16khnJD2gD_uZJkBD3JQDV0K3Jzacamqw,2543
211
- sknetwork/visualization/dendrograms.py,sha256=-U-WVuO-uFpqPrXuWJmhpkIUyeYX-GLemRmChdtbWhY,8280
212
- sknetwork/visualization/graphs.py,sha256=vx2PC_IilHNW9G6GgNq3muFCM7Hc3Mz0lHMrOmH8Qu8,32806
213
- sknetwork/visualization/tests/__init__.py,sha256=hrso2pNVzMWn4D2pRyWA_xAMib-xacKjm-rf91MyGGk,31
214
- sknetwork/visualization/tests/test_dendrograms.py,sha256=4BEdDonrQZsylKgwDpxwTdUZTnqbMKokpugTYbcAp5o,2455
215
- sknetwork/visualization/tests/test_graphs.py,sha256=FkzWHYx0KHr0sxP7Go-KZICjoiGXK1EoF8nzIMUiFBc,8968
216
- scikit_network-0.31.0.dist-info/AUTHORS.rst,sha256=SSAG2WortFtGW_lEWFDX15zhkIvoEOwc60q2yVTRN7Q,921
217
- scikit_network-0.31.0.dist-info/LICENSE,sha256=BJ1Hth1QjBmjIfHcp1sVxlkEqHYM58Vn5bcpYcggMZE,1656
218
- scikit_network-0.31.0.dist-info/METADATA,sha256=wXSb_IbBBsuXwnQq37r8hav6vMIyz0PDv3mSRNSayRY,14521
219
- scikit_network-0.31.0.dist-info/WHEEL,sha256=rneS2j8QNmAwdNKHN86s6-qP7AMcWZgqiEoH3bdbh_Y,102
220
- scikit_network-0.31.0.dist-info/top_level.txt,sha256=fkwspWQ9B3csqb5ENEOoVciRY6XftnMuz4MvTDQeSsg,10
221
- scikit_network-0.31.0.dist-info/RECORD,,
@@ -1,142 +0,0 @@
1
- #!/usr/bin/env python3
2
- # coding: utf-8
3
- """
4
- Created on Dec 2020
5
- @author: Quentin Lutz <qlutz@enst.fr>
6
- """
7
- from typing import Optional, Union
8
-
9
- import numpy as np
10
- from scipy import sparse
11
-
12
- from sknetwork.utils.check import check_format, check_random_state
13
- from sknetwork.utils.format import get_adjacency
14
- from sknetwork.clustering.louvain import Louvain
15
- from sknetwork.embedding.base import BaseEmbedding
16
-
17
-
18
- class LouvainNE(BaseEmbedding):
19
- """Embedding of graphs based on the hierarchical Louvain algorithm with random scattering per level.
20
-
21
- Parameters
22
- ----------
23
- n_components : int
24
- Dimension of the embedding.
25
- scale : float
26
- Dilution factor to be applied on the random vector to be added at each iteration of the clustering method.
27
- resolution :
28
- Resolution parameter.
29
- tol_optimization :
30
- Minimum increase in the objective function to enter a new optimization pass.
31
- tol_aggregation :
32
- Minimum increase in the objective function to enter a new aggregation pass.
33
- n_aggregations :
34
- Maximum number of aggregations.
35
- A negative value is interpreted as no limit.
36
- shuffle_nodes :
37
- Enables node shuffling before optimization.
38
- random_state :
39
- Random number generator or random seed. If None, numpy.random is used.
40
-
41
- Attributes
42
- ----------
43
- embedding_ : array, shape = (n, n_components)
44
- Embedding of the nodes.
45
- embedding_row_ : array, shape = (n_row, n_components)
46
- Embedding of the rows, for bipartite graphs.
47
- embedding_col_ : array, shape = (n_col, n_components)
48
- Embedding of the columns, for bipartite graphs.
49
- Example
50
- -------
51
- >>> from sknetwork.embedding import LouvainNE
52
- >>> from sknetwork.data import karate_club
53
- >>> louvain = LouvainNE(n_components=3)
54
- >>> adjacency = karate_club()
55
- >>> embedding = louvain.fit_transform(adjacency)
56
- >>> embedding.shape
57
- (34, 3)
58
-
59
- References
60
- ----------
61
- Bhowmick, A. K., Meneni, K., Danisch, M., Guillaume, J. L., & Mitra, B. (2020, January).
62
- `LouvainNE: Hierarchical Louvain Method for High Quality and Scalable Network Embedding.
63
- <https://hal.archives-ouvertes.fr/hal-02999888/document>`_
64
- In Proceedings of the 13th International Conference on Web Search and Data Mining (pp. 43-51).
65
- """
66
- def __init__(self, n_components: int = 2, scale: float = .1, resolution: float = 1, tol_optimization: float = 1e-3,
67
- tol_aggregation: float = 1e-3, n_aggregations: int = -1, shuffle_nodes: bool = False,
68
- random_state: Optional[Union[np.random.RandomState, int]] = None, verbose: bool = False):
69
- super(LouvainNE, self).__init__()
70
-
71
- self.n_components = n_components
72
- self.scale = scale
73
- self._clustering_method = Louvain(resolution=resolution, tol_optimization=tol_optimization,
74
- tol_aggregation=tol_aggregation, n_aggregations=n_aggregations,
75
- shuffle_nodes=shuffle_nodes, random_state=random_state, verbose=verbose)
76
- self.random_state = check_random_state(random_state)
77
- self.bipartite = None
78
-
79
- def _recursive_louvain(self, adjacency: Union[sparse.csr_matrix, np.ndarray], depth: int,
80
- nodes: Optional[np.ndarray] = None):
81
- """Recursive function for fit, modifies the embedding in place.
82
-
83
- Parameters
84
- ----------
85
- adjacency :
86
- Adjacency matrix of the graph.
87
- depth :
88
- Depth of the recursion.
89
- nodes :
90
- The indices of the current nodes in the original graph.
91
- """
92
- n = adjacency.shape[0]
93
- if nodes is None:
94
- nodes = np.arange(n)
95
-
96
- if adjacency.nnz:
97
- labels = self._clustering_method.fit_transform(adjacency)
98
- else:
99
- labels = np.zeros(n)
100
-
101
- clusters = np.unique(labels)
102
-
103
- if len(clusters) != 1:
104
- random_vectors = (self.scale ** depth) * self.random_state.rand(self.n_components, len(clusters))
105
- for index, cluster in enumerate(clusters):
106
- mask = (labels == cluster)
107
- nodes_cluster = nodes[mask]
108
- self.embedding_[nodes_cluster, :] += random_vectors[:, index]
109
- n_row = len(mask)
110
- indptr = np.zeros(n_row + 1, dtype=int)
111
- indptr[1:] = np.cumsum(mask)
112
- n_col = indptr[-1]
113
- combiner = sparse.csr_matrix((np.ones(n_col), np.arange(n_col, dtype=int), indptr),
114
- shape=(n_row, n_col))
115
- adjacency_cluster = adjacency[mask, :].dot(combiner)
116
- self._recursive_louvain(adjacency_cluster, depth + 1, nodes_cluster)
117
-
118
- def fit(self, input_matrix: Union[sparse.csr_matrix, np.ndarray], force_bipartite: bool = False):
119
- """Embedding of graphs from a clustering obtained with Louvain.
120
-
121
- Parameters
122
- ----------
123
- input_matrix :
124
- Adjacency matrix or biadjacency matrix of the graph.
125
- force_bipartite :
126
- If ``True``, force the input matrix to be considered as a biadjacency matrix even if square.
127
- Returns
128
- -------
129
- self: :class:`LouvainNE`
130
- """
131
- # input
132
- input_matrix = check_format(input_matrix)
133
- adjacency, self.bipartite = get_adjacency(input_matrix, force_bipartite=force_bipartite)
134
- n = adjacency.shape[0]
135
-
136
- # embedding
137
- self.embedding_ = np.zeros((n, self.n_components))
138
- self._recursive_louvain(adjacency, 0)
139
-
140
- if self.bipartite:
141
- self._split_vars(input_matrix.shape)
142
- return self
@@ -1,19 +0,0 @@
1
- #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
- """tests for LouvainNE"""
4
- import unittest
5
-
6
- from sknetwork.data.test_graphs import test_graph, test_disconnected_graph, test_digraph, test_bigraph
7
- from sknetwork.embedding import LouvainNE
8
-
9
-
10
- class TestLouvainNE(unittest.TestCase):
11
-
12
- def test_louvain_hierarchy(self):
13
- louvain = LouvainNE()
14
- for adjacency in [test_graph(), test_disconnected_graph(), test_digraph()]:
15
- self.assertTupleEqual(louvain.fit_transform(adjacency).shape, (10, 2))
16
- louvain.fit(test_bigraph())
17
- self.assertTupleEqual(louvain.embedding_.shape, (6, 2))
18
- louvain.fit(test_graph(), force_bipartite=True)
19
- self.assertTupleEqual(louvain.embedding_.shape, (10, 2))