scikit-network 0.28.3__cp39-cp39-macosx_12_0_arm64.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 (240) hide show
  1. scikit_network-0.28.3.dist-info/AUTHORS.rst +41 -0
  2. scikit_network-0.28.3.dist-info/LICENSE +34 -0
  3. scikit_network-0.28.3.dist-info/METADATA +457 -0
  4. scikit_network-0.28.3.dist-info/RECORD +240 -0
  5. scikit_network-0.28.3.dist-info/WHEEL +5 -0
  6. scikit_network-0.28.3.dist-info/top_level.txt +1 -0
  7. sknetwork/__init__.py +21 -0
  8. sknetwork/classification/__init__.py +8 -0
  9. sknetwork/classification/base.py +84 -0
  10. sknetwork/classification/base_rank.py +143 -0
  11. sknetwork/classification/diffusion.py +134 -0
  12. sknetwork/classification/knn.py +162 -0
  13. sknetwork/classification/metrics.py +205 -0
  14. sknetwork/classification/pagerank.py +66 -0
  15. sknetwork/classification/propagation.py +152 -0
  16. sknetwork/classification/tests/__init__.py +1 -0
  17. sknetwork/classification/tests/test_API.py +35 -0
  18. sknetwork/classification/tests/test_diffusion.py +37 -0
  19. sknetwork/classification/tests/test_knn.py +24 -0
  20. sknetwork/classification/tests/test_metrics.py +53 -0
  21. sknetwork/classification/tests/test_pagerank.py +20 -0
  22. sknetwork/classification/tests/test_propagation.py +24 -0
  23. sknetwork/classification/vote.cpython-39-darwin.so +0 -0
  24. sknetwork/classification/vote.pyx +58 -0
  25. sknetwork/clustering/__init__.py +7 -0
  26. sknetwork/clustering/base.py +102 -0
  27. sknetwork/clustering/kmeans.py +142 -0
  28. sknetwork/clustering/louvain.py +255 -0
  29. sknetwork/clustering/louvain_core.cpython-39-darwin.so +0 -0
  30. sknetwork/clustering/louvain_core.pyx +134 -0
  31. sknetwork/clustering/metrics.py +91 -0
  32. sknetwork/clustering/postprocess.py +66 -0
  33. sknetwork/clustering/propagation_clustering.py +108 -0
  34. sknetwork/clustering/tests/__init__.py +1 -0
  35. sknetwork/clustering/tests/test_API.py +37 -0
  36. sknetwork/clustering/tests/test_kmeans.py +47 -0
  37. sknetwork/clustering/tests/test_louvain.py +104 -0
  38. sknetwork/clustering/tests/test_metrics.py +50 -0
  39. sknetwork/clustering/tests/test_post_processing.py +23 -0
  40. sknetwork/clustering/tests/test_postprocess.py +39 -0
  41. sknetwork/data/__init__.py +5 -0
  42. sknetwork/data/load.py +408 -0
  43. sknetwork/data/models.py +459 -0
  44. sknetwork/data/parse.py +621 -0
  45. sknetwork/data/test_graphs.py +84 -0
  46. sknetwork/data/tests/__init__.py +1 -0
  47. sknetwork/data/tests/test_API.py +30 -0
  48. sknetwork/data/tests/test_load.py +95 -0
  49. sknetwork/data/tests/test_models.py +52 -0
  50. sknetwork/data/tests/test_parse.py +253 -0
  51. sknetwork/data/tests/test_test_graphs.py +30 -0
  52. sknetwork/data/tests/test_toy_graphs.py +68 -0
  53. sknetwork/data/toy_graphs.py +619 -0
  54. sknetwork/embedding/__init__.py +10 -0
  55. sknetwork/embedding/base.py +90 -0
  56. sknetwork/embedding/force_atlas.py +197 -0
  57. sknetwork/embedding/louvain_embedding.py +174 -0
  58. sknetwork/embedding/louvain_hierarchy.py +142 -0
  59. sknetwork/embedding/metrics.py +66 -0
  60. sknetwork/embedding/random_projection.py +133 -0
  61. sknetwork/embedding/spectral.py +214 -0
  62. sknetwork/embedding/spring.py +198 -0
  63. sknetwork/embedding/svd.py +363 -0
  64. sknetwork/embedding/tests/__init__.py +1 -0
  65. sknetwork/embedding/tests/test_API.py +73 -0
  66. sknetwork/embedding/tests/test_force_atlas.py +35 -0
  67. sknetwork/embedding/tests/test_louvain_embedding.py +33 -0
  68. sknetwork/embedding/tests/test_louvain_hierarchy.py +19 -0
  69. sknetwork/embedding/tests/test_metrics.py +29 -0
  70. sknetwork/embedding/tests/test_random_projection.py +28 -0
  71. sknetwork/embedding/tests/test_spectral.py +84 -0
  72. sknetwork/embedding/tests/test_spring.py +50 -0
  73. sknetwork/embedding/tests/test_svd.py +37 -0
  74. sknetwork/flow/__init__.py +3 -0
  75. sknetwork/flow/flow.py +73 -0
  76. sknetwork/flow/tests/__init__.py +1 -0
  77. sknetwork/flow/tests/test_flow.py +17 -0
  78. sknetwork/flow/tests/test_utils.py +69 -0
  79. sknetwork/flow/utils.py +91 -0
  80. sknetwork/gnn/__init__.py +10 -0
  81. sknetwork/gnn/activation.py +117 -0
  82. sknetwork/gnn/base.py +155 -0
  83. sknetwork/gnn/base_activation.py +89 -0
  84. sknetwork/gnn/base_layer.py +109 -0
  85. sknetwork/gnn/gnn_classifier.py +381 -0
  86. sknetwork/gnn/layer.py +153 -0
  87. sknetwork/gnn/layers.py +127 -0
  88. sknetwork/gnn/loss.py +180 -0
  89. sknetwork/gnn/neighbor_sampler.py +65 -0
  90. sknetwork/gnn/optimizer.py +163 -0
  91. sknetwork/gnn/tests/__init__.py +1 -0
  92. sknetwork/gnn/tests/test_activation.py +56 -0
  93. sknetwork/gnn/tests/test_base.py +79 -0
  94. sknetwork/gnn/tests/test_base_layer.py +37 -0
  95. sknetwork/gnn/tests/test_gnn_classifier.py +192 -0
  96. sknetwork/gnn/tests/test_layers.py +80 -0
  97. sknetwork/gnn/tests/test_loss.py +33 -0
  98. sknetwork/gnn/tests/test_neigh_sampler.py +23 -0
  99. sknetwork/gnn/tests/test_optimizer.py +43 -0
  100. sknetwork/gnn/tests/test_utils.py +93 -0
  101. sknetwork/gnn/utils.py +219 -0
  102. sknetwork/hierarchy/__init__.py +7 -0
  103. sknetwork/hierarchy/base.py +69 -0
  104. sknetwork/hierarchy/louvain_hierarchy.py +264 -0
  105. sknetwork/hierarchy/metrics.py +234 -0
  106. sknetwork/hierarchy/paris.cpython-39-darwin.so +0 -0
  107. sknetwork/hierarchy/paris.pyx +317 -0
  108. sknetwork/hierarchy/postprocess.py +350 -0
  109. sknetwork/hierarchy/tests/__init__.py +1 -0
  110. sknetwork/hierarchy/tests/test_API.py +25 -0
  111. sknetwork/hierarchy/tests/test_algos.py +29 -0
  112. sknetwork/hierarchy/tests/test_metrics.py +62 -0
  113. sknetwork/hierarchy/tests/test_postprocess.py +57 -0
  114. sknetwork/hierarchy/tests/test_ward.py +25 -0
  115. sknetwork/hierarchy/ward.py +94 -0
  116. sknetwork/linalg/__init__.py +9 -0
  117. sknetwork/linalg/basics.py +37 -0
  118. sknetwork/linalg/diteration.cpython-39-darwin.so +0 -0
  119. sknetwork/linalg/diteration.pyx +49 -0
  120. sknetwork/linalg/eig_solver.py +93 -0
  121. sknetwork/linalg/laplacian.py +15 -0
  122. sknetwork/linalg/normalization.py +66 -0
  123. sknetwork/linalg/operators.py +225 -0
  124. sknetwork/linalg/polynome.py +76 -0
  125. sknetwork/linalg/ppr_solver.py +170 -0
  126. sknetwork/linalg/push.cpython-39-darwin.so +0 -0
  127. sknetwork/linalg/push.pyx +73 -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 +38 -0
  134. sknetwork/linalg/tests/test_operators.py +70 -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 +4 -0
  140. sknetwork/linkpred/base.py +80 -0
  141. sknetwork/linkpred/first_order.py +508 -0
  142. sknetwork/linkpred/first_order_core.cpython-39-darwin.so +0 -0
  143. sknetwork/linkpred/first_order_core.pyx +315 -0
  144. sknetwork/linkpred/postprocessing.py +98 -0
  145. sknetwork/linkpred/tests/__init__.py +1 -0
  146. sknetwork/linkpred/tests/test_API.py +49 -0
  147. sknetwork/linkpred/tests/test_postprocessing.py +21 -0
  148. sknetwork/path/__init__.py +4 -0
  149. sknetwork/path/metrics.py +148 -0
  150. sknetwork/path/search.py +65 -0
  151. sknetwork/path/shortest_path.py +186 -0
  152. sknetwork/path/tests/__init__.py +1 -0
  153. sknetwork/path/tests/test_metrics.py +29 -0
  154. sknetwork/path/tests/test_search.py +25 -0
  155. sknetwork/path/tests/test_shortest_path.py +45 -0
  156. sknetwork/ranking/__init__.py +9 -0
  157. sknetwork/ranking/base.py +56 -0
  158. sknetwork/ranking/betweenness.cpython-39-darwin.so +0 -0
  159. sknetwork/ranking/betweenness.pyx +99 -0
  160. sknetwork/ranking/closeness.py +95 -0
  161. sknetwork/ranking/harmonic.py +82 -0
  162. sknetwork/ranking/hits.py +94 -0
  163. sknetwork/ranking/katz.py +81 -0
  164. sknetwork/ranking/pagerank.py +107 -0
  165. sknetwork/ranking/postprocess.py +25 -0
  166. sknetwork/ranking/tests/__init__.py +1 -0
  167. sknetwork/ranking/tests/test_API.py +34 -0
  168. sknetwork/ranking/tests/test_betweenness.py +38 -0
  169. sknetwork/ranking/tests/test_closeness.py +34 -0
  170. sknetwork/ranking/tests/test_hits.py +20 -0
  171. sknetwork/ranking/tests/test_pagerank.py +69 -0
  172. sknetwork/regression/__init__.py +4 -0
  173. sknetwork/regression/base.py +56 -0
  174. sknetwork/regression/diffusion.py +190 -0
  175. sknetwork/regression/tests/__init__.py +1 -0
  176. sknetwork/regression/tests/test_API.py +34 -0
  177. sknetwork/regression/tests/test_diffusion.py +48 -0
  178. sknetwork/sknetwork.py +3 -0
  179. sknetwork/topology/__init__.py +9 -0
  180. sknetwork/topology/dag.py +74 -0
  181. sknetwork/topology/dag_core.cpython-39-darwin.so +0 -0
  182. sknetwork/topology/dag_core.pyx +38 -0
  183. sknetwork/topology/kcliques.cpython-39-darwin.so +0 -0
  184. sknetwork/topology/kcliques.pyx +193 -0
  185. sknetwork/topology/kcore.cpython-39-darwin.so +0 -0
  186. sknetwork/topology/kcore.pyx +120 -0
  187. sknetwork/topology/structure.py +234 -0
  188. sknetwork/topology/tests/__init__.py +1 -0
  189. sknetwork/topology/tests/test_cliques.py +28 -0
  190. sknetwork/topology/tests/test_cores.py +21 -0
  191. sknetwork/topology/tests/test_dag.py +26 -0
  192. sknetwork/topology/tests/test_structure.py +99 -0
  193. sknetwork/topology/tests/test_triangles.py +42 -0
  194. sknetwork/topology/tests/test_wl_coloring.py +49 -0
  195. sknetwork/topology/tests/test_wl_kernel.py +31 -0
  196. sknetwork/topology/triangles.cpython-39-darwin.so +0 -0
  197. sknetwork/topology/triangles.pyx +166 -0
  198. sknetwork/topology/weisfeiler_lehman.py +163 -0
  199. sknetwork/topology/weisfeiler_lehman_core.cpython-39-darwin.so +0 -0
  200. sknetwork/topology/weisfeiler_lehman_core.pyx +116 -0
  201. sknetwork/utils/__init__.py +40 -0
  202. sknetwork/utils/base.py +35 -0
  203. sknetwork/utils/check.py +354 -0
  204. sknetwork/utils/co_neighbor.py +71 -0
  205. sknetwork/utils/format.py +219 -0
  206. sknetwork/utils/kmeans.py +89 -0
  207. sknetwork/utils/knn.py +166 -0
  208. sknetwork/utils/knn1d.cpython-39-darwin.so +0 -0
  209. sknetwork/utils/knn1d.pyx +80 -0
  210. sknetwork/utils/membership.py +82 -0
  211. sknetwork/utils/minheap.cpython-39-darwin.so +0 -0
  212. sknetwork/utils/minheap.pxd +22 -0
  213. sknetwork/utils/minheap.pyx +111 -0
  214. sknetwork/utils/neighbors.py +115 -0
  215. sknetwork/utils/seeds.py +75 -0
  216. sknetwork/utils/simplex.py +140 -0
  217. sknetwork/utils/tests/__init__.py +1 -0
  218. sknetwork/utils/tests/test_base.py +28 -0
  219. sknetwork/utils/tests/test_bunch.py +16 -0
  220. sknetwork/utils/tests/test_check.py +190 -0
  221. sknetwork/utils/tests/test_co_neighbor.py +43 -0
  222. sknetwork/utils/tests/test_format.py +61 -0
  223. sknetwork/utils/tests/test_kmeans.py +21 -0
  224. sknetwork/utils/tests/test_knn.py +32 -0
  225. sknetwork/utils/tests/test_membership.py +24 -0
  226. sknetwork/utils/tests/test_neighbors.py +41 -0
  227. sknetwork/utils/tests/test_projection_simplex.py +33 -0
  228. sknetwork/utils/tests/test_seeds.py +67 -0
  229. sknetwork/utils/tests/test_verbose.py +15 -0
  230. sknetwork/utils/tests/test_ward.py +20 -0
  231. sknetwork/utils/timeout.py +38 -0
  232. sknetwork/utils/verbose.py +37 -0
  233. sknetwork/utils/ward.py +60 -0
  234. sknetwork/visualization/__init__.py +4 -0
  235. sknetwork/visualization/colors.py +34 -0
  236. sknetwork/visualization/dendrograms.py +229 -0
  237. sknetwork/visualization/graphs.py +819 -0
  238. sknetwork/visualization/tests/__init__.py +1 -0
  239. sknetwork/visualization/tests/test_dendrograms.py +53 -0
  240. sknetwork/visualization/tests/test_graphs.py +167 -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/dendrograms.py"""
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 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 = svg_dendrogram(dendrogram, names=np.arange(n), width=200, height=200, margin=10, margin_text=5, scale=3,
26
+ n_clusters=3, color='green', colors=['red', 'blue'], font_size=14, reorder=True,
27
+ 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 = svg_dendrogram(dendrogram)
44
+ self.assertEqual(image[1:4], 'svg')
45
+ image = svg_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
+ _ = svg_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,167 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """tests for visualization/graphs.py"""
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_graph_disconnect, 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 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 = svg_graph(adjacency, position, labels=labels)
25
+ self.assertEqual(image[1:4], 'svg')
26
+ image = svg_graph(adjacency, position, labels=list(labels))
27
+ self.assertEqual(image[1:4], 'svg')
28
+ image = svg_graph(adjacency, position, display_edges=False)
29
+ self.assertEqual(image[1:4], 'svg')
30
+ image = svg_graph(adjacency, position, height=None)
31
+ self.assertEqual(image[1:4], 'svg')
32
+ image = svg_graph(adjacency, position, height=300, width=None)
33
+ self.assertEqual(image[1:4], 'svg')
34
+ image = svg_graph(adjacency, position, height=None, width=200)
35
+ self.assertEqual(image[1:4], 'svg')
36
+ n = adjacency.shape[0]
37
+ 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)
46
+ self.assertEqual(image[1:4], 'svg')
47
+ image = svg_graph(adjacency, position=None, labels={0: 0})
48
+ self.assertEqual(image[1:4], 'svg')
49
+ image = svg_graph(adjacency, position=None, scores={0: 0})
50
+ self.assertEqual(image[1:4], 'svg')
51
+ image = svg_graph(adjacency=None, position=position)
52
+ self.assertEqual(image[1:4], 'svg')
53
+ image = svg_graph(adjacency=None, position=position, edge_labels=edge_labels)
54
+ self.assertEqual(image[1:4], 'svg')
55
+ image = svg_graph(adjacency, position, labels, label_colors={0: "red", 1: "blue"})
56
+ self.assertEqual(image[1:4], 'svg')
57
+ image = svg_graph(adjacency, position, labels, label_colors=["red", "blue"])
58
+ self.assertEqual(image[1:4], 'svg')
59
+ image = svg_graph(adjacency, position, labels, node_weights=np.arange(adjacency.shape[0]))
60
+ self.assertEqual(image[1:4], 'svg')
61
+ image = svg_graph(adjacency, position, scores=list(np.arange(n)))
62
+ self.assertEqual(image[1:4], 'svg')
63
+ image = svg_graph(adjacency, position, seeds={0: 1, 2: 1})
64
+ self.assertEqual(image[1:4], 'svg')
65
+ image = svg_graph(adjacency, position, labels=np.arange(n), name_position='left')
66
+ self.assertEqual(image[1:4], 'svg')
67
+ image = svg_graph(adjacency, position, scale=2, labels=np.arange(n), name_position='left')
68
+ self.assertEqual(image[1:4], 'svg')
69
+ with self.assertRaises(ValueError):
70
+ svg_graph(adjacency, position, labels=[0, 1])
71
+ 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')
74
+
75
+ def test_directed(self):
76
+ graph = painters(True)
77
+ adjacency = graph.adjacency
78
+ position = graph.position
79
+ names = graph.names
80
+ image = svg_graph(adjacency, position, names=names)
81
+ self.assertEqual(image[1:4], 'svg')
82
+ image = svg_graph(adjacency, position, display_edges=False)
83
+ self.assertEqual(image[1:4], 'svg')
84
+ 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)
92
+ self.assertEqual(image[1:4], 'svg')
93
+
94
+ def test_bipartite(self):
95
+ graph = movie_actor(True)
96
+ biadjacency = graph.biadjacency
97
+ names_row = graph.names_row
98
+ names_col = graph.names_col
99
+ image = svg_bigraph(biadjacency, names_row, names_col)
100
+ self.assertEqual(image[1:4], 'svg')
101
+ image = svg_bigraph(biadjacency, display_edges=False)
102
+ self.assertEqual(image[1:4], 'svg')
103
+ image = svg_bigraph(biadjacency, reorder=False)
104
+ self.assertEqual(image[1:4], 'svg')
105
+ n_row, n_col = biadjacency.shape
106
+ position_row = np.random.random((n_row, 2))
107
+ position_col = np.random.random((n_col, 2))
108
+ 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)
118
+ self.assertEqual(image[1:4], 'svg')
119
+
120
+ def test_disconnect(self):
121
+ adjacency = test_graph_disconnect()
122
+ position = np.random.random((adjacency.shape[0], 2))
123
+ image = svg_graph(adjacency, position)
124
+ self.assertEqual(image[1:4], 'svg')
125
+ biadjacency = test_bigraph_disconnect()
126
+ image = svg_bigraph(biadjacency)
127
+ self.assertEqual(image[1:4], 'svg')
128
+
129
+ def test_membership(self):
130
+ 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)
133
+ self.assertEqual(image[1:4], 'svg')
134
+ 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)
138
+ self.assertEqual(image[1:4], 'svg')
139
+
140
+ def test_labels(self):
141
+ adjacency = bow_tie()
142
+ names = ["aa", "bb", "<>", "a&b", ""]
143
+ image = svg_graph(adjacency, names=names)
144
+ self.assertEqual(image[1:4], 'svg')
145
+
146
+ def test_text(self):
147
+ image = svg_text(np.array([0, 0]), 'foo', 0.1, 16, 'above')
148
+ self.assertEqual(image[1:5], 'text')
149
+
150
+ def test_rescale(self):
151
+ output = rescale(np.array([[0, 0]]), width=4, height=6, margin=2, node_size=10, node_size_max=20,
152
+ display_node_weight=True, names=np.array(['foo']), name_position='left')
153
+ self.assertEqual(len(output), 3)
154
+
155
+ def test_write(self):
156
+ filename = tempfile.gettempdir() + '/image'
157
+ graph = karate_club(True)
158
+ adjacency = graph.adjacency
159
+ position = graph.position
160
+ _ = svg_graph(adjacency, position, filename=filename)
161
+ with open(filename + '.svg', 'r') as f:
162
+ row = f.readline()
163
+ self.assertEqual(row[1:4], 'svg')
164
+ _ = svg_bigraph(adjacency, position, filename=filename)
165
+ with open(filename + '.svg', 'r') as f:
166
+ row = f.readline()
167
+ self.assertEqual(row[1:4], 'svg')