a
    h}U                     @   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	m
Z
mZmZmZmZ ddlmZmZmZ ddlmZ ddlmZmZmZmZmZmZ ddlmZ dd	lmZ dd
l m!Z!m"Z" ddlZ#ddl$Z#dd Z%dd Z&dd Z'G dd dZ(G d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_matrix	csc_arraySparseEfficiencyWarning)r   )expm_expmProductOperatorMatrixPowerOperator_onenorm_matrix_power_nnmmatrix_power)matrix)logm)	factorialbinomc                 C   s   | t | ks| dk rtdt | } |t |ks8|dk r@tdt |}t|| \}}td|  | }|td|   }t|g| |  |t|g| ||   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bZlargeZsmall r%   c/var/www/html/assistant/venv/lib/python3.9/site-packages/scipy/sparse/linalg/tests/test_matfuncs.py_burkardt_13_power   s    r'   c                  C   sn   t jd tddD ]R} tdD ]D}t j| | f}t j||}t||}t j|d}t|| q"qd S )N        )	r   r   seedrangelinalgr   r   Znormr   )r!   r"   MZMpobservedexpectedr%   r%   r&   test_onenorm_matrix_power_nnm;   s    
r1   c            
      C   s   t jd t jjdddd\} }t jjdd}t|| |ffdd}t|| |ffdd}| }d	D ]@}t|| }||  }t j||}	t	||	 t	|| qdd S )
Nr(   r      )r      )size)r3   )r2   r2   )shape)r   r*   r3   )
r   r   r+   randintr   r   toarrayr   r-   r   )
rowcoldataZAmatAZAdenser   ZApowZAmat_powZ
Adense_powr%   r%   r&   test_matrix_powerE   s    
r<   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=S )>TestExpMc                 C   s2   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#   r%   r%   r&   test_zero_ndarrayU   s    zTestExpM.test_zero_ndarrayc                 C   s6   t ddgddgg}tt| ddgddgg d S r>   )r   r   r   r7   r@   r%   r%   r&   test_zero_sparseY   s    zTestExpM.test_zero_sparsec                 C   s2   t ddgddgg}tt|ddgddgg d S r>   )r   r   r   r@   r%   r%   r&   test_zero_matrix]   s    zTestExpM.test_zero_matrixc                 C   s   t tdgg}tt d| tt dgg| tt tdgg| tt tdgg| tt tdggj| t t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)                 ?))rE   )r   r   r   r   r   r   r;   )rA   r;   Br%   r%   r&   test_misc_typesa   s    zTestExpM.test_misc_typesc                 C   s   t g dg dg dgtd}td}td}tj|d| d|d|   gd	|d
||  gd	d	|ggtd}t| }t|| d S )N)r)      r   )r   r)   r*   )r   r   r   dtyper)   r   rH      r   r*   )	r   floatmathr   r   r   r   r7   r   )rA   r;   e1e2r0   r/   r%   r%   r&   test_bidiagonal_sparsen   s$    

zTestExpM.test_bidiagonal_sparsec                 C   s^   t jt jfD ]L}dD ]B}|td|d }t|}t||dtd|d }t||dd qqd S N{Gz?皙?g      ?r)   
   rH   rI   d   Znulp)r   Zfloat32float64r   r   r   r
   rA   rJ   scaler;   r/   r0   r%   r%   r&   test_padecases_dtype_float|   s    z#TestExpM.test_padecases_dtype_floatc                 C   s^   t jt jfD ]L}dD ]B}|td|d }t|}t||dtd|d }t||dd qqd S rQ   )r   Z	complex64
complex128r   r   r   r
   rY   r%   r%   r&   test_padecases_dtype_complex   s    z%TestExpM.test_padecases_dtype_complexc              	   C   s   t j}dD ]}|tdd|dd }t||dtd|d }t <}|td t|dd	 }t|d	d	 }W d    n1 s0    Y  t
||d
d t
||d
d q
d S )NrR   rH   cscrJ   formatrI   =Changing the sparsity structure of a csc_matrix is expensive.T)Zuse_exact_onenormFrV   rW   )r   rX   speyer   r   r   filterr   r   r7   r
   )rA   rJ   rZ   r#   esupZexact_onenormZinexact_onenormr%   r%   r&   !test_padecases_dtype_sparse_float   s    .z*TestExpM.test_padecases_dtype_sparse_floatc              	   C   s   t j}dD ]t}|tdd|dd }t|td|d }t 2}|td tt	|
 |dd W d    q
1 st0    Y  q
d S )	NrR   rH   r^   r_   rI   ra   rV   rW   )r   r\   rb   r   r   r   rc   r   r
   r   r7   )rA   rJ   rZ   r#   rd   re   r%   r%   r&   #test_padecases_dtype_sparse_complex   s    z,TestExpM.test_padecases_dtype_sparse_complexc              	   C   s   t d tjtjfD ]p}tddD ]`}dD ]V}t|t |||  |}t	|rp|dt || |  }t
tt|| q,q$qd S )Nr(   r)   rU   )-C6?MbP?rS   rT   r)   r   g      Y@rE   )r   r+   r   rX   r\   r,   r   ZrandZastypeZiscomplexobjr   r   r   )rA   rJ   r!   rZ   r;   r%   r%   r&   test_logm_consistency   s    

zTestExpM.test_logm_consistencyc                 C   s<   t g dg dg dg dg}tt|td|  d S )N)r)   r)   r)   )r)   rk   r)   r)   )r)   r)   rk   r)   )r)   r)   r)   rk         ?)r   r   r   r   rA   Qr%   r%   r&   test_integer_matrix   s    zTestExpM.test_integer_matrixc                 C   sd   t jg dg dg dg dgt jd}tt|td|  t|}tt|jtd| j d S )N)ii  r   r   )r   iih     )r   iv  ir   r   r   r   r   rI   rl   )r   r   Zint16r   r   r   r;   rm   r%   r%   r&   test_integer_matrix_2   s    
zTestExpM.test_integer_matrix_2c           	      C   s   t jg dg dg dg dgtd}t jg dg dg dg d	gtd}tt||d
d td d}| }||d< t $}|	t
d t|}W d    n1 s0    Y  d
}d| }tt j||||d  d S )N)g3d?     L@rs   rs   )r   gRal!A?rs   rs   )r   r   gQI?rs   )r   r   r   g^?rI   )g<gGgx@g9=g[dB)r?   g'V7gZ@g2p)r?   r?   gѤT g\GeE@)r?   r?   r?   gPǆ!rh   )rtolr(   gFFg<)r)   r   zIll-conditioned.*rV   )rt   atol)r   r   rL   r   r   r   r+   copyr   rc   RuntimeWarningr   Zallclose)	rA   r;   ZA_logmZtinyZA_logm_perturbedre   ZA_expm_logm_perturbedrt   ru   r%   r%   r&   test_triangularity_perturbation   s6    	

&z(TestExpM.test_triangularity_perturbationc                 C   s^   t d}t d}t jddgddggtd}t j|dgd|ggtd}t|}t|| d S )Nr)   r   r   rI   r   r   r   rL   r   r   )rA   exp1Zexp2r;   desiredactualr%   r%   r&   test_burkardt_1   s     

zTestExpM.test_burkardt_1c                 C   sJ   t jddgddggtd}t jddgddggtd}t|}t|| d S )	Nr)   rH   r   rI   gkQC@gb]IG@gd]IG@gJ[K@r   r   rL   r   r   rA   r;   r{   r|   r%   r%   r&   test_burkardt_2  s    zTestExpM.test_burkardt_2c                 C   s   t d}t d}t jddgddggtd}t jdd|  dd|   t d d|  gdt d d|  d	d|  dd|   ggtd}t|}t|| d S )
Nr)   '   r   iirI   &   i)r   r   r   rL   expm1r   r   )rA   rz   Zexp39r;   r{   r|   r%   r%   r&   test_burkardt_3!  s(    

zTestExpM.test_burkardt_3c                 C   s   t jddgddggtd}t jddgdd	ggtd}t jdd
gddggtd}t jddgtd}t |t | |}t|}t|| d S )Ni   i   rI   rH   r)   r2   r         g      ?ir   )r   r   rL   dotr   r   r   )rA   r;   UVwr{   r|   r%   r%   r&   test_burkardt_46  s    zTestExpM.test_burkardt_4c                 C   sb   t jg dg dg dg dgtd}t jg dg dg dg d	gtd}t|}t|| d S )
N)r   r3   r   r   )r   r   r3   r   )r   r   r   r3   rq   rI   )r)   r3      $   )r   r)   r3   r   )r   r   r)   r3   r   r   r   r)   r~   r   r%   r%   r&   test_burkardt_5E  s$    zTestExpM.test_burkardt_5c                 C   sT   t d}t jddgddggtd}t j||gd|ggtd}t|}t|| d S Nr)   r   rI   ry   )rA   rz   r;   r{   r|   r%   r%   r&   test_burkardt_6Y  s    
zTestExpM.test_burkardt_6c                 C   sf   t d}t d}t jd| dgdd| ggtd}t j||gd|ggtd}t|}t|| d S r   )r   r   spacingr   rL   r   r   )rA   rz   epsr;   r{   r|   r%   r%   r&   test_burkardt_7i  s     



zTestExpM.test_burkardt_7c                 C   s   t d}t d}t jg dg dg dgtd}t jd| | d| d|  d	| d	|  gd
| | d
| d|  d| d	|  gd| d| d| ggtdd }t|}t|| d S )Nr2      )      r3   )r   i)r2   r2   r   rI      r*   r   ir   g      ?ry   )rA   Zexp4Zexp16r;   r{   r|   r%   r%   r&   test_burkardt_8{  s(    

((zTestExpM.test_burkardt_8c                 C   sb   t jg dg dg dg dgtd}t jg dg dg dg d	gtd}t|}t|| d S )
N)r)   r   r   r   )rH   r)   r)   r   )rH   r   r)   r   )rH   rH   rH   r)   rI   )fa%@@X21@g鷯g)@)^Iچ@|Pk܂@g'@r   )v@gBfg;@r   r   )gDl{3@r   r   r   r~   r   r%   r%   r&   test_burkardt_9  s$    zTestExpM.test_burkardt_9c                 C   sl   t jg dg dg dgtd}tttj|d t jg dg dg dgtd}t|}t|| d S )	N)r2   r   r   )r)   r2   r)   )r)   r)   r2   rI   )rH   rH   r3   )gl$^{b@
|f@g.Q@)g\"N_@r   g
|V@)g\"N_@gLud@gs[@	r   r   rL   r   sortedscipyr-   Zeigvalsr   r   r%   r%   r&   test_burkardt_10  s"    zTestExpM.test_burkardt_10c                 C   sh   t jg dg dg dgtd}ttj|d t jg dg dg dgtd}t|}t|| d S )	N)g!=@l?QP)r   gt 9@猽誉\!@)r   r   g0n2A@rI   )      (   )gJކ3Cg;%s1PMSUc[)g;%s1Pgcx
MjCO}vC)r   r   g˂C)r   r   rL   r   r   r-   Zeigvalshr   r   r%   r%   r&   test_burkardt_11  s"    zTestExpM.test_burkardt_11c                 C   sl   t jg dg dg dgtd}tttj|d t jg dg dg dgtd}t|}t|| d S )	N)i}   r   )iz8   6   )i}9   4   rI   )ir   r   )g)'g13V?g-RR?)gǣg׃4V?g3?)gWNx`gp?g}mR?r   r   r%   r%   r&   test_burkardt_12  s"    zTestExpM.test_burkardt_12c           	      C   s   t dd}g dg dg dg dg}t|| dD ]}tdttd| }tj||ftd	}t|| D ]V}t ||}t	t
|d
 tt|tdt||  |  ||t| 7 }qntt |d}t|| q4d S )Nr2   r)   )r   r)   r   r   )r   r   r)   r   r   )rh   r   r   r   )r   rH   r2   rU   r   rI   r   rU   )r'   r   maxr   r   ceilzerosrL   r,   r	   minr   floorr   r   )	rA   Z	A4_actualZ
A4_desiredr!   kr{   r"   ZApr|   r%   r%   r&   test_burkardt_13  s"    


(zTestExpM.test_burkardt_13c                 C   sV   t jg dg dg dgtd}t jg dg dg dgtd}t|}t|| d S )N)r   g:0yE>r   )g"Drk   g    _B)gP@r   gPrI   )g .?gzDv>g1O?)gvUg԰gLg@sDQ)g F~?gg=>gcE?r~   r   r%   r%   r&   test_burkardt_14  s     zTestExpM.test_burkardt_14c           	   	   C   s   dD ]}t dddD ]}|t|dd }t|dk r< qttd|d d| }t|}|}tt|d d d d f t|d d d d f |d d d f  |d d d f  }dt|  }t	|||d	 qqd S )
N)rl   ri   gư>r   P   rH   r   gYnr)   gvIh%<=)ru   )
r,   r   Zarangeanyr    r   r   absr   r   )	rA   rZ   r!   scr;   rF   gotr0   ru   r%   r%   r&   test_pascal
  s"    zTestExpM.test_pascalc                 C   st   t d}d|d< t|}t 6}|td |td tt |}W d    n1 s\0    Y  t|| d S )N)   r   r)   )r   r   zthe matrix subclass.*)	r   r   r   r   rc   DeprecationWarningPendingDeprecationWarningr   r   )rA   r;   B0re   rF   r%   r%   r&   test_matrix_input  s    
,zTestExpM.test_matrix_inputc              
   C   sr   t g dg dg dg dg dg dg dg}t| }td| }|}tdD ]}|| }qVt|| d S )N)rl   r   r   r?   r?   r?   r?   )r?   rl   r?   r   r   r?   r?   )r?   r?   rl   r?   r?   r   r   )r?   r?   r?   r?   r?   r?   r?   i    )r   r   r   r,   r   )rA   LZE0ZE1ZE2jr%   r%   r&   test_exp_sinch_overflow(  s    


z TestExpM.test_exp_sinch_overflowN)!__name__
__module____qualname__rB   rC   rD   rG   rP   r[   r]   rf   rg   rj   ro   rr   rx   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r%   r%   r%   r&   r=   T   s<   $(r=   c                   @   s   e Zd Zdd Zdd ZdS )TestOperatorsc           
      C   s   t d d}d}d}t|D ]}tj ||}tj ||}tj ||}tj ||}t|||}	t|	||||| t|	j	||||j	| qd S )Nr(   r*   r   rU   )
r   r+   r,   r   randnr   r   matmatr   T)
rA   r!   r   nsamplesir;   rF   CDopr%   r%   r&   test_product_operator=  s    
"z#TestOperators.test_product_operatorc           	      C   s   t d d}d}d}d}t|D ]n}tj ||}tj ||}t||}t||tj	||
| t|j|tj	||j
| q"d S )Nr(   r*   r   rH   rU   )r   r+   r,   r   r   r   r   r   r-   r   r   r   )	rA   r!   r   r"   r   r   r;   rF   r   r%   r%   r&   test_matrix_power_operatorK  s    

 z(TestOperators.test_matrix_power_operatorN)r   r   r   r   r   r%   r%   r%   r&   r   ;  s   r   )*__doc__rM   numpyr   r   r   r   r   Znumpy.testingr   r   r   r	   r
   r   Zscipy.sparser   r   r   Zscipy.sparse._constructrb   Zscipy.sparse.linalg._matfuncsr   r   r   r   r   r   Zscipy.sparse._sputilsr   Zscipy.linalgr   Zscipy.specialr   r   r   Zscipy.sparse.linalgr'   r1   r<   r=   r   r%   r%   r%   r&   <module>   s(      
   j