o
    	h*                  
   @   sB  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lmZmZ dd Zd	d
 Zd/ddZd0ddZdd Zdd Zdd Zdd ZejeejfZejejejfZejejejfZ ee e  Z!e j"#de!e j"#dej$ej%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 g d!e j"#dddge j"#dddgd"d# Z*e j"#dej+ej%ej&ej'ej(ge j"#d$g d%d&d' Z,e j"#dej+ej%ej&ej'ej(ge j"#de!e j"#dddge j"#d(ddge j"#dddge j"#d$d)d*gd+d, Z-d-d. Z.dS )1    N)assert_allclose)raises)sparse)csgraph)np_longnp_ulongc                 C   s   t | jt jpt | jtS N)np
issubdtypedtypesignedintegerr   )mat r   c/var/www/vscode/kcb/lib/python3.10/site-packages/scipy/sparse/csgraph/tests/test_graph_laplacian.pycheck_int_type   s   r   c                  C   sj   t ttfD ]-} ddgdgggg dg dgddgddgddggfD ]}tj|| d}tttj| q!qd S )	N   )r         )         r   r   r   r   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 ]}| ||d d f  | |d |f   |||f< q|r]t|	 }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sumdiagcopy)xnormedyjdr   r   r   _explicit_laplacian   s   

6r0   Tc                 C   s&  t | dst| tttd} t| r| }| } nt| }t| }tj|dd}| j	d }t
| |d}tj| ||d}tj|||d}	|rSt| | t|| n|rYt| sht||  |jdkrht|	| t||	  ||	 fD ]}
|st|
jdd	t| t|
j|
 t|
| qud S )
Nr'   )r	   r   T)r*   r   )r,   )r,   r*   coo)axis)hasattrevaldictr	   r   r#   r$   	csr_arrayr*   r'   r0   r   r   r   _assert_allclose_sparser   formatr(   zerosT)r   r,   r*   sp_matmat_copysp_mat_copyn_nodesexplicit_laplacianr   sp_laplaciantestedr   r   r    _check_symmetric_graph_laplacian*   s8   









rB   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)rB   )symmetric_matsr   r,   r*   r   r   r   test_symmetric_graph_laplacianO   s   	rD   c                 K   s:   t | r	|  } t |r| }t| |fi | d S r   )r   r#   r$   r   )abkwargsr   r   r   r7   _   s
   

r7   c                 C   s  || |d}t j||d||d d\}	}
|r8t|r8|	jtjks!J |
jtjks)J t|	|dd t|
|dd n,|	j|ks?J |
j|ksFJ t||}t||}t|	|dd t|
|dd |s|rlt|st	|tj
u rzt|	| d S |jdkrt|	| d S d S d S d S Nr   T)r,   return_diaguse_out_degreer*   r   g-q=)atolr1   )r   r   r   r   r	   float64r7   r%   astypetypendarrayr   r8   r!   	desired_L	desired_dr,   rJ   r*   r   arr_typer   Lr/   r   r   r   _check_laplacian_dtype_noneh   s:   

rU   c                 C   s   || |d}t j||d|||d\}	}
|	j|ksJ |
j|ks!J t||}t||}t|	|dd t|
|dd |sa|rGt|sct|tj	u rUt
|	| d S |jdkret|	| d S d S d S d S rH   )r   r   r   r	   r%   rM   r7   r   rN   rO   r   r8   rP   r   r   r   _check_laplacian_dtype   s0   

rV   r   rS   r*   r,   rJ   c           	   
   C   s   g dg dg dg}|t ||d}| }|s+| r+g dg dg dg}g d}|r>| r>g dg d	g dg}g d
}|sQ| sQg dg dg dg}g d}|rd| sdg dg d	g dg}g d}t||||| |||d t||||| |||d d S )Nr   r   r   r   r   r   r   r   r   r   )r   r   )r   r   )r   r   r   )r   g      r   )r   r   )r   r   r   )r   rZ   r   )r[   r   r   )r   r   r   )r   r   r   )r,   rJ   r*   r   rS   )r	   r   r*   rU   rV   )	rJ   r,   r*   r   rS   r!   A_copyrT   r/   r   r   r   test_asymmetric_laplacian   sd   
r^   fmt)csrcscr1   lildokdiabsrc                 C   s*   t jddgddgd| d}t||| d S )Nr   rZ   )r   r   )offsetsr'   r8   )r   diags_arrayrB   )r_   r,   r*   r   r   r   r   test_sparse_formats   s   rh   form)r   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 ]}|d	krwt|||< qjt|t j||j	d
||< qjt
|d |d |d j  t
|d |d  t
|d |d  d S )Nr   T)rI   ri   )rI   rJ   ri   )rI   symmetrizedri   )rI   rl   r,   ri   )rI   r,   ri   )L_inL_outLs	Ls_normedLss
Lss_normedr   r   ro   rm   rn   rq   rp   rr   )r	   arangereshaper   r   r:   r   r4   eyer   r7   )rS   ri   nr   rm   d_inrn   d_outro   dsrp   	ds_normedrq   dssrr   
dss_normedr/   rT   r   r   r   test_laplacian_symmetrized   sZ   








r}   rl   rj   rk   c              	   C   s  d}g dg dg dg}|t || d}tj|d|||| d\}}	tj|d|||| dd	\}
}t|	| t||
 tj|d|||| |d	\}}t||	 |j| ksUJ |t j||jd| }t||d
d
d t 	d
dd}|ry| tv st||||  d S 	 d S )Nr   rW   rX   rY   r   T)rI   r,   rl   rJ   r   r   )rI   r,   rl   rJ   r   ri   gH׊>)rtolrK   r   r   )r	   r   r   r   r   r7   r   ru   rM   rs   rt   
INT_DTYPES)r   rS   r,   rl   rJ   ri   rv   r   LodoLadarT   r/   Lmr+   r   r   r   test_format5  sN   


	


	r   c                  C   sH   t jtdd tjtddd} W d    d S 1 sw   Y  d S )NzInvalid form: 'toto')matchr   toto)ri   )pytestr   r   r   r   r	   ru   )_r   r   r   test_format_error_messagen  s   "r   )F)T)/r   numpyr	   numpy.testingr   r   r   scipyr   scipy.sparser   scipy._lib._utilr   r   r   r"   r0   rB   rD   r7   rU   rV   intclonglongr   float32rL   
longdoubleREAL_DTYPES	complex64
complex128clongdoubleCOMPLEX_DTYPESDTYPESmarkparametrizer   
csr_matrix
coo_matrixr6   	coo_arrayr^   rh   r%   r}   r   r   r   r   r   r   <module>   sv    


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