U
    »mœdÅ8  ã                   @   sD  d dl Z d dlZd dlZd dlmZmZmZmZm	Z	 d dl
mZ d dl
Z
d dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ d dl m!Z! d	d
„ Z"dd„ Z#d%dd„Z$dd„ Z%G dd„ dƒZ&G dd„ dƒZ'G dd„ dƒZ(G dd„ dƒZ)G dd„ dƒZ*dd„ Z+dd„ Z,dd „ Z-d!d"„ Z.d#d$„ Z/dS )&é    N)Úassert_equalÚassert_allcloseÚassert_Úassert_almost_equalÚassert_array_almost_equal)Úraises)Úcheck_free_memory)ÚRectBivariateSpline)ÚsplrepÚsplevÚbisplrepÚbisplevÚsprootÚsplprepÚsplintÚspaldeÚsplderÚ
splantiderÚinsertÚdblint)Úregrid_smth)Údfitpack_intc                 C   s    t j t j t j t¡¡d| ¡S )NÚdata)ÚosÚpathÚjoinÚabspathÚdirnameÚ__file__)Úbasename© r    ú]/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/interpolate/tests/test_fitpack.pyÚ	data_file   s     ÿr"   c                 C   s   t  t  | j| ¡¡S ©N)ÚnpÚsqrtÚdotÚT)Úxr    r    r!   Únorm2   s    r)   c                 C   s`   |d dkrt  | ¡S |d dkr,t  | ¡S |d dkrDt  | ¡ S |d dkr\t  | ¡ S dS )z$Derivatives of sin->cos->-sin->-cos.é   r   é   é   é   N)r$   ÚsinÚcos)r(   Údr    r    r!   Úf1   s    

r1   c              	   C   s(   t  tt t  | ¡t  |¡¡ƒ¡}|jS )z7Helper function to create an array of pairs of x and y.)r$   ÚarrayÚlistÚ	itertoolsÚproductZasarrayr'   )r(   ÚyÚxyr    r    r!   Ú	makepairs(   s    "r8   c                	   @   s  e Zd ZdZddddej dddfdd„Zddddej fd	d
„Zdd„ Ze	j
 dddg¡e	j
 dddg¡dd„ ƒƒZe	j
 dddg¡e	j
 dddg¡dd„ ƒƒZe	j
 dddg¡e	j
 dddg¡dd„ ƒƒZdd„ Ze	j
 dddg¡e	j
 ddddddg¡dd „ ƒƒZd!d"„ ZdS )#ÚTestSmokeTestszj
    Smoke tests (with a few asserts) for fitpack routines -- mostly
    check that they are runnable
    r   r,   FNc              	      s  |d kr|}|d kr|}d‰ t  ||ˆ d ¡}||| t jdˆ td� tˆ d ƒ  }	t|ƒ}
‡ ‡fdd„}tddƒD ]†}t||
ˆ|||d�}|r¤|d || … n|	}g }t|d ƒD ]B}|||ƒ}tt||ƒt|||ƒ ƒtt||ƒƒ }||k s¸t	‚q¸qvd S )	Né   r+   )Zdtypec                    s4   dˆ  }d|d| |    }ˆdkr0|dˆ 7 }|S )Nç      ð?é   ç      è?r   g     jø@r    ©Úkr0   ÚhÚtol©ÚNÚsr    r!   Úerr_est@   s
    z'TestSmokeTests.check_1.<locals>.err_esté   ©rD   Úperr?   Úxer   )
r$   ÚlinspaceÚarangeÚfloatr1   Úranger
   r)   r   ÚAssertionError)ÚselfrH   rD   ÚaÚbÚat_nodesÚxbrI   r(   Úx1ÚvrE   r?   ÚtckÚttÚndr0   rA   Úerrr    rB   r!   Úcheck_13   s"    (
(zTestSmokeTests.check_1r:   c              	      sÜ   ddt j dt j   }}}t  ||ˆ d ¡}t  |¡}	‡ fdd„}
g }tddƒD ]4}t||	d|||d�}| t|||ƒt||ƒg¡ qRd}|D ]F}d}|d D ],}|
||ƒ}t	|t
||ƒd|d	� |d }q |d }q�d S )
Nr   r,   çš™™™™™É?r+   c                    s    dˆ  }d|d| |    }|S )Nr;   r<   r=   r    r>   ©rC   r    r!   rE   W   s    z'TestSmokeTests.check_2.<locals>.err_estrF   rG   ©ÚatolÚrtol)r$   ÚpirJ   r.   rM   r
   Úappendr   r   r   r1   )rO   rH   rC   ÚiaÚibrP   rQ   Údxr(   rU   rE   Znkr?   rV   Úrr0   ZdrrA   r    r\   r!   Úcheck_2R   s     


zTestSmokeTests.check_2c                 C   s@   | j dd� | j dtj d� | j dtj dtj ddd� d S )	Ng�íµ ÷Æ°>©rD   ç      ø?)rQ   r,   r+   çš™™™™™¹?)rQ   rI   rH   rD   )rZ   r$   r`   ©rO   r    r    r!   Útest_smoke_splrep_splevk   s    z&TestSmokeTests.test_smoke_splrep_splevrH   r+   rR   Tc                 C   s   | j ||d� d S )N)rH   rR   )rZ   )rO   rH   rR   r    r    r!   Útest_smoke_splrep_splev_2p   s    z(TestSmokeTests.test_smoke_splrep_splev_2rC   é2   c                 C   s   | j ||d� d S )N)rH   rC   )rf   ©rO   rC   rH   r    r    r!   Útest_smoke_splint_spaldeu   s    z'TestSmokeTests.test_smoke_splint_spaldec                 C   s   | j dtj tj||d� d S )Nr[   )rb   rc   rC   rH   )rf   r$   r`   rn   r    r    r!   Útest_smoke_splint_spalde_iaibz   s    z,TestSmokeTests.test_smoke_splint_spalde_iaibc              
   C   s²   d\}}t  ||d¡}t  |¡}dD ]4}t||dd||d�}ttƒ� t|ƒ W 5 Q R X q$d}t||ddd�}t|ƒ}tt||ƒdddd	� t|t j	t  
d
dddg¡ dd� d S )N)ri   é   r:   )r+   r,   r*   r<   r   rG   r-   )rD   r?   g»½×Ùß|Û=r]   r+   r,   r*   gü©ñÒMbP?©r_   )r$   rJ   r.   r
   Úassert_raisesÚ
ValueErrorr   r   r   r`   r2   )rO   rP   rQ   r(   rU   r?   rV   Úrootsr    r    r!   Útest_smoke_sproot   s    

z TestSmokeTests.test_smoke_sprootr?   r-   r*   r<   c                 C   s  ddt j dt j   }}}t  |||d ¡}t  |¡}t||gdd|dd�\}}	t||ƒ}
t|
d t  |
d ¡ ƒ}|dk s‚t‚t||dd|d�}tt|
d |ƒt  |
d ¡ ƒ}|dk sÀt‚|d	k�rt||gdd|dd�\}}	t	d|d ƒD ]}t|||ƒ}
qòd S )
Nr   ç       @r[   r+   éÿÿÿÿ)rD   rH   r?   Únestç{®Gáz„?)rD   rH   r?   r-   )
r$   r`   rJ   r.   r   r   ÚabsrN   r
   rM   )rO   rC   r?   rP   rQ   rd   r(   rU   ZtckpÚuZuvZerr1rV   Zerr2r0   r    r    r!   Útest_smoke_splprep_splrep_splev�   s    

 
z.TestSmokeTests.test_smoke_splprep_splrep_splevc                 C   s&  ddt j  }}ddt j  }}d\}}d\}}dd„ }	t  |||d ¡}
t  |||d ¡}t|
|ƒ}t|d |d |	|d |d ƒd||d�}|d || … |d || … g}t|d |d ƒ}t|d |d |ƒ}|	|d |d ƒ}t|d ƒt|d ƒf|_tt  	|| ¡ƒd	k �s"t
‚d S )
Nr   rw   )r-   r-   )r:   r:   c                 S   s   t  | | ¡S r#   )r$   r.   )r(   r6   r    r    r!   Úf2¬   s    z6TestSmokeTests.test_smoke_bisplrep_bisplev.<locals>.f2r+   )rD   ÚkxÚkyrz   )r$   r`   rJ   r8   r   r   ÚlenÚshaper)   ÚravelrN   )rO   rS   rI   ÚybÚyer   r€   ZNxZNyr~   r(   r6   r7   rV   rW   Út2Zv1Zv2r    r    r!   Útest_smoke_bisplrep_bisplev¦   s    
*$z*TestSmokeTests.test_smoke_bisplrep_bisplev)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r$   r`   rZ   rf   rk   ÚpytestÚmarkZparametrizerl   ro   rp   rv   r}   r‡   r    r    r    r!   r9   .   s*    ÿ
r9   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú	TestSplevc                 C   sX   dddddg}dddddg}t ||ƒ}tdg|ƒ}t|jd	ƒ td|ƒ}t|jd
ƒ d S )Nr+   r,   r-   r*   r<   rF   é   é   )r+   r    )r
   r   r   r‚   )rO   r(   r6   rV   Úzr    r    r!   Útest_1d_shape¾   s    

zTestSplev.test_1d_shapec                 C   s‚   dddddg}dddddg}t ||ƒ}t d	d
ddgddddgg¡}t||ƒ}t|d |ƒ}t|d |ƒ}t|t ||f¡ƒ d S )Nr+   r,   r-   r*   r<   rF   r�   r�   r;   rh   rw   ç      @ç      @g      @g      @g      @r   )r
   r$   r2   r   r   Z	row_stack)rO   r(   r6   rV   Útr‘   Zz0Zz1r    r    r!   Útest_2d_shapeÇ   s    

ÿ
zTestSplev.test_2d_shapec                 C   sz   dddg}dddg}t ||dd�}ddgddgd ddgg}d	D ] }ttddg||d
�|| ƒ q>tttddg|dd
� d S )Nr+   r,   r-   r   r*   )r?   éþÿÿÿrF   )r   r+   r-   )Úext)r
   r   r   rs   rt   )rO   r(   r6   rV   Zrstlr˜   r    r    r!   Útest_extrapolation_modesÒ   s    

z"TestSplev.test_extrapolation_modesN)rˆ   r‰   rŠ   r’   r–   r™   r    r    r    r!   rŽ   ½   s   	rŽ   c                   @   sD   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S )Ú
TestSplderc                 C   sL   t  ddd¡d }t  d| ¡}t||ƒ| _tt  | jd ¡ ¡ dkƒ d S )Nr   r+   éd   r-   r:   )r$   rJ   r.   r
   Úsplr   ÚdiffZptp)rO   r(   r6   r    r    r!   Úsetup_methodä   s    zTestSplder.setup_methodc                 C   sd   t dƒD ]V}t| j|ƒ}t||ƒ}t| jd |d ƒ t| jd |d ƒ t| jd |d ƒ qd S )Nr<   r   r+   r,   )rM   r   rœ   r   r   r   )rO   ÚnÚspl2Úspl3r    r    r!   Útest_inverseí   s    
zTestSplder.test_inversec                 C   s‚   t dƒD ]t}t ddd¡}|dkr6||dk|dk@  }t|| j|ƒ}t| j|ƒ}t||ƒ}|dkrrt||dd	� qt||ƒ qd S )
Nr*   rx   r,   iÐ  r-   r   r+   g�íµ ÷ÆÀ>rr   )rM   r$   rJ   r   rœ   r   r   )rO   rŸ   ÚxxZdyr    Zdy2r    r    r!   Útest_splder_vs_splevö   s    
zTestSplder.test_splder_vs_splevc                 C   s\   t | jƒ}t ddd¡}|D ]:}|D ]0}t||| jƒ}t||ƒt||ƒ }t||ƒ q$qd S )Nr   r+   r:   )r   rœ   r$   rJ   r   r   r   )rO   r    r£   rT   Zx2Úy1Úy2r    r    r!   Útest_splantider_vs_splint	  s    
z$TestSplder.test_splantider_vs_splintc                 C   s   t tt| jdƒ d S )Nr*   )rs   rt   r   rœ   rj   r    r    r!   Útest_order0_diff  s    zTestSplder.test_order0_diffc                 C   sr   t d| jdd�}t|dƒ ttt|dƒ t d| jdd�}t|dƒ ttt|dƒ t d| jdd�}ttt|dƒ d S )Nç      à?r,   )Úmr-   r+   r*   )r   rœ   r   rs   rt   )rO   r    r    r    r!   Ú	test_kink  s    

zTestSplder.test_kinkc                 C   s€   t dƒD ]r}| j\}}}tj|||f }t ||f¡}t|||f|ƒ}t||ƒ}t||d ƒ t||d ƒ t||d ƒ qd S )Nr-   r   r+   r,   )	rM   rœ   r$   Zc_Zdstackr   r   r   r   )rO   rŸ   r•   Úcr?   Úc2r    r¡   r    r    r!   Útest_multidim(  s    
zTestSplder.test_multidimN)
rˆ   r‰   rŠ   rž   r¢   r¤   r§   r¨   r«   r®   r    r    r    r!   rš   ã   s   		rš   c                   @   s   e Zd Zdd„ ZdS )Ú
TestSplintc              	   C   sV  d\}}t  |¡}|d }t||dd�\}}}t|ƒt|ƒ  krV|d|d   ks\n t‚tdd|||fƒ}t|dd	d
� | ¡ }t j|t|ƒ| d d …< tdd|||fƒ}	t|	dd	d
� t j|d< t  	tdd|||fƒ¡sät‚|d t|ƒ| d … }
tdd||
|fƒ}t|dd	d
� t
tdd��$ tddt  d¡t  d¡dfƒ W 5 Q R X d S )N)r�   r-   r-   r   rg   r,   r+   rF   g     @t@gVçž¯Ò<)r^   z>=n-k-1)Úmatché
   r<   )r$   rK   r
   r�   rN   r   r   ÚcopyÚnanÚisnanrs   Ú	ExceptionZones)rO   rŸ   r?   r(   r6   r•   r¬   ÚresZc0Zres0Úc1Zres1r    r    r!   Ú
test_len_c8  s$    
.
zTestSplint.test_len_cN)rˆ   r‰   rŠ   r¸   r    r    r    r!   r¯   7  s   r¯   c                   @   s:   e Zd Zdd„ Zdd„ Zejjee	j
kdd�dd„ ƒZd	S )
ÚTestBisplrepc                 C   sV   ddl m} tjdkrd}nd}|t d¡|fd�}ttt||||dddddd	� d S )
Nr   )Ú
as_stridedr�   l    dæ</i q r    )r‚   r+   )ÚwrS   rI   r„   r…   rD   )	Znumpy.lib.stride_tricksrº   r   Úitemsizer$   Úzerosrs   ÚOverflowErrorr   )rO   rº   Úsizer(   r    r    r!   Útest_overflow[  s    
    ÿzTestBisplrep.test_overflowc              	   C   sP   t  tdƒ¡d }t|d d …df |d d …df |d d …df ddddd� d S )	Nzbug-1310.npzr   r   r+   r,   r-   T)r   r€   rD   Zfull_output)r$   Úloadr"   r   )rO   r   r    r    r!   Útest_regression_1310g  s    2ÿz!TestBisplrep.test_regression_1310zneeds ilp64 fitpack)Úreasonc                 C   sh   t dƒ t ddd¡}t ddd¡}t ||¡\}}t |¡}t|||dddd�}ttdd|ƒdƒ d S )	Ni`m  r   r+   i�  r-   ©r   r€   rD   r©   ç        )r   r$   rJ   ÚmeshgridZ
zeros_liker   r   r   )rO   r(   r6   r‘   rV   r    r    r!   Útest_ilp64_bisplrepr  s    
z TestBisplrep.test_ilp64_bisplrepN)rˆ   r‰   rŠ   rÀ   rÂ   rŒ   r�   Zskipifr   r$   Zint64rÇ   r    r    r    r!   r¹   Z  s   r¹   c                  C   s®   t  dd¡} t  dd¡}t  | |¡\}}t| |d| | ƒ}t|jƒ}| |j¡ tt	dddd|ƒdƒ tt	dddd|ƒdƒ tt	dddd|ƒdƒ tt	dddd|ƒdƒ d S )	Nr   r+   r*   r©   g      Ð?r=   iœÿÿÿr›   )
r$   rJ   rÆ   r	   r3   rV   ÚextendÚdegreesr   r   )r(   r6   r£   ÚyyÚrectrV   r    r    r!   Útest_dblint}  s    
rÌ   c                  C   s  t  ddddg¡t  ddddg¡df} | \}}}t  ddddg¡}tt|| ƒ|d |d |d  | |d	   ƒ tt|| dƒ|d |d  |d	  ƒ t j d
¡ t  t j d¡¡}t j d¡}t||ƒ\}}}|d d |d d g}t|||f|ƒ}tt||||f|ƒt||ƒƒ d S )NrÅ   r“   g®g¥œù¿g~„'	…@r+   éýÿÿÿr   r-   r,   iÒ  é   r;   rx   )	r$   r2   r   r   ÚrandomÚseedÚsortr
   r   )rV   r•   r¬   r?   r(   r6   Ztck2r    r    r!   Útest_splev_der_k�  s    þ
0&rÒ   c                  C   sz   t  ddd¡} t  dt j |  ¡}t  dt j |  ¡}t||gdd�\}}t  ddd¡}|d }t||gd|d	�\}}d S )
Nr   gš™™™™™ñ?ri   r,   rg   g)\�Âõ(ð?rz   rx   )Útaskr•   )r$   rK   r.   r`   r/   r   )r•   r(   r6   rV   r|   ZunewZuknotsr    r    r!   Útest_splprep_segfault§  s    rÔ   c                  C   sÌ   t j d¡ t  ddd¡} | }t j dd¡ ¡ }d}d}t| ||d d d d ||dd�
\}}}}}	}
}|d |… |d |… |	d || d || d  … ||f}t  dg¡}t  dg¡}tt	t
ft|||ƒ d S )Nr+   r   é   rÅ   rÄ   i  ( )r$   rÏ   rÐ   rJ   Zrandnrƒ   r   r½   rs   ÚRuntimeErrorÚMemoryErrorr   )r(   r6   r‘   r   r€   ÚnxZtxÚnyÚtyr¬   ÚfpZierrV   ZxpZypr    r    r!   Útest_bisplev_integer_overflow´  s,             ÿ:rÜ   c                  C   sV   t  dd¡} | d }t| |ddgd�}tt  d¡|ƒ}t  ddd	d	g¡}t||ƒ d S )
Nr   r±   r-   r<   )r?   r•   r+   r;   r”   g      @)r$   rJ   r
   r   Zfloat64r2   r   )r(   r6   rV   r¶   Zdesr    r    r!   Útest_spalde_scalar_inputÇ  s    rÝ   )r   )0r4   r   Únumpyr$   Znumpy.testingr   r   r   r   r   rŒ   r   rs   Zscipy._lib._testutilsr   Zscipy.interpolater	   Zscipy.interpolate._fitpack_pyr
   r   r   r   r   r   r   r   r   r   r   r   Zscipy.interpolate.dfitpackr   Zscipy.interpolate._fitpack2r   r"   r)   r1   r8   r9   rŽ   rš   r¯   r¹   rÌ   rÒ   rÔ   rÜ   rÝ   r    r    r    r!   Ú<module>   s2   8
 &T##