scikit-network 0.33.3__cp313-cp313-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 (228) hide show
  1. scikit_network-0.33.3.dist-info/METADATA +122 -0
  2. scikit_network-0.33.3.dist-info/RECORD +228 -0
  3. scikit_network-0.33.3.dist-info/WHEEL +5 -0
  4. scikit_network-0.33.3.dist-info/licenses/AUTHORS.rst +43 -0
  5. scikit_network-0.33.3.dist-info/licenses/LICENSE +34 -0
  6. scikit_network-0.33.3.dist-info/top_level.txt +1 -0
  7. sknetwork/__init__.py +21 -0
  8. sknetwork/base.py +67 -0
  9. sknetwork/classification/__init__.py +8 -0
  10. sknetwork/classification/base.py +142 -0
  11. sknetwork/classification/base_rank.py +133 -0
  12. sknetwork/classification/diffusion.py +134 -0
  13. sknetwork/classification/knn.py +139 -0
  14. sknetwork/classification/metrics.py +205 -0
  15. sknetwork/classification/pagerank.py +66 -0
  16. sknetwork/classification/propagation.py +152 -0
  17. sknetwork/classification/tests/__init__.py +1 -0
  18. sknetwork/classification/tests/test_API.py +30 -0
  19. sknetwork/classification/tests/test_diffusion.py +77 -0
  20. sknetwork/classification/tests/test_knn.py +23 -0
  21. sknetwork/classification/tests/test_metrics.py +53 -0
  22. sknetwork/classification/tests/test_pagerank.py +20 -0
  23. sknetwork/classification/tests/test_propagation.py +24 -0
  24. sknetwork/classification/vote.cp313-win_amd64.pyd +0 -0
  25. sknetwork/classification/vote.cpp +27584 -0
  26. sknetwork/classification/vote.pyx +56 -0
  27. sknetwork/clustering/__init__.py +8 -0
  28. sknetwork/clustering/base.py +172 -0
  29. sknetwork/clustering/kcenters.py +253 -0
  30. sknetwork/clustering/leiden.py +242 -0
  31. sknetwork/clustering/leiden_core.cp313-win_amd64.pyd +0 -0
  32. sknetwork/clustering/leiden_core.cpp +31575 -0
  33. sknetwork/clustering/leiden_core.pyx +124 -0
  34. sknetwork/clustering/louvain.py +286 -0
  35. sknetwork/clustering/louvain_core.cp313-win_amd64.pyd +0 -0
  36. sknetwork/clustering/louvain_core.cpp +31220 -0
  37. sknetwork/clustering/louvain_core.pyx +124 -0
  38. sknetwork/clustering/metrics.py +91 -0
  39. sknetwork/clustering/postprocess.py +66 -0
  40. sknetwork/clustering/propagation_clustering.py +104 -0
  41. sknetwork/clustering/tests/__init__.py +1 -0
  42. sknetwork/clustering/tests/test_API.py +38 -0
  43. sknetwork/clustering/tests/test_kcenters.py +60 -0
  44. sknetwork/clustering/tests/test_leiden.py +34 -0
  45. sknetwork/clustering/tests/test_louvain.py +135 -0
  46. sknetwork/clustering/tests/test_metrics.py +50 -0
  47. sknetwork/clustering/tests/test_postprocess.py +39 -0
  48. sknetwork/data/__init__.py +6 -0
  49. sknetwork/data/base.py +33 -0
  50. sknetwork/data/load.py +406 -0
  51. sknetwork/data/models.py +459 -0
  52. sknetwork/data/parse.py +644 -0
  53. sknetwork/data/test_graphs.py +84 -0
  54. sknetwork/data/tests/__init__.py +1 -0
  55. sknetwork/data/tests/test_API.py +30 -0
  56. sknetwork/data/tests/test_base.py +14 -0
  57. sknetwork/data/tests/test_load.py +95 -0
  58. sknetwork/data/tests/test_models.py +52 -0
  59. sknetwork/data/tests/test_parse.py +250 -0
  60. sknetwork/data/tests/test_test_graphs.py +29 -0
  61. sknetwork/data/tests/test_toy_graphs.py +68 -0
  62. sknetwork/data/timeout.py +38 -0
  63. sknetwork/data/toy_graphs.py +611 -0
  64. sknetwork/embedding/__init__.py +8 -0
  65. sknetwork/embedding/base.py +94 -0
  66. sknetwork/embedding/force_atlas.py +198 -0
  67. sknetwork/embedding/louvain_embedding.py +148 -0
  68. sknetwork/embedding/random_projection.py +135 -0
  69. sknetwork/embedding/spectral.py +141 -0
  70. sknetwork/embedding/spring.py +198 -0
  71. sknetwork/embedding/svd.py +359 -0
  72. sknetwork/embedding/tests/__init__.py +1 -0
  73. sknetwork/embedding/tests/test_API.py +49 -0
  74. sknetwork/embedding/tests/test_force_atlas.py +35 -0
  75. sknetwork/embedding/tests/test_louvain_embedding.py +33 -0
  76. sknetwork/embedding/tests/test_random_projection.py +28 -0
  77. sknetwork/embedding/tests/test_spectral.py +81 -0
  78. sknetwork/embedding/tests/test_spring.py +50 -0
  79. sknetwork/embedding/tests/test_svd.py +43 -0
  80. sknetwork/gnn/__init__.py +10 -0
  81. sknetwork/gnn/activation.py +117 -0
  82. sknetwork/gnn/base.py +181 -0
  83. sknetwork/gnn/base_activation.py +90 -0
  84. sknetwork/gnn/base_layer.py +109 -0
  85. sknetwork/gnn/gnn_classifier.py +305 -0
  86. sknetwork/gnn/layer.py +153 -0
  87. sknetwork/gnn/loss.py +180 -0
  88. sknetwork/gnn/neighbor_sampler.py +65 -0
  89. sknetwork/gnn/optimizer.py +164 -0
  90. sknetwork/gnn/tests/__init__.py +1 -0
  91. sknetwork/gnn/tests/test_activation.py +56 -0
  92. sknetwork/gnn/tests/test_base.py +75 -0
  93. sknetwork/gnn/tests/test_base_layer.py +37 -0
  94. sknetwork/gnn/tests/test_gnn_classifier.py +130 -0
  95. sknetwork/gnn/tests/test_layers.py +80 -0
  96. sknetwork/gnn/tests/test_loss.py +33 -0
  97. sknetwork/gnn/tests/test_neigh_sampler.py +23 -0
  98. sknetwork/gnn/tests/test_optimizer.py +43 -0
  99. sknetwork/gnn/tests/test_utils.py +41 -0
  100. sknetwork/gnn/utils.py +127 -0
  101. sknetwork/hierarchy/__init__.py +6 -0
  102. sknetwork/hierarchy/base.py +96 -0
  103. sknetwork/hierarchy/louvain_hierarchy.py +272 -0
  104. sknetwork/hierarchy/metrics.py +234 -0
  105. sknetwork/hierarchy/paris.cp313-win_amd64.pyd +0 -0
  106. sknetwork/hierarchy/paris.cpp +37868 -0
  107. sknetwork/hierarchy/paris.pyx +316 -0
  108. sknetwork/hierarchy/postprocess.py +350 -0
  109. sknetwork/hierarchy/tests/__init__.py +1 -0
  110. sknetwork/hierarchy/tests/test_API.py +24 -0
  111. sknetwork/hierarchy/tests/test_algos.py +34 -0
  112. sknetwork/hierarchy/tests/test_metrics.py +62 -0
  113. sknetwork/hierarchy/tests/test_postprocess.py +57 -0
  114. sknetwork/linalg/__init__.py +9 -0
  115. sknetwork/linalg/basics.py +37 -0
  116. sknetwork/linalg/diteration.cp313-win_amd64.pyd +0 -0
  117. sknetwork/linalg/diteration.cpp +27400 -0
  118. sknetwork/linalg/diteration.pyx +47 -0
  119. sknetwork/linalg/eig_solver.py +93 -0
  120. sknetwork/linalg/laplacian.py +15 -0
  121. sknetwork/linalg/normalizer.py +86 -0
  122. sknetwork/linalg/operators.py +225 -0
  123. sknetwork/linalg/polynome.py +76 -0
  124. sknetwork/linalg/ppr_solver.py +170 -0
  125. sknetwork/linalg/push.cp313-win_amd64.pyd +0 -0
  126. sknetwork/linalg/push.cpp +31072 -0
  127. sknetwork/linalg/push.pyx +71 -0
  128. sknetwork/linalg/sparse_lowrank.py +142 -0
  129. sknetwork/linalg/svd_solver.py +91 -0
  130. sknetwork/linalg/tests/__init__.py +1 -0
  131. sknetwork/linalg/tests/test_eig.py +44 -0
  132. sknetwork/linalg/tests/test_laplacian.py +18 -0
  133. sknetwork/linalg/tests/test_normalization.py +34 -0
  134. sknetwork/linalg/tests/test_operators.py +66 -0
  135. sknetwork/linalg/tests/test_polynome.py +38 -0
  136. sknetwork/linalg/tests/test_ppr.py +50 -0
  137. sknetwork/linalg/tests/test_sparse_lowrank.py +61 -0
  138. sknetwork/linalg/tests/test_svd.py +38 -0
  139. sknetwork/linkpred/__init__.py +2 -0
  140. sknetwork/linkpred/base.py +46 -0
  141. sknetwork/linkpred/nn.py +126 -0
  142. sknetwork/linkpred/tests/__init__.py +1 -0
  143. sknetwork/linkpred/tests/test_nn.py +27 -0
  144. sknetwork/log.py +19 -0
  145. sknetwork/path/__init__.py +5 -0
  146. sknetwork/path/dag.py +54 -0
  147. sknetwork/path/distances.py +98 -0
  148. sknetwork/path/search.py +31 -0
  149. sknetwork/path/shortest_path.py +61 -0
  150. sknetwork/path/tests/__init__.py +1 -0
  151. sknetwork/path/tests/test_dag.py +37 -0
  152. sknetwork/path/tests/test_distances.py +62 -0
  153. sknetwork/path/tests/test_search.py +40 -0
  154. sknetwork/path/tests/test_shortest_path.py +40 -0
  155. sknetwork/ranking/__init__.py +8 -0
  156. sknetwork/ranking/base.py +61 -0
  157. sknetwork/ranking/betweenness.cp313-win_amd64.pyd +0 -0
  158. sknetwork/ranking/betweenness.cpp +9707 -0
  159. sknetwork/ranking/betweenness.pyx +97 -0
  160. sknetwork/ranking/closeness.py +92 -0
  161. sknetwork/ranking/hits.py +94 -0
  162. sknetwork/ranking/katz.py +83 -0
  163. sknetwork/ranking/pagerank.py +110 -0
  164. sknetwork/ranking/postprocess.py +37 -0
  165. sknetwork/ranking/tests/__init__.py +1 -0
  166. sknetwork/ranking/tests/test_API.py +32 -0
  167. sknetwork/ranking/tests/test_betweenness.py +38 -0
  168. sknetwork/ranking/tests/test_closeness.py +30 -0
  169. sknetwork/ranking/tests/test_hits.py +20 -0
  170. sknetwork/ranking/tests/test_pagerank.py +62 -0
  171. sknetwork/ranking/tests/test_postprocess.py +26 -0
  172. sknetwork/regression/__init__.py +4 -0
  173. sknetwork/regression/base.py +61 -0
  174. sknetwork/regression/diffusion.py +210 -0
  175. sknetwork/regression/tests/__init__.py +1 -0
  176. sknetwork/regression/tests/test_API.py +32 -0
  177. sknetwork/regression/tests/test_diffusion.py +56 -0
  178. sknetwork/sknetwork.py +3 -0
  179. sknetwork/test_base.py +35 -0
  180. sknetwork/test_log.py +15 -0
  181. sknetwork/topology/__init__.py +8 -0
  182. sknetwork/topology/cliques.cp313-win_amd64.pyd +0 -0
  183. sknetwork/topology/cliques.cpp +32565 -0
  184. sknetwork/topology/cliques.pyx +149 -0
  185. sknetwork/topology/core.cp313-win_amd64.pyd +0 -0
  186. sknetwork/topology/core.cpp +30651 -0
  187. sknetwork/topology/core.pyx +90 -0
  188. sknetwork/topology/cycles.py +243 -0
  189. sknetwork/topology/minheap.cp313-win_amd64.pyd +0 -0
  190. sknetwork/topology/minheap.cpp +27332 -0
  191. sknetwork/topology/minheap.pxd +20 -0
  192. sknetwork/topology/minheap.pyx +109 -0
  193. sknetwork/topology/structure.py +194 -0
  194. sknetwork/topology/tests/__init__.py +1 -0
  195. sknetwork/topology/tests/test_cliques.py +28 -0
  196. sknetwork/topology/tests/test_core.py +19 -0
  197. sknetwork/topology/tests/test_cycles.py +65 -0
  198. sknetwork/topology/tests/test_structure.py +85 -0
  199. sknetwork/topology/tests/test_triangles.py +38 -0
  200. sknetwork/topology/tests/test_wl.py +72 -0
  201. sknetwork/topology/triangles.cp313-win_amd64.pyd +0 -0
  202. sknetwork/topology/triangles.cpp +8894 -0
  203. sknetwork/topology/triangles.pyx +151 -0
  204. sknetwork/topology/weisfeiler_lehman.py +133 -0
  205. sknetwork/topology/weisfeiler_lehman_core.cp313-win_amd64.pyd +0 -0
  206. sknetwork/topology/weisfeiler_lehman_core.cpp +27635 -0
  207. sknetwork/topology/weisfeiler_lehman_core.pyx +114 -0
  208. sknetwork/utils/__init__.py +7 -0
  209. sknetwork/utils/check.py +355 -0
  210. sknetwork/utils/format.py +221 -0
  211. sknetwork/utils/membership.py +82 -0
  212. sknetwork/utils/neighbors.py +115 -0
  213. sknetwork/utils/tests/__init__.py +1 -0
  214. sknetwork/utils/tests/test_check.py +190 -0
  215. sknetwork/utils/tests/test_format.py +63 -0
  216. sknetwork/utils/tests/test_membership.py +24 -0
  217. sknetwork/utils/tests/test_neighbors.py +41 -0
  218. sknetwork/utils/tests/test_tfidf.py +18 -0
  219. sknetwork/utils/tests/test_values.py +66 -0
  220. sknetwork/utils/tfidf.py +37 -0
  221. sknetwork/utils/values.py +76 -0
  222. sknetwork/visualization/__init__.py +4 -0
  223. sknetwork/visualization/colors.py +34 -0
  224. sknetwork/visualization/dendrograms.py +277 -0
  225. sknetwork/visualization/graphs.py +1039 -0
  226. sknetwork/visualization/tests/__init__.py +1 -0
  227. sknetwork/visualization/tests/test_dendrograms.py +53 -0
  228. sknetwork/visualization/tests/test_graphs.py +176 -0
@@ -0,0 +1 @@
1
+ """tests for visualization"""
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """tests for visualization of dendrograms"""
4
+
5
+ import tempfile
6
+ import unittest
7
+
8
+ import numpy as np
9
+
10
+ from sknetwork.data.toy_graphs import karate_club, painters
11
+ from sknetwork.hierarchy import Paris
12
+ from sknetwork.visualization.dendrograms import visualize_dendrogram, svg_dendrogram, svg_dendrogram_top
13
+
14
+
15
+ # noinspection DuplicatedCode
16
+ class TestVisualization(unittest.TestCase):
17
+
18
+ def test_undirected(self):
19
+ adjacency = karate_club()
20
+ paris = Paris()
21
+ dendrogram = paris.fit_transform(adjacency)
22
+ image = svg_dendrogram(dendrogram)
23
+ self.assertEqual(image[1:4], 'svg')
24
+ n = adjacency.shape[0]
25
+ image = visualize_dendrogram(dendrogram, names=np.arange(n), width=200, height=200, margin=10, margin_text=5,
26
+ scale=3, n_clusters=3, color='green', colors=['red', 'blue'], font_size=14,
27
+ reorder=True, rotate=True)
28
+ self.assertEqual(image[1:4], 'svg')
29
+ image = svg_dendrogram(dendrogram, names=np.arange(n), width=200, height=200, margin=10, margin_text=5, scale=3,
30
+ n_clusters=3, color='green', colors={0: 'red', 1: 'blue'}, font_size=14, reorder=False,
31
+ rotate=True)
32
+ self.assertEqual(image[1:4], 'svg')
33
+ svg_dendrogram_top(dendrogram, names=np.arange(n), width=200, height=200, margin=10, margin_text=5, scale=3,
34
+ n_clusters=3, color='green', colors=np.array(['red', 'black', 'blue']), font_size=14,
35
+ reorder=False, rotate_names=True, line_width=0.1)
36
+
37
+ def test_directed(self):
38
+ graph = painters(True)
39
+ adjacency = graph.adjacency
40
+ names = graph.names
41
+ paris = Paris()
42
+ dendrogram = paris.fit_transform(adjacency)
43
+ image = visualize_dendrogram(dendrogram)
44
+ self.assertEqual(image[1:4], 'svg')
45
+ image = visualize_dendrogram(dendrogram, names=names, width=200, height=200, margin=10, margin_text=5, scale=3,
46
+ n_clusters=3, color='green', font_size=14, reorder=True, rotate=True)
47
+ self.assertEqual(image[1:4], 'svg')
48
+
49
+ filename = tempfile.gettempdir() + '/image'
50
+ _ = visualize_dendrogram(dendrogram, filename=filename)
51
+ with open(filename + '.svg', 'r') as f:
52
+ row = f.readline()
53
+ self.assertEqual(row[1:4], 'svg')
@@ -0,0 +1,176 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """tests for visualization of graphs"""
4
+
5
+ import tempfile
6
+ import unittest
7
+
8
+ import numpy as np
9
+ from scipy import sparse
10
+
11
+ from sknetwork.data.test_graphs import test_disconnected_graph, test_bigraph_disconnect
12
+ from sknetwork.data.toy_graphs import karate_club, painters, movie_actor, bow_tie, star_wars
13
+ from sknetwork.visualization.graphs import visualize_graph, visualize_bigraph, svg_graph, svg_bigraph, svg_text, rescale
14
+
15
+
16
+ # noinspection DuplicatedCode
17
+ class TestVisualization(unittest.TestCase):
18
+
19
+ def test_undirected(self):
20
+ graph = karate_club(True)
21
+ adjacency = graph.adjacency
22
+ position = graph.position
23
+ labels = graph.labels
24
+ image = visualize_graph(adjacency, position, labels=labels)
25
+ self.assertEqual(image[1:4], 'svg')
26
+ # alias
27
+ image = svg_graph(adjacency, position, labels=labels)
28
+ self.assertEqual(image[1:4], 'svg')
29
+ image = visualize_graph(adjacency, position, labels=list(labels))
30
+ self.assertEqual(image[1:4], 'svg')
31
+ image = visualize_graph(adjacency, position, display_edges=False)
32
+ self.assertEqual(image[1:4], 'svg')
33
+ image = visualize_graph(adjacency, position, height=None)
34
+ self.assertEqual(image[1:4], 'svg')
35
+ image = visualize_graph(adjacency, position, height=300, width=None)
36
+ self.assertEqual(image[1:4], 'svg')
37
+ image = visualize_graph(adjacency, position, height=None, width=200)
38
+ self.assertEqual(image[1:4], 'svg')
39
+ n = adjacency.shape[0]
40
+ edge_labels = [(0, 1, 0), (1, 1, 1), (3, 10, 2)]
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)
49
+ self.assertEqual(image[1:4], 'svg')
50
+ image = visualize_graph(adjacency, position=None, labels={0: 0})
51
+ self.assertEqual(image[1:4], 'svg')
52
+ image = visualize_graph(adjacency, position=None, scores={0: 0})
53
+ self.assertEqual(image[1:4], 'svg')
54
+ image = visualize_graph(adjacency=None, position=position)
55
+ self.assertEqual(image[1:4], 'svg')
56
+ image = visualize_graph(adjacency=None, position=position, edge_labels=edge_labels)
57
+ self.assertEqual(image[1:4], 'svg')
58
+ image = visualize_graph(adjacency, position, labels, label_colors={0: "red", 1: "blue"})
59
+ self.assertEqual(image[1:4], 'svg')
60
+ image = visualize_graph(adjacency, position, labels, label_colors=["red", "blue"])
61
+ self.assertEqual(image[1:4], 'svg')
62
+ image = visualize_graph(adjacency, position, labels, node_weights=np.arange(adjacency.shape[0]))
63
+ self.assertEqual(image[1:4], 'svg')
64
+ image = visualize_graph(adjacency, position, scores=list(np.arange(n)))
65
+ self.assertEqual(image[1:4], 'svg')
66
+ image = visualize_graph(adjacency, position, seeds={0: 1, 2: 1})
67
+ self.assertEqual(image[1:4], 'svg')
68
+ image = visualize_graph(adjacency, position, labels=np.arange(n), name_position='left')
69
+ self.assertEqual(image[1:4], 'svg')
70
+ image = visualize_graph(adjacency, position, scale=2, labels=np.arange(n), name_position='left')
71
+ self.assertEqual(image[1:4], 'svg')
72
+ with self.assertRaises(ValueError):
73
+ visualize_graph(adjacency, position, labels=[0, 1])
74
+ with self.assertRaises(ValueError):
75
+ visualize_graph(adjacency, position, scores=[0, 1])
76
+ visualize_graph(adjacency, position, scale=2, labels=np.arange(n), name_position='left')
77
+
78
+ def test_directed(self):
79
+ graph = painters(True)
80
+ adjacency = graph.adjacency
81
+ position = graph.position
82
+ names = graph.names
83
+ image = visualize_graph(adjacency, position, names=names)
84
+ self.assertEqual(image[1:4], 'svg')
85
+ image = visualize_graph(adjacency, position, display_edges=False)
86
+ self.assertEqual(image[1:4], 'svg')
87
+ n = adjacency.shape[0]
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)
95
+ self.assertEqual(image[1:4], 'svg')
96
+
97
+ def test_bipartite(self):
98
+ graph = movie_actor(True)
99
+ biadjacency = graph.biadjacency
100
+ names_row = graph.names_row
101
+ names_col = graph.names_col
102
+ image = visualize_bigraph(biadjacency, names_row, names_col)
103
+ self.assertEqual(image[1:4], 'svg')
104
+ # alias
105
+ image = svg_bigraph(biadjacency, names_row, names_col)
106
+ self.assertEqual(image[1:4], 'svg')
107
+ image = visualize_bigraph(biadjacency, display_edges=False)
108
+ self.assertEqual(image[1:4], 'svg')
109
+ image = visualize_bigraph(biadjacency, reorder=False)
110
+ self.assertEqual(image[1:4], 'svg')
111
+ n_row, n_col = biadjacency.shape
112
+ position_row = np.random.random((n_row, 2))
113
+ position_col = np.random.random((n_col, 2))
114
+ edge_labels = [(0, 1, 0), (1, 1, 1), (3, 10, 2)]
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)
124
+ self.assertEqual(image[1:4], 'svg')
125
+
126
+ def test_disconnect(self):
127
+ adjacency = test_disconnected_graph()
128
+ position = np.random.random((adjacency.shape[0], 2))
129
+ image = visualize_graph(adjacency, position)
130
+ self.assertEqual(image[1:4], 'svg')
131
+ biadjacency = test_bigraph_disconnect()
132
+ image = visualize_bigraph(biadjacency)
133
+ self.assertEqual(image[1:4], 'svg')
134
+
135
+ def test_probs(self):
136
+ adjacency = bow_tie()
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)
142
+ self.assertEqual(image[1:4], 'svg')
143
+ biadjacency = star_wars()
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)
147
+ self.assertEqual(image[1:4], 'svg')
148
+
149
+ def test_labels(self):
150
+ adjacency = bow_tie()
151
+ names = ["aa", "bb", "<>", "a&b", ""]
152
+ image = visualize_graph(adjacency, names=names)
153
+ self.assertEqual(image[1:4], 'svg')
154
+
155
+ def test_text(self):
156
+ image = svg_text(np.array([0, 0]), 'foo', 0.1, 16, 'above')
157
+ self.assertEqual(image[1:5], 'text')
158
+
159
+ def test_rescale(self):
160
+ output = rescale(np.array([[0, 0]]), width=4, height=6, margin=2, node_size=10, node_size_max=20,
161
+ display_node_weight=True, names=np.array(['foo']), name_position='left')
162
+ self.assertEqual(len(output), 3)
163
+
164
+ def test_write(self):
165
+ filename = tempfile.gettempdir() + '/image'
166
+ graph = karate_club(True)
167
+ adjacency = graph.adjacency
168
+ position = graph.position
169
+ _ = visualize_graph(adjacency, position, filename=filename)
170
+ with open(filename + '.svg', 'r') as f:
171
+ row = f.readline()
172
+ self.assertEqual(row[1:4], 'svg')
173
+ _ = visualize_bigraph(adjacency, position, filename=filename)
174
+ with open(filename + '.svg', 'r') as f:
175
+ row = f.readline()
176
+ self.assertEqual(row[1:4], 'svg')