def generate_graph(p, max_edges_to_create_per_node_per_pass): ''' generate a semi-random graph of size p generate p vertices, with random x,y co-ords for each vertex: randomly add at most max_edges_to_create_per_node_per_pass new edges ''' g = nx.Graph() f_gen_xy = construct_xy_factory() for i in range(p): (x,y) = f_gen_xy() tag = Tag(x, y, '') tag.label = 'Node %i' % tag.idx g.add_node(tag) nodes = g.nodes() for node in nodes: for j in range(randint(1, max_edges_to_create_per_node_per_pass)): new_edge_added = False while new_edge_added == False: z = randint(0, len(nodes) - 1) if nodes[z] != node: if ((nodes[z], node) not in g.edges()) and ((node, nodes[z]) not in g.edges()): g.add_edge(node, nodes[z]) new_edge_added = True return g
def add_node_to_graph_at_random(graph): (x, y) = calc_xy_for_new_node(graph) tag = Tag(x, y, '') tag.label = 'Node %i' % tag.idx graph.add_node(tag) add_edges_for_vertex_at_random(graph, tag, max_edges_to_create_per_node_per_pass=4) return tag