""" Tests for degree centrality. """ import networkx as nx from networkx.algorithms.centrality import harmonic_centrality from networkx.testing import almost_equal class TestClosenessCentrality: @classmethod def setup_class(cls): cls.P3 = nx.path_graph(3) cls.P4 = nx.path_graph(4) cls.K5 = nx.complete_graph(5) cls.C4 = nx.cycle_graph(4) cls.C5 = nx.cycle_graph(5) cls.T = nx.balanced_tree(r=2, h=2) cls.Gb = nx.DiGraph() cls.Gb.add_edges_from([(0, 1), (0, 2), (0, 4), (2, 1), (2, 3), (4, 3)]) def test_p3_harmonic(self): c = harmonic_centrality(self.P3) d = {0: 1.5, 1: 2, 2: 1.5} for n in sorted(self.P3): assert almost_equal(c[n], d[n], places=3) def test_p4_harmonic(self): c = harmonic_centrality(self.P4) d = {0: 1.8333333, 1: 2.5, 2: 2.5, 3: 1.8333333} for n in sorted(self.P4): assert almost_equal(c[n], d[n], places=3) def test_clique_complete(self): c = harmonic_centrality(self.K5) d = {0: 4, 1: 4, 2: 4, 3: 4, 4: 4} for n in sorted(self.P3): assert almost_equal(c[n], d[n], places=3) def test_cycle_C4(self): c = harmonic_centrality(self.C4) d = {0: 2.5, 1: 2.5, 2: 2.5, 3: 2.5, } for n in sorted(self.C4): assert almost_equal(c[n], d[n], places=3) def test_cycle_C5(self): c = harmonic_centrality(self.C5) d = {0: 3, 1: 3, 2: 3, 3: 3, 4: 3, 5: 4} for n in sorted(self.C5): assert almost_equal(c[n], d[n], places=3) def test_bal_tree(self): c = harmonic_centrality(self.T) d = {0: 4.0, 1: 4.1666, 2: 4.1666, 3: 2.8333, 4: 2.8333, 5: 2.8333, 6: 2.8333} for n in sorted(self.T): assert almost_equal(c[n], d[n], places=3) def test_exampleGraph(self): c = harmonic_centrality(self.Gb) d = {0: 0, 1: 2, 2: 1, 3: 2.5, 4: 1} for n in sorted(self.Gb): assert almost_equal(c[n], d[n], places=3) def test_weighted_harmonic(self): XG = nx.DiGraph() XG.add_weighted_edges_from([('a', 'b', 10), ('d', 'c', 5), ('a', 'c', 1), ('e', 'f', 2), ('f', 'c', 1), ('a', 'f', 3), ]) c = harmonic_centrality(XG, distance='weight') d = {'a': 0, 'b': 0.1, 'c': 2.533, 'd': 0, 'e': 0, 'f': 0.83333} for n in sorted(XG): assert almost_equal(c[n], d[n], places=3) def test_empty(self): G = nx.DiGraph() c = harmonic_centrality(G, distance='weight') d = {} assert c == d def test_singleton(self): G = nx.DiGraph() G.add_node(0) c = harmonic_centrality(G, distance='weight') d = {0: 0} assert c == d