ó ŸÃÒYc@sddZddlmZmZmZddlZdddddd d d d d ddddddddddddgZdeefd„ƒYZdefd„ƒYZ de fd„ƒYZ de fd„ƒYZ de fd„ƒYZ de fd„ƒYZde fd „ƒYZde fd!„ƒYZde fd"„ƒYZde fd#„ƒYZd e fd$„ƒYZd efd%„ƒYZd efd&„ƒYZdefd'„ƒYZdefd(„ƒYZdefd)„ƒYZdeefd*„ƒYZdefd+„ƒYZdefd,„ƒYZd efd-„ƒYZd efd.„ƒYZdefd/„ƒYZdS(0s´ View Classes provide node, edge and degree "views" of a graph. Views for nodes, edges and degree are provided for all base graph classes. A view means a read-only object that is quick to create, automatically updated when the graph changes, and provides basic access like `n in V`, `for n in V`, `V[n]` and sometimes set operations. The views are read-only iterable containers that are updated as the graph is updated. As with dicts, the graph should not be updated while iterating through the view. Views can be iterated multiple times. Edge and Node views also allow data attribute lookup. The resulting attribute dict is writable as `G.edges[3, 4]['color']='red'` Degree views allow lookup of degree values for single nodes. Weighted degree is supported with the `weight` argument. NodeView ======== `V = G.nodes` (or `V = G.nodes()`) allows `len(V)`, `n in V`, set operations e.g. "G.nodes & H.nodes", and `dd = G.nodes[n]`, where `dd` is the node data dict. Iteration is over the nodes by default. NodeDataView ============ To iterate over (node, data) pairs, use arguments to `G.nodes()` to create a DataView e.g. `DV = G.nodes(data='color', default='red')`. The DataView iterates as `for n, color in DV` and allows `(n, 'red') in DV`. Using `DV = G.nodes(data=True)`, the DataViews use the full datadict in writeable form also allowing contain testing as `(n, {'color': 'red'}) in VD`. DataViews allow set operations when data attributes are hashable. DegreeView ========== `V = G.degree` allows iteration over (node, degree) pairs as well as lookup: `deg=V[n]`. There are many flavors of DegreeView for In/Out/Directed/Multi. For Directed Graphs, `G.degree` counts both in and out going edges. `G.out_degree` and `G.in_degree` count only specific directions. Weighted degree using edge data attributes is provide via `V = G.degree(weight='attr_name')` where any string with the attribute name can be used. `weight=None` is the default. No set operations are implemented for degrees, use NodeView. The argument `nbunch` restricts iteration to nodes in nbunch. The DegreeView can still lookup any node even if nbunch is specified. EdgeView ======== `V = G.edges` or `V = G.edges()` allows iteration over edges as well as `e in V`, set operations and edge data lookup `dd = G.edges[2, 3]`. Iteration is over 2-tuples `(u, v)` for Graph/DiGraph. For multigraphs edges 3-tuples `(u, v, key)` are the default but 2-tuples can be obtained via `V = G.edges(keys=False)`. Set operations for directed graphs treat the edges as a set of 2-tuples. For undirected graphs, 2-tuples are not a unique representation of edges. So long as the set being compared to contains unique representations of its edges, the set operations will act as expected. If the other set contains both `(0, 1)` and `(1, 0)` however, the result of set operations may contain both representations of the same edge. EdgeDataView ============ Edge data can be reported using an EdgeDataView typically created by calling an EdgeView: `DV = G.edges(data='weight', default=1)`. The EdgeDataView allows iteration over edge tuples, membership checking but no set operations. Iteration depends on `data` and `default` and for multigraph `keys` If `data is False` (the default) then iterate over 2-tuples `(u, v)`. If `data is True` iterate over 3-tuples `(u, v, datadict)`. Otherwise iterate over `(u, v, datadict.get(data, default))`. For Multigraphs, if `keys is True`, replace `u, v` with `u, v, key` to create 3-tuples and 4-tuples. The argument `nbunch` restricts edges to those incident to nodes in nbunch. iÿÿÿÿ(tMappingtSettIterableNtNodeViewt NodeDataViewtEdgeViewt OutEdgeViewt InEdgeViewt EdgeDataViewtOutEdgeDataViewtInEdgeDataViewt MultiEdgeViewtOutMultiEdgeViewtInMultiEdgeViewtMultiEdgeDataViewtOutMultiEdgeDataViewtInMultiEdgeDataViewt DegreeViewt DiDegreeViewt InDegreeViewt OutDegreeViewtMultiDegreeViewtDiMultiDegreeViewtInMultiDegreeViewtOutMultiDegreeViewcBs’eZdZdZd„Zd„Zd„Zd„Zd„Zd„Z d„Z e d „ƒZ e dd „Zedd „Zd „Zd „ZRS(s¾A NodeView class to act as G.nodes for a NetworkX Graph Set operations act on the nodes without considering data. Iteration is over nodes. Node data can be looked up like a dict. Use NodeDataView to iterate over node data or to specify a data attribute for lookup. NodeDataView is created by calling the NodeView. Parameters ---------- graph : NetworkX graph-like class Examples -------- >>> G = nx.path_graph(3) >>> NV = G.nodes() >>> 2 in NV True >>> for n in NV: print(n) 0 1 2 >>> assert(NV & {1, 2, 3} == {1, 2}) >>> G.add_node(2, color='blue') >>> NV[2] {'color': 'blue'} >>> G.add_node(8, color='red') >>> NDV = G.nodes(data=True) >>> (2, NV[2]) in NDV True >>> for n, dd in NDV: print((n, dd.get('color', 'aqua'))) (0, 'aqua') (1, 'aqua') (2, 'blue') (8, 'red') >>> NDV[2] == NV[2] True >>> NVdata = G.nodes(data='color', default='aqua') >>> (2, NVdata[2]) in NVdata True >>> for n, dd in NVdata: print((n, dd)) (0, 'aqua') (1, 'aqua') (2, 'blue') (8, 'red') >>> NVdata[2] == NV[2] # NVdata gets 'color', NV gets datadict False t_nodescCsi|jd6S(NR(R(tself((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyt __getstate__¡scCs|d|_dS(NR(R(Rtstate((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyt __setstate__¤scCs|j|_dS(N(t_nodeR(Rtgraph((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyt__init__§scCs t|jƒS(N(tlenR(R((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyt__len__«scCs t|jƒS(N(titerR(R((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyt__iter__®scCs |j|S(N(R(Rtn((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyt __getitem__±scCs ||jkS(N(R(RR%((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyt __contains__µscCs t|ƒS(N(tset(Rtit((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyt_from_iterable¸scCs#|tkr|St|j||ƒS(N(tFalseRR(Rtdatatdefault((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyt__call__½s cCs#|tkr|St|j||ƒS(N(R+RR(RR,R-((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR,Âs cCstt|ƒƒS(N(tstrtlist(R((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyt__str__ÇscCsd|jjt|ƒfS(Ns%s(%r)(t __class__t__name__ttuple(R((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyt__repr__Ês(s_nodesN(R3t __module__t__doc__t __slots__RRR R"R$R&R't classmethodR*R+tNoneR.tTrueR,R1R5(((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyRms1        cBszeZdZdZd„Zd„Zedd„Ze d„ƒZ d„Z d „Z d „Z d „Zd „Zd „ZRS(s™A DataView class for nodes of a NetworkX Graph The main use for this class is to iterate through node-data pairs. The data can be the entire data-dictionary for each node, or it can be a specific attribute (with default) for each node. Set operations are enabled with NodeDataView, but don't work in cases where the data is not hashable. Use with caution. Typically, set operations on nodes use NodeView, not NodeDataView. That is, they use `G.nodes` instead of `G.nodes(data='foo')`. Parameters ========== graph : NetworkX graph-like class data : bool or string (default=False) default : object (default=None) Rt_datat_defaultcCs"i|jd6|jd6|jd6S(NRR<R=(RR<R=(R((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyRás  cCs+|d|_|d|_|d|_dS(NRR<R=(RR<R=(RR((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyRæs  cCs||_||_||_dS(N(RR<R=(RtnodedictR,R-((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR ës  cCs\yt|ƒSWnGtk rW}dt|ƒkrQd}tt|ƒ|ƒ‚n‚nXdS(Nt unhashables7 : Could be b/c data=True or your values are unhashable(R(t TypeErrorR/(tclsR)terrtmsg((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR*ðscCs t|jƒS(N(R!R(R((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR"úscsaˆj‰ˆtkr"tˆjƒSˆtkrAtˆjjƒƒS‡‡fd†ˆjjƒDƒS(Nc3s:|]0\}}|ˆ|kr(|ˆnˆjfVqdS(N(R=(t.0R%tdd(R,R(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys s(R<R+R#RR;titems(R((R,Rsr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR$ýs    cCs¥y||jk}Wn7tk rL|\}}||jkoK|||kSX|tkr]|Sy|\}}Wnttfk r‡tSX||jko¤|||kS(N(RR@R;t ValueErrorR+(RR%tnode_intd((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR's   cCsM|j|}|j}|tks.|tkr2|S||krF||S|jS(N(RR<R+R;R=(RR%tddictR,((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR&s   cCstt|ƒƒS(N(R/R0(R((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR1scCsr|jtkr)d|jjt|ƒfS|jtkrRd|jjt|ƒfSd|jjt|ƒ|jfS(Ns%s(%r)s%s(%r, data=%r)(R<R+R2R3R4R;tdict(R((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR5s (s_nodess_datas_defaultN(R3R6R7R8RRR+R:R R9R*R"R$R'R&R1R5(((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyRÎs      cBsYeZdZddd„Zddd„Zd„Zd„Zd„Zd„Z d„Z RS( sXA View class for degree of nodes in a NetworkX Graph The functionality is like dict.items() with (node, degree) pairs. Additional functionality includes read-only lookup of node degree, and calling with optional features nbunch (for only a subset of nodes) and weight (use edge weights to compute degree). Parameters ========== graph : NetworkX graph-like class nbunch : node, container of nodes, or None meaning all nodes (default=None) weight : bool or string (default=None) Notes ----- DegreeView can still lookup any node even if nbunch is specified. Examples -------- >>> G = nx.path_graph(3) >>> DV = G.degree() >>> assert(DV[2] == 1) >>> assert(sum(deg for n, deg in DV) == 4) >>> DVweight = G.degree(weight="span") >>> G.add_edge(1, 2, span=34) >>> DVweight[2] 34 >>> DVweight[0] # default edge weight is 1 1 >>> sum(span for n, span in DVweight) # sum weighted degrees 70 >>> DVnbunch = G.degree(nbunch=(1, 2)) >>> assert(len(list(DVnbunch)) == 2) # iteration over nbunch only cCs‹||_t|dƒr!|jn|j|_t|dƒrE|jn|j|_|dkrf|jnt|j|ƒƒ|_||_ dS(Nt_succt_pred( t_graphthasattrRLt_adjRMR:R0t nbunch_iterRt_weight(RtGtnbunchtweight((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR Ms  $$cCs£|dkr5||jkr|S|j|jd|ƒSyD||jkrx||jkr^||S|j|jd|ƒ|SWntk rŒnX|j|j||ƒS(N(R:RRR2RNRR@(RRTRU((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR.Us  csƒ|j‰|j|}|j|}ˆdkrCt|ƒt|ƒSt‡fd†|jƒDƒƒt‡fd†|jƒDƒƒS(Nc3s!|]}|jˆdƒVqdS(iN(tget(RDRE(RU(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys isc3s!|]}|jˆdƒVqdS(iN(RV(RDRE(RU(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys js(RRRLRMR:R!tsumtvalues(RR%tsuccstpreds((RUsr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR&cs    c#sà|j‰ˆdkraxÄ|jD];}|j|}|j|}|t|ƒt|ƒfVqWn{xx|jD]m}|j|}|j|}t‡fd†|jƒDƒƒt‡fd†|jƒDƒƒ}||fVqkWdS(Nc3s!|]}|jˆdƒVqdS(iN(RV(RDRE(RU(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys wsc3s!|]}|jˆdƒVqdS(iN(RV(RDRE(RU(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys xs(RRR:RRLRMR!RWRX(RR%RYRZtdeg((RUsr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR$ls    "  #cCs t|jƒS(N(R!R(R((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR"{scCstt|ƒƒS(N(R/R0(R((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR1~scCsd|jjt|ƒfS(Ns%s(%r)(R2R3RK(R((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR5sN( R3R6R7R:R R.R&R$R"R1R5(((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR(s$   cBs eZdZd„Zd„ZRS(sžA DegreeView class to act as G.degree for a NetworkX Graph Typical usage focuses on iteration over `(node, degree)` pairs. The degree is by default the number of edges incident to the node. Optional argument `weight` enables weighted degree using the edge attribute named in the `weight` argument. Reporting and iteration can also be restricted to a subset of nodes using `nbunch`. Additional functionality include node lookup so that `G.degree[n]` reported the (possibly weighted) degree of node `n`. Calling the view creates a view with different arguments `nbunch` or `weight`. Parameters ========== graph : NetworkX graph-like class nbunch : node, container of nodes, or None meaning all nodes (default=None) weight : string or None (default=None) Notes ----- DegreeView can still lookup any node even if nbunch is specified. Examples -------- >>> G = nx.path_graph(3) >>> DV = G.degree() >>> assert(DV[2] == 1) >>> assert(G.degree[2] == 1) >>> assert(sum(deg for n, deg in DV) == 4) >>> DVweight = G.degree(weight="span") >>> G.add_edge(1, 2, span=34) >>> DVweight[2] 34 >>> DVweight[0] # default edge weight is 1 1 >>> sum(span for n, span in DVweight) # sum weighted degrees 70 >>> DVnbunch = G.degree(nbunch=(1, 2)) >>> assert(len(list(DVnbunch)) == 2) # iteration over nbunch only csv|j‰|j|}ˆdkr6t|ƒ||kSt‡fd†|jƒDƒƒ||kot||jˆdƒS(Nc3s!|]}|jˆdƒVqdS(iN(RV(RDRE(RU(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys µsi(RRRLR:R!RWRXRV(RR%tnbrs((RUsr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR&°s    c#sÆ|j‰ˆdkrTxª|jD].}|j|}|t|ƒ||kfVqWnnxk|jD]`}|j|}t‡fd†|jƒDƒƒ||ko¯||jˆdƒ}||fVq^WdS(Nc3s!|]}|jˆdƒVqdS(iN(RV(RDRE(RU(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys Ási(RRR:RRLR!RWRXRV(RR%R\R[((RUsr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR$¸s   " #(R3R6R7R&R$(((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR…s* cBs eZdZd„Zd„ZRS(sEA DegreeView class to report out_degree for a DiGraph; See DegreeViewcsOˆj}ˆj|}ˆjdkr/t|ƒSt‡fd†|jƒDƒƒS(Nc3s$|]}|jˆjdƒVqdS(iN(RVRR(RDRE(R(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys Ís(RRRLR:R!RWRX(RR%RUR\((Rsr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR&Ès    c#sœ|j‰ˆdkrJx€|jD]$}|j|}|t|ƒfVqWnNxK|jD]@}|j|}t‡fd†|jƒDƒƒ}||fVqTWdS(Nc3s!|]}|jˆdƒVqdS(iN(RV(RDRE(RU(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys Øs(RRR:RRLR!RWRX(RR%RYR[((RUsr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR$Ïs    "(R3R6R7R&R$(((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyRÆs cBs eZdZd„Zd„ZRS(sDA DegreeView class to report in_degree for a DiGraph; See DegreeViewcsL|j‰|j|}ˆdkr,t|ƒSt‡fd†|jƒDƒƒS(Nc3s!|]}|jˆdƒVqdS(iN(RV(RDRE(RU(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys ãs(RRRMR:R!RWRX(RR%R\((RUsr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR&Þs     c#sœ|j‰ˆdkrJx€|jD]$}|j|}|t|ƒfVqWnNxK|jD]@}|j|}t‡fd†|jƒDƒƒ}||fVqTWdS(Nc3s!|]}|jˆdƒVqdS(iN(RV(RDRE(RU(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys îs(RRR:RRMR!RWRX(RR%RZR[((RUsr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR$ås    "(R3R6R7R&R$(((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyRÜs cBs eZdZd„Zd„ZRS(s=A DegreeView class for undirected multigraphs; See DegreeViewcsµ|j‰|j|}ˆdkrVtd„|jƒDƒƒ||koTt||ƒSt‡fd†|jƒDƒƒ}||kr±|t‡fd†||jƒDƒƒ7}n|S(Ncss|]}t|ƒVqdS(N(R!(RDtkeys((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys øsc3s4|]*}|jƒD]}|jˆdƒVqqdS(iN(RXRV(RDtkey_dictRI(RU(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys ûsc3s!|]}|jˆdƒVqdS(iN(RV(RDRI(RU(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys þs(RRRLR:RWRXR!(RR%R\R[((RUsr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR&ôs   " -c#s|j‰ˆdkrzxé|jD]T}|j|}td„|jƒDƒƒ||kodt||ƒ}||fVqWn‡x„|jD]y}|j|}t‡fd†|jƒDƒƒ}||krò|t‡fd†||jƒDƒƒ7}n||fVq„WdS(Ncss|]}t|ƒVqdS(N(R!(RDR]((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys sc3s4|]*}|jƒD]}|jˆdƒVqqdS(iN(RXRV(RDR^RI(RU(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys sc3s!|]}|jˆdƒVqdS(iN(RV(RDRI(RU(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys s(RRR:RRLRWRXR!(RR%R\R[((RUsr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR$s    " -(R3R6R7R&R$(((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyRòs cBs eZdZd„Zd„ZRS(s3A DegreeView class for MultiDiGraph; See DegreeViewcs©|j‰|j|}|j|}ˆdkrctd„|jƒDƒƒtd„|jƒDƒƒSt‡fd†|jƒDƒƒt‡fd†|jƒDƒƒ}|S(Ncss|]}t|ƒVqdS(N(R!(RDR]((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys scss|]}t|ƒVqdS(N(R!(RDR]((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys sc3s4|]*}|jƒD]}|jˆdƒVqqdS(iN(RXRV(RDR^RI(RU(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys sc3s4|]*}|jƒD]}|jˆdƒVqqdS(iN(RXRV(RDR^RI(RU(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys s(RRRLRMR:RWRX(RR%RYRZR[((RUsr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR&s    #c#s|j‰ˆdkr‡xê|jD]a}|j|}|j|}td„|jƒDƒƒtd„|jƒDƒƒ}||fVqWn{xx|jD]m}|j|}|j|}t‡fd†|jƒDƒƒt‡fd†|jƒDƒƒ}||fVq‘WdS(Ncss|]}t|ƒVqdS(N(R!(RDR]((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys )scss|]}t|ƒVqdS(N(R!(RDR]((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys *sc3s4|]*}|jƒD]}|jˆdƒVqqdS(iN(RXRV(RDR^RI(RU(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys 0sc3s4|]*}|jƒD]}|jˆdƒVqqdS(iN(RXRV(RDR^RI(RU(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys 2s(RRR:RRLRMRWRX(RR%RYRZR[((RUsr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR$#s      #(R3R6R7R&R$(((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyRs cBs eZdZd„Zd„ZRS(sDA DegreeView class for inward degree of MultiDiGraph; See DegreeViewcs\|j‰|j|}ˆdkr<td„|jƒDƒƒSt‡fd†|jƒDƒƒS(Ncss|]}t|ƒVqdS(N(R!(RDR,((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys =sc3s4|]*}|jƒD]}|jˆdƒVqqdS(iN(RXRV(RDR^RI(RU(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys ?s(RRRMR:RWRX(RR%R\((RUsr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR&9s    c#s²|j‰ˆdkr`x–|jD]:}|j|}td„|jƒDƒƒ}||fVqWnNxK|jD]@}|j|}t‡fd†|jƒDƒƒ}||fVqjWdS(Ncss|]}t|ƒVqdS(N(R!(RDR,((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys Gsc3s4|]*}|jƒD]}|jˆdƒVqqdS(iN(RXRV(RDR^RI(RU(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys Ls(RRR:RRMRWRX(RR%R\R[((RUsr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR$Bs    "(R3R6R7R&R$(((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR7s cBs eZdZd„Zd„ZRS(sEA DegreeView class for outward degree of MultiDiGraph; See DegreeViewcs\|j‰|j|}ˆdkr<td„|jƒDƒƒSt‡fd†|jƒDƒƒS(Ncss|]}t|ƒVqdS(N(R!(RDR,((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys Wsc3s4|]*}|jƒD]}|jˆdƒVqqdS(iN(RXRV(RDR^RI(RU(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys Ys(RRRLR:RWRX(RR%R\((RUsr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR&Ss    c#s²|j‰ˆdkr`x–|jD]:}|j|}td„|jƒDƒƒ}||fVqWnNxK|jD]@}|j|}t‡fd†|jƒDƒƒ}||fVqjWdS(Ncss|]}t|ƒVqdS(N(R!(RDR,((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys asc3s4|]*}|jƒD]}|jˆdƒVqqdS(iN(RXRV(RDR^RI(RU(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys fs(RRR:RRLRWRX(RR%R\R[((RUsr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR$\s    "(R3R6R7R&R$(((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyRQs cBseeZdZdZd„Zd „Zdedd „Zd „Z d „Z d „Z d„Z d„Z RS(s;EdgeDataView for outward edges of DiGraph; See EdgeDataViewt_viewert_nbunchR<R=t_adjdictt _nodes_nbrst_reportcCs,i|jd6|jd6|jd6|jd6S(NtviewerRTR,R-(R_R`R<R=(R((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyRqs   cCs|j|dS(N(R (RR((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyRwscsÊ|ˆ_|jˆ_ˆdkr3ˆjjˆ_n-t|jjˆƒƒ‰‡‡fd†ˆ_ˆˆ_ˆˆ_ ˆˆ_ ˆt kr–d„ˆ_ n0ˆt kr±d„ˆ_ n‡‡fd†ˆ_ dS(Ncs$gˆD]}|ˆj|f^qS(N(Ra(R%(RTR(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pytscSs |||fS(N((R%tnbrRE((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyRe‡scSs ||fS(N((R%RfRE((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyRe‰scs*ˆ|kr|||ˆfS||ˆfS(N((R%RfRE(R,R-(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyRe‹s(R_RaR:RFRbR0RNRQR`R<R=R;RcR+(RRdRTR,R-((R,R-RTRsr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR zs        cCstd„|jƒDƒƒS(Ncss!|]\}}t|ƒVqdS(N(R!(RDR%R\((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys s(RWRb(R((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR"Žscs‡fd†ˆjƒDƒS(Nc3sC|]9\}}|jƒD] \}}ˆj|||ƒVqqdS(N(RFRc(RDR%R\RfRE(R(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys ’s (Rb(R((Rsr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR$‘scCsSy%|d \}}|j||}Wntk r9tSX||j|||ƒkS(Ni(RatKeyErrorR+Rc(RtetutvRJ((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR'•s  cCstt|ƒƒS(N(R/R0(R((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR1scCsd|jjt|ƒfS(Ns%s(%r)(R2R3R0(R((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR5 s(s_viewers_nbunchs_datas_defaults_adjdicts _nodes_nbrss_reportN(R3R6R7R8RRR:R+R R"R$R'R1R5(((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR ls      cBs/eZdZdZd„Zd„Zd„ZRS(sXA EdgeDataView class for edges of Graph This view is primarily used to iterate over the edges reporting edges as node-tuples with edge data optionally reported. The argument `nbunch` allows restriction to edges incident to nodes in that container/singleton. The default (nbunch=None) reports all edges. The arguments `data` and `default` control what edge data is reported. The default `data is False` reports only node-tuples for each edge. If `data is True` the entire edge data dict is returned. Otherwise `data` is assumed to hold the name of the edge attribute to report with default `default` if that edge attribute is not present. Parameters ---------- nbunch : container of nodes, node or None (default None) data : False, True or string (default False) default : default value (default None) Examples -------- >>> G = nx.path_graph(3) >>> G.add_edge(1, 2, foo='bar') >>> list(G.edges(data='foo', default='biz')) [(0, 1, 'biz'), (1, 2, 'bar')] >>> assert((0, 1, 'biz') in G.edges(data='foo', default='biz')) cCstd„|DƒƒS(Ncss|] }dVqdS(iN((RDRh((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys Ãs(RW(R((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR"Âsccsti}xd|jƒD]V\}}x=|jƒD]/\}}||kr,|j|||ƒVq,q,Wd||ßs (Rb(R((Rsr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR$ÞscCsSy%|d \}}|j||}Wntk r9tSX||j|||ƒkS(Ni(RaRgR+Rc(RRhRiRjRJ((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR'âs  ((R3R6R7R8R$R'(((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR Ús cBsVeZdZdZd„Zd„Zd eed d„Zd„Z d„Z d„Z RS( sCAn EdgeDataView for outward edges of MultiDiGraph; See EdgeDataViewR]cCs6i|jd6|jd6|jd6|jd6|jd6S(NRdRTR]R,R-(R_R`R]R<R=(R((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyRïs     cCs|j|dS(N(R (RR((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyRöscs-|ˆ_|jˆ_|ˆ_ˆdkr<ˆjjˆ_n-t|jjˆƒƒ‰‡‡fd†ˆ_ˆˆ_ ˆˆ_ ˆˆ_ ˆt krº|t kr«d„ˆ_ q)d„ˆ_ noˆtkrð|t krád„ˆ_ q)d„ˆ_ n9|t kr‡‡fd†ˆ_ n‡‡fd†ˆ_ dS(Ncs$gˆD]}|ˆj|f^qS(N(Ra(R%(RTR(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyRescSs||||fS(N((R%RftkRE((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyRe scSs |||fS(N((R%RfRlRE((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyRe scSs |||fS(N((R%RfRlRE((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyRescSs ||fS(N((R%RfRlRE((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyRescs0ˆ|kr ||||ˆfS|||ˆfS(N((R%RfRlRE(R,R-(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyRescs*ˆ|kr|||ˆfS||ˆfS(N((R%RfRlRE(R,R-(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyRes(R_RaR]R:RFRbR0RNRQR`R<R=R;RcR+(RRdRTR,R]R-((R,R-RTRsr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR ùs*            cCstd„|jƒDƒƒS(Ncss:|]0\}}|jƒD]\}}t|ƒVqqdS(N(RFR!(RDR%R\Rftkd((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys s (RWRb(R((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR"scs‡fd†ˆjƒDƒS(Nc3s_|]U\}}|jƒD]<\}}|jƒD]#\}}ˆj||||ƒVq/qqdS(N(RFRc(RDR%R\RfRmRlRE(R(sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys s (Rb(R((Rsr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR$scCsÕ|d \}}y|j||}Wntk r9tSX|jtkr’|d}y||}Wntk rutSX||j||||ƒkSx<|jƒD].\}}||j||||ƒkrŸtSqŸWtS(Ni(RaRgR+R]R;RcRF(RRhRiRjtkdictRlRE((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR'!s    (skeysN( R3R6R7R8RRR:R+R R"R$R'(((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyRës    cBs/eZdZdZd„Zd„Zd„ZRS(s?An EdgeDataView class for edges of MultiGraph; See EdgeDataViewcCstd„|DƒƒS(Ncss|] }dVqdS(iN((RDRh((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys :s(RW(R((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR"8sccs”i}x„|jƒD]v\}}x]|jƒD]O\}}||kr,x4|jƒD]#\}}|j||||ƒVqQWq,q,Wd||as (Rb(R((Rsr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR$`scCs¼|d \}}y|j||}Wntk r9tSX|jtkry|d}||}||j||||ƒkSx<|jƒD].\}}||j||||ƒkr†tSq†WtS(Ni(RaRgR+R]R;RcRF(RRhRiRjRnRlRE((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR'ds   ((R3R6R7R8R$R'(((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR\s cBsžeZdZdZd„Zd„Zed„ƒZeZ d„Z d„Z d „Z d „Z d „Zdedd „Zeddd „Zd„Zd„ZRS(s/A EdgeView class for outward edges of a DiGraphRaRNRbcCsi|jd6S(NRN(RN(R((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyRyscCsH|d|_}t|dƒr)|jn|j|_|jj|_dS(NRNtsucc(RNRORLRPRaRFRb(RRRS((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR|s$cCs t|ƒS(N(R((RR)((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR*scCs@||_t|dƒr!|jn|j|_|jj|_dS(NRo(RNRORLRPRaRFRb(RRS((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR ‡s $cCstd„|jƒDƒƒS(Ncss!|]\}}t|ƒVqdS(N(R!(RDR%R\((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys Žs(RWRb(R((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR"sccs=x6|jƒD](\}}x|D]}||fVq Wq WdS(N(Rb(RR%R\Rf((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR$s cCs:y!|\}}||j|kSWntk r5tSXdS(N(RaRgR+(RRhRiRj((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR'•s   cCs|\}}|j||S(N(Ra(RRhRiRj((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR&s cCs2|dkr|tkr|S|j||||ƒS(N(R:R+tdataview(RRTR,R-((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR.¢scCs2|dkr|tkr|S|j||||ƒS(N(R:R+Rp(RR,R-RT((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR,§scCstt|ƒƒS(N(R/R0(R((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR1­scCsdj|t|ƒƒS(Ns{0.__class__.__name__}({1!r})(tformatR0(R((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR5°s(s_adjdicts_graphs _nodes_nbrsN(R3R6R7R8RRR9R*R RpR R"R$R'R&R:R+R.R;R,R1R5(((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyRus        cBs5eZdZdZeZd„Zd„Zd„ZRS(sµ A EdgeView class for edges of a Graph This densely packed View allows iteration over edges, data lookup like a dict and set operations on edges represented by node-tuples. In addition, edge data can be controlled by calling this object possibly creating an EdgeDataView. Typically edges are iterated over and reported as `(u, v)` node tuples or `(u, v, key)` node/key tuples for multigraphs. Those edge representations can also be using to lookup the data dict for any edge. Set operations also are available where those tuples are the elements of the set. Calling this object with optional arguments `data`, `default` and `keys` controls the form of the tuple (see EdgeDataView). Optional argument `nbunch` allows restriction to edges only involving certain nodes. If `data is False` (the default) then iterate over 2-tuples `(u, v)`. If `data is True` iterate over 3-tuples `(u, v, datadict)`. Otherwise iterate over `(u, v, datadict.get(data, default))`. For Multigraphs, if `keys is True`, replace `u, v` with `u, v, key` above. Parameters ========== graph : NetworkX graph-like class nbunch : (default= all nodes in graph) only report edges with these nodes keys : (only for MultiGraph. default=False) report edge key in tuple data : bool or string (default=False) see above default : object (default=None) Examples ======== >>> G = nx.path_graph(4) >>> EV = G.edges() >>> (2, 3) in EV True >>> for u, v in EV: print((u, v)) (0, 1) (1, 2) (2, 3) >>> assert(EV & {(1, 2), (3, 4)} == {(1, 2)}) >>> EVdata = G.edges(data='color', default='aqua') >>> G.add_edge(2, 3, color='blue') >>> assert((2, 3, 'blue') in EVdata) >>> for u, v, c in EVdata: print("({}, {}) has color: {}".format(u, v, c)) (0, 1) has color: aqua (1, 2) has color: aqua (2, 3) has color: blue >>> EVnbunch = G.edges(nbunch=2) >>> assert((2, 3) in EVnbunch) >>> assert((0, 1) in EVnbunch) # nbunch is ignored in __contains__ >>> for u, v in EVnbunch: assert(u == 2 or v == 2) >>> MG = nx.path_graph(4, create_using=nx.MultiGraph()) >>> EVmulti = MG.edges(keys=True) >>> (2, 3, 0) in EVmulti True >>> (2, 3) in EVmulti # 2-tuples work even when keys is True True >>> key = MG.add_edge(2, 3) >>> for u, v, k in EVmulti: print((u, v, k)) (0, 1, 0) (1, 2, 0) (2, 3, 0) (2, 3, 1) cCstd„|jƒDƒƒdS(Ncss!|]\}}t|ƒVqdS(N(R!(RDR%R\((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys ûsi(RWRb(R((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR"úsccs_i}xO|jƒD]A\}}x(|D] }||kr&||fVq&q&Wd||6s (RWRb(R((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR"5sccs]xV|jƒD]H\}}x9|jƒD]+\}}x|D]}|||fVq9Wq&Wq WdS(N(RbRF(RR%R\RfRntkey((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR$9s cCs‰t|ƒ}|dkr*|\}}}n-|dkrK|\}}d}n tdƒ‚y||j||kSWntk r„tSXdS(Niiis!MultiEdge must have length 2 or 3(R!RGRaRgR+(RRhtNRiRjRl((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR'?s       cCs"|\}}}|j|||S(N(Ra(RRhRiRjRl((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR&MscCsA|dkr(|tkr(|tkr(|S|j|||||ƒS(N(R:R+R;Rp(RRTR,R]R-((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR.Qs$cCsA|dkr(|tkr(|tkr(|S|j|||||ƒS(N(R:R+R;Rp(RR,R]R-RT((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR,Vs$(N(R3R6R7R8RRpR"R$R'R&R:R+R.R;R,(((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR /s    cBs,eZdZdZeZd„Zd„ZRS(s*A EdgeView class for edges of a MultiGraphcCstd„|jƒDƒƒdS(Ncss:|]0\}}|jƒD]\}}t|ƒVqqdS(N(RFR!(RDR%R\RfRn((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pys cs i(RWRb(R((sr/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/classes/reportviews.pyR"bsccs‹i}x{|jƒD]m\}}xT|jƒD]F\}}||kr,x+|jƒD]\}}|||fVqQWq,q,Wd||^s@       aZ]A!$86I(?Z!-