o
    ]Zh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numpyZ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   S/var/www/auris/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nxZGraphedgesWGadd_nodeZ
MultiGraphMGcopyGslnodesZadd_edgeDiGraphDiGadd_edges_fromZ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   r0   r0   r   )r0   r   r0   r   r   )r0   r0   r   r   r   )r0   r   r   r   r   )r   r   r   r   r   r   r   )r   r0   r0   r   r   r   )r   r   r   r   r   r   )r0   r0   r   r0   r   r   )r   r   r   r   r0   r0   )r   r   r   r0   r   r0   )r   r   r   r   r0   r   r   r   nodelistr0   Nr   r   r   )nparraytestingZassert_equalr   Zlaplacian_matrixr   todenser"   r    r'   r)   r*   )selfNLZWLZOLZDiNLZDiWLZ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ڿr<   X9v        )r<   r;         r>   r>   )r<   r?   r;   r>   r>   )r=   r>   r>   r;   r>   )r>   r>   r>   r>   r>   )      ?登zҿrA   eaֿr>   )rA   K=U?ioTտr>   r>   )rA   rD   rC   r>   r>   )rB   r>   r>   r   r>   )r;   r>   rڿr>   r>   r>   )r>   r>   r>   r>   r>   r>   )rE   r>   r;   r>   rE   r>   )r>   r>   r>   r;   r?   -)r>   r>   r>   r?   r;   rF   )r>   r>   r>   rF   r>   r;   )rE   r>   r;   rE   r>   r>   )r>   r>   r>   r>   rF   r;   )rC   gzrA   r>   r>   r>   )rA   r?   r@   rA   r>   r>   )r>   r>   r>   rC   rD   rE   )r>   r>   r>   rD   rC   rE   )r>   r>   r>   r>   rE   r   r   r1   r   decimalr   r3   r      N)r4   r5   r6   assert_almost_equalr   Znormalized_laplacian_matrixr   ranger7   r"   r    r$   r'   r)   r*   r+   )r8   r   GLZLslr'   ZDiGLZDiLslr   r   r   test_normalized_laplacianc   s   






z'TestLaplacian.test_normalized_laplacianN)__name__
__module____qualname__classmethodr/   r:   rM   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)rS   g7d?8gDioͿS!uqGx$(篔ec])rT   rX   rR   PkwǺݵ|г)rU   rY   r\   rR   H}8߿\(\)rV   rZ   r]   r_   rR   )0ʿ)rW   r[   r^   r`   ra   rR   ?alphar2   r   rG   )r   r   )r   r   )r;   @ǘӿfj+޿r>   r>   ,ԚԿ)rf   r;   	h"lx¿r>   [<Կr>   )rg   ri   r;   r>   o_r>   )r>   r>   r>   r;   r?   r?   )r>   rj   rk   r?   r;         п)rh   r>   r>   r?   rl   r;   randomrd   r2   	walk_type)r   @ǘÿfj+οr>   r>   TĿ)rp   r   ]m{r>   [<Ŀr>   )rq   rs   r   r>   +eXr>   )r>   r>   r>   r   rl   rl   )r>   rt   ru   rl   r         )rr   r>   r>   rl   rv   r   lazy)r   )r   r   )r   r   r   )r   r   )r   I+ƿrx   rl   )rx   r   r>   rx   )rx   r>   r   rx   )rl   rx   rx   r   N)	r   r&   r(   r4   r5   Zdirected_laplacian_matrixsortedr6   rJ   )r   rL   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?rb   rc   r   rG   re   )gB`"?Biޡ+Χr>   r>   :H)r   g+η?r>   r   r>   )r   r   Biޱ?r>   r   r>   )r>   r>   r>   KY8?KY8Žr   )r>   r   r   r   r   r   )r   r>   r>   r   r   r   rm   rn   )r   5;Nё$ۗr>   r>   rU   )r   g+Χ?wr>   r   r>   )r   r   gBiޡ?r>   r   r>   )r>   r>   r>   KY8Ž?r   r   )r>   r   r   r   r   rU   )rU   r>   r>   r   rU   r   rw   r   )K}\UU?iKGUUr   r>   )r   r   r>   r   )r   r>   r   r   )r>   r   r   r   r   Zpagerankd   )ro   rd   NZsilly)ro   )r   r&   r(   r4   r5   Z'directed_combinatorial_laplacian_matrixry   r6   rJ   r   pytestZraisesZNetworkXError)r   rL   rz   Eexpectedr   r   r   %test_directed_combinatorial_laplacian  sh   




"r   )r   Zimportorskipr4   Znetworkxr   Znetworkx.generators.degree_seqr   Znetworkx.generators.expandersr   r   r{   r   r   r   r   r   <module>   s    

 2F