Mercurial > repos > shellac > sam_consensus_v3
diff env/lib/python3.9/site-packages/networkx/algorithms/operators/all.py @ 0:4f3585e2f14b draft default tip
"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author | shellac |
---|---|
date | Mon, 22 Mar 2021 18:12:50 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/env/lib/python3.9/site-packages/networkx/algorithms/operators/all.py Mon Mar 22 18:12:50 2021 +0000 @@ -0,0 +1,163 @@ +"""Operations on many graphs. +""" +from itertools import zip_longest +import networkx as nx + +__all__ = ["union_all", "compose_all", "disjoint_union_all", "intersection_all"] + + +def union_all(graphs, rename=(None,)): + """Returns the union of all graphs. + + The graphs must be disjoint, otherwise an exception is raised. + + Parameters + ---------- + graphs : list of graphs + List of NetworkX graphs + + rename : bool , default=(None, None) + Node names of G and H can be changed by specifying the tuple + rename=('G-','H-') (for example). Node "u" in G is then renamed + "G-u" and "v" in H is renamed "H-v". + + Returns + ------- + U : a graph with the same type as the first graph in list + + Raises + ------ + ValueError + If `graphs` is an empty list. + + Notes + ----- + To force a disjoint union with node relabeling, use + disjoint_union_all(G,H) or convert_node_labels_to integers(). + + Graph, edge, and node attributes are propagated to the union graph. + If a graph attribute is present in multiple graphs, then the value + from the last graph in the list with that attribute is used. + + See Also + -------- + union + disjoint_union_all + """ + if not graphs: + raise ValueError("cannot apply union_all to an empty list") + graphs_names = zip_longest(graphs, rename) + U, gname = next(graphs_names) + for H, hname in graphs_names: + U = nx.union(U, H, (gname, hname)) + gname = None + return U + + +def disjoint_union_all(graphs): + """Returns the disjoint union of all graphs. + + This operation forces distinct integer node labels starting with 0 + for the first graph in the list and numbering consecutively. + + Parameters + ---------- + graphs : list + List of NetworkX graphs + + Returns + ------- + U : A graph with the same type as the first graph in list + + Raises + ------ + ValueError + If `graphs` is an empty list. + + Notes + ----- + It is recommended that the graphs be either all directed or all undirected. + + Graph, edge, and node attributes are propagated to the union graph. + If a graph attribute is present in multiple graphs, then the value + from the last graph in the list with that attribute is used. + """ + if not graphs: + raise ValueError("cannot apply disjoint_union_all to an empty list") + graphs = iter(graphs) + U = next(graphs) + for H in graphs: + U = nx.disjoint_union(U, H) + return U + + +def compose_all(graphs): + """Returns the composition of all graphs. + + Composition is the simple union of the node sets and edge sets. + The node sets of the supplied graphs need not be disjoint. + + Parameters + ---------- + graphs : list + List of NetworkX graphs + + Returns + ------- + C : A graph with the same type as the first graph in list + + Raises + ------ + ValueError + If `graphs` is an empty list. + + Notes + ----- + It is recommended that the supplied graphs be either all directed or all + undirected. + + Graph, edge, and node attributes are propagated to the union graph. + If a graph attribute is present in multiple graphs, then the value + from the last graph in the list with that attribute is used. + """ + if not graphs: + raise ValueError("cannot apply compose_all to an empty list") + graphs = iter(graphs) + C = next(graphs) + for H in graphs: + C = nx.compose(C, H) + return C + + +def intersection_all(graphs): + """Returns a new graph that contains only the edges that exist in + all graphs. + + All supplied graphs must have the same node set. + + Parameters + ---------- + graphs : list + List of NetworkX graphs + + Returns + ------- + R : A new graph with the same type as the first graph in list + + Raises + ------ + ValueError + If `graphs` is an empty list. + + Notes + ----- + Attributes from the graph, nodes, and edges are not copied to the new + graph. + """ + if not graphs: + raise ValueError("cannot apply intersection_all to an empty list") + graphs = iter(graphs) + R = next(graphs) + for H in graphs: + R = nx.intersection(R, H) + return R