
    ge S                        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	 ddl
mZ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 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& G d d          Z' G d d          Z(dS )z3 Test functions for scipy.linalg._matfuncs module

    N)arrayeyeexprandom)matrix_power)assert_allcloseassert_assert_array_almost_equalassert_equalassert_array_almost_equal_nulpsuppress_warnings)
csc_matrixSparseEfficiencyWarning)r   )expm_expmProductOperatorMatrixPowerOperator_onenorm_matrix_power_nnm)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         Glib/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                       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_ndarrayH   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 r;   )r   r
   r   toarrayr=   s     r(   test_zero_sparsezTestExpM.test_zero_sparseL   sM    A!u~&&!$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 r;   )r   r
   r   r=   s     r(   test_zero_matrixzTestExpM.test_zero_matrixP   sC    RFAa5>""!$q''Aa5!A-88888r*   c                 X   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        |           d S )Nr-   ))r-                 ?))rF   )r   r   r   r   r   r   A)r>   rG   Bs      r(   test_misc_typeszTestExpM.test_misc_typesT   sR   A3%!!Wq)))qcUQ'''VaSE]]++Q///RXse__--q111Z!..//11555B4&!!""X***rdVa(((VbTF^^,,a000Z"//002A66666r*   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   rK      r   r.   )	r   floatmathr   r   r   r   rA   r
   )r>   rG   e1e2r6   r5   s         r(   test_bidiagonal_sparsezTestExpM.test_bidiagonal_sparsea   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-   
   rK   rL   d   nulp)r   float32float64r   r   r   r   r>   rM   scalerG   r5   r6   s         r(   test_padecases_dtype_floatz#TestExpM.test_padecases_dtype_floato   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 rU   )r   	complex64
complex128r   r   r   r   r_   s         r(   test_padecases_dtype_complexz%TestExpM.test_padecases_dtype_complexw   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                      5 }|                    t          d           t          |d          	                                }t          |d	          	                                }d d d            n# 1 swxY w Y   t          ||d
           t          ||d
           d S )NrV   rK   cscrM   formatrL   =Changing the sparsity structure of a csc_matrix is expensive.T)use_exact_onenormFrZ   r[   )r   r^   speyer   r   r   filterr   r   rA   r   )r>   rM   r`   r$   esupexact_onenorminexact_onenorms           r(   !test_padecases_dtype_sparse_floatz*TestExpM.test_padecases_dtype_sparse_float   s]   
. 		I 		IEa%>>>>AE'''#au*=*=*==A"$$ N

2Z\ \ \ %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                 z   t           j        }dD ]}|t          dd|d          z  }t          |          t	          d|          z  }t                      5 }|                    t          d           t          t          |          
                                |d           d d d            n# 1 swxY w Y   d S )	NrV   rK   rg   rh   rL   rj   rZ   r[   )r   rd   rl   r   r   r   rm   r   r   r   rA   )r>   rM   r`   r$   rn   ro   s         r(   #test_padecases_dtype_sparse_complexz,TestExpM.test_padecases_dtype_sparse_complex   s   . 	O 	OEa%>>>>AE

S%0000A"$$ O

2Z\ \ \.tAww/@/@!#NNNNO O O O O O O O O O O O O O O	O 	Os   AB//B3	6B3	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-   rY   )-C6?MbP?rW   rX   r-   r   g      Y@rF   )r   r/   r   r^   rd   r0   r   randastypeiscomplexobjr
   r   r   )r>   rM   r"   r`   rG   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   r>   Qs     r(   test_integer_matrixzTestExpM.test_integer_matrix   s\    HMMMMMMMM	  
 	QcAg/////r*   c                 D   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                   d S )N)ii  r   r   )r   iih     )r   iv  ir   r   r   r   r   rL   r~   )r   r   int16r   r   r   rG   r   s     r(   test_integer_matrix_2zTestExpM.test_integer_matrix_2   s    H''')))'''"ll$ ,.85 5 5 	QcAg///qMMQ	4a==?33333r*   c                 8   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                      5 }|	                    t          d           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^?rL   )g<gGgx@g9=g[dB)r<   g'V7gZ@g2p)r<   r<   gѤT g\GeE@)r<   r<   r<   gPǆ!rv   )rtolr,   gFFg<)r-   r   zIll-conditioned.*rZ   )r   atol)r   r   rO   r   r   r   r/   copyr   rm   RuntimeWarningr	   allclose)	r>   rG   A_logmtinyA_logm_perturbedro   A_expm_logm_perturbedr   r   s	            r(   test_triangularity_perturbationz(TestExpM.test_triangularity_perturbation   s   
 H&&&$$$!!!   	"
    @ @ @@ @ @@ @ @@ @ @A 	 	 	 	Vad3333 	D!;;==!%   	;CJJ~':;;;$()9$:$:!	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; TzBK 5qt$OOOOPPPPPs   ++C""C&)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          ||           d S )Nr-   r   r   rL   r   r   r   rO   r   r   )r>   exp1exp2rG   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-   rK   r   rL   gkQC@gb]IG@gd]IG@gJ[K@r   r   rO   r   r   r>   rG   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   iirL   &   i)r   r   r   rO   expm1r   r   )r>   r   exp39rG   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   rL   rK   r-      r         g      ?ir   )r   r   rO   dotr   r   r   )r>   rG   UVwr   r   s          r(   test_burkardt_4zTestExpM.test_burkardt_4%  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   rL   )r-   r      $   )r   r-   r   r   )r   r   r-   r   r   r   r   r-   r   r   s       r(   test_burkardt_5zTestExpM.test_burkardt_54  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   rL   r   )r>   r   rG   r   r   s        r(   test_burkardt_6zTestExpM.test_burkardt_6H  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   rO   r   r   )r>   r   epsrG   r   r   s         r(   test_burkardt_7zTestExpM.test_burkardt_7X  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 )Nr      )      r   )r   i)r   r   r   rL      r.   r   ir   g      ?r   )r>   exp4exp16rG   r   r   s         r(   test_burkardt_8zTestExpM.test_burkardt_8j  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   )rK   r-   r-   r   )rK   r   r-   r   )rK   rK   rK   r-   rL   )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)r   r   r   )r-   r   r-   )r-   r-   r   rL   )rK   rK   r   )gl$^{b@
|f@g.Q@)g\"N_@r   g
|V@)g\"N_@gLud@gs[@	r   r   rO   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@rL   )      (   )gJކ3Cg;%s1PMSUc[)g;%s1Pgcx
MjCO}vC)r   r   g˂C)r   r   rO   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   rL   )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 )Nr   r-   )r   r-   r   r   )r   r   r-   r   r   )rv   r   r   r   )r   rK   r   rY   r   rL   r   rY   )r)   r   maxr   r   ceilzerosrO   r0   r   minr    floorr   r   )	r>   	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   gPrL   )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~   rw   gư>r   P   rK   r   gYnr-   gvIh%<=)r   )
r0   r   arangeanyr!   r   r   absr   r   )	r>   r`   r"   scrG   rH   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                 p   t          j        d          }d|d<   t          |          }t                      5 }|                    t
          d           |                    t          d           t          t          j        |                    }d d d            n# 1 swxY w Y   t          ||           d S )N)   r   r-   )r   r   zthe matrix subclass.*)	r   r   r   r   rm   DeprecationWarningPendingDeprecationWarningr   r   )r>   rG   B0ro   rH   s        r(   test_matrix_inputzTestExpM.test_matrix_input  s    HZ  $!WW   	#CJJ)+BCCCJJ02IJJJ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   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<   i    )r   r   r   r0   r   )r>   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__r?   rB   rD   rI   rS   ra   re   rr   rt   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r	   r*   r(   r9   r9   G   s       9 9 9C C C9 9 97 7 76 6 6M M MM M MI I I	O 	O 	O	@ 	@ 	@0 0 0	4 	4 	4"Q "Q "QH&) &) &)P) ) )) ) )*) ) )) ) )() ) ) ) ) )$) ) )") ) )$) ) )") ) )4) ) )$- - ->) ) ) : : :&	 	 	         r*   r9   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   rY   )
r   r/   r0   r   randnr   r   matmatr   T)
r>   r"   r   nsamplesirG   rH   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                 &   t          j        d           d}d}d}d}t          |          D ]}t          j                             ||          }t          j                             ||          }t          ||          }t          |                    |          t          ||          	                    |                     t          |j
                            |          t          ||          j
        	                    |                     d S )Nr,   r.   r   rK   rY   )r   r/   r0   r   r  r   r   r  r   r   r  )	r>   r"   r   r#   r  r  rG   rH   r  s	            r(   test_matrix_power_operatorz(TestOperators.test_matrix_power_operator:  s    Dx 	I 	IA	1%%A	1%%A$Q**BBIIaLL,q!*<*<*@*@*C*CDDDBDKKNNLA,>,>,@,D,DQ,G,GHHHH	I 	Ir*   N)r
  r  r  r  r  r  r*   r(   r  r  *  s:        H H HI I I I Ir*   r  ))__doc__rP   numpyr   r   r   r   r   numpy.linalgr   numpy.testingr   r	   r
   r   r   r   scipy.sparser   r   scipy.sparse._constructrl   scipy.sparse.linalg._matfuncsr   r   r   r   r   scipy.sparse._sputilsr   scipy.linalgr   scipy.specialr   r   r   scipy.sparse.linalgr)   r7   r9   r  r  r*   r(   <module>r'     s          ) ) ) ) ) ) ) ) ) ) ) ) % % % % % %; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; = < < < < < < < 0 0 0 0 0 0# # # # # # # # # # # # # # ) ( ( ( ( (       * * * * * * * *        ? ? ?@0 0 0`  `  `  `  `  `  `  ` FI I I I I I I I I Ir*   