U
    ¹mœdÎ&  ã                   @   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|   dddddg}t |ƒ| _t dd„ | j ¡ D ƒ¡| _| j d¡ t | j¡| _| j 	¡ | _
| j
 ¡ D ]}| j
 ||¡ qdd S )Né   é   é   r   c                 s   s"   | ]\}}||d ddœfV  qdS )ç      à?ç333333Ó?)ÚweightÚotherN© )Ú.0ÚuÚvr   r   ú]/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/networkx/linalg/tests/test_laplacian.pyÚ	<genexpr>   s    z,TestLaplacian.setup_class.<locals>.<genexpr>é   )r   ÚGÚnxZGraphÚedgesÚWGÚadd_nodeZ
MultiGraphÚMGÚcopyÚGslZnodesZadd_edge)ÚclsÚdegÚnoder   r   r   Úsetup_class   s    

ÿ
zTestLaplacian.setup_classc                 C   s  t  dddddgdddddgdddddgdddddgdddddg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
� ¡ |¡ d	S )zGraph Laplacianr   éÿÿÿÿr   r   r   r	   r
   ©ÚnodelistN©r   r   )
ÚnpÚarrayÚtestingZassert_equalr   Zlaplacian_matrixr   Útodenser   r   )ÚselfÚNLZWLZOLr   r   r   Útest_laplacian   s(    üþ ÿzTestLaplacian.test_laplacianc                 C   s–  t  dddddgdddddgdddddgdddddgdddddgg¡}t  dddddgdddddgdddddgdddddgdddddgg¡}t  dddddgdd	d
ddgdd
d	ddgdddddgdddddg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� dS )zGeneralized Graph Laplacianç      ð?gé&1¬Ú¿gX9´Èvâ¿ç        ç      à¿g      è?g™»–�zÒ¿gþe÷äa¡Ö¿gKÈ=›Uå?gioð…ÉTÕ¿r	   é   r!   r   ©Údecimalr   r#   N)r$   r%   r&   Úassert_almost_equalr   Znormalized_laplacian_matrixr   Úranger'   r   r   r   )r(   r   ÚGLZLslr   r   r   Útest_normalized_laplacian2   s`    üüüý  ÿ  ÿ  ÿý  ÿz'TestLaplacian.test_normalized_laplacianN)Ú__name__Ú
__module__Ú__qualname__Úclassmethodr   r*   r4   r   r   r   r   r      s   
r   c                  C   s  t  ¡ } |  d¡ t ddddddgddd	d
ddgdd	ddddgdd
ddddgddddddgddddddgg¡}t j| dt| ƒd�}tjj||dd� |  d¡ t ddddddgddddddgddddddgddddd d gdddd dd!gdddd d!dgg¡}t j| dt| ƒd"d#�}tjj||dd� t d$d%d&ddd'gd%d$d(dd)dgd&d(d$dd*dgdddd$d!d!gdd)d*d!d$d+gd'ddd!d+d$gg¡}t j| dt| ƒd,d#�}tjj||dd� t  ¡ } |  d-¡ t d$d.d.d!gd.d$dd.gd.dd$d.gd!d.d.d$gg¡}t j| dt| ƒd�}tjj||dd� d/S )0zDirected Laplacian©
©r   r   ©r   r   )r   r   )r   r   )r   r.   )r   r.   )r   é   )r.   r   )r.   r<   )r<   r   g�Å�1wï?gû:pÎˆÒÒ¿g*©ÐDØØ¿ç\ AñcÌ�¿g�€&Â†§—¿g}Ð³Yõ¹š¿gµ7øÂdªê?g8gDioðÍ¿gS–!Žuq«¿gGx$(®¿g¯”eˆc]¬¿gò°Pkšwœ¿gÇº¸�ð¶¿gÝµ„|Ð³™¿g€H¿}8ß¿g\�Âõ(\å¿g)í¾0™Ê¿çÍÌÌÌÌÌì?©Úalphar"   r   r/   ©)r   r.   )r<   r   r+   g¸@‚âÇ˜Ó¿gÏfÕçj+Þ¿r,   g,Ôšæ§Ô¿gÕ	h"lxÂ¿g[±¿ìž<Ô¿gåòÒo_·¿r-   g      Ð¿Úrandom©r@   r"   Ú	walk_typer	   g¸@‚âÇ˜Ã¿gÏfÕçj+Î¿gð…ÉTÁ¨Ä¿g]mÅþ²{²¿g[±¿ìž<Ä¿gÔ+eâX§¿g      À¿Úlazy)r:   )r   r   )r   r   r;   )r   r   gºI+‡Æ¿N)	r   ÚDiGraphÚadd_edges_fromr$   r%   Zdirected_laplacian_matrixÚsortedr&   r1   )r   r3   ÚLr   r   r   Útest_directed_laplacian^   s\    ÿû
û   ÿû



ýrJ   c                  C   sZ  t  ¡ } |  d¡ t ddddddgddd	d
ddgdd	ddddgdd
ddddgddddddgddddddgg¡}t j| dt| ƒd�}tjj||dd� |  d¡ t ddddddgdd d!dddgdd!d"dd!dgdddd#d$d$gddd!d$d#dgdddd$dd#gg¡}t j| dt| ƒd%d&�}tjj||dd� t d"d'd(ddd)gd'd*d+dd(dgd(d+d,dd+dgdddd-ddgdd(d+dd-d)gd)dddd)d-gg¡}t j| dt| ƒd.d&�}tjj||dd� t  t	d/ƒ¡}t  |¡}t d0d1d1dgd1d0dd1gd1dd0d1gdd1d1d0gg¡}tjj||d2d� t
 t j¡� t j| d3d4d5� W 5 Q R X t
 t j¡� t j| d6d7� W 5 Q R X d8S )9z Directed combinatorial Laplacianr9   g46<½¢?gF%uš‹¿gKÈ=›U�¿g_ÎQÚk¿gü©ñÒMb`¿g®Ø_vOf¿g
×£p=
§?gA‚âÇ˜»†¿gÅ�1w-!¿gaÃÓ+ey¿glxz¥,C|¿gˆ…ZÓ¼ã¤?gyé&1¬l¿g�St$—ÿ€¿g|ò°Pkš×?gz6«>W[Á¿g<NÑ‘\þË¿gtµûËîÉ?gB`åÐ"Û©¿gj¼t“Ò?r>   r?   r   r/   rA   gB`åÐ"ÛÁ?gÊÃB­iÞ¡¿g+‡ÙÎ§¿r,   g:’ËH¿­¿g+‡ÙÎ·?gàœ¥½Á‡¿gÊÃB­iÞ±?gKY†8ÖÅÍ?gKY†8ÖÅ½¿rB   rC   g¨5Í;NÑ‘¿g$¹ü‡ôÛ—¿r=   g+‡ÙÎ§?gàœ¥½Áw¿gÊÃB­iÞ¡?gKY†8ÖÅ½?rE   r   gKÚ}\UUÅ?giKGUUµ¿r<   Zpagerankéd   )rD   r@   Zsilly)rD   N)r   rF   rG   r$   r%   Z'directed_combinatorial_laplacian_matrixrH   r&   r1   r   ÚpytestZraisesZNetworkXError)r   r3   rI   ÚEÚexpectedr   r   r   Ú%test_directed_combinatorial_laplacian¤   sp    ÿû
û   ÿû   ÿ




ýÿrO   )rL   Zimportorskipr$   Znetworkxr   Znetworkx.generators.degree_seqr   Znetworkx.generators.expandersr   r   rJ   rO   r   r   r   r   Ú<module>   s   

SF