o
    h7                     @   s^   d dl Z e dZe d d dlZd dlmZ d dlmZ G dd dZ	dd	 Z
d
d ZdS )    Nnumpyscipy)havel_hakimi_graph)margulis_gabber_galil_graphc                   @   s(   e Zd Zedd Zdd Zdd ZdS )TestLaplacianc                 C   s   g d}t || _tdd | j D | _| jd t| j| _| j	 | _
| j
 D ]	}| j
|| q/t | _| jd t| j| _tdd | j D | _| j	 | _| j D ]	}| j|| qdd S )N)      r      r   c                 s   $    | ]\}}||d ddfV  qdS       ?333333?)weightotherN .0uvr   r   X/var/www/vscode/kcb/lib/python3.10/site-packages/networkx/linalg/tests/test_laplacian.py	<genexpr>       
z,TestLaplacian.setup_class.<locals>.<genexpr>   
r	   r   r	   r   )r   r	   )r   r   )r      )r   r   )r      )r   r   )r   r   )r   r   c                 s   r
   r   r   r   r   r   r   r   -   r   )r   GnxGraphedgesWGadd_node
MultiGraphMGcopyGslnodesadd_edgeDiGraphDiGadd_edges_fromMultiDiGraphDiMGDiWGDiGsl)clsdegnoder   r   r   setup_class   s,   





zTestLaplacian.setup_classc              	   C   s  t g dg dg dg dg dg}d| }d| }t g dg d	g d
g dg dg dg}d| }d| }t jt| j | t jt| j | t jtj| jddgd t ddgddgg t jt| j	 | t jtj| j	dd | t jtj| j	dd | t jt| j
 | t jt| j | t jtj| j
ddgd t ddgddgg t jt| j | t jtj| jdd | t jtj| jdd | dS )zGraph Laplacian)r   r5   r5   r   )r5   r   r5   r   r   )r5   r5   r   r   r   )r5   r   r   r	   r   )r   r   r   r   r   r   r   )r   r5   r5   r   r   r   )r   r   r   r   r   r   )r5   r5   r   r5   r   r   )r   r   r   r   r5   r5   )r   r   r   r5   r   r5   )r   r   r   r   r5   r	   r   r	   nodelistr5   Nr   r   r   )nparraytestingassert_equalr   laplacian_matrixr   todenser%   r"   r+   r.   r/   )selfNLWLOLDiNLDiWLDiOLr   r   r   test_laplacian4   sR   

zTestLaplacian.test_laplacianc              	   C   s  t g dg dg dg dg dg}t g dg dg dg dg dg}t g dg dg dg d	g dg}t g d
g dg dg dg dg dg}t g d
g dg dg dg dg dg}t g dg dg dg dg dg dg}t jjtj| jtdd |dd t jjt| j |dd t jjt| j	 |dd t jjt| j
 |dd t jjtj| j
dd |dd t jjt| j |dd t jjtj| jtddd |dd t jjt| j |dd t jjt| j |dd t jjt| j |dd t jjtj| jdd |dd t jjt| j |dd dS ) zGeneralized Graph Laplacian)      ?&1ڿrH   X9v        )rH   rG         rJ   rJ   )rH   rK   rG   rJ   rJ   )rI   rJ   rJ   rG   rJ   )rJ   rJ   rJ   rJ   rJ   )      ?登zҿrM   eaֿrJ   )rM   K=U?ioTտrJ   rJ   )rM   rP   rO   rJ   rJ   )rN   rJ   rJ   r   rJ   )rG   rJ   rڿrJ   rJ   rJ   )rJ   rJ   rJ   rJ   rJ   rJ   )rQ   rJ   rG   rJ   rQ   rJ   )rJ   rJ   rJ   rG   rK   -)rJ   rJ   rJ   rK   rG   rR   )rJ   rJ   rJ   rR   rJ   rG   )rQ   rJ   rG   rQ   rJ   rJ   )rJ   rJ   rJ   rJ   rR   rG   )rO   gzrM   rJ   rJ   rJ   )rM   rK   rL   rM   rJ   rJ   )rJ   rJ   rJ   rO   rP   rQ   )rJ   rJ   rJ   rP   rO   rQ   )rJ   rJ   rJ   rJ   rQ   r   r   r6   r   decimalr   r8   r	      N)r9   r:   r;   assert_almost_equalr   normalized_laplacian_matrixr   ranger>   r%   r"   r'   r+   r.   r/   r0   )r?   r   GLLslr+   DiGLDiLslr   r   r   test_normalized_laplacianc   s   






z'TestLaplacian.test_normalized_laplacianN)__name__
__module____qualname__classmethodr4   rF   r]   r   r   r   r   r      s
    
'/r   c               	   C   sz  t  } | d tg dg dg dg dg dg dg}t j| dt| d	}tjj||d
d | d tg dg dg dg dg dg dg}t j| dt| dd}tjj||d
d tg dg dg dg dg dg dg}t j| dt| dd}tjj||d
d t  } | d tg dg dg dg d g}t j| dt| d	}tjj||d
d d!S )"zDirected Laplacianr   )ŏ1w?:pΈҿ*Dؿ\ Ac̝着&}гY)rc   g7d?8gDioͿS!uqGx$(篔ec])rd   rh   rb   PkwǺݵ|г)re   ri   rl   rb   H}8߿\(\)rf   rj   rm   ro   rb   )0ʿ)rg   rk   rn   rp   rq   rb   ?alphar7   r   rS   )r   r   )r   r	   )rG   @ǘӿfj+޿rJ   rJ   ,ԚԿ)rv   rG   	h"lx¿rJ   [<ԿrJ   )rw   ry   rG   rJ   o_rJ   )rJ   rJ   rJ   rG   rK   rK   )rJ   rz   r{   rK   rG         п)rx   rJ   rJ   rK   r|   rG   randomrt   r7   	walk_type)r   @ǘÿfj+οrJ   rJ   TĿ)r   r   ]m{rJ   [<ĿrJ   )r   r   r   rJ   +eXrJ   )rJ   rJ   rJ   r   r|   r|   )rJ   r   r   r|   r         )r   rJ   rJ   r|   r   r   lazy)r   )r   r   )r   r	   r   )r   r   )r   I+ƿr   r|   )r   r   rJ   r   )r   rJ   r   r   )r|   r   r   r   N)	r   r*   r,   r9   r:   directed_laplacian_matrixsortedr;   rV   )r   rY   Lr   r   r   test_directed_laplacian   sV   





r   c               	   C   s  t  } | d tg dg dg dg dg dg dg}t j| dt| d	}tjj||d
d | d tg dg dg dg dg dg dg}t j| dt| dd}tjj||d
d tg dg dg dg dg dg dg}t j| dt| dd}tjj||d
d t t	d}t |}tg dg dg dg d g}tjj||d!d t
t j t j| d"d#d$ W d%   n1 sw   Y  t
t j t j| d&d' W d%   d%S 1 sw   Y  d%S )(z Directed combinatorial Laplacianr   )g46<?F%uK=U_QkMb`_vOf)r   g
ףp=
?Aǘŏ1w-!a+eylxz,C|)r   r   gZӼ?y&1lSt$r   )r   r   r   g|Pk?z6>W[<Nё\˿)r   r   r   r   gt?B`"۩)r   r   r   r   r   gjt?rr   rs   r   rS   ru   )gB`"?Biޡ+ΧrJ   rJ   :H)r   g+η?rJ   r   rJ   )r   r   Biޱ?rJ   r   rJ   )rJ   rJ   rJ   KY8?KY8Žr   )rJ   r   r   r   r   r   )r   rJ   rJ   r   r   r   r}   r~   )r   5;Nё$ۗrJ   rJ   re   )r   g+Χ?wrJ   r   rJ   )r   r   gBiޡ?rJ   r   rJ   )rJ   rJ   rJ   KY8Ž?r   r   )rJ   r   r   r   r   re   )re   rJ   rJ   r   re   r   r   r   )K}\UU?iKGUUr   rJ   )r   r   rJ   r   )r   rJ   r   r   )rJ   r   r   r   r   pagerankd   )r   rt   Nsilly)r   )r   r*   r,   r9   r:   'directed_combinatorial_laplacian_matrixr   r;   rV   r   pytestraisesNetworkXError)r   rY   r   Eexpectedr   r   r   %test_directed_combinatorial_laplacian  sh   




"r   )r   importorskipr9   networkxr   networkx.generators.degree_seqr   networkx.generators.expandersr   r   r   r   r   r   r   r   <module>   s    

 2F