U
    h5                     @   sz   d dl mZ d dlZedZd dlZdZdd Zdd Z	d	d
 Z
dd Zdd Zdd ZG dd dZG dd dZdS )    )sqrtNZnumpy)Ztracemin_pcgZtracemin_luZlanczosZlobpcgc               	   C   s@   t d tdd} t tj tj| dd W 5 Q R X dS z.Test that "tracemin_chol" raises an exception.scipy      Ztracemin_cholmethodN)pytestimportorskipnxbarbell_graphraisesNetworkXErroralgebraic_connectivityG r   U/tmp/pip-unpacked-wheel-j2te_plx/networkx/linalg/tests/test_algebraic_connectivity.py)test_algebraic_connectivity_tracemin_chol   s    
r   c               	   C   s@   t d tdd} t tj tj| dd W 5 Q R X dS r   )r	   r
   r   r   r   r   fiedler_vectorr   r   r   r   !test_fiedler_vector_tracemin_chol   s    
r   c               	   C   s@   t d tdd} t tj tj| dd W 5 Q R X dS r   )r	   r
   r   r   r   r   spectral_orderingr   r   r   r   $test_spectral_ordering_tracemin_chol   s    
r   c               	   C   sx   t d tdd} t| }ttjjd|j	d fdj
}t jtjdd tjjj||d	d
dd W 5 Q R X dS )z1Test that "tracemin_unknown" raises an exception.r   r   r      r   )sizezUnknown linear system solver)matchFg:0yE>Ztracemin_unknown
normalizedtolr   N)r	   r
   r   r   laplacian_matrixnpZasarrayrandomnormalshapeTr   r   linalgZalgebraicconnectivityZ_tracemin_fiedler)r   LXr   r   r   $test_fiedler_vector_tracemin_unknown%   s    

     r(   c                  C   s   t d tdd} t| }|dddhdddhfks<tttd}t| |} t| }||d |d |d h|d |d |d hfkstd S )	Nr      r   r      r   r   Zbadfec)	r	   r
   r   r   Zspectral_bisectionAssertionErrordict	enumerateZrelabel_nodes)r   Cmappingr   r   r   test_spectral_bisection1   s    


r0   c                 C   sr   t j|}|tjdddks"t| | }t j|}|| tj|| ddksTt|tj|| ddksntd S )Nr   Hz>abs)r    r%   Znormr	   approxr+   )Alxr   ynyr   r   r   check_eigenvector@   s    r:   c                   @   s  e Zd Zejdedd Zejdedd Zejdedd Z	dd	 Z
ejded
d Zejdedd Zdd Zejdedd Zejdedd Zejdedd Zejdedd Zejdddejfddejffejdedd ZdS ) TestAlgebraicConnectivityr   c                 C   s8   t  }tjt jt j||d tjt jt j||d d S )Nr   )r   DiGraphr	   r   ZNetworkXNotImplementedr   r   selfr   r   r   r   r   test_directedM   s       z'TestAlgebraicConnectivity.test_directedc                 C   sp   t  }tjt jt j||d tjt jt j||d |dd tjt jt j||d tjt jt j||d d S )Nr   r   )r   Graphr	   r   r   r   r   add_edger=   r   r   r   test_null_and_singletonU   s    z1TestAlgebraicConnectivity.test_null_and_singletonc                 C   sz   t  }|td t |dks(ttjt jt j	||d |j
dddd t |dks`ttjt jt j	||d d S )Nr*   r   r   r   weight)r   r@   Zadd_nodes_fromranger   r+   r	   r   r   r   rA   r=   r   r   r   test_disconnected^   s    z+TestAlgebraicConnectivity.test_disconnectedc                 C   sD   t d td}t jtjtj|dd t jtjtj|dd d S )Nr   r   unknownr   )r	   r
   r   
path_graphr   r   r   r   r>   r   r   r   r   test_unrecognized_methodh   s    

z2TestAlgebraicConnectivity.test_unrecognized_methodc                 C   sn   t d t }|jdddd t|}tj|d|dt jddd	ksNttj	|d|d}t
|d| d S )
Nr   r   r   rC   -q=r   r   r*   r1   r2   )r	   r
   r   r@   rA   r   r   r4   r+   r   r:   r>   r   r   r5   r7   r   r   r   test_two_nodesn   s    

 z(TestAlgebraicConnectivity.test_two_nodesc                 C   s   t d t }|jdddd |jdddd |jdddd dtj|dd	 }tj|dd
|dt jdddksxttj	|dd
|d}t
|d| d S )Nr   r   g    חA)spamr   rO   rC   rK   )rD   r   r      r1   r2   )r	   r
   r   
MultiGraphrA   r   r   r4   r+   r   r:   rM   r   r   r   test_two_nodes_multigraphz   s     
   z3TestAlgebraicConnectivity.test_two_nodes_multigraphc                 C   sx   t d td}t|}dtdtd  }tj|ddd}|t j|ddksXttj	|ddd}t
||| d S )	Nr      r*   rK   ZtraceminrL   r1   r2   r	   r
   r   rH   r   r   r   r4   r+   r   r:   )r>   r   r5   sigmaacr7   r   r   r   test_abbreviation_of_method   s    


z5TestAlgebraicConnectivity.test_abbreviation_of_methodc                 C   sx   t d td}t|}dtdtd  }tj|d|d}|t j|ddksXttj	|d|d}t
||| d S Nr   rU   r*   rK   rL   r1   r2   rV   r>   r   r   r5   rW   rX   r7   r   r   r   	test_path   s    


z#TestAlgebraicConnectivity.test_pathc                 C   sv   t d td}|ddg t|}d}tj|d|d}|t j|dd	ksVttj	|d|d}t
||| d S )
Nr   r   )r   r*   )r   r   g׋ʄ?rK   rL   r1   r2   )r	   r
   r   rH   Zadd_edges_fromr   r   r4   r+   r   r:   r[   r   r   r   !test_problematic_graph_issue_2381   s    


z;TestAlgebraicConnectivity.test_problematic_graph_issue_2381c                 C   sp   t d td}t|}dtd }tj|d|d}|t j|ddksPttj	|d|d}t
||| d S rZ   r	   r
   r   Zcycle_graphr   r   r   r4   r+   r   r:   r[   r   r   r   
test_cycle   s    


z$TestAlgebraicConnectivity.test_cyclec                 C   st   t d td}t|}dtd }tj|d|dd}|t j|ddksRttj	|d|dd}t
||| d S )	Nr   rU   r*   rK   r   )r   r   seedr1   r2   r^   r[   r   r   r   test_seed_argument   s    


z,TestAlgebraicConnectivity.test_seed_argument)r   rW   laplacian_fnFg'?TgG'91Ŵ?c           	   \   C   sP  t d tdddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[gZ}||}zFtj||d\|d]t j|d^d_ksttj||d\|d]}t||| W n4 tj	k
rJ } z|j
d`kr: W 5 d }~X Y nX d S )aNr   )r   
   )r   )   )r   ;   )r*      )r*   *   )r*   <   )r)   rR   )r)   +   )r)   9   )r   rU   )r   ,   )r   :   )r      )r   8   )r   rj   )rR   rc   )rR      )      )rp   rn   )rp   rl   )rU   rf   )rU       )	      )rs   5   )rs   re   )rc      )      )rw   ru   )rw   rh   )rf      )rm   rq   )rm      )rq      )rv      )rv   1   )ry      )ry   2   )      )r      )r   6   )r      )r   7   )r   rt   )r   rd   )r   rx   )r   rg   )   ro   )r   !   )r   rj   )   rr   )r   "   )r   rl   )rt   rx   )rz   #   )rz   ri   )r{   $   )r{   rk   )r|   3   )r|   re   )r~   4   )r~   rh   )   r   )r   r   )r   rn   )   r   )r   r   )r   ru   )ro   /   )rr   0   )r   -   )r   .   )r   r   )r   %   )r   &   )r   '   )r   r}   )r   (   )r   r   )r   r   )r   r   )r   r   )rd   r   )rg   r   )ri   r}   )rk   r   )r   r   )r   r   )r   r   )r   r   )r   r   rK   r   r1   r2   ))zCholesky solver unavailable.)zLU solver unavailable.)r	   r
   r   r@   r   r4   r+   r   r:   r   args)	r>   r   rW   rb   r   r   r5   r7   errr   r   r   test_buckminsterfullerene   s    	
^   z3TestAlgebraicConnectivity.test_buckminsterfullereneN)__name__
__module____qualname__r	   markparametrizemethodsr?   rB   rF   rJ   rN   rT   rY   r\   r]   r_   ra   r   r   Znormalized_laplacian_matrixr   r   r   r   r   r;   L   s8   


	











r;   c                   @   sJ  e Zd ZejejejejfZe	j
dedd Ze	j
dedd Zdd Ze	j
ded	d
 Ze	j
dedd Ze	j
dedd Ze	j
dedd Ze	j
dedd Ze	j
ddddddddddddg
ddddddddddg
gfdddddddddddg
ddddddddddg
gffe	j
ded d! Zd"S )#TestSpectralOrderinggraphc                 C   s   | }t tjtj| d S )N)r	   r   r   r   r   r>   r   r   r   r   r   test_nullgraph9  s    z#TestSpectralOrdering.test_nullgraphc                 C   s\   | }| d t|dgks$t|jdddd |jdddd t|dgksXtd S )Nr7   r   rC   )add_noder   r   r+   rA   r   r   r   r   test_singleton>  s    
z#TestSpectralOrdering.test_singletonc                 C   s$   t d}tjt jt j|dd d S )Nr   rG   r   )r   rH   r	   r   r   r   rI   r   r   r   rJ   G  s    
z-TestSpectralOrdering.test_unrecognized_methodr   c                 C   sz   t d t }|jdddgdd tj|d|d}t|t|ksJtdd	ht|d d
 t|dd  fksvtd S )Nr   r   r*   r   r   r)   r*   r*   r)   r   rO   rC   )rD   r   r   r)   )r	   r
   r   r@   add_weighted_edges_fromr   setr+   r>   r   r   orderr   r   r   test_three_nodesK  s    
z%TestSpectralOrdering.test_three_nodesc                 C   sv   t d t }|ddddg tj||d}t|t|ksFtddht|d d	 t|d
d  fksrtd S )Nr   r   r   r   )r*   r)   r*   r   r*   r)   r   r   )r	   r
   r   MultiDiGraphr   r   r   r+   r   r   r   r   test_three_nodes_multigraphT  s    
z0TestSpectralOrdering.test_three_nodes_multigraphc                 C   s`   t d ttd}tj| t }t	|| tj
||d}||tt|fks\td S )Nr   rc   r   r	   r
   listrE   r    r!   shuffler   r@   add_pathr   reversedr+   r>   r   pathr   r   r   r   r   r\   ]  s    
zTestSpectralOrdering.test_pathc                 C   sb   t d ttd}tj| t }t	|| tj
||dd}||tt|fks^td S )Nr   rc   r   )r   r`   r   r   r   r   r   ra   g  s    
z'TestSpectralOrdering.test_seed_argumentc                 C   s   t d t }t|tddd t|tddd tj||d}t|t|ks\tt	tdddt	tddd	t	tdddt	td
dd	g}|d d |kst|dd  |kstd S )Nr   r   rc   r*   r   r   rU   r   rP   rs   r   )
r	   r
   r   r@   r   rE   r   r   r+   r   )r>   r   r   r   Zseqsr   r   r   rF   q  s    
z&TestSpectralOrdering.test_disconnected)r   expected_orderFr   r*   r   r)   r   r   rR   rs   rp   rU   Tc                 C   st   t d ttd}t }tj||dd |j|d |d dd t|	 }tj
|||d}||ksptd S )	Nr   rc   r   rC   r   r   r   )r   r   )r	   r
   r   rE   r   r@   r   rA   r   Ztodenser   r+   )r>   r   r   r   r   r   r5   r   r   r   r   r_     s    	
zTestSpectralOrdering.test_cycleN)r   r   r   r   r@   r<   rS   r   Z_graphsr	   r   r   r   r   rJ   r   r   r   r\   ra   rF   r_   r   r   r   r   r   6  s0   




	
	
22r   )mathr   r	   r
   r    Znetworkxr   r   r   r   r   r(   r0   r:   r;   r   r   r   r   r   <module>   s   
 k