
    tKgT                        d Z ddlZddlZddlmZmZmZmZ ddlm	Z	m
Z
mZmZmZmZ ddlmZmZmZ ddlmZ ddlmZmZmZmZmZmZ ddlmZ dd	lmZ dd
l m!Z!m"Z" ddlZ#ddl$Z#d Z%d Z&d Z' G d d      Z( G d d      Z)y)z3 Test 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_matrix	csc_arraySparseEfficiencyWarning)r   )expm_expmProductOperatorMatrixPowerOperator_onenorm_matrix_power_nnmmatrix_power)matrix)logm)	factorialbinomc                    | t        |       k7  s| dk  rt        d      t        |       } |t        |      k7  s|dk  rt        d      t        |      }t        ||       \  }}t        j                  d|  |z        }|t        j                  d|        z  }t        j
                  |g| |z
  z  |      t        j
                  |g|z  || z
        z   S )aj  
    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         k/home/alanp/www/video.onchill/myenv/lib/python3.12/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 !Q<DAqHHTA2a4 EBHHTA2&&E77E7AaC=!$rwwwqy!A#'>>>    c                  v   t         j                  j                  d       t        dd      D ]  } t        d      D ]{  }t         j                  j                  | | f      }t         j                  j                  ||      }t        ||      }t         j                  j                  |d      }t        ||       }  y )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		  !Q(A''1-B0A6Hyy~~b!,HHh/  r+   c                     t         j                  j                  d       t         j                  j                  ddd      \  } }t         j                  j                  d      }t	        || |ffd      }t        || |ffd      }|j                         }d	D ]g  }t        ||      j                         }||z  j                         }t         j                  j                  ||      }	t        ||	       t        ||       i y )
Nr-   r      )r      )size)r;   )r:   r:   )shape)r   r/   r;   )
r    r   r0   randintr   r   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tc3Z(7D4#s$F3AYY[FAu%--/%K((*YY++FE:
j)h' r+   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z y) TestExpMc                 \    t        ddgddgg      }t        t        |      ddgddgg       y N        r   r.   )r   r	   r   selfr%   s     r)   test_zero_ndarrayzTestExpM.test_zero_ndarrayU   s2    Bq61Q%.!!$q'Aa5!A-8r+   c                 x    t        ddgddgg      }t        t        |      j                         ddgddgg       y rM   )r   r	   r   r?   rO   s     r)   test_zero_sparsezTestExpM.test_zero_sparseY   s9    A!u~&!$q'//"3aUAa5MBr+   c                 \    t        ddgddgg      }t        t        |      ddgddgg       y rM   )r   r	   r   rO   s     r)   test_zero_matrixzTestExpM.test_zero_matrix]   s2    RFAa5>"!$q'Aa5!A-8r+   c                    t        t        j                  dgg            }t        t        d      |       t        t        dgg      |       t        t        t	        dgg            |       t        t        t        j                  dgg            |       t        t        t        dgg            j                         |       t        t        j                  dgg            }t        t        d      |       t        t        dgg      |       t        t        t	        dgg            |       t        t        t        dgg            j                         |       y )Nr.   ))r.                 ?))rW   )r   r    r   r   r   r   r?   )rP   rD   Bs      r)   test_misc_typeszTestExpM.test_misc_typesa   s    A3%!Wq)qcUQ'VaSE]+Q/RXXse_-q1Z!./7791=B4&!"X*rdVa(VbTF^,a0Z"/088:A>r+   c                 H   t        g dg dg dgt              }t        j                  d      }t        j                  d      }t	        j
                  |d|z  d|d|z  z
  z  gd	|d
||z
  z  gd	d	|ggt              }t        |      j                         }t        ||       y )N)r.      r   )r   r.   r/   )r   r   r   dtyper.   r   r[      r   r/   )	r   floatmathr   r    r   r   r?   r	   )rP   rD   e1e2r7   r6   s         r)   test_bidiagonal_sparsezTestExpM.test_bidiagonal_sparsen   s     $% XXa[XXa[882r2"9~&ArBwK 2J  %& 7??$!(H5r+   c                     t         j                  t         j                  fD ]M  }dD ]F  }|t        d|      z  }t	        |      }t        ||      t        d|      z  }t        ||d       H O y N{Gz?皙?g      ?r.   
   r[   r\   d   nulp)r    float32float64r   r   r   r   rP   r]   scalerD   r6   r7   s         r)   test_padecases_dtype_floatz#TestExpM.test_padecases_dtype_float|   sa    jj"**-E2C//7uE2S%5HH.xL	 3 .r+   c                     t         j                  t         j                  fD ]M  }dD ]F  }|t        d|      z  }t	        |      }t        ||      t        d|      z  }t        ||d       H O y re   )r    	complex64
complex128r   r   r   r   ro   s         r)   test_padecases_dtype_complexz%TestExpM.test_padecases_dtype_complex   sa    llBMM2E2C//7uE2S%5HH.xL	 3 3r+   c                    t         j                  }dD ]  }|t        dd|d      z  }t        ||      t	        d|      z  }t               5 }|j                  t        d       t        |d      j                         }t        |d	      j                         }d d d        t        |d
       t        |d
        y # 1 sw Y   (xY w)Nrf   r[   cscr]   formatr\   Changing the sparsity structureT)use_exact_onenormFrj   rk   )r    rn   speyer   r   r   filterr   r   r?   r   )rP   r]   rp   r%   esupexact_onenorminexact_onenorms           r)   !test_padecases_dtype_sparse_floatz*TestExpM.test_padecases_dtype_sparse_float   s    

.Ea%>>AE'#au*==A"$

24UV %a4 @ H H J"'U"C"K"K"M % +=!#F*?ACH / %$s   ACC
	c                 <   t         j                  }dD ]{  }|t        dd|d      z  }t        |      t	        d|      z  }t               5 }|j                  t        d       t        t        |      j                         |d       d d d        } y # 1 sw Y   xY w)	Nrf   r[   rw   rx   r\   rz   rj   rk   )r    rt   r|   r   r   r   r}   r   r   r   r?   )rP   r]   rp   r%   r~   r   s         r)   #test_padecases_dtype_sparse_complexz,TestExpM.test_padecases_dtype_sparse_complex   s    .Ea%>>AE
S%00A"$

24UV.tAw/@!#N %$ / %$s   <BB	c           
         t        j                  d       t        j                  t        j                  fD ]  }t        dd      D ]  }dD ]  }t        |      t        j                  ||      |z  z   j                  |      }t        j                  |      r|dt        j                  ||      z  |z  z   }t        t        t        |            |          y )Nr-   r.   ri   )-C6?MbP?rg   rh   r.   r   g      Y@rW   )r   r0   r    rn   rt   r1   r   randastypeiscomplexobjr	   r   r   )rP   r]   r#   rp   rD   s        r)   test_logm_consistencyzTestExpM.test_logm_consistency   s    Djj"--0E1b\BEQ&++a"3e";;CCEJAq)V[[A%6 6 >>-d47mQ? C " 1r+   c                     t        j                  g dg dg dg dg      }t        t        |      t        d|z               y )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_matrixzTestExpM.test_integer_matrix   s9    HH	 
 	QcAg/r+   c                 8   t        j                  g dg dg dg dgt         j                        }t        t	        |      t	        d|z               t        |      }t        t	        |      j                         t	        d|z        j                                y )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_2zTestExpM.test_integer_matrix_2   sq    HH')'"$ ,.885 	QcAg/qMQ)4a=+@+@+BCr+   c                    t        j                  g dg dg dg dgt              }t        j                  g dg dg dg d	gt              }t        t	        |      |d
       t        j                  d       d}|j                         }||d<   t               5 }|j                  t        d       t	        |      }d d d        d
}d|z  }t        t        j                  |||              y # 1 sw Y   4xY w)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   zIll-conditioned.*rj   )r   atol)r    r   r_   r   r   r   r0   copyr   r}   RuntimeWarningr   allclose)	rP   rD   A_logmtinyA_logm_perturbedr   A_expm_logm_perturbedr   r   s	            r)   test_triangularity_perturbationz(TestExpM.test_triangularity_perturbation   s    
 HH&$! 	"
  @@@@A 	 	Vad3 	D!;;=!% CJJ~':;$()9$:! ! TzBKK 5qt$OOP ! s   "C11C:c                 
   t        j                  d      }t        j                  d      }t        j                  ddgddggt              }t        j                  |dgd|ggt              }t	        |      }t        ||       y )Nr.   r   r   r\   r    r   r   r_   r   r   )rP   exp1exp2rD   desiredactuals         r)   test_burkardt_1zTestExpM.test_burkardt_1   s    6 vvayvvayHHFF  ((1II  a(r+   c                     t        j                  ddgddggt              }t        j                  ddgddggt              }t        |      }t	        ||       y )	Nr.   r[   r   r\   gkQC@gb]IG@gd]IG@gJ[K@r    r   r_   r   r   rP   rD   r   r   s       r)   test_burkardt_2zTestExpM.test_burkardt_2  sk     HHFF  ((!34!34  a(r+   c                    t        j                  d      }t        j                  d      }t        j                  ddgddggt              }t        j                  dd|z  z  dd|z  z  z
  t        j                  d       d|z  z  gdt        j                  d      z  d|z  z  d	d|z  z  dd|z  z  z   ggt              }t        |      }t        ||       y )
Nr.   '   r   iir\   &   i)r    r   r   r_   expm1r   r   )rP   r   exp39rD   r   r   s         r)   test_burkardt_3zTestExpM.test_burkardt_3  s     vvayr
HHF#J  ((BtGq"U(|+#"T'*, 288C= BtG,BtGr2e8},.	  a(r+   c                    t        j                  ddgddggt              }t        j                  ddgdd	ggt              }t        j                  dd
gddggt              }t        j                  ddgt              }t        j                  |t        j                  |      z  |      }t        |      }t        ||       y )Ni   i   r\   r[   r.   r:   r         g      ?ir   )r    r   r_   dotr   r   r   )rP   rD   UVwr   r   s          r)   test_burkardt_4zTestExpM.test_burkardt_40  s     HH"I"I  HHq!fq!f%U3HHq$i"c+59HHc2Ye,&&RVVAY*a(r+   c                     t        j                  g dg dg dg dgt              }t        j                  g dg dg dg d	gt              }t        |      }t	        ||       y )
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_5zTestExpM.test_burkardt_5?  sc    
 HH	
  ((	
  a(r+   c                     t        j                  d      }t        j                  ddgddggt              }t        j                  ||gd|ggt              }t	        |      }t        ||       y Nr.   r   r\   r   )rP   r   rD   r   r   s        r)   test_burkardt_6zTestExpM.test_burkardt_6S  st     vvayHHFF  ((4LI  a(r+   c                    t        j                  d      }t        j                  d      }t        j                  d|z   dgdd|z
  ggt              }t        j                  ||gd|ggt              }t        |      }t        ||       y r   )r    r   spacingr   r_   r   r   )rP   r   epsrD   r   r   s         r)   test_burkardt_7zTestExpM.test_burkardt_7c  s    
 vvayjjmHHWaLCL  ((4LI  a(r+   c                    t        j                  d      }t        j                  d      }t        j                  g dg dg dgt              }t        j                  d|z  |z
  d|z  d|z  z
  d	|z  d	|z  z
  gd
|z  |z   d
|z  d|z  z   d|z  d	|z  z   gd|z  d|z  d|z  ggt              dz  }t	        |      }t        ||       y )Nr:      )      r;   )r   i)r:   r:   r   r\      r/   r   ir   g      ?r   )rP   exp4exp16rD   r   r   s         r)   test_burkardt_8z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                     t        j                  g dg dg dg dgt              }t        j                  g dg dg dg d	gt              }t        |      }t	        ||       y )
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_9zTestExpM.test_burkardt_9  sc     HH	
  ((4444	
  a(r+   c                 &   t        j                  g dg dg dgt              }t        t	        t
        j                  j                  |            d       t        j                  g dg dg dgt              }t        |      }t        ||       y )	N)r:   r   r   )r.   r:   r.   )r.   r.   r:   r\   )r[   r[   r;   )gl$^{b@
|f@g.Q@)g\"N_@r   g
|V@)g\"N_@gLud@gs[@	r    r   r_   r   sortedscipyr2   eigvalsr   r   s       r)   test_burkardt_10zTestExpM.test_burkardt_10  s{     HH 	
 	u||33A67C((EEE 	
 a(r+   c                    t        j                  g dg dg dgt              }t        t        j
                  j                  |      d       t        j                  g dg dg dgt              }t        |      }t        ||       y )	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   r_   r   r   r2   eigvalshr   r   s       r)   test_burkardt_11zTestExpM.test_burkardt_11  s|     HHGFF 	
 	--a0,?(()''  a(r+   c                 &   t        j                  g dg dg dgt              }t        t	        t
        j                  j                  |            d       t        j                  g dg dg dgt              }t        |      }t        ||       y )	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_12zTestExpM.test_burkardt_12  s{     HH 	
 	u||33A67G((HGG 	
 a(r+   c                 l   t        dd      }g dg dg dg dg}t        ||       dD ]  }t        dt        t	        j
                  d|z                    }t	        j                  ||ft        	      }t        ||z        D ]  }t        ||      }t        t	        j                  |      d
       t        t	        j                  |      t	        j                  dt	        j                  ||z         |z               ||t        |      z  z  } t        t        |d            }t        ||        y )Nr:   r.   )r   r.   r   r   )r   r   r.   r   r   )r   r   r   r   )r   r[   r:   ri   r   r\   r   ri   )r*   r   maxr   r    ceilzerosr_   r1   r
   minr!   floorr   r   )	rP   	A4_actual
A4_desiredr#   kr   r$   Apr   s	            r)   test_burkardt_13zTestExpM.test_burkardt_13  s     'q!,	"""%'
 		:.A As2772a4=)*Ahh1vU3G1Q3Z'1-RVVBZ+r
BHHR"((1Q3-9I,JK2	!,,	  
 ,Q23FFG, r+   c                     t        j                  g dg dg dgt              }t        j                  g dg dg dgt              }t        |      }t	        ||       y )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_14zTestExpM.test_burkardt_14  s]     HH(" 	
 ((HGH 	
 a(r+   c           	      $   dD ]
  }t        ddd      D ]  }|t        j                  |dd      z  }t        j                  |dk        r Ht        j                  t        j                  d|dz         d      |z  }t        |      }|}t        t        j                  |dz         d d d f   t        j                  |dz         d d d f         |d d d f   z  |d d d f   z  }dt        |      j                         z  }t        |||	         y )
N)r   r   gư>r   P   r[   r   gYnr.   gvIh%<=)r   )
r1   r    arangeanyr"   r   r   absr   r   )	rP   rp   r#   scrD   rX   gotr7   r   s	            r)   test_pascalz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XD9 % 'r+   c                 8   t        j                  d      }d|d<   t        |      }t               5 }|j	                  t
        d       |j	                  t        d       t        t        j                  |            }d d d        t        |       y # 1 sw Y   xY w)N)   r  r.   )r   r   zthe matrix subclass.*)	r    r   r   r   r}   DeprecationWarningPendingDeprecationWarningr   r   )rP   rD   B0r   rX   s        r)   test_matrix_inputzTestExpM.test_matrix_input  sv    HHZ $!W CJJ)+BCJJ02IJRYYq\"A ! 	2	 ! s   ABBc           
          t        j                  g dg dg dg dg dg dg dg      }t        |       }t        d|z        }|}t        d      D ]  }||z  }	 t	        ||       y )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   r1   r   )rP   LE0E1E2js         r)   test_exp_sinch_overflowz TestExpM.test_exp_sinch_overflow"  sm    HH;;;9999; < 1"X&1*rAbB  	Br+   N)!__name__
__module____qualname__rQ   rS   rU   rY   rc   rq   ru   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)   rK   rK   T   s    9C9?6MMIO	@0	D"QH&)P))*))() )$)")$)")4)$->) :&	 r+   rK   c                       e Zd Zd Zd Zy)TestOperatorsc                    t        j                  d       d}d}d}t        |      D ]4  }t        j                   j	                  ||      }t        j                   j	                  ||      }t        j                   j	                  ||      }t        j                   j	                  ||      }t        |||      }	t        |	j                  |      |j                  |      j                  |      j                  |             t        |	j                  j                  |      |j                  |      j                  |      j                  j                  |             7 y )Nr-   r/   r   ri   )
r   r0   r1   r    randnr   r   matmatr   T)
rP   r#   r   nsamplesirD   rX   CDops
             r)   test_product_operatorz#TestOperators.test_product_operator7  s    DxA		1%A		1%A		1%A		1%A Aq)BBIIaL!%%(,,q/*=*=a*@ABDDKKNQUU1X\\!_,?,?,C,CA,FG !r+   c                 >   t        j                  d       d}d}d}d}t        |      D ]  }t        j                   j	                  ||      }t        j                   j	                  ||      }t        ||      }t        |j                  |      t        j                  j                  ||      j                  |             t        |j                  j                  |      t        j                  j                  ||      j                  j                  |              y )Nr-   r/   r   r[   ri   )r   r0   r1   r    r  r   r   r   r2   r   r   r!  )	rP   r#   r   r$   r"  r#  rD   rX   r&  s	            r)   test_matrix_power_operatorz(TestOperators.test_matrix_power_operatorE  s    DxA		1%A		1%A$Q*BBIIaL"))*@*@A*F*J*J1*MNBDDKKNBII,B,B1a,H,J,J,N,Nq,QR !r+   N)r  r  r  r'  r)  r  r+   r)   r  r  5  s    HSr+   r  )*__doc__r`   numpyr    r   r   r   r   numpy.testingr   r   r	   r
   r   r   scipy.sparser   r   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  r  r+   r)   <module>r4     sr      ) ); ; H G 01 1 )  *  ?@0(^  ^ BS Sr+   