a
    ‡ù»j°@  ã                   @   s\  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.e
j/j0d#d$„ ƒZ1d%d&„ Z2d'd(„ Z3d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    úJE:\soccer\ml_env\Lib\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ÚproductÚasarrayr'   )r(   ÚyÚxyr    r    r!   Ú	makepairs(   s    "r9   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g d¢¡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 u r|}|d u r|}d‰ t  ||ˆ d ¡}||| t jdˆ td� tˆ d ƒ  }	t|ƒ}
‡ ‡fdd„}tddƒD ]‚}t||
ˆ|||d�}|r¤|d || … n|	}t|d ƒD ]B}|||ƒ}tt||ƒt|||ƒ ƒtt||ƒƒ }||k s´J ‚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é   ©rF   ÚperrA   Úxer   )	r$   ÚlinspaceÚarangeÚfloatr1   Úranger
   r)   r   )ÚselfrJ   rF   ÚaÚbÚat_nodesÚxbrK   r(   Úx1ÚvrG   rA   ÚtckÚttr0   rC   Úerrr    rD   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@   ©rE   r    r!   rG   V   s    z'TestSmokeTests.check_2.<locals>.err_estrH   rI   ©ÚatolÚrtol)r$   ÚpirL   r.   rO   r
   Úappendr   r   r   r1   )rP   rJ   rE   ÚiaÚibrQ   rR   Údxr(   rV   rG   ZnkrA   rW   Úrr0   ZdrrC   r    r\   r!   Úcheck_2Q   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�íµ ÷Æ°>©rF   ç      ø?)rR   r,   r+   çš™™™™™¹?)rR   rK   rJ   rF   )rZ   r$   r`   ©rP   r    r    r!   Útest_smoke_splrep_splevj   s    z&TestSmokeTests.test_smoke_splrep_splevrJ   r+   rS   Tc                 C   s   | j ||d� d S )N)rJ   rS   )rZ   )rP   rJ   rS   r    r    r!   Útest_smoke_splrep_splev_2o   s    z(TestSmokeTests.test_smoke_splrep_splev_2rE   é2   c                 C   s   | j ||d� d S )N)rJ   rE   )rf   ©rP   rE   rJ   r    r    r!   Útest_smoke_splint_spaldet   s    z'TestSmokeTests.test_smoke_splint_spaldec                 C   s   | j dtj tj||d� d S )Nr[   )rb   rc   rE   rJ   )rf   r$   r`   rn   r    r    r!   Útest_smoke_splint_spalde_iaiby   s    z,TestSmokeTests.test_smoke_splint_spalde_iaibc              	   C   sÂ   d\}}t  ||d¡}t  |¡}dD ]H}t||dd||d�}ttƒ� t|ƒ W d   ƒ q$1 sb0    Y  q$d}t||ddd�}t|ƒ}tt||ƒdddd	� t|t j	t  
g d
¢¡ dd� d S )N)ri   é   r;   )r+   r,   r*   r>   r   rI   r-   )rF   rA   g»½×Ùß|Û=r]   )r+   r,   r-   r*   gü©ñÒMbP?©r_   )r$   rL   r.   r
   Úassert_raisesÚ
ValueErrorr   r   r   r`   r2   )rP   rQ   rR   r(   rV   rA   rW   Úrootsr    r    r!   Útest_smoke_sproot~   s    

(z TestSmokeTests.test_smoke_sprootrA   ©r+   r,   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‚J ‚t||dd|d�}tt|
d |ƒt  |
d ¡ ƒ}|dk sÀJ ‚|d	k�rt||gdd|dd�\}}	td|d ƒD ]}t|||ƒ}
qòd S )
Nr   ç       @r[   r+   éÿÿÿÿ)rF   rJ   rA   Únestç{®Gáz„?)rF   rJ   rA   r-   )	r$   r`   rL   r.   r   r   Úabsr
   rO   )rP   rE   rA   rQ   rR   rd   r(   rV   ZtckpÚuZuvZerr1rW   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"J ‚d S )
Nr   rx   ©r-   r-   )r;   r;   c                 S   s   t  | | ¡S r#   ©r$   r.   ©r(   r7   r    r    r!   Úf2«   s    z6TestSmokeTests.test_smoke_bisplrep_bisplev.<locals>.f2r+   ©rF   ÚkxÚkyr{   )
r$   r`   rL   r9   r   r   ÚlenÚshaper)   Úravel)rP   rT   rK   ÚybÚyer„   r…   ZNxZNyr‚   r(   r7   r8   rW   rX   Ú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!   r:   .   s(   ÿ
r:   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú	TestSplevc                 C   sL   g d¢}g d¢}t ||ƒ}tdg|ƒ}t|jdƒ td|ƒ}t|jdƒ d S )Nrw   ©r*   r>   rH   é   é   r+   )r+   r    )r
   r   r   r‡   )rP   r(   r7   rW   Úzr    r    r!   Útest_1d_shape½   s    

zTestSplev.test_1d_shapec                 C   sn   g d¢}g d¢}t ||ƒ}t g d¢g d¢g¡}t||ƒ}t|d |ƒ}t|d |ƒ}t|t ||f¡ƒ d S )Nrw   r”   )r=   rh   rx   ç      @)ç      @g      @ç      @g      @r   r+   )r
   r$   r2   r   r   Zvstack)rP   r(   r7   rW   Útr—   Zz0Zz1r    r    r!   Útest_2d_shapeÆ   s    

ÿ
zTestSplev.test_2d_shapec                 C   sv   g d¢}g d¢}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 )N)r+   r,   r-   )r   r,   r*   r+   )rA   éþÿÿÿrH   r   r*   )r   r+   r-   )Úextr,   )r
   r   r   rs   rt   )rP   r(   r7   rW   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   sN   t  ddd¡d }t  d| ¡}t||ƒ| _tt  t  | jd ¡¡dkƒ d S )Nr   r+   éd   r-   r;   )r$   rL   r.   r
   Úsplr   ZptpÚdiff)rP   r(   r7   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,   )rO   r   r£   r   r   r   )rP   Ú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*   ry   r,   iÐ  r-   r   r+   g�íµ ÷ÆÀ>rr   )rO   r$   rL   r   r£   r   r   )rP   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$   rL   r   r   r   )rP   r§   rª   rU   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   )rP   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,   )	rO   r£   r$   Zc_Zdstackr   r   r   r   )rP   r¦   rœ   ÚcrA   Ú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   sl  d\}}t  |¡}|d }t||dd�\}}}t|ƒt|ƒ  krV|d|d   ks\n J ‚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äJ ‚|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 d   ƒ n1 �s^0    Y  d S )N)r•   r-   r-   r   rg   r,   r+   rH   g     @t@çVçž¯Ò<©r^   z>=n-k-1)Úmatché
   r>   )r$   rM   r
   r†   r   r   ÚcopyÚnanÚisnanrs   Ú	ExceptionZones)rP   r¦   rA   r(   r7   rœ   r³   ÚresZc0Zres0Úc1Zres1r    r    r!   Ú
test_len_c7  s$    
.
zTestSplint.test_len_cN)r�   rŽ   r�   rÁ   r    r    r    r!   r¶   6  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+   )ÚwrT   rK   r‰   rŠ   rF   )	Znumpy.lib.stride_tricksrÃ   r   Úitemsizer$   Úzerosrs   ÚOverflowErrorr   )rP   rÃ   Úsizer(   r    r    r!   Útest_overflowZ  s    

ÿzTestBisplrep.test_overflowc              	   C   st   t  tdƒ¡�}|d }W d   ƒ n1 s,0    Y  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…   rF   Zfull_output)r$   Úloadr"   r   )rP   Zloaded_datar   r    r    r!   Útest_regression_1310f  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…   rF   r°   ç        )r   r$   rL   ÚmeshgridZ
zeros_liker   r   r   )rP   r(   r7   r—   rW   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Â   Y  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$   rL   rÏ   r	   r3   rW   ÚextendÚdegreesr   r   )r(   r7   rª   ÚyyÚrectrW   r    r    r!   Útest_dblint}  s    
rÕ   c                  C   s  t  g d¢¡t  g d¢¡df} | \}}}t  g d¢¡}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 )N)rÎ   rÎ   r™   r™   )g®g¥œù¿g~„'	…@rÎ   rÎ   r+   )éýÿÿÿr   r™   r-   r   r,   iÒ  é   r=   ry   )	r$   r2   r   r   ÚrandomÚseedÚsortr
   r   )rW   rœ   r³   rA   r(   r7   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)\�Âõ(ð?r{   ry   )Útaskrœ   )r$   rM   r.   r`   r/   r   )rœ   r(   r7   rW   r}   Z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Ù   rL   Zrandnrˆ   r   rÆ   rs   ÚRuntimeErrorÚMemoryErrorr   )r(   r7   r—   r„   r…   ÚnxZtxÚnyÚtyr³   ÚfpZierrW   ZxpZypr    r    r!   Útest_bisplev_integer_overflow´  s    ÿ:rå   c                  C   sÞ   d} d\}}dd„ }t  dd| ¡}t  dd| ¡}t||ƒ}t|d |d	 ||d |d	 ƒd||d
�}d}t  |¡|d< t  |¡d |d	< t  d¡}	t  d¡d }
t t¡�  t|	|
|d	d	ƒ W d   ƒ n1 sÐ0    Y  d S )Né   r   c                 S   s   t  | | ¡S r#   r€   r�   r    r    r!   r‚   Ì  s    ztest_gh_1766.<locals>.f2r   rº   rm   i¼  r+   rƒ   i ¡ r*   r-   )	r$   rL   r9   r   rM   r‘   r   rà   r   )rÈ   r„   r…   r‚   r(   r7   r8   rW   Z
tx_ty_sizeZtt_0Ztt_1r    r    r!   Útest_gh_1766Ç  s    
*
rç   c                  C   sR   t  dd¡} | d }t| |ddgd�}tt  d¡|ƒ}t  g d¢¡}t||ƒ d S )Nr   rº   r-   r>   )rA   rœ   r+   )r=   rš   ç      @rè   )r$   rL   r
   r   Zfloat64r2   r   )r(   r7   rW   r¿   Zdesr    r    r!   Útest_spalde_scalar_inputÞ  s    ré   c                     sr   t jg d¢dd�‰g d¢‰t  g d¢¡‰ d‰tˆˆˆ ˆfƒ} t  ‡ ‡‡‡fdd„td	ƒD ƒ¡}t| |jd
d� d S )N)ç      $Àç      "Àç       Àç      Àç      Àç      Àç      Àç      Àç      Àç       Àç      ø¿ç      ð¿ç      à¿rÎ   r°   r=   rh   rx   r™   rš   r›   ç      @rè   rN   r<   )rê   rê   rê   rê   rë   rì   rí   rî   rï   rð   rñ   rò   ró   rô   rõ   rö   rÎ   r°   r=   rh   rx   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Î   rÎ   rÎ   rÎ   r-   c                    s   g | ]}t ˆˆˆ ˆf|ƒ‘qS r    )r   )Ú.0Únu©r³   rA   rœ   r(   r    r!   Ú
<listcomp>ö  ó    z"test_spalde_nc.<locals>.<listcomp>r*   r·   r¸   )r$   r6   r   rO   r   r'   )r¿   Z	res_splevr    rú   r!   Útest_spalde_ncè  s    
þ"rý   )r   )4r4   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   r9   r:   r“   r¡   r¶   rÂ   rÕ   rÛ   rÝ   rå   r’   Zxslowrç   ré   rý   r    r    r    r!   Ú<module>   s8   8
 &T#$

