from nose.tools import * import networkx as nx from networkx.algorithms import bipartite class TestBipartiteCentrality(object): def setUp(self): self.P4 = nx.path_graph(4) self.K3 = nx.complete_bipartite_graph(3,3) self.C4 = nx.cycle_graph(4) self.davis = nx.davis_southern_women_graph() self.top_nodes = [n for n,d in self.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_equal(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_equal(d, answer) d = bipartite.degree_centrality(self.C4, [0,2]) answer = {0: 1.0, 1: 1.0, 2: 1.0, 3: 1.0} assert_equal(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_equal(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_equal(c, answer) c = bipartite.betweenness_centrality(self.C4, [0,2]) answer = {0: 0.25, 1: 0.25, 2: 0.25, 3: 0.25} assert_equal(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_equal(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_equal(c, answer) c = bipartite.closeness_centrality(self.C4, [0,2]) answer = {0: 1.0, 1: 1.0, 2: 1.0, 3: 1.0} assert_equal(c, answer) G = nx.Graph() G.add_node(0) G.add_node(1) c = bipartite.closeness_centrality(G, [0]) assert_equal(c, {1: 0.0}) c = bipartite.closeness_centrality(G, [1]) assert_equal(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)