o
    ˷e&                     @   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   sv   g d}t || _tdd | j D | _| jd t| j| _| j	 | _
| j
 D ]	}| j
|| q/d S )N)      r      r   c                 s   s$    | ]\}}||d ddfV  qdS )      ?333333?)weightotherN ).0uvr   r   [/var/www/ideatree/venv/lib/python3.10/site-packages/networkx/linalg/tests/test_laplacian.py	<genexpr>   s    
z,TestLaplacian.setup_class.<locals>.<genexpr>   )r   GnxGraphedgesWGadd_node
MultiGraphMGcopyGslnodesadd_edge)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 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   r%   r%   r   )r%   r   r%   r   r   )r%   r%   r   r   r   )r%   r   r   r	   r   )r   r   r   r   r   r
   r   r   r	   nodelistr%   Nr   r   )
nparraytestingassert_equalr   laplacian_matrixr   todenser   r   )selfNLWLOLr   r   r   test_laplacian   s&   
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 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)      ?&1ڿr5   X9v        )r5   r4         r7   r7   )r5   r8   r4   r7   r7   )r6   r7   r7   r4   r7   )r7   r7   r7   r7   r7   )g      ?登zҿr9   eaֿr7   )r9   K=U?ioTտr7   r7   )r9   r<   r;   r7   r7   )r:   r7   r7   r
   r7      r&   r   decimalr   r(   N)r)   r*   r+   assert_almost_equalr   normalized_laplacian_matrixr   ranger.   r   r   r   )r/   r   GLLslr   r   r   test_normalized_laplacian2   sP   



z'TestLaplacian.test_normalized_laplacianN)__name__
__module____qualname__classmethodr$   r3   rE   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 Laplacian
r	   r   r	   r   )r   r	   )r   r   )r   r=   )r   r=   )r      )r=   r   )r=   rM   )rM   r   )ŏ1w?:pΈҿ*Dؿ\ Ac̝着&}гY)rO   g7d?8gDioͿS!uqGx$(篔ec])rP   rT   rN   PkwǺݵ|г)rQ   rU   rX   rN   H}8߿\(\)rR   rV   rY   r[   rN   )0ʿ)rS   rW   rZ   r\   r]   rN   ?alphar'   r   r>   )r   r=   )rM   r	   )r4   @ǘӿfj+޿r7   r7   ,ԚԿ)rb   r4   	h"lx¿r7   [<Կr7   )rc   re   r4   r7   o_r7   )r7   r7   r7   r4   r8   r8   )r7   rf   rg   r8   r4         п)rd   r7   r7   r8   rh   r4   randomr`   r'   	walk_type)r
   @ǘÿfj+οr7   r7   TĿ)rl   r
   ]m{r7   [<Ŀr7   )rm   ro   r
   r7   +eXr7   )r7   r7   r7   r
   rh   rh   )r7   rp   rq   rh   r
         )rn   r7   r7   rh   rr   r
   lazy)rK   )r   r   )r   r	   rL   )r   r   )r
   I+ƿrt   rh   )rt   r
   r7   rt   )rt   r7   r
   rt   )rh   rt   rt   r
   N)	r   DiGraphadd_edges_fromr)   r*   directed_laplacian_matrixsortedr+   r@   )r   rC   Lr   r   r   test_directed_laplacian^   sV   





rz   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 LaplacianrJ   )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?r^   r_   r   r>   ra   )gB`"?Biޡ+Χr7   r7   :H)r   g+η?r7   r   r7   )r   r   Biޱ?r7   r   r7   )r7   r7   r7   KY8?KY8Žr   )r7   r   r   r   r   r   )r   r7   r7   r   r   r   ri   rj   )r   5;Nё$ۗr7   r7   rQ   )r   g+Χ?wr7   r   r7   )r   r   gBiޡ?r7   r   r7   )r7   r7   r7   KY8Ž?r   r   )r7   r   r   r   r   rQ   )rQ   r7   r7   r   rQ   r   rs   r   )K}\UU?iKGUUr   r7   )r   r   r7   r   )r   r7   r   r   )r7   r   r   r   rM   pagerankd   )rk   r`   Nsilly)rk   )r   ru   rv   r)   r*   'directed_combinatorial_laplacian_matrixrx   r+   r@   r   pytestraisesNetworkXError)r   rC   ry   Eexpectedr   r   r   %test_directed_combinatorial_laplacian   sh   




"r   )r   importorskipr)   networkxr   networkx.generators.degree_seqr   networkx.generators.expandersr   r   rz   r   r   r   r   r   <module>   s    

SF