def convert_multigraph_to_graph(G): """ For each duplicate edge make a dummy node. TODO: preserve data, keys, and directedness """ import utool as ut edge_list = list(G.edges()) node_list = list(G.nodes()) dupitem_to_idx = ut.find_duplicate_items(edge_list) node_to_freq = ut.ddict(lambda: 0) remove_idxs = ut.flatten(dupitem_to_idx.values()) ut.delete_items_by_index(edge_list, remove_idxs) for dup_edge in dupitem_to_idx.keys(): freq = len(dupitem_to_idx[dup_edge]) u, v = dup_edge[0:2] pair_node = dup_edge pair_nodes = [pair_node + tuple([count]) for count in range(freq)] for pair_node in pair_nodes: node_list.append(pair_node) for node in dup_edge: node_to_freq[node] += freq edge_list.append((u, pair_node)) edge_list.append((pair_node, v)) import networkx as nx G2 = nx.DiGraph() G2.add_edges_from(edge_list) G2.add_nodes_from(node_list) return G2
def __delitem__(self, index): import utool as ut index = ut.ensure_iterable(index) ut.delete_items_by_index(self.found_fpath_list, index) ut.delete_items_by_index(self.found_lines_list, index) ut.delete_items_by_index(self.found_lxs_list, index)