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 )    )sqrtN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   c/var/www/html/venv/lib/python3.8/site-packages/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    


r1   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   rA   Zadd_nodes_fromranger   r,   r
   r   r   r   rB   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   rD   -q=r   r	   r+   r2   r3   )r
   r   r   rA   rB   r    r   r5   r,   r   r;   r?   r	   r   r6   r8   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   rP   rD   rL   )rE   r   r	      r2   r3   )r
   r   r   
MultiGraphrB   r    r   r5   r,   r   r;   rN   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+   rL   ZtraceminrM   r2   r3   r
   r   r   rI   r    r   r   r5   r,   r   r;   )r?   r   r6   sigmaacr8   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   rV   r+   rL   rM   r2   r3   rW   r?   r	   r   r6   rX   rY   r8   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׋ʄ?rL   rM   r2   r3   )r
   r   r   rI   Zadd_edges_fromr    r   r5   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 r[   r
   r   r   Zcycle_graphr    r   r   r5   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   rV   r+   rL   r   )r   r	   seedr2   r3   r_   r\   r   r   r   test_seed_argument   s    


z,TestAlgebraicConnectivity.test_seed_argument)r   rX   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*   rS   )r*   +   )r*   9   )r   rV   )r   ,   )r   :   )r      )r   8   )r   rk   )rS   rd   )rS      )      )rq   ro   )rq   rm   )rV   rg   )rV       )	      )rt   5   )rt   rf   )rd      )      )rx   rv   )rx   ri   )rg      )rn   rr   )rn      )rr      )rw      )rw   1   )rz      )rz   2   )      )r      )r   6   )r      )r   7   )r   ru   )r   re   )r   ry   )r   rh   )   rp   )r   !   )r   rk   )   rs   )r   "   )r   rm   )ru   ry   )r{   #   )r{   rj   )r|   $   )r|   rl   )r}   3   )r}   rf   )r   4   )r   ri   )   r   )r   r   )r   ro   )   r   )r   r   )r   rv   )rp   /   )rs   0   )r   -   )r   .   )r   r   )r   %   )r   &   )r   '   )r   r~   )r   (   )r   r   )r   r   )r   r   )r   r   )re   r   )rh   r   )rj   r~   )rl   r   )r   r   )r   r   )r   r   )r   r   )r   r   rL   r   r2   r3   ))zCholesky solver unavailable.)zLU solver unavailable.)r
   r   r   rA   r   r5   r,   r   r;   r   args)	r?   r   rX   rc   r	   r   r6   r8   errr   r   r   test_buckminsterfullerene   s    	
^   z3TestAlgebraicConnectivity.test_buckminsterfullereneN)__name__
__module____qualname__r
   markparametrizemethodsr@   rC   rG   rK   rO   rU   rZ   r]   r^   r`   rb   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 )Nr8   r   rD   )add_noder   r   r,   rB   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   rH   r   )r   rI   r
   r   r   r   rJ   r   r   r   rK   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   rP   rD   )rE   r	   r   r*   )r
   r   r   rA   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   rd   r   r
   r   listrF   r!   r"   shuffler   rA   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   rd   r   )r	   ra   r   r   r   r   r   rb   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   rd   r+   r   r   rV   r   rQ   rt   r   )
r
   r   r   rA   r   rF   r   r   r,   r   )r?   r	   r   r   Zseqsr   r   r   rG   q  s    
z&TestSpectralOrdering.test_disconnected)r   expected_orderFr   r+   r   r*   r   r   rS   rt   rq   rV   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   rd   r   rD   r   r   r   )r   r	   )r
   r   r   rF   r   rA   r   rB   r    Ztodenser   r,   )r?   r   r   r	   r   r   r6   r   r   r   r   r`     s    	
zTestSpectralOrdering.test_cycleN)r   r   r   r   rA   r=   rT   r   Z_graphsr
   r   r   r   r   rK   r   r   r   r]   rb   rG   r`   r   r   r   r   r   6  s0   




	
	
22r   )mathr   r
   r   r!   Znetworkxr   r   r   r   r   r)   r1   r;   r<   r   r   r   r   r   <module>   s   
 k