o
    Ö­jìT  ã                   @   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 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_arrayÚSparseEfficiencyWarning)Ú	eye_array)Ú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s|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ÚbÚlargeÚsmall© r'   úd/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/sparse/linalg/tests/test_matfuncs.pyÚ_burkardt_13_power   s   ,r)   c                  C   sn   t j d¡ tddƒD ])} tdƒD ]"}t j | | f¡}t j ||¡}t||ƒ}t j |d¡}t||ƒ qqd S )NéÒ  é   é   )	r   r   ÚseedÚrangeÚlinalgr   r   Únormr   )r!   r"   ÚMÚMpÚobservedÚexpectedr'   r'   r(   Útest_onenorm_matrix_power_nnm;   s   
ûÿr5   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||ƒ ¡ }t j ||¡}	t||	ƒ t||ƒ q2d S )
Nr*   r   é   )r   é   )Úsize)r7   )r6   r6   )Úshape)r   r,   r7   )	r   r   r-   Úrandintr   Útoarrayr   r/   r   )
ÚrowÚcolÚdataÚAmatÚAÚAdenser   ÚApowÚAmat_powÚ
Adense_powr'   r'   r(   Útest_matrix_powerE   s   
ûrE   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   ó2   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   ó   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 rH   )r   r   r   r;   rJ   r'   r'   r(   Útest_zero_sparseY   s   "zTestExpM.test_zero_sparsec                 C   rG   rH   )r   r   r   rJ   r'   r'   r(   Útest_zero_matrix]   rM   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ƒƒ ¡ |ƒ 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ƒƒ ¡ |ƒ d S )Nr+   ))r+   ù              ð?))rP   )r   r   r   r   r   r   r;   )rK   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   rS   é   r   r,   )	r   ÚfloatÚmathr   r   r   r   r;   r   )rK   r@   Úe1Úe2r4   r3   r'   r'   r(   Útest_bidiagonal_sparsen   s$   ýý

ýýzTestExpM.test_bidiagonal_sparsec                 C   ó^   t jt jfD ]&}dD ]!}|td|d� }t|ƒ}t||d�td|d� }t||dd� q
qd S ©N©ç{®Gáz„?çš™™™™™¹?g      à?r+   é
   rS   rT   éd   ©Únulp)r   Úfloat32Úfloat64r   r   r   r
   ©rK   rU   Úscaler@   r3   r4   r'   r'   r(   Útest_padecases_dtype_float|   ó   üÿz#TestExpM.test_padecases_dtype_floatc                 C   r\   r]   )r   Ú	complex64Ú
complex128r   r   r   r
   rg   r'   r'   r(   Útest_padecases_dtype_complex„   rj   z%TestExpM.test_padecases_dtype_complexc              	   C   s®   t j}dD ]O}|tdd|dd� }t||d�td|d� }tƒ �}| td¡ t|dd� 	¡ }t|d	d� 	¡ }W d   ƒ n1 sAw   Y  t
||d
d� t
||d
d� qd S )Nr^   rS   Úcsc©rU   ÚformatrT   úChanging the sparsity structureT)Úuse_exact_onenormFrb   rc   )r   rf   r   r   r   r   Úfilterr   r   r;   r
   )rK   rU   rh   r#   ÚeÚsupÚexact_onenormÚinexact_onenormr'   r'   r(   Ú!test_padecases_dtype_sparse_floatŒ   s   ýøz*TestExpM.test_padecases_dtype_sparse_floatc              	   C   s„   t j}dD ]:}|tdd|dd� }t|ƒtd|d� }tƒ �}| td¡ tt	|ƒ 
¡ |dd� W d   ƒ n1 s:w   Y  qd S )	Nr^   rS   rn   ro   rT   rq   rb   rc   )r   rl   r   r   r   r   rs   r   r
   r   r;   )rK   rU   rh   r#   rt   ru   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 ]8}tddƒD ]0}dD ]+}t|ƒt  ||¡|   |¡}t 	|¡r8|dt  ||¡ |  }t
tt|ƒƒ|ƒ qqqd S )Nr*   r+   ra   )ç-Cëâ6?çü©ñÒMbP?r_   r`   r+   r   g      Y@rP   )r   r-   r   rf   rl   r.   r   ÚrandÚastypeÚiscomplexobjr   r   r   )rK   rU   r!   rh   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+   r€   r+   r+   )r+   r+   r€   r+   )r+   r+   r+   r€   ç      ð?)r   r   r   r   ©rK   ÚQr'   r'   r(   Útest_integer_matrix®   s   üzTestExpM.test_integer_matrixc                 C   sh   t jg d¢g d¢g d¢g d¢gt jd�}tt|ƒtd| ƒƒ t|ƒ}tt|ƒ ¡ td| ƒ ¡ ƒ d S )N)iþÿÿiô  r   r   )r   iÚýÿÿih  é¾   )r   iv  iŠýÿÿr   ©r   r   r   r   rT   r�   )r   r   Úint16r   r   r   r;   r‚   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 sVw   Y  d
}d| }tt j||||d� ƒ d S )N)g3d’‘³Ô?ç     LÝ@r‰   r‰   )r   gRal!ÈAÓ?r‰   r‰   )r   r   g“©‚QI�Ô?r‰   )r   r   r   gÝ^Ò­Ó?rT   )g“Ø<’ò¿göGgÝx÷@g9‚¸=ÛðÁgý¯[d ðB)rI   gÐÈ'ÑV7ó¿gZºá¯…÷@gáÆ2pñÁ)rI   rI   gŽìÑ¤T ò¿g\Ge±ÎE÷@)rI   rI   rI   gPëÇ†!ßò¿rz   )Úrtolr*   g—ÔFFõg<)r+   r   zIll-conditioned.*rb   )rŠ   Úatol)r   r   rW   r   r   r   r-   Úcopyr   rs   ÚRuntimeWarningr   Úallclose)	rK   r@   ÚA_logmÚtinyÚA_logm_perturbedru   ÚA_expm_logm_perturbedrŠ   r‹   r'   r'   r(   Útest_triangularity_perturbationÁ   s8   üûù	÷


þ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   rT   ©r   r   r   rW   r   r   )rK   Úexp1Ú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+   rS   r   rT   gkÔQ©C@gb¥”]IG@gd¥”]IG@g�÷Jó[K@©r   r   rW   r   r   ©rK   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   iÙÿÿÿiØÿÿÿrT   é&   iÚÿÿÿéÿÿÿÿ)r   r   r   rW   Úexpm1r   r   )rK   r•   Ú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Àÿÿÿé   rT   rS   r+   r6   r   ç      à¿éþÿÿÿg      ø?iïÿÿÿrŸ   )r   r   rW   Údotr   r   r   )rK   r@   ÚUÚVÚwr—   r˜   r'   r'   r(   Útest_burkardt_40  s   þýzTestExpM.test_burkardt_4c                 C   ób   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   r7   r   r   )r   r   r7   r   )r   r   r   r7   r†   rT   )r+   r7   é   é$   )r   r+   r7   r­   )r   r   r+   r7   ©r   r   r   r+   rš   r›   r'   r'   r(   Útest_burkardt_5?  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   rT   r”   )rK   r•   r@   r—   r˜   r'   r'   r(   Útest_burkardt_6S  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   rW   r   r   )rK   r•   Úepsr@   r—   r˜   r'   r'   r(   Útest_burkardt_7c  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 )Nr6   é   )é   é   r7   )éûÿÿÿrŸ   iúÿÿÿ)r6   r6   r¶   rT   é   r,   r   i÷ÿÿÿr¦   g      Ð?r”   )rK   Úexp4Úexp16r@   r—   r˜   r'   r'   r(   Útest_burkardt_8u  s(   

ýü((ýüüzTestExpM.test_burkardt_8c                 C   r¬   )
N)r+   r   r   r   )rS   r+   r+   r   )rS   r   r+   r   )rS   rS   rS   r+   rT   )çf÷äa¡%‡@çÍÌÌÌÌƒ@çXÊ2Ä1ò€@gé·¯g)�@)ç^ºIÚ†@ç|ò°PkÜ‚@g»'µ¸€@rÀ   )çÉv¾Ÿ¾‰@gBÏfÕg;…@rÂ   r¿   )gD‹lç{3�@rÃ   rÁ   r¾   rš   r›   r'   r'   r(   Útest_burkardt_9†  s$   üûüûzTestExpM.test_burkardt_9c                 C   ól   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)r6   r   r   )r+   r6   r+   )r+   r+   r6   rT   )rS   rS   r7   )gl$ÿ^»{b@çÔá
|øf@g•õ.”óQ@)gœ\"Nýñ_@rÆ   gØá
|øV@)g£\"Nýñ_@g¶ëL¿ud@gÎæsõý[@©	r   r   rW   r   ÚsortedÚscipyr/   Ú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‘À©é?çQ°Š€ïPÀ)rÌ   gºŒ²t º9@çŒ½èª‰\!@)rÍ   rÎ   g®®0ån2A@rT   )é   é   é(   )gÚÉÒJÞ†3Cg…;%s1PÃçêMSUc[Ã)gˆ;%s1PÃgcx
MêjCç ÈOÆ}vC)rÒ   rÓ   gýÁãõ¢Ë‚C)r   r   rW   r   rÉ   r/   Úeigvalshr   r›   r'   r'   r(   Útest_burkardt_11©  s"   ýü÷ózTestExpM.test_burkardt_11c                 C   rÅ   )	N)i}ÿÿÿé   r­   )izþÿÿé8   é6   )i}þÿÿé9   é4   rT   )iìÿÿÿr¦   rŸ   )g¹Ò)¢€'ø¿g£1ö3V‹×?g¿-RŸªRÁ?)gñÀÇ£À‡ÀgÑ×ƒ4V‹÷?g±3ûîÿûÙ?)gWNùx`½Àgp¢ø¦€¨ñ?gë}m ªRá?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 ]U}tdtt d| ¡ƒƒ}tj||ftd	�}t|| ƒD ]+}t ||ƒ}t	t 
|¡d
ƒ tt |¡t dt || ¡ | ¡ƒ ||t|ƒ 7 }q7tt |dƒƒ}t||ƒ qd S )Nr6   r+   )r   r+   r   r   )r   r   r+   r   r¯   )rz   r   r   r   )r   rS   r6   ra   r¶   rT   r   ra   )r)   r   Úmaxr   r   ÚceilÚzerosrW   r.   r	   Úminr   Úfloorr   r   )	rK   Ú	A4_actualÚ
A4_desiredr!   Úkr—   r"   Ú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:Œ0âŽyE>r   )g«ªª"D°Âr€   g    _ B)g«ªªªªªP@r   g«ªªªªªPÀrT   )gí· ƒ.™Ü?gÜzDïv>g1òOî³žÝ?)gÜýâñvèUÁgÔ°g²L�¿gÓ@ž­sDQÁ)gø âF~§Ü?ggÒ=ã€>gcŠE½ª©Ý?rš   r›   r'   r'   r(   Útest_burkardt_14ô  s    ýüýüzTestExpM.test_burkardt_14c           	   	   C   sà   dD ]k}t dddƒD ]b}|t |dd¡ }t |dk ¡r nOt 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)r�   r{   g�íµ ÷Æ°>r   éP   rS   rŸ   gYóøÂn¥r+   g‚vIhÂ%<=)r‹   )
r.   r   ÚarangeÚanyr    r   r   ÚabsrÜ   r   )	rK   rh   r!   Úscr@   rQ   Úgotr4   r‹   r'   r'   r(   Útest_pascal  s&   ÿÿÿ€ózTestExpM.test_pascalc                 C   st   t  d¡}d|d< t|ƒ}tƒ �}| td¡ | td¡ tt  |¡ƒ}W d   ƒ n1 s.w   Y  t||ƒ d S )N)éÈ   rî   r+   )rŸ   r   zthe matrix subclass.*)	r   rÞ   r   r   rs   ÚDeprecationWarningÚPendingDeprecationWarningr   r   )rK   r@   ÚB0ru   rQ   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 ]}|| }q+t||ƒ d S )N)r�   r¥   r¥   rI   rI   rI   rI   )rI   r�   rI   r¥   r¥   rI   rI   )rI   rI   r�   rI   rI   r¥   r¥   )rI   rI   rI   rI   rI   rI   rI   i øÿÿé   )r   r   r   r.   r   )rK   ÚLÚE0ÚE1ÚE2Újr'   r'   r(   Útest_exp_sinch_overflow"  s   
ú

z TestExpM.test_exp_sinch_overflowN)!Ú__name__Ú
__module__Ú__qualname__rL   rN   rO   rR   r[   ri   rm   rx   ry   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(   rF   T   s>    
$(rF   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestOperatorsc           
      C   s´   t  d¡ d}d}d}t|ƒD ]H}tj  ||¡}tj  ||¡}tj  ||¡}tj  ||¡}t|||ƒ}	t|	 |¡| |¡ |¡ |¡ƒ t|	j	 |¡| |¡ |¡j	 |¡ƒ qd S )Nr*   r,   r   ra   )
r   r-   r.   r   Úrandnr   r   Úmatmatr§   ÚT)
rK   r!   rã   ÚnsamplesÚir@   rQ   ÚCÚDÚopr'   r'   r(   Útest_product_operator7  s   
"(ùz#TestOperators.test_product_operatorc           	      C   s–   t  d¡ d}d}d}d}t|ƒD ]7}tj  ||¡}tj  ||¡}t||ƒ}t| |¡tj 	||¡ 
|¡ƒ t|j |¡tj 	||¡j 
|¡ƒ qd S )Nr*   r,   r   rS   ra   )r   r-   r.   r   rþ   r   r   rÿ   r/   r   r§   r   )	rK   r!   rã   r"   r  r  r@   rQ   r  r'   r'   r(   Útest_matrix_power_operatorE  s   

 &ûz(TestOperators.test_matrix_power_operatorN)rú   rû   rü   r  r  r'   r'   r'   r(   rý   5  s    rý   ))Ú__doc__rX   Ú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)   r5   rE   rF   rý   r'   r'   r'   r(   Ú<module>   s*      
   d