Ejemplo n.º 1
0
    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)
Ejemplo n.º 4
0
 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])
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
    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
Ejemplo n.º 7
0
        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)