ó
 ,µ[c           @   s^   d  Z  d d l m Z d d l m Z m Z m Z m Z d d l Z	 d e
 f d „  ƒ  YZ d S(   s    Unit tests for layout functions.iÿÿÿÿ(   t   SkipTest(   t   assert_almost_equalt   assert_equalt   assert_falset   assert_raisesNt
   TestLayoutc           B   s×   e  Z d  Z d Z e 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(   i   c         C   sX   y d d  l  a  Wn t k
 r/ t d ƒ ‚ n Xy d d  l a Wn t k
 rS n Xd  S(   Niÿÿÿÿs   NumPy not available.(   t   numpyt   ImportErrorR    t   scipy(   t   cls(    (    sA   lib/python2.7/site-packages/networkx/drawing/tests/test_layout.pyt
   setupClass   s    c         C   sP   t  j d d ƒ |  _ t  j ƒ  |  _ t  j |  j d ƒ t  j d d ƒ |  _ d  S(   Ni   t   abcdefi   (   t   nxt   grid_2d_grapht   Git   Grapht   Gst   add_patht   bigG(   t   self(    (    sA   lib/python2.7/site-packages/networkx/drawing/tests/test_layout.pyt   setUp   s    c            s•   d d  l  ‰  t j ƒ  } | j d d d d g ƒ i d d 6} d g } t j | d | d | ƒ} t ‡  f d	 †  | j ƒ  Dƒ ƒ } t | d
 ƒ d  S(   Niÿÿÿÿi    i   i   i   g        t   post   fixedc         3   s+   |  ]! } | D] } ˆ  j  | ƒ Vq q d  S(   N(   t   isnan(   t   .0t   coordst   c(   t   math(    sA   lib/python2.7/site-packages/networkx/drawing/tests/test_layout.pys	   <genexpr>'   s    s   values should not be nan(   i    i   (   i   i   (   i   i    (   i   i   (   g        g        (   R   R   R   t   add_edges_fromt   fruchterman_reingold_layoutt   anyt   valuesR   (   R   t   Gt   init_post	   fixed_posR   t   has_nan(    (   R   sA   lib/python2.7/site-packages/networkx/drawing/tests/test_layout.pyt   test_spring_init_pos   s    	"c         C   s—   g  } t  j | ƒ } t  j | ƒ } t  j | ƒ } t  j | ƒ } t  j | ƒ } t  j | ƒ } t  j | | ƒ } |  j d  k	 r“ t  j
 | ƒ } n  d  S(   N(   R   t   random_layoutt   circular_layoutt   spring_layoutR   t   spectral_layoutt   shell_layoutt   bipartite_layoutR   t   Nonet   kamada_kawai_layout(   R   R    t   vpos(    (    sA   lib/python2.7/site-packages/networkx/drawing/tests/test_layout.pyt   test_smoke_empty_graph*   s    c         C   sî   |  j  } t j | ƒ } t j | ƒ } t j | ƒ } t j | ƒ } t j |  j ƒ } t j | ƒ } t j | j ƒ  ƒ } t j |  j ƒ } t j |  j j ƒ  ƒ } t j	 | ƒ } |  j
 d  k	 rê t j | ƒ } t j | d d ƒ} n  d  S(   Nt   dimi   (   R   R   R%   R&   R'   R   R   R(   t   to_directedR)   R   R+   R,   (   R   R    R-   (    (    sA   lib/python2.7/site-packages/networkx/drawing/tests/test_layout.pyt   test_smoke_int6   s    	c         C   s   |  j  } t j | ƒ } t j | ƒ } t j | ƒ } t j | ƒ } t j | ƒ } t j | ƒ } |  j d  k	 r™ t j
 | ƒ } t j
 | d d ƒ} n  d  S(   NR/   i   (   R   R   R%   R&   R'   R   R(   R)   R   R+   R,   (   R   R    R-   (    (    sA   lib/python2.7/site-packages/networkx/drawing/tests/test_layout.pyt   test_smoke_stringF   s    	c         C   sª   t  j | ƒ } | | } | | } t  j t | j ƒ  ƒ ƒ } | j d ƒ | j d ƒ } | d | k j ƒ  sv t ‚ | | k j ƒ  sŽ t ‚ | | k j ƒ  s¦ t ‚ d  S(   Ni    i   (   R   t   arrayt   listR   t   maxt   mint   allt   AssertionError(   R   R   t   scalet   centert   lowt   hiR-   t   length(    (    sA   lib/python2.7/site-packages/networkx/drawing/tests/test_layout.pyt   check_scale_and_centerR   s    

c         C   s=  |  j  } d
 } t j d ƒ } | j d ƒ | t j | d | ƒd d d d ƒ| t j | d d	 d | ƒd d	 d | ƒ| t j | d d	 d | ƒd d	 d | ƒ| t j | d d	 d | ƒd d	 d | ƒ| t j | d d	 d | ƒd d	 d | ƒ|  j	 d  k	 r9| t j | d d	 d | ƒd d	 d | ƒn  d  S(   Ni   i   i	   R:   R9   g      à?g      @g      @i   (   i   i   (   g      @g      @(   R>   R   t   complete_grapht   add_nodeR%   R'   R(   R&   R)   R   R+   R,   (   R   t   scR   R    (    (    sA   lib/python2.7/site-packages/networkx/drawing/tests/test_layout.pyt   test_scale_and_center_arg\   s    	%++++c         C   sû   |  j  } d } t j d ƒ } | j d ƒ | t j | ƒ d d d d ƒ| t j | ƒ d d d | ƒ| t j | ƒ d d d | ƒ| t j | ƒ d d d | ƒ| t j | ƒ d d d | ƒ|  j	 d  k	 r÷ | t j | ƒ d d d | ƒn  d  S(	   Ni    i	   R9   g      à?R:   i   (   i    i    (   g      à?g      à?(   R>   R   R?   R@   R%   R'   R(   R&   R)   R   R+   R,   (   R   RA   R   R    (    (    sA   lib/python2.7/site-packages/networkx/drawing/tests/test_layout.pyt   test_default_scale_and_centerj   s    	c         C   s^   t  j d ƒ } t t t  j | d d ƒt t t  j | d d ƒt t t  j | d d ƒd  S(   Ni   R/   i   i   (   R   t
   path_graphR   t
   ValueErrorR&   R)   (   R   R    (    (    sA   lib/python2.7/site-packages/networkx/drawing/tests/test_layout.pyt!   test_circular_and_shell_dim_errorw   s    c         C   sf   t  j |  j ƒ } t  j j j | ƒ } t | j d ƒ t  j j j | d d ƒ} t | j d ƒ d  S(   Ni   i   R/   i   (   i   i   (   i   i   (   R   t   to_numpy_arrayR   t   drawingt   layoutt   _fruchterman_reingoldR   t   shape(   R   t   AR   (    (    sA   lib/python2.7/site-packages/networkx/drawing/tests/test_layout.pyt   test_adjacency_interface_numpy}   s
    c         C   sÁ   y d d  l  } Wn t k
 r/ t d ƒ ‚ n Xt j |  j d d ƒ} t j j j | ƒ } t	 | j
 d	 ƒ t j j j | ƒ } t	 | j
 d
 ƒ t j j j | d d ƒ} t	 | j
 d ƒ d  S(   Niÿÿÿÿs   scipy not available.t   dtypet   di   i   R/   i   (   i   i   (   i   i   (   i   i   (   R   R   R    R   t   to_scipy_sparse_matrixR   RH   RI   t   _sparse_fruchterman_reingoldR   RK   t   _sparse_spectral(   R   R   RL   R   (    (    sA   lib/python2.7/site-packages/networkx/drawing/tests/test_layout.pyt   test_adjacency_interface_scipy„   s    c         C   sz   t  j d ƒ } t  j | ƒ } t | d j ƒ  ƒ t  j d ƒ } t  j | d g d d g g ƒ } t | d j ƒ  ƒ d  S(   Ni   i    i   i   (   R   RD   R)   R   R   (   R   R    R-   (    (    sA   lib/python2.7/site-packages/networkx/drawing/tests/test_layout.pyt   test_single_nodes‘   s    !c         C   s.   t  j |  j ƒ } t  j |  j d | ƒ} d  S(   NR   (   R   R&   R   R   (   R   R   t   npos(    (    sA   lib/python2.7/site-packages/networkx/drawing/tests/test_layout.pyt+   test_smoke_initial_pos_fruchterman_reingold™   s    c         C   s¿   t  j |  j ƒ } t  j |  j d | d d g ƒ} t t | d ƒ t | d ƒ ƒ t  j |  j ƒ } t  j |  j d | d d g ƒ} x1 t d ƒ D]# } t | d	 | | d
 | ƒ q” Wd  S(   NR   R   i    i   (   i    i    (   i    i    (   i    i    (   i    i    (   i    i    (   i    i    (	   R   R&   R   R   R   t   tupleR   t   rangeR   (   R   R   RU   t   axis(    (    sA   lib/python2.7/site-packages/networkx/drawing/tests/test_layout.pyt$   test_fixed_node_fruchterman_reingold   s    !!!c         C   s  t  j d ƒ } t  j | d d ƒ} t  j | d d ƒ} t t | d ƒ d ƒ t  j | d d ƒ} t t | d ƒ d ƒ t  j | d d	 ƒ} t t | d ƒ d
 ƒ t  j | d d ƒ} t t | d ƒ d ƒ t  j	 | d d ƒ} t t | d ƒ d ƒ d  S(   Ni   R:   i    (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (
   R   RD   R%   R&   R   RW   R'   R   R(   R)   (   R   R    R-   (    (    sA   lib/python2.7/site-packages/networkx/drawing/tests/test_layout.pyt   test_center_parameter¨   s    c      	   C   sç   t  j d ƒ } t t t  j | d d ƒt t t  j | d d ƒt t t  j | d d ƒt t t  j | d d ƒt t t  j | d d d d	 ƒt t t  j | d d
 ƒt t t  j | d d d d ƒt t t  j	 | d d ƒd  S(   Ni   R:   R/   i   (   i   i   i   (   i   i   i   (   i   i   i   (   i   i   i   (   i   i   (   i   i   i   (   i   i   (   i   i   i   (
   R   RD   R   RE   R%   R&   R'   R   R(   R)   (   R   R    (    (    sA   lib/python2.7/site-packages/networkx/drawing/tests/test_layout.pyt   test_center_wrong_dimensions¶   s    c         C   sû   t  j ƒ  } t  j | d d ƒ} t | i  ƒ t  j | d d ƒ} t | i  ƒ t  j | | ƒ } t | i  ƒ t  j | d d ƒ} t | i  ƒ t  j | d d ƒ} t | i  ƒ t  j | d d ƒ} t | i  ƒ t  j	 | d d ƒ} t | i  ƒ d  S(	   NR:   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (
   R   t   empty_graphR%   R   R&   R*   R'   R   R(   R)   (   R   R    R-   (    (    sA   lib/python2.7/site-packages/networkx/drawing/tests/test_layout.pyt   test_empty_graphÁ   s    c   
      C   s°  t  j d d ƒ } t  j j | ƒ \ } } t  j | | ƒ } t t | ƒ t | ƒ ƒ | t | ƒ d d } | t | ƒ d d } x# | D] } t | | d | ƒ qŒ Wx# | D] } t | | d | ƒ q² Wt  j | | d d d d d d d	 d
 ƒ} t t | ƒ t | ƒ ƒ | t | ƒ d d
 } | t | ƒ d d
 }	 x# | D] } t | | d
 | ƒ qKWx# | D] } t | | d
 |	 ƒ qqWt t	 t  j | | d d ƒd  S(   Ni   i   i    t   alignt
   horizontalR:   i   R9   t   aspect_ratioi   t   foo(   i   i   (
   R   t   complete_bipartite_grapht	   bipartitet   setsR*   R   t   lenR4   R   RE   (
   R   R    t   topt   bottomR-   t   top_xt   bottom_xt   nodet   top_yt   bottom_y(    (    sA   lib/python2.7/site-packages/networkx/drawing/tests/test_layout.pyt   test_bipartite_layoutÒ   s.    	c         C   s¬   t  j j j } t j d d g ƒ } d t j d d g d d g g ƒ } | | t | d d d	 d ƒ\ } } t | d
 d d d ƒ t | d d ƒ t | d d ƒ d  S(   Ng      @g      @i   gš™™™™™¹?g       @g333333Ó?t
   meanweighti    R/   i   i   g      à¿g      à?(   R   RH   RI   t   _kamada_kawai_costfnR   R3   R   (   R   t   costfnR   t   invdistt   costt   grad(    (    sA   lib/python2.7/site-packages/networkx/drawing/tests/test_layout.pyt   test_kamada_kawai_costfn_1dð   s    %$c         C   sP  t  j j j } t j d d g d d g d d g g ƒ } d t j d d	 d
 g d	 d d g d
 d d g g ƒ } d } | | j ƒ  t | d | d d ƒ\ } } d | t j t j | d d ƒd ƒ } xv t | j	 d ƒ D]a } xX t | d | j	 d ƒ D]< }	 | t j
 j | | | |	 ƒ | | |	 d d 7} qÿ WqÞ Wt | | ƒ d }
 xó t | j	 d ƒ D]Þ } xÕ t | j	 d ƒ D]À } | | j	 d | } | j ƒ  } | | c |
 7<| | t | d | d | j	 d ƒd } | | c d |
 8<| | t | d | d | j	 d ƒd } t | | | | d |
 d d ƒq„WqjWd  S(   NgÍÌÌÌÌÌô?gš™™™™™	Àgš™™™™™@g333333Ó¿gffffff@g      @i   gš™™™™™¹?gÍÌÌÌÌÌ @g333333û?gš™™™™™É?g333333ã?g333333Ó?Ro   R/   i   g      à?RY   i    g      ð?g-Cëâ6?t   placesi   (   R   RH   RI   Rp   R   R3   t   ravelt   sumRX   RK   t   linalgt   normR   t   flatten(   R   Rq   R   Rr   t   meanwtRs   Rt   t   expected_costt   it   jt   dxt   ndt   dmt   idxt   pos0t   cplust   cminus(    (    sA   lib/python2.7/site-packages/networkx/drawing/tests/test_layout.pyt   test_kamada_kawai_costfn_2dü   s8    	*!>N(   t   __name__t
   __module__R   R+   R   t   classmethodR
   R   R$   R.   R1   R2   R>   RB   RC   RF   RM   RS   RT   RV   RZ   R[   R\   R^   Rn   Ru   R‡   (    (    (    sA   lib/python2.7/site-packages/networkx/drawing/tests/test_layout.pyR      s.   						
													(   t   __doc__t   noseR    t
   nose.toolsR   R   R   R   t   networkxR   t   objectR   (    (    (    sA   lib/python2.7/site-packages/networkx/drawing/tests/test_layout.pyt   <module>   s   "