def build_graph(data): g = Graph() dict = {} for v in data["nodes"]: id = v["id"] del v["graphID"], v["id"] g.add_vertex(id) g.set_node_attribute({id: v}) dict[id] = v for e in data["edges"]: source = e["source"] target = e["target"] del e["graphID"], e["id"], e["source"], e["target"] g.add_edge((source,target)) g.set_edge_attribute({(source,target):e}) return g
def build_graph(data): g = Graph() dict = {} for v in data["nodes"]: g.add_vertex(v.id) g.set_node_attribute({v.id: v}) dict[id] = v for e in data["edges"]: source = e["source"] target = e["target"] g.add_edge((source,target)) g.set_edge_attribute({(source,target):e}) return g
def edge_product_graph(self, g1, g2): result = Graph() for e1 in g1.edges(): for e2 in g2.edges(): if g1.get_edge_attribute(e1) == None: continue if g2.get_edge_attribute(e2) == None: continue if g1.get_edge_attribute(e1) != g2.get_edge_attribute(e2): continue if g1.get_node_attribute(e1[0]) != g2.get_node_attribute(e2[0]): continue if g1.get_node_attribute(e1[1]) != g2.get_node_attribute(e2[1]): continue # the two edges match # print("edge matches:" + str(e1) + str(e2)) # print(g1.get_edge_attribute(e1),g2.get_edge_attribute(e2)) result.add_vertex((e1, e2)) # add edges in r (between edge pairs that are compatible) # print(len(result.vertices())) product_nodes = result.vertices() for i in range(len(product_nodes)): for j in range(i+1, len(product_nodes)): ee1 = product_nodes[i] ee2 = product_nodes[j] if ee1 == ee2: continue middle_node1 = None middle_node2 = None for v1 in ee1[0]: for v2 in ee2[0]: if v1 == v2: middle_node1 = v1 for v1 in ee1[1]: for v2 in ee2[1]: if v1 == v2: middle_node2 = v1 result.add_edge((ee1,ee2)) if middle_node1 == None or middle_node2 == None: # print("d_edge setting : ", ee1, ee2) result.set_edge_attribute({(ee1,ee2) : "d-edge"}) elif g1.get_node_attribute(middle_node1) == g2.get_node_attribute(middle_node2): result.set_edge_attribute({(ee1,ee2) : "c-edge"}) else: # print("d_edge setting : ", ee1, ee2) result.set_edge_attribute({(ee1,ee2) : "d-edge"}) # print(" resulting edge product graph: ") # for e in result.edges(): # print(str(e)) # print(result.get_edge_attribute(e)) return result
def edge_product_graph(self, g1, g2): result = Graph() for e1 in g1.edges(): for e2 in g2.edges(): if g1.get_edge_attribute(e1) == None: continue if g2.get_edge_attribute(e2) == None: continue if g1.get_edge_attribute(e1) != g2.get_edge_attribute(e2): continue if g1.get_node_attribute(e1[0]) != g2.get_node_attribute(e2[0]): continue if g1.get_node_attribute(e1[1]) != g2.get_node_attribute(e2[1]): continue result.add_vertex((e1, e2)) product_nodes = result.vertices() for i in range(len(product_nodes)): for j in range(i+1, len(product_nodes)): ee1 = product_nodes[i] ee2 = product_nodes[j] if ee1 == ee2: continue middle_node1 = None middle_node2 = None for v1 in ee1[0]: for v2 in ee2[0]: if v1 == v2: middle_node1 = v1 for v1 in ee1[1]: for v2 in ee2[1]: if v1 == v2: middle_node2 = v1 result.add_edge((ee1,ee2)) if middle_node1 == None or middle_node2 == None: result.set_edge_attribute({(ee1,ee2) : "d-edge"}) elif g1.get_node_attribute(middle_node1) == g2.get_node_attribute(middle_node2): result.set_edge_attribute({(ee1,ee2) : "c-edge"}) else: result.set_edge_attribute({(ee1,ee2) : "d-edge"}) return result