
    _MhT                        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 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suppress_warnings)	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         g/var/www/html/test/jupyter/venv/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_nnmr8   ;   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;   )r:   r:   )shape)r   r/   r;   )	r    r   r0   randintr   toarrayr   r2   r   )
rowcoldataAmatAAdenser!   ApowAmat_pow
Adense_pows
             r)   test_matrix_powerrI   E   s   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_ndarrayU   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 rM   )r   r	   r   r?   rO   s     r)   test_zero_sparsezTestExpM.test_zero_sparseY   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 rM   )r   r	   r   rO   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.                 ?))rW   )r   r    r   r   r   r   r?   )rP   rD   Bs      r)   test_misc_typeszTestExpM.test_misc_typesa   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   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    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.   
   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|   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 re   )r    	complex64
complex128r   r   r   r   ro   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                      5 }|                    t          d           t          |d          	                                }t          |d	          	                                }d d d            n# 1 swxY w Y   t          ||d
           t          ||d
           d S )Nrf   r[   cscr]   formatr\   Changing the sparsity structureT)use_exact_onenormFrj   rk   )r    rn   r   r   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   sT   
. 	I 	IE	!QeEBBBBAE'''#au*=*=*==A"$$ N

24UVVV %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 )	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   . 	O 	OE	!QeEBBBBAE

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

24UVVV.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.   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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   rP   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                 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^?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   
 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   r\   r    r   r   r_   r   r   )rP   exp1exp2rD   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.   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  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   )rP   r   exp39rD   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\   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     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_5?  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   )rP   r   rD   r   r   s        r)   test_burkardt_6zTestExpM.test_burkardt_6S  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   )rP   r   epsrD   r   r   s         r)   test_burkardt_7zTestExpM.test_burkardt_7c  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   r\      r/   r   ir   g      ?r   )rP   exp4exp16rD   r   r   s         r)   test_burkardt_8zTestExpM.test_burkardt_8u  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   )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  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:   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     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   r2   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 )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  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   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  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   r|   DeprecationWarningPendingDeprecationWarningr   r   )rP   rD   B0r~   rX   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   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"  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__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 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H&) &) &)P) ) )) ) )*) ) )) ) )() ) ) ) ) )$) ) )") ) )$) ) )") ) )4) ) )$- - ->) ) ) : : :&	 	 	         r+   rK   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   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 	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   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 	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  5  s:        H H HS S S S Sr+   r  ))__doc__r`   numpyr    r   r   r   r   numpy.testingr   r   r	   r
   r   r   scipy.sparser   r   scipy.sparse._constructr   scipy.sparse.linalg._matfuncsr   r   r   r   r   r   scipy.sparse._sputilsr   scipy.linalgr   scipy.specialr   r   r   scipy.sparse.linalgr*   r8   rI   rK   r  r  r+   r)   <module>r3     s         ) ) ) ) ) ) ) ) ) ) ) ); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; < ; ; ; ; ; ; ; - - - - - -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ) ( ( ( ( (       * * * * * * * *        ? ? ?@0 0 0( ( (^  ^  ^  ^  ^  ^  ^  ^ BS S S S S S S S S Sr+   