U
    »mœdTv  ã                   @   s0  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ddd	d
g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¡ ddddddg}ttdt|ƒd ƒƒ}| |t|ƒd  d¡ t jjd| Ž  |¡}t  	|¡}	| t
kr¦t jjd| Ž  |¡}
| |||
fd	|i|—Ž|	ƒ}n| ||fd	|i|—Ž|	ƒ}|pÆd
|jd |…  | |j|d … dd …  }t|j|ƒ |�rl|jdk�rl| t
k�rF| t|ƒt|ƒt|
ƒfd	|i|—Žt|	ƒƒ n&| t|ƒt|ƒfd	|i|—Žt|	ƒƒ |	jdk�rò|d k�rò|jd |… dt|ƒ  |j|d … dd …  }|td ƒf||j  d  }| |¡}t  ||¡\}}t||ƒ d S )NéÒ  éÿÿÿÿ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   ú]/home/sam/Atlas/atlas_env/lib/python3.8/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               	   C   sL   ddd„} t D ]8}t D ].}tt|ƒ t|ƒƒD ]}t| ||d|ƒ q.qqd S )Nr   c                 S   s   t | ||ƒjS ©N)r	   Úderivativesr;   r   r   r6   Úkrogh_derivsO   s    z(test_derivs_shapes.<locals>.krogh_derivsr   )r   ©r@   r$   r%   r7   )rI   rB   rC   r   r   r   r6   Útest_derivs_shapesN   s
    
rK   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„}| |||||||||	|
|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_derivY   s    z&test_deriv_shapes.<locals>.krogh_derivc                 S   s   t | ||ƒ ¡ S rG   ©r   rL   r;   r   r   r6   Úpchip_deriv\   s    z&test_deriv_shapes.<locals>.pchip_derivc                 S   s   t | ||ƒ d¡S ©Nr   rN   r;   r   r   r6   Úpchip_deriv2_   s    z'test_deriv_shapes.<locals>.pchip_deriv2c                 S   s   t | ||ƒ ¡ S rG   ©r   Úantiderivativer;   r   r   r6   Úpchip_antiderivb   s    z*test_deriv_shapes.<locals>.pchip_antiderivc                 S   s   t | ||ƒ d¡S rP   rR   r;   r   r   r6   Úpchip_antideriv2e   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   rV   j   s    zBtest_deriv_shapes.<locals>.pchip_deriv_inplace.<locals>.P.__call__N)Ú__name__Ú
__module__Ú__qualname__rV   r   r   r   r6   ÚPi   s   r[   )r   )r0   r2   r   r[   r   r   r6   Úpchip_deriv_inplaceh   s    z.test_deriv_shapes.<locals>.pchip_deriv_inplacec                 S   s   t | ||ƒ ¡ S rG   )r   rL   r;   r   r   r6   Úakima_derivo   s    z&test_deriv_shapes.<locals>.akima_derivc                 S   s   t | ||ƒ ¡ S rG   )r   rS   r;   r   r   r6   Úakima_antiderivr   s    z*test_deriv_shapes.<locals>.akima_antiderivc                 S   s   t | ||ƒ ¡ S rG   )r   rL   r;   r   r   r6   Úcspline_derivu   s    z(test_deriv_shapes.<locals>.cspline_derivc                 S   s   t | ||ƒ ¡ S rG   )r   rS   r;   r   r   r6   Úcspline_antiderivx   s    z,test_deriv_shapes.<locals>.cspline_antiderivc                 S   s   t | ||d� ¡ S r9   )r   rL   r;   r   r   r6   Ú
bspl_deriv{   s    z%test_deriv_shapes.<locals>.bspl_derivc                 S   s   t | ||d� ¡ S r9   )r   rS   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   rJ   )rM   rO   rQ   rT   rU   r\   r]   r^   r_   r`   ra   rb   rA   rB   rC   r   r   r   r6   Útest_deriv_shapesX   s4    











      þrc   c                  C   s|   ddddg} ddddg}t tttfD ]}|| |ƒ}t||| ƒƒ q$ddddg}t| ||ƒ}t||| ƒƒ t||| dƒƒ d S )	Nr   r   r   r   ù              ð?r   y       €      ð¿y              @)r	   r   r   r   r   r   )r0   r2   rA   Úpr4   r   r   r6   Útest_complexŠ   s    
rf   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'S )(Ú	TestKroghc                 C   sH   t  dddddg¡| _t  ddd¡| _t  ddd¡| _|  | j¡| _d S ©Néþÿÿÿr   r   r8   éüÿÿÿr   éd   ©r    Zpoly1dÚ	true_polyÚlinspaceÚtest_xsÚxsÚys©rW   r   r   r6   Úsetup_method™   s    zTestKrogh.setup_methodc                 C   s*   t | j| jƒ}t|  | j¡|| jƒƒ d S rG   ©r	   rp   rq   r   rm   ro   ©rW   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	   rp   rq   r   rm   r    Úarrayru   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	   rp   rq   rH   ro   r$   r)   r   rm   Úderiv©rW   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	   rp   rq   rH   ro   r%   r$   r)   r   rm   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	   rp   rq   rH   ro   r$   r   rL   )rW   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 rP   )
r	   rp   rq   r$   r%   r   rL   ro   r    r(   )rW   r[   r~   r   r   r6   Útest_high_derivative½   s
    ÿzTestKrogh.test_high_derivativec                 C   s*   t | j| jƒ}t|  | j¡|| jƒƒ d S rG   rt   ru   r   r   r6   Útest_hermiteÃ   s    zTestKrogh.test_hermitec              	      s°   dddg‰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 )Nr   r   r   c                    s"   g | ]}t ˆ ˆd d …|f ƒ‘qS rG   )r	   ©Ú.0r~   )rp   rq   r   r6   Ú
<listcomp>Ë   s     z)TestKrogh.test_vector.<locals>.<listcomp>r   r   rk   c                    s   g | ]}|ˆ ƒ‘qS r   r   ©rˆ   re   ©ro   r   r6   r‰   Î   s     c                    s   g | ]}|  ˆ ¡‘qS r   )rH   rŠ   r‹   r   r6   r‰   Ð   s     )r   r   r   )r    ry   r	   r$   r)   rn   r   ÚasarrayÚTrH   r'   ©rW   r[   ÚPir   )ro   rp   rq   r6   Útest_vectorÇ   s    

ÿ
ÿÿzTestKrogh.test_vectorc                 C   s    t | j| jƒ}t|g ƒg ƒ d S rG   )r	   rp   rq   r   ru   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	   rp   rq   r   r    r)   ry   ru   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	   rp   rq   Únr   r    r)   rH   ry   ©rW   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	   rp   r    Úouterrq   Úaranger   r)   ru   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	   rp   r    r˜   rq   r   r)   ru   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	   rp   r    r˜   rq   r™   r”   r   r)   rH   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	   rp   rq   r
   r   ro   rL   rH   )rW   r[   Zkir   r   r6   Útest_wrapperù   s    ÿÿzTestKrogh.test_wrapperc                 C   sv   ddddddddd	d
dddg}t  dddddddddddddg¡}t||ƒ}tt||ƒ| | |d¡ ƒddd� d S )Nr   éê   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   g»½×Ùß|Û=©Úatol)r    ry   r	   r   ÚabsrL   )rW   r0   Z
offset_cdfÚfr   r   r6   Útest_int_inputs  s(     ÿ      ý
 ÿzTestKrogh.test_int_inputsc                 C   sx   t  dddddg¡t  dddddg¡ }}t||ƒ}| d¡}t||jƒ d¡dt||jƒ d¡  }t||dd� d S )Nr   r   r   rd   çVçž¯Ò<r¡   )r    ry   r	   rH   ÚrealÚimagr   )rW   r0   r2   ÚfuncZcmplxZcmplx2r   r   r6   Útest_derivatives_complex  s    *

ÿz"TestKrogh.test_derivatives_complexc              	   C   s4   t jtdd�� tt d¡t d¡ƒ W 5 Q R X d S )Nz40 degrees provided,)Úmatché(   )ÚpytestZwarnsÚUserWarningr	   r    r™   Zonesrr   r   r   r6   Útest_high_degree_warning  s    z"TestKrogh.test_high_degree_warningN)rX   rY   rZ   rs   rv   rz   r   r€   r„   r…   r†   r�   r‘   r“   r–   rš   rœ   r�   rŸ   r¥   rª   r¯   r   r   r   r6   rg   ˜   s&   	
rg   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{   )rW   Zdegreere   r~   r   r   r6   Útest_exponential  s    
zTestTaylor.test_exponentialN)rX   rY   rZ   r³   r   r   r   r6   r°     s   r°   c                   @   st   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S )ÚTestBarycentricc                 C   sH   t  dddddg¡| _t  ddd¡| _t  ddd¡| _|  | j¡| _d S rh   rl   rr   r   r   r6   rs   )  s    zTestBarycentric.setup_methodc                 C   s*   t | j| jƒ}t|  | j¡|| jƒƒ d S rG   )r   rp   rq   r   rm   ro   ru   r   r   r6   rv   /  s    zTestBarycentric.test_lagrangec                 C   sF   t | j| jƒ}t|  d¡|dƒƒ t|  t d¡¡|t d¡ƒƒ d S rw   )r   rp   rq   r   rm   r    ry   ru   r   r   r6   rz   3  s    zTestBarycentric.test_scalarc                 C   s2   t | jƒ}| | j¡ t|  | j¡|| jƒƒ d S rG   )r   rp   Zset_yirq   r   rm   ro   ru   r   r   r6   Útest_delayed8  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   rp   rq   Zadd_xir   rm   ro   ru   r   r   r6   Útest_append=  s     zTestBarycentric.test_appendc                    sŠ   dddg‰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   c                    s"   g | ]}ˆ ˆˆd d …|f ƒ‘qS rG   r   r‡   )ÚBIrp   rq   r   r6   r‰   G  s     z/TestBarycentric.test_vector.<locals>.<listcomp>r   r   rk   c                    s   g | ]}|ˆ ƒ‘qS r   r   rŠ   r‹   r   r6   r‰   J  s     )	r    ry   r   r$   r)   rn   r   rŒ   r�   rŽ   r   )r·   ro   rp   rq   r6   r�   B  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   rp   rq   r   r    r)   ry   ru   r   r   r6   r“   L  s
    z'TestBarycentric.test_shapes_scalarvaluec                 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   rp   r    r˜   rq   r™   r   r)   ru   r   r   r6   rš   S  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   rp   r    r˜   rq   r   r)   ru   r   r   r6   rœ   Y  s    z*TestBarycentric.test_shapes_1d_vectorvaluec                 C   s4   t | j| jƒ}t| j| j| jƒ}t|| jƒ|ƒ d S rG   )r   rp   rq   r   ro   r   )rW   r[   Úvaluesr   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   )rW   r0   r2   Úvaluer   r   r6   Útest_int_inputd  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 )Ni   r   r   r   ç      à?r   )	r    r™   ZastypeZfloat64ÚcosÚpir   Zwir   )rW   r”   Újr0   Úwr[   Úfactorr   r   r6   Útest_large_chebyshevj  s    	
z$TestBarycentric.test_large_chebyshevc              	   C   sH   t ddgddgƒ}tjdd�� ||jƒ}W 5 Q R X t||j ¡ ƒ d S )Nr   r   r   Úraise)Údivide)r   r    Zerrstater3   r   r5   Zravel)rW   r[   r5   r   r   r6   Útest_warningƒ  s    zTestBarycentric.test_warningN)rX   rY   rZ   rs   rv   rz   rµ   r¶   r�   r“   rš   rœ   rŸ   r»   rÂ   rÅ   r   r   r   r6   r´   (  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   )rW   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    rn   r   Úall©rW   re   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   sˆ   t  ddddddddd	d
g
ddddddddddg
g¡}t  d
¡}t|d |d ƒ|ƒ}|d }t|d |d ƒ|ƒ}t||ddd� d S )Nr   r   é   é   é/   é<   éO   éW   éc   rk   ißÿÿÿiíÿÿÿri   é   é&   é-   é5   é7   r   ç      ð?ç›+¡†›„=)r¢   Úrtol)r    ry   r™   r   r   )rW   Ú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   )rW   ZdataStrrá   ÚpchZ	resultStrÚresultr   r   r6   Útest_nag·  s    "zTestPCHIP.test_nagc                 C   s|   t  ddddg¡}t  ddddg¡}t  ddd	dg¡}t||ƒt||ƒfD ],}|d
 |d fD ]}t||dƒd
kƒ q^qJd S )Nrä   gš™™™™™¹?g      Ð?gffffffÖ?gš™™™™uq@g     @@g     @�@g     ˆ£@g     p—@r   r   r   )r    ry   r   r   )rW   r0   rÎ   rÏ   ÚppÚtr   r   r6   Útest_endslopesÚ  s    zTestPCHIP.test_endslopesc              	   C   s\   t  d¡}t  |¡}t ¡ � t d¡ t||ƒ}W 5 Q R X t  ddd¡}t||ƒdƒ d S )Nr�   Úerrorr   é	   ée   rä   )	r    r™   Z
zeros_likeÚwarningsÚcatch_warningsÚfilterwarningsr   rn   r   )rW   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    rn   r   r   )rW   r0   re   r   r   r6   Útest_two_pointsð  s    zTestPCHIP.test_two_pointsc                 C   s€   t tdddgdddgdgdd�d	gƒ t tdddgdddgdgd
d�dgƒ t tdddgdddgdgd
dgd�dgdggƒ d S )Nr   r   r   r   r8   r   r¼   rž   rÞ   r   g      @)r   r   rr   r   r   r6   Útest_pchip_interpolateù  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   )rW   re   rƒ   r   r   r6   Ú
test_roots  s    zTestPCHIP.test_rootsN)rÇ   )rX   rY   rZ   rÉ   rÐ   rÑ   rã   rê   rí   rô   rõ   rö   rø   r   r   r   r6   rÆ   Ž  s   

#
	rÆ   c                   @   sb   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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   ri   )	r0   Úcr    Údiffr-   r)   r,   r   r*   )ÚSÚbc_startÚbc_endÚtolr0   rü   ZdxZdxiZslopeÚorderrº   r   r   r6   Úcheck_correctness  sn    
">ÿÿ ÿ*ÿÿ ÿ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  )rW   r0   r2   r   r.   Zfirst_derivZsecond_derivZbc_allrD   rþ   rÿ   r   r   r   r6   Úcheck_all_bcJ  s&    




ûzTestCubicSpline.check_all_bcc              
   C   s  t  ddddddddg¡}t  dd	dd
ddddg¡}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 )Nr   r   r¼   r   r   g      @g      @rï   g      à¿r   g      @r   )r    ry   r*   r  r  )rW   r0   r2   r”   ÚYr   r   r6   Útest_generala  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    rn   r¾   r½   r   r  r  )rW   r”   r0   r2   rþ   r	  r   r   r6   Útest_periodicn  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û   r  r   r±   )Údecimal)r    rn   r¾   r½   r   r   ©rW   r0   r2   rþ   r   r   r6   Útest_periodic_eval}  s    
z"TestCubicSpline.test_periodic_evalc                 C   sŠ   t  ddddddddd	d
dddddddddddg¡}t  ddddddddddddddddd d!d"d#dg¡}t||d$d$d%�}|  |d$d$¡ d S )&NgÍÌÌÌÌÌì?gÍÌÌÌÌÌô?gffffffþ?gÍÌÌÌÌÌ @gÍÌÌÌÌÌ@ç      @g333333@gš™™™™™@gÍÌÌÌÌÌ@g      @g      @g      @g       @gffffff"@g      %@gš™™™™™&@g333333'@g      (@g333333)@g      *@gš™™™™™*@g      ø?gš™™™™™ý?gš™™™™™@g333333@g333333@gffffff @g      @gffffff@g333333ÿ?gffffffö?gffffffæ?g333333ã?r¼   gš™™™™™Ù?rû   )r?   Úextrapolate)r    ry   r   r  r  r   r   r6   Ú*test_second_derivative_continuity_gh_11758ƒ  s6             ÿ          ÿz:TestCubicSpline.test_second_derivative_continuity_gh_11758c                 C   s`   t  dddg¡}t  dddg¡}t||dd�}|  |dd¡ t| d¡|ƒt  dddg¡ƒ d S )	NrÞ   g      @r  g      .@rû   r  r   g      HÀ)r    ry   r   r  r   rL   r  r   r   r6   Útest_three_pointsŒ  s
    z!TestCubicSpline.test_three_pointsc                 C   s¼   t jddddgtd�}t jddddgtd�}t||ƒ}|  |¡ t  ddd	d
g¡}t||ƒ}|  |¡ t||d dd�}|  |dd¡ t  ddddg¡}t||ddgd�}|  |dd¡ d S )Nr   r   r   r   )Zdtypeéûÿÿÿy      ð¿      ð?rä   y      ð?      ð¿y      à?      ø¿)r=   ©r   y               @r  r=   r  )r   y       @      à?)r   y      à?      ð¿)r    ry   Úintr   r  r  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   rk   )r*   g     ˆÃ@g‚vIhÂ%<=r  )r    r!   ZRandomStaterÈ   Úuniformr   r  )rW   Úrngr0   r2   rþ   r   r   r6   Útest_small_dx©  s
    
zTestCubicSpline.test_small_dxc              	   C   s®  t  ddddg¡}t  ddddg¡}t  ddddg¡}t  t jdddg¡}t  ddddg¡}t  t jdddg¡}dddg}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||	ƒ dddd	d
g}
|
D ]}ttt||d|dƒ �qt j||f }d}dddddg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 )Nr   r   r   r   y      ð?      ð?)rû   r>   ))r   r   )r   r�   )©r   r   )rä   rä   z
not-a-typor   T)r>   r  r>   rû   )r    ry   ÚnanÚassert_raisesÚ
ValueErrorr   ZnewaxisZc_)rW   r0   r2   ZxcZxnZxoZynZy3rÍ   rÎ   Zwrong_bcr?   r	  Zbc1Zbc2Zbc3r   r   r6   Útest_incorrect_inputs°  s@    
üz%TestCubicSpline.test_incorrect_inputsN)rú   rú   rß   )rX   rY   rZ   Ústaticmethodr  r  r
  r  r  r  r  r  r  r  r   r   r   r6   rù     s     ÿ;	rù   c                  C   sT   dddg} dddg}dddg}t | ||ƒ}t|| ƒ|dd� t|| dƒ|dd� d S )	Nr   r   rx   r   r   r¦   )rà   r   )r   r   )r0   r2   r4   r1   r   r   r6   Ú#test_CubicHermiteSpline_correctnessÙ  s    


r!  c                  C   sP   dddg} dddg}ddddg}t tt| ||ƒ ddtjg}t tt| ||ƒ d S )Nr   r   r   r   r8   r   )r  r  r   r    r  )r0   r2   r4   Zdydx_with_nanr   r   r6   Ú&test_CubicHermiteSpline_error_handlingâ  s    

r"  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    ry   r   r÷   r   rü   r)   r*   )r0   r2   Zdyre   rƒ   r   r   r6   Útest_roots_extrapolate_gh_11185ì  s    r#  c                   @   sº   e Zd Zej de d¡e d¡g¡ej dddddg¡ej d	d
ddg¡ej dee	g¡dd„ ƒƒƒƒZ
ej de d¡e d¡g¡ej d	d
ddg¡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   r   r   Úclsc           
      C   sÄ   t  d¡}t  d¡}||||d�}||ƒjdks4t‚||ƒj|j|jdd …  ksVt‚t  |d|¡}|||||d�}|jd |… |jf |j|d d …  }	||ƒjdks®t‚||ƒj|	ksÀt‚d S )Nr�   r   r  r   r   )r?   r   ©r    r™   r*   ÚAssertionErrorr)   Zmoveaxis)
rW   r%  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s0t‚||ƒj|j|jdd …  ksRt‚t  |d|¡}||||d�}|jd |… |jf |j|d d …  }||ƒjdks¨t‚||ƒj|ksºt‚d S )Nr�   r   r   r   r:   r&  )	rW   r%  r2   r   r0   r(  r)  r*  r+  r   r   r6   Útest_zero_size_2  s    


"(z#TestZeroSizeArrays.test_zero_size_2N)rX   rY   rZ   r­   ÚmarkZparametrizer    r(   r   r   r,  r   r   r-  r   r   r   r6   r$  ù  s   ÿ
ÿÿr$  )*rñ   ræ   Únumpyr    Znumpy.testingr   r   r   r   r   r   r­   r   r  Zscipy.interpolater	   r
   r   r   r   r   r   r   r   r   r   r   r7   r@   rF   rK   rc   rf   rg   r°   r´   rÆ   rù   r!  r"  r#  r$  r   r   r   r6   Ú<module>   s2    8ÿ
'
2 
f M	
