Example #1
0
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
Example #2
0
 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)
Example #3
0
 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)