3
Md<                 @   sF   d Z ddlZddlmZ ddlZejdZejdZG dd dZ	dS )z Unit tests for layout functions.    N)almost_equalnumpyZscipyc               @   s   e Zd Zedd Zedd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Z d9S ):
TestLayoutc             C   s8   t jdd| _t j | _t j| jd t jdd| _d S )N   Zabcdef   )nxZgrid_2d_graphGiGraphGsZadd_pathbigG)cls r   T/var/www/html/virt/lib/python3.6/site-packages/networkx/drawing/tests/test_layout.pysetup_class   s    
zTestLayout.setup_classc             C   sL   g }d }x>| D ]6}|d k	r<| | | }|j tj||d  | | }qW |S )Ng      ?)appendr   dot)Z	positions	distancesZprev_valkdiffr   r   r   collect_node_distances   s    
z!TestLayout.collect_node_distancesc             C   s\   t jd}tjtt j|dgd dd	d}tjtt j|ddg|d t j|ddg|d d S )
N   r   )fixed   )r      )r   posr   )r   r   )r   r   )r   
path_graphpytestraises
ValueErrorspring_layout)selfGr   r   r   r   test_spring_fixed_without_pos   s
    

z(TestLayout.test_spring_fixed_without_posc                sl   dd l  tj }|jd
dddg ddi}dg}tj|||d}t fdd|j D }| shtd	d S )Nr   r   r              )r   r   c             3   s"   | ]}|D ]} j |V  q
qd S )N)isnan).0Zcoordsc)mathr   r   	<genexpr>/   s    z2TestLayout.test_spring_init_pos.<locals>.<genexpr>zvalues should not be nan)r   r   )r   r   )r   r   )r   r#   )r$   r$   )r(   r   r	   Zadd_edges_fromfruchterman_reingold_layoutanyvaluesAssertionError)r    r!   Zinit_posZ	fixed_posr   Zhas_nanr   )r(   r   test_spring_init_pos%   s    zTestLayout.test_spring_init_posc             C   sx   g }t j| t j| t j| t j| t j| t j| t j| t j|| t j	| t j
| t j| d S )N)r   random_layoutcircular_layoutplanar_layoutr   r*   spectral_layoutshell_layoutbipartite_layoutspiral_layoutmultipartite_layoutkamada_kawai_layout)r    r!   r   r   r   test_smoke_empty_graph2   s    








z!TestLayout.test_smoke_empty_graphc             C   s   | j }t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
| tj| tj| tj|dd tj|dd d S )Nr   )dimr#   )r   r   r/   r0   r1   r   r*   r   r2   Zto_directedr3   r5   r7   )r    r!   r   r   r   test_smoke_int@   s     








zTestLayout.test_smoke_intc             C   s   | j }tj| tj| tj| tj| tj| tj| tj| tj	| tj
| tj
|dd tj
|dd d S )Nr   )r9   r#   )r
   r   r/   r0   r1   r   r*   r2   r3   r5   r7   )r    r!   r   r   r   test_smoke_stringR   s    








zTestLayout.test_smoke_stringc             C   sx   t j|}|| }|| }t jt|j }|jd|jd }|d| kj sTt||kj sdt||kj sttd S )Nr   r   )r   arraylistr,   maxminallr-   )r    r   scalecenterlowhivposlengthr   r   r   check_scale_and_center`   s    
z!TestLayout.check_scale_and_centerc             C   s   | j }d}tjd}|jd |tj||dddd |tj|d	|dd	|d |tj|d	|dd	|d |tj|d	|dd	|d |tj|d	|dd	|d |tj	|d	|dd	|d |tj
|d	|dd	|d d}|tj
|d
d	|dd	|d d S )Nr   r   	   )rB   g      ?      @      @)rA   rB   r   r#   )r9   rA   rB   )r   r   )rI   rJ   )r   r#   r   )rG   r   complete_graphadd_noder/   r   r2   r0   r3   r5   r7   )r    scr'   r!   r   r   r   test_scale_and_center_argj   s    

z$TestLayout.test_scale_and_center_argc             C   s    t jd}tjt jt j| d S )NrH   )r   rK   r   r   ZNetworkXExceptionr1   )r    r!   r   r   r   #test_planar_layout_non_planar_input{   s    
z.TestLayout.test_planar_layout_non_planar_inputc             C   s4   t j }|jddgddgddgd t j| d S )Nr   r   r   )r   r   r   )r   ZPlanarEmbeddingset_datar1   )r    Z	embeddingr   r   r   (test_smoke_planar_layout_embedding_input   s    z3TestLayout.test_smoke_planar_layout_embedding_inputc             C   s   | j }d}tjd}|jd |tj|dd	d |tj|d|d |tj|d|d |tj|d|d |tj|d|d |tj	|d|d |tj
|d|d d
}|tj
|ddd|d d S )Nr   rH         ?)rA   rB   r   r#   )r9   )r   r   )rR   rR   )r   r   r   )rG   r   rK   rL   r/   r   r2   r0   r3   r5   r7   )r    rM   r'   r!   r   r   r   test_default_scale_and_center   s    

z(TestLayout.test_default_scale_and_centerc             C   sr   t jd}tjtt j|dd tjtt j|dd tjtt j|dd tjtt j|dd tjtt j|dd d S )Nr   r   )r9   r#   )r   r   r   r   r   r0   r3   r1   )r    r!   r   r   r   (test_circular_planar_and_shell_dim_error   s    
z3TestLayout.test_circular_planar_and_shell_dim_errorc             C   sh   t j| j}t jjj|}|jdks(tt jjj|dd}|jdksHtt jjj|}|jdksdtd S )N   r   r#   )r9   )rU   r   )rU   r#   )rU   r   )	r   Zto_numpy_arrayr
   drawinglayoutZ_fruchterman_reingoldshaper-   _sparse_fruchterman_reingold)r    Ar   r   r   r   test_adjacency_interface_numpy   s    z)TestLayout.test_adjacency_interface_numpyc             C   sl   t j| jdd}t jjj|}|jdks,tt jjj|}|jdksHtt jjj|dd}|jd	kshtd S )
Nd)ZdtyperU   r   r#   )r9   )rU   r   )rU   r   )rU   r#   )	r   Zto_scipy_sparse_matrixr
   rV   rW   rY   rX   r-   Z_sparse_spectral)r    rZ   r   r   r   r   test_adjacency_interface_scipy   s    z)TestLayout.test_adjacency_interface_scipyc             C   s   t jd}t j|}|d j  s&tt jd}t j|dgddgdgg}|d j  s\t|d j slttjj|d dkstt j|dgddgdggdd}tjj|d dkstd S )Nr   r   r   r   r#   )rotate)r   r   r3   r+   r-   r   linalgnorm)r    r!   rE   r   r   r   test_single_nodes   s    


zTestLayout.test_single_nodesc             C   s    t j| j}t j| j|d}d S )N)r   )r   r0   r   r*   )r    r   nposr   r   r   +test_smoke_initial_pos_fruchterman_reingold   s    z6TestLayout.test_smoke_initial_pos_fruchterman_reingoldc             C   s   t j| j}t j| j|dgd}t|d t|d ks<tt j| j}t j| j|dgd}x.tdD ]"}t|d | |d	 | sftqfW d S )
Nr   )r   r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )	r   r0   r   r   tupler-   r   ranger   )r    r   rb   axisr   r   r   $test_fixed_node_fruchterman_reingold   s    z/TestLayout.test_fixed_node_fruchterman_reingoldc             C   s  t jd}t j|dd t j|dd}t|d dks:tt j|dd}t|d dks\tt j|d	d}t|d d
ks~tt j|dd}t|d dkstt j	|dd}t|d dkstt j
|dd}t|d dk stt j|dd}t|d dks
td S )Nr   )rB   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   r/   r0   rd   r-   r1   r   r*   r2   r3   r5   )r    r!   rE   r   r   r   test_center_parameter   s     
z TestLayout.test_center_parameterc             C   s   t jd}tt jtt jks"ttjtt j	|dd tjtt j
|dd tjtt j|dd tjtt j|dd tjtt j|dd	d tjtt j|d
d tjtt j|ddd tjtt j|dd tjtt j|dd tjtt j|dd d S )Nr   )rB   r#   )r9   rB   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   )r   r   r   )r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   idr   r*   r-   r   r   r   r/   r0   r1   r2   r3   r5   r7   )r    r!   r   r   r   test_center_wrong_dimensions   s    
z'TestLayout.test_center_wrong_dimensionsc             C   s.  t j }t j|dd}|i ks"tt j|dd}|i ks<tt j|dd}|i ksVtt j||}|i ksntt j|dd}|i kstt j|dd}|i kstt j	|dd}|i kstt j
|d	d}|i kstt j|d
d}|i k stt j|dd}|i kstt j|dd}|i ks*td S )Nr   )rB   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   empty_graphr/   r-   r0   r1   r4   r   r*   r2   r3   r5   r6   r7   )r    r!   rE   r   r   r   test_empty_graph   s.    zTestLayout.test_empty_graphc       
      C   s`  t jdd}t jj|\}}t j||}t|t|ks<t|t|d  d }|t|d  d }x |D ]}|| d |ksjtqjW x |D ]}|| d |kstqW t j||dd
ddd}t|t|kst|t|d  d }|t|d  d }	x$|D ]}|| d |ks tq W x$|D ]}|| d |	ks&tq&W tj	t
t j||dd	 d S )Nr#   r   r   
horizontalr   r   )alignrB   rA   Zaspect_ratiofoo)rn   )r   r   )r   Zcomplete_bipartite_graphZ	bipartiteZsetsr4   lenr-   r=   r   r   r   )
r    r!   topZbottomrE   Ztop_xZbottom_xnodeZtop_yZbottom_yr   r   r   test_bipartite_layout  s(    



z TestLayout.test_bipartite_layoutc                s   d}t j| }t j|tt|ks,td xB|D ]:} | }t fddt d |D sht |7  q6W t j|d	ddd
tt|kstd xB|D ]:} | }t fddt d |D st |7  qW tjt	t j|dd d S )Nr   r      r      c             3   s&   | ]}  d  | d  kV  qdS )r   Nr   )r&   i)startrE   r   r   r)   (  s    z6TestLayout.test_multipartite_layout.<locals>.<genexpr>r   rm   )rn   rA   rB   c             3   s&   | ]}  d  | d  kV  qdS )r   Nr   )r&   rv   )rw   rE   r   r   r)   1  s    ro   )rn   )r   r   rt   r   ru   )r   r   )
r   Zcomplete_multipartite_graphr6   rp   r-   r@   re   r   r   r   )r    sizesr!   nendr   )rw   rE   r   test_multipartite_layout  s"    


&
&z#TestLayout.test_multipartite_layoutc             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\}}t|dsVtt|d dshtt|d dsztd S )Ng      @g      @r   g?g       @g333333?r   )
meanweightr9   r#   r   g      ?g      ?g      ?g      ?g      )r   rV   rW   _kamada_kawai_costfnr   r<   r   r-   )r    costfnr   invdistcostgradr   r   r   test_kamada_kawai_costfn_1d6  s    
z&TestLayout.test_kamada_kawai_costfn_1dc          	   C   s  t jjj}||j t|||d\}}d| tjtj|ddd  }xht|jd D ]V}	xPt|	d |jd D ]8}
tj	j
||	 ||
  }||||	 |
  d d 7 }qnW qTW t||std}xt|jd D ]}xt|jd D ]}||jd  | }|j }||  |7  < ||t|||jd dd }||  d| 8  < ||t|||jd dd }t|| || d|  d	d
stqW qW d S )N)r|   r9   g      ?r   )rf   r   r   g      ?g-C6?r   )Zplaces)r   rV   rW   r}   Zravelr   sumre   rX   r_   r`   r   r-   flatten)r    r   r   meanwtr9   r~   r   r   Zexpected_costrv   jr   ZdxnddmidxZpos0ZcplusZcminusr   r   r   check_kamada_kawai_costfnB  s,    
 $z$TestLayout.check_kamada_kawai_costfnc             C   s   dt jdddgdddgdddgg }d}t jddgd
dgddgg}| j|||d t jdddgdddgdddgg}| j|||d d S )Nr   g?g @g333333?g?g333333?g333333?g?g	@g@gffffff@g      @r   g?g333333!@gffffff!@
   g      ?gffffff@g333333"@g333333 @g?r#   g	g333333ӿgffffff!ig      gffffffg333333 )r   r<   r   )r    r   r   r   r   r   r   test_kamada_kawai_costfna  s    &"z#TestLayout.test_kamada_kawai_costfnc       	      C   s   | j }tj|dd}tj|dd}| j|}| j|}t|t|ksJttj|dd}| j|}x6tdt|d D ] }t|| ||d  dsvtqvW d S )Ngffffff?)
resolutiong(\?T)Zequidistantr   r   )	r
   r   r5   r   r   r-   re   rp   r   )	r    r!   Zpos_standardZpos_tighterr   Zdistances_tighterZpos_equidistantZdistances_equidistantr\   r   r   r   test_spiral_layouto  s    


zTestLayout.test_spiral_layoutc             C   s   t j }t j|dd}t j|i ks(tt jd}ddd}t j|}tjj}|dd t|j	  D d	k sptt jd
}dddd}t j|}|ddddkstt j|dd}|ddddkstd S )Nr   )rB   r                 ?)r   r   c             S   s   g | ]}t |qS r   )r   )r&   xr   r   r   
<listcomp>  s    z7TestLayout.test_rescale_layout_dict.<locals>.<listcomp>gư>r#   r         ?)r   r   r   )rA   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   r   )r   r   )r   r   )r   r   r   )r   r   )r   r   )r   r   )
r   rk   r/   Zrescale_layout_dictr-   r   r_   r`   zipr,   )r    r!   rE   Zs_vposr`   r   r   r   test_rescale_layout_dict  s    


"

z#TestLayout.test_rescale_layout_dictN)!__name__
__module____qualname__classmethodr   staticmethodr   r"   r.   r8   r:   r;   rG   rN   rO   rQ   rS   rT   r[   r]   ra   rc   rg   rh   rj   rl   rs   r{   r   r   r   r   r   r   r   r   r   r      s8   
		r   )
__doc__Znetworkxr   Znetworkx.testingr   r   Zimportorskipr   Ztest_smoke_empty_graphscipyr   r   r   r   r   <module>   s   

