
    doiV                        S r SSKrSSKrSSKrSSKJrJrJrJr  SSK	J
r
JrJrJrJr  SSKJrJr  SSKJr  SSKJrJrJrJrJrJr  SSKJr  SS	KJr  SS
KJ r J!r!  SSKr"SSK#r"S r$S r%S r& " S S5      r' " S S5      r(g)z2Test functions for scipy.linalg._matfuncs module

    N)arrayeyeexprandom)assert_allcloseassert_assert_array_almost_equalassert_equalassert_array_almost_equal_nulp)	csc_arraySparseEfficiencyWarning)	eye_array)expm_expmProductOperatorMatrixPowerOperator_onenorm_matrix_power_nnmmatrix_power)matrix)logm)	factorialbinomc                    U [        U 5      :w  d  U S:  a  [        S5      e[        U 5      n U[        U5      :w  d  US:  a  [        S5      e[        U5      n[        X5      u  p#[        R                  " SU * U-  5      nU[        R                  " SU * 5      -  n[        R
                  " U/X-
  -  U5      [        R
                  " U/U-  X0-
  5      -   $ )a:  
A helper function for testing matrix functions.

Parameters
----------
n : integer greater than 1
    Order of the square matrix to be returned.
p : non-negative integer
    Power of the matrix.

Returns
-------
out : ndarray representing a square matrix
    A Forsythe matrix of order n, raised to the power p.

   z#n must be an integer greater than 1r   z p must be a non-negative integer      $@)int
ValueErrordivmodnppowerdiag)npablargesmalls         c/var/www/html/land-ocr/venv/lib/python3.13/site-packages/scipy/sparse/linalg/tests/test_matfuncs.py_burkardt_13_powerr)      s    $ 	CF{a!e>??AACF{a!e;<<AA !<DAHHTA2a4 EBHHTA2&&E77E7AC=!$rwwwqy!#'>>>    c                  v   [         R                  R                  S5        [        SS5       H  n [        S5       Hx  n[         R                  R                  X 45      n[         R                  R                  X!5      n[        X!5      n[         R                  R                  US5      n[        XE5        Mz     M     g )N        )	r   r   seedrangelinalgr   r   normr   )r"   r#   MMpobservedexpecteds         r(   test_onenorm_matrix_power_nnmr7   <   s    IINN41a[qA		  !(A''-B06Hyy~~b!,HH/  r*   c                     [         R                  R                  S5        [         R                  R                  SSSS9u  p[         R                  R                  SS9n[	        X U44SS9n[	        X U44SS9nUR                  5       nS	 Hj  n[        XF5      R                  5       n[        X65      R                  5       n[         R                  R                  XV5      n	[        Xy5        [        Xx5        Ml     g )
Nr,   r      )r      )size)r:   )r9   r9   )shape)r   r.   r:   )	r   r   r/   randintr   toarrayr   r1   r   )
rowcoldataAmatAAdenser    ApowAmat_pow
Adense_pows
             r(   test_matrix_powerrH   F   s    IINN4yy  AF 3HC99&Dd#J'v6D4s$F3AYY[FA%--/,446YY++F:
)' r*   c                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S r"g!)"TestExpMU   c                 \    [        SS/SS//5      n[        [        U5      SS/SS//5        g N        r   r-   )r   r	   r   selfr$   s     r(   test_zero_ndarrayTestExpM.test_zero_ndarrayV   s2    Bq61Q%.!!$q'Aa5!A-8r*   c                 x    [        SS/SS//5      n[        [        U5      R                  5       SS/SS//5        g rM   )r   r	   r   r>   rO   s     r(   test_zero_sparseTestExpM.test_zero_sparseZ   s9    1vqen%!$q'//"3aUAa5MBr*   c                 \    [        SS/SS//5      n[        [        U5      SS/SS//5        g rM   )r   r	   r   rO   s     r(   test_zero_matrixTestExpM.test_zero_matrix^   s2    RFAa5>"!$q'Aa5!A-8r*   c                    [        [        R                  " S//5      5      n[        [        S5      U5        [        [        S//5      U5        [        [        [	        S//5      5      U5        [        [        [        R                  " S//5      5      U5        [        [        [        S//5      5      R                  5       U5        [        [        R                  " S//5      5      n[        [        S5      U5        [        [        S//5      U5        [        [        [	        S//5      5      U5        [        [        [        S//5      5      R                  5       U5        g )Nr-   ))r-                 ?))rZ   )r   r   r   r   r   r   r>   )rP   rC   Bs      r(   test_misc_typesTestExpM.test_misc_typesb   s    A3%!Wq)qcUQ'VaSE]+Q/RXXse_-q1Yu-.668!<B4&!"X*rdVa(VbTF^,a0Yv./7791=r*   c                 >   [        / SQ/ SQ/ SQ/[        S9n[        R                  " S5      n[        R                  " S5      n[        R
                  " USU-  SUSU-  -
  -  /S	US
X2-
  -  /S	S	U//[        S9n[        U5      R                  5       n[        XT5        g )N)r-      r   )r   r-   r.   )r   r   r   dtyper-   r   r_      r   r.   )	r   floatmathr   r   r   r   r>   r	   )rP   rC   e1e2r6   r5   s         r(   test_bidiagonal_sparseTestExpM.test_bidiagonal_sparseo   s     $% XXa[XXa[882r2"9~&ArwK 2J  %& 7??$!(5r*   c                     [         R                  [         R                  4 HB  nS H9  nU[        SUS9-  n[	        U5      n[        X!S9[        SUS9-  n[        XESS9  M;     MD     g N{Gz?皙?g      ?r-   
   r_   r`   d   nulp)r   float32float64r   r   r   r   rP   ra   scalerC   r5   r6   s         r(   test_padecases_dtype_float#TestExpM.test_padecases_dtype_float}   s]    jj"**-E2C//7u2S%5HH.xL	 3 .r*   c                     [         R                  [         R                  4 HB  nS H9  nU[        SUS9-  n[	        U5      n[        X!S9[        SUS9-  n[        XESS9  M;     MD     g rj   )r   	complex64
complex128r   r   r   r   rt   s         r(   test_padecases_dtype_complex%TestExpM.test_padecases_dtype_complex   s]    llBMM2E2C//7u2S%5HH.xL	 3 3r*   c           	         [         R                  nS H  nU[        SSUSS9-  n[        X!S9[	        SUS9-  n[
        R                  " 5          Sn[
        R                  " SU[        5        [        USS	9R                  5       n[        US
S	9R                  5       nS S S 5        [        WUSS9  [        WUSS9  M     g ! , (       d  f       N)= f)Nrk   r_   cscra   formatr`   Changing the sparsity structureignoreT)use_exact_onenormFro   rp   )r   rs   r   r   r   warningscatch_warningsfilterwarningsr   r   r>   r   )rP   ra   ru   r$   emsgexact_onenorminexact_onenorms           r(   !test_padecases_dtype_sparse_float*TestExpM.test_padecases_dtype_sparse_float   s    

.E	!QeEBBAE'#au*==A((*7''#7NO %a4 @ H H J"'U"C"K"K"M	 +
 +=!#F*?ACH / +*s   AC  
C	c           	      `   [         R                  nS H  nU[        SSUSS9-  n[        U5      [	        SUS9-  n[
        R                  " 5          Sn[
        R                  " SU[        5        [        [        U5      R                  5       USS	9  S S S 5        M     g ! , (       d  f       M  = f)
Nrk   r_   r~   r   r`   r   r   ro   rp   )r   rz   r   r   r   r   r   r   r   r   r   r>   )rP   ra   ru   r$   r   r   s         r(   #test_padecases_dtype_sparse_complex,TestExpM.test_padecases_dtype_sparse_complex   s    .E	!QeEBBAE
S%00A((*7''#7NO.tAw/@!#N +* / +*s   AB
B-	c           
         [         R                  " S5        [        R                  [        R                  4 H  n[        SS5       H  nS H  n[        U5      [         R                  " X"5      U-  -   R                  U5      n[        R                  " U5      (       a  US[         R                  " X"5      -  U-  -   n[        [        [        U5      5      U5        M     M     M     g )Nr,   r-   rn   )-C6?MbP?rl   rm   r-   r   g      Y@rZ   )r   r/   r   rs   rz   r0   r   randastypeiscomplexobjr	   r   r   )rP   ra   r"   ru   rC   s        r(   test_logm_consistencyTestExpM.test_logm_consistency   s    Djj"--0E1b\BEQ&++a"3e";;CCEJAq))V[[%6 6 >>-d47mQ? C " 1r*   c                     [         R                  " / SQ/ SQ/ SQ/ SQ/5      n[        [        U5      [        SU-  5      5        g )N)r-   r-   r-   )r-   r   r-   r-   )r-   r-   r   r-   )r-   r-   r-   r         ?)r   r   r   r   rP   Qs     r(   test_integer_matrixTestExpM.test_integer_matrix   s9    HH	 
 	QcAg/r*   c                 4   [         R                  " / SQ/ SQ/ SQ/ SQ/[         R                  S9n[        [	        U5      [	        SU-  5      5        [        U5      n[        [	        U5      R                  5       [	        SU-  5      R                  5       5        g )N)ii  r   r   )r   iih     )r   iv  ir   r   r   r   r   r`   r   )r   r   int16r   r   r   r>   r   s     r(   test_integer_matrix_2TestExpM.test_integer_matrix_2   sq    HH')'"$ ,.885 	QcAg/aLQ)4a=+@+@+BCr*   c           	      R   [         R                  " / SQ/ SQ/ SQ/ SQ/[        S9n[         R                  " / SQ/ SQ/ SQ/ S	Q/[        S9n[        [	        U5      US
S9  [
        R                  " S5        SnUR                  5       nX4S'   [        R                  " 5          [        R                  " SS[        5        [        R                  " SS[        5        [	        U5      nS S S 5        S
nSU-  n[        [         R                  " WXUS9(       + 5        g ! , (       d  f       N:= f)N)g3d?     L@r   r   )r   gRal!A?r   r   )r   r   gQI?r   )r   r   r   g^?r`   )g<gGgx@g9=g[dB)rN   g'V7gZ@g2p)rN   rN   gѤT g\GeE@)rN   rN   rN   gPǆ!r   )rtolr,   gFFg<)r-   r   r   zIll-conditioned.*zAn ill-conditioned.*ro   )r   atol)r   r   rc   r   r   r   r/   copyr   r   r   RuntimeWarningr   allclose)rP   rC   A_logmtinyA_logm_perturbedA_expm_logm_perturbedr   r   s           r(   test_triangularity_perturbation(TestExpM.test_triangularity_perturbation   s	   
 HH&$! 	"
  @@@@A 	 	Vad3 	D!;;=!%$$&##H.A>R##H.DnU$()9$:!	 '
 TzBKK 5q$OOP '&s    AD
D&c                    [         R                  " S5      n[         R                  " S5      n[         R                  " SS/SS//[        S9n[         R                  " US/SU//[        S9n[	        U5      n[        XT5        g )Nr-   r   r   r`   r   r   r   rc   r   r   )rP   exp1exp2rC   desiredactuals         r(   test_burkardt_1TestExpM.test_burkardt_1   s    6 vvayvvayHHFF  ((1II  a(r*   c                     [         R                  " SS/SS//[        S9n[         R                  " SS/SS//[        S9n[        U5      n[	        X25        g )	Nr-   r_   r   r`   gkQC@gb]IG@gd]IG@gJ[K@r   r   rc   r   r   rP   rC   r   r   s       r(   test_burkardt_2TestExpM.test_burkardt_2  si     HHFF  ((!34!34  a(r*   c                    [         R                  " S5      n[         R                  " S5      n[         R                  " SS/SS//[        S9n[         R                  " SSU-  -  SSU-  -  -
  [         R                  " S5      * SU-  -  /S[         R                  " S5      -  SU-  -  S	SU-  -  SSU-  -  -   //[        S9n[        U5      n[        XT5        g )
Nr-   '   r   iir`   &   i)r   r   r   rc   expm1r   r   )rP   r   exp39rC   r   r   s         r(   test_burkardt_3TestExpM.test_burkardt_3   s     vvayr
HHF#J  ((BtGq"U(|+#"T'*, 288C= BtG,BtGr2e8},.	  a(r*   c                 |   [         R                  " SS/SS//[        S9n[         R                  " SS/SS	//[        S9n[         R                  " SS
/SS//[        S9n[         R                  " SS/[        S9n[         R                  " U[         R                  " U5      -  U5      n[        U5      n[        Xe5        g )Ni   i   r`   r_   r-   r9   r         g      ?ir   )r   r   rc   dotr   r   r   )rP   rC   UVwr   r   s          r(   test_burkardt_4TestExpM.test_burkardt_45  s     HH"I"I  HHq!fq!f%U3HHq$i"c+59HHc2Ye,&&RVVAY*a(r*   c                     [         R                  " / SQ/ SQ/ SQ/ SQ/[        S9n[         R                  " / SQ/ SQ/ SQ/ S	Q/[        S9n[        U5      n[	        X25        g )
N)r   r:   r   r   )r   r   r:   r   )r   r   r   r:   r   r`   )r-   r:      $   )r   r-   r:   r   )r   r   r-   r:   r   r   r   r-   r   r   s       r(   test_burkardt_5TestExpM.test_burkardt_5D  sa    
 HH	
  ((	
  a(r*   c                     [         R                  " S5      n[         R                  " SS/SS//[        S9n[         R                  " X/SU//[        S9n[	        U5      n[        XC5        g Nr-   r   r`   r   )rP   r   rC   r   r   s        r(   test_burkardt_6TestExpM.test_burkardt_6X  sp     vvayHHFF  ((LI  a(r*   c                    [         R                  " S5      n[         R                  " S5      n[         R                  " SU-   S/SSU-
  //[        S9n[         R                  " X/SU//[        S9n[        U5      n[        XT5        g r   )r   r   spacingr   rc   r   r   )rP   r   epsrC   r   r   s         r(   test_burkardt_7TestExpM.test_burkardt_7h  s    
 vvayjjmHHWaLCL  ((LI  a(r*   c                    [         R                  " S5      n[         R                  " S5      n[         R                  " / SQ/ SQ/ SQ/[        S9n[         R                  " SU-  U-
  SU-  SU-  -
  S	U-  S	U-  -
  /S
U-  U-   S
U-  SU-  -   SU-  S	U-  -   /SU-  SU-  SU-  //[        S9S-  n[	        U5      n[        XT5        g )Nr9      )      r:   )r   i)r9   r9   r   r`      r.   r   ir   g      ?r   )rP   exp4exp16rC   r   r   s         r(   test_burkardt_8TestExpM.test_burkardt_8z  s    vvayr
HH 	
 ((X_bh4/51T61ABX_bh4/EAdF1BCXr%x5) 	 #	#
 a(r*   c                     [         R                  " / SQ/ SQ/ SQ/ SQ/[        S9n[         R                  " / SQ/ SQ/ SQ/ S	Q/[        S9n[        U5      n[	        X25        g )
N)r-   r   r   r   )r_   r-   r-   r   )r_   r   r-   r   )r_   r_   r_   r-   r`   )fa%@@X21@g鷯g)@)^Iچ@|Pk܂@g'@r   )v@gBfg;@r   r   )gDl{3@r   r   r   r   r   s       r(   test_burkardt_9TestExpM.test_burkardt_9  sa     HH	
  ((4444	
  a(r*   c                    [         R                  " / SQ/ SQ/ SQ/[        S9n[        [	        [
        R                  R                  U5      5      S5        [         R                  " / SQ/ SQ/ SQ/[        S9n[        U5      n[        X25        g )	N)r9   r   r   )r-   r9   r-   )r-   r-   r9   r`   )r_   r_   r:   )gl$^{b@
|f@g.Q@)g\"N_@r   g
|V@)g\"N_@gLud@gs[@	r   r   rc   r   sortedscipyr1   eigvalsr   r   s       r(   test_burkardt_10TestExpM.test_burkardt_10  sy     HH 	
 	u||33A67C((EEE 	
 a(r*   c                 
   [         R                  " / SQ/ SQ/ SQ/[        S9n[        [        R
                  R                  U5      S5        [         R                  " / SQ/ SQ/ SQ/[        S9n[        U5      n[        X25        g )	N)g!=@l?QP)r   gt 9@猽誉\!@)r   r   g0n2A@r`   )      (   )gJކ3Cg;%s1PMSUc[)g;%s1Pgcx
MjCO}vC)r  r  g˂C)r   r   rc   r   r   r1   eigvalshr   r   s       r(   test_burkardt_11TestExpM.test_burkardt_11  sz     HHGFF 	
 	--a0,?(()''  a(r*   c                    [         R                  " / SQ/ SQ/ SQ/[        S9n[        [	        [
        R                  R                  U5      5      S5        [         R                  " / SQ/ SQ/ SQ/[        S9n[        U5      n[        X25        g )	N)i}   r   )iz8   6   )i}9   4   r`   )ir   r   )g)'g13V?g-RR?)gǣg׃4V?g3?)gWNx`gp?g}mR?r   r   s       r(   test_burkardt_12TestExpM.test_burkardt_12  sy     HH 	
 	u||33A67G((HGG 	
 a(r*   c                 l   [        SS5      n/ SQ/ SQ/ SQ/ SQ/n[        X5        S GH  n[        S[        [        R
                  " SU-  5      5      5      n[        R                  " X34[        S	9n[        X4-  5       H  n[        X65      n[        [        R                  " U5      S
5        [        [        R                  " U5      [        R                  " S[        R                  " Xc-  5      * U-  5      5        XW[        U5      -  -  nM     [        [        US5      5      n[        X5        GM     g )Nr9   r-   )r   r-   r   r   )r   r   r-   r   r   )r   r   r   r   )r   r_   r9   rn   r   r`   r   rn   )r)   r   maxr   r   ceilzerosrc   r0   r
   minr    floorr   r   )	rP   	A4_actual
A4_desiredr"   kr   r#   Apr   s	            r(   test_burkardt_13TestExpM.test_burkardt_13  s     'q!,	"""%'
 		.A As2772a4=)*AhhvU3G13Z'-RVVBZ+r
BHHR"((13-9I,JK	!,,	  
 ,Q23FF, r*   c                     [         R                  " / SQ/ SQ/ SQ/[        S9n[         R                  " / SQ/ SQ/ SQ/[        S9n[        U5      n[	        X25        g )N)r   g:0yE>r   )g"Dr   g    _B)gP@r   gPr`   )g .?gzDv>g1O?)gvUg԰gLg@sDQ)g F~?gg=>gcE?r   r   s       r(   test_burkardt_14TestExpM.test_burkardt_14  s[     HH(" 	
 ((HGH 	
 a(r*   c           	      @   S GH  n[        SSS5       GH  nU[        R                  " USS5      -  n[        R                  " US:  5      (       a    MQ  [        R                  " [        R                  " SUS-   5      S5      U-  n[        U5      nUn[        [        R                  " US-   5      S S 2S 4   [        R                  " US-   5      S S S 24   5      US S S 24   -  US S 2S 4   -  nS[        U5      R                  5       -  n[        XgUS	9  GM     GM     g )
N)r   r   gư>r   P   r_   r   gYnr-   gvIh%<=)r   )
r0   r   arangeanyr!   r   r   absr  r   )	rP   ru   r"   scrC   r[   gotr6   r   s	            r(   test_pascalTestExpM.test_pascal	  s     'E1b!_bii2r2266"v+&&GGBIIaQ/4u<G 1q5!1!D&!9!#1q5!1$q&!9;=?QZHJLQtV*Us8}0022D9 % 'r*   c                 t   [         R                  " S5      nSUS'   [        U5      n[        R                  " 5          [        R
                  " SS[        5        [        R
                  " SS[        5        [        [         R                  " U5      5      nS S S 5        [        WU5        g ! , (       d  f       N= f)N)   r)  r-   )r   r   r   zthe matrix subclass.*)
r   r  r   r   r   r   DeprecationWarningPendingDeprecationWarningr   r   )rP   rC   B0r[   s       r(   test_matrix_inputTestExpM.test_matrix_input  s    HHZ $!W$$&##13EG##13LNRYYq\"A ' 	2 '&s   AB))
B7c           
          [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      n[        U* 5      n[        SU-  5      nUn[        S5       H  nXD-  nM	     [	        X45        g )N)r   r   r   rN   rN   rN   rN   )rN   r   rN   r   r   rN   rN   )rN   rN   r   rN   rN   r   r   )rN   rN   rN   rN   rN   rN   rN   i    )r   r   r   r0   r   )rP   LE0E1E2js         r(   test_exp_sinch_overflow TestExpM.test_exp_sinch_overflow)  si    HH;;;9999; < 1"X&1*rAB  	r*    N)#__name__
__module____qualname____firstlineno__rQ   rT   rW   r\   rg   rv   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r&  r-  r6  __static_attributes__r8  r*   r(   rJ   rJ   U   s    9C9>6MMI	O	@0	D$QL&)P))*))() )$)")$)")4)$->) :& r*   rJ   c                        \ rS rSrS rS rSrg)TestOperatorsi<  c                    [         R                  " S5        SnSnSn[        U5       GH0  n[        R                   R	                  X5      n[        R                   R	                  X5      n[        R                   R	                  X5      n[        R                   R	                  X5      n[        XVU5      n	[        U	R                  U5      UR                  U5      R                  U5      R                  U5      5        [        U	R                  R                  U5      UR                  U5      R                  U5      R                  R                  U5      5        GM3     g )Nr,   r.   r   rn   )
r   r/   r0   r   randnr   r   matmatr   T)
rP   r"   r  nsamplesirC   r[   CDops
             r(   test_product_operator#TestOperators.test_product_operator>  s    DxA		%A		%A		%A		%A q)BBIIaL!%%(,,q/*=*=a*@ABDDKKNQUU1X\\!_,?,?,C,CA,FG !r*   c                 :   [         R                  " S5        SnSnSnSn[        U5       H  n[        R                   R	                  X5      n[        R                   R	                  X5      n[        Xc5      n[        UR                  U5      [        R                  R                  Xc5      R                  U5      5        [        UR                  R                  U5      [        R                  R                  Xc5      R                  R                  U5      5        M     g )Nr,   r.   r   r_   rn   )r   r/   r0   r   rA  r   r   rB  r1   r   r   rC  )	rP   r"   r  r#   rD  rE  rC   r[   rH  s	            r(   test_matrix_power_operator(TestOperators.test_matrix_power_operatorL  s    DxA		%A		%A$Q*BBIIaL"))*@*@*F*J*J1*MNBDDKKNBII,B,B1,H,J,J,N,Nq,QR !r*   r8  N)r9  r:  r;  r<  rI  rL  r=  r8  r*   r(   r?  r?  <  s    HSr*   r?  ))__doc__rd   r   numpyr   r   r   r   r   numpy.testingr   r   r	   r
   r   scipy.sparser   r   scipy.sparse._constructr   scipy.sparse.linalg._matfuncsr   r   r   r   r   r   scipy.sparse._sputilsr   scipy.linalgr   scipy.specialr   r   r   scipy.sparse.linalgr)   r7   rH   rJ   r?  r8  r*   r(   <module>rX     sq       ) )( ( < -1 1 )  *  ?@0(d  d NS Sr*   