def single_vertex_and_edge_merge(cls, g1, g2): vertex_1 = g1.random_pick_a_vertex() edge_1 = g2.random_pick_a_edge() graph = MultiGraph() v_count = 1 v1_map = {} v2_map = {} for u in g1.vertices: if u.id == vertex_1.id: continue v1_map[u.id] = v_count graph.add_vertex(v_count) v_count += 1 for u in g2.vertices: v2_map[u.id] = v_count graph.add_vertex(v_count) v_count += 1 new_vertices = range(v_count, v_count + 5, 1) for i in new_vertices: graph.add_vertex(i) for i in range(0, 5, 1): graph.add_edge(new_vertices[i], new_vertices[(i+1) % 5]) ret1 = list() for edge in g1.edges: (a, b) = edge.get_endpoints() if a == vertex_1.id: temp = new_vertices.pop() ret1.append(temp) graph.add_edge(v1_map[b], temp) elif b == vertex_1.id: temp = new_vertices.pop() ret1.append(temp) graph.add_edge(v1_map[a], temp) else: graph.add_edge(v1_map[a], v1_map[b]) for edge in g2.edges: if edge.id == edge_1.id: continue (a, b) = edge.get_endpoints() graph.add_edge(v2_map[a], v2_map[b]) x, y = edge_1.get_endpoints() graph.add_edge(new_vertices[0], v2_map[x]) graph.add_edge(new_vertices[1], v2_map[y]) #print "ret1: ", ret1 #print "new vertex: ", new_vertices elist = list() elist.append((ret1[0], ret1[1])) elist.append((ret1[1], ret1[2])) elist.append((new_vertices[0], new_vertices[1])) try: graph.validate() except: failed_graph_DB.add_graph(graph.name, graph.to_json()) raise return (graph, elist)
def single_vertex_and_edge_merge(cls, g1, g2): vertex_1 = g1.random_pick_a_vertex() edge_1 = g2.random_pick_a_edge() graph = MultiGraph() v_count = 1 v1_map = {} v2_map = {} for u in g1.vertices: if u.id == vertex_1.id: continue v1_map[u.id] = v_count graph.add_vertex(v_count) v_count += 1 for u in g2.vertices: v2_map[u.id] = v_count graph.add_vertex(v_count) v_count += 1 new_vertices = range(v_count, v_count + 5, 1) for i in new_vertices: graph.add_vertex(i) for i in range(0, 5, 1): graph.add_edge(new_vertices[i], new_vertices[(i + 1) % 5]) ret1 = list() for edge in g1.edges: (a, b) = edge.get_endpoints() if a == vertex_1.id: temp = new_vertices.pop() ret1.append(temp) graph.add_edge(v1_map[b], temp) elif b == vertex_1.id: temp = new_vertices.pop() ret1.append(temp) graph.add_edge(v1_map[a], temp) else: graph.add_edge(v1_map[a], v1_map[b]) for edge in g2.edges: if edge.id == edge_1.id: continue (a, b) = edge.get_endpoints() graph.add_edge(v2_map[a], v2_map[b]) x, y = edge_1.get_endpoints() graph.add_edge(new_vertices[0], v2_map[x]) graph.add_edge(new_vertices[1], v2_map[y]) #print "ret1: ", ret1 #print "new vertex: ", new_vertices elist = list() elist.append((ret1[0], ret1[1])) elist.append((ret1[1], ret1[2])) elist.append((new_vertices[0], new_vertices[1])) try: graph.validate() except: failed_graph_DB.add_graph(graph.name, graph.to_json()) raise return (graph, elist)