
    (phT                         S 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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suppress_warnings)	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         Z/var/www/html/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_nnmr8   ;   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;   )r:   r:   )shape)r   r/   r;   )	r    r   r0   randintr   toarrayr   r2   r   )
rowcoldataAmatAAdenser!   ApowAmat_pow
Adense_pows
             r)   test_matrix_powerrI   E   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!)"TestExpMT   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_ndarrayU   s2    Bq61Q%.!!$q'Aa5!A-8r+   c                 x    [        SS/SS//5      n[        [        U5      R                  5       SS/SS//5        g rN   )r   r	   r   r?   rP   s     r)   test_zero_sparseTestExpM.test_zero_sparseY   s9    1vqen%!$q'//"3aUAa5MBr+   c                 \    [        SS/SS//5      n[        [        U5      SS/SS//5        g rN   )r   r	   r   rP   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.                 ?))r[   )r   r    r   r   r   r   r?   )rQ   rD   Bs      r)   test_misc_typesTestExpM.test_misc_typesa   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	   )rQ   rD   e1e2r7   r6   s         r)   test_bidiagonal_sparseTestExpM.test_bidiagonal_sparsen   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`   ra   d   nulp)r    float32float64r   r   r   r   rQ   rb   scalerD   r6   r7   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 rk   )r    	complex64
complex128r   r   r   r   ru   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[        5        nUR                  [        S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)Nrl   r`   cscrb   formatra   Changing the sparsity structureT)use_exact_onenormFrp   rq   )r    rt   r   r   r   r   filterr   r   r?   r   )rQ   rb   rv   r%   esupexact_onenorminexact_onenorms           r)   !test_padecases_dtype_sparse_float*TestExpM.test_padecases_dtype_sparse_float   s    

.E	!QeEBBAE'#au*==A"$

24UV %a4 @ H H J"'U"C"K"K"M % +=!#F*?ACH / %$s   AB--
B;	c           	      :   [         R                  nS Hs  nU[        SSUSS9-  n[        U5      [	        SUS9-  n[        5        nUR                  [        S5        [        [        U5      R                  5       USS9  S S S 5        Mu     g ! , (       d  f       M  = f)	Nrl   r`   r   r   ra   r   rp   rq   )r    r{   r   r   r   r   r   r   r   r   r?   )rQ   rb   rv   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"$

24UV.tAw/@!#N %$ / %$s   9B
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.   ro   )-C6?MbP?rm   rn   r.   r   g      Y@r[   )r   r0   r    rt   r{   r1   r   randastypeiscomplexobjr	   r   r   )rQ   rb   r#   rv   rD   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   rQ   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   ra   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                  " / 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'   [        5        nUR                  [        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^?ra   )g<gGgx@g9=g[dB)rO   g'V7gZ@g2p)rO   rO   gѤT g\GeE@)rO   rO   rO   gPǆ!r   )rtolr-   gFFg<)r.   r   zIll-conditioned.*rp   )r   atol)r    r   rd   r   r   r   r0   copyr   r   RuntimeWarningr   allclose)	rQ   rD   A_logmtinyA_logm_perturbedr   A_expm_logm_perturbedr   r   s	            r)   test_triangularity_perturbation(TestExpM.test_triangularity_perturbation   s    
 HH&$! 	"
  @@@@A 	 	Vad3 	D!;;=!% CJJ~':;$()9$:! ! TzBKK 5q$OOP ! s   "C++
C9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   ra   r    r   r   rd   r   r   )rQ   exp1exp2rD   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   ra   gkQC@gb]IG@gd]IG@gJ[K@r    r   rd   r   r   rQ   rD   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   iira   &   i)r    r   r   rd   expm1r   r   )rQ   r   exp39rD   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   ra   r`   r.   r:   r         g      ?ir   )r    r   rd   dotr   r   r   )rQ   rD   UVwr   r   s          r)   test_burkardt_4TestExpM.test_burkardt_40  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   ra   )r.   r;      $   )r   r.   r;   r   )r   r   r.   r;   r   r   r   r.   r   r   s       r)   test_burkardt_5TestExpM.test_burkardt_5?  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   ra   r   )rQ   r   rD   r   r   s        r)   test_burkardt_6TestExpM.test_burkardt_6S  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   rd   r   r   )rQ   r   epsrD   r   r   s         r)   test_burkardt_7TestExpM.test_burkardt_7c  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 )Nr:      )      r;   )r   i)r:   r:   r   ra      r/   r   ir   g      ?r   )rQ   exp4exp16rD   r   r   s         r)   test_burkardt_8TestExpM.test_burkardt_8u  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.   ra   )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)r:   r   r   )r.   r:   r.   )r.   r.   r:   ra   )r`   r`   r;   )gl$^{b@
|f@g.Q@)g\"N_@r   g
|V@)g\"N_@gLud@gs[@	r    r   rd   r   sortedscipyr2   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@ra   )      (   )gJކ3Cg;%s1PMSUc[)g;%s1Pgcx
MjCO}vC)r  r  g˂C)r    r   rd   r   r   r2   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   ra   )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 )Nr:   r.   )r   r.   r   r   )r   r   r.   r   r   )r   r   r   r   )r   r`   r:   ro   r   ra   r   ro   )r*   r   maxr   r    ceilzerosrd   r1   r
   minr!   floorr   r   )	rQ   	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   gPra   )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   )
r1   r    arangeanyr"   r   r   absr  r   )	rQ   rv   r#   scrD   r\   gotr7   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                 F   [         R                  " S5      nSUS'   [        U5      n[        5        nUR	                  [
        S5        UR	                  [        S5        [        [         R                  " U5      5      nS S S 5        [        WU5        g ! , (       d  f       N= f)N)   r'  r.   )r   r   zthe matrix subclass.*)	r    r  r   r   r   DeprecationWarningPendingDeprecationWarningr   r   )rQ   rD   B0r   r\   s        r)   test_matrix_inputTestExpM.test_matrix_input  sv    HHZ $!W CJJ)+BCJJ02IJRYYq\"A ! 	2	 ! s   AB
B 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   rO   rO   rO   rO   )rO   r   rO   r   r   rO   rO   )rO   rO   r   rO   rO   r   r   )rO   rO   rO   rO   rO   rO   rO   i    )r    r   r   r1   r   )rQ   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__rR   rU   rX   r]   rh   rw   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r$  r+  r4  __static_attributes__r6  r+   r)   rK   rK   T   s    9C9>6MMIO	@0	D"QH&)P))*))() )$)")$)")4)$->) :&	 r+   rK   c                        \ rS rSrS rS rSrg)TestOperatorsi5  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   ro   )
r   r0   r1   r    randnr   r   matmatr   T)
rQ   r#   r  nsamplesirD   r\   CDops
             r)   test_product_operator#TestOperators.test_product_operator7  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`   ro   )r   r0   r1   r    r?  r   r   r@  r2   r   r   rA  )	rQ   r#   r  r$   rB  rC  rD   r\   rF  s	            r)   test_matrix_power_operator(TestOperators.test_matrix_power_operatorE  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+   r6  N)r7  r8  r9  r:  rG  rJ  r;  r6  r+   r)   r=  r=  5  s    HSr+   r=  ))__doc__re   numpyr    r   r   r   r   numpy.testingr   r   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*   r8   rI   rK   r=  r6  r+   r)   <module>rV     sn      ) ); ; < -1 1 )  *  ?@0(^  ^ BS Sr+   