def construct_vertex_labelled_graph(graph): ( copy, mapping ) = utility.copy_graph_and_map_vertices( graph = graph ) for v in graph.vertices(): copy.set_vertex_label( vertex = mapping[ v ], label = frozenset( ( v, ) ) ) return copy
def copy_graph_and_merge_vertices(graph, merge1, merge2): ( copy, mapping ) = utility.copy_graph_and_map_vertices( graph = graph ) contract_undirected_graph( graph = copy, v1 = mapping[ merge1 ], v2 = mapping[ merge2 ], ) return ( copy, contract_undirected_graph.joint_vertex_label( graph.vertex_label( vertex = merge1 ), graph.vertex_label( vertex = merge2 ), ), )
def manipulation(self, g): vd0 = g.add_vertex(label=object()) vd1 = g.add_vertex(label=object()) vd2 = g.add_vertex(label=object()) g.add_edge(vertex1=vd0, vertex2=vd1, weight=object()) g.add_edge(vertex1=vd0, vertex2=vd2, weight=object()) g.add_edge(vertex1=vd1, vertex2=vd2, weight=object()) (copy, mapping) = utility.copy_graph_and_map_vertices(graph=g) self.assertEqual(copy.num_vertices(), 3) self.assertEqual(copy.num_edges(), 3) self.assertEqual(len(mapping), 3) for vertex in g.vertices(): self.assertTrue(vertex in mapping) self.assertEqual( g.vertex_label(vertex=vertex), copy.vertex_label(vertex=mapping[vertex]), ) weight_of_edge_between = {} for edge in copy.edges(): sv = copy.source(edge=edge) dv = copy.target(edge=edge) weight_of_edge_between[frozenset( (sv, dv))] = copy.edge_weight(edge=edge) for edge in g.edges(): sv = copy.source(edge=edge) dv = copy.target(edge=edge) key = frozenset((mapping[sv], mapping[dv])) self.assertTrue(key in weight_of_edge_between) self.assertEqual(weight_of_edge_between[key], g.edge_weight(edge=edge))