def g_one_main(n, md, model, to_pickle=True, data_dir='pkls'):
    r = dict()
    g = gt.price_network(N=n,
                         m=md,
                         gamma=1,
                         directed=False,
                         seed_graph=gt.complete_graph(N=md + 1))
    if model == 'configuration':
        gt.random_rewire(g, model='configuration')
    r['N'] = n
    r['md'] = md
    r['model'] = model
    try:
        r.update(
            dict(
                n=g.num_vertices(),
                m=g.num_edges(),
                # l=average_path(g),
                # cc=gt.global_clustering(g)
                r_a=gt.assortativity(g, 'total'),
                rho_a=rank_assortativity(g, method='spearman'),
                tau_a=rank_assortativity(g, method='kendall')))
        r.update(g_centrality_correlations(g))
    except Exception as e:
        logger.error(e)
    if to_pickle is True:
        filename = gen_filename(n, md, model, data_dir)
        with open(filename, 'wb') as f:
            pickle.dump(r, f, -1)
    return r
Пример #2
0
def run_graph_tool(n, niter):
    pb = progressbar.ProgressBar(maxval=niter).start()
    g = gt.price_network(n, 2, directed=False)
    for e in g.edges():
        g.add_edge(e.target(), e.source())
    g.set_directed(True)
    start = time.time()
    for i in range(niter):
        gt.shortest_distance(g)
        pb.update(i)
    pb.finish()
    end = time.time()
    return (start, end)
    def generate(self):
        g = gt.price_network(self.n, directed=True)

        g = super().create_reverse_edges(g)

        # The capacity will be defined randomly
        capacity = g.new_edge_property("int")
        for e in g.edges():
            capacity[e] = randint(1, 15)

        g.ep.cap = capacity
        source = super().get_source(g)
        sink = super().get_sink(g)
        return g, source, sink
Пример #4
0
def graph_analyser(min_vertices, max_vertices, step, samples, print_header=False):
    metrics = open('./results/metrics.out', 'a')

    if print_header:
        graph_header(metrics)

    metrics.close()

    for vertices in range(min_vertices, max_vertices, step):
        metrics = open('./results/metrics.out', 'a')
        vert_dep_metrics = open(
            './results/' + str(vertices) + '-vertices-metrics.out', 
            'a'
        )

        print('for ' + str(vertices) + ':')
        vertices_header(vert_dep_metrics)

        for i in range(samples):
            print('sample: ' + str(i))
            # print('er')
            # g_name = 'er-' + str(vertices) + '-' + str(i)
            # compute_all_metrics(
            #     erdos_renyi_network(vertices, P),
            #     g_name,
            #     metrics, 
            #     vert_dep_metrics
            # )

            print('ba')
            g_name = 'ba-' + str(vertices) + '-' + str(i)
            compute_all_metrics(
                gt.price_network(vertices, 2, directed=False), 
                g_name,
                metrics, 
                vert_dep_metrics
            )

            print('dms')
            g_name = 'dms-' + str(vertices) + '-' + str(i)
            compute_all_metrics(
                dms_network(vertices),
                g_name,
                metrics, 
                vert_dep_metrics
            )

        vert_dep_metrics.close()
        metrics.close()
Пример #5
0
import graph_tool.all as gt
from math import sqrt
import numpy as np

g = gt.price_network(1500)
deg = g.degree_property_map("in")
deg.a = 4 * (np.sqrt(deg.a) * 0.5 + 0.4)
ebet = gt.betweenness(g)[1]
ebet.a /= ebet.a.max() / 10.
eorder = ebet.copy()
eorder.a *= -1
pos = gt.sfdp_layout(g)
control = g.new_edge_property("vector<double>")
for e in g.edges():
    d = sqrt(sum((pos[e.source()].a - pos[e.target()].a) ** 2)) / 5
    control[e] = [0.3, d, 0.7, d]

gt.graph_draw(g, pos=pos, vertex_size=deg, vertex_fill_color=deg, vorder=deg,
              edge_color=ebet, eorder=eorder, edge_pen_width=ebet,
              edge_control_points=control # some curvy edges
              )



raw_input("Press Enter to Continue")

v_fill = [0.6, 0.6, 0.6, 1]
gt.graph_draw(g, pos=pos, vertex_size=deg, vertex_fill_color=v_fill, vorder=deg,
              edge_color=ebet, eorder=eorder, edge_pen_width=ebet,
              edge_control_points=control # some curvy edges
              )
Пример #6
0
def generate_graph():
    """
    brew tap homebrew/science
    brew install graph-tool
    """

    from graph_tool.all import price_network, sfdp_layout, graph_draw
    from graph_tool.all import dfs_search, DFSVisitor, seed_rng
    from numpy.random import seed

    class AnnotationVisitor(DFSVisitor):
        def __init__(self, pred, dist):
            self.pred = pred
            self.dist = dist
            self.roots = {}

        def tree_edge(self, e):
            depth = self.dist[e.source()]
            if depth == 1:
                genre = int(e.source())
                if genre not in self.roots:
                    self.roots[genre] = len(self.roots)
            else:
                genre = self.pred[e.source()]
            self.pred[e.target()] = genre
            self.dist[e.target()] = depth + 1

    # For run-to-run stability, provide a constant seed:
    seed(SEED)
    seed_rng(SEED)

    print 'Generating graph...'
    g = price_network(2000)

    print 'Performing layout...'
    pos = sfdp_layout(g)

    print 'Adding depths...'
    dist = g.new_vertex_property("int")
    pred = g.new_vertex_property("int64_t")
    g.set_directed(False)
    visitor = AnnotationVisitor(pred, dist)
    dfs_search(g, g.vertex(0), visitor)

    print 'Iterating over verts...'
    flattened = []
    maxp = [-9999, -9999]
    minp = [+9999, +9999]
    maxd = 0
    for v in g.vertices():
        root_id = pred.a[v]
        if root_id not in visitor.roots:
            continue
        x, y, z = pos[v].a[0], pos[v].a[1], visitor.roots[root_id]
        minp[0] = min(minp[0], x)
        minp[1] = min(minp[1], y)
        maxp[0] = max(maxp[0], x)
        maxp[1] = max(maxp[1], y)
        maxd = max(maxd, dist.a[v])
        flattened += [x, y, z]

    print 'max depth is', maxd
    print 'nroots is', len(visitor.roots)
    print 'ncolors is', len(COLORS)

    extent = (maxp[0] - minp[0], maxp[1] - minp[1])
    padding = extent[0] * PADDING_FRACTION
    minp[0] -= padding
    minp[1] -= padding
    maxp[0] += padding
    maxp[1] += padding
    scale = [
        1.0 / (maxp[0] - minp[0]),
        1.0 / (maxp[1] - minp[1])]
    scale = min(scale[0], scale[1])
    midp = [
        0.5 * (maxp[0] + minp[0]),
        0.5 * (maxp[1] + minp[1])]
    flatarray = []
    for v in g.vertices():
        root_id = pred.a[v]
        if root_id not in visitor.roots:
            continue
        x, y, root = pos[v].a[0], pos[v].a[1], visitor.roots[root_id]
        x = (0.5 + (x - midp[0]) * scale)
        y = (0.5 + (y - midp[1]) * scale)
        prom = int(dist.a[v])
        flatarray += [x, y, root, prom]
    return flatarray
Пример #7
0
import graph_tool.all as gt 
import numpy as np 

g = gt.price_network(2000)
deg = g.degree_property_map("in")
deg.a = 4 * (np.sqrt(deg.a) * 0.5 + 0.4)
ebet = gt.betweenness(g)[1]
ebet.a /= ebet.a.max() / 10.
eorder = ebet.copy()
eorder.a *= -1
pos = gt.sfdp_layout(g)
gt.graph_draw(g, pos=pos, vertex_size=deg, vertex_fill_color=deg, vorder=deg, edge_color=ebet, eorder=eorder, edge_pen_width=ebet, output="output1.svg")
Пример #8
0
def generate_graph():
    """
    brew tap homebrew/science
    brew install graph-tool
    """

    from graph_tool.all import price_network, sfdp_layout, graph_draw
    from graph_tool.all import dfs_search, DFSVisitor, seed_rng
    from numpy.random import seed

    class AnnotationVisitor(DFSVisitor):
        def __init__(self, pred, dist):
            self.pred = pred
            self.dist = dist
            self.roots = {}

        def tree_edge(self, e):
            depth = self.dist[e.source()]
            if depth == 1:
                genre = int(e.source())
                if genre not in self.roots:
                    self.roots[genre] = len(self.roots)
            else:
                genre = self.pred[e.source()]
            self.pred[e.target()] = genre
            self.dist[e.target()] = depth + 1

    # For run-to-run stability, provide a constant seed:
    seed(SEED)
    seed_rng(SEED)

    print 'Generating graph...'
    g = price_network(2000)

    print 'Performing layout...'
    pos = sfdp_layout(g)

    print 'Adding depths...'
    dist = g.new_vertex_property("int")
    pred = g.new_vertex_property("int64_t")
    g.set_directed(False)
    visitor = AnnotationVisitor(pred, dist)
    dfs_search(g, g.vertex(0), visitor)

    print 'Iterating over verts...'
    flattened = []
    maxp = [-9999, -9999]
    minp = [+9999, +9999]
    maxd = 0
    for v in g.vertices():
        root_id = pred.a[v]
        if root_id not in visitor.roots:
            continue
        x, y, z = pos[v].a[0], pos[v].a[1], visitor.roots[root_id]
        minp[0] = min(minp[0], x)
        minp[1] = min(minp[1], y)
        maxp[0] = max(maxp[0], x)
        maxp[1] = max(maxp[1], y)
        maxd = max(maxd, dist.a[v])
        flattened += [x, y, z]

    print 'max depth is', maxd
    print 'nroots is', len(visitor.roots)
    print 'ncolors is', len(COLORS)

    extent = (maxp[0] - minp[0], maxp[1] - minp[1])
    padding = extent[0] * PADDING_FRACTION
    minp[0] -= padding
    minp[1] -= padding
    maxp[0] += padding
    maxp[1] += padding
    scale = [1.0 / (maxp[0] - minp[0]), 1.0 / (maxp[1] - minp[1])]
    scale = min(scale[0], scale[1])
    midp = [0.5 * (maxp[0] + minp[0]), 0.5 * (maxp[1] + minp[1])]
    flatarray = []
    for v in g.vertices():
        root_id = pred.a[v]
        if root_id not in visitor.roots:
            continue
        x, y, root = pos[v].a[0], pos[v].a[1], visitor.roots[root_id]
        x = (0.5 + (x - midp[0]) * scale)
        y = (0.5 + (y - midp[1]) * scale)
        prom = int(dist.a[v])
        flatarray += [x, y, root, prom]
    return flatarray