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.
- scikit_network-0.28.3.dist-info/AUTHORS.rst +41 -0
- scikit_network-0.28.3.dist-info/LICENSE +34 -0
- scikit_network-0.28.3.dist-info/METADATA +457 -0
- scikit_network-0.28.3.dist-info/RECORD +240 -0
- scikit_network-0.28.3.dist-info/WHEEL +5 -0
- scikit_network-0.28.3.dist-info/top_level.txt +1 -0
- sknetwork/__init__.py +21 -0
- sknetwork/classification/__init__.py +8 -0
- sknetwork/classification/base.py +84 -0
- sknetwork/classification/base_rank.py +143 -0
- sknetwork/classification/diffusion.py +134 -0
- sknetwork/classification/knn.py +162 -0
- sknetwork/classification/metrics.py +205 -0
- sknetwork/classification/pagerank.py +66 -0
- sknetwork/classification/propagation.py +152 -0
- sknetwork/classification/tests/__init__.py +1 -0
- sknetwork/classification/tests/test_API.py +35 -0
- sknetwork/classification/tests/test_diffusion.py +37 -0
- sknetwork/classification/tests/test_knn.py +24 -0
- sknetwork/classification/tests/test_metrics.py +53 -0
- sknetwork/classification/tests/test_pagerank.py +20 -0
- sknetwork/classification/tests/test_propagation.py +24 -0
- sknetwork/classification/vote.cpython-39-darwin.so +0 -0
- sknetwork/classification/vote.pyx +58 -0
- sknetwork/clustering/__init__.py +7 -0
- sknetwork/clustering/base.py +102 -0
- sknetwork/clustering/kmeans.py +142 -0
- sknetwork/clustering/louvain.py +255 -0
- sknetwork/clustering/louvain_core.cpython-39-darwin.so +0 -0
- sknetwork/clustering/louvain_core.pyx +134 -0
- sknetwork/clustering/metrics.py +91 -0
- sknetwork/clustering/postprocess.py +66 -0
- sknetwork/clustering/propagation_clustering.py +108 -0
- sknetwork/clustering/tests/__init__.py +1 -0
- sknetwork/clustering/tests/test_API.py +37 -0
- sknetwork/clustering/tests/test_kmeans.py +47 -0
- sknetwork/clustering/tests/test_louvain.py +104 -0
- sknetwork/clustering/tests/test_metrics.py +50 -0
- sknetwork/clustering/tests/test_post_processing.py +23 -0
- sknetwork/clustering/tests/test_postprocess.py +39 -0
- sknetwork/data/__init__.py +5 -0
- sknetwork/data/load.py +408 -0
- sknetwork/data/models.py +459 -0
- sknetwork/data/parse.py +621 -0
- sknetwork/data/test_graphs.py +84 -0
- sknetwork/data/tests/__init__.py +1 -0
- sknetwork/data/tests/test_API.py +30 -0
- sknetwork/data/tests/test_load.py +95 -0
- sknetwork/data/tests/test_models.py +52 -0
- sknetwork/data/tests/test_parse.py +253 -0
- sknetwork/data/tests/test_test_graphs.py +30 -0
- sknetwork/data/tests/test_toy_graphs.py +68 -0
- sknetwork/data/toy_graphs.py +619 -0
- sknetwork/embedding/__init__.py +10 -0
- sknetwork/embedding/base.py +90 -0
- sknetwork/embedding/force_atlas.py +197 -0
- sknetwork/embedding/louvain_embedding.py +174 -0
- sknetwork/embedding/louvain_hierarchy.py +142 -0
- sknetwork/embedding/metrics.py +66 -0
- sknetwork/embedding/random_projection.py +133 -0
- sknetwork/embedding/spectral.py +214 -0
- sknetwork/embedding/spring.py +198 -0
- sknetwork/embedding/svd.py +363 -0
- sknetwork/embedding/tests/__init__.py +1 -0
- sknetwork/embedding/tests/test_API.py +73 -0
- sknetwork/embedding/tests/test_force_atlas.py +35 -0
- sknetwork/embedding/tests/test_louvain_embedding.py +33 -0
- sknetwork/embedding/tests/test_louvain_hierarchy.py +19 -0
- sknetwork/embedding/tests/test_metrics.py +29 -0
- sknetwork/embedding/tests/test_random_projection.py +28 -0
- sknetwork/embedding/tests/test_spectral.py +84 -0
- sknetwork/embedding/tests/test_spring.py +50 -0
- sknetwork/embedding/tests/test_svd.py +37 -0
- sknetwork/flow/__init__.py +3 -0
- sknetwork/flow/flow.py +73 -0
- sknetwork/flow/tests/__init__.py +1 -0
- sknetwork/flow/tests/test_flow.py +17 -0
- sknetwork/flow/tests/test_utils.py +69 -0
- sknetwork/flow/utils.py +91 -0
- sknetwork/gnn/__init__.py +10 -0
- sknetwork/gnn/activation.py +117 -0
- sknetwork/gnn/base.py +155 -0
- sknetwork/gnn/base_activation.py +89 -0
- sknetwork/gnn/base_layer.py +109 -0
- sknetwork/gnn/gnn_classifier.py +381 -0
- sknetwork/gnn/layer.py +153 -0
- sknetwork/gnn/layers.py +127 -0
- sknetwork/gnn/loss.py +180 -0
- sknetwork/gnn/neighbor_sampler.py +65 -0
- sknetwork/gnn/optimizer.py +163 -0
- sknetwork/gnn/tests/__init__.py +1 -0
- sknetwork/gnn/tests/test_activation.py +56 -0
- sknetwork/gnn/tests/test_base.py +79 -0
- sknetwork/gnn/tests/test_base_layer.py +37 -0
- sknetwork/gnn/tests/test_gnn_classifier.py +192 -0
- sknetwork/gnn/tests/test_layers.py +80 -0
- sknetwork/gnn/tests/test_loss.py +33 -0
- sknetwork/gnn/tests/test_neigh_sampler.py +23 -0
- sknetwork/gnn/tests/test_optimizer.py +43 -0
- sknetwork/gnn/tests/test_utils.py +93 -0
- sknetwork/gnn/utils.py +219 -0
- sknetwork/hierarchy/__init__.py +7 -0
- sknetwork/hierarchy/base.py +69 -0
- sknetwork/hierarchy/louvain_hierarchy.py +264 -0
- sknetwork/hierarchy/metrics.py +234 -0
- sknetwork/hierarchy/paris.cpython-39-darwin.so +0 -0
- sknetwork/hierarchy/paris.pyx +317 -0
- sknetwork/hierarchy/postprocess.py +350 -0
- sknetwork/hierarchy/tests/__init__.py +1 -0
- sknetwork/hierarchy/tests/test_API.py +25 -0
- sknetwork/hierarchy/tests/test_algos.py +29 -0
- sknetwork/hierarchy/tests/test_metrics.py +62 -0
- sknetwork/hierarchy/tests/test_postprocess.py +57 -0
- sknetwork/hierarchy/tests/test_ward.py +25 -0
- sknetwork/hierarchy/ward.py +94 -0
- sknetwork/linalg/__init__.py +9 -0
- sknetwork/linalg/basics.py +37 -0
- sknetwork/linalg/diteration.cpython-39-darwin.so +0 -0
- sknetwork/linalg/diteration.pyx +49 -0
- sknetwork/linalg/eig_solver.py +93 -0
- sknetwork/linalg/laplacian.py +15 -0
- sknetwork/linalg/normalization.py +66 -0
- sknetwork/linalg/operators.py +225 -0
- sknetwork/linalg/polynome.py +76 -0
- sknetwork/linalg/ppr_solver.py +170 -0
- sknetwork/linalg/push.cpython-39-darwin.so +0 -0
- sknetwork/linalg/push.pyx +73 -0
- sknetwork/linalg/sparse_lowrank.py +142 -0
- sknetwork/linalg/svd_solver.py +91 -0
- sknetwork/linalg/tests/__init__.py +1 -0
- sknetwork/linalg/tests/test_eig.py +44 -0
- sknetwork/linalg/tests/test_laplacian.py +18 -0
- sknetwork/linalg/tests/test_normalization.py +38 -0
- sknetwork/linalg/tests/test_operators.py +70 -0
- sknetwork/linalg/tests/test_polynome.py +38 -0
- sknetwork/linalg/tests/test_ppr.py +50 -0
- sknetwork/linalg/tests/test_sparse_lowrank.py +61 -0
- sknetwork/linalg/tests/test_svd.py +38 -0
- sknetwork/linkpred/__init__.py +4 -0
- sknetwork/linkpred/base.py +80 -0
- sknetwork/linkpred/first_order.py +508 -0
- sknetwork/linkpred/first_order_core.cpython-39-darwin.so +0 -0
- sknetwork/linkpred/first_order_core.pyx +315 -0
- sknetwork/linkpred/postprocessing.py +98 -0
- sknetwork/linkpred/tests/__init__.py +1 -0
- sknetwork/linkpred/tests/test_API.py +49 -0
- sknetwork/linkpred/tests/test_postprocessing.py +21 -0
- sknetwork/path/__init__.py +4 -0
- sknetwork/path/metrics.py +148 -0
- sknetwork/path/search.py +65 -0
- sknetwork/path/shortest_path.py +186 -0
- sknetwork/path/tests/__init__.py +1 -0
- sknetwork/path/tests/test_metrics.py +29 -0
- sknetwork/path/tests/test_search.py +25 -0
- sknetwork/path/tests/test_shortest_path.py +45 -0
- sknetwork/ranking/__init__.py +9 -0
- sknetwork/ranking/base.py +56 -0
- sknetwork/ranking/betweenness.cpython-39-darwin.so +0 -0
- sknetwork/ranking/betweenness.pyx +99 -0
- sknetwork/ranking/closeness.py +95 -0
- sknetwork/ranking/harmonic.py +82 -0
- sknetwork/ranking/hits.py +94 -0
- sknetwork/ranking/katz.py +81 -0
- sknetwork/ranking/pagerank.py +107 -0
- sknetwork/ranking/postprocess.py +25 -0
- sknetwork/ranking/tests/__init__.py +1 -0
- sknetwork/ranking/tests/test_API.py +34 -0
- sknetwork/ranking/tests/test_betweenness.py +38 -0
- sknetwork/ranking/tests/test_closeness.py +34 -0
- sknetwork/ranking/tests/test_hits.py +20 -0
- sknetwork/ranking/tests/test_pagerank.py +69 -0
- sknetwork/regression/__init__.py +4 -0
- sknetwork/regression/base.py +56 -0
- sknetwork/regression/diffusion.py +190 -0
- sknetwork/regression/tests/__init__.py +1 -0
- sknetwork/regression/tests/test_API.py +34 -0
- sknetwork/regression/tests/test_diffusion.py +48 -0
- sknetwork/sknetwork.py +3 -0
- sknetwork/topology/__init__.py +9 -0
- sknetwork/topology/dag.py +74 -0
- sknetwork/topology/dag_core.cpython-39-darwin.so +0 -0
- sknetwork/topology/dag_core.pyx +38 -0
- sknetwork/topology/kcliques.cpython-39-darwin.so +0 -0
- sknetwork/topology/kcliques.pyx +193 -0
- sknetwork/topology/kcore.cpython-39-darwin.so +0 -0
- sknetwork/topology/kcore.pyx +120 -0
- sknetwork/topology/structure.py +234 -0
- sknetwork/topology/tests/__init__.py +1 -0
- sknetwork/topology/tests/test_cliques.py +28 -0
- sknetwork/topology/tests/test_cores.py +21 -0
- sknetwork/topology/tests/test_dag.py +26 -0
- sknetwork/topology/tests/test_structure.py +99 -0
- sknetwork/topology/tests/test_triangles.py +42 -0
- sknetwork/topology/tests/test_wl_coloring.py +49 -0
- sknetwork/topology/tests/test_wl_kernel.py +31 -0
- sknetwork/topology/triangles.cpython-39-darwin.so +0 -0
- sknetwork/topology/triangles.pyx +166 -0
- sknetwork/topology/weisfeiler_lehman.py +163 -0
- sknetwork/topology/weisfeiler_lehman_core.cpython-39-darwin.so +0 -0
- sknetwork/topology/weisfeiler_lehman_core.pyx +116 -0
- sknetwork/utils/__init__.py +40 -0
- sknetwork/utils/base.py +35 -0
- sknetwork/utils/check.py +354 -0
- sknetwork/utils/co_neighbor.py +71 -0
- sknetwork/utils/format.py +219 -0
- sknetwork/utils/kmeans.py +89 -0
- sknetwork/utils/knn.py +166 -0
- sknetwork/utils/knn1d.cpython-39-darwin.so +0 -0
- sknetwork/utils/knn1d.pyx +80 -0
- sknetwork/utils/membership.py +82 -0
- sknetwork/utils/minheap.cpython-39-darwin.so +0 -0
- sknetwork/utils/minheap.pxd +22 -0
- sknetwork/utils/minheap.pyx +111 -0
- sknetwork/utils/neighbors.py +115 -0
- sknetwork/utils/seeds.py +75 -0
- sknetwork/utils/simplex.py +140 -0
- sknetwork/utils/tests/__init__.py +1 -0
- sknetwork/utils/tests/test_base.py +28 -0
- sknetwork/utils/tests/test_bunch.py +16 -0
- sknetwork/utils/tests/test_check.py +190 -0
- sknetwork/utils/tests/test_co_neighbor.py +43 -0
- sknetwork/utils/tests/test_format.py +61 -0
- sknetwork/utils/tests/test_kmeans.py +21 -0
- sknetwork/utils/tests/test_knn.py +32 -0
- sknetwork/utils/tests/test_membership.py +24 -0
- sknetwork/utils/tests/test_neighbors.py +41 -0
- sknetwork/utils/tests/test_projection_simplex.py +33 -0
- sknetwork/utils/tests/test_seeds.py +67 -0
- sknetwork/utils/tests/test_verbose.py +15 -0
- sknetwork/utils/tests/test_ward.py +20 -0
- sknetwork/utils/timeout.py +38 -0
- sknetwork/utils/verbose.py +37 -0
- sknetwork/utils/ward.py +60 -0
- sknetwork/visualization/__init__.py +4 -0
- sknetwork/visualization/colors.py +34 -0
- sknetwork/visualization/dendrograms.py +229 -0
- sknetwork/visualization/graphs.py +819 -0
- sknetwork/visualization/tests/__init__.py +1 -0
- sknetwork/visualization/tests/test_dendrograms.py +53 -0
- 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')
|