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	m
Z
 d dlmZ d dl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 i fdd„Zg d¢Zdd	„ Zd
d„ Z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(G d d!„ d!ƒZ)dS )"é    N)Úassert_almost_equalÚassert_array_equalÚassert_array_almost_equalÚassert_allcloseÚassert_equalÚassert_)Úraises)ÚKroghInterpolatorÚkrogh_interpolateÚBarycentricInterpolatorÚbarycentric_interpolateÚapproximate_taylor_polynomialÚCubicHermiteSplineÚpchipÚPchipInterpolatorÚpchip_interpolateÚAkima1DInterpolatorÚCubicSplineÚmake_interp_splinec                 C   sî  t j d¡ g d¢}ttdt|ƒd ƒƒ}| |t|ƒd  d¡ t jjd| Ž  |¡}t  	|¡}	| t
u ržt jjd| Ž  |¡}
| |||
fd|i|¤Ž|	ƒ}n| ||fd|i|¤Ž|	ƒ}|p¾d|jd |…  | |j|d … dd …  }t|j|ƒ |�rd|jdk�rd| t
u �r>| t|ƒt|ƒt|
ƒfd|i|¤Žt|	ƒƒ n&| t|ƒt|ƒfd|i|¤Žt|	ƒƒ |	jdk�rê|d u �rê|jd |… dt|ƒ  |j|d … dd …  }|td ƒf||j  d  }| |¡}t  ||¡\}}t||ƒ d S )	NéÒ  )éÿÿÿÿr   é   é   é   é   r   r   ©é   Úaxis© ©r   )ÚnpÚrandomÚseedÚlistÚrangeÚlenÚinsertZrandÚ	transposeÚzerosr   Úshaper   ÚsizeÚsliceÚndimÚreshapeZbroadcast_arraysr   )Zinterpolator_clsZx_shapeZy_shapeÚderiv_shaper   Ú
extra_argsÚxÚsÚyÚxiÚdydxÚyiZtarget_shapeZbs_shapeZyvr   r   úJE:\soccer\ml_env\Lib\site-packages\scipy/interpolate/tests/test_polyint.pyÚcheck_shape   sD    
ÿÿ
ÿÿÿÿ0
r7   )r   )r   r   )r   r   é   c                  C   s�   dd„ } t ttttt| fD ]p}tD ]f}tD ]\}tt|ƒ t|ƒƒD ]B}|tkr`t	|||d |ƒ qBdD ]}d|i}t	|||d ||ƒ qdqBq*q"qd S )Nc                 S   s   t | ||d�S ©N©r   )r   ©r0   r2   r   r   r   r6   Ú
spl_interp?   s    ztest_shapes.<locals>.spl_interp)ÚnaturalÚclampedÚbc_type)
r	   r   r   r   r   r   ÚSHAPESr$   r%   r7   )r<   ÚipÚs1Ús2r   ÚbcÚextrar   r   r6   Útest_shapes=   s    ÿrF   c               
      s^   t tfD ]P‰ d‡ fdd„	} tD ]8}tD ].}tt|ƒ t|ƒƒD ]}t| ||d|ƒ q>q&qqd S )Nr   c                    s   ˆ | ||ƒj S ©N©Úderivativesr;   ©rA   r   r6   Úinterpolator_derivsP   s    z/test_derivs_shapes.<locals>.interpolator_derivsr   )r   )r	   r   r@   r$   r%   r7   )rK   rB   rC   r   r   rJ   r6   Útest_derivs_shapesN   s    rL   c                  C   sè   ddd„} ddd„}ddd„}d dd	„}d!d
d„}d"dd„}d#dd„}d$dd„}d%dd„}d&dd„}	d'dd„}
d(dd„}d)dd„}| |||||||||	|
||fD ]B}t D ]8}t D ].}tt|ƒ t|ƒƒD ]}t|||d|ƒ qÈq°q¨q d S )*Nr   c                 S   s   t | ||ƒjS rG   )r	   Ú
derivativer;   r   r   r6   Úkrogh_derivZ   s    z&test_deriv_shapes.<locals>.krogh_derivc                 S   s   t | ||ƒjS rG   )r   rM   r;   r   r   r6   Ú
bary_deriv]   s    z%test_deriv_shapes.<locals>.bary_derivc                 S   s   t | ||ƒ ¡ S rG   ©r   rM   r;   r   r   r6   Úpchip_deriv`   s    z&test_deriv_shapes.<locals>.pchip_derivc                 S   s   t | ||ƒ d¡S ©Nr   rP   r;   r   r   r6   Úpchip_deriv2c   s    z'test_deriv_shapes.<locals>.pchip_deriv2c                 S   s   t | ||ƒ ¡ S rG   ©r   Úantiderivativer;   r   r   r6   Úpchip_antiderivf   s    z*test_deriv_shapes.<locals>.pchip_antiderivc                 S   s   t | ||ƒ d¡S rR   rT   r;   r   r   r6   Úpchip_antideriv2i   s    z+test_deriv_shapes.<locals>.pchip_antideriv2c                 S   s   G dd„ dt ƒ}|| ||ƒS )Nc                   @   s   e Zd Zdd„ ZdS )z9test_deriv_shapes.<locals>.pchip_deriv_inplace.<locals>.Pc                 S   s   t  | |d¡S )Nr   )r   Ú__call__)Úselfr0   r   r   r6   rX   n   s    zBtest_deriv_shapes.<locals>.pchip_deriv_inplace.<locals>.P.__call__N)Ú__name__Ú
__module__Ú__qualname__rX   r   r   r   r6   ÚPm   s   r]   )r   )r0   r2   r   r]   r   r   r6   Úpchip_deriv_inplacel   s    z.test_deriv_shapes.<locals>.pchip_deriv_inplacec                 S   s   t | ||ƒ ¡ S rG   )r   rM   r;   r   r   r6   Úakima_derivs   s    z&test_deriv_shapes.<locals>.akima_derivc                 S   s   t | ||ƒ ¡ S rG   )r   rU   r;   r   r   r6   Úakima_antiderivv   s    z*test_deriv_shapes.<locals>.akima_antiderivc                 S   s   t | ||ƒ ¡ S rG   )r   rM   r;   r   r   r6   Úcspline_derivy   s    z(test_deriv_shapes.<locals>.cspline_derivc                 S   s   t | ||ƒ ¡ S rG   )r   rU   r;   r   r   r6   Úcspline_antideriv|   s    z,test_deriv_shapes.<locals>.cspline_antiderivc                 S   s   t | ||d� ¡ S r9   )r   rM   r;   r   r   r6   Ú
bspl_deriv   s    z%test_deriv_shapes.<locals>.bspl_derivc                 S   s   t | ||d� ¡ S r9   )r   rU   r;   r   r   r6   Úbspl_antideriv‚   s    z)test_deriv_shapes.<locals>.bspl_antiderivr   )r   )r   )r   )r   )r   )r   )r   )r   )r   )r   )r   )r   )r   )r@   r$   r%   r7   )rN   rO   rQ   rS   rV   rW   r^   r_   r`   ra   rb   rc   rd   rA   rB   rC   r   r   r   r6   Útest_deriv_shapesY   s*    













þre   c                  C   sn   g d¢} g d¢}t ttfD ]}|| |ƒ}t||| ƒƒ qg d¢}t| ||ƒ}t||| ƒƒ t||| dƒƒ d S )N©r   r   r   r   )r   r   ù              ð?r   )r   y       €      ð¿r   y              @r   )r	   r   r   r   r   )r0   r2   rA   Úpr4   r   r   r6   Útest_complexŽ   s    
ri   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+S ),Ú	TestKroghc                 C   sD   t j g d¢¡| _t  ddd¡| _t  ddd¡| _|  | j¡| _d S ©N)éüÿÿÿr8   r   r   éþÿÿÿr   r   éd   r8   ©r    Ú
polynomialÚ
PolynomialÚ	true_polyÚlinspaceÚtest_xsÚxsÚys©rY   r   r   r6   Úsetup_method�   s    zTestKrogh.setup_methodc                 C   s*   t | j| jƒ}t|  | j¡|| jƒƒ d S rG   ©r	   ru   rv   r   rr   rt   ©rY   r]   r   r   r6   Útest_lagrange£   s    zTestKrogh.test_lagrangec                 C   sF   t | j| jƒ}t|  d¡|dƒƒ t|  t d¡¡|t d¡ƒƒ d S ©Né   )r	   ru   rv   r   rr   r    Úarrayrz   r   r   r6   Útest_scalar§   s    zTestKrogh.test_scalarc                 C   sN   t | j| jƒ}| | j¡}t|jd ƒD ] }t| j 	|¡| jƒ|| ƒ q(d S ©Nr   )
r	   ru   rv   rI   rt   r$   r)   r   rr   Úderiv©rY   r]   ÚDÚir   r   r6   Útest_derivatives¬   s    ÿzTestKrogh.test_derivativesc                 C   sZ   t | j| jƒ}| | jt| jƒd ¡}t|jd ƒD ] }t| j	 
|¡| jƒ|| ƒ q4d S )Nr   r   )r	   ru   rv   rI   rt   r%   r$   r)   r   rr   r�   r‚   r   r   r6   Útest_low_derivatives³   s    ÿzTestKrogh.test_low_derivativesc                 C   sJ   t | j| jƒ}d}| | j|¡}t|ƒD ]}t| | j|¡|| ƒ q(d S ©Né
   )r	   ru   rv   rI   rt   r$   r   rM   ©rY   r]   ÚmÚrr„   r   r   r6   Útest_derivativeº   s
    zTestKrogh.test_derivativec                 C   sR   t | j| jƒ}tt| jƒdt| jƒ ƒD ]$}t| | j|¡t 	t| jƒ¡ƒ q(d S rR   )
r	   ru   rv   r$   r%   r   rM   rt   r    r(   ©rY   r]   r„   r   r   r6   Útest_high_derivativeÁ   s
    ÿzTestKrogh.test_high_derivativec              	   C   sÂ   | j }tj g d¢¡}tj g d¢¡}tj|| jƒ|| jƒ|| jƒfdd�}t| j|dd�}| | j¡}t	|j
d ƒD ]F}t|| tj| |¡| jƒ| |¡| jƒ| |¡| jƒfdd�ƒ qvd S ©N©rm   r8   r   r   ©é   éýÿÿÿr   éûÿÿÿr   r   r:   r   )rr   r    rp   rq   Ústackru   r	   rI   rt   r$   r)   r   r�   ©rY   Úpoly1Úpoly2Úpoly3rv   r]   rƒ   r„   r   r   r6   Útest_ndim_derivativesÇ   s    &þýÿzTestKrogh.test_ndim_derivativesc              	   C   s¸   | j }tj g d¢¡}tj g d¢¡}tj|| jƒ|| jƒ|| jƒfdd�}t| j|dd�}t|jƒD ]L}t	| 
| j|¡tj| |¡| jƒ| |¡| jƒ| |¡| jƒfdd�ƒ qfd S r�   )rr   r    rp   rq   r•   ru   r	   r$   Únr   rM   rt   r�   ©rY   r—   r˜   r™   rv   r]   r„   r   r   r6   Útest_ndim_derivativeÖ   s    &þýÿzTestKrogh.test_ndim_derivativec                 C   s*   t | j| jƒ}t|  | j¡|| jƒƒ d S rG   ry   rz   r   r   r6   Útest_hermiteä   s    zTestKrogh.test_hermitec              	      s®   g d¢‰t  ddgddgddgg¡‰tˆˆƒ}‡‡fdd„tˆjd ƒD ƒ}t  ddd	¡‰ t|ˆ ƒt  ‡ fd
d„|D ƒ¡jƒ t| 	ˆ ¡t  
t  ‡ fdd„|D ƒ¡d¡ƒ d S )N©r   r   r   r   r   r   c                    s"   g | ]}t ˆ ˆd d …|f ƒ‘qS rG   )r	   ©Ú.0r„   )ru   rv   r   r6   Ú
<listcomp>ì   ó    z)TestKrogh.test_vector.<locals>.<listcomp>r   r   rn   c                    s   g | ]}|ˆ ƒ‘qS r   r   ©r¡   rh   ©rt   r   r6   r¢   ï   r£   c                    s   g | ]}|  ˆ ¡‘qS r   rH   r¤   r¥   r   r6   r¢   ñ   r£   )r   r   r   )r    r~   r	   r$   r)   rs   r   ÚasarrayÚTrI   r'   ©rY   r]   ÚPir   )rt   ru   rv   r6   Útest_vectorè   s    
ÿ
ÿÿzTestKrogh.test_vectorc                 C   s    t | j| jƒ}t|g ƒg ƒ d S rG   )r	   ru   rv   r   rz   r   r   r6   Ú
test_emptyô   s    zTestKrogh.test_emptyc                 C   sn   t | j| jƒ}tt |dƒ¡dƒ tt |t d¡ƒ¡dƒ tt |dgƒ¡dƒ tt |ddgƒ¡dƒ d S ©Nr   r   r   r   )r   )r	   ru   rv   r   r    r)   r~   rz   r   r   r6   Útest_shapes_scalarvalueø   s
    z!TestKrogh.test_shapes_scalarvaluec                 C   sˆ   t | j| jƒ}|j}tt | d¡¡|fƒ tt | t d¡¡¡|fƒ tt | dg¡¡|dfƒ tt | ddg¡¡|dfƒ d S ©Nr   r   r   )	r	   ru   rv   r›   r   r    r)   rI   r~   ©rY   r]   r›   r   r   r6   Ú"test_shapes_scalarvalue_derivativeÿ   s    z,TestKrogh.test_shapes_scalarvalue_derivativec                 C   sb   t | jt | jt d¡¡ƒ}tt |dƒ¡dƒ tt |dgƒ¡dƒ tt |ddgƒ¡dƒ d S ©Nr   r   )r   )r   r   r   )r   r   )r	   ru   r    Úouterrv   Úaranger   r)   rz   r   r   r6   Útest_shapes_vectorvalue  s    z!TestKrogh.test_shapes_vectorvaluec                 C   s^   t | jt | jdg¡ƒ}tt |dƒ¡dƒ tt |dgƒ¡dƒ tt |ddgƒ¡dƒ d S ©Nr   r   r   )r   r   )r   r   )r	   ru   r    r²   rv   r   r)   rz   r   r   r6   Útest_shapes_1d_vectorvalue  s    z$TestKrogh.test_shapes_1d_vectorvaluec                 C   s~   t | jt | jt d¡¡ƒ}|j}tt | 	d¡¡|dfƒ tt | 	dg¡¡|ddfƒ tt | 	ddg¡¡|ddfƒ d S ©Nr   r   r   r   )
r	   ru   r    r²   rv   r³   r›   r   r)   rI   r¯   r   r   r6   Ú"test_shapes_vectorvalue_derivative  s
    z,TestKrogh.test_shapes_vectorvalue_derivativec                 C   s„   t | j| jƒ}t}t|| jƒ|| j| j| jƒƒ t| | jd¡|| j| j| jdd�ƒ t| | jd¡|| j| j| jddgd�ƒ d S ©Nr   ©Zderr   r   )r	   ru   rv   r
   r   rt   rM   rI   )rY   r]   Zkir   r   r6   Útest_wrapper  s    ÿÿzTestKrogh.test_wrapperc                 C   sJ   g d¢}t  g d¢¡}t||ƒ}tt||ƒ| | |d¡ ƒddd� d S )N)r   éê   iÔ  i¾  i¨  i’  i|  i$	  i   iÄ  iè   i03  i`ê  )gffffffî¿gë‹¥Ä…Žë¿g™ä‘‰¥ê¿gÑ!p$Ð€ä¿gV¶0‡´¸Þ¿g�¤x*ZÖ¿g�º„àDöÐ¿g²æ2û]ÔÀ¿g ´½H. À¿gŽ»9C�À¿gÜ6D.›À¿gG°/áéøµ¿gš™™™™™©?r   r   g»½×Ùß|Û=©Úatol)r    r~   r	   r   ÚabsrM   )rY   r0   Z
offset_cdfÚfr   r   r6   Útest_int_inputs#  s    
ÿzTestKrogh.test_int_inputsc                 C   sl   t  g d¢¡t  g d¢¡ }}t||ƒ}| d¡}t||jƒ d¡dt||jƒ d¡  }t||dd� d S )N)r   r   r   r   r   )r   rg   r   r   rg   r   rg   çVçž¯Ò<r½   )r    r~   r	   rI   ÚrealÚimagr   )rY   r0   r2   ÚfuncZcmplxZcmplx2r   r   r6   Útest_derivatives_complex0  s    

ÿz"TestKrogh.test_derivatives_complexc                 C   sH   t jtdd��& tt d¡t d¡ƒ W d   ƒ n1 s:0    Y  d S )Nz40 degrees provided,©Úmatché(   )ÚpytestZwarnsÚUserWarningr	   r    r³   Zonesrw   r   r   r6   Útest_high_degree_warning:  s    z"TestKrogh.test_high_degree_warningN)rZ   r[   r\   rx   r{   r   r…   r†   rŒ   rŽ   rš   r�   rž   rª   r«   r­   r°   r´   r¶   r¸   r»   rÁ   rÆ   rÌ   r   r   r   r6   rj   œ   s*   	
rj   c                   @   s   e Zd Zdd„ ZdS )Ú
TestTaylorc                 C   sP   d}t tjd|ddƒ}t|d ƒD ]}t|dƒdƒ | ¡ }q"t|dƒdƒ d S )Nr8   r   r   é   )r   r    Úexpr$   r   r�   )rY   Zdegreerh   r„   r   r   r6   Útest_exponential@  s    
zTestTaylor.test_exponentialN)rZ   r[   r\   rÐ   r   r   r   r6   rÍ   ?  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-S ).ÚTestBarycentricc                 C   sD   t j g d¢¡| _t  ddd¡| _t  ddd¡| _|  | j¡| _d S rk   ro   rw   r   r   r6   rx   J  s    zTestBarycentric.setup_methodc                 C   s*   t | j| jƒ}t|| jƒ|  | j¡ƒ d S rG   )r   ru   rv   r   rt   rr   rz   r   r   r6   r{   P  s    zTestBarycentric.test_lagrangec                 C   sF   t | j| jƒ}t|dƒ|  d¡ƒ t|t d¡ƒ|  t d¡¡ƒ d S r|   )r   ru   rv   r   rr   r    r~   rz   r   r   r6   r   T  s    zTestBarycentric.test_scalarc                 C   sN   t | j| jƒ}| | j¡}t|jd ƒD ] }t| j 	|¡| jƒ|| ƒ q(d S r€   )
r   ru   rv   rI   rt   r$   r)   r   rr   r�   r‚   r   r   r6   r…   Y  s    z TestBarycentric.test_derivativesc                 C   s^   t | j| jƒ}| | jt| jƒd ¡}t|jd ƒD ]$}t| j	 
|¡| jƒ|| dd� q4d S )Nr   r   çê-�™—q=r½   )r   ru   rv   rI   rt   r%   r$   r)   r   rr   r�   r‚   r   r   r6   r†   _  s    þz$TestBarycentric.test_low_derivativesc                 C   sJ   t | j| jƒ}d}| | j|¡}t|ƒD ]}t| | j|¡|| ƒ q(d S r‡   )r   ru   rv   rI   rt   r$   r   rM   r‰   r   r   r6   rŒ   g  s
    zTestBarycentric.test_derivativec                 C   sR   t | j| jƒ}tt| jƒdt| jƒ ƒD ]$}t| | j|¡t 	t| jƒ¡ƒ q(d S )Nr8   )
r   ru   rv   r$   r%   r   rM   rt   r    r(   r�   r   r   r6   rŽ   n  s
    ÿz$TestBarycentric.test_high_derivativec              	   C   sÆ   | j }tj g d¢¡}tj g d¢¡}tj|| jƒ|| jƒ|| jƒfdd�}t| j|dd�}| | j¡}t	|j
d ƒD ]J}t|| tj| |¡| jƒ| |¡| jƒ| |¡| jƒfdd�dd� qvd S ©Nr�   r‘   r   r:   r   rÒ   r½   )rr   r    rp   rq   r•   ru   r   rI   rt   r$   r)   r   r�   r–   r   r   r6   rš   t  s     &þýûz%TestBarycentric.test_ndim_derivativesc              	   C   s¼   | j }tj g d¢¡}tj g d¢¡}tj|| jƒ|| jƒ|| jƒfdd�}t| j|dd�}t|jƒD ]P}t	| 
| j|¡tj| |¡| jƒ| |¡| jƒ| |¡| jƒfdd�dd� qfd S rÓ   )rr   r    rp   rq   r•   ru   r   r$   r›   r   rM   rt   r�   rœ   r   r   r6   r�   „  s    &þýûz$TestBarycentric.test_ndim_derivativec                 C   s2   t | jƒ}| | j¡ t|  | j¡|| jƒƒ d S rG   )r   ru   Zset_yirv   r   rr   rt   rz   r   r   r6   Útest_delayed“  s    
zTestBarycentric.test_delayedc                 C   sZ   t | jd d… | jd d… ƒ}| | jdd … | jdd … ¡ t|  | j¡|| jƒƒ d S )Nr   )r   ru   rv   Zadd_xir   rr   rt   rz   r   r   r6   Útest_append˜  s     zTestBarycentric.test_appendc                    sˆ   g d¢‰t  ddgddgddgg¡‰t‰ ˆ ˆˆƒ}‡ ‡‡fdd„tˆjd ƒD ƒ}t  ddd	¡‰t|ˆƒt  ‡fd
d„|D ƒ¡jƒ d S )NrŸ   r   r   r   c                    s"   g | ]}ˆ ˆˆd d …|f ƒ‘qS rG   r   r    )ÚBIru   rv   r   r6   r¢   ¢  r£   z/TestBarycentric.test_vector.<locals>.<listcomp>r   r   rn   c                    s   g | ]}|ˆ ƒ‘qS r   r   r¤   r¥   r   r6   r¢   ¥  r£   )	r    r~   r   r$   r)   rs   r   r¦   r§   r¨   r   )rÖ   rt   ru   rv   r6   rª   �  s    
 ÿzTestBarycentric.test_vectorc                 C   sn   t | j| jƒ}tt |dƒ¡dƒ tt |t d¡ƒ¡dƒ tt |dgƒ¡dƒ tt |ddgƒ¡dƒ d S r¬   )r   ru   rv   r   r    r)   r~   rz   r   r   r6   r­   §  s
    z'TestBarycentric.test_shapes_scalarvaluec                 C   sˆ   t | j| jƒ}|j}tt | d¡¡|fƒ tt | t d¡¡¡|fƒ tt | dg¡¡|dfƒ tt | ddg¡¡|dfƒ d S r®   )	r   ru   rv   r›   r   r    r)   rI   r~   r¯   r   r   r6   r°   ®  s    z2TestBarycentric.test_shapes_scalarvalue_derivativec                 C   sb   t | jt | jt d¡¡ƒ}tt |dƒ¡dƒ tt |dgƒ¡dƒ tt |ddgƒ¡dƒ d S r±   )r   ru   r    r²   rv   r³   r   r)   rz   r   r   r6   r´   ¶  s    z'TestBarycentric.test_shapes_vectorvaluec                 C   s^   t | jt | jdg¡ƒ}tt |dƒ¡dƒ tt |dgƒ¡dƒ tt |ddgƒ¡dƒ d S rµ   )r   ru   r    r²   rv   r   r)   rz   r   r   r6   r¶   ¼  s    z*TestBarycentric.test_shapes_1d_vectorvaluec                 C   s~   t | jt | jt d¡¡ƒ}|j}tt | 	d¡¡|dfƒ tt | 	dg¡¡|ddfƒ tt | 	ddg¡¡|ddfƒ d S r·   )
r   ru   r    r²   rv   r³   r›   r   r)   rI   r¯   r   r   r6   r¸   Â  s
    z2TestBarycentric.test_shapes_vectorvalue_derivativec                 C   s„   t | j| jƒ}t}t|| jƒ|| j| j| jƒƒ t| | jd¡|| j| j| jdd�ƒ t| | jd¡|| j| j| jddgd�ƒ d S r¹   )r   ru   rv   r   r   rt   rM   rI   )rY   r]   Zbir   r   r6   r»   É  s    ÿÿzTestBarycentric.test_wrapperc                 C   s6   dt  dd¡ }t  dd¡}t||dƒ}t|dƒ d S )Niè  r   é   g     ŽÂ@g      #@)r    r³   r   r   )rY   r0   r2   Úvaluer   r   r6   Útest_int_inputÒ  s    zTestBarycentric.test_int_inputc                 C   s€   d}t  |d ¡ t j¡}t  |t j | ¡}d| }|d  d9  < |d  d9  < t|ƒ}|jd }t|jd|  |ƒ d S )NiL  r   r   r   ç      à?r   )	r    r³   ZastypeZfloat64ÚcosÚpir   Zwir   )rY   r›   Újr0   Úwr]   Úfactorr   r   r6   Útest_large_chebyshevØ  s    	
z$TestBarycentric.test_large_chebyshevc                 C   s\   t ddgddgƒ}tjdd�� ||jƒ}W d   ƒ n1 s>0    Y  t||j ¡ ƒ d S )Nr   r   r   Úraise)Údivide)r   r    Zerrstater3   r   r5   Zravel)rY   r]   r5   r   r   r6   Útest_warningñ  s    (zTestBarycentric.test_warningc                 C   sX   t  g d¢¡}t  g d¢¡}tjtdd�� t||ƒ W d   ƒ n1 sJ0    Y  d S )N)çš™™™™™¹?rÚ   çÍÌÌÌÌÌì?rÚ   rf   z)Interpolation points xi must be distinct.rÇ   )r    r~   rÊ   r   Ú
ValueErrorr   )rY   Zxisrv   r   r   r6   Útest_repeated_nodeü  s    ÿz"TestBarycentric.test_repeated_nodeN)rZ   r[   r\   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   r6   rÑ   I  s,   
	rÑ   c                   @   s^   e Zd Zd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S )Ú	TestPCHIPé   c                 C   s:   t j d¡ t  t j |¡¡}t j |¡}t||ƒ||fS )Nr   )r    r!   r"   Úsortr   )rY   Znptsr3   r5   r   r   r6   Ú_make_random  s    zTestPCHIP._make_randomc                 C   sœ   |   ¡ \}}}tt|ƒd ƒD ]x}|| ||d   }}|| ||d   }}||kr`|| }}t ||d¡}	||	ƒ}
t||
d k|
|d k@  ¡ ƒ qd S )Nr   rˆ   rÂ   ©rë   r$   r%   r    rs   r   Úall©rY   rh   r3   r5   r„   Úx1Zx2Úy1Úy2ZxpZypr   r   r6   Útest_overshoot  s    
zTestPCHIP.test_overshootc                 C   s–   |   ¡ \}}}tt|ƒd ƒD ]r}|| ||d   }}|| ||d   }}t ||d¡}	||	ƒ}
t|| |
dd … |
d d…   dk ¡ ƒ qd S )Nr   rˆ   r   rì   rî   r   r   r6   Útest_monotone  s    zTestPCHIP.test_monotonec                 C   sh   t  g d¢g d¢g¡}t  d¡}t|d |d ƒ|ƒ}|d }t|d |d ƒ|ƒ}t||ddd� d S )	N)
r   r   r’   é   é/   é<   éO   éW   éc   rn   )
éßÿÿÿrú   iíÿÿÿrm   r’   é   é&   é-   é5   é7   rn   r   r   ç      ð?ç›+¡†›„=)r¾   Úrtol)r    r~   r³   r   r   )rY   ÚdataÚxxZcurveZdata1Zcurve1r   r   r6   Ú	test_cast#  s    
ÿ
zTestPCHIP.test_castc                 C   sz   d}t  t |¡¡}t|d d …df |d d …df ƒ}d}t  t |¡¡}t|d d …df ||d d …df ƒddd� d S )Na  
          7.99   0.00000E+0
          8.09   0.27643E-4
          8.19   0.43750E-1
          8.70   0.16918E+0
          9.20   0.46943E+0
         10.00   0.94374E+0
         12.00   0.99864E+0
         15.00   0.99992E+0
         20.00   0.99999E+0
        r   r   a^  
           7.9900       0.0000
           9.1910       0.4640
          10.3920       0.9645
          11.5930       0.9965
          12.7940       0.9992
          13.9950       0.9998
          15.1960       0.9999
          16.3970       1.0000
          17.5980       1.0000
          18.7990       1.0000
          20.0000       1.0000
        ç        g-Cëâ6
?©r  r¾   )r    ZloadtxtÚioÚStringIOr   r   )rY   ZdataStrr  ÚpchZ	resultStrÚresultr   r   r6   Útest_nag/  s    "zTestPCHIP.test_nagc                 C   sp   t  g d¢¡}t  g d¢¡}t  g d¢¡}t||ƒt||ƒfD ],}|d |d fD ]}t||dƒdkƒ qRq>d S )N)r  rä   g      Ð?gffffffÖ?)çš™™™™uq@g     @@ç     @�@ç     ˆ£@)r  r  g     p—@r  r   r   r   )r    r~   r   r   )rY   r0   rð   rñ   ÚppÚtr   r   r6   Útest_endslopesR  s    zTestPCHIP.test_endslopesc                 C   sp   t  d¡}t  |¡}t ¡ �$ t d¡ t||ƒ}W d   ƒ n1 sF0    Y  t  ddd¡}t||ƒdƒ d S )Nrˆ   Úerrorr   é	   ée   r  )	r    r³   Z
zeros_likeÚwarningsÚcatch_warningsÚfilterwarningsr   rs   r   )rY   r0   r2   r
  r  r   r   r6   Útest_all_zeros\  s    



(zTestPCHIP.test_all_zerosc                 C   s:   t  ddd¡}tddgddgƒ}t||ƒd| dd� d S )Nr   r   r×   r   rÂ   r½   )r    rs   r   r   )rY   r0   rh   r   r   r6   Útest_two_pointsh  s    zTestPCHIP.test_two_pointsc                 C   st   t tg d¢g d¢dgdd�dgƒ t tg d¢g d¢dgdd�dgƒ t tg d¢g d¢dgddgd�dgdggƒ d S )	N©r   r   r   )r   r8   r   rÚ   r   rº   r   r   g      @)r   r   rw   r   r   r6   Útest_pchip_interpolateq  s    þþ
þz TestPCHIP.test_pchip_interpolatec                 C   s(   t ddgddgƒ}| ¡ }t|dƒ d S )Nr   r   r   rÚ   )r   Úrootsr   )rY   rh   r‹   r   r   r6   Ú
test_roots~  s    zTestPCHIP.test_rootsN)ré   )rZ   r[   r\   rë   rò   ró   r  r  r  r  r  r  r  r   r   r   r6   rè     s   

#
	rè   c                   @   sj   e Zd Zed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S )ÚTestCubicSplineú
not-a-knotr  c                 C   s¾  | j }| j}t |¡}| |jd gdg|jd   ¡}|dd… }t|ddd…f |ddd…f |d  |ddd…f |d   |ddd…f |  |ddd…f  ||d� t|ddd…f d|ddd…f  |d  d|ddd…f  |  |ddd…f  ||d� t|ddd…f d|ddd…f  | |ddd…f  ||d� |jdk�r„|dk�r„|dk�r„t|d d||d� dS |d	k�rþt| |d dƒ| |d dƒ||d� t| |d dƒ| |d dƒ||d� t| |d dƒ| |d dƒ||d� dS |dk�rj|jdk�rP| |d ƒ| |d ƒ |d  }t| |d dƒ|||d� nt|d
 |d ||d� nn|dk�r�t| |d dƒd||d� nH|dk�r¶t| |d dƒd||d� n"|\}	}
t| |d |	ƒ|
||d� |dk�rD|jdk�r*| |d ƒ| |d ƒ |d  }t| |d dƒ|||d� nt|d |d ||d� nv|dk�rjt| |d dƒd||d� nP|dk�r˜t| |d dƒdd| d| d� n"|\}	}
t| |d |	ƒ|
||d� dS )zVCheck that spline coefficients satisfy the continuity and boundary
        conditions.r   r   r   Nr   r   r  r   Úperiodic)r   r   )r   r   r>   r=   )r   r   )r   rm   )	r0   Úcr    Údiffr-   r)   r,   r   r*   )ÚSÚbc_startÚbc_endÚtolr0   r"  ZdxZdxiZslopeÚorderrØ   r   r   r6   Úcheck_correctness†  sh    
">ÿÿÿ*ÿÿÿ6ÿ 
$$$
 


 

$z!TestCubicSpline.check_correctnessc                 C   s¼   t |jƒ}||= t |¡}| d¡ t |¡}| d¡ dddd|fd|fg}|d d… D ]"}t||||d�}	|  |	||¡ qZ|D ]4}
|D ]*}t||||
|fd�}	| j|	|
|d	d
� qŠq‚d S )Nr   r   r   r=   r>   r   r   ©r   r?   g›+¡†›„=©r'  )r#   r)   r    ÚemptyÚfillr   r)  )rY   r0   r2   r   r.   Zfirst_derivZsecond_derivZbc_allrD   r$  r%  r&  r   r   r6   Úcheck_all_bcÂ  s&    




ûzTestCubicSpline.check_all_bcc                 C   sê   t  g d¢¡}t  g d¢¡}dd|jfD ]¼}|  |d |… |d |… d¡ t  d|df¡}|d |… |dd d …df< |d |… d |dd d …df< |d |… d |dd d …df< |d |… d |dd d …df< |  |d |… |d¡ q(d S )N)r   r   rÚ   r   r   g      @g      @r  )r   g      à¿r   r   g      @r   r   rÚ   r   r   r   r   )r    r~   r*   r.  r,  )rY   r0   r2   r›   ÚYr   r   r6   Útest_generalÙ  s    zTestCubicSpline.test_generalc                 C   sÊ   dD ]À}t  ddt j |¡}t  |¡}t||dd�}|  |dd¡ t  d|df¡}||dd d …df< |d |dd d …df< |d |dd d …df< |d |dd d …df< t||ddd�}|  |dd¡ qd S )	N)r   r   r8   r   r   r!  ©r?   r   r8   r*  )r    rs   rÜ   rÛ   r   r)  r,  )rY   r›   r0   r2   r$  r/  r   r   r6   Útest_periodicæ  s    
zTestCubicSpline.test_periodicc                 C   sP   t  ddt j d¡}t  |¡}t||dd�}t|dƒ|ddt j  ƒdd� d S )	Nr   r   rˆ   r!  r1  r   rÎ   )Údecimal)r    rs   rÜ   rÛ   r   r   ©rY   r0   r2   r$  r   r   r6   Útest_periodic_evalõ  s    
z"TestCubicSpline.test_periodic_evalc                 C   s>   t  g d¢¡}t  g d¢¡}t||ddd�}|  |dd¡ d S )N)rå   çÍÌÌÌÌÌô?gffffffþ?çÍÌÌÌÌÌ @çÍÌÌÌÌÌ@ç      @g333333@gš™™™™™@gÍÌÌÌÌÌ@g      @g      @g      @g       @gffffff"@g      %@gš™™™™™&@g333333'@g      (@g333333)@g      *@gš™™™™™*@)r6  g      ø?gš™™™™™ý?r7  r8  gš™™™™™@g333333@g333333@gffffff @r7  ç      @gffffff@r:  g333333ÿ?gffffffö?rå   gffffffæ?g333333ã?rÚ   gš™™™™™Ù?r6  r!  )r?   Úextrapolate)r    r~   r   r)  r4  r   r   r6   Ú*test_second_derivative_continuity_gh_11758û  s    z:TestCubicSpline.test_second_derivative_continuity_gh_11758c                 C   sZ   t  g d¢¡}t  g d¢¡}t||dd�}|  |dd¡ t| d¡|ƒt  g d¢¡ƒ d S )N)r   g      @r9  )r   g      .@r   r!  r1  r   )ç      HÀr=  r=  )r    r~   r   r)  r   rM   r4  r   r   r6   Útest_three_points  s
    z!TestCubicSpline.test_three_pointsc                 C   sÈ   t  g d¢¡}t  ddgddgddgg¡}t||dd�}|  |dd¡ t||d d …df dd�}t||d d …df dd�}t  ddd	¡}t||ƒd d …df ||ƒƒ t||ƒd d …df ||ƒƒ d S )
N)r  r   r9  r  r   r!  r1  r   r   r   r8   )r    r~   r   r)  rs   r   )rY   r0   r2   r$  ZS0ZS1Úqr   r   r6   Ú#test_periodic_three_points_multidim  s    z3TestCubicSpline.test_periodic_three_points_multidimc                 C   s¬   t jg d¢td�}t jg d¢td�}t||ƒ}|  |¡ t  g d¢¡}t||ƒ}|  |¡ t||d dd�}|  |dd	¡ t  g d¢¡}t||d
dgd�}|  |d
d¡ d S )N)r   r   r   r   )Zdtype)r”   r   r   r   )y      ð¿      ð?r  y      ð?      ð¿y      à?      ø¿r   )r=   ©r   y               @r1  r=   rA  )r   y       @      à?)r   y      à?      ð¿)r    r~   Úintr   r)  r4  r   r   r6   Útest_dtypes  s    



zTestCubicSpline.test_dtypesc                 C   sJ   t j d¡}t  |jdd�¡}d|jdd� }t||ƒ}| j|dd� d S )Nr   rn   )r*   g     ˆÃ@g‚vIhÂ%<=r+  )r    r!   ZRandomStaterê   Úuniformr   r)  )rY   Úrngr0   r2   r$  r   r   r6   Útest_small_dx.  s
    
zTestCubicSpline.test_small_dxc              	   C   s’  t  g d¢¡}t  g d¢¡}t  g d¢¡}t  t jdddg¡}t  g d¢¡}t  t jdddg¡}g d¢}dg}dg}	ttt||ƒ ttt||ƒ ttt||ƒ ttt||ƒ ttt||ƒ ttt|d d …t jf |ƒ ttt||	ƒ g d	¢}
|
D ]}ttt||d
|dƒ qðt j||f }d}ddg d¢ff}ddd
d
ggff}ttt||d
|dƒ ttt||d
|dƒ ttt||d
|dƒ ttt||d
ddƒ d S )Nrf   )y      ð?      ð?r   r   r   r   r   r   )r   r   r   r   r  r   ))r!  r>   ))r   r   )r   rˆ   )©r   r   )r  r  z
not-a-typor   T)r>   rG  r>   )r   r   r   r!  )r    r~   ÚnanÚassert_raisesræ   r   ZnewaxisZc_)rY   r0   r2   ZxcZxnZxoZynZy3rï   rð   Zwrong_bcr?   r/  Zbc1Zbc2Zbc3r   r   r6   Útest_incorrect_inputs5  s6    z%TestCubicSpline.test_incorrect_inputsN)r   r   r  )rZ   r[   r\   Ústaticmethodr)  r.  r0  r2  r5  r<  r>  r@  rC  rF  rJ  r   r   r   r6   r  …  s     ÿ;	r  c                  C   sN   g d¢} g d¢}g d¢}t | ||ƒ}t|| ƒ|dd� t|| dƒ|dd� d S )N)r   r   r}   )r   r   r   )r   r   r}   rÂ   )r  r   )r   r   )r0   r2   r4   r1   r   r   r6   Ú#test_CubicHermiteSpline_correctness^  s    rL  c                  C   sH   g d¢} g d¢}g d¢}t tt| ||ƒ ddtjg}t tt| ||ƒ d S )Nr  )r   r   r8   )r   r   r   r   r   r   )rI  ræ   r   r    rH  )r0   r2   r4   Zdydx_with_nanr   r   r6   Ú&test_CubicHermiteSpline_error_handlingg  s    rM  c                  C   sd   t  ddg¡} t  ddg¡}t  ddg¡}t| ||ƒ}|jdd�}t|jjd	 d	ƒ t|jd
ƒ d S )Ngü©ñÒMbP?gü©ñÒMb`?g˜‡�B…Ü»>gdJ©†²>gƒ½ª/"œù¿g³%«"œù¿T)r;  r   r   )r    r~   r   r  r   r"  r)   r*   )r0   r2   Zdyrh   r‹   r   r   r6   Útest_roots_extrapolate_gh_11185q  s    rN  c                   @   s²   e Zd Zej de d¡e d¡g¡ej dg d¢¡ej dg d¢¡ej dee	g¡d	d
„ ƒƒƒƒZ
ej de d¡e d¡g¡ej dg d¢¡ej deeg¡dd„ ƒƒƒZdS )ÚTestZeroSizeArraysr2   )rˆ   r   r8   )rˆ   r8   r   r?   )r   r!  r=   r>   r   rŸ   Úclsc           
      C   sÄ   t  d¡}t  d¡}||||d�}||ƒjdks4J ‚||ƒj|j|jdd …  ksVJ ‚t  |d|¡}|||||d�}|jd |… |jf |j|d d …  }	||ƒjdks®J ‚||ƒj|	ksÀJ ‚d S )Nrˆ   r   r1  r   r   )r?   r   ©r    r³   r*   r)   Zmoveaxis)
rY   rP  r2   r?   r   r0   ÚxvalÚobjÚytÚshr   r   r6   Útest_zero_size…  s    

"(z!TestZeroSizeArrays.test_zero_sizec           	      C   s¾   t  d¡}t  d¡}|||ƒ}||ƒjdks0J ‚||ƒj|j|jdd …  ksRJ ‚t  |d|¡}||||d�}|jd |… |jf |j|d d …  }||ƒjdks¨J ‚||ƒj|ksºJ ‚d S )Nrˆ   r   r   r   r:   rQ  )	rY   rP  r2   r   r0   rR  rS  rT  rU  r   r   r6   Útest_zero_size_2›  s    


"(z#TestZeroSizeArrays.test_zero_size_2N)rZ   r[   r\   rÊ   ÚmarkZparametrizer    r(   r   r   rV  r   r   rW  r   r   r   r6   rO  ~  s   ÿÿÿrO  )*r  r  Únumpyr    Znumpy.testingr   r   r   r   r   r   rÊ   r   rI  Zscipy.interpolater	   r
   r   r   r   r   r   r   r   r   r   r   r7   r@   rF   rL   re   ri   rj   rÍ   rÑ   rè   r  rL  rM  rN  rO  r   r   r   r6   Ú<module>   s4    8ÿ
'5 $
 > Z	
