
    xf*              
          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 Zd Zd"d	Zd#dZd Zd Zd Zd Zej&                  ej(                  ej*                  hZej.                  ej0                  ej2                  hZej6                  ej8                  ej:                  hZ e e eez  ez  e!            Z"e jF                  jI                  de"      e jF                  jI                  dejJ                  ejL                  ejN                  ejP                  ejR                  g      e jF                  jI                  dd
dg      e jF                  jI                  dd
dg      e jF                  jI                  dd
dg      d                                    Z*e jF                  jI                  dg d      e jF                  jI                  dd
dg      e jF                  jI                  dd
dg      d                      Z+e jF                  jI                  dejX                  ejL                  ejN                  ejP                  ejR                  g      e jF                  jI                  dg d      d               Z-e jF                  jI                  dejX                  ejL                  ejN                  ejP                  ejR                  g      e jF                  jI                  de"      e jF                  jI                  dd
dg      e jF                  jI                  dd
dg      e jF                  jI                  dd
dg      e jF                  jI                  dddg      d                                            Z.d! Z/y)$    N)assert_allclose)raises)sparse)csgraphc                     t        j                  | j                  t         j                        xs. t        j                  | j                  t         j                        S N)np
issubdtypedtypesignedintegeruint)mats    Q/usr/lib/python3/dist-packages/scipy/sparse/csgraph/tests/test_graph_laplacian.pycheck_int_typer   
   s<    ==B$4$45 		277:     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_laplacianr3      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   )r/   )r/   r-   coo)axis)hasattrevaldictr	   r   r&   r'   
csr_matrixr-   r*   r3   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testeds              r    _check_symmetric_graph_laplacianrF   )   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)rF   )symmetric_matsr   r/   r-   s       r   test_symmetric_graph_laplacianrI   N   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)r/   return_diaguse_out_degreer-   r   g-q=)atolr5   )r   r    r   r   r	   float64r;   r(   astypetypendarrayr   r<   r#   	desired_L	desired_dr/   rQ   r-   r   arr_typer   Lr2   s              r   _check_laplacian_dtype_noner\   g   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 rO   )r   r    r   r	   r(   rT   r;   r   rU   rV   r   r<   rW   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   rZ   r-   r/   rQ   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   rd   r   )re   r   r   )r   r   r   )r   r   r   )r/   rQ   r-   r   rZ   )r	   r   r-   r\   r^   )	rQ   r/   r-   r   rZ   r#   A_copyr[   r2   s	            r   test_asymmetric_laplacianrh      s     
			A 	!E*AVVXFn . . n 			%	 		%	r   fmt)csrcscr5   lildokdiabsrc                 X    t        j                  ddgddgd|       }t        |||       y )Nr   rd   )r   r   )r*   r<   )r   diagsrF   )ri   r/   r-   r   s       r   test_sparse_formatsrr      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)rP   rs   )rP   rQ   rs   )rP   symmetrizedrs   )rP   rw   r/   rs   )rP   r/   rs   )L_inL_outLs	Ls_normedLss
Lss_normedr   r   rz   rx   ry   r|   r{   r}   )r	   arangereshaper   r    r>   r   r8   eyer   r;   )rZ   rs   nr   rx   d_inry   d_outrz   dsr{   	ds_normedr|   dssr}   
dss_normedr2   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   rw   rt   ru   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   ra   rb   rc   r   T)rP   r/   rw   rQ   r   r   )rP   r/   rw   rQ   r   rs   gH׊>)rtolrR   r   r   )r	   r   r   r    r   r;   r   r   rT   r~   r   
INT_DTYPES)r   rZ   r/   rw   rQ   rs   r   r   LodoLadar[   r2   Lmr.   s                   r   test_formatr   5  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)rs   )pytestr   r   r   r    r	   r   )_s    r   test_format_error_messager   n  s@    	z)?	@ 6bffQif56 6 6s   +AA)F)T)0r   numpyr	   numpy.testingr   r   r   scipyr   scipy.sparser   r   r$   r3   rF   rI   r;   r\   r^   intcint_longlongr   singledouble
longdoubleREAL_DTYPEScsinglecdoubleclongdoubleCOMPLEX_DTYPEStuplesortedstrDTYPESmarkparametrizer   r:   
coo_matrix	csr_array	coo_arrayrh   rr   r(   r   r   r    r   r   <module>r      s1     ) *   <"4JD $0B06 ggrww,
yy"))R]]3**bjj"..9	vj;.?SI	J &)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   