o
    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)tracemin_pcgtracemin_lulanczos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      tracemin_cholmethodN)pytestimportorskipnxbarbell_graphraisesNetworkXErroralgebraic_connectivityG r   e/var/www/vscode/kcb/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>tracemin_unknown
normalizedtolr   N)r   r   r   r   laplacian_matrixnpasarrayrandomnormalshapeTr   r   linalgalgebraicconnectivity_tracemin_fiedler)r   LXr   r   r   $test_fiedler_vector_tracemin_unknown%   s   

 
"r4   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!      >   r5   r   r   badfecr!   r6   r   r   )r   r   r   r   spectral_bisectiondict	enumeraterelabel_nodes)r   Cmappingr   r   r   test_spectral_bisection1   s   


r>   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/   normr   approx)Alxr   ynyr   r   r   check_eigenvector@   s   rI   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   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_edgerM   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 )Nr6   r   r   r!   weight)
r   rP   add_nodes_fromranger   r   r   r   r   rQ   rM   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   rN   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!   rS   -q=r'   r   r6   r?   r@   )
r   r   r   rP   rQ   r(   r   rC   r   rI   rN   r   r   rD   rF   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!   r`   rS   r\   )rT   r'   r      r?   r@   )
r   r   r   
MultiGraphrQ   r(   r   rC   r   rI   r^   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
      r6   r\   traceminr]   r?   r@   
r   r   r   rY   r(   r   r   rC   r   rI   )rN   r   rD   sigmaacrF   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
   rf   r6   r\   r]   r?   r@   rh   rN   r   r   rD   ri   rj   rF   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   r6   )r   r!   g׋ʄ?r\   r]   r?   r@   )
r   r   r   rY   add_edges_fromr(   r   rC   r   rI   rm   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 rl   
r   r   r   cycle_graphr(   r   r   rC   r   rI   rm   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
   rf   r6   r\   r!   )r'   r   seedr?   r@   rq   rm   r   r   r   test_seed_argument   s   


z,TestAlgebraicConnectivity.test_seed_argument)r&   ri   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!   ;   )r6      )r6   *   )r6   <   )r5   rc   )r5   +   )r5   9   )r   rf   )r   ,   )r   :   )r      )r   8   )r   r~   )rc   rw   )rc      )      )r   r   )r   r   )rf   rz   )rf       )	      )r   5   )r   ry   )rw      )      )r   r   )r   r|   )rz      )r   r   )r      )r      )r      )r   1   )r      )r   2   )      )r      )r   6   )r      )r   7   )r   r   )r   rx   )r   r   )r   r{   )   r   )r   !   )r   r~   )   r   )r   "   )r   r   )r   r   )r   #   )r   r}   )r   $   )r   r   )r   3   )r   ry   )r   4   )r   r|   )   r   )r   r   )r   r   )   r   )r   r   )r   r   )r   /   )r   0   )r   -   )r   .   )r   r   )r   %   )r   &   )r   '   )r   r   )r   (   )r   r   )r   r   )r   r   )r   r   )rx   r   )r{   r   )r}   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   r\   r%   r?   r@   ))zCholesky solver unavailable.)zLU solver unavailable.)
r   r   r   rP   r   rC   r   rI   r   args)	rN   r&   ri   rv   r   r   rD   rF   errr   r   r   test_buckminsterfullerene   s&   
	^
z3TestAlgebraicConnectivity.test_buckminsterfullereneN)__name__
__module____qualname__r   markparametrizemethodsrO   rR   rW   r[   r_   re   rk   rn   rp   rs   ru   r   r(   normalized_laplacian_matrixr   r   r   r   r   rJ   L   s:    


	











rJ   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   rN   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 )NrF   r   rS   )add_noder   r   rQ   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   rX   r   )r   rY   r   r   r   r   rZ   r   r   r   r[   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!   r6   r!   r!   r5   r6   r6   r5   r!   r`   rS   )rT   r   r!   r5   )r   r   r   rP   add_weighted_edges_fromr   setrN   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   )r6   r5   r6   r   r6   r5   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
   rw   r   r   r   listrV   r)   r+   shuffler   rP   add_pathr   reversedrN   r   pathr   r   r   r   r   rn   ]  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
   rw   r!   )r   rt   r   r   r   r   r   ru   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   rw   r6   r!   r   rf   r   ra   r   r   )	r   r   r   rP   r   rV   r   r   r   )rN   r   r   r   seqsr   r   r   rW   q  s   
z&TestSpectralOrdering.test_disconnected)r&   expected_orderF)
r!   r6   r   r5   r   r   rc   r   r   rf   )
rf   r   r   rc   r   r   r5   r   r6   r!   T)
r!   r6   r5   r   r   r   r   rc   r   rf   )
rf   r   rc   r   r   r   r   r5   r6   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
   rw   r   rS   r   r   r!   )r&   r   )r   r   r   rV   r   rP   r   rQ   r(   todenser   )rN   r&   r   r   r   r   rD   r   r   r   r   rs     s   
	zTestSpectralOrdering.test_cycleN)r   r   r   r   rP   rK   rd   r   _graphsr   r   r   r   r   r[   r   r   r   rn   ru   rW   rs   r   r   r   r   r   6  s2    




	
	
r   )mathr   r   r   r)   networkxr   r   r   r   r    r4   r>   rI   rJ   r   r   r   r   r   <module>   s    
 k