o
    i)                  
   @   s(  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d/ddZd0d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 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'ge j#$d$g d%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#$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)csgraphc                 C   s    t | jt jpt | jt jS N)np
issubdtypedtypesignedintegeruint)mat r   j/var/www/edux/Edux_v2/venv/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r/   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_matrixr)   r&   r/   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   









rA   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)rA   )symmetric_matsr   r+   r)   r   r   r   test_symmetric_graph_laplacianN   s   	rC   c                 K   s:   t | r	|  } t |r| }t| |fi | d S r   )r   r"   r#   r   )abkwargsr   r   r   r6   ^   s
   

r6   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=)atolr0   )r   r   r   r	   r   float64r6   r$   astypetypendarrayr   r7   r    	desired_L	desired_dr+   rI   r)   r	   arr_typer   Lr.   r   r   r   _check_laplacian_dtype_noneg   s:   

rT   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 rG   )r   r   r	   r   r$   rL   r6   r   rM   rN   r   r7   rO   r   r   r   _check_laplacian_dtype   s0   

rU   )keyr	   rR   r)   r+   rI   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+   rI   r)   r	   rR   )r   r   r)   rT   rU   )	rI   r+   r)   r	   rR   r    A_copyrS   r.   r   r   r   test_asymmetric_laplacian   sd   

r^   fmt)csrcscr0   lildokdiabsrc                 C   s*   t jddgddgd| d}t||| d S )Nr   rZ   )r   r   )r&   r7   )r   diagsrA   )r_   r+   r)   r   r   r   r   test_sparse_formats   s   rg   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)rH   rh   )rH   rI   rh   )rH   symmetrizedrh   )rH   rk   r+   rh   )rH   r+   rh   )L_inL_outLs	Ls_normedLss
Lss_normedr   r   rn   rl   rm   rp   ro   rq   )r   arangereshaper   r   r9   r   r3   eyer	   r6   )rR   rh   nr   rl   d_inrm   d_outrn   dsro   	ds_normedrp   dssrq   
dss_normedr.   rS   r   r   r   test_laplacian_symmetrized   sZ   







r|   rk   ri   rj   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)rH   r+   rk   rI   r	   r   )rH   r+   rk   rI   r	   rh   gH׊>)rtolrJ   r   r   )r   r   r   r   r   r6   r	   rt   rL   rr   rs   
INT_DTYPES)r	   rR   r+   rk   rI   rh   ru   r   LodoLadarS   r.   Lmr*   r   r   r   test_format/  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)rh   )pytestr   r   r   r   r   rt   )_r   r   r   test_format_error_messaged  s   "r   )F)T).r   numpyr   numpy.testingr   r   r   scipyr   scipy.sparser   r   r!   r/   rA   rC   r6   rT   rU   intcint_longlongr~   singledouble
longdoubleREAL_DTYPEScsinglecdoubleclongdoubleCOMPLEX_DTYPEStuplesortedstrDTYPESmarkparametrizer   r5   
coo_matrixr^   rg   r$   r|   r   r   r   r   r   r   <module>   s\    


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