summaryrefslogtreecommitdiff
path: root/networkx/algorithms
diff options
context:
space:
mode:
authorladykkk <81337892+ladykkk@users.noreply.github.com>2022-11-14 06:28:25 -0800
committerGitHub <noreply@github.com>2022-11-14 15:28:25 +0100
commit4376a6f751874dceff9dadc0a6a6bfc2dfa04000 (patch)
treeb5208748f24edcb6c42d135f6671e347218be2ea /networkx/algorithms
parentc6a1dc8a2897f99462a77be836788ce6690dc691 (diff)
downloadnetworkx-4376a6f751874dceff9dadc0a6a6bfc2dfa04000.tar.gz
PR for issue #6033 Improve test coverage for algorithms in betweenness_subset.py #6033 (#6083)
* Updated test_betweenness_centrality_subset.py * add test of normalized in test_betweenness_centrality_subset.py * add test of normalized in test_betweenness_centrality_subset.py * update test of normalized in test_betweenness_centrality_subset.py * update weight of test_betweenness_centrality_subset.py * add docstring * add docstring in test_betweenness_centrality_subset.py * add docstring in test_betweenness_centrality_subset.py
Diffstat (limited to 'networkx/algorithms')
-rw-r--r--networkx/algorithms/centrality/tests/test_betweenness_centrality_subset.py131
1 files changed, 131 insertions, 0 deletions
diff --git a/networkx/algorithms/centrality/tests/test_betweenness_centrality_subset.py b/networkx/algorithms/centrality/tests/test_betweenness_centrality_subset.py
index 44c98287..a35a401a 100644
--- a/networkx/algorithms/centrality/tests/test_betweenness_centrality_subset.py
+++ b/networkx/algorithms/centrality/tests/test_betweenness_centrality_subset.py
@@ -116,6 +116,51 @@ class TestSubsetBetweennessCentrality:
for n in sorted(G):
assert b[n] == pytest.approx(expected_b[n], abs=1e-7)
+ def test_normalized_p2(self):
+ """
+ Betweenness Centrality Subset: Normalized P2
+ if n <= 2: no normalization, betweenness centrality should be 0 for all nodes.
+ """
+ G = nx.Graph()
+ nx.add_path(G, range(2))
+ b_answer = {0: 0, 1: 0.0}
+ b = nx.betweenness_centrality_subset(
+ G, sources=[0], targets=[1], normalized=True, weight=None
+ )
+ for n in sorted(G):
+ assert b[n] == pytest.approx(b_answer[n], abs=1e-7)
+
+ def test_normalized_P5_directed(self):
+ """Betweenness Centrality Subset: Normalized Directed P5"""
+ G = nx.DiGraph()
+ nx.add_path(G, range(5))
+ b_answer = {0: 0, 1: 1.0 / 12.0, 2: 1.0 / 12.0, 3: 0, 4: 0, 5: 0}
+ b = nx.betweenness_centrality_subset(
+ G, sources=[0], targets=[3], normalized=True, weight=None
+ )
+ for n in sorted(G):
+ assert b[n] == pytest.approx(b_answer[n], abs=1e-7)
+
+ def test_weighted_graph(self):
+ """Betweenness Centrality Subset: Weighted Graph"""
+ G = nx.DiGraph()
+ G.add_edge(0, 1, weight=3)
+ G.add_edge(0, 2, weight=2)
+ G.add_edge(0, 3, weight=6)
+ G.add_edge(0, 4, weight=4)
+ G.add_edge(1, 3, weight=5)
+ G.add_edge(1, 5, weight=5)
+ G.add_edge(2, 4, weight=1)
+ G.add_edge(3, 4, weight=2)
+ G.add_edge(3, 5, weight=1)
+ G.add_edge(4, 5, weight=4)
+ b_answer = {0: 0.0, 1: 0.0, 2: 0.5, 3: 0.5, 4: 0.5, 5: 0.0}
+ b = nx.betweenness_centrality_subset(
+ G, sources=[0], targets=[5], normalized=False, weight="weight"
+ )
+ for n in sorted(G):
+ assert b[n] == pytest.approx(b_answer[n], abs=1e-7)
+
class TestEdgeSubsetBetweennessCentrality:
def test_K5(self):
@@ -207,3 +252,89 @@ class TestEdgeSubsetBetweennessCentrality:
)
for n in sorted(G.edges()):
assert b[n] == pytest.approx(b_answer[n], abs=1e-7)
+
+ def test_diamond_multi_path(self):
+ """Edge betweenness subset centrality: Diamond Multi Path"""
+ G = nx.Graph()
+ G.add_edges_from(
+ [
+ (1, 2),
+ (1, 3),
+ (1, 4),
+ (1, 5),
+ (1, 10),
+ (10, 11),
+ (11, 12),
+ (12, 9),
+ (2, 6),
+ (3, 6),
+ (4, 6),
+ (5, 7),
+ (7, 8),
+ (6, 8),
+ (8, 9),
+ ]
+ )
+ b_answer = dict.fromkeys(G.edges(), 0)
+ b_answer[(8, 9)] = 0.4
+ b_answer[(6, 8)] = b_answer[(7, 8)] = 0.2
+ b_answer[(2, 6)] = b_answer[(3, 6)] = b_answer[(4, 6)] = 0.2 / 3.0
+ b_answer[(1, 2)] = b_answer[(1, 3)] = b_answer[(1, 4)] = 0.2 / 3.0
+ b_answer[(5, 7)] = 0.2
+ b_answer[(1, 5)] = 0.2
+ b_answer[(9, 12)] = 0.1
+ b_answer[(11, 12)] = b_answer[(10, 11)] = b_answer[(1, 10)] = 0.1
+ b = nx.edge_betweenness_centrality_subset(
+ G, sources=[1], targets=[9], weight=None
+ )
+ for n in G.edges():
+ sort_n = tuple(sorted(n))
+ assert b[n] == pytest.approx(b_answer[sort_n], abs=1e-7)
+
+ def test_normalized_p1(self):
+ """
+ Edge betweenness subset centrality: P1
+ if n <= 1: no normalization b=0 for all nodes
+ """
+ G = nx.Graph()
+ nx.add_path(G, range(1))
+ b_answer = dict.fromkeys(G.edges(), 0)
+ b = nx.edge_betweenness_centrality_subset(
+ G, sources=[0], targets=[0], normalized=True, weight=None
+ )
+ for n in G.edges():
+ assert b[n] == pytest.approx(b_answer[n], abs=1e-7)
+
+ def test_normalized_P5_directed(self):
+ """Edge betweenness subset centrality: Normalized Directed P5"""
+ G = nx.DiGraph()
+ nx.add_path(G, range(5))
+ b_answer = dict.fromkeys(G.edges(), 0)
+ b_answer[(0, 1)] = b_answer[(1, 2)] = b_answer[(2, 3)] = 0.05
+ b = nx.edge_betweenness_centrality_subset(
+ G, sources=[0], targets=[3], normalized=True, weight=None
+ )
+ for n in G.edges():
+ assert b[n] == pytest.approx(b_answer[n], abs=1e-7)
+
+ def test_weighted_graph(self):
+ """Edge betweenness subset centrality: Weighted Graph"""
+ G = nx.DiGraph()
+ G.add_edge(0, 1, weight=3)
+ G.add_edge(0, 2, weight=2)
+ G.add_edge(0, 3, weight=6)
+ G.add_edge(0, 4, weight=4)
+ G.add_edge(1, 3, weight=5)
+ G.add_edge(1, 5, weight=5)
+ G.add_edge(2, 4, weight=1)
+ G.add_edge(3, 4, weight=2)
+ G.add_edge(3, 5, weight=1)
+ G.add_edge(4, 5, weight=4)
+ b_answer = dict.fromkeys(G.edges(), 0)
+ b_answer[(0, 2)] = b_answer[(2, 4)] = b_answer[(4, 5)] = 0.5
+ b_answer[(0, 3)] = b_answer[(3, 5)] = 0.5
+ b = nx.edge_betweenness_centrality_subset(
+ G, sources=[0], targets=[5], normalized=False, weight="weight"
+ )
+ for n in G.edges():
+ assert b[n] == pytest.approx(b_answer[n], abs=1e-7)