Mercurial > repos > shellac > guppy_basecaller
diff env/lib/python3.7/site-packages/networkx/convert.py @ 5:9b1c78e6ba9c draft default tip
"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
author | shellac |
---|---|
date | Mon, 01 Jun 2020 08:59:25 -0400 |
parents | 79f47841a781 |
children |
line wrap: on
line diff
--- a/env/lib/python3.7/site-packages/networkx/convert.py Thu May 14 16:47:39 2020 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,391 +0,0 @@ -"""Functions to convert NetworkX graphs to and from other formats. - -The preferred way of converting data to a NetworkX graph is through the -graph constructor. The constructor calls the to_networkx_graph() function -which attempts to guess the input type and convert it automatically. - -Examples --------- -Create a graph with a single edge from a dictionary of dictionaries - ->>> d={0: {1: 1}} # dict-of-dicts single edge (0,1) ->>> G=nx.Graph(d) - -See Also --------- -nx_agraph, nx_pydot -""" -# Copyright (C) 2006-2013 by -# Aric Hagberg <hagberg@lanl.gov> -# Dan Schult <dschult@colgate.edu> -# Pieter Swart <swart@lanl.gov> -# All rights reserved. -# BSD license. -import warnings -import networkx as nx -__author__ = """\n""".join(['Aric Hagberg <aric.hagberg@gmail.com>', - 'Pieter Swart (swart@lanl.gov)', - 'Dan Schult(dschult@colgate.edu)']) -__all__ = ['to_networkx_graph', - 'from_dict_of_dicts', 'to_dict_of_dicts', - 'from_dict_of_lists', 'to_dict_of_lists', - 'from_edgelist', 'to_edgelist'] - - -def to_networkx_graph(data, create_using=None, multigraph_input=False): - """Make a NetworkX graph from a known data structure. - - The preferred way to call this is automatically - from the class constructor - - >>> d = {0: {1: {'weight':1}}} # dict-of-dicts single edge (0,1) - >>> G = nx.Graph(d) - - instead of the equivalent - - >>> G = nx.from_dict_of_dicts(d) - - Parameters - ---------- - data : object to be converted - - Current known types are: - any NetworkX graph - dict-of-dicts - dict-of-lists - list of edges - Pandas DataFrame (row per edge) - numpy matrix - numpy ndarray - scipy sparse matrix - pygraphviz agraph - - create_using : NetworkX graph constructor, optional (default=nx.Graph) - Graph type to create. If graph instance, then cleared before populated. - - multigraph_input : bool (default False) - If True and data is a dict_of_dicts, - try to create a multigraph assuming dict_of_dict_of_lists. - If data and create_using are both multigraphs then create - a multigraph from a multigraph. - - """ - # NX graph - if hasattr(data, "adj"): - try: - result = from_dict_of_dicts(data.adj, - create_using=create_using, - multigraph_input=data.is_multigraph()) - if hasattr(data, 'graph'): # data.graph should be dict-like - result.graph.update(data.graph) - if hasattr(data, 'nodes'): # data.nodes should be dict-like - # result.add_node_from(data.nodes.items()) possible but - # for custom node_attr_dict_factory which may be hashable - # will be unexpected behavior - for n, dd in data.nodes.items(): - result._node[n].update(dd) - return result - except: - raise nx.NetworkXError("Input is not a correct NetworkX graph.") - - # pygraphviz agraph - if hasattr(data, "is_strict"): - try: - return nx.nx_agraph.from_agraph(data, create_using=create_using) - except: - raise nx.NetworkXError("Input is not a correct pygraphviz graph.") - - # dict of dicts/lists - if isinstance(data, dict): - try: - return from_dict_of_dicts(data, create_using=create_using, - multigraph_input=multigraph_input) - except: - try: - return from_dict_of_lists(data, create_using=create_using) - except: - raise TypeError("Input is not known type.") - - # list or generator of edges - - if (isinstance(data, (list, tuple)) or - any(hasattr(data, attr) for attr in ['_adjdict', 'next', '__next__'])): - try: - return from_edgelist(data, create_using=create_using) - except: - raise nx.NetworkXError("Input is not a valid edge list") - - # Pandas DataFrame - try: - import pandas as pd - if isinstance(data, pd.DataFrame): - if data.shape[0] == data.shape[1]: - try: - return nx.from_pandas_adjacency(data, create_using=create_using) - except: - msg = "Input is not a correct Pandas DataFrame adjacency matrix." - raise nx.NetworkXError(msg) - else: - try: - return nx.from_pandas_edgelist(data, edge_attr=True, create_using=create_using) - except: - msg = "Input is not a correct Pandas DataFrame edge-list." - raise nx.NetworkXError(msg) - except ImportError: - msg = 'pandas not found, skipping conversion test.' - warnings.warn(msg, ImportWarning) - - # numpy matrix or ndarray - try: - import numpy - if isinstance(data, (numpy.matrix, numpy.ndarray)): - try: - return nx.from_numpy_matrix(data, create_using=create_using) - except: - raise nx.NetworkXError( - "Input is not a correct numpy matrix or array.") - except ImportError: - warnings.warn('numpy not found, skipping conversion test.', - ImportWarning) - - # scipy sparse matrix - any format - try: - import scipy - if hasattr(data, "format"): - try: - return nx.from_scipy_sparse_matrix(data, create_using=create_using) - except: - raise nx.NetworkXError( - "Input is not a correct scipy sparse matrix type.") - except ImportError: - warnings.warn('scipy not found, skipping conversion test.', - ImportWarning) - - raise nx.NetworkXError( - "Input is not a known data type for conversion.") - - -def to_dict_of_lists(G, nodelist=None): - """Returns adjacency representation of graph as a dictionary of lists. - - Parameters - ---------- - G : graph - A NetworkX graph - - nodelist : list - Use only nodes specified in nodelist - - Notes - ----- - Completely ignores edge data for MultiGraph and MultiDiGraph. - - """ - if nodelist is None: - nodelist = G - - d = {} - for n in nodelist: - d[n] = [nbr for nbr in G.neighbors(n) if nbr in nodelist] - return d - - -def from_dict_of_lists(d, create_using=None): - """Returns a graph from a dictionary of lists. - - Parameters - ---------- - d : dictionary of lists - A dictionary of lists adjacency representation. - - create_using : NetworkX graph constructor, optional (default=nx.Graph) - Graph type to create. If graph instance, then cleared before populated. - - Examples - -------- - >>> dol = {0: [1]} # single edge (0,1) - >>> G = nx.from_dict_of_lists(dol) - - or - - >>> G = nx.Graph(dol) # use Graph constructor - - """ - G = nx.empty_graph(0, create_using) - G.add_nodes_from(d) - if G.is_multigraph() and not G.is_directed(): - # a dict_of_lists can't show multiedges. BUT for undirected graphs, - # each edge shows up twice in the dict_of_lists. - # So we need to treat this case separately. - seen = {} - for node, nbrlist in d.items(): - for nbr in nbrlist: - if nbr not in seen: - G.add_edge(node, nbr) - seen[node] = 1 # don't allow reverse edge to show up - else: - G.add_edges_from(((node, nbr) for node, nbrlist in d.items() - for nbr in nbrlist)) - return G - - -def to_dict_of_dicts(G, nodelist=None, edge_data=None): - """Returns adjacency representation of graph as a dictionary of dictionaries. - - Parameters - ---------- - G : graph - A NetworkX graph - - nodelist : list - Use only nodes specified in nodelist - - edge_data : list, optional - If provided, the value of the dictionary will be - set to edge_data for all edges. This is useful to make - an adjacency matrix type representation with 1 as the edge data. - If edgedata is None, the edgedata in G is used to fill the values. - If G is a multigraph, the edgedata is a dict for each pair (u,v). - """ - dod = {} - if nodelist is None: - if edge_data is None: - for u, nbrdict in G.adjacency(): - dod[u] = nbrdict.copy() - else: # edge_data is not None - for u, nbrdict in G.adjacency(): - dod[u] = dod.fromkeys(nbrdict, edge_data) - else: # nodelist is not None - if edge_data is None: - for u in nodelist: - dod[u] = {} - for v, data in ((v, data) for v, data in G[u].items() if v in nodelist): - dod[u][v] = data - else: # nodelist and edge_data are not None - for u in nodelist: - dod[u] = {} - for v in (v for v in G[u] if v in nodelist): - dod[u][v] = edge_data - return dod - - -def from_dict_of_dicts(d, create_using=None, multigraph_input=False): - """Returns a graph from a dictionary of dictionaries. - - Parameters - ---------- - d : dictionary of dictionaries - A dictionary of dictionaries adjacency representation. - - create_using : NetworkX graph constructor, optional (default=nx.Graph) - Graph type to create. If graph instance, then cleared before populated. - - multigraph_input : bool (default False) - When True, the values of the inner dict are assumed - to be containers of edge data for multiple edges. - Otherwise this routine assumes the edge data are singletons. - - Examples - -------- - >>> dod = {0: {1: {'weight': 1}}} # single edge (0,1) - >>> G = nx.from_dict_of_dicts(dod) - - or - - >>> G = nx.Graph(dod) # use Graph constructor - - """ - G = nx.empty_graph(0, create_using) - G.add_nodes_from(d) - # is dict a MultiGraph or MultiDiGraph? - if multigraph_input: - # make a copy of the list of edge data (but not the edge data) - if G.is_directed(): - if G.is_multigraph(): - G.add_edges_from((u, v, key, data) - for u, nbrs in d.items() - for v, datadict in nbrs.items() - for key, data in datadict.items()) - else: - G.add_edges_from((u, v, data) - for u, nbrs in d.items() - for v, datadict in nbrs.items() - for key, data in datadict.items()) - else: # Undirected - if G.is_multigraph(): - seen = set() # don't add both directions of undirected graph - for u, nbrs in d.items(): - for v, datadict in nbrs.items(): - if (u, v) not in seen: - G.add_edges_from((u, v, key, data) - for key, data in datadict.items()) - seen.add((v, u)) - else: - seen = set() # don't add both directions of undirected graph - for u, nbrs in d.items(): - for v, datadict in nbrs.items(): - if (u, v) not in seen: - G.add_edges_from((u, v, data) - for key, data in datadict.items()) - seen.add((v, u)) - - else: # not a multigraph to multigraph transfer - if G.is_multigraph() and not G.is_directed(): - # d can have both representations u-v, v-u in dict. Only add one. - # We don't need this check for digraphs since we add both directions, - # or for Graph() since it is done implicitly (parallel edges not allowed) - seen = set() - for u, nbrs in d.items(): - for v, data in nbrs.items(): - if (u, v) not in seen: - G.add_edge(u, v, key=0) - G[u][v][0].update(data) - seen.add((v, u)) - else: - G.add_edges_from(((u, v, data) - for u, nbrs in d.items() - for v, data in nbrs.items())) - return G - - -def to_edgelist(G, nodelist=None): - """Returns a list of edges in the graph. - - Parameters - ---------- - G : graph - A NetworkX graph - - nodelist : list - Use only nodes specified in nodelist - - """ - if nodelist is None: - return G.edges(data=True) - return G.edges(nodelist, data=True) - - -def from_edgelist(edgelist, create_using=None): - """Returns a graph from a list of edges. - - Parameters - ---------- - edgelist : list or iterator - Edge tuples - - create_using : NetworkX graph constructor, optional (default=nx.Graph) - Graph type to create. If graph instance, then cleared before populated. - - Examples - -------- - >>> edgelist = [(0, 1)] # single edge (0,1) - >>> G = nx.from_edgelist(edgelist) - - or - - >>> G = nx.Graph(edgelist) # use Graph constructor - - """ - G = nx.empty_graph(0, create_using) - G.add_edges_from(edgelist) - return G