| #!/usr/bin/env python |
| import math |
| from nose import SkipTest |
| from nose.tools import * |
| import networkx |
| |
| class TestEigenvectorCentrality(object): |
| numpy=1 # nosetests attribute, use nosetests -a 'not numpy' to skip test |
| @classmethod |
| def setupClass(cls): |
| global np |
| try: |
| import numpy as np |
| except ImportError: |
| raise SkipTest('NumPy not available.') |
| |
| def test_K5(self): |
| """Eigenvector centrality: K5""" |
| G=networkx.complete_graph(5) |
| b=networkx.eigenvector_centrality(G) |
| v=math.sqrt(1/5.0) |
| b_answer=dict.fromkeys(G,v) |
| for n in sorted(G): |
| assert_almost_equal(b[n],b_answer[n]) |
| nstart = dict([(n,1) for n in G]) |
| b=networkx.eigenvector_centrality(G,nstart=nstart) |
| for n in sorted(G): |
| assert_almost_equal(b[n],b_answer[n]) |
| |
| |
| b=networkx.eigenvector_centrality_numpy(G) |
| for n in sorted(G): |
| assert_almost_equal(b[n],b_answer[n],places=3) |
| |
| |
| def test_P3(self): |
| """Eigenvector centrality: P3""" |
| G=networkx.path_graph(3) |
| b_answer={0: 0.5, 1: 0.7071, 2: 0.5} |
| b=networkx.eigenvector_centrality_numpy(G) |
| for n in sorted(G): |
| assert_almost_equal(b[n],b_answer[n],places=4) |
| |
| |
| @raises(networkx.NetworkXError) |
| def test_maxiter(self): |
| G=networkx.path_graph(3) |
| b=networkx.eigenvector_centrality(G,max_iter=0) |
| |
| class TestEigenvectorCentralityDirected(object): |
| numpy=1 # nosetests attribute, use nosetests -a 'not numpy' to skip test |
| @classmethod |
| def setupClass(cls): |
| global np |
| try: |
| import numpy as np |
| except ImportError: |
| raise SkipTest('NumPy not available.') |
| |
| def setUp(self): |
| |
| G=networkx.DiGraph() |
| |
| edges=[(1,2),(1,3),(2,4),(3,2),(3,5),(4,2),(4,5),(4,6),\ |
| (5,6),(5,7),(5,8),(6,8),(7,1),(7,5),\ |
| (7,8),(8,6),(8,7)] |
| |
| G.add_edges_from(edges,weight=2.0) |
| self.G=G |
| self.G.evc=[0.25368793, 0.19576478, 0.32817092, 0.40430835, |
| 0.48199885, 0.15724483, 0.51346196, 0.32475403] |
| |
| H=networkx.DiGraph() |
| |
| edges=[(1,2),(1,3),(2,4),(3,2),(3,5),(4,2),(4,5),(4,6),\ |
| (5,6),(5,7),(5,8),(6,8),(7,1),(7,5),\ |
| (7,8),(8,6),(8,7)] |
| |
| G.add_edges_from(edges) |
| self.H=G |
| self.H.evc=[0.25368793, 0.19576478, 0.32817092, 0.40430835, |
| 0.48199885, 0.15724483, 0.51346196, 0.32475403] |
| |
| |
| def test_eigenvector_centrality_weighted(self): |
| G=self.G |
| p=networkx.eigenvector_centrality_numpy(G) |
| for (a,b) in zip(list(p.values()),self.G.evc): |
| assert_almost_equal(a,b) |
| |
| def test_eigenvector_centrality_unweighted(self): |
| G=self.H |
| p=networkx.eigenvector_centrality_numpy(G) |
| for (a,b) in zip(list(p.values()),self.G.evc): |
| assert_almost_equal(a,b) |
| |
| |
| class TestEigenvectorCentralityExceptions(object): |
| numpy=1 # nosetests attribute, use nosetests -a 'not numpy' to skip test |
| @classmethod |
| def setupClass(cls): |
| global np |
| try: |
| import numpy as np |
| except ImportError: |
| raise SkipTest('NumPy not available.') |
| numpy=1 # nosetests attribute, use nosetests -a 'not numpy' to skip test |
| @raises(networkx.NetworkXException) |
| def test_multigraph(self): |
| e = networkx.eigenvector_centrality(networkx.MultiGraph()) |
| |
| @raises(networkx.NetworkXException) |
| def test_multigraph_numpy(self): |
| e = networkx.eigenvector_centrality_numpy(networkx.MultiGraph()) |
| |
| |
| @raises(networkx.NetworkXException) |
| def test_empty(self): |
| e = networkx.eigenvector_centrality(networkx.Graph()) |
| |
| @raises(networkx.NetworkXException) |
| def test_empty_numpy(self): |
| e = networkx.eigenvector_centrality_numpy(networkx.Graph()) |