ó
 ,µ[c           @   sd  d  Z  d d l m Z m Z m Z d d l Z d d d d d d	 d
 d d d d d d d d d d d d d d d g Z d e e f d „  ƒ  YZ d e f d „  ƒ  YZ	 d e
 f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d  „  ƒ  YZ d e f d! „  ƒ  YZ d e f d" „  ƒ  YZ d e f d# „  ƒ  YZ d
 e
 f d$ „  ƒ  YZ d	 e f d% „  ƒ  YZ d e f d& „  ƒ  YZ d e f d' „  ƒ  YZ d e f d( „  ƒ  YZ d e f d) „  ƒ  YZ d e e f d* „  ƒ  YZ d e f d+ „  ƒ  YZ d e f d, „  ƒ  YZ d e f d- „  ƒ  YZ d e f d. „  ƒ  YZ d e f d/ „  ƒ  YZ d S(0   s´  
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ÿÿÿÿ(   t   Mappingt   Sett   IterableNt   NodeViewt   NodeDataViewt   EdgeViewt   OutEdgeViewt
   InEdgeViewt   EdgeDataViewt   OutEdgeDataViewt   InEdgeDataViewt   MultiEdgeViewt   OutMultiEdgeViewt   InMultiEdgeViewt   MultiEdgeDataViewt   OutMultiEdgeDataViewt   InMultiEdgeDataViewt
   DegreeViewt   DiDegreeViewt   InDegreeViewt   OutDegreeViewt   MultiDegreeViewt   DiMultiDegreeViewt   InMultiDegreeViewt   OutMultiDegreeViewc           B   s’   e  Z d  Z d Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 e d	 „  ƒ Z e d d
 „ Z e d d „ Z d „  Z d „  Z RS(   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   _nodesc         C   s   i |  j  d 6S(   NR   (   R   (   t   self(    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyt   __getstate__¡   s    c         C   s   | d |  _  d  S(   NR   (   R   (   R   t   state(    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyt   __setstate__¤   s    c         C   s   | j  |  _ d  S(   N(   t   _nodeR   (   R   t   graph(    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyt   __init__§   s    c         C   s   t  |  j ƒ S(   N(   t   lenR   (   R   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyt   __len__«   s    c         C   s   t  |  j ƒ S(   N(   t   iterR   (   R   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyt   __iter__®   s    c         C   s   |  j  | S(   N(   R   (   R   t   n(    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyt   __getitem__±   s    c         C   s   | |  j  k S(   N(   R   (   R   R%   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyt   __contains__µ   s    c         C   s
   t  | ƒ S(   N(   t   set(   t   clst   it(    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyt   _from_iterable¸   s    c         C   s#   | t  k r |  St |  j | | ƒ S(   N(   t   FalseR   R   (   R   t   datat   default(    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyt   __call__½   s    c         C   s#   | t  k r |  St |  j | | ƒ S(   N(   R,   R   R   (   R   R-   R.   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR-   Â   s    c         C   s   t  t |  ƒ ƒ S(   N(   t   strt   list(   R   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyt   __str__Ç   s    c         C   s   d |  j  j t |  ƒ f S(   Ns   %s(%r)(   t	   __class__t   __name__t   tuple(   R   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyt   __repr__Ê   s    (   R   N(   R4   t
   __module__t   __doc__t	   __slots__R   R   R    R"   R$   R&   R'   t   classmethodR+   R,   t   NoneR/   t   TrueR-   R2   R6   (    (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR   m   s   1								c           B   sz   e  Z d  Z d Z d „  Z d „  Z e d d „ Z e	 d „  ƒ Z
 d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z RS(   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)
    R   t   _datat   _defaultc         C   s"   i |  j  d 6|  j d 6|  j d 6S(   NR   R=   R>   (   R   R=   R>   (   R   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR   á   s    
c         C   s+   | d |  _  | d |  _ | d |  _ d  S(   NR   R=   R>   (   R   R=   R>   (   R   R   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR   æ   s    c         C   s   | |  _  | |  _ | |  _ d  S(   N(   R   R=   R>   (   R   t   nodedictR-   R.   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR    ë   s    		c         C   s\   y t  | ƒ SWnG t k
 rW } d t | ƒ k rQ d } t t | ƒ | ƒ ‚ n  ‚  n Xd  S(   Nt
   unhashables7    : Could be b/c data=True or your values are unhashable(   R(   t	   TypeErrorR0   (   R)   R*   t   errt   msg(    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR+   ð   s    c         C   s   t  |  j ƒ S(   N(   R!   R   (   R   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR"   ú   s    c            sa   ˆ j  ‰  ˆ  t k r" t ˆ j ƒ Sˆ  t k rA t ˆ j j ƒ  ƒ S‡  ‡ f d †  ˆ j j ƒ  Dƒ S(   Nc         3   s:   |  ]0 \ } } | ˆ  | k r( | ˆ  n ˆ j  f Vq d  S(   N(   R>   (   t   .0R%   t   dd(   R-   R   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>  s   (   R=   R,   R#   R   R<   t   items(   R   (    (   R-   R   s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR$   ý   s    	c         C   s¥   y | |  j  k } Wn7 t k
 rL | \ } } | |  j  k oK |  | | k SX| t k r] | Sy | \ } } Wn t t f k
 r‡ t SX| |  j  k o¤ |  | | k S(   N(   R   RA   R<   t
   ValueErrorR,   (   R   R%   t   node_int   d(    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR'     s    c         C   sM   |  j  | } |  j } | t k s. | t k r2 | S| | k rF | | S|  j S(   N(   R   R=   R,   R<   R>   (   R   R%   t   ddictR-   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR&     s
    	c         C   s   t  t |  ƒ ƒ S(   N(   R0   R1   (   R   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR2     s    c         C   sr   |  j  t k r) d |  j j t |  ƒ f S|  j  t k rR d |  j j t |  ƒ f Sd |  j j t |  ƒ |  j  f S(   Ns   %s(%r)s   %s(%r, data=%r)(   R=   R,   R3   R4   R5   R<   t   dict(   R   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR6     s    (   R   R=   R>   N(   R4   R7   R8   R9   R   R   R,   R;   R    R:   R+   R"   R$   R'   R&   R2   R6   (    (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR   Î   s   		
						c           B   sY   e  Z d  Z d d d „ Z d d d „ Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 RS(	   sX  A 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
    c         C   s‹   | |  _  t | d ƒ r! | j n | j |  _ t | d ƒ rE | j n | j |  _ | d  k rf |  j n t | j | ƒ ƒ |  _ | |  _	 d  S(   Nt   _succt   _pred(
   t   _grapht   hasattrRL   t   _adjRM   R;   R1   t   nbunch_iterR   t   _weight(   R   t   Gt   nbuncht   weight(    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR    N  s    	$$c         C   s£   | d  k r5 | |  j k r |  S|  j |  j d  | ƒ SyD | |  j k rx | |  j k r^ |  | S|  j |  j d  | ƒ | SWn t k
 rŒ n X|  j |  j | | ƒ S(   N(   R;   RR   R3   RN   R   RA   (   R   RT   RU   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR/   V  s    c            sƒ   |  j  ‰  |  j | } |  j | } ˆ  d  k rC t | ƒ t | ƒ St ‡  f d †  | j ƒ  Dƒ ƒ t ‡  f d †  | j ƒ  Dƒ ƒ S(   Nc         3   s!   |  ] } | j  ˆ  d  ƒ Vq d S(   i   N(   t   get(   RD   RE   (   RU   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>j  s    c         3   s!   |  ] } | j  ˆ  d  ƒ Vq d S(   i   N(   RV   (   RD   RE   (   RU   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>k  s    (   RR   RL   RM   R;   R!   t   sumt   values(   R   R%   t   succst   preds(    (   RU   s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR&   d  s    	c         #   sà   |  j  ‰  ˆ  d  k ra xÄ |  j D]; } |  j | } |  j | } | t | ƒ t | ƒ f Vq Wn{ xx |  j D]m } |  j | } |  j | } t ‡  f d †  | j ƒ  Dƒ ƒ t ‡  f d †  | j ƒ  Dƒ ƒ } | | f Vqk Wd  S(   Nc         3   s!   |  ] } | j  ˆ  d  ƒ Vq d S(   i   N(   RV   (   RD   RE   (   RU   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>x  s    c         3   s!   |  ] } | j  ˆ  d  ƒ Vq d S(   i   N(   RV   (   RD   RE   (   RU   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>y  s    (   RR   R;   R   RL   RM   R!   RW   RX   (   R   R%   RY   RZ   t   deg(    (   RU   s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR$   m  s    	"#c         C   s   t  |  j ƒ S(   N(   R!   R   (   R   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR"   |  s    c         C   s   t  t |  ƒ ƒ S(   N(   R0   R1   (   R   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR2     s    c         C   s   d |  j  j t |  ƒ f S(   Ns   %s(%r)(   R3   R4   RK   (   R   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR6   ‚  s    N(   R4   R7   R8   R;   R    R/   R&   R$   R"   R2   R6   (    (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR   (  s   $					c           B   s    e  Z d  Z d „  Z d „  Z RS(   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
    c            sv   |  j  ‰  |  j | } ˆ  d  k r6 t | ƒ | | k St ‡  f d †  | j ƒ  Dƒ ƒ | | k ot | | j ˆ  d ƒ S(   Nc         3   s!   |  ] } | j  ˆ  d  ƒ Vq d S(   i   N(   RV   (   RD   RE   (   RU   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>·  s    i   (   RR   RL   R;   R!   RW   RX   RV   (   R   R%   t   nbrs(    (   RU   s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR&   ²  s    	c         #   sÆ   |  j  ‰  ˆ  d  k rT xª |  j D]. } |  j | } | t | ƒ | | k f Vq Wnn xk |  j D]` } |  j | } t ‡  f d †  | j ƒ  Dƒ ƒ | | k o¯ | | j ˆ  d ƒ } | | f Vq^ Wd  S(   Nc         3   s!   |  ] } | j  ˆ  d  ƒ Vq d S(   i   N(   RV   (   RD   RE   (   RU   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>Ã  s    i   (   RR   R;   R   RL   R!   RW   RX   RV   (   R   R%   R\   R[   (    (   RU   s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR$   º  s    	"#(   R4   R7   R8   R&   R$   (    (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR   †  s   *	c           B   s    e  Z d  Z d „  Z d „  Z RS(   sE   A DegreeView class to report out_degree for a DiGraph; See DegreeViewc            sO   ˆ  j  } ˆ  j | } ˆ  j  d  k r/ t | ƒ St ‡  f d †  | j ƒ  Dƒ ƒ S(   Nc         3   s$   |  ] } | j  ˆ  j d  ƒ Vq d S(   i   N(   RV   RR   (   RD   RE   (   R   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>Ð  s    (   RR   RL   R;   R!   RW   RX   (   R   R%   RU   R\   (    (   R   s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR&   Ë  s
    	
c         #   sœ   |  j  ‰  ˆ  d  k rJ x€ |  j D]$ } |  j | } | t | ƒ f Vq WnN xK |  j D]@ } |  j | } t ‡  f d †  | j ƒ  Dƒ ƒ } | | f VqT Wd  S(   Nc         3   s!   |  ] } | j  ˆ  d  ƒ Vq d S(   i   N(   RV   (   RD   RE   (   RU   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>Û  s    (   RR   R;   R   RL   R!   RW   RX   (   R   R%   RY   R[   (    (   RU   s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR$   Ò  s    	"(   R4   R7   R8   R&   R$   (    (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR   È  s   	c           B   s    e  Z d  Z d „  Z d „  Z RS(   sD   A DegreeView class to report in_degree for a DiGraph; See DegreeViewc            sL   |  j  ‰  |  j | } ˆ  d  k r, t | ƒ St ‡  f d †  | j ƒ  Dƒ ƒ S(   Nc         3   s!   |  ] } | j  ˆ  d  ƒ Vq d S(   i   N(   RV   (   RD   RE   (   RU   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>ç  s    (   RR   RM   R;   R!   RW   RX   (   R   R%   R\   (    (   RU   s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR&   â  s
    	
c         #   sœ   |  j  ‰  ˆ  d  k rJ x€ |  j D]$ } |  j | } | t | ƒ f Vq WnN xK |  j D]@ } |  j | } t ‡  f d †  | j ƒ  Dƒ ƒ } | | f VqT Wd  S(   Nc         3   s!   |  ] } | j  ˆ  d  ƒ Vq d S(   i   N(   RV   (   RD   RE   (   RU   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>ò  s    (   RR   R;   R   RM   R!   RW   RX   (   R   R%   RZ   R[   (    (   RU   s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR$   é  s    	"(   R4   R7   R8   R&   R$   (    (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR   ß  s   	c           B   s    e  Z d  Z d „  Z d „  Z RS(   s=   A DegreeView class for undirected multigraphs; See DegreeViewc            sµ   |  j  ‰  |  j | } ˆ  d  k rV t d „  | j ƒ  Dƒ ƒ | | k oT t | | ƒ St ‡  f d †  | j ƒ  Dƒ ƒ } | | k r± | t ‡  f d †  | | j ƒ  Dƒ ƒ 7} n  | S(   Nc         s   s   |  ] } t  | ƒ Vq d  S(   N(   R!   (   RD   t   keys(    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>ý  s    c         3   s4   |  ]* } | j  ƒ  D] } | j ˆ  d  ƒ Vq q d S(   i   N(   RX   RV   (   RD   t   key_dictRI   (   RU   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>   s    c         3   s!   |  ] } | j  ˆ  d  ƒ Vq d S(   i   N(   RV   (   RD   RI   (   RU   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>  s    (   RR   RL   R;   RW   RX   R!   (   R   R%   R\   R[   (    (   RU   s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR&   ù  s    	"-c         #   s  |  j  ‰  ˆ  d  k rz xé |  j D]T } |  j | } t d „  | j ƒ  Dƒ ƒ | | k od t | | ƒ } | | f Vq Wn‡ x„ |  j D]y } |  j | } t ‡  f d †  | j ƒ  Dƒ ƒ } | | k rò | t ‡  f d †  | | j ƒ  Dƒ ƒ 7} n  | | f Vq„ Wd  S(   Nc         s   s   |  ] } t  | ƒ Vq d  S(   N(   R!   (   RD   R]   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>  s    c         3   s4   |  ]* } | j  ƒ  D] } | j ˆ  d  ƒ Vq q d S(   i   N(   RX   RV   (   RD   R^   RI   (   RU   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>  s    c         3   s!   |  ] } | j  ˆ  d  ƒ Vq d S(   i   N(   RV   (   RD   RI   (   RU   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>  s    (   RR   R;   R   RL   RW   RX   R!   (   R   R%   R\   R[   (    (   RU   s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR$     s    	"-(   R4   R7   R8   R&   R$   (    (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR   ö  s   	c           B   s    e  Z d  Z d „  Z d „  Z RS(   s3   A DegreeView class for MultiDiGraph; See DegreeViewc            s©   |  j  ‰  |  j | } |  j | } ˆ  d  k rc t d „  | j ƒ  Dƒ ƒ t d „  | j ƒ  Dƒ ƒ St ‡  f d †  | j ƒ  Dƒ ƒ t ‡  f d †  | j ƒ  Dƒ ƒ } | S(   Nc         s   s   |  ] } t  | ƒ Vq d  S(   N(   R!   (   RD   R]   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>   s    c         s   s   |  ] } t  | ƒ Vq d  S(   N(   R!   (   RD   R]   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>!  s    c         3   s4   |  ]* } | j  ƒ  D] } | j ˆ  d  ƒ Vq q d S(   i   N(   RX   RV   (   RD   R^   RI   (   RU   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>#  s    c         3   s4   |  ]* } | j  ƒ  D] } | j ˆ  d  ƒ Vq q d S(   i   N(   RX   RV   (   RD   R^   RI   (   RU   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>%  s    (   RR   RL   RM   R;   RW   RX   (   R   R%   RY   RZ   R[   (    (   RU   s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR&     s    	#c         #   s  |  j  ‰  ˆ  d  k r‡ xê |  j D]a } |  j | } |  j | } t d „  | j ƒ  Dƒ ƒ t d „  | j ƒ  Dƒ ƒ } | | f Vq Wn{ xx |  j D]m } |  j | } |  j | } t ‡  f d †  | j ƒ  Dƒ ƒ t ‡  f d †  | j ƒ  Dƒ ƒ } | | f Vq‘ Wd  S(   Nc         s   s   |  ] } t  | ƒ Vq d  S(   N(   R!   (   RD   R]   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>/  s    c         s   s   |  ] } t  | ƒ Vq d  S(   N(   R!   (   RD   R]   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>0  s    c         3   s4   |  ]* } | j  ƒ  D] } | j ˆ  d  ƒ Vq q d S(   i   N(   RX   RV   (   RD   R^   RI   (   RU   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>6  s    c         3   s4   |  ]* } | j  ƒ  D] } | j ˆ  d  ƒ Vq q d S(   i   N(   RX   RV   (   RD   R^   RI   (   RU   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>8  s    (   RR   R;   R   RL   RM   RW   RX   (   R   R%   RY   RZ   R[   (    (   RU   s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR$   )  s    	#(   R4   R7   R8   R&   R$   (    (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR     s   	c           B   s    e  Z d  Z d „  Z d „  Z RS(   sD   A DegreeView class for inward degree of MultiDiGraph; See DegreeViewc            s\   |  j  ‰  |  j | } ˆ  d  k r< t d „  | j ƒ  Dƒ ƒ St ‡  f d †  | j ƒ  Dƒ ƒ S(   Nc         s   s   |  ] } t  | ƒ Vq d  S(   N(   R!   (   RD   R-   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>D  s    c         3   s4   |  ]* } | j  ƒ  D] } | j ˆ  d  ƒ Vq q d S(   i   N(   RX   RV   (   RD   R^   RI   (   RU   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>F  s    (   RR   RM   R;   RW   RX   (   R   R%   R\   (    (   RU   s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR&   @  s
    	c         #   s²   |  j  ‰  ˆ  d  k r` x– |  j D]: } |  j | } t d „  | j ƒ  Dƒ ƒ } | | f Vq WnN xK |  j D]@ } |  j | } t ‡  f d †  | j ƒ  Dƒ ƒ } | | f Vqj Wd  S(   Nc         s   s   |  ] } t  | ƒ Vq d  S(   N(   R!   (   RD   R-   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>N  s    c         3   s4   |  ]* } | j  ƒ  D] } | j ˆ  d  ƒ Vq q d S(   i   N(   RX   RV   (   RD   R^   RI   (   RU   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>S  s    (   RR   R;   R   RM   RW   RX   (   R   R%   R\   R[   (    (   RU   s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR$   I  s    	"(   R4   R7   R8   R&   R$   (    (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR   =  s   		c           B   s    e  Z d  Z d „  Z d „  Z RS(   sE   A DegreeView class for outward degree of MultiDiGraph; See DegreeViewc            s\   |  j  ‰  |  j | } ˆ  d  k r< t d „  | j ƒ  Dƒ ƒ St ‡  f d †  | j ƒ  Dƒ ƒ S(   Nc         s   s   |  ] } t  | ƒ Vq d  S(   N(   R!   (   RD   R-   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>_  s    c         3   s4   |  ]* } | j  ƒ  D] } | j ˆ  d  ƒ Vq q d S(   i   N(   RX   RV   (   RD   R^   RI   (   RU   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>a  s    (   RR   RL   R;   RW   RX   (   R   R%   R\   (    (   RU   s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR&   [  s
    	c         #   s²   |  j  ‰  ˆ  d  k r` x– |  j D]: } |  j | } t d „  | j ƒ  Dƒ ƒ } | | f Vq WnN xK |  j D]@ } |  j | } t ‡  f d †  | j ƒ  Dƒ ƒ } | | f Vqj Wd  S(   Nc         s   s   |  ] } t  | ƒ Vq d  S(   N(   R!   (   RD   R-   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>i  s    c         3   s4   |  ]* } | j  ƒ  D] } | j ˆ  d  ƒ Vq q d S(   i   N(   RX   RV   (   RD   R^   RI   (   RU   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>n  s    (   RR   R;   R   RL   RW   RX   (   R   R%   R\   R[   (    (   RU   s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR$   d  s    	"(   R4   R7   R8   R&   R$   (    (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR   X  s   		c           B   se   e  Z d  Z d Z d „  Z d	 „  Z d e d d
 „ Z d „  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   _reportc         C   s,   i |  j  d 6|  j d 6|  j d 6|  j d 6S(   Nt   viewerRT   R-   R.   (   R_   R`   R=   R>   (   R   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR   y  s    

c         C   s   |  j  |   d  S(   N(   R    (   R   R   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR     s    c            sÊ   | ˆ _  | j ˆ _ ˆ d  k r3 ˆ j j ˆ _ n- t | j j ˆ ƒ ƒ ‰ ‡ ‡ f d †  ˆ _ ˆ ˆ _ ˆ  ˆ _	 ˆ ˆ _
 ˆ  t k r– d „  ˆ _ n0 ˆ  t k r± d „  ˆ _ n ‡  ‡ f d †  ˆ _ d  S(   Nc             s$   g  ˆ  D] }  |  ˆ j  |  f ^ q S(   N(   Ra   (   R%   (   RT   R   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyt   <lambda>‰  s    c         S   s   |  | | f S(   N(    (   R%   t   nbrRE   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyRe     s    c         S   s
   |  | f S(   N(    (   R%   Rf   RE   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyRe   ‘  s    c            s*   ˆ  | k r |  | | ˆ  f S|  | ˆ f S(   N(    (   R%   Rf   RE   (   R-   R.   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyRe   “  s    (   R_   Ra   R;   RF   Rb   R1   RN   RQ   R`   R=   R>   R<   Rc   R,   (   R   Rd   RT   R-   R.   (    (   R-   R.   RT   R   s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR    ‚  s    				c         C   s   t  d „  |  j ƒ  Dƒ ƒ S(   Nc         s   s!   |  ] \ } } t  | ƒ Vq d  S(   N(   R!   (   RD   R%   R\   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>—  s    (   RW   Rb   (   R   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR"   –  s    c            s   ‡  f d †  ˆ  j  ƒ  Dƒ S(   Nc         3   sC   |  ]9 \ } } | j  ƒ  D]  \ } } ˆ  j | | | ƒ Vq q d  S(   N(   RF   Rc   (   RD   R%   R\   Rf   RE   (   R   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>š  s    	(   Rb   (   R   (    (   R   s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR$   ™  s    c         C   sS   y% | d  \ } } |  j  | | } Wn t k
 r9 t SX| |  j | | | ƒ k S(   Ni   (   Ra   t   KeyErrorR,   Rc   (   R   t   et   ut   vRJ   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR'     s    c         C   s   t  t |  ƒ ƒ S(   N(   R0   R1   (   R   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR2   ¥  s    c         C   s   d |  j  j t |  ƒ f S(   Ns   %s(%r)(   R3   R4   R1   (   R   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR6   ¨  s    (   R_   R`   R=   R>   Ra   Rb   Rc   N(   R4   R7   R8   R9   R   R   R;   R,   R    R"   R$   R'   R2   R6   (    (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR	   t  s    						c           B   s/   e  Z d  Z d Z d „  Z d „  Z d „  Z RS(   sX  A 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'))
    c         C   s   t  d „  |  Dƒ ƒ S(   Nc         s   s   |  ] } d  Vq d S(   i   N(    (   RD   Rh   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>Ë  s    (   RW   (   R   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR"   Ê  s    c         c   st   i  } xd |  j  ƒ  D]V \ } } x= | j ƒ  D]/ \ } } | | k r, |  j | | | ƒ Vq, q, Wd | | <q W~ d  S(   Ni   (   Rb   RF   Rc   (   R   t   seenR%   R\   Rf   RE   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR$   Í  s    c         C   s|   y% | d  \ } } |  j  | | } Wn; t k
 rb y |  j  | | } Wqc t k
 r^ t SXn X| |  j | | | ƒ k S(   Ni   (   Ra   Rg   R,   Rc   (   R   Rh   Ri   Rj   RJ   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR'   Ö  s    	(    (   R4   R7   R8   R9   R"   R$   R'   (    (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR   ¬  s
   			c           B   s&   e  Z d  Z d Z d „  Z d „  Z RS(   sD   An EdgeDataView class for outward edges of DiGraph; See EdgeDataViewc            s   ‡  f d †  ˆ  j  ƒ  Dƒ S(   Nc         3   sC   |  ]9 \ } } | j  ƒ  D]  \ } } ˆ  j | | | ƒ Vq q d  S(   N(   RF   Rc   (   RD   R%   R\   Rf   RE   (   R   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>ç  s    	(   Rb   (   R   (    (   R   s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR$   æ  s    c         C   sS   y% | d  \ } } |  j  | | } Wn t k
 r9 t SX| |  j | | | ƒ k S(   Ni   (   Ra   Rg   R,   Rc   (   R   Rh   Ri   Rj   RJ   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR'   ê  s    (    (   R4   R7   R8   R9   R$   R'   (    (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR
   â  s   	c           B   sV   e  Z d  Z d Z d „  Z d „  Z d	 e e d	 d „ Z d „  Z	 d „  Z
 d „  Z RS(
   sC   An EdgeDataView for outward edges of MultiDiGraph; See EdgeDataViewR]   c         C   s6   i |  j  d 6|  j d 6|  j d 6|  j d 6|  j d 6S(   NRd   RT   R]   R-   R.   (   R_   R`   R]   R=   R>   (   R   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR   ÷  s
    


c         C   s   |  j  |   d  S(   N(   R    (   R   R   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR   þ  s    c            s-  | ˆ _  | j ˆ _ | ˆ _ ˆ d  k r< ˆ j j ˆ _ n- t | j j ˆ ƒ ƒ ‰ ‡ ‡ f d †  ˆ _ ˆ ˆ _	 ˆ  ˆ _
 ˆ ˆ _ ˆ  t k rº | t k r« d „  ˆ _ q)d „  ˆ _ no ˆ  t k rð | t k rá d „  ˆ _ q)d „  ˆ _ n9 | t k r‡  ‡ f d †  ˆ _ n ‡  ‡ f d †  ˆ _ d  S(   Nc             s$   g  ˆ  D] }  |  ˆ j  |  f ^ q S(   N(   Ra   (   R%   (   RT   R   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyRe   
  s    c         S   s   |  | | | f S(   N(    (   R%   Rf   t   kRE   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyRe     s    c         S   s   |  | | f S(   N(    (   R%   Rf   Rl   RE   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyRe     s    c         S   s   |  | | f S(   N(    (   R%   Rf   Rl   RE   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyRe     s    c         S   s
   |  | f S(   N(    (   R%   Rf   Rl   RE   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyRe     s    c            s0   ˆ  | k r  |  | | | ˆ  f S|  | | ˆ f S(   N(    (   R%   Rf   Rl   RE   (   R-   R.   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyRe     s    c            s*   ˆ  | k r |  | | ˆ  f S|  | ˆ f S(   N(    (   R%   Rf   Rl   RE   (   R-   R.   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyRe     s    (   R_   Ra   R]   R;   RF   Rb   R1   RN   RQ   R`   R=   R>   R<   Rc   R,   (   R   Rd   RT   R-   R]   R.   (    (   R-   R.   RT   R   s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR      s*    					c         C   s   t  d „  |  Dƒ ƒ S(   Nc         s   s   |  ] } d  Vq d S(   i   N(    (   RD   Rh   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>"  s    (   RW   (   R   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR"   !  s    c            s   ‡  f d †  ˆ  j  ƒ  Dƒ S(   Nc         3   s_   |  ]U \ } } | j  ƒ  D]< \ } } | j  ƒ  D]# \ } } ˆ  j | | | | ƒ Vq/ q q d  S(   N(   RF   Rc   (   RD   R%   R\   Rf   t   kdRl   RE   (   R   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>%  s    	(   Rb   (   R   (    (   R   s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR$   $  s    c         C   sÕ   | d  \ } } y |  j  | | } Wn t k
 r9 t SX|  j t k r’ | d } y | | } Wn t k
 ru t SX| |  j | | | | ƒ k Sx< | j ƒ  D]. \ } } | |  j | | | | ƒ k rŸ t SqŸ Wt S(   Ni   (   Ra   Rg   R,   R]   R<   Rc   RF   (   R   Rh   Ri   Rj   t   kdictRl   RE   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR'   (  s     
(   R]   N(   R4   R7   R8   R9   R   R   R;   R,   R    R"   R$   R'   (    (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR   ó  s   				c           B   s&   e  Z d  Z d Z d „  Z d „  Z RS(   s?   An EdgeDataView class for edges of MultiGraph; See EdgeDataViewc         c   s”   i  } x„ |  j  ƒ  D]v \ } } x] | j ƒ  D]O \ } } | | k r, x4 | j ƒ  D]# \ } } |  j | | | | ƒ VqQ Wq, q, Wd | | <q W~ d  S(   Ni   (   Rb   RF   Rc   (   R   Rk   R%   R\   Rf   Rm   Rl   RE   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR$   ?  s    "c         C   sþ   | d  \ } } y |  j  | | } Wn; t k
 rb y |  j  | | } Wqc t k
 r^ t SXn X|  j t k r» | d } y | | } Wn t k
 rž t SX| |  j | | | | ƒ k Sx< | j ƒ  D]. \ } } | |  j | | | | ƒ k rÈ t SqÈ Wt S(   Ni   (   Ra   Rg   R,   R]   R<   Rc   RF   (   R   Rh   Ri   Rj   Rn   Rl   RE   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR'   I  s&    	
(    (   R4   R7   R8   R9   R$   R'   (    (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR   ;  s   	
c           B   s&   e  Z d  Z d Z d „  Z d „  Z RS(   sB   An EdgeDataView for inward edges of MultiDiGraph; See EdgeDataViewc            s   ‡  f d †  ˆ  j  ƒ  Dƒ S(   Nc         3   s_   |  ]U \ } } | j  ƒ  D]< \ } } | j  ƒ  D]# \ } } ˆ  j | | | | ƒ Vq/ q q d  S(   N(   RF   Rc   (   RD   R%   R\   Rf   Rm   Rl   RE   (   R   (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>d  s    	(   Rb   (   R   (    (   R   s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR$   c  s    c         C   s¼   | d  \ } } y |  j  | | } Wn t k
 r9 t SX|  j t k ry | d } | | } | |  j | | | | ƒ k Sx< | j ƒ  D]. \ } } | |  j | | | | ƒ k r† t Sq† Wt S(   Ni   (   Ra   Rg   R,   R]   R<   Rc   RF   (   R   Rh   Ri   Rj   Rn   Rl   RE   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR'   g  s    

(    (   R4   R7   R8   R9   R$   R'   (    (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR   _  s   	c           B   sž   e  Z d  Z d Z d „  Z d „  Z e d „  ƒ Z e Z	 d „  Z
 d „  Z d	 „  Z d
 „  Z d „  Z d e d d „ Z e d d d „ Z d „  Z d „  Z RS(   s/   A EdgeView class for outward edges of a DiGraphRa   RN   Rb   c         C   s   i |  j  d 6S(   NRN   (   RN   (   R   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR   |  s    c         C   sH   | d |  _  } t | d ƒ r) | j n | j |  _ |  j j |  _ d  S(   NRN   t   succ(   RN   RO   RL   RP   Ra   RF   Rb   (   R   R   RS   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR     s    $c         C   s
   t  | ƒ S(   N(   R(   (   R)   R*   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR+   „  s    c         C   s@   | |  _  t | d ƒ r! | j n | j |  _ |  j j |  _ d  S(   NRo   (   RN   RO   RL   RP   Ra   RF   Rb   (   R   RS   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR    Š  s    	$c         C   s   t  d „  |  j ƒ  Dƒ ƒ S(   Nc         s   s!   |  ] \ } } t  | ƒ Vq d  S(   N(   R!   (   RD   R%   R\   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>‘  s    (   RW   Rb   (   R   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR"     s    c         c   s=   x6 |  j  ƒ  D]( \ } } x | D] } | | f Vq  Wq Wd  S(   N(   Rb   (   R   R%   R\   Rf   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR$   “  s    c         C   s:   y! | \ } } | |  j  | k SWn t k
 r5 t SXd  S(   N(   Ra   Rg   R,   (   R   Rh   Ri   Rj   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR'   ˜  s
    c         C   s   | \ } } |  j  | | S(   N(   Ra   (   R   Rh   Ri   Rj   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR&      s    c         C   s2   | d  k r | t k r |  S|  j |  | | | ƒ S(   N(   R;   R,   t   dataview(   R   RT   R-   R.   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR/   ¥  s    c         C   s2   | d  k r | t k r |  S|  j |  | | | ƒ S(   N(   R;   R,   Rp   (   R   R-   R.   RT   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR-   ª  s    c         C   s   t  t |  ƒ ƒ S(   N(   R0   R1   (   R   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR2   °  s    c         C   s   d j  |  t |  ƒ ƒ S(   Ns   {0.__class__.__name__}({1!r})(   t   formatR1   (   R   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR6   ³  s    (   Ra   RN   Rb   N(   R4   R7   R8   R9   R   R   R:   R+   R	   Rp   R    R"   R$   R'   R&   R;   R,   R/   R<   R-   R2   R6   (    (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR   x  s   								c           B   s5   e  Z d  Z d Z e Z d „  Z d „  Z d „  Z RS(   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)
    c         C   s$   d „  |  j  ƒ  Dƒ } t | ƒ d S(   Nc         s   s+   |  ]! \ } } t  | ƒ | | k Vq d  S(   N(   R!   (   RD   R%   R\   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>þ  s    i   (   Rb   RW   (   R   t   num_nbrs(    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR"   ý  s    c         c   s_   i  } xO |  j  ƒ  D]A \ } } x( | D]  } | | k r& | | f Vq& q& Wd | | <q W~ d  S(   Ni   (   Rb   (   R   Rk   R%   R\   Rf   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR$     s    c         C   sW   y8 | d  \ } } | |  j  | k p6 | |  j  | k SWn t t f k
 rR t SXd  S(   Ni   (   Ra   Rg   RG   R,   (   R   Rh   Ri   Rj   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR'   
  s
    ((    (	   R4   R7   R8   R9   R   Rp   R"   R$   R'   (    (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR   ·  s   A			c           B   sG   e  Z d  Z d Z d „  Z e Z d „  Z d „  Z d „  Z	 d „  Z
 RS(   s.   A EdgeView class for inward edges of a DiGraphc         C   sH   | d |  _  } t | d ƒ r) | j n | j |  _ |  j j |  _ d  S(   NRN   t   pred(   RN   RO   RM   RP   Ra   RF   Rb   (   R   R   RS   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR     s    $c         C   s@   | |  _  t | d ƒ r! | j n | j |  _ |  j j |  _ d  S(   NRs   (   RN   RO   RM   RP   Ra   RF   Rb   (   R   RS   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR      s    	$c         c   s=   x6 |  j  ƒ  D]( \ } } x | D] } | | f Vq  Wq Wd  S(   N(   Rb   (   R   R%   R\   Rf   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR$   "  s    c         C   s:   y! | \ } } | |  j  | k SWn t k
 r5 t SXd  S(   N(   Ra   Rg   R,   (   R   Rh   Ri   Rj   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR'   '  s
    c         C   s   | \ } } |  j  | | S(   N(   Ra   (   R   Rh   Ri   Rj   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR&   .  s    (    (   R4   R7   R8   R9   R   R
   Rp   R    R$   R'   R&   (    (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR     s   				c           B   sh   e  Z d  Z d Z e Z d „  Z d „  Z d „  Z d „  Z	 d e e d d „ Z e e d d d „ Z RS(	   s4   A EdgeView class for outward edges of a MultiDiGraphc         C   s   t  d „  |  j ƒ  Dƒ ƒ S(   Nc         s   s:   |  ]0 \ } } | j  ƒ  D] \ } } t | ƒ Vq q d  S(   N(   RF   R!   (   RD   R%   R\   Rf   Rn   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>:  s    	(   RW   Rb   (   R   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR"   9  s    c         c   s]   xV |  j  ƒ  D]H \ } } x9 | j ƒ  D]+ \ } } x | D] } | | | f Vq9 Wq& Wq Wd  S(   N(   Rb   RF   (   R   R%   R\   Rf   Rn   t   key(    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR$   =  s    c         C   s‰   t  | ƒ } | d k r* | \ } } } n- | d k rK | \ } } d } n t d ƒ ‚ y | |  j | | k SWn t k
 r„ t SXd  S(   Ni   i   i    s!   MultiEdge must have length 2 or 3(   R!   RG   Ra   Rg   R,   (   R   Rh   t   NRi   Rj   Rl   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR'   C  s    	c         C   s"   | \ } } } |  j  | | | S(   N(   Ra   (   R   Rh   Ri   Rj   Rl   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR&   Q  s    c         C   sA   | d  k r( | t k r( | t k r( |  S|  j |  | | | | ƒ S(   N(   R;   R,   R<   Rp   (   R   RT   R-   R]   R.   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR/   U  s    $c         C   sA   | d  k r( | t k r( | t k r( |  S|  j |  | | | | ƒ S(   N(   R;   R,   R<   Rp   (   R   R-   R]   R.   RT   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR-   Z  s    $(    N(   R4   R7   R8   R9   R   Rp   R"   R$   R'   R&   R;   R,   R/   R<   R-   (    (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR   3  s   				c           B   s,   e  Z d  Z d Z e Z d „  Z d „  Z RS(   s*   A EdgeView class for edges of a MultiGraphc         C   s   t  d „  |  Dƒ ƒ S(   Nc         s   s   |  ] } d  Vq d S(   i   N(    (   RD   Rh   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pys	   <genexpr>g  s    (   RW   (   R   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR"   f  s    c         c   s‹   i  } x{ |  j  ƒ  D]m \ } } xT | j ƒ  D]F \ } } | | k r, x+ | j ƒ  D] \ } } | | | f VqQ Wq, q, Wd | | <q W~ d  S(   Ni   (   Rb   RF   (   R   Rk   R%   R\   Rf   Rm   Rl   RE   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR$   i  s    (    (   R4   R7   R8   R9   R   Rp   R"   R$   (    (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR   `  s
   	c           B   sG   e  Z d  Z d Z d „  Z e Z d „  Z d „  Z d „  Z	 d „  Z
 RS(   s3   A EdgeView class for inward edges of a MultiDiGraphc         C   sH   | d |  _  } t | d ƒ r) | j n | j |  _ |  j j |  _ d  S(   NRN   Rs   (   RN   RO   RM   RP   Ra   RF   Rb   (   R   R   RS   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR   x  s    $c         C   s@   | |  _  t | d ƒ r! | j n | j |  _ |  j j |  _ d  S(   NRs   (   RN   RO   RM   RP   Ra   RF   Rb   (   R   RS   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR      s    	$c         c   s]   xV |  j  ƒ  D]H \ } } x9 | j ƒ  D]+ \ } } x | D] } | | | f Vq9 Wq& Wq Wd  S(   N(   Rb   RF   (   R   R%   R\   Rf   Rn   Rt   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR$   „  s    c         C   s‰   t  | ƒ } | d k r* | \ } } } n- | d k rK | \ } } d } n t d ƒ ‚ y | |  j | | k SWn t k
 r„ t SXd  S(   Ni   i   i    s!   MultiEdge must have length 2 or 3(   R!   RG   Ra   Rg   R,   (   R   Rh   Ru   Ri   Rj   Rl   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR'   Š  s    	c         C   s"   | \ } } } |  j  | | | S(   N(   Ra   (   R   Rh   Ri   Rj   Rl   (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR&   ˜  s    (    (   R4   R7   R8   R9   R   R   Rp   R    R$   R'   R&   (    (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyR   t  s   				(   R8   t   collectionsR    R   R   t   networkxt   nxt   __all__R   R   t   objectR   R   R   R   R   R   R   R   R	   R   R
   R   R   R   R   R   R   R   R   R   (    (    (    s;   lib/python2.7/site-packages/networkx/classes/reportviews.pyt   <module>^   s@   				aZ^B"%86H$?[!-