ó žÃÒYc@s¢dZyddlmZWn!ek r=ddlmZnXddlZdjddgƒZdd d d gZ ddd „Z d „Z dd„Z d„ZdS(sOperations on many graphs. iÿÿÿÿ(t izip_longest(t zip_longestNs s&Robert King s%Aric Hagberg t union_allt compose_alltdisjoint_union_alltintersection_allcCsct||ƒ}t|ƒ\}}x;|D]3\}}tj||||fd|ƒ}d}q(W|S(sñReturn 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". name : string Specify the name for the union graph@not_implemnted_for('direct Returns ------- U : a graph with the same type as the first graph in 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 tnameN(RtnexttnxtuniontNone(tgraphstrenameRt graphs_namestUtgnametHthname((sw/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/operators/all.pyRs $! cCs?t|ƒ}t|ƒ}x |D]}tj||ƒ}qW|S(s“Return 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 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. (titerRRtdisjoint_union(R RR((sw/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/operators/all.pyRBs    cCsEt|ƒ}t|ƒ}x&|D]}tj||d|ƒ}qW|S(sÍReturn 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 name : string Specify name for new graph Returns ------- C : A graph with the same type as the first graph in 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. R(RRRtcompose(R RtCR((sw/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/operators/all.pyR`s    cCs?t|ƒ}t|ƒ}x |D]}tj||ƒ}qW|S(s¢Return 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 List of NetworkX graphs Returns ------- R : A new graph with the same type as the first graph in list Notes ----- Attributes from the graph, nodes, and edges are not copied to the new graph. (RRRt intersection(R tRR((sw/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/operators/all.pyR‚s    (N(t__doc__t itertoolsRRt ImportErrortnetworkxRtjoint __author__t__all__R RRRR(((sw/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/operators/all.pyts      ,  "