o
    ]Zh5                     @   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   V   t d tdd} t tj tj| dd W d   dS 1 s$w   Y  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   `/var/www/auris/lib/python3.10/site-packages/networkx/linalg/tests/test_algebraic_connectivity.py)test_algebraic_connectivity_tracemin_chol   
   
"r   c                  C   r   r   )r   r   r   r   r   r   fiedler_vectorr   r   r   r   !test_fiedler_vector_tracemin_chol   r   r   c                  C   r   r   )r   r   r   r   r   r   spectral_orderingr   r   r   r   $test_spectral_ordering_tracemin_chol   r   r   c                  C   s   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 d   dS 1 s@w   Y  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| }|h dh dfksJ ttd}t| |} t| }||d |d |d h|d |d	 |d
 hfksGJ d S )Nr      r   >   r   r      >   r,   r   r   Zbadfecr   r-   r   r   )r   r   r   r   Zspectral_bisectiondict	enumerateZrelabel_nodes)r   Cmappingr   r   r   test_spectral_bisection1   s   


r2   c                 C   sr   t j|}|tjdddksJ | | }t j|}|| tj|| ddks*J |tj|| ddks7J d S )Nr   Hz>abs)r#   r(   Znormr   approx)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J tjt jt j||d |j	dddd t |dks0J tjt jt j||d d S )Nr-   r   r	   r   weight)
r   rB   Zadd_nodes_fromranger   r   r   r   r   rC   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s'J tj|d|d}t	|d| d S )
Nr   r   r   rE   -q=r!   r
   r-   r3   r4   )
r   r   r   rB   rC   r"   r   r6   r   r<   r@   r
   r   r7   r9   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s<J tj|dd
|d}t	|d| d S )Nr   r   g    חA)spamr   rQ   rE   rM   )rF   r!   r
      r3   r4   )
r   r   r   
MultiGraphrC   r"   r   r6   r   r<   rO   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s,J tj|ddd}t	||| d S )	Nr      r-   rM   ZtraceminrN   r3   r4   
r   r   r   rJ   r"   r   r   r6   r   r<   )r@   r   r7   sigmaacr9   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s,J tj|d|d}t	||| d S Nr   rW   r-   rM   rN   r3   r4   rX   r@   r
   r   r7   rY   rZ   r9   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s+J tj|d|d}t	||| d S )
Nr   r   )r   r-   )r   r   g׋ʄ?rM   rN   r3   r4   )
r   r   r   rJ   Zadd_edges_fromr"   r   r6   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s(J tj|d|d}t	||| d S r\   
r   r   r   Zcycle_graphr"   r   r   r6   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s)J tj|d|dd}t	||| d S )	Nr   rW   r-   rM   r   )r!   r
   seedr3   r4   r`   r]   r   r   r   test_seed_argument   s   


z,TestAlgebraicConnectivity.test_seed_argument)r    rY   laplacian_fnFg'?TgG'91Ŵ?c           	   
   C   s   t d tg d}||}z$tj||d|dt j|ddks#J tj||d|d}t||| W d S  tjyN } z|j	dvrC W Y d }~d S d }~ww )Nr   )Z)r   
   )r   )   )r   ;   )r-      )r-   *   )r-   <   )r,   rT   )r,   +   )r,   9   )r   rW   )r   ,   )r   :   )r      )r   8   )r   rl   )rT   re   )rT      )      )rr   rp   )rr   rn   )rW   rh   )rW       )	      )ru   5   )ru   rg   )re      )      )ry   rw   )ry   rj   )rh      )ro   rs   )ro      )rs      )rx      )rx   1   )r{      )r{   2   )      )r      )r   6   )r      )r   7   )r   rv   )r   rf   )r   rz   )r   ri   )   rq   )r   !   )r   rl   )   rt   )r   "   )r   rn   )rv   rz   )r|   #   )r|   rk   )r}   $   )r}   rm   )r~   3   )r~   rg   )r   4   )r   rj   )   r   )r   r   )r   rp   )   r   )r   r   )r   rw   )rq   /   )rt   0   )r   -   )r   .   )r   r   )r   %   )r   &   )r   '   )r   r   )r   (   )r   r   )r   r   )r   r   )r   r   )rf   r   )ri   r   )rk   r   )rm   r   )r   r   )r   r   )r   r   )r   r   )r   r   rM   r   r3   r4   ))zCholesky solver unavailable.)zLU solver unavailable.)
r   r   r   rB   r   r6   r   r<   r   args)	r@   r    rY   rd   r
   r   r7   r9   errr   r   r   test_buckminsterfullerene   s&   
	^
z3TestAlgebraicConnectivity.test_buckminsterfullereneN)__name__
__module____qualname__r   markparametrizemethodsrA   rD   rH   rL   rP   rV   r[   r^   r_   ra   rc   r   r"   Znormalized_laplacian_matrixr   r   r   r   r   r=   L   s:    


	











r=   c                   @   s
  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g dg dgfdg dg d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J |jdddd |jdddd t|dgks,J d S )Nr9   r   rE   )add_noder   r   rC   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   rI   r	   )r   rJ   r   r   r   r   rK   r   r   r   rL   G  s   
z-TestSpectralOrdering.test_unrecognized_methodr
   c                 C   sx   t d t }|jg ddd tj|d|d}t|t|ks$J ddht|d d t|dd  fv s:J d S )	Nr   )r   r-   r   r   r,   r-   r-   r,   r   rQ   rE   )rF   r
   r   r,   )r   r   r   rB   add_weighted_edges_fromr   setr@   r
   r   orderr   r   r   test_three_nodesK  s   
0z%TestSpectralOrdering.test_three_nodesc                 C   sr   t d t }|g d tj||d}t|t|ks!J ddht|d d t|dd  fv s7J d S )Nr   )r   r   r   )r-   r,   r-   r	   r-   r,   r   r   )r   r   r   MultiDiGraphr   r   r   r   r   r   r   test_three_nodes_multigraphT  s   
0z0TestSpectralOrdering.test_three_nodes_multigraphc                 C   s`   t d ttd}tj| t }t	|| tj
||d}||tt|fv s.J d S )Nr   re   r	   r   r   listrG   r#   r$   shuffler   rB   add_pathr   reversed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v s/J d S )Nr   re   r   )r
   rb   r   r   r   r   r   rc   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.J ttdddttddd	ttdddttd
dd	g}|d d |v sVJ |dd  |v s`J d S )Nr   r   re   r-   r   r	   rW   r   rR   ru   r   )	r   r   r   rB   r   rG   r   r   r   )r@   r
   r   r   Zseqsr   r   r   rH   q  s   
z&TestSpectralOrdering.test_disconnected)r    expected_orderF)
r   r-   r   r,   r   r   rT   ru   rr   rW   )
rW   rr   ru   rT   r   r   r,   r   r-   r   T)
r   r-   r,   r   r   r   ru   rT   rr   rW   )
rW   rr   rT   ru   r   r   r   r,   r-   r   c                 C   st   t d ttd}t }tj||dd |j|d |d dd t|	 }tj
|||d}||v s8J d S )	Nr   re   r   rE   r   r   r   )r    r
   )r   r   r   rG   r   rB   r   rC   r"   Ztodenser   )r@   r    r   r
   r   r   r7   r   r   r   r   ra     s   
	zTestSpectralOrdering.test_cycleN)r   r   r   r   rB   r>   rU   r   Z_graphsr   r   r   r   r   rL   r   r   r   r^   rc   rH   ra   r   r   r   r   r   6  s2    




	
	
r   )mathr   r   r   r#   Znetworkxr   r   r   r   r   r+   r2   r<   r=   r   r   r   r   r   <module>   s    
 k