def testGetAllShortestPaths(self): g = Graph(4, [(0, 1), (1, 2), (1, 3), (2, 4), (3, 4), (4, 5)], directed=True) sps = sorted(g.get_all_shortest_paths(0, 0)) expected = [[0]] self.assertEqual(expected, sps) sps = sorted(g.get_all_shortest_paths(0, 5)) expected = [[0, 1, 2, 4, 5], [0, 1, 3, 4, 5]] self.assertEqual(expected, sps) sps = sorted(g.get_all_shortest_paths(1, 4)) expected = [[1, 2, 4], [1, 3, 4]] self.assertEqual(expected, sps) g = Graph.Lattice([5, 5], circular=False) sps = sorted(g.get_all_shortest_paths(0, 12)) expected = [ [0, 1, 2, 7, 12], [0, 1, 6, 7, 12], [0, 1, 6, 11, 12], [0, 5, 6, 7, 12], [0, 5, 6, 11, 12], [0, 5, 10, 11, 12], ] self.assertEqual(expected, sps) g = Graph.Lattice([100, 100], circular=False) sps = sorted(g.get_all_shortest_paths(0, 202)) expected = [ [0, 1, 2, 102, 202], [0, 1, 101, 102, 202], [0, 1, 101, 201, 202], [0, 100, 101, 102, 202], [0, 100, 101, 201, 202], [0, 100, 200, 201, 202], ] self.assertEqual(expected, sps) g = Graph.Lattice([100, 100], circular=False) sps = sorted(g.get_all_shortest_paths(0, [0, 202])) self.assertEqual([[0]] + expected, sps) g = Graph([(0, 1), (1, 2), (0, 2)]) g.es["weight"] = [0.5, 0.5, 1] sps = sorted(g.get_all_shortest_paths(0, weights="weight")) self.assertEqual([[0], [0, 1], [0, 1, 2], [0, 2]], sps) g = Graph.Lattice([4, 4], circular=False) g.es["weight"] = 1 g.es[2, 8]["weight"] = 100 sps = sorted(g.get_all_shortest_paths(0, [3, 12, 15], weights="weight")) self.assertEqual(20, len(sps)) self.assertEqual(4, sum(1 for path in sps if path[-1] == 3)) self.assertEqual(4, sum(1 for path in sps if path[-1] == 12)) self.assertEqual(12, sum(1 for path in sps if path[-1] == 15))
def testSubgraph(self): g = Graph.Lattice([10, 10], circular=False, mutual=False) g.vs["id"] = list(range(g.vcount())) vs = [0, 1, 2, 10, 11, 12, 20, 21, 22] sg = g.subgraph(vs) self.assertTrue( sg.isomorphic(Graph.Lattice([3, 3], circular=False, mutual=False))) self.assertTrue(sg.vs["id"] == vs)
def testSubgraphEdges(self): g = Graph.Lattice([10, 10], circular=False, mutual=False) g.es["id"] = list(range(g.ecount())) es = [0, 1, 2, 5, 20, 21, 22, 24, 38, 40] sg = g.subgraph_edges(es) exp = Graph.Lattice([3, 3], circular=False, mutual=False) exp.delete_edges([7, 8]) self.assertTrue(sg.isomorphic(exp)) self.assertTrue(sg.es["id"] == es)
def testBetweennessCentrality(self): g = Graph.Star(5) self.assertTrue(g.betweenness() == [6.0, 0.0, 0.0, 0.0, 0.0]) g = Graph(5, [(0, 1), (0, 2), (0, 3), (1, 4)]) self.assertTrue(g.betweenness() == [5.0, 3.0, 0.0, 0.0, 0.0]) self.assertTrue(g.betweenness(cutoff=2) == [3.0, 1.0, 0.0, 0.0, 0.0]) self.assertTrue(g.betweenness(cutoff=1) == [0.0, 0.0, 0.0, 0.0, 0.0]) g = Graph.Lattice([3, 3], circular=False) self.assertTrue( g.betweenness( cutoff=2) == [0.5, 2.0, 0.5, 2.0, 4.0, 2.0, 0.5, 2.0, 0.5])
def sample_bottlenecks_and_variance(n_nodes=100, p=.1, n_iterations=100): max_d_mins = empty(n_iterations) var_d_mins = empty(n_iterations) for i in range(n_iterations): g = Graph.Lattice([1, n_nodes], 4, directed=True) g.rewire_edges(p) d_mins = list(map(lambda n: d_min(g, n), range(len(g.vs)))) max_d_mins[i] = nanmax(d_mins) var_d_mins[i] = nanvar(d_mins) return max_d_mins, var_d_mins
def testGetAllSimplePaths(self): g = Graph.Ring(20) sps = sorted(g.get_all_simple_paths(0, 10)) self.assertEqual( [ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10], ], sps, ) g = Graph.Ring(20, directed=True) sps = sorted(g.get_all_simple_paths(0, 10)) self.assertEqual([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]], sps) sps = sorted(g.get_all_simple_paths(0, 10, mode="in")) self.assertEqual([[0, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10]], sps) sps = sorted(g.get_all_simple_paths(0, 10, mode="all")) self.assertEqual( [ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10], ], sps, ) g = Graph.Lattice([4, 4], circular=False) g = Graph([(min(u, v), max(u, v)) for u, v in g.get_edgelist()], directed=True) sps = sorted(g.get_all_simple_paths(0, 15)) self.assertEqual(20, len(sps)) for path in sps: self.assertEqual(0, path[0]) self.assertEqual(15, path[-1]) curr = path[0] for next in path[1:]: self.assertTrue(g.are_connected(curr, next)) curr = next
sns.kdeplot(max_d_mins, var_d_mins) xlabel(r'$d^*$ (interpreting as $\mu$)' + '\nLow value, high improvement rate') ylabel(r'variance of $d_{i}^{min}$ (interpreting as $K$)' + '\nLow value, low fluctuations') scatter(max_d_mins, var_d_mins, color='k', s=.5, label='Samples') title('Random networks with %i nodes and %.1f%% connection probability' '\n%i samples. Contours: Kernely density estimate' % (n_nodes, p * 100, n_iterations)) plots.savefig(gcf()) plots.close() # In[11]: g = Graph.Lattice([1, 1000], 4, directed=True) # In[30]: from igraph import Graph def d_min(g, n): if not g.predecessors(n): return nan return min(map(lambda x: g.outdegree(x), g.predecessors(n))) def sample_bottlenecks_and_variance(n_nodes=100, p=.1, n_iterations=100): max_d_mins = empty(n_iterations) var_d_mins = empty(n_iterations)