U
    ?h)                  
   @   s4  d dl Z d dlZd dlmZ d dl mZ d dlmZ d dl	m
Z
 dd Zdd	 Zd5ddZd6ddZdd Zdd Zdd Zdd ZejejejhZejejejhZejejejhZee eeA eA e!dZ"e j#$de"e j#$dej%ej&ej'ge j#$ddd
ge j#$ddd
ge j#$ddd
gdd Z(e j#$d d!d"d#d$d%d&d'ge j#$ddd
ge j#$ddd
gd(d) Z)e j#$dej*ej&ej'ge j#$d*d+d,d-gd.d/ Z+e j#$dej*ej&ej'ge j#$de"e j#$ddd
ge j#$d0dd
ge j#$ddd
ge j#$d*d,d-gd1d2 Z,d3d4 Z-dS )7    N)assert_allclose)raises)sparse)csgraphc                 C   s    t | jt jpt | jt jS N)npZ
issubdtypedtypeZsignedintegerZuint)mat r
   a/var/www/html/venv/lib/python3.8/site-packages/scipy/sparse/csgraph/tests/test_graph_laplacian.pycheck_int_type
   s     r   c                  C   sn   t ttfD ]^} 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| qFq
d S )N                  r   )	intfloatcomplexr   arrayassert_raises
ValueErrorr   	laplacian)tmAr
   r
   r   test_laplacian_value_error   s    r   Fc                 C   s   t | r|  } t| } d|  }t|jd D ]8}| ||d d f  | |d |f   |||f< q2|rt|	 }d||dk< ||d d d f d  }||d d d f d  }|S )Ng      r   r   g      ?g      ?)
r   issparsetoarrayr   asarrayrangeshapesumZdiagcopy)xnormedyjdr
   r
   r   _explicit_laplacian   s    

6r+   Tc                 C   s(  t | dst| tttd} t| r4| }| } n
t| }t| }tj|dd}| j	d }t
| |d}tj| ||d}tj|||d}	|rt| | t|| n*|rt| st||  |jdkrt|	| t||	  ||	 fD ]8}
|st|
jdd	t| t|
j|
 t|
| qd S )
Nr#   )r   r   T)r%   r   )r'   )r'   r%   coo)Zaxis)hasattrevaldictr   r   r   r    
csr_matrixr%   r#   r+   r   r   r   _assert_allclose_sparser   formatr$   ZzerosT)r	   r'   r%   Zsp_matZmat_copyZsp_mat_copyZn_nodesZexplicit_laplacianr   Zsp_laplacianZtestedr
   r
   r    _check_symmetric_graph_laplacian)   s6    









r4   c                  C   s2   d} | D ]$}dD ]}dD ]}t ||| qqqd S )N)z,np.arange(10) * np.arange(10)[:, np.newaxis]znp.ones((7, 7))z
np.eye(19)z+sparse.diags([1, 1], [-1, 1], shape=(4, 4))z5sparse.diags([1, 1], [-1, 1], shape=(4, 4)).toarray()z5sparse.diags([1, 1], [-1, 1], shape=(4, 4)).todense()z3np.vander(np.arange(4)) + np.vander(np.arange(4)).T)TF)r4   )Zsymmetric_matsr	   r'   r%   r
   r
   r   test_symmetric_graph_laplacianN   s
    	r5   c                 K   s6   t | r|  } t |r$| }t| |f| d S r   )r   r   r    r   )abkwargsr
   r
   r   r1   ^   s
    

r1   c                 C   s  || |d}t j||d||d d\}	}
|rpt|rp|	jtjksBt|
jtjksRtt|	|dd t|
|dd nX|	j|ks~t|
j|kstt|	|}t|	|}t|	|dd t|
|dd |s|rt|st
|tjkrt|	| n|jdkrt|	| d S Nr   T)r'   return_diaguse_out_degreer%   r   g-q=)atolr,   )r   r   r   r   r   Zfloat64AssertionErrorr1   r!   astypetypendarrayr   r2   r   Z	desired_LZ	desired_dr'   r;   r%   r   arr_typer	   Lr*   r
   r
   r   _check_laplacian_dtype_noneg   s4    
rD   c                 C   s   || |d}t j||d|||d\}	}
|	j|ks4t|
j|ksBtt||}t||}t|	|dd t|
|dd |s|rt|st	|tj
krt|	| n|jdkrt|	| d S r9   )r   r   r   r=   r   r!   r>   r1   r   r?   r@   r   r2   rA   r
   r
   r   _check_laplacian_dtype   s*    

rE   )keyr   rB   r%   r'   r;   c           	   
   C   s"  dddgdddgdddgg}|t ||d}| }|sd| rddddgdddgdddgg}dddg}|r| rdddgd	ddgdddgg}dddg}|s| sdddgdddgdddgg}dddg}|r| sdddgd	ddgdddgg}dddg}t||||| |||d
 t||||| |||d
 d S )Nr   r   r   r   r   g      )r'   r;   r%   r   rB   )r   r   r%   rD   rE   )	r;   r'   r%   r   rB   r   ZA_copyrC   r*   r
   r
   r   test_asymmetric_laplacian   sd    




rJ   fmtZcsrZcscr,   ZlilZdokZdiaZbsrc                 C   s*   t jddgddgd| d}t||| d S )Nr   rG   )r   r   )r#   r2   )r   Zdiagsr4   )rK   r'   r%   r	   r
   r
   r   test_sparse_formats   s    rL   formr   functionloc                 C   sP  d}| t || ||}tj|d|d\}}tj|dd|d\}}tj|dd|d\}}	tj|ddd|d\}
}||j7 }tj|d|d\}}tj|dd|d\}}t|	||  t|	| t|| i }dD ]6}|d	krt|||< qt|t j||j	d
||< qt
|d |d |d j  t
|d |d  t
|d |d  d S )Nr   T)r:   rM   )r:   r;   rM   )r:   symmetrizedrM   )r:   rP   r'   rM   )r:   r'   rM   )L_inL_outLs	Ls_normedLss
Lss_normedr   r   rS   rQ   rR   rU   rT   rV   )r   arangereshaper   r   r3   r   r.   eyer   r1   )rB   rM   nr	   rQ   Zd_inrR   Zd_outrS   ZdsrT   Z	ds_normedrU   ZdssrV   Z
dss_normedr*   rC   r
   r
   r   test_laplacian_symmetrized   sZ    







r[   rP   c              	   C   s  d}dddgdddgdddgg}|t || d}tj|d|||| d\}}	tj|d|||| d	d
\}
}t|	| t||
 tj|d|||| |d
\}}t||	 |j| kst|t j||jd	| }t||ddd t 
ddd}|r| tkst||||  n d S )Nr   r   r   r   r   r   T)r:   r'   rP   r;   r   r   )r:   r'   rP   r;   r   rM   gH׊>)Zrtolr<   r   )r   r   r   r   r   r1   r   r=   rY   r>   rW   rX   
INT_DTYPES)r   rB   r'   rP   r;   rM   rZ   r	   ZLodoZLadarC   r*   ZLmr&   r
   r
   r   test_format/  sN    	

	


	
r_   c               	   C   s2   t jtdd tjtddd} W 5 Q R X d S )NzInvalid form: 'toto')matchr   Ztoto)rM   )pytestr   r   r   r   r   rY   )_r
   r
   r   test_format_error_messaged  s    rc   )F)T).ra   numpyr   Znumpy.testingr   r   r   Zscipyr   Zscipy.sparser   r   r   r+   r4   r5   r1   rD   rE   Zintcint_Zlonglongr\   ZsingledoubleZ
longdoubleZREAL_DTYPESZcsingleZcdoubleZclongdoubleZCOMPLEX_DTYPEStuplesortedstrZDTYPESmarkZparametrizer   r0   Z
coo_matrixrJ   rL   r!   r[   r_   rc   r
   r
   r
   r   <module>   sf   


%	!<   5 -