ó
 ,µ[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 Td  d l m	 Z	 m
 Z
 d e	 f d	 „  ƒ  YZ d
 e e
 f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   assert_equal(   t	   assert_is(   t   assert_not_equal(   t   assert_raisesN(   t   *(   t   BaseAttrGraphTestert	   TestGrapht   BaseMultiGraphTesterc           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 RS(   c         C   sw   |  j  } t | j d d ƒ t ƒ t | j d d ƒ t ƒ t | j d d d ƒ t ƒ t | j d d d ƒ t ƒ d  S(   Ni    i   iÿÿÿÿ(   t   K3R    t   has_edget   Truet   False(   t   selft   G(    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   test_has_edge   s
    	c         C   s—   |  j  } t | j d d ƒ i i  d 6ƒ t | d d i i  d 6ƒ t | d d d i  ƒ t | j d d ƒ d  ƒ t | j d d d ƒ i  ƒ d  S(   Ni    i   i
   i   (   R   R    t   get_edge_datat   None(   R   R   (    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   test_get_edge_data   s    	 c         C   s   |  j  } t t | j ƒ  ƒ i i i i  d 6d 6i i  d 6d 6d 6i i i  d 6d 6i i  d 6d 6d 6i i i  d 6d 6i i  d 6d 6d 6ƒ d  S(   Ni    i   i   (   R   R    t   dictt	   adjacency(   R   R   (    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   test_adjacency   s
    	&#c         C   s{   t  | d d d d | d d d d ƒ | d d d d j d ƒ t | d d d d | d d d d ƒ d  S(   Ni   i   i    t   foo(   R    t   appendR   (   R   t   HR   (    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   deepcopy_edge_attr$   s    -c         C   s{   t  | d d d d | d d d d ƒ | d d d d j d ƒ t  | d d d d | d d d d ƒ d  S(   Ni   i   i    R   (   R    R   (   R   R   R   (    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   shallow_copy_edge_attr)   s    -c         C   s  t  | j | j ƒ t  | j | j ƒ t  | j | j ƒ t  | j | j ƒ | j ƒ  r¿ | j ƒ  r¿ t | j d d d | j d d d ƒ t | j d d d | j d d d ƒ nÊ | j ƒ  sæ | j | _ | j | _ n  | j ƒ  s| j | _ | j | _ n  t  | j | j ƒ t  | j | j ƒ t | j d d d | j d d d ƒ t | j d d d | j d d d ƒ d  S(   Ni   i   i    (	   R    t   _adjt   _nodet   grapht   namet   is_directedR   t   _predt   _succ(   R   R   R   (    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   graphs_equal.   s"    +.+c         C   sË   | d d d d } d | j  d d d d <t | j | j ƒ | | j  d d d d <t | j | j ƒ | j d d } d | j d d <t | j | j ƒ | | j d d <t | j | j ƒ d  S(   Ni   i   i    R   t   baz(   t   adjR    R   t   nodesR   (   R   R   R   t   old_foo(    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   same_attrdictB   s    c         C   sË   | d d d d } d | j  d d d d <t | j | j ƒ | | j  d d d d <t | j | j ƒ | j d d } d | j d d <t | j | j ƒ | | j d d <t | j | j ƒ d  S(   Ni   i   i    R   R"   (   R#   R   R   R    R$   R   (   R   R   R   R%   (    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   different_attrdictP   s    c         C   sU   |  j  } |  j | ƒ t j | ƒ } |  j | | ƒ | j ƒ  } |  j | | ƒ d  S(   N(   R   t   add_attributest   nxt
   MultiGrapht   is_shallow_copyt   to_undirectedt   is_deepcopy(   R   R   R   (    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   test_to_undirected^   s    	c         C   sU   |  j  } |  j | ƒ t j | ƒ } |  j | | ƒ | j ƒ  } |  j | | ƒ d  S(   N(   R   R(   R)   t   MultiDiGraphR+   t   to_directedR-   (   R   R   R   (    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   test_to_directedf   s    	c         C   s›   |  j  } | j d d ƒ | j d d ƒ | j d d d d ƒ| j d d d d ƒt | j d d ƒ d ƒ | j d d ƒ t | j d d ƒ d ƒ d  S(   Ni    t   keys   parallel edgei   i   (   R   t   add_edget   remove_edgeR    t   number_of_edges(   R   R   (    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   test_number_of_edges_selfloopsn   s    	c         C   su   |  j  ƒ  } | j d d d d ƒ| j d d d d d ƒt | j d i d d 6ƒ t | j d	 i d d 6ƒ d  S(
   Ni   i   R   t   barR2   t   bizi    (   i   i   i    (   i   i   R2   (   t   GraphR3   t   assert_edges_equalt   edges(   R   R   (    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   test_edge_lookupx   s
    c         C   sæ  |  j  ƒ  } | j d d d d d d d d d d	 ƒt | j d t ƒ d d i d d 6d d 6d	 d 6f g ƒ d
 | d d d d <t | j d t ƒ d d i d
 d 6d d 6d	 d 6f g ƒ d | j d d d d <t | j d t ƒ d d i d d 6d d 6d	 d 6f g ƒ d | j d d <t | j d t ƒ d d i d d 6d d 6d	 d 6f g ƒ d d g | j d d d d <d | j d d d d <t | j d t ƒ d d i d d 6d d 6d	 d 6d d g d 6d d 6f g ƒ d  S(   Ni   i   R2   i    t   datai   t   spamR7   R   i
   i   i   iÈ   t   listdatat   weight(   i   i   i    (   R9   R3   R:   R;   R
   R#   (   R   R   (    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   test_edge_attr4   s$    ((((((   t   __name__t
   __module__R   R   R   R   R   R!   R&   R'   R.   R1   R6   R<   RA   (    (    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyR      s   											
	t   TestMultiGraphc           B   sb   e  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ÿ   t  j |  _ i i  d 6i i  d 6i i  d 6} } } 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 _ 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*   R9   t   k3adjt   k3edgest   k3nodesR   R   R   (   R   t   ed1t   ed2t   ed3(    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   setUp–   s    )c         C   s   |  j  i d g d 6d g d 6d d ƒ} t | j d ƒ d i i i  d 6d 6f d i i i  d 6d 6f g } t t | j j ƒ  ƒ | ƒ d  S(   Ni   i   R   t   testi    (   R9   R    R   t   sortedR#   t   items(   R   R   t   expected(    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   test_data_input¦   s    )4c         C   sl   |  j  } t | d i i i  d 6d 6i i  d 6d 6ƒ t t | j d ƒ t t t j f | j d g ƒ d  S(   Ni    i   i   t   jt   A(   R   R    R   t   KeyErrort   __getitem__t	   TypeErrorR)   t   NetworkXError(   R   R   (    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   test_getitem¬   s    	-c         C   sp   |  j  } | j d ƒ t | j i i i i  d 6d 6d 6i i i  d 6d 6d 6ƒ t t t j f | j d ƒ d  S(   Ni    i   i   iÿÿÿÿ(   R   t   remove_nodeR    R#   R   RS   R)   RV   (   R   R   (    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   test_remove_node²   s    	:c         C   s­   |  j  ƒ  } | j d d ƒ t | j i i i i  d 6d 6d 6i i i  d 6d 6d 6ƒ |  j  ƒ  } | j d Œ  t | j i i i i  d 6d 6d 6i i i  d 6d 6d 6ƒ d  S(   Ni    i   (   i    i   (   R9   R3   R    R#   (   R   R   (    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   test_add_edge¸   s    :c         C   s”   |  j  ƒ  } | j d d d d ƒ| j d d ƒ t | j ƒ  d ƒ |  j  ƒ  } | j d d d i  f g ƒ | j d g ƒ t | j ƒ  d ƒ d  S(   Ni    i   R2   i   (   i    i   (   R9   R3   R    R5   t   add_edges_from(   R   R   (    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   test_add_edge_conflicting_keyÀ   s    c         C   s(  |  j  ƒ  } | j d	 d d i d d 6f g ƒ t | j i i i i  d 6i d d 6d 6d 6d 6i i i  d 6i d d 6d 6d 6d 6ƒ | j d
 d d i d d 6f g d d ƒt | j i i i i  d 6i d d 6d 6i d d 6d 6i d d 6d 6d 6d 6i i i  d 6i d d 6d 6i d d 6d 6i d d 6d 6d 6d 6ƒ |  j  ƒ  } d d i d d 6f d d d f d d g } | j | ƒ i i d d 6d 6i d d 6d 6i  d 6i  d 6} t | j i i | d 6d 6i | d 6d 6ƒ t t j | j d g ƒ t t j | j d g ƒ t t | j d g ƒ d  S(   Ni    i   i   R@   i   i   t   si   (   i    i   (   i    i   (   R@   i   (   (   R@   i   (   i    i   i   (   i    i   R]   (   i    (   i    i   i   i   i   (	   R9   R[   R    R#   R   R   R)   RV   RU   (   R   R   R;   t   keydict(    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   test_add_edges_fromÊ   s$    #/')'$(0,c         C   s¾   |  j  } | j d d ƒ t | j i i i i  d 6d 6d 6i i i  d 6d 6d 6i i i  d 6d 6i i  d 6d 6d 6ƒ t t t j f | j d d ƒ t t t j f | j d d d d ƒd  S(   Ni    i   i   iÿÿÿÿR2   (   R   R4   R    R#   R   RS   R)   RV   (   R   R   (    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   test_remove_edgeâ   s    	!c         C   s  |  j  j ƒ  } | j d g ƒ i i  d 6} t | j i i | d 6d 6i | d 6d 6i | d 6| d 6d 6ƒ | j d g ƒ |  j  j d d ƒ |  j  j ƒ  } | j t | j d t d t ƒ ƒ ƒ t | j i i  d 6i  d 6i  d 6ƒ |  j  j ƒ  } | j t | j d t	 d t ƒ ƒ ƒ t | j i i  d 6i  d 6i  d 6ƒ |  j  j ƒ  } | j t | j d t	 d t	 ƒ ƒ ƒ t | j i i  d 6i  d 6i  d 6ƒ |  j  j ƒ  } | j d d d d i  f d	 g ƒ t | j i i i i  d 6d 6d 6i i i  d 6d 6d 6i  d 6ƒ d  S(
   Ni    i   i   R=   t   keys(   i    i   (   i    i    (   i    i   i    (   i   i   (
   R   t   copyt   remove_edges_fromR    R#   R3   t   listR;   R
   R   (   R   R   t   kd(    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   test_remove_edges_fromî   s$    A%%%%%%"c         C   s/  |  j  } | j d d d d ƒ| j d d d d ƒt | j i i i i  d 6d 6i i  d 6d 6d 6i i i  d 6d 6i i  d 6d 6d 6i i i  d 6d 6i i  d 6d 6d 6ƒ | j d d ƒ i i  d 6} t | j i i | d 6d 6i | d 6d 6i | d 6| d 6d 6ƒ t t t j f | j d d ƒ d  S(   Ni    i   R2   s   parallel edgei   iÿÿÿÿ(	   R   R3   R4   R    R#   R   RS   R)   RV   (   R   R   Re   (    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   test_remove_multiedge  s    	/#'A(   RB   RC   RK   RP   RW   RY   RZ   R\   R_   R`   Rf   Rg   (    (    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyRD   •   s   						
			t   TestEdgeSubgraphc           B   sV   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 RS(	   s;   Unit tests for the :meth:`MultiGraph.edge_subgraph` method.c         C   sÿ   t  j ƒ  } t  j | t d ƒ ƒ t  j | t d ƒ ƒ x. t d ƒ D]  } d j | ƒ | j | d <qE Wd | j d d d d <d | j d d d d <d | j d	 d
 d d <d | j d	 d
 d d <d | j d <| |  _ | j	 d d g ƒ |  _
 d  S(   Ni   s   node{}R   t   edge010i    i   t   edge011t   edge340i   i   t   edge341R   (   i    i   i    (   i   i   i   (   R)   R*   t   add_patht   ranget   formatR$   R#   R   R   t   edge_subgraphR   (   R   R   t   i(    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   setup  s    	c         C   s,   t  d d d d g t |  j j ƒ  ƒ ƒ d S(   s.   Tests that the subgraph has the correct nodes.i    i   i   i   N(   R    RM   R   R$   (   R   (    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   test_correct_nodes$  s    c         C   s2   t  d d g t |  j j d t d d	 ƒ ƒ ƒ d
 S(   s.   Tests that the subgraph has the correct edges.i    i   Ri   i   i   Rl   Ra   R=   R   N(   i    i   i    Ri   (   i   i   i   Rl   (   R    RM   R   R;   R
   (   R   (    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   test_correct_edges(  s    c         C   s<   |  j  j d ƒ t d d d d g t |  j j ƒ  ƒ ƒ d S(   sk   Tests that adding a node to the original graph does not
        affect the nodes of the subgraph.

        i   i    i   i   i   N(   R   t   add_nodeR    RM   R   R$   (   R   (    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   test_add_node-  s    c         C   s9   |  j  j d ƒ t d d d g t |  j j ƒ  ƒ ƒ d S(   si   Tests that removing a node in the original graph does
        affect the nodes of the subgraph.

        i    i   i   i   N(   R   RX   R    RM   R   R$   (   R   (    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyRY   5  s    c         C   s£   x2 |  j  D]' } t |  j j | |  j  j | ƒ q
 Wd |  j j d d <t |  j j d |  j  j d ƒ d |  j  j d d <t |  j j d |  j  j d ƒ d S(   s`   Tests that the node attribute dictionary of the two graphs is
        the same object.

        R   i    R   R7   i   N(   R   R    R   R$   (   R   t   v(    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   test_node_attr_dict=  s    %!c         C   s  xW |  j  j d t ƒ D]@ \ } } } t |  j j | | | |  j  j | | | ƒ q Wd |  j j d d d d <t |  j j d d d d |  j  j d d d d ƒ d |  j  j d d d d <t |  j j d d d d |  j  j d d d d ƒ d	 S(
   s`   Tests that the edge attribute dictionary of the two graphs is
        the same object.

        Ra   R   i    i   R   R7   i   i   N(   R   R;   R
   R    R   R   (   R   t   uRw   t   k(    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   test_edge_attr_dictJ  s    %5c         C   s   t  |  j j |  j j ƒ d S(   sa   Tests that the graph attribute dictionary of the two graphs
        is the same object.

        N(   R   R   R   R   (   R   (    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   test_graph_attr_dictY  s    (   RB   RC   t   __doc__Rr   Rs   Rt   Rv   RY   Rx   R{   R|   (    (    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyRh     s   							(   t
   nose.toolsR    R   R   R   t   networkxR)   t   networkx.testing.utilst
   test_graphR   R   R   RD   t   objectRh   (    (    (    sE   lib/python2.7/site-packages/networkx/classes/tests/test_multigraph.pyt   <module>   s   
ˆz