comparison env/lib/python3.9/site-packages/networkx/algorithms/centrality/tests/test_current_flow_betweenness_centrality.py @ 0:4f3585e2f14b draft default tip

"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author shellac
date Mon, 22 Mar 2021 18:12:50 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:4f3585e2f14b
1 import pytest
2
3 import networkx as nx
4 from networkx.testing import almost_equal
5 from networkx import edge_current_flow_betweenness_centrality as edge_current_flow
6 from networkx import approximate_current_flow_betweenness_centrality as approximate_cfbc
7
8
9 np = pytest.importorskip("numpy")
10 npt = pytest.importorskip("numpy.testing")
11 scipy = pytest.importorskip("scipy")
12
13
14 class TestFlowBetweennessCentrality:
15 def test_K4_normalized(self):
16 """Betweenness centrality: K4"""
17 G = nx.complete_graph(4)
18 b = nx.current_flow_betweenness_centrality(G, normalized=True)
19 b_answer = {0: 0.25, 1: 0.25, 2: 0.25, 3: 0.25}
20 for n in sorted(G):
21 assert almost_equal(b[n], b_answer[n])
22 G.add_edge(0, 1, weight=0.5, other=0.3)
23 b = nx.current_flow_betweenness_centrality(G, normalized=True, weight=None)
24 for n in sorted(G):
25 assert almost_equal(b[n], b_answer[n])
26 wb_answer = {0: 0.2222222, 1: 0.2222222, 2: 0.30555555, 3: 0.30555555}
27 b = nx.current_flow_betweenness_centrality(G, normalized=True, weight="weight")
28 for n in sorted(G):
29 assert almost_equal(b[n], wb_answer[n])
30 wb_answer = {0: 0.2051282, 1: 0.2051282, 2: 0.33974358, 3: 0.33974358}
31 b = nx.current_flow_betweenness_centrality(G, normalized=True, weight="other")
32 for n in sorted(G):
33 assert almost_equal(b[n], wb_answer[n])
34
35 def test_K4(self):
36 """Betweenness centrality: K4"""
37 G = nx.complete_graph(4)
38 for solver in ["full", "lu", "cg"]:
39 b = nx.current_flow_betweenness_centrality(
40 G, normalized=False, solver=solver
41 )
42 b_answer = {0: 0.75, 1: 0.75, 2: 0.75, 3: 0.75}
43 for n in sorted(G):
44 assert almost_equal(b[n], b_answer[n])
45
46 def test_P4_normalized(self):
47 """Betweenness centrality: P4 normalized"""
48 G = nx.path_graph(4)
49 b = nx.current_flow_betweenness_centrality(G, normalized=True)
50 b_answer = {0: 0, 1: 2.0 / 3, 2: 2.0 / 3, 3: 0}
51 for n in sorted(G):
52 assert almost_equal(b[n], b_answer[n])
53
54 def test_P4(self):
55 """Betweenness centrality: P4"""
56 G = nx.path_graph(4)
57 b = nx.current_flow_betweenness_centrality(G, normalized=False)
58 b_answer = {0: 0, 1: 2, 2: 2, 3: 0}
59 for n in sorted(G):
60 assert almost_equal(b[n], b_answer[n])
61
62 def test_star(self):
63 """Betweenness centrality: star """
64 G = nx.Graph()
65 nx.add_star(G, ["a", "b", "c", "d"])
66 b = nx.current_flow_betweenness_centrality(G, normalized=True)
67 b_answer = {"a": 1.0, "b": 0.0, "c": 0.0, "d": 0.0}
68 for n in sorted(G):
69 assert almost_equal(b[n], b_answer[n])
70
71 def test_solvers2(self):
72 """Betweenness centrality: alternate solvers"""
73 G = nx.complete_graph(4)
74 for solver in ["full", "lu", "cg"]:
75 b = nx.current_flow_betweenness_centrality(
76 G, normalized=False, solver=solver
77 )
78 b_answer = {0: 0.75, 1: 0.75, 2: 0.75, 3: 0.75}
79 for n in sorted(G):
80 assert almost_equal(b[n], b_answer[n])
81
82
83 class TestApproximateFlowBetweennessCentrality:
84 def test_K4_normalized(self):
85 "Approximate current-flow betweenness centrality: K4 normalized"
86 G = nx.complete_graph(4)
87 b = nx.current_flow_betweenness_centrality(G, normalized=True)
88 epsilon = 0.1
89 ba = approximate_cfbc(G, normalized=True, epsilon=0.5 * epsilon)
90 for n in sorted(G):
91 npt.assert_allclose(b[n], ba[n], atol=epsilon)
92
93 def test_K4(self):
94 "Approximate current-flow betweenness centrality: K4"
95 G = nx.complete_graph(4)
96 b = nx.current_flow_betweenness_centrality(G, normalized=False)
97 epsilon = 0.1
98 ba = approximate_cfbc(G, normalized=False, epsilon=0.5 * epsilon)
99 for n in sorted(G):
100 npt.assert_allclose(b[n], ba[n], atol=epsilon * len(G) ** 2)
101
102 def test_star(self):
103 "Approximate current-flow betweenness centrality: star"
104 G = nx.Graph()
105 nx.add_star(G, ["a", "b", "c", "d"])
106 b = nx.current_flow_betweenness_centrality(G, normalized=True)
107 epsilon = 0.1
108 ba = approximate_cfbc(G, normalized=True, epsilon=0.5 * epsilon)
109 for n in sorted(G):
110 npt.assert_allclose(b[n], ba[n], atol=epsilon)
111
112 def test_grid(self):
113 "Approximate current-flow betweenness centrality: 2d grid"
114 G = nx.grid_2d_graph(4, 4)
115 b = nx.current_flow_betweenness_centrality(G, normalized=True)
116 epsilon = 0.1
117 ba = approximate_cfbc(G, normalized=True, epsilon=0.5 * epsilon)
118 for n in sorted(G):
119 npt.assert_allclose(b[n], ba[n], atol=epsilon)
120
121 def test_seed(self):
122 G = nx.complete_graph(4)
123 b = approximate_cfbc(G, normalized=False, epsilon=0.05, seed=1)
124 b_answer = {0: 0.75, 1: 0.75, 2: 0.75, 3: 0.75}
125 for n in sorted(G):
126 npt.assert_allclose(b[n], b_answer[n], atol=0.1)
127
128 def test_solvers(self):
129 "Approximate current-flow betweenness centrality: solvers"
130 G = nx.complete_graph(4)
131 epsilon = 0.1
132 for solver in ["full", "lu", "cg"]:
133 b = approximate_cfbc(
134 G, normalized=False, solver=solver, epsilon=0.5 * epsilon
135 )
136 b_answer = {0: 0.75, 1: 0.75, 2: 0.75, 3: 0.75}
137 for n in sorted(G):
138 npt.assert_allclose(b[n], b_answer[n], atol=epsilon)
139
140
141 class TestWeightedFlowBetweennessCentrality:
142 pass
143
144
145 class TestEdgeFlowBetweennessCentrality:
146 def test_K4(self):
147 """Edge flow betweenness centrality: K4"""
148 G = nx.complete_graph(4)
149 b = edge_current_flow(G, normalized=True)
150 b_answer = dict.fromkeys(G.edges(), 0.25)
151 for (s, t), v1 in b_answer.items():
152 v2 = b.get((s, t), b.get((t, s)))
153 assert almost_equal(v1, v2)
154
155 def test_K4_normalized(self):
156 """Edge flow betweenness centrality: K4"""
157 G = nx.complete_graph(4)
158 b = edge_current_flow(G, normalized=False)
159 b_answer = dict.fromkeys(G.edges(), 0.75)
160 for (s, t), v1 in b_answer.items():
161 v2 = b.get((s, t), b.get((t, s)))
162 assert almost_equal(v1, v2)
163
164 def test_C4(self):
165 """Edge flow betweenness centrality: C4"""
166 G = nx.cycle_graph(4)
167 b = edge_current_flow(G, normalized=False)
168 b_answer = {(0, 1): 1.25, (0, 3): 1.25, (1, 2): 1.25, (2, 3): 1.25}
169 for (s, t), v1 in b_answer.items():
170 v2 = b.get((s, t), b.get((t, s)))
171 assert almost_equal(v1, v2)
172
173 def test_P4(self):
174 """Edge betweenness centrality: P4"""
175 G = nx.path_graph(4)
176 b = edge_current_flow(G, normalized=False)
177 b_answer = {(0, 1): 1.5, (1, 2): 2.0, (2, 3): 1.5}
178 for (s, t), v1 in b_answer.items():
179 v2 = b.get((s, t), b.get((t, s)))
180 assert almost_equal(v1, v2)