ó
 ,µ[c           @   sê   d  d l  m Z d  d l  m Z d  d l  m Z d  d l  m Z d  d l Z d  d l m Z d  d l	 m
 Z
 m Z m Z d  d l	 m Z d	 e
 f d
 „  ƒ  YZ d e e f d „  ƒ  YZ d e e f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   assert_equal(   t   assert_false(   t   assert_true(   t   assert_raisesN(   t   assert_nodes_equal(   t   BaseGraphTestert   BaseAttrGraphTestert	   TestGraph(   t   TestEdgeSubgrapht   BaseDiGraphTesterc           B   sÅ   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s?   |  j  } t | j d d ƒ t ƒ t | j d d ƒ t ƒ d  S(   Ni    i   iÿÿÿÿ(   t   K3R    t   has_successort   Truet   False(   t   selft   G(    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt   test_has_successor   s    	c         C   sK   |  j  } t t | j d ƒ ƒ d d g ƒ t t t j f | j d ƒ d  S(   Ni    i   i   iÿÿÿÿ(   R
   R    t   sortedt
   successorsR   t   KeyErrort   nxt   NetworkXError(   R   R   (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt   test_successors   s    	"c         C   s?   |  j  } t | j d d ƒ t ƒ t | j d d ƒ t ƒ d  S(   Ni    i   iÿÿÿÿ(   R
   R    t   has_predecessorR   R   (   R   R   (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt   test_has_predecessor   s    	c         C   sK   |  j  } t t | j d ƒ ƒ d d g ƒ t t t j f | j d ƒ d  S(   Ni    i   i   iÿÿÿÿ(   R
   R    R   t   predecessorsR   R   R   R   (   R   R   (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt   test_predecessors   s    	"c      	   C   s¤   |  j  } t t | j ƒ  ƒ d d d d d	 d
 g ƒ t t | j d ƒ ƒ d d g ƒ t t | j d d g ƒ ƒ d d d d g ƒ t t t j f | j d ƒ d  S(   Ni    i   i   iÿÿÿÿ(   i    i   (   i    i   (   i   i    (   i   i   (   i   i    (   i   i   (   i    i   (   i    i   (   i    i   (   i    i   (   i   i    (   i   i   (   R
   R    R   t   edgesR   R   R   R   (   R   R   (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt
   test_edges$   s
    	+".c         C   së   |  j  } d d i  f d d i  f d d i  f d d i  f d d i  f d d i  f g } t t | j d t ƒ ƒ | ƒ t t | j d d t ƒƒ | d  ƒ t t | j d d g d t ƒƒ | d  ƒ t t t j f | j d t ƒ d  S(   Ni    i   i   t   datai   iÿÿÿÿ(	   R
   R    R   R   R   R   R   R   R   (   R   R   t	   all_edges(    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt   test_edges_data+   s    	N&,c      	   C   sv   |  j  } t t | j ƒ  ƒ d d d d d	 d
 g ƒ t t | j d ƒ ƒ d d g ƒ t t t j f | j d ƒ d  S(   Ni    i   i   iÿÿÿÿ(   i    i   (   i    i   (   i   i    (   i   i   (   i   i    (   i   i   (   i    i   (   i    i   (   R
   R    R   t	   out_edgesR   R   R   R   (   R   R   (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt   test_out_edges3   s    	+"c         C   sg   |  j  } t t | j ƒ  ƒ d d g ƒ t t | j d ƒ ƒ d g ƒ t t | j d ƒ ƒ g  ƒ d  S(   Ni    i   i   (   i    i   (   i   i   (   i    i   (   t   P3R    R   R    (   R   R   (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt   test_out_edges_dir9   s    	c         C   sï   t  j d d i d d 6f d d i  f g ƒ } t t | j d t ƒ ƒ d d i d d 6f d d i  f g ƒ t t | j d d t ƒƒ d d i d d 6f g ƒ t t | j d d ƒ ƒ d d g ƒ t t | j d d d ƒƒ d g ƒ d  S(   Ni    i   R   (   i    i   i    (   i   i    N(   i    i   i    (   R   t   DiGraphR    R   R    R   t   None(   R   R   (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt   test_out_edges_data?   s
    .>5%c         C   sg   |  j  } t t | j ƒ  ƒ d d g ƒ t t | j d ƒ ƒ g  ƒ t t | j d ƒ ƒ d g ƒ d  S(   Ni    i   i   (   i    i   (   i   i   (   i   i   (   R"   R    R   t   in_edges(   R   R   (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt   test_in_edges_dirF   s    	c         C   sï   t  j d d i d d 6f d d i  f g ƒ } t t | j d t ƒ ƒ d d i d d 6f d d i  f g ƒ t t | j d d t ƒƒ d d i d d 6f g ƒ t t | j d d ƒ ƒ d d g ƒ t t | j d d d ƒƒ d g ƒ d  S(   Ni    i   R   (   i    i   i    (   i   i    N(   i    i   i    (   R   R$   R    R   R'   R   R%   (   R   R   (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt   test_in_edges_dataL   s
    .>5%c         C   s›   |  j  } t t | j ƒ  ƒ d d d g ƒ t t | j ƒ  ƒ i d d 6d d 6d d 6ƒ t | j d ƒ d ƒ t t | j t d g ƒ ƒ ƒ d g ƒ d  S(	   Ni    i   i   i   (   i    i   (   i   i   (   i   i   (   i    i   (   R
   R    R   t   degreet   dictt   listt   iter(   R   R   (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt   test_degreeS   s    	".c         C   s›   |  j  } t t | j ƒ  ƒ d d d g ƒ t t | j ƒ  ƒ i d d 6d d 6d d 6ƒ t | j d ƒ d ƒ t t | j t d g ƒ ƒ ƒ d g ƒ d  S(   Ni    i   i   (   i    i   (   i   i   (   i   i   (   i    i   (   R
   R    R   t	   in_degreeR+   R,   R-   (   R   R   (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt   test_in_degree[   s
    	".c         C   sG  |  j  } | j d d d d d d ƒt t | j d d ƒ ƒ d
 d d g ƒ t t | j d d ƒ ƒ i d d 6d d 6d d 6ƒ t | j d d d ƒd ƒ t t | j d d ƒ ƒ d d d g ƒ t t | j d d ƒ ƒ i d d 6d	 d 6d d 6ƒ t | j d d d ƒd	 ƒ t t | j t d g ƒ d d ƒƒ d g ƒ d  S(   Ni    i   t   weightg333333Ó?t   otherg333333ó?i   gÍÌÌÌÌÌô?gš™™™™™@(   i    i   (   i   gÍÌÌÌÌÌô?(   i   i   (   i    i   (   i   gš™™™™™@(   i   i   (   i   gš™™™™™@(   R
   t   add_edgeR    R   R/   R+   R,   R-   (   R   R   (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt   test_in_degree_weightedb   s    	(4(4c         C   sG  |  j  } | j d d d d d d ƒt t | j d d ƒ ƒ d
 d d g ƒ t t | j d d ƒ ƒ i d d 6d d 6d d 6ƒ t | j d d d ƒd ƒ t t | j d d ƒ ƒ d d d g ƒ t t | j d d ƒ ƒ i d	 d 6d d 6d d 6ƒ t | j d d d ƒd	 ƒ t t | j t d g ƒ d d ƒƒ d g ƒ d  S(   Ni    i   R1   g333333Ó?R2   g333333ó?gÍÌÌÌÌÌô?i   gš™™™™™@(   i    gÍÌÌÌÌÌô?(   i   i   (   i   i   (   i    gš™™™™™@(   i   i   (   i   i   (   i    gš™™™™™@(   R
   R3   R    R   t
   out_degreeR+   R,   R-   (   R   R   (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt   test_out_degree_weightedm   s    	(4(4c         C   s›   |  j  } t t | j ƒ  ƒ d d d g ƒ t t | j ƒ  ƒ i d d 6d d 6d d 6ƒ t | j d ƒ d ƒ t t | j t d g ƒ ƒ ƒ d g ƒ d  S(   Ni    i   i   (   i    i   (   i   i   (   i   i   (   i    i   (   R
   R    R   R5   R+   R,   R-   (   R   R   (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt   test_out_degreex   s
    	".c         C   s3   |  j  } t | j ƒ  d ƒ t | j ƒ  d ƒ d  S(   Ni   (   R
   R    t   sizet   number_of_edges(   R   R   (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt	   test_size   s    	c         C   s   |  j  ƒ  } | j d d ƒ t | j ƒ  j d d ƒ ƒ t | j d t ƒ j d d ƒ ƒ | j d d ƒ t | j d t ƒ j d d ƒ ƒ d  S(   Ni   i   t
   reciprocal(   t   GraphR3   R   t   to_undirectedt   has_edgeR   R   (   R   R   (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt   test_to_undirected_reciprocal„   s    "c         C   s   t  j d d g ƒ } | j ƒ  } t t | j ƒ  ƒ d d g ƒ | j d d ƒ t t | j ƒ  ƒ d g ƒ t t | j ƒ  ƒ d	 d
 g ƒ d  S(   Ni    i   i   (   i    i   (   i   i   (   i   i    (   i   i   (   i   i   (   i    i   (   i   i   (   R   R$   t   reverseR    R   R   t   remove_edge(   R   R   t   R(    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt   test_reverse_copyŒ   s    c         C   sc   t  j d d g ƒ } | j d t ƒ } t t | j ƒ  ƒ d d g ƒ t t  j | j	 d d ƒ d  S(	   Ni    i   i   t   copy(   i    i   (   i   i   (   i   i    (   i   i   (
   R   R$   R@   R   R    R   R   R   R   RA   (   R   R   RB   (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt   test_reverse_nocopy”   s    c         C   s   d t  f d „  ƒ  Y} | ƒ  } | ƒ  } t j ƒ  } | j | | ƒ t | j ƒ  | j ƒ  j ƒ  ƒ t | | f g t | j ƒ  j	 ƒ  ƒ ƒ d  S(   Nt   Fooc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyRF   ›   s   (
   t   objectR   R$   R3   R   t   nodesR@   R    R,   R   (   R   RF   t   xt   yR   (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt   test_reverse_hashableš   s    		(   RG   RH   R   R   R   R   R   R   R!   R#   R&   R(   R)   R.   R0   R4   R6   R7   R:   R?   RC   RE   RM   (    (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyR	      s*   																				t   BaseAttrDiGraphTesterc           B   s   e  Z RS(    (   RG   RH   (    (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyRN   ¥   s   t   TestDiGraphc           B   sD   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s=   Tests specific to dict-of-dict-of-dict digraph data structurec         C   s  t  j |  _ i  i  i  i  i  i  f \ } } } } } } i i | d 6| d 6d 6i | d 6| d 6d 6i | d 6| d 6d 6|  _ d d d g |  _ d d d g |  _ |  j ƒ  |  _ |  j |  j _ |  j _ i i | d 6| d 6d 6i | d 6| d 6d 6i | d 6| d 6d 6|  j _	 i  |  j _
 i  |  j j
 d <i  |  j j
 d <i  |  j j
 d <i  i  } } |  j ƒ  |  _ i i | d 6d 6i | d 6d 6i  d 6|  j _ |  j j |  j _ i i  d 6i | d 6d 6i | d 6d 6|  j _	 i  |  j _
 i  |  j j
 d <i  |  j j
 d <i  |  j j
 d <d  S(   Ni   i   i    (   i    i   (   i    i   (   i   i   (   R   R$   R<   t   k3adjt   k3edgest   k3nodesR
   t   _adjt   _succt   _predt   _nodeR"   (   R   t   ed1t   ed2t   ed3t   ed4t   ed5t   ed6(    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt   setUp¬   s*    *HK//c         C   sñ   |  j  i d g d 6d g d 6d d ƒ} t | j d ƒ t t | j j ƒ  ƒ d i i  d 6f d i i  d 6f g ƒ t t | j j ƒ  ƒ d i i  d 6f d i i  d 6f g ƒ t t | j j ƒ  ƒ d i i  d 6f d i i  d 6f g ƒ d  S(   Ni   i   t   namet   test(   R<   R    R^   R   t   adjt   itemst   succt   pred(   R   R   (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt   test_data_inputÅ   s
    )<<c         C   s  |  j  ƒ  } | j d d ƒ t | j i i i  d 6d 6i  d 6ƒ t | j i i i  d 6d 6i  d 6ƒ t | j i i  d 6i i  d 6d 6ƒ |  j  ƒ  } | j d Œ  t | j i i i  d 6d 6i  d 6ƒ t | j i i i  d 6d 6i  d 6ƒ t | j i i  d 6i i  d 6d 6ƒ d  S(   Ni    i   (   i    i   (   R<   R3   R    R`   Rb   Rc   (   R   R   (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt   test_add_edgeÌ   s    %%%%%c         C   sD  |  j  ƒ  } | j d d d i d d 6f g d d ƒt | j i i i d d 6d 6i d d 6d 6d 6i  d 6i  d 6ƒ t | j i i i d d 6d 6i d d 6d 6d 6i  d 6i  d 6ƒ t | j i i  d 6i i d d 6d 6d 6i i d d 6d 6d 6ƒ t t j | j d g ƒ t t j | j d g ƒ t t	 | j d g ƒ d  S(	   Ni    i   i   i   R   (   i    i   (   i    (   i    i   i   i   (
   R<   t   add_edges_fromR    R`   Rb   Rc   R   R   R   t	   TypeError(   R   R   (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt   test_add_edges_fromØ   s    )AAAc         C   sÌ   |  j  } | j d d ƒ t | j i i i  d 6d 6i i  d 6i  d 6d 6i i  d 6i  d 6d 6ƒ t | j i i i  d 6i  d 6d 6i i  d 6d 6i i  d 6i  d 6d 6ƒ t t t j f | j d d ƒ d  S(   Ni    i   i   iÿÿÿÿ(	   R
   RA   R    Rb   Rc   R   R   R   R   (   R   R   (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt   test_remove_edgeã   s
    	HHc         C   s½   |  j  } | j d g ƒ t | j i i i  d 6d 6i i  d 6i  d 6d 6i i  d 6i  d 6d 6ƒ t | j i i i  d 6i  d 6d 6i i  d 6d 6i i  d 6i  d 6d 6ƒ | j d g ƒ d  S(   Ni    i   i   (   i    i   (   i    i    (   R
   t   remove_edges_fromR    Rb   Rc   (   R   R   (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt   test_remove_edges_fromê   s
    	HH(	   RG   RH   t   __doc__R]   Rd   Re   Rh   Ri   Rk   (    (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyRO   ©   s   					R   c           B   s    e  Z d  Z d „  Z d „  Z RS(   s8   Unit tests for the :meth:`DiGraph.edge_subgraph` method.c         C   s   t  j t  j d ƒ ƒ } x. t d ƒ D]  } d j | ƒ | j | d <q% Wd | j d d <d | j d d <d
 | j d <| |  _ | j	 d d g ƒ |  _
 d  S(   Ni   s   node{}R^   t   edge01i    i   t   edge34i   i   t   graph(   i    i   (   i   i   (   i    i   (   i   i   (   R   R$   t
   path_grapht   ranget   formatRJ   R   Ro   R   t   edge_subgrapht   H(   R   R   t   i(    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt   setupõ   s    	c         C   s¨   t  j ƒ  } | j d d ƒ | j d g ƒ } t t | j d ƒ ƒ g  ƒ t t | j d ƒ ƒ d g ƒ t t | j d ƒ ƒ d g ƒ t t | j d ƒ ƒ g  ƒ d S(   sz   Test that nodes are added to predecessors and successors.

        For more information, see GitHub issue #2370.

        i    i   N(   i    i   (   R   R$   R3   Rs   R    R,   R   R   (   R   R   Rt   (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt   test_pred_succ  s    (   RG   RH   Rl   Rv   Rw   (    (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyR   ò   s   	(   t
   nose.toolsR    R   R   R   t   networkxR   t   networkx.testingR   t
   test_graphR   R   R   R   t   TestGraphEdgeSubgraphR	   RN   RO   (    (    (    sB   lib/python2.7/site-packages/networkx/classes/tests/test_digraph.pyt   <module>   s   –I