
    Pi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(dS )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          |           k    s| dk     rt          d          t          |           } |t          |          k    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         {/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/scipy/sparse/linalg/tests/test_matfuncs.py_burkardt_13_powerr)      s    $ 	CFF{{a!ee>???AACFF{{a!ee;<<<AA !Q<<DAqHTA2a4  EBHTA2&&&E7E7AaC=!$$rwwqy!A#'>'>>>    c                     t           j                            d           t          dd          D ]} t          d          D ]}t           j                            | | f          }t           j                            ||          }t          ||          }t           j                            |d          }t          ||           d S )N        )	r   r   seedrangelinalgr   r   normr   )r"   r#   MMpobservedexpecteds         r(   test_onenorm_matrix_power_nnmr7   <   s    INN41a[[ 0 0q 	0 	0A	  !Q((A''1--B0A66Hy~~b!,,HHh////	00 0r*   c                  \   t           j                            d           t           j                            ddd          \  } }t           j                            d          }t	          || |ffd          }t	          || |ffd          }|                                }d	D ]}t          ||                                          }t          ||                                          }t           j                            ||          }	t          ||	           t          ||           d S )
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   INN4y  AF 33HC9&&DdS#J'v666D4#s$F333AYY[[F ( (Au%%--//e,,4466Y++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 dS ) TestExpMc                 v    t          ddgddgg          }t          t          |          ddgddgg           d S N        r   r-   )r   r	   r   selfr$   s     r(   test_zero_ndarrayzTestExpM.test_zero_ndarrayV   sC    Bq61Q%.!!!$q''Aa5!A-88888r*   c                     t          ddgddgg          }t          t          |                                          ddgddgg           d S rL   )r   r	   r   r>   rN   s     r(   test_zero_sparsezTestExpM.test_zero_sparseZ   sM    1vqen%%!$q''//"3"3aUAa5MBBBBBr*   c                 v    t          ddgddgg          }t          t          |          ddgddgg           d S rL   )r   r	   r   rN   s     r(   test_zero_matrixzTestExpM.test_zero_matrix^   sC    RFAa5>""!$q''Aa5!A-8888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                                                    |           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                                                    |           d S )Nr-   ))r-                 ?))rV   )r   r   r   r   r   r   r>   )rO   rC   Bs      r(   test_misc_typeszTestExpM.test_misc_typesb   sd   A3%!!Wq)))qcUQ'''VaSE]]++Q///RXse__--q111Yu--..6688!<<<B4&!!""X***rdVa(((VbTF^^,,a000Yv..//779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          |                                          }t          ||           d S )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    IIIIII $% % % Xa[[Xa[[82r2"9~&ArBwK 2J  %& & & 77??$$!(H55555r*   c                     t           j        t           j        fD ]_}dD ]Z}|t          d|          z  }t	          |          }t          ||          t          d|          z  }t          ||d           [`d S 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}   s    j"*- 	M 	ME2 M MC////77uE222S%5H5H5HH.xLLLLL	M	M 	Mr*   c                     t           j        t           j        fD ]_}dD ]Z}|t          d|          z  }t	          |          }t          ||          t          d|          z  }t          ||d           [`d S rd   )r   	complex64
complex128r   r   r   r   rn   s         r(   test_padecases_dtype_complexz%TestExpM.test_padecases_dtype_complex   s    lBM2 	M 	ME2 M MC////77uE222S%5H5H5HH.xLLLLL	M	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	          
                                }t          |d
	          
                                }d d d            n# 1 swxY w Y   t          ||d           t          ||d           d S )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 		IE	!QeEBBBBAE'''#au*=*=*==A(** N N7'#7NOOO %a4 @ @ @ H H J J"'U"C"C"C"K"K"M"M	N N N N N N N N N N N N N N N
 +=!#FFFF*?ACHHHHH		I 		Is   A$C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          |                                          |d	           d d d            n# 1 swxY w Y   d S )
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 	OE	!QeEBBBBAE

S%0000A(** O O7'#7NOOO.tAww/@/@!#NNNNO O O O O O O O O O O O O O O	O 	Os   AB66B:	=B:	c           
         t          j        d           t          j        t          j        fD ]}t          dd          D ]}dD ]}t          |          t          j        ||          |z  z                       |          }t          j	        |          r|dt          j        ||          z  |z  z   }t          t          t          |                    |           d S )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j"-0 	@ 	@E1b\\ @ @B @ @EQ&+a"3"3e";;CCEJJAq)) ?V[A%6%6 6 >>-d477mmQ????@@	@ 	@r*   c                     t          j        g dg dg dg dg          }t          t          |          t          d|z                       d S )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   s\    HMMMMMMMM	  
 	QcAg/////r*   c                 x   t          j        g dg dg dg dgt           j                  }t          t	          |          t	          d|z                       t          |          }t          t	          |                                          t	          d|z                                                       d S )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   s    H''')))'''"ll$ ,.85 5 5 	QcAg///aLLQ))4a==+@+@+B+BCCCCCr*   c                 x   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}|                                }||d<   t          j	                    5  t          j
        ddt                     t          j
        ddt                     t	          |          }d d d            n# 1 swxY w Y   d
}d|z  }t          t          j        ||||                      d S )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   
 H&&&$$$!!!   	"
    @ @ @@ @ @@ @ @@ @ @A 	 	 	 	Vad3333 	D!;;==!%$&& 	; 	;#H.A>RRR#H.DnUUU$()9$:$:!		; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;
 TzBK 5qt$OOOOPPPPPs   0AD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          ||           d S )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 vayyvayyH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	          ||           d S )	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  s     H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          ||           d S )
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     vayyr

HF#J    (BtGq"U(|+#"T'*, 28C== 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          ||           d S )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     H"I"I    Hq!fq!f%U333Hq$i"c+5999Hc2Ye,,,&RVAYY**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	          ||           d S )
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  s    
 HLLLLLLLL	
    (NNMMLLLL	
    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          ||           d S Nr-   r   r[   r   )rO   r   rC   r   r   s        r(   test_burkardt_6zTestExpM.test_burkardt_6X  s     vayyH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          ||           d S r   )r   r   spacingr   r^   r   r   )rO   r   epsrC   r   r   s         r(   test_burkardt_7zTestExpM.test_burkardt_7h  s    
 vayyjmmH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          ||           d S )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   vayyr

HKKLLJJ 	  
 (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	          ||           d S )
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  s     HLLLLLLLL	
    (444444444444	
    a(((((r*   c                 H   t          j        g dg dg dgt                    }t          t	          t
          j                            |                    d           t          j        g dg dg dgt                    }t          |          }t          ||           d S )	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     HIIIIII 	  
 	u|33A6677CCC(EEEEEEEEE 	  
 a(((((r*   c                 .   t          j        g dg dg dgt                    }t          t          j                            |          d           t          j        g dg dg dgt                    }t          |          }t          ||           d S )	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     HGGGFFFFFF 	  
 	--a00,???() ) )' ' '' ' '    a(((((r*   c                 H   t          j        g dg dg dgt                    }t          t	          t
          j                            |                    d           t          j        g dg dg dgt                    }t          |          }t          ||           d S )	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     HNNNNNN 	  
 	u|33A6677GGG(HHHGGGGGG 	  
 a(((((r*   c                    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          ||           +d S )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  sW    'q!,,	"ll"ll"ll%oo'
 		:... 	- 	-A As272a4==))**Ah1vU333G1Q3ZZ - -'1--RVBZZ+++r

BHR"(1Q3--9I,J,JKKK2	!,,,Q223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	          ||           d S )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     HLL(((""" 	  
 (HHHGGGHHH 	  
 a(((((r*   c           	      `   dD ])}t          ddd          D ]}|t          j        |dd          z  }t          j        |dk               r nt          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          |                                          z  }t          |||	           +d S )
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	  sH    ' 	: 	:E1b!__ : :bi2r2226"v+&& EGBIaQ//44u<GG 1q5!1!1!!!D&!9!#1q5!1!1$qqq&!9; ;=?QQQZHJLQQQtV*Us8}}00222XD99999	: 	:r*   c                 z   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            n# 1 swxY w Y   t          ||           d S )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    HZ  $!WW$&& 	# 	##13EG G G#13LN N NRYq\\""A	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	2s   AB  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	          ||           d S )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)  s    H;;;;;;;;;999999999999; < < 1"XX&1*r 	 	AbBB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 9 9C C C9 9 9> > >6 6 6M M MM M MI I I	O 	O 	O	@ 	@ 	@0 0 0	D 	D 	D$Q $Q $QL&) &) &)P) ) )) ) )*) ) )) ) )() ) ) ) ) )$) ) )") ) )$) ) )") ) )4) ) )$- - ->) ) ) : : :&           r*   rJ   c                       e Zd Zd Zd ZdS )TestOperatorsc                    t          j        d           d}d}d}t          |          D ]V}t          j                             ||          }t          j                             ||          }t          j                             ||          }t          j                             ||          }t          |||          }	t          |	                    |          |                    |                              |                              |                     t          |	j	                            |          |                    |                              |          j	                            |                     Xd S )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 	HA	1%%A	1%%A	1%%A	1%%A Aq))BBIIaLL!%%((,,q//*=*=a*@*@AAABDKKNNQUU1XX\\!__,?,C,CA,F,FGGGG	H 	Hr*   c                 j   t          j        d           d}d}d}d}t          |          D ]}t          j                             ||          }t          j                             ||          }t          ||          }t          |                    |          t          j        	                    ||          
                    |                     t          |j                            |          t          j        	                    ||          j        
                    |                     d S )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 	SA	1%%A	1%%A$Q**BBIIaLL")*@*@A*F*F*J*J1*M*MNNNBDKKNNBI,B,B1a,H,H,J,N,Nq,Q,QRRRR	S 	Sr*   N)r  r  r  r(  r*  r  r*   r(   r  r  <  s:        H H HS S S S 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     s          ) ) ) ) ) ) ) ) ) ) ) )( ( ( ( ( ( ( ( ( ( ( ( ( ( < ; ; ; ; ; ; ; - - - - - -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ) ( ( ( ( (       * * * * * * * *        ? ? ?@0 0 0( ( (d  d  d  d  d  d  d  d NS S S S S S S S S Sr*   