This repository has been archived on 2023-03-25. You can view files and clone it, but cannot push or open issues or pull requests.
mightyscape-1.1-deprecated/extensions/networkx/algorithms/bipartite/tests/test_centrality.py
2020-07-30 01:16:18 +02:00

169 lines
6.3 KiB
Python

import networkx as nx
from networkx.algorithms import bipartite
from networkx.testing import almost_equal
class TestBipartiteCentrality(object):
@classmethod
def setup_class(cls):
cls.P4 = nx.path_graph(4)
cls.K3 = nx.complete_bipartite_graph(3, 3)
cls.C4 = nx.cycle_graph(4)
cls.davis = nx.davis_southern_women_graph()
cls.top_nodes = [n for n, d in cls.davis.nodes(data=True)
if d['bipartite'] == 0]
def test_degree_centrality(self):
d = bipartite.degree_centrality(self.P4, [1, 3])
answer = {0: 0.5, 1: 1.0, 2: 1.0, 3: 0.5}
assert d == answer
d = bipartite.degree_centrality(self.K3, [0, 1, 2])
answer = {0: 1.0, 1: 1.0, 2: 1.0, 3: 1.0, 4: 1.0, 5: 1.0}
assert d == answer
d = bipartite.degree_centrality(self.C4, [0, 2])
answer = {0: 1.0, 1: 1.0, 2: 1.0, 3: 1.0}
assert d == answer
def test_betweenness_centrality(self):
c = bipartite.betweenness_centrality(self.P4, [1, 3])
answer = {0: 0.0, 1: 1.0, 2: 1.0, 3: 0.0}
assert c == answer
c = bipartite.betweenness_centrality(self.K3, [0, 1, 2])
answer = {0: 0.125, 1: 0.125, 2: 0.125, 3: 0.125, 4: 0.125, 5: 0.125}
assert c == answer
c = bipartite.betweenness_centrality(self.C4, [0, 2])
answer = {0: 0.25, 1: 0.25, 2: 0.25, 3: 0.25}
assert c == answer
def test_closeness_centrality(self):
c = bipartite.closeness_centrality(self.P4, [1, 3])
answer = {0: 2.0 / 3, 1: 1.0, 2: 1.0, 3: 2.0 / 3}
assert c == answer
c = bipartite.closeness_centrality(self.K3, [0, 1, 2])
answer = {0: 1.0, 1: 1.0, 2: 1.0, 3: 1.0, 4: 1.0, 5: 1.0}
assert c == answer
c = bipartite.closeness_centrality(self.C4, [0, 2])
answer = {0: 1.0, 1: 1.0, 2: 1.0, 3: 1.0}
assert c == answer
G = nx.Graph()
G.add_node(0)
G.add_node(1)
c = bipartite.closeness_centrality(G, [0])
assert c == {1: 0.0}
c = bipartite.closeness_centrality(G, [1])
assert c == {1: 0.0}
def test_davis_degree_centrality(self):
G = self.davis
deg = bipartite.degree_centrality(G, self.top_nodes)
answer = {'E8': 0.78,
'E9': 0.67,
'E7': 0.56,
'Nora Fayette': 0.57,
'Evelyn Jefferson': 0.57,
'Theresa Anderson': 0.57,
'E6': 0.44,
'Sylvia Avondale': 0.50,
'Laura Mandeville': 0.50,
'Brenda Rogers': 0.50,
'Katherina Rogers': 0.43,
'E5': 0.44,
'Helen Lloyd': 0.36,
'E3': 0.33,
'Ruth DeSand': 0.29,
'Verne Sanderson': 0.29,
'E12': 0.33,
'Myra Liddel': 0.29,
'E11': 0.22,
'Eleanor Nye': 0.29,
'Frances Anderson': 0.29,
'Pearl Oglethorpe': 0.21,
'E4': 0.22,
'Charlotte McDowd': 0.29,
'E10': 0.28,
'Olivia Carleton': 0.14,
'Flora Price': 0.14,
'E2': 0.17,
'E1': 0.17,
'Dorothy Murchison': 0.14,
'E13': 0.17,
'E14': 0.17}
for node, value in answer.items():
assert almost_equal(value, deg[node], places=2)
def test_davis_betweenness_centrality(self):
G = self.davis
bet = bipartite.betweenness_centrality(G, self.top_nodes)
answer = {'E8': 0.24,
'E9': 0.23,
'E7': 0.13,
'Nora Fayette': 0.11,
'Evelyn Jefferson': 0.10,
'Theresa Anderson': 0.09,
'E6': 0.07,
'Sylvia Avondale': 0.07,
'Laura Mandeville': 0.05,
'Brenda Rogers': 0.05,
'Katherina Rogers': 0.05,
'E5': 0.04,
'Helen Lloyd': 0.04,
'E3': 0.02,
'Ruth DeSand': 0.02,
'Verne Sanderson': 0.02,
'E12': 0.02,
'Myra Liddel': 0.02,
'E11': 0.02,
'Eleanor Nye': 0.01,
'Frances Anderson': 0.01,
'Pearl Oglethorpe': 0.01,
'E4': 0.01,
'Charlotte McDowd': 0.01,
'E10': 0.01,
'Olivia Carleton': 0.01,
'Flora Price': 0.01,
'E2': 0.00,
'E1': 0.00,
'Dorothy Murchison': 0.00,
'E13': 0.00,
'E14': 0.00}
for node, value in answer.items():
assert almost_equal(value, bet[node], places=2)
def test_davis_closeness_centrality(self):
G = self.davis
clos = bipartite.closeness_centrality(G, self.top_nodes)
answer = {'E8': 0.85,
'E9': 0.79,
'E7': 0.73,
'Nora Fayette': 0.80,
'Evelyn Jefferson': 0.80,
'Theresa Anderson': 0.80,
'E6': 0.69,
'Sylvia Avondale': 0.77,
'Laura Mandeville': 0.73,
'Brenda Rogers': 0.73,
'Katherina Rogers': 0.73,
'E5': 0.59,
'Helen Lloyd': 0.73,
'E3': 0.56,
'Ruth DeSand': 0.71,
'Verne Sanderson': 0.71,
'E12': 0.56,
'Myra Liddel': 0.69,
'E11': 0.54,
'Eleanor Nye': 0.67,
'Frances Anderson': 0.67,
'Pearl Oglethorpe': 0.67,
'E4': 0.54,
'Charlotte McDowd': 0.60,
'E10': 0.55,
'Olivia Carleton': 0.59,
'Flora Price': 0.59,
'E2': 0.52,
'E1': 0.52,
'Dorothy Murchison': 0.65,
'E13': 0.52,
'E14': 0.52}
for node, value in answer.items():
assert almost_equal(value, clos[node], places=2)