U
    GvfTv                     @   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rt jjd|  |}
| |||
fd	|i||	}n| ||fd	|i||	}|pd
|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   H/tmp/pip-unpacked-wheel-96ln3f52/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| qqqqd 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 Nr   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`  gffffffg닥ąg䑉g!p$ЀgV0޿gx*ZֿgDпg2]g H.g9C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[   Z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   iiri      &   -   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?guq@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rt|d d||d dS |d	krt| |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rt| |d dd||d nH|dkrt| |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rt| |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    Z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
 qqd 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dtypey            ?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     @gvIh%<=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 )NgMbP?gMb`?gBܻ>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st||j|	kst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st||j|kst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   Z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	
