
    biV                        d Z ddl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 ddl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)	csc_arraySparseEfficiencyWarning)	eye_array)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         b/home/cdr/jupyterlab/.venv/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_nnmr7   <   s    IINN41a[ 0q 	0A		  !Q(A''1-B0A6Hyy~~b!,HHh/	00r*   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 ]n  }t        ||      j                         }t        ||      j                         }t         j                  j                  ||      }	t        ||	       t        ||       p y )
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dS#J'v6D4#s$F3AYY[F (Au%--/e,446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_ndarrayV   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 rL   )r   r	   r   r>   rN   s     r(   test_zero_sparsezTestExpM.test_zero_sparseZ   s9    1vqen%!$q'//"3aUAa5MBr*   c                 \    t        ddgddgg      }t        t        |      ddgddgg       y rL   )r   r	   r   rN   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-                 ?))rV   )r   r   r   r   r   r   r>   )rO   rC   Bs      r(   test_misc_typesz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                 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   rZ      r   r.   )	r   floatmathr   r   r   r   r>   r	   )rO   rC   e1e2r6   r5   s         r(   test_bidiagonal_sparsezTestExpM.test_bidiagonal_sparseo   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-   
   rZ   r[   d   nulp)r   float32float64r   r   r   r   rO   r\   scalerC   r5   r6   s         r(   test_padecases_dtype_floatz#TestExpM.test_padecases_dtype_float}   so    jj"**- 	ME2 MC//7uE2S%5HH.xL	M	M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 rd   )r   	complex64
complex128r   r   r   r   rn   s         r(   test_padecases_dtype_complexz%TestExpM.test_padecases_dtype_complex   so    llBMM2 	ME2 MC//7uE2S%5HH.xL	M	Mr*   c                    t         j                  }dD ]  }|t        dd|d      z  }t        ||      t	        d|      z  }t        j                         5  d}t        j                  d|t               t        |d	      j                         }t        |d
	      j                         }d d d        t        |d       t        |d        y # 1 sw Y   (xY w)Nre   rZ   cscr\   formatr[   Changing the sparsity structureignoreT)use_exact_onenormFri   rj   )r   rm   r   r   r   warningscatch_warningsfilterwarningsr   r   r>   r   )rO   r\   ro   r$   emsgexact_onenorminexact_onenorms           r(   !test_padecases_dtype_sparse_floatz*TestExpM.test_padecases_dtype_sparse_float   s    

. 		IE	!QeEBBAE'#au*==A((* N7''#7NO %a4 @ H H J"'U"C"K"K"M	N
 +=!#F*?ACH		IN Ns   ACC	c                 ^   t         j                  }dD ]  }|t        dd|d      z  }t        |      t	        d|      z  }t        j                         5  d}t        j                  d|t               t        t        |      j                         |d	       d d d         y # 1 sw Y   xY w)
Nre   rZ   rv   rw   r[   ry   rz   ri   rj   )r   rs   r   r   r   r|   r}   r~   r   r   r   r>   )rO   r\   ro   r$   r   r   s         r(   #test_padecases_dtype_sparse_complexz,TestExpM.test_padecases_dtype_sparse_complex   s    . 	OE	!QeEBBAE
S%00A((* O7''#7NO.tAw/@!#NO O	OO Os   A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-   rh   )-C6?MbP?rf   rg   r-   r   g      Y@rV   )r   r/   r   rm   rs   r0   r   randastypeiscomplexobjr	   r   r   )rO   r\   r"   ro   rC   s        r(   test_logm_consistencyzTestExpM.test_logm_consistency   s    Djj"--0 	@E1b\ @B @EQ&++a"3e";;CCEJAq)V[[A%6 6 >>-d47mQ?@@	@r*   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   rO   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/aLQ)4a=+@+@+BCr*   c                 N   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        j                         5  t        j                  ddt               t        j                  ddt               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)rM   g'V7gZ@g2p)rM   rM   gѤT g\GeE@)rM   rM   rM   gPǆ!r   )rtolr,   gFFg<)r-   r   rz   zIll-conditioned.*zAn ill-conditioned.*ri   )r   atol)r   r   r^   r   r   r   r/   copyr|   r}   r~   RuntimeWarningr   allclose)rO   rC   A_logmtinyA_logm_perturbedA_expm_logm_perturbedr   r   s           r(   test_triangularity_perturbationz(TestExpM.test_triangularity_perturbation   s   
 HH&$! 	"
  @@@@A 	 	Vad3 	D!;;=!%$$& 	;##H.A>R##H.DnU$()9$:!		;
 TzBKK 5qt$OOP	; 	;s   &ADD$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   )rO   exp1exp2rC   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-   rZ   r   r[   gkQC@gb]IG@gd]IG@gJ[K@r   r   r^   r   r   rO   rC   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   )rO   r   exp39rC   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[   rZ   r-   r9   r         g      ?ir   )r   r   r^   dotr   r   r   )rO   rC   UVwr   r   s          r(   test_burkardt_4zTestExpM.test_burkardt_45  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_5D  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   )rO   r   rC   r   r   s        r(   test_burkardt_6zTestExpM.test_burkardt_6X  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   )rO   r   epsrC   r   r   s         r(   test_burkardt_7zTestExpM.test_burkardt_7h  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 )Nr9      )      r:   )r   i)r9   r9   r   r[      r.   r   ir   g      ?r   )rO   exp4exp16rC   r   r   s         r(   test_burkardt_8z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                     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   )rZ   r-   r-   r   )rZ   r   r-   r   )rZ   rZ   rZ   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)r9   r   r   )r-   r9   r-   )r-   r-   r9   r[   )rZ   rZ   r:   )gl$^{b@
|f@g.Q@)g\"N_@r   g
|V@)g\"N_@gLud@gs[@	r   r   r^   r   sortedscipyr1   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   r1   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 )Nr9   r-   )r   r-   r   r   )r   r   r-   r   r   )r   r   r   r   )r   rZ   r9   rh   r   r[   r   rh   )r)   r   maxr   r   ceilzerosr^   r0   r
   minr    floorr   r   )	rO   	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   rZ   r   gYnr-   gvIh%<=)r   )
r0   r   arangeanyr!   r   r   absr   r   )	rO   ro   r"   scrC   rW   gotr6   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                 `   t        j                  d      }d|d<   t        |      }t        j                         5  t        j
                  ddt               t        j
                  ddt               t        t        j                  |            }d d d        t        |       y # 1 sw Y   xY w)N)   r  r-   )r   r   rz   zthe matrix subclass.*)
r   r   r   r|   r}   r~   DeprecationWarningPendingDeprecationWarningr   r   )rO   rC   B0rW   s       r(   test_matrix_inputzTestExpM.test_matrix_input  s    HHZ $!W$$& 	###13EG##13LN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   rM   rM   rM   rM   )rM   r   rM   r   r   rM   rM   )rM   rM   r   rM   rM   r   r   )rM   rM   rM   rM   rM   rM   rM   i    )r   r   r   r0   r   )rO   LE0E1E2js         r(   test_exp_sinch_overflowz TestExpM.test_exp_sinch_overflow)  sr    HH;;;9999; < 1"X&1*r 	AbB	 	Br*   N)!__name__
__module____qualname__rP   rR   rT   rX   rb   rp   rt   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(   rJ   rJ   U   s    9C9>6MMI	O	@0	D$QL&)P))*))() )$)")$)")4)$->) :& r*   rJ   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   rh   )
r   r/   r0   r   randnr   r   matmatr   T)
rO   r"   r   nsamplesirC   rW   CDops
             r(   test_product_operatorz#TestOperators.test_product_operator>  s    Dx 	HA		1%A		1%A		1%A		1%A Aq)BBIIaL!%%(,,q/*=*=a*@ABDDKKNQUU1X\\!_,?,?,C,CA,FG	H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   rZ   rh   )r   r/   r0   r   r   r   r   r!  r1   r   r   r"  )	rO   r"   r   r#   r#  r$  rC   rW   r'  s	            r(   test_matrix_power_operatorz(TestOperators.test_matrix_power_operatorL  s    Dx 	S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	Sr*   N)r  r  r  r(  r*  r  r*   r(   r  r  <  s    HSr*   r  ))__doc__r_   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  r  r*   r(   <module>r5     sq       ) )( ( < -1 1 )  *  ?@0(d  d NS Sr*   