o
    i*                  
   @   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)npZ
issubdtypedtypeZsignedintegerr   )mat r   i/home/kim/smarthome/.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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| 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)Zaxis)hasattrevaldictr	   r   r!   r"   	csr_arrayr'   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*   s8   









r6   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)r6   )Zsymmetric_matsr   r)   r'   r   r   r   test_symmetric_graph_laplacianO   s   	r7   c                 K   s:   t | r	|  } t |r| }t| |fi | d S r   )r   r!   r"   r   )abkwargsr   r   r   r3   _   s
   

r3   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=)atolr.   )r   r   r   r
   r	   float64r3   r#   astypetypendarrayr   r4   r   Z	desired_LZ	desired_dr)   r=   r'   r
   arr_typer   Lr,   r   r   r   _check_laplacian_dtype_noneh   s:   

rF   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 r;   )r   r   r
   r	   r#   r@   r3   r   rA   rB   r   r4   rC   r   r   r   _check_laplacian_dtype   s0   

rG   r
   rD   r'   r)   r=   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   rK   r   )rL   r   r   )r   r   r   )r   r   r   )r)   r=   r'   r
   rD   )r	   r   r'   rF   rG   )	r=   r)   r'   r
   rD   r   ZA_copyrE   r,   r   r   r   test_asymmetric_laplacian   sd   
rN   fmt)ZcsrZcscr.   ZlilZdokZdiaZbsrc                 C   s*   t jddgddgd| d}t||| d S )Nr   rK   )r   r   )offsetsr%   r4   )r   Zdiags_arrayr6   )rO   r)   r'   r   r   r   r   test_sparse_formats   s   rQ   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)r<   rR   )r<   r=   rR   )r<   symmetrizedrR   )r<   rU   r)   rR   )r<   r)   rR   )L_inL_outLs	Ls_normedLss
Lss_normedr   r   rX   rV   rW   rZ   rY   r[   )r	   arangereshaper   r   r5   r   r0   eyer
   r3   )rD   rR   nr   rV   Zd_inrW   Zd_outrX   ZdsrY   Z	ds_normedrZ   Zdssr[   Z
dss_normedr,   rE   r   r   r   test_laplacian_symmetrized   sZ   








r`   rU   rS   rT   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   rH   rI   rJ   r   T)r<   r)   rU   r=   r
   r   )r<   r)   rU   r=   r
   rR   gH׊>)Zrtolr>   r   r   )r	   r   r   r   r   r3   r
   r^   r@   r\   r]   
INT_DTYPES)r
   rD   r)   rU   r=   rR   r_   r   ZLodoZLadarE   r,   ZLmr(   r   r   r   test_format5  sN   


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

	rd   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   Ztoto)rR   )pytestr   r   r   r   r	   r^   )_r   r   r   test_format_error_messagen  s   "rh   )F)T)/rf   numpyr	   Znumpy.testingr   r   r   Zscipyr   Zscipy.sparser   Zscipy._lib._utilr   r   r   r    r-   r6   r7   r3   rF   rG   ZintcZlonglongra   Zfloat32r?   Z
longdoubleZREAL_DTYPESZ	complex64Z
complex128ZclongdoubleZCOMPLEX_DTYPESZDTYPESmarkZparametrizer   Z
csr_matrixZ
coo_matrixr2   Z	coo_arrayrN   rQ   r#   r`   rd   rh   r   r   r   r   <module>   sv    


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