U
    :vf&                     @   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 )    NZ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   H/tmp/pip-unpacked-wheel-_lngutwb/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X9v              g      ?gzҿgeaֿgK=U?gioTտ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)   r3   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ؿ\ Ac̝g&g}гYg7d?g8gDioͿgS!uqgGx$(gec]gPkwgǺgݵ|гgH}8߿g\(\g)0ʿ?alphar!   r   r.   )r   r-   )r;   r   r*   g@ǘӿgfj+޿r+   g,ԚԿg	h"lx¿g[<Կgo_r,   g      пrandomr?   r!   	walk_typer   g@ǘÿgfj+οgTĿg]m{g[<Ŀg+eXg      lazy)r9   )r   r   )r   r   r:   )r   r   gI+ƿN)	r   DiGraphadd_edges_fromr#   r$   Zdirected_laplacian_matrixsortedr%   r0   )r   r2   Lr   r   r   test_directed_laplacian^   s\    
   



rI   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 Laplacianr8   g46<?gF%ugK=Ug_QkgMb`g_vOfg
ףp=
?gAǘgŏ1w-!ga+eyglxz,C|gZӼ?gy&1lgSt$g|Pk?gz6>W[g<Nё\˿gt?gB`"۩gjt?r=   r>   r   r.   r@   gB`"?gBiޡg+Χr+   g:Hg+η?ggBiޱ?gKY8?gKY8ŽrA   rB   g5;Nёg$ۗr<   g+Χ?gwgBiޡ?gKY8Ž?rD   r   gK}\UU?giKGUUr;   Zpagerankd   )rC   r?   Zsilly)rC   N)r   rE   rF   r#   r$   Z'directed_combinatorial_laplacian_matrixrG   r%   r0   r   pytestZraisesZNetworkXError)r   r2   rH   Eexpectedr   r   r   %test_directed_combinatorial_laplacian   sp    
      




rN   )rK   Zimportorskipr#   Znetworkxr   Znetworkx.generators.degree_seqr   Znetworkx.generators.expandersr   r   rI   rN   r   r   r   r   <module>   s   

SF