3
Od                 @   s   d dl Zd dlmZmZ d dlmZ d dlm	Z	 d dl
mZ dddZd	d
 Zdd Zdd Zdd Zdd Zdd Zdd ZdS )    N)assert_allcloseassert_array_almost_equal)raises)sparse)csgraphFc             C   s   t j| r| j } tj| } d|  }xJt|jd D ]8}| ||d d f j | |d |f j  |||f< q4W |rtj|j	 }d||dk< ||d d d f d  }||d d d f d  }|S )Ng      ?r      g      ?g      )
r   issparsetodensenpZasarrayrangeshapesumZdiagcopy)xnormedyjd r   c/var/www/html/virt/lib64/python3.6/site-packages/scipy/sparse/csgraph/tests/test_graph_laplacian.py_explicit_laplacian   s    

8r   c             C   s   t | dst| tttd} tj| r4| }|j } n
tj| }tj	| |d}| j
d }|srt|jddtj| t|j| t|tj	||dj  t|t| |d d S )Nr   )r
   r   )r   r   )Zaxis)hasattrevaldictr
   r   r   r	   
csr_matrixr   	laplacianr   r   r   ZzerosTr   )matr   Zsp_matr   Zn_nodesr   r   r    _check_symmetric_graph_laplacian   s    




r   c              C   sv   xpt ttfD ]b} x\ddgdgggdddgdddggddgddgddggfD ] }tj|| d}tttj| qJW qW d S )Nr                  )dtype)	intfloatcomplexr
   arrayassert_raises
ValueErrorr   r   )tmAr   r   r   test_laplacian_value_error1   s    r.   c              C   s.   d
} x$| D ]}xdD ]}t || qW q
W d S )N,np.arange(10) * np.arange(10)[:, np.newaxis]np.ones((7, 7))
np.eye(19)*sparse.diags([1, 1], [-1, 1], shape=(4,4))4sparse.diags([1, 1], [-1, 1], shape=(4,4)).todense()@np.asarray(sparse.diags([1, 1], [-1, 1], shape=(4,4)).todense())3np.vander(np.arange(4)) + np.vander(np.arange(4)).TTF)r/   r0   r1   r2   r3   r4   r5   )TF)r   )Zsymmetric_matsZmat_strr   r   r   r   test_symmetric_graph_laplacian;   s          

r6   c             K   s6   t j| r| j } t j|r$| j }t| |f| d S )N)r   r   Ztoarrayr   )abkwargsr   r   r   _assert_allclose_sparseH   s
    

r:   c       
      C   s   xt jtjtjfD ]v}xptttfD ]b}|| |d}tj	||d|d}t
||dd tj	||d|d\}}	t
||dd t
|	|dd q"W qW d S )N)r$   F)r   Zreturn_diaguse_out_degreeg-q=)ZatolT)r
   r(   r   r   Z
coo_matrixr%   r&   r'   r   r   r:   )
r-   Z	desired_LZ	desired_dr   r;   Zarr_typer+   ZadjLr   r   r   r   _check_laplacianQ   s    

r=   c              C   s   dddgdddgdddgg} dd	dgd
ddgdddgg}dddg}t | ||ddd dddgdddgdddgg}dddg}t | ||ddd dddgdddgdddgg}dddg}t | ||ddd dddgdddgdddgg}dddg}t | ||ddd d S )Nr   r   r!   r   FT)r   r;   g      ?g      r>   r?   g      r@   )r=   )r-   r<   r   r   r   r   test_asymmetric_laplacian^   s.    



rA   c              C   sD   x>dD ]6} t jddgddgd| d
}xdD ]}t|| q*W qW d S )Ncsrcsccoolildokdiabsrr   r!   )r   formatTF)rB   rC   rD   rE   rF   rG   rH   r>   )r!   r!   )TF)r   Zdiagsr   )fmtr   r   r   r   r   test_sparse_formats   s    

rK   )F)Znumpyr
   Znumpy.testingr   r   Zpytestr   r)   Zscipyr   Zscipy.sparser   r   r   r.   r6   r:   r=   rA   rK   r   r   r   r   <module>   s   

	#