scikit-network 0.30.0__cp38-cp38-win_amd64.whl → 0.32.1__cp38-cp38-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of scikit-network might be problematic. Click here for more details.

Files changed (187) hide show
  1. {scikit_network-0.30.0.dist-info → scikit_network-0.32.1.dist-info}/AUTHORS.rst +3 -0
  2. {scikit_network-0.30.0.dist-info → scikit_network-0.32.1.dist-info}/METADATA +31 -3
  3. scikit_network-0.32.1.dist-info/RECORD +228 -0
  4. {scikit_network-0.30.0.dist-info → scikit_network-0.32.1.dist-info}/WHEEL +1 -1
  5. sknetwork/__init__.py +1 -1
  6. sknetwork/base.py +67 -0
  7. sknetwork/classification/base.py +24 -24
  8. sknetwork/classification/base_rank.py +17 -25
  9. sknetwork/classification/diffusion.py +35 -35
  10. sknetwork/classification/knn.py +24 -21
  11. sknetwork/classification/metrics.py +1 -1
  12. sknetwork/classification/pagerank.py +10 -10
  13. sknetwork/classification/propagation.py +23 -20
  14. sknetwork/classification/tests/test_diffusion.py +13 -3
  15. sknetwork/classification/vote.cp38-win_amd64.pyd +0 -0
  16. sknetwork/classification/vote.cpp +14482 -10351
  17. sknetwork/classification/vote.pyx +1 -3
  18. sknetwork/clustering/__init__.py +3 -1
  19. sknetwork/clustering/base.py +36 -40
  20. sknetwork/clustering/kcenters.py +253 -0
  21. sknetwork/clustering/leiden.py +241 -0
  22. sknetwork/clustering/leiden_core.cp38-win_amd64.pyd +0 -0
  23. sknetwork/clustering/leiden_core.cpp +31564 -0
  24. sknetwork/clustering/leiden_core.pyx +124 -0
  25. sknetwork/clustering/louvain.py +133 -102
  26. sknetwork/clustering/louvain_core.cp38-win_amd64.pyd +0 -0
  27. sknetwork/clustering/louvain_core.cpp +22457 -18792
  28. sknetwork/clustering/louvain_core.pyx +86 -96
  29. sknetwork/clustering/postprocess.py +2 -2
  30. sknetwork/clustering/propagation_clustering.py +15 -19
  31. sknetwork/clustering/tests/test_API.py +8 -4
  32. sknetwork/clustering/tests/test_kcenters.py +92 -0
  33. sknetwork/clustering/tests/test_leiden.py +34 -0
  34. sknetwork/clustering/tests/test_louvain.py +3 -4
  35. sknetwork/data/__init__.py +2 -1
  36. sknetwork/data/base.py +28 -0
  37. sknetwork/data/load.py +38 -37
  38. sknetwork/data/models.py +18 -18
  39. sknetwork/data/parse.py +54 -33
  40. sknetwork/data/test_graphs.py +2 -2
  41. sknetwork/data/tests/test_API.py +1 -1
  42. sknetwork/data/tests/test_base.py +14 -0
  43. sknetwork/data/tests/test_load.py +1 -1
  44. sknetwork/data/tests/test_parse.py +9 -12
  45. sknetwork/data/tests/test_test_graphs.py +1 -2
  46. sknetwork/data/toy_graphs.py +18 -18
  47. sknetwork/embedding/__init__.py +0 -1
  48. sknetwork/embedding/base.py +21 -20
  49. sknetwork/embedding/force_atlas.py +3 -2
  50. sknetwork/embedding/louvain_embedding.py +2 -2
  51. sknetwork/embedding/random_projection.py +5 -3
  52. sknetwork/embedding/spectral.py +0 -73
  53. sknetwork/embedding/tests/test_API.py +4 -28
  54. sknetwork/embedding/tests/test_louvain_embedding.py +4 -9
  55. sknetwork/embedding/tests/test_random_projection.py +2 -2
  56. sknetwork/embedding/tests/test_spectral.py +5 -8
  57. sknetwork/embedding/tests/test_svd.py +1 -1
  58. sknetwork/gnn/base.py +4 -4
  59. sknetwork/gnn/base_layer.py +3 -3
  60. sknetwork/gnn/gnn_classifier.py +45 -89
  61. sknetwork/gnn/layer.py +1 -1
  62. sknetwork/gnn/loss.py +1 -1
  63. sknetwork/gnn/optimizer.py +4 -3
  64. sknetwork/gnn/tests/test_base_layer.py +4 -4
  65. sknetwork/gnn/tests/test_gnn_classifier.py +12 -35
  66. sknetwork/gnn/utils.py +8 -8
  67. sknetwork/hierarchy/base.py +29 -2
  68. sknetwork/hierarchy/louvain_hierarchy.py +45 -41
  69. sknetwork/hierarchy/paris.cp38-win_amd64.pyd +0 -0
  70. sknetwork/hierarchy/paris.cpp +27371 -22844
  71. sknetwork/hierarchy/paris.pyx +7 -9
  72. sknetwork/hierarchy/postprocess.py +16 -16
  73. sknetwork/hierarchy/tests/test_API.py +1 -1
  74. sknetwork/hierarchy/tests/test_algos.py +5 -0
  75. sknetwork/hierarchy/tests/test_metrics.py +1 -1
  76. sknetwork/linalg/__init__.py +1 -1
  77. sknetwork/linalg/diteration.cp38-win_amd64.pyd +0 -0
  78. sknetwork/linalg/diteration.cpp +13474 -9454
  79. sknetwork/linalg/diteration.pyx +0 -2
  80. sknetwork/linalg/eig_solver.py +1 -1
  81. sknetwork/linalg/{normalization.py → normalizer.py} +18 -15
  82. sknetwork/linalg/operators.py +1 -1
  83. sknetwork/linalg/ppr_solver.py +1 -1
  84. sknetwork/linalg/push.cp38-win_amd64.pyd +0 -0
  85. sknetwork/linalg/push.cpp +23003 -18807
  86. sknetwork/linalg/push.pyx +0 -2
  87. sknetwork/linalg/svd_solver.py +1 -1
  88. sknetwork/linalg/tests/test_normalization.py +3 -7
  89. sknetwork/linalg/tests/test_operators.py +4 -8
  90. sknetwork/linalg/tests/test_ppr.py +1 -1
  91. sknetwork/linkpred/base.py +13 -2
  92. sknetwork/linkpred/nn.py +6 -6
  93. sknetwork/log.py +19 -0
  94. sknetwork/path/__init__.py +4 -3
  95. sknetwork/path/dag.py +54 -0
  96. sknetwork/path/distances.py +98 -0
  97. sknetwork/path/search.py +13 -47
  98. sknetwork/path/shortest_path.py +37 -162
  99. sknetwork/path/tests/test_dag.py +37 -0
  100. sknetwork/path/tests/test_distances.py +62 -0
  101. sknetwork/path/tests/test_search.py +26 -11
  102. sknetwork/path/tests/test_shortest_path.py +31 -36
  103. sknetwork/ranking/__init__.py +0 -1
  104. sknetwork/ranking/base.py +13 -8
  105. sknetwork/ranking/betweenness.cp38-win_amd64.pyd +0 -0
  106. sknetwork/ranking/betweenness.cpp +5709 -3017
  107. sknetwork/ranking/betweenness.pyx +0 -2
  108. sknetwork/ranking/closeness.py +7 -10
  109. sknetwork/ranking/pagerank.py +14 -14
  110. sknetwork/ranking/postprocess.py +12 -3
  111. sknetwork/ranking/tests/test_API.py +2 -4
  112. sknetwork/ranking/tests/test_betweenness.py +3 -3
  113. sknetwork/ranking/tests/test_closeness.py +3 -7
  114. sknetwork/ranking/tests/test_pagerank.py +11 -5
  115. sknetwork/ranking/tests/test_postprocess.py +5 -0
  116. sknetwork/regression/base.py +19 -2
  117. sknetwork/regression/diffusion.py +24 -10
  118. sknetwork/regression/tests/test_diffusion.py +8 -0
  119. sknetwork/test_base.py +35 -0
  120. sknetwork/test_log.py +15 -0
  121. sknetwork/topology/__init__.py +7 -8
  122. sknetwork/topology/cliques.cp38-win_amd64.pyd +0 -0
  123. sknetwork/topology/{kcliques.cpp → cliques.cpp} +23423 -20277
  124. sknetwork/topology/cliques.pyx +149 -0
  125. sknetwork/topology/core.cp38-win_amd64.pyd +0 -0
  126. sknetwork/topology/{kcore.cpp → core.cpp} +21637 -18762
  127. sknetwork/topology/core.pyx +90 -0
  128. sknetwork/topology/cycles.py +243 -0
  129. sknetwork/topology/minheap.cp38-win_amd64.pyd +0 -0
  130. sknetwork/{utils → topology}/minheap.cpp +19452 -15368
  131. sknetwork/{utils → topology}/minheap.pxd +1 -3
  132. sknetwork/{utils → topology}/minheap.pyx +1 -3
  133. sknetwork/topology/structure.py +3 -43
  134. sknetwork/topology/tests/test_cliques.py +11 -11
  135. sknetwork/topology/tests/test_core.py +19 -0
  136. sknetwork/topology/tests/test_cycles.py +65 -0
  137. sknetwork/topology/tests/test_structure.py +2 -16
  138. sknetwork/topology/tests/test_triangles.py +11 -15
  139. sknetwork/topology/tests/test_wl.py +72 -0
  140. sknetwork/topology/triangles.cp38-win_amd64.pyd +0 -0
  141. sknetwork/topology/triangles.cpp +5056 -2696
  142. sknetwork/topology/triangles.pyx +74 -89
  143. sknetwork/topology/weisfeiler_lehman.py +56 -86
  144. sknetwork/topology/weisfeiler_lehman_core.cp38-win_amd64.pyd +0 -0
  145. sknetwork/topology/weisfeiler_lehman_core.cpp +14727 -10622
  146. sknetwork/topology/weisfeiler_lehman_core.pyx +0 -2
  147. sknetwork/utils/__init__.py +1 -31
  148. sknetwork/utils/check.py +2 -2
  149. sknetwork/utils/format.py +5 -3
  150. sknetwork/utils/membership.py +2 -2
  151. sknetwork/utils/tests/test_check.py +3 -3
  152. sknetwork/utils/tests/test_format.py +3 -1
  153. sknetwork/utils/values.py +1 -1
  154. sknetwork/visualization/__init__.py +2 -2
  155. sknetwork/visualization/dendrograms.py +55 -7
  156. sknetwork/visualization/graphs.py +292 -72
  157. sknetwork/visualization/tests/test_dendrograms.py +9 -9
  158. sknetwork/visualization/tests/test_graphs.py +71 -62
  159. scikit_network-0.30.0.dist-info/RECORD +0 -227
  160. sknetwork/embedding/louvain_hierarchy.py +0 -142
  161. sknetwork/embedding/tests/test_louvain_hierarchy.py +0 -19
  162. sknetwork/path/metrics.py +0 -148
  163. sknetwork/path/tests/test_metrics.py +0 -29
  164. sknetwork/ranking/harmonic.py +0 -82
  165. sknetwork/topology/dag.py +0 -74
  166. sknetwork/topology/dag_core.cp38-win_amd64.pyd +0 -0
  167. sknetwork/topology/dag_core.cpp +0 -23350
  168. sknetwork/topology/dag_core.pyx +0 -38
  169. sknetwork/topology/kcliques.cp38-win_amd64.pyd +0 -0
  170. sknetwork/topology/kcliques.pyx +0 -193
  171. sknetwork/topology/kcore.cp38-win_amd64.pyd +0 -0
  172. sknetwork/topology/kcore.pyx +0 -120
  173. sknetwork/topology/tests/test_cores.py +0 -21
  174. sknetwork/topology/tests/test_dag.py +0 -26
  175. sknetwork/topology/tests/test_wl_coloring.py +0 -49
  176. sknetwork/topology/tests/test_wl_kernel.py +0 -31
  177. sknetwork/utils/base.py +0 -35
  178. sknetwork/utils/minheap.cp38-win_amd64.pyd +0 -0
  179. sknetwork/utils/simplex.py +0 -140
  180. sknetwork/utils/tests/test_base.py +0 -28
  181. sknetwork/utils/tests/test_bunch.py +0 -16
  182. sknetwork/utils/tests/test_projection_simplex.py +0 -33
  183. sknetwork/utils/tests/test_verbose.py +0 -15
  184. sknetwork/utils/verbose.py +0 -37
  185. {scikit_network-0.30.0.dist-info → scikit_network-0.32.1.dist-info}/LICENSE +0 -0
  186. {scikit_network-0.30.0.dist-info → scikit_network-0.32.1.dist-info}/top_level.txt +0 -0
  187. /sknetwork/{utils → data}/timeout.py +0 -0
@@ -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
@@ -8,9 +8,9 @@ import unittest
8
8
  import numpy as np
9
9
  from scipy import sparse
10
10
 
11
- from sknetwork.data.test_graphs import test_graph_disconnect, test_bigraph_disconnect
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,51 +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
- adjacency = test_graph_disconnect()
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
- def test_membership(self):
135
+ def test_probs(self):
130
136
  adjacency = bow_tie()
131
- membership = sparse.csr_matrix([[.5, .5], [0, 0], [1, 0], [0, 1], [0, 1]])
132
- image = svg_graph(adjacency, membership=membership)
137
+ probs = np.array([[.5, .5], [0, 0], [1, 0], [0, 1], [0, 1]])
138
+ image = visualize_graph(adjacency, probs=probs)
139
+ self.assertEqual(image[1:4], 'svg')
140
+ probs = sparse.csr_matrix(probs)
141
+ image = visualize_graph(adjacency, probs=probs)
133
142
  self.assertEqual(image[1:4], 'svg')
134
143
  biadjacency = star_wars()
135
- membership_row = sparse.csr_matrix([[.5, .5], [0, 0], [1, 0], [0, 1]])
136
- membership_col = sparse.csr_matrix([[.5, .5], [0, 0], [1, 0]])
137
- image = svg_bigraph(biadjacency, membership_row=membership_row, membership_col=membership_col)
144
+ probs_row = sparse.csr_matrix([[.5, .5], [0, 0], [1, 0], [0, 1]])
145
+ probs_col = sparse.csr_matrix([[.5, .5], [0, 0], [1, 0]])
146
+ image = visualize_bigraph(biadjacency, probs_row=probs_row, probs_col=probs_col)
138
147
  self.assertEqual(image[1:4], 'svg')
139
148
 
140
149
  def test_labels(self):
141
150
  adjacency = bow_tie()
142
151
  names = ["aa", "bb", "<>", "a&b", ""]
143
- image = svg_graph(adjacency, names=names)
152
+ image = visualize_graph(adjacency, names=names)
144
153
  self.assertEqual(image[1:4], 'svg')
145
154
 
146
155
  def test_text(self):
@@ -157,11 +166,11 @@ class TestVisualization(unittest.TestCase):
157
166
  graph = karate_club(True)
158
167
  adjacency = graph.adjacency
159
168
  position = graph.position
160
- _ = svg_graph(adjacency, position, filename=filename)
169
+ _ = visualize_graph(adjacency, position, filename=filename)
161
170
  with open(filename + '.svg', 'r') as f:
162
171
  row = f.readline()
163
172
  self.assertEqual(row[1:4], 'svg')
164
- _ = svg_bigraph(adjacency, position, filename=filename)
173
+ _ = visualize_bigraph(adjacency, position, filename=filename)
165
174
  with open(filename + '.svg', 'r') as f:
166
175
  row = f.readline()
167
176
  self.assertEqual(row[1:4], 'svg')
@@ -1,227 +0,0 @@
1
- sknetwork/__init__.py,sha256=jkpo7YNbBq4jJuolUFmoKkwtSNcvADLSxFHU5uAeOBA,554
2
- sknetwork/sknetwork.py,sha256=Qtq3EpSkdAFqQNQPDXTAouXS784LkR8Rh2D5s5w5_tc,47
3
- sknetwork/classification/__init__.py,sha256=QoS3fTnCZ0nFdlDkEphEYqj1NDEf23_aqsfP0G4zLMM,483
4
- sknetwork/classification/base.py,sha256=XUt7XY_molL68DGtrT1Qovg0Qzz-yCe4u3kHtnvABAM,4517
5
- sknetwork/classification/base_rank.py,sha256=xwVnujfiyioU76U5UUVHETvMzVPaOY417nW44UShazw,5001
6
- sknetwork/classification/diffusion.py,sha256=ZBgD5_3_ZbCJvjF-v88E4uXakswynb3b95zZ0xigrCM,5531
7
- sknetwork/classification/knn.py,sha256=l9GZDxLe33Og2o3KH6W06HFo4OZasPkxBmzTA7vQU4o,5280
8
- sknetwork/classification/metrics.py,sha256=1sPqOqliIexvL6ozNy9QTDKfHLV9Sqz5rGoSr3Gjv0M,7012
9
- sknetwork/classification/pagerank.py,sha256=QtKsuaob8-l4PavvttLhtdGFW_yahM6MjEFmwlHE7Rk,2612
10
- sknetwork/classification/propagation.py,sha256=odXNOrFUTH3o-2bYBvqjljngAb-x7Qt-QuCWZuC_jMQ,5760
11
- sknetwork/classification/vote.cp38-win_amd64.pyd,sha256=JDWmMq2QsIOHCTG64Gosyw9nIafnV0RmCeNaT6g1rJY,201728
12
- sknetwork/classification/vote.cpp,sha256=VFX9LeyjgWN518rZNdlMkuPoOjOr_nx2tCp8qVdbTNI,876335
13
- sknetwork/classification/vote.pyx,sha256=9II49U_j2UQyBEsDzvnRmescsCrwFjlMOiSuMiJWQME,1716
14
- sknetwork/classification/tests/__init__.py,sha256=Per0oy1Frnm5jB7dnpod1g_xbgYhqkNteWQV5cemcH0,32
15
- sknetwork/classification/tests/test_API.py,sha256=WV5cY8yhTHBHYRbDE3InZ4v-agymxLPMKxa2NqjbWZo,1154
16
- sknetwork/classification/tests/test_diffusion.py,sha256=9BC5qYbm7DQUmZCNfatrEFcAJOoQCv5MhAUGO7zGCKc,2798
17
- sknetwork/classification/tests/test_knn.py,sha256=EWuWiJJSsfthfvb3x0ejUjdccRBZIFpmG6nv7F8VkOk,807
18
- sknetwork/classification/tests/test_metrics.py,sha256=9eqBvRiMdVUHf7WhjfwzMcUJFALt4Ufmx5LhBzou8Ww,2356
19
- sknetwork/classification/tests/test_pagerank.py,sha256=8ywBVzfJOtz_gTIn7XYr0nvHlVwvmZERLrG3LkQHeTU,640
20
- sknetwork/classification/tests/test_propagation.py,sha256=GzhpCpg0ijLvXuWtABolq02k0-Yh3UHJ2rAKpdQlTxI,874
21
- sknetwork/clustering/__init__.py,sha256=HAWSDCezfp1FkAQPIxOinB84G_L4cOlrjwnLyqPUths,343
22
- sknetwork/clustering/base.py,sha256=mk9fws0XTf-SvckRZd0LzA4eIRtQhIFoVpb4b3y9sPM,6472
23
- sknetwork/clustering/louvain.py,sha256=X9dwCKFgIGUt9G3W5bFKWYyyi9dSU5YO53R_LiE0aEw,10117
24
- sknetwork/clustering/louvain_core.cp38-win_amd64.pyd,sha256=L6cEuZvcss1Zx7EnTM0tR7NgUBEwdoGAKpZ0aWbf98k,245248
25
- sknetwork/clustering/louvain_core.cpp,sha256=TmnF99Cx8dfivUmnyxn40iRtkZyNSeqRKiDXIfvbJzQ,1043678
26
- sknetwork/clustering/louvain_core.pyx,sha256=Ah5pVcqvO_ULRB13H4hTBUUJxCeKo0_zIHViUGr8Pvs,4692
27
- sknetwork/clustering/metrics.py,sha256=ptLLtUpFtdKLZ4lcx_MN-PpOrzv--PWhAcEFoFghccM,3151
28
- sknetwork/clustering/postprocess.py,sha256=Xk9FOPPBLemoROd--qgd9gc4I6xgMOXPKG-LSXqfEZQ,2101
29
- sknetwork/clustering/propagation_clustering.py,sha256=WLDf9rurCaV1Ue14MQD6JI6JLORpKHBNptOgh0ncQRA,3955
30
- sknetwork/clustering/tests/__init__.py,sha256=tCA27jkL3pdstka9XWQEA1NbC6ZqL7Rf-1V1UcySCEE,28
31
- sknetwork/clustering/tests/test_API.py,sha256=WAXGGx_LIRQirOZAA95KM3JHuCE-vocm6rGc4JUIg5c,1516
32
- sknetwork/clustering/tests/test_louvain.py,sha256=KPrB3C_kQwz2Rn3djKEwWfu7hJ246GrcTNYcd83xTEY,4809
33
- sknetwork/clustering/tests/test_metrics.py,sha256=ZTr4T-d-g6kQJinei9VH6Teb_rOScmj5XLG168EI5LQ,1868
34
- sknetwork/clustering/tests/test_postprocess.py,sha256=41l4coS_1CHqGOCnnucqxU6UkXws89YVMjef162ZTEQ,1417
35
- sknetwork/data/__init__.py,sha256=Cf-TeZkkmgeOcAQ4-vEZRqBJ55ANjdMMiiHY2dZk15s,310
36
- sknetwork/data/load.py,sha256=-0qleEIdmauQV3e4f86Q6euq1b_Tvkjs1p9xl1-U-8g,14870
37
- sknetwork/data/models.py,sha256=K8y142q4cOe1DXO_ZvFfoAO-0l_dXnqvBqhceprVSY8,13581
38
- sknetwork/data/parse.py,sha256=0PHPoVqM-s6PnymttjjnO8kmULPjQcqvHWMzaZPmH8c,26287
39
- sknetwork/data/test_graphs.py,sha256=N1kwEDOQX9BRA7A47NocBEvdejPjUnDYucaUtQqx9mw,2572
40
- sknetwork/data/toy_graphs.py,sha256=Bgb0bqDVqlU8ry0ZmqILRPuYNy_leT6M0QBvnEqdYDI,25616
41
- sknetwork/data/tests/__init__.py,sha256=LtUcKFe5CeBpspRwa6A2uX2cVEf_uPpOo2mGkH7W8cI,20
42
- sknetwork/data/tests/test_API.py,sha256=qR2Af9Nqgkj4VSNQ2jgxGV7vzMr9fA1qqXk1J-Ys3XA,988
43
- sknetwork/data/tests/test_load.py,sha256=uoZQna3lXxqP9ScWhI_LWc5q6wVIfREJROe9F-CwmB8,3646
44
- sknetwork/data/tests/test_models.py,sha256=_2y5xZrWbE3XZltd4n-z84YwyJhPcpaBa2TxXMvhXF4,1967
45
- sknetwork/data/tests/test_parse.py,sha256=jJtOu9oQ920a8hzce_p0PPfBmjWtt6yfxPH-Azs0SV0,13006
46
- sknetwork/data/tests/test_test_graphs.py,sha256=2Iqfyr-zzptjzG8KROzdGR7O_zuC77n5EM0EWXwEBwo,878
47
- sknetwork/data/tests/test_toy_graphs.py,sha256=wQ2X-CVv9oycBUAaB68aJqg-0o3yMlaVtZ9D4thZJrc,2205
48
- sknetwork/embedding/__init__.py,sha256=XvDQcRkxf5Kbf51Ai6X74AgSAXMarFgP8_AGxeIZY7Q,479
49
- sknetwork/embedding/base.py,sha256=peUIlGj0NdLSSgS_ReXMRh1d7UeHWbSG1-w1O7IH-_k,2857
50
- sknetwork/embedding/force_atlas.py,sha256=D1UOepcBnAXGleC-kCxIIRY1o5kPj-jLRUWw15IagR4,7626
51
- sknetwork/embedding/louvain_embedding.py,sha256=H300QiFP_jqWcHWLhJHZSbA46RmKUk44Qu-B_CJ9FKo,7132
52
- sknetwork/embedding/louvain_hierarchy.py,sha256=PYfBgOyN6Bi61PNlbQIW6dD-6-fz5m7v2UMvy5lYKpo,5850
53
- sknetwork/embedding/random_projection.py,sha256=enjMO6sltf4zBLmavqS17X0iknrir5GkDWe8Rfgx7gQ,5053
54
- sknetwork/embedding/spectral.py,sha256=wZspZ9MvjwK9G-b3ys7gr8fD4goeWigYwd7mXMDcTUM,8335
55
- sknetwork/embedding/spring.py,sha256=Cl1airI_mSWmV1isKmcxqjY1uxw7NcH7xMwHc8ADmHA,7349
56
- sknetwork/embedding/svd.py,sha256=isI2y9GfCGA5VJmogHrtq2MDVaxuWCZsEvh4YqgfB2k,15097
57
- sknetwork/embedding/tests/__init__.py,sha256=PsZQYFNrSmRW_KIuNX3qVtxtZVn8yV18d0mk8Y6ieck,27
58
- sknetwork/embedding/tests/test_API.py,sha256=CVIg2qkAOCjz2dgGdT8gCImXiICRGX0KZGrKC-9LQTU,2652
59
- sknetwork/embedding/tests/test_force_atlas.py,sha256=dYiyWroqB7UKNW9MTYpGP6e7tF_qPWqVZNmZBndd_ks,1155
60
- sknetwork/embedding/tests/test_louvain_embedding.py,sha256=bsjMQy4nTmBLtrpalzr-8sKXOksZ5HvInRtYLrNSD9k,1189
61
- sknetwork/embedding/tests/test_louvain_hierarchy.py,sha256=shQCsB8qfpP_5LCOKdAtOnDcs78e3Ag9IB_-0Umezws,749
62
- sknetwork/embedding/tests/test_random_projection.py,sha256=CWrqoT3-CZTF25oJPlYyfzlbP4iICMWWExOockM1btI,1217
63
- sknetwork/embedding/tests/test_spectral.py,sha256=cjOy0HNb2P3Q8b1wXQ2YNNBILSvhGUqEVWYTwhatFYU,4342
64
- sknetwork/embedding/tests/test_spring.py,sha256=z3eT-mFcfNSoMWPKQF-Dz_ZjAsJplQrx1yspiaeFRBw,1693
65
- sknetwork/embedding/tests/test_svd.py,sha256=jn8Osv7eMzWHfdtFkuCB189cdJ0v2Af4Bm9bQ7QjzmQ,1212
66
- sknetwork/gnn/__init__.py,sha256=808PNZEYNHZrIBpKqPzAMKES8yhN6QXEVUWkZVJIJWI,529
67
- sknetwork/gnn/activation.py,sha256=rhvEXgrIix4nZ9I3WYZ0e1MID_DESCCC_XlVcOa4Wpo,3677
68
- sknetwork/gnn/base.py,sha256=7XznRlzuPJcpOjYT9lRzdD7KuvDL0y-iELEp2xmI60w,5932
69
- sknetwork/gnn/base_activation.py,sha256=Kxs_d4aPOpMRXZMBAW7WKkA_uWLXRM7XM-JqE4nFHhc,2395
70
- sknetwork/gnn/base_layer.py,sha256=mGiMee2HKAdqlBcKLvr6ylRG-BrraBg68cGe4n6S-Q0,4085
71
- sknetwork/gnn/gnn_classifier.py,sha256=zdnv9rlWy9VdmyKYN7NdoTTuuX5xha0u0arZ7FkPUcE,14598
72
- sknetwork/gnn/layer.py,sha256=agAIKeoWcae4-QBeztGDCmowq68U_Cv3m2-4jZWBE04,5684
73
- sknetwork/gnn/loss.py,sha256=2cSOj-MbXjmrZbH-KQdEG6IYvSjdwMCnN7SUnI_fd7U,5342
74
- sknetwork/gnn/neighbor_sampler.py,sha256=l5OkylbRQsDpmkfeHAaSA7gHi5l7OUKtL4YvH-YTMWM,1929
75
- sknetwork/gnn/optimizer.py,sha256=DNL4AXAkO5bUhyK34MFBlZ7QaydYNtgjbhjJ_kjUsN4,5902
76
- sknetwork/gnn/utils.py,sha256=OZQuxNO2CAe_KVuXNCFyOzYA1HqwpJFWWpuuhlSesaU,4448
77
- sknetwork/gnn/tests/__init__.py,sha256=_q1IzwMWdNgX90qzdbVkr0LV4NTjFzXg81z4-TM93cw,21
78
- sknetwork/gnn/tests/test_activation.py,sha256=UznwTCvOeCX80n5urtoDhnM8lskDM67AsVFiY-ViqzU,2543
79
- sknetwork/gnn/tests/test_base.py,sha256=EN3QjzsSwzpOgyIYHwA6mgCDRBigx7YQ5iSQXQbw_pM,3468
80
- sknetwork/gnn/tests/test_base_layer.py,sha256=J1cVNOXOe1_iwaKqq6EAFBa_KG-fVthDDEETNWJaNqw,1432
81
- sknetwork/gnn/tests/test_gnn_classifier.py,sha256=RrmQumX9_3RA7y-H3CgWi4AIR-XYNC9ZWHb_D6WySm4,7012
82
- sknetwork/gnn/tests/test_layers.py,sha256=6Rbz_jJm3m5e6XWZA3P8Bfzlss9nBoiE4rSz2Tc-QKo,3256
83
- sknetwork/gnn/tests/test_loss.py,sha256=QvzXKW_xzirXUSkiDm9HgqJPHJdd55FOpuHWZzxyeKs,1078
84
- sknetwork/gnn/tests/test_neigh_sampler.py,sha256=7yhKZSRg2sZd3kFNs-qdj1LKgM7X8xZBNoOYYkYRfek,721
85
- sknetwork/gnn/tests/test_optimizer.py,sha256=OZnIeO__kNt8HXLHr-WHGzvDsTy4LvJ19p9jcFVzXME,1823
86
- sknetwork/gnn/tests/test_utils.py,sha256=MJvOXEWouRiIVaPM76W0hizt3jFb-1_BXHLd1zkPzSg,1884
87
- sknetwork/hierarchy/__init__.py,sha256=-2-y7iBVQRanXLSl9kY8VASJVqx37trYmVNcz74QsUc,418
88
- sknetwork/hierarchy/base.py,sha256=iXQvMTGGGbLm5zOgHNpR8erMtJIXNDqV8X5oNY80wNg,2097
89
- sknetwork/hierarchy/louvain_hierarchy.py,sha256=QWgGQNoZxRoOBULDbC-1J-jRg7duDX8ItcL19WHpIlY,9367
90
- sknetwork/hierarchy/metrics.py,sha256=5WZLsSLYKifLIQ9aPrXyzvPtTFN5ROSlNivhV-n9VuY,8280
91
- sknetwork/hierarchy/paris.cp38-win_amd64.pyd,sha256=JviEUupAZ1dcVuQ_HGI-A2pzKrQov1aCqj_OYNFlJxI,282112
92
- sknetwork/hierarchy/paris.cpp,sha256=8CqVL5U29zD5BaOe7rmvtIeJjbviFEX-mV-s_FzNqvE,1296281
93
- sknetwork/hierarchy/paris.pyx,sha256=q6hjnaLmFBL_T6RK2Id4TgqN89V4DyJhFzvkl9H-pdo,11990
94
- sknetwork/hierarchy/postprocess.py,sha256=h8v3Ft0li53ewkbpdeiM4j2Xw8tjPbvpJkpqIJstZ-Y,12313
95
- sknetwork/hierarchy/tests/__init__.py,sha256=jRlC4pbyKuxaiXvByYK-4ix7DwYWxpjwKNvSXZ7rQJE,27
96
- sknetwork/hierarchy/tests/test_API.py,sha256=TuAH54nypEPmhzV9POoyg43cVLop7FQhhhl_w-NgwjA,742
97
- sknetwork/hierarchy/tests/test_algos.py,sha256=DtIlYH9zqX0tiX0nmuvL5jTAZiqMhb56F7IQRV-jeMc,1172
98
- sknetwork/hierarchy/tests/test_metrics.py,sha256=FOo-AhxIf_3U9LGuE3OFA1ZbycbqMa8KH0iarSIwH6Y,3220
99
- sknetwork/hierarchy/tests/test_postprocess.py,sha256=Bm1_XU6OgwZr_1B28IA5m_HZRqI7GMwlTLpzkXux__Y,2266
100
- sknetwork/linalg/__init__.py,sha256=_qdALdabKv3x8CAuhq6UB4R9jRewNfpgh6XCRnhHvCE,545
101
- sknetwork/linalg/basics.py,sha256=WDlylrkBTCQpjXGtzs8kshJYfpo0h3uM8TMhHmnAnnM,1179
102
- sknetwork/linalg/diteration.cp38-win_amd64.pyd,sha256=CQ747MkxSkfYmUWrjwzLLNTzSHufe5UUGbiaWYiBjQw,192000
103
- sknetwork/linalg/diteration.cpp,sha256=_2Vpq5w2X_5H0EtoKRKHStgCXAvpodhxu3Nwo22ejts,878949
104
- sknetwork/linalg/diteration.pyx,sha256=kYl5ZxCBzaK7F3Ju40pcjzph5qaPX95UKfUecsmjh9k,1506
105
- sknetwork/linalg/eig_solver.py,sha256=-Xl87UQUFD9Y7UJok2SYD3Vv0Z82FZ-quqsdOqjEOgY,2799
106
- sknetwork/linalg/laplacian.py,sha256=qifd-8iltcTKCQW-7fG5z3XfwVrrrCeaBqbViBQCLf0,416
107
- sknetwork/linalg/normalization.py,sha256=obwwS0E_gVXbZlVkxWBVmAyGlTS8WCKwSTnK7wayJTw,2393
108
- sknetwork/linalg/operators.py,sha256=PPGw20FDAXWj89_CD-lVVh9oA30-O29-XtN_yIygKcM,7660
109
- sknetwork/linalg/polynome.py,sha256=qnIhfpRk26JMinuNCrZO1EDj5ci65ZLxkKJyhO7HxpE,2201
110
- sknetwork/linalg/ppr_solver.py,sha256=Vr8H5f3R8qwvqlhmvlt8p2t09v83WCLyx9mlCvXVLe8,6706
111
- sknetwork/linalg/push.cp38-win_amd64.pyd,sha256=siB4CDUWdjhfgimsTy668m8VcSXIfSan9BedhPmnwaY,211456
112
- sknetwork/linalg/push.cpp,sha256=VLg_94IGOmHeUEOncp8LXhwYSCg8lw57TqLUJHasilU,1005376
113
- sknetwork/linalg/push.pyx,sha256=jPjTqyhhXSKfqsYhbwkPGP_y6wJt_dfmof4FZS0Pvp0,2504
114
- sknetwork/linalg/sparse_lowrank.py,sha256=-6-cNRs6tpiNqA8ah3mBKWap3Nh9GQHTFIarPjIiC7U,5170
115
- sknetwork/linalg/svd_solver.py,sha256=vHcwG07cyxnm5KhHRVeJ0pZU5lg3u1uV1eOikCA6V8Y,2778
116
- sknetwork/linalg/tests/__init__.py,sha256=i2cO6oXoryXdEJ-HdSFZsY7LZdNit7W3GC8J8LAUMU4,24
117
- sknetwork/linalg/tests/test_eig.py,sha256=c_BpjP_S7xCwYgk2N7kaFfsjV1-nfUYCu3Rys07bPeo,1548
118
- sknetwork/linalg/tests/test_laplacian.py,sha256=iGI4bFmYfhCbymlN4wcnE0tV9GmApC3g7bDL3Qx8dR0,452
119
- sknetwork/linalg/tests/test_normalization.py,sha256=mwUzdftJg0ZucOi5hf1X0dqOhfMJWyhjpIdymIYeEyc,1142
120
- sknetwork/linalg/tests/test_operators.py,sha256=F-LnXKwoQ3B7c2IuF7luNthz7HJOl9lIsdFfukDjBVo,3175
121
- sknetwork/linalg/tests/test_polynome.py,sha256=-F0iMhYd1lVFau6ILxq7Mr5BtJxJPB-TX3ya3tQwzOM,1015
122
- sknetwork/linalg/tests/test_ppr.py,sha256=uN8vTEemFSDLJJYW2W9EVKb8x25ynB8Bez0D7q-B3NQ,2139
123
- sknetwork/linalg/tests/test_sparse_lowrank.py,sha256=Vqeey1W8jB85zT0L4c5TEGTL0hyQ9zX4FQ6EEI4tmHE,2337
124
- sknetwork/linalg/tests/test_svd.py,sha256=9Uu89-1vTlaJ_H82MUwzGz-iiYf_wFiZMyfelVBRHMI,1323
125
- sknetwork/linkpred/__init__.py,sha256=a7t20Q3xpm1M5IXnyErmucoQuHnGwPTNKAD42oYHEWQ,74
126
- sknetwork/linkpred/base.py,sha256=Bjuwiep1ZckROUKGWpttZzo9pOR8ea-atCTxnGLcZDQ,788
127
- sknetwork/linkpred/nn.py,sha256=I9r5xiob1lFAcNfF7369LOLzwZMJJrzFofJOvEL0Sws,4085
128
- sknetwork/linkpred/tests/__init__.py,sha256=vghxhmK0F5SJOYIb9HZV0h3AVXsCVEPwkgfM7aPpV9M,33
129
- sknetwork/linkpred/tests/test_nn.py,sha256=-1r8LyU34XXvhHnvJA53fGmOd6Ei2jGG6-LHtYvHYGc,1010
130
- sknetwork/path/__init__.py,sha256=tTfCsZCydR5zWkwkJN6_9RwU7bOlG4IRtJy5TsCoKME,249
131
- sknetwork/path/metrics.py,sha256=d_ILvQKY8MWqjl5jny1jrLmZruMgGOUYf6BpRVzmlq8,5015
132
- sknetwork/path/search.py,sha256=3rXmt052El8R02XvpAlljGv03sQVtYJ-HeCApHShJrw,2568
133
- sknetwork/path/shortest_path.py,sha256=74JtUcxzcRS4GuHPqDvs_lc6nZpOlvbVspB8r6UkpTM,6911
134
- sknetwork/path/tests/__init__.py,sha256=ntNGJ8p6RZkIrYnePF-TESyoidEXx8fw6A9OBNAlIqo,29
135
- sknetwork/path/tests/test_metrics.py,sha256=O_5-2vtu5hG3csO_LuquMn8AidprDunZD7SVsnTi1_I,868
136
- sknetwork/path/tests/test_search.py,sha256=7-rrTJfw2l3D3kP-rauQJyD5lyvC_bO6kDUAB06A1xk,728
137
- sknetwork/path/tests/test_shortest_path.py,sha256=s973xj3Dp-Rh9nkOl-r8BdPtMlgIr-wXUwazZUSbaJw,1564
138
- sknetwork/ranking/__init__.py,sha256=88IDSo6q9uPCtMBUzAenq9Tfw5qC6xAN7wihCsQUmhg,405
139
- sknetwork/ranking/base.py,sha256=aYs2Jl_higrG1pyxgiPEgFPSp3C9nPtF3_BT3dYQlpI,1503
140
- sknetwork/ranking/betweenness.cp38-win_amd64.pyd,sha256=HkIj-NF9ySgycs4DBmLvexsiAFSPgJUJfnTpzx4G1ok,74752
141
- sknetwork/ranking/betweenness.cpp,sha256=aHcRD390cqsWgE_2jfbXQOxeypKDaAbEwv70eBNEewE,281846
142
- sknetwork/ranking/betweenness.pyx,sha256=JsLjz9otsrPWMwGrN9wD0SzVZHdh4HwVAs9pZGSaw-M,3259
143
- sknetwork/ranking/closeness.py,sha256=ozR46X23EznYFwtt_xdPZVMd1jgRrhYbthja43d-wHs,3153
144
- sknetwork/ranking/harmonic.py,sha256=LbWpyOfsI98H3YNgHWDteCxWToBM5tnvf7LRLiUp2Jk,2385
145
- sknetwork/ranking/hits.py,sha256=uhGJH2C0U9hLsVRutI6M1ulbEIM7L6dCeYqiAhtTD9A,2855
146
- sknetwork/ranking/katz.py,sha256=WQpxJq_qqvjFm1ZG_P1ynfpzLlPu-dXCJ9luK-8sRjY,2618
147
- sknetwork/ranking/pagerank.py,sha256=r1zz9IiqMcX3k1nvcgc-144aIYej2jVACy_1hBUugO8,4853
148
- sknetwork/ranking/postprocess.py,sha256=3NyhVdywPZFC56TlhC4QcgL_vgtF4wpk0UotU_sZaOg,631
149
- sknetwork/ranking/tests/__init__.py,sha256=46AJCs9irV6PtFg8CVH8TqpqHA6ajs29-3rsL3zxZQ8,25
150
- sknetwork/ranking/tests/test_API.py,sha256=OqQmT_TCsABrtWx3L_2yq1Pd3Nm2snTu8_zvIJh3PIk,1194
151
- sknetwork/ranking/tests/test_betweenness.py,sha256=Ur1WM2PGNkciMbb99S7CrDkNkZIj1X-tVn-U2_gFAvs,1171
152
- sknetwork/ranking/tests/test_closeness.py,sha256=73xTsOpP5OUhA3J714pVlFWUrrLwry8dv9Oca8Fm1gM,1041
153
- sknetwork/ranking/tests/test_hits.py,sha256=aOPsAyU3GNyb_Mcujd7U_TLBtzWn91SuOPyZZRUF9MU,511
154
- sknetwork/ranking/tests/test_pagerank.py,sha256=e_f7Y33ITMDZyFgvZaRxrTyIODgvXwKgDK8BgMyitw0,1983
155
- sknetwork/ranking/tests/test_postprocess.py,sha256=krBSXLzmseTxjdwkMdlZu62bZ56kC4iCpIelFMLEmDI,524
156
- sknetwork/regression/__init__.py,sha256=FYnlc-DKS1Mz2lKVCtKldjSgtvzxMmkd5kwKq2HdNmE,145
157
- sknetwork/regression/base.py,sha256=6BpA7O3lVTwkYtaS9JlDaBOHvNVnQH7lrxD7pSYJiJ0,1129
158
- sknetwork/regression/diffusion.py,sha256=GagoWzmlc86w8eY_df-kIbbyNVNXzrhE1XJIkLFSTNU,7462
159
- sknetwork/regression/tests/__init__.py,sha256=GvqvsSMbqMYwRmWw4VrZntwccz1jOPqrqufAZqw_NAc,28
160
- sknetwork/regression/tests/test_API.py,sha256=7x_n8bG8hUcJVRYDbdC6GvPmwW5cE7HmASlu5SHnwFI,1056
161
- sknetwork/regression/tests/test_diffusion.py,sha256=kUncxGwUnXFn15TfAkQKqE4syVvg_-ERNZGwua1JJoo,1734
162
- sknetwork/topology/__init__.py,sha256=mafuxKAbQIlrM6i_9lPw0S6WhFR1AT6lKSaZDRD7uz4,456
163
- sknetwork/topology/dag.py,sha256=_5z1uy0D4zC2mF9vpfE0bYmNffcMkMIERGlCDbFTxa8,2396
164
- sknetwork/topology/dag_core.cp38-win_amd64.pyd,sha256=vRjzdZOP8a4Gd8FkdlWT77evbRZrlGnkPo780ttgU90,195072
165
- sknetwork/topology/dag_core.cpp,sha256=c2mszbw6764LVQPMbpa729_AaZwtgSDl7Uez_5gkzgE,874331
166
- sknetwork/topology/dag_core.pyx,sha256=GdWMM_4fn1tFxWJHThTqC8oxRGIzCtwd1DjOaEkH9fY,1046
167
- sknetwork/topology/kcliques.cp38-win_amd64.pyd,sha256=u8fZl1MVhyhcNdboO5T7LO92Nd03VZ_Vlg49SGWUjv0,240640
168
- sknetwork/topology/kcliques.cpp,sha256=Lo7Z4ZcQoV8l0nmrKBX84h2n7eewVX1VyGf8skILJMc,1103471
169
- sknetwork/topology/kcliques.pyx,sha256=qhm0ENqqPngm5y_1Hxgt8Zjtaba5gMKlPAolHsUNBqU,5314
170
- sknetwork/topology/kcore.cp38-win_amd64.pyd,sha256=bsNeJr1EexAXtXoEEk4wocl9s1HkpouD8jktyjioP2E,215552
171
- sknetwork/topology/kcore.cpp,sha256=vwQXW74DSs1z7O7ukD5XATu3RdwHKJvrUBm_Frxfj28,1029664
172
- sknetwork/topology/kcore.pyx,sha256=A7rX7-WiffMOSuOrVfSBWa_A14antAlu6rvrXTVrVTI,3500
173
- sknetwork/topology/structure.py,sha256=ZN8Oz2pCtDPgadvzAtTpaeBrGip564vWz9XVKJaUR8E,8856
174
- sknetwork/topology/triangles.cp38-win_amd64.pyd,sha256=LEYFwFwx7OAASBJA4F4pE50FAApzbj1k7KNZhAUc2dE,59904
175
- sknetwork/topology/triangles.cpp,sha256=-gjkMkusOZmhO0VK3HZtSFP-VWfC19yPJLMwcE8NGZ0,258293
176
- sknetwork/topology/triangles.pyx,sha256=ra1CSDDCdlEqZ1VTqS6Gv62MabhYg2bQ60M9ybPtZJw,4811
177
- sknetwork/topology/weisfeiler_lehman.py,sha256=MLCM7ViRuYl4tj5hjlB34iulD0Z1COYIaT52JQLBNEI,5473
178
- sknetwork/topology/weisfeiler_lehman_core.cp38-win_amd64.pyd,sha256=ZkL-VBwrcuCstRPaxGneCDeKOzxtXPbJJVrjeAMH0yM,202240
179
- sknetwork/topology/weisfeiler_lehman_core.cpp,sha256=Oqmf-fOHB-XNrmEDEvAbT0b7P0VgEB8hJKGY4cZnxhc,880492
180
- sknetwork/topology/weisfeiler_lehman_core.pyx,sha256=Tg690FqNjoCaxd1KeOKY5fFrEGEnmeShc1NkvhIbw7U,3223
181
- sknetwork/topology/tests/__init__.py,sha256=84T-xv8JCFeA9D7Rxw9gy3_dNAoE8CY1k1pYcuG8K3s,26
182
- sknetwork/topology/tests/test_cliques.py,sha256=33JZ78-su0he3S_vk8U7sna__Gvyo2oaUI-KgcQ1LIY,929
183
- sknetwork/topology/tests/test_cores.py,sha256=e7EcpX5ah-XY3B4oAg__XfpQXYHahNrRnyGRSS6W390,628
184
- sknetwork/topology/tests/test_dag.py,sha256=j0YOY-HTLopB3revJCpCVhSUvKJNUkgro4iiOw-nbMY,680
185
- sknetwork/topology/tests/test_structure.py,sha256=MJcPSCNSxairXVc_FO4nCsqJu7f_-zyy1VC4sFL8b90,4734
186
- sknetwork/topology/tests/test_triangles.py,sha256=k8wc7ZFrHcSUnfdViHQHAZjYT8rYz6qUoYiDQPXaBmQ,1384
187
- sknetwork/topology/tests/test_wl_coloring.py,sha256=ENzomssejjvsjD6mDjTsgoXHlR8OPAOQ_AFOsK3sjmo,1697
188
- sknetwork/topology/tests/test_wl_kernel.py,sha256=8j0bRgbyy2mKMvEFs8bfTimU35f3gbwlLQu4w8WqeQc,864
189
- sknetwork/utils/__init__.py,sha256=poK60DO1CGqGenK6zCbQX31YKTMzJ9d7_jbf0xPjQ0k,1052
190
- sknetwork/utils/base.py,sha256=7Zd65d8p0Xh6jsPGdKnmnBCPJ1R3V6DaodeFYGAlGS4,1086
191
- sknetwork/utils/check.py,sha256=3sHaRmLM9XsyX-wEi4o1r_c8QMQfV8jwmEeqS5ntrS4,13248
192
- sknetwork/utils/format.py,sha256=xMDHgcqCSYzOejy7OJiA_R2CtS0aFheAy6jJbGaSquY,8845
193
- sknetwork/utils/membership.py,sha256=claXsrZd6BVT4WuuI0P00tqapbczvAxtLAWMWNQ78KE,2234
194
- sknetwork/utils/minheap.cp38-win_amd64.pyd,sha256=QZMApc3_AC31cs_urPP2XmNBrE8dkwXW8aNBkqyHWl8,183808
195
- sknetwork/utils/minheap.cpp,sha256=xv1XOESn_CFpYsHt8lQk9J-no2bDozbMYHlN_iAN0FE,866947
196
- sknetwork/utils/minheap.pxd,sha256=KP710yK0fKOpnN7d87LSYyRuipzgNUd-YqfTN0fbmx0,661
197
- sknetwork/utils/minheap.pyx,sha256=mr6VIqK-0SGprUHmKhduuu9D-e8LULavdbR9BYeHHyE,3496
198
- sknetwork/utils/neighbors.py,sha256=-EwBXigM3mn2qvVTi_aPmG0XifDMojZgsMQ9_A8cLkk,3466
199
- sknetwork/utils/simplex.py,sha256=uEO_mcZCb9YMHCAK3DIlYM0YpkH3ZAcQxD9SgmVKz3M,4384
200
- sknetwork/utils/tfidf.py,sha256=vvISEaZJa7RZrNNgQEAHgMH2rJToARuNWcVjnA8u7po,993
201
- sknetwork/utils/timeout.py,sha256=mXSqgKFRc6AVZBlIobN2xPYJjAyQOClKH3KQJ5M_4Sw,1085
202
- sknetwork/utils/values.py,sha256=Y0GYTazOV9Sh_8BQC_yjleoUyx2Tjz9G2EYSu_IZAxM,2583
203
- sknetwork/utils/verbose.py,sha256=9-R6D5s217EsCzA7D-IPHbNLfFIBEiLw9xua2CyAoAU,988
204
- sknetwork/utils/tests/__init__.py,sha256=JQuARG8Ycb5apL6PUy_wuEHsLjmEZFOPQUKWRgTMdCY,23
205
- sknetwork/utils/tests/test_base.py,sha256=RmS70uR6F0p5k2yBqPKViGbfpAmEwO3Rx1JuFYZmIO4,851
206
- sknetwork/utils/tests/test_bunch.py,sha256=eZIQEzd-Hc4uixoarEjsuS_uJQO2_b0d-eO1Ygpw1Ho,351
207
- sknetwork/utils/tests/test_check.py,sha256=R3AB9OmBIHE7hO_LfNLzRfJJuOYQxDWY3M9tSvDs7zY,6948
208
- sknetwork/utils/tests/test_format.py,sha256=_88lJ6Ewpr8mro8gyuq6Kj-inN6-W5GeZdTlZN0GzmY,2175
209
- sknetwork/utils/tests/test_membership.py,sha256=d_TobwpRl2K3qCcFBDQV1bGCSmF7Ls3r2s_XGvJC3Sg,772
210
- sknetwork/utils/tests/test_neighbors.py,sha256=Q7-Y23CcF4vn5lcyEqjaojEAk7-pG03Mf59O1Rz3IUs,1467
211
- sknetwork/utils/tests/test_projection_simplex.py,sha256=hBXbJc-G2v7Qr9m97gYoznHbs5blEzIk48NmdEjhaIQ,892
212
- sknetwork/utils/tests/test_tfidf.py,sha256=KYz_LSxi625kKL-v5-uA1-YQOliIfgXCmNXTAZtgpmw,463
213
- sknetwork/utils/tests/test_values.py,sha256=K3ctTXpSy9fwiHnpFVlHX5KeTd2wNF4kbFiTXe_gQq8,2334
214
- sknetwork/utils/tests/test_verbose.py,sha256=TlQ3JdO08lL_01A0RXKelnU9cMdUp6IWxNhBT6QG6Ko,410
215
- sknetwork/visualization/__init__.py,sha256=0gVE7r4oXW6IPlNzq2EXwvr_oRDwCjtuhBh0FN-4I4Y,162
216
- sknetwork/visualization/colors.py,sha256=NhyMQeetfH16khnJD2gD_uZJkBD3JQDV0K3Jzacamqw,2543
217
- sknetwork/visualization/dendrograms.py,sha256=-U-WVuO-uFpqPrXuWJmhpkIUyeYX-GLemRmChdtbWhY,8280
218
- sknetwork/visualization/graphs.py,sha256=nhxU9VuvP6Y9C2e1ND7tkssdewAXp4Hu0yp6GIjmrXo,32740
219
- sknetwork/visualization/tests/__init__.py,sha256=hrso2pNVzMWn4D2pRyWA_xAMib-xacKjm-rf91MyGGk,31
220
- sknetwork/visualization/tests/test_dendrograms.py,sha256=4BEdDonrQZsylKgwDpxwTdUZTnqbMKokpugTYbcAp5o,2455
221
- sknetwork/visualization/tests/test_graphs.py,sha256=63ISDfBHE9JQOeyXSjKuwD3ZVl3CnJ0vnrqrhqj3L_I,8885
222
- scikit_network-0.30.0.dist-info/AUTHORS.rst,sha256=SSAG2WortFtGW_lEWFDX15zhkIvoEOwc60q2yVTRN7Q,921
223
- scikit_network-0.30.0.dist-info/LICENSE,sha256=BJ1Hth1QjBmjIfHcp1sVxlkEqHYM58Vn5bcpYcggMZE,1656
224
- scikit_network-0.30.0.dist-info/METADATA,sha256=yCsGNB0LVK9CXyw6lyiFhEYHSBCdHRLMjyFxgCivvjY,14068
225
- scikit_network-0.30.0.dist-info/WHEEL,sha256=b_PH-i_F2xFYDXcROE5vpDbWUcY020I0eLFvEIYA9Pc,100
226
- scikit_network-0.30.0.dist-info/top_level.txt,sha256=fkwspWQ9B3csqb5ENEOoVciRY6XftnMuz4MvTDQeSsg,10
227
- scikit_network-0.30.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_graph_disconnect, 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_graph_disconnect(), 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))