
    sg*              
          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 Zd Zd#d
Zd$dZd Zd Zd Zd Zej,                  eej.                  hZej2                  ej4                  ej6                  hZej:                  ej<                  ej>                  hZ  e!eez  e z  e"      Z#e jH                  jK                  de#      e jH                  jK                  dejL                  ejN                  ejP                  ejR                  ejT                  g      e jH                  jK                  ddd	g      e jH                  jK                  ddd	g      e jH                  jK                  ddd	g      d                                    Z+e jH                  jK                  dg d      e jH                  jK                  ddd	g      e jH                  jK                  ddd	g      d                      Z,e jH                  jK                  dejZ                  ejN                  ejP                  ejR                  ejT                  g      e jH                  jK                  dg d      d               Z.e jH                  jK                  dejZ                  ejN                  ejP                  ejR                  ejT                  g      e jH                  jK                  de#      e jH                  jK                  ddd	g      e jH                  jK                  ddd	g      e jH                  jK                  ddd	g      e jH                  jK                  ddd g      d!                                           Z/d" Z0y)%    N)assert_allclose)raises)sparse)csgraph)np_longnp_ulongc                     t        j                  | j                  t         j                        xs$ t        j                  | j                  t              S N)np
issubdtypedtypesignedintegerr   )mats    b/var/www/html/venv/lib/python3.12/site-packages/scipy/sparse/csgraph/tests/test_graph_laplacian.pycheck_int_typer      s8    ==B$4$45 		8:     c                      t         t        t        fD ]W  } ddgdgggg dg dgddgddgddggfD ]8  }t        j                  ||       }t        t        t        j                  |       : Y y )	N   )r         )         r   r   r   r   r   )	intfloatcomplexr   arrayassert_raises
ValueErrorr   	laplacian)tmAs      r   test_laplacian_value_errorr%      s{    %  <a&C5'i(q6Aq6Aq6*, 	<A !$A*g&7&7;	<<r   Fc                    t        j                  |       r| j                         } t        j                  |       } d| z  }t        |j                  d         D ]9  }| ||dz   d f   j                         | |d |f   j                         z   |||f<   ; |rIt        j                  |      j                         }d||dk(  <   ||d d d f   dz  z  }||d d d f   dz  z  }|S )Ng      r   r   g      ?g      ?)
r   issparsetoarrayr   asarrayrangeshapesumdiagcopy)xnormedyjds        r   _explicit_laplacianr4      s    qIIK


1AqA1771: 11QqST61QrrT7;;=0!A#1GGAJOO!q&		QqvY]	QtAvY]Hr   Tc                 j   t        | d      st        | t        t        t                    } t	        j
                  |       r| }|j                         } nt	        j                  |       }t        j                  |       }t	        j                  |d      }| j                  d   }t        | |      }t        j                  | ||      }t        j                  |||      }	|rt        | |       t        ||       n4|rt        |       s't        ||        |j                   dk(  rt        |	|       t        ||	j                                ||	j                         fD ]U  }
|s/t        |
j#                  d	      t        j$                  |             t        |
j&                  |
       t        |
|       W y )
Nr+   )r   r   T)r.   r   )r0   )r0   r.   coo)axis)hasattrevaldictr   r   r'   r(   
csr_matrixr.   r+   r4   r   r!   r   _assert_allclose_sparser   formatr,   zerosT)r   r0   r.   sp_matmat_copysp_mat_copyn_nodesexplicit_laplacianr!   sp_laplaciantesteds              r    _check_symmetric_graph_laplacianrG   *   s]   3 3623snn""3'wws|H##F6KiilG,S@!!#f4@I$$VF*.0L X&4>#.Is+}}%'f=I|3356l2245 4FJJAJ.0AB&) 23	4r   c                  L    d} | D ]  }dD ]  }dD ]  }t        |||          y )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)rG   )symmetric_matsr   r0   r.   s       r   test_symmetric_graph_laplacianrJ   O   sJ    N  D! 	DF# D0fdCD	DDr   c                     t        j                  |       r| j                         } t        j                  |      r|j                         }t        | |fi | y r
   )r   r'   r(   r   )abkwargss      r   r<   r<   _   s?    qIIKqIIKAq#F#r   c                     || |      }t        j                  ||d||d       \  }	}
|rft        |      r[|	j                  t        j
                  k(  sJ |
j                  t        j
                  k(  sJ t        |	|d       t        |
|d       n|	j                  |k(  sJ |
j                  |k(  sJ t	        j                  |      j                  |      }t	        j                  |      j                  |      }t        |	|d       t        |
|d       |sS|rt        |      sEt        |      t        j                  u rt        |	|       y |j                  dk(  rt        |	|       y y y y Nr   T)r0   return_diaguse_out_degreer.   r   g-q=)atolr6   )r   r!   r   r   r   float64r<   r)   astypetypendarrayr   r=   r$   	desired_L	desired_dr0   rR   r.   r   arr_typer   Lr3   s              r   _check_laplacian_dtype_noner]   h   s@    1E
"C%DAq .%ww"**$$$ww"**$$$959959ww%ww%JJy)007	JJy)007	959959>#.CyBJJ&3'u$'3/ % / r   c                 
    || |      }t        j                  ||d|||      \  }	}
|	j                  |k(  sJ |
j                  |k(  sJ t        j                  |      j                  |      }t        j                  |      j                  |      }t        |	|d       t        |
|d       |sS|rt        |      sEt        |      t        j                  u rt        |	|       y |j                  dk(  rt        |	|       y y y y rP   )r   r!   r   r   r)   rU   r<   r   rV   rW   r   r=   rX   s              r   _check_laplacian_dtyper_      s     1E
"C%DAq 77e77e

9%,,U3I

9%,,U3IAyu5Ayu5>#.CyBJJ&3'u$'3/ % / r   )keyr   r[   r.   r0   rR   c           
      X   g dg dg dg} |t        j                  |      |      }|j                         }|s| rg dg dg dg}g d}|r| rg dg d	g dg}g d
}|s| sg dg dg dg}g d}|r| sg dg d	g dg}g d}t        ||| |||       t	        ||||| |||       y )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   re   r   )rf   r   r   )r   r   r   )r   r   r   )r0   rR   r.   r   r[   )r   r   r.   r]   r_   )	rR   r0   r.   r   r[   r$   A_copyr\   r3   s	            r   test_asymmetric_laplacianri      s     
			A 	!E*AVVXFn . . n 			%	 		%	r   fmt)csrcscr6   lildokdiabsrc                 X    t        j                  ddgddgd|       }t        |||       y )Nr   re   )r   r   )r+   r=   )r   diagsrG   )rj   r0   r.   r   s       r   test_sparse_formatsrs      s,    
 ,,1vAwfS
AC$S&$7r   form)r   functionloc                 J   d} | t        j                  ||z        j                  ||            }t        j                  |d|      \  }}t        j                  |dd|      \  }}t        j                  |dd|      \  }}	t        j                  |ddd|      \  }
}||j
                  z  }t        j                  |d|      \  }}t        j                  |dd|      \  }}t        |	||z          t        |	|       t        ||       i }dD ]I  }|d	k(  rt        |      ||<    t        |      t        j                  ||j                  
            ||<   K t        |d   |d   |d   j
                  z          t        |d   |d          t        |d   |d          y )Nr   T)rQ   rt   )rQ   rR   rt   )rQ   symmetrizedrt   )rQ   rx   r0   rt   )rQ   r0   rt   )L_inL_outLs	Ls_normedLss
Lss_normedr   r   r{   ry   rz   r}   r|   r~   )r   arangereshaper   r!   r?   r   r9   eyer   r<   )r[   rt   nr   ry   d_inrz   d_outr{   dsr|   	ds_normedr}   dssr~   
dss_normedr3   r\   s                     r   test_laplacian_symmetrizedr      s    	
A
299QU#++Aq1
2C""JD$
 $$	LE5 	FB #,,Iy 355LC  $TBHC$..	J
 Bu%BIz*
AF 77?7AaD47266!39956AaD	7 AdGQvY7%=>AdGQuX.AkNAlO<r   rx   ru   rv   c           	         d}g dg dg dg} |t        j                  |      |       }t        j                  |d||||       \  }}	t        j                  |d|||| d	      \  }
}t	        |	|       t        ||
       t        j                  |d|||| |	      \  }}t	        ||	       |j                  | k(  sJ  |t        j                  ||j                              j                  |       }t        ||d
d
       t        j                  d      j                  dd      }|r| t        v st	         ||      ||z         y y )Nr   rb   rc   rd   r   T)rQ   r0   rx   rR   r   r   )rQ   r0   rx   rR   r   rt   gH׊>)rtolrS   r   r   )r   r   r   r!   r   r<   r   r   rU   r   r   
INT_DTYPES)r   r[   r0   rx   rR   rt   r   r   LodoLadar\   r3   Lmr/   s                   r   test_formatr   6  sD    	
Ai
+C
288C=
.C%FB %FB BB#%DAq Ar77e	
266!399%	&	-	-e	4BBD9
		!Q"Au
*!b1f% 	r   c                      t        j                  t        d      5  t        j                  t        j                  d      d      } d d d        y # 1 sw Y   y xY w)NzInvalid form: 'toto')matchr   toto)rt   )pytestr   r    r   r!   r   r   )_s    r   test_format_error_messager   o  s@    	z)?	@ 6bffQif56 6 6s   +AA)F)T)1r   numpyr   numpy.testingr   r   r   scipyr   scipy.sparser   scipy._lib._utilr   r   r   r%   r4   rG   rJ   r<   r]   r_   intclonglongr   float32rT   
longdoubleREAL_DTYPES	complex64
complex128clongdoubleCOMPLEX_DTYPESsortedstrDTYPESmarkparametrizer   r;   
coo_matrix	csr_array	coo_arrayri   rs   r)   r   r   r    r   r   <module>r      s+     ) *    .<"4JD $0B06 ggw,
zz2::r}}5,,r~~>	
[(>9s	C &)bhh&,&7&7&,&7&7&,&6&6&,&6&6	&8 9
 $/D%=1)D%=99 : 2 09 *9x  !6 7D%=1$/8 0 278
 """"!!!!	# !<=2= >2=j """"!!!!	# &)D%=1u6)D%=9*d!34* 5 : 7 2 **Z6r   