o
    ?Hh                     @   s.  d dl Z d dlZd dlZd dl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lmZ 	 	d#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)xp_assert_equalxp_assert_closeassert_array_almost_equalassert_almost_equal)raises)KroghInterpolatorkrogh_interpolateBarycentricInterpolatorbarycentric_interpolateapproximate_taylor_polynomialCubicHermiteSplinepchipPchipInterpolatorpchip_interpolateAkima1DInterpolatorCubicSplinemake_interp_spline)_run_concurrent_barrierc                 C   s  |d u ri }t jd}g d}ttdt|d }||t|d  d |jd|  |}	t 	|}
| t
u rS|jd|  |}| ||	|fd|i||
}n| ||	fd|i||
}|pcd|	jd |  | |	j|d  dd   }|j|ksJ |r|	jdkr| 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 d S d S )	N  )r               r   r      axis r   )nprandomRandomStatelistrangeleninsertrand	transposezerosr   shapesizeslicendimreshapebroadcast_arraysr   )interpolator_clsx_shapey_shapederiv_shaper   
extra_argsrngxsyxidydxyitarget_shapebs_shapeyvr   r   d/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/scipy/interpolate/tests/test_polyint.pycheck_shape   sJ   
0
r?   )r   r   r   )r   r      c                  C   s   dd } t ttttt| fD ]8}tD ]3}tD ].}tt| t|D ]!}|tkr0t	|||d | q!dD ]}d|i}t	|||d || q2q!qqqd S )Nc                 S   s   t | ||dS Nr   )r   r5   r7   r   r   r   r>   
spl_interpB      ztest_shapes.<locals>.spl_interp)naturalclampedbc_type)
r   r	   r   r   r   r   SHAPESr#   r$   r?   )rE   ips1s2r   bcextrar   r   r>   test_shapes@   s"   rP   c               
      s^   t tfD ]( d fdd	} tD ]}tD ]}tt| t|D ]
}t| ||d| qqqqd S )Nr   c                    s    | ||j S NderivativesrD   rK   r   r>   interpolator_derivsS   rF   z/test_derivs_shapes.<locals>.interpolator_derivsr   r@   )r   r	   rJ   r#   r$   r?   )rU   rL   rM   r   r   rT   r>   test_derivs_shapesQ   s   rV   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 ]!}t D ]}t D ]}tt| t|D ]
}t|||d| qdqXqTqPd S )Nr   c                 S      t | ||jS rQ   )r   
derivativerD   r   r   r>   krogh_deriv]   rF   z&test_deriv_shapes.<locals>.krogh_derivc                 S   rW   rQ   )r	   rX   rD   r   r   r>   
bary_deriv`   rF   z%test_deriv_shapes.<locals>.bary_derivc                 S      t | || S rQ   r   rX   rD   r   r   r>   pchip_derivc      z&test_deriv_shapes.<locals>.pchip_derivc                 S      t | ||dS Nr   r\   rD   r   r   r>   pchip_deriv2f      z'test_deriv_shapes.<locals>.pchip_deriv2c                 S   r[   rQ   r   antiderivativerD   r   r   r>   pchip_antiderivi   r^   z*test_deriv_shapes.<locals>.pchip_antiderivc                 S   r_   r`   rc   rD   r   r   r>   pchip_antideriv2l   rb   z+test_deriv_shapes.<locals>.pchip_antideriv2c                 S   s   G dd dt }|| ||S )Nc                   @      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__)selfr5   r   r   r>   rh   q   rF   zBtest_deriv_shapes.<locals>.pchip_deriv_inplace.<locals>.P.__call__N)__name__
__module____qualname__rh   r   r   r   r>   Pp   s    rm   )r   )r5   r7   r   rm   r   r   r>   pchip_deriv_inplaceo   s   z.test_deriv_shapes.<locals>.pchip_deriv_inplacec                 S   r[   rQ   )r   rX   rD   r   r   r>   akima_derivv   r^   z&test_deriv_shapes.<locals>.akima_derivc                 S   r[   rQ   )r   rd   rD   r   r   r>   akima_antiderivy   r^   z*test_deriv_shapes.<locals>.akima_antiderivc                 S   r[   rQ   )r   rX   rD   r   r   r>   cspline_deriv|   r^   z(test_deriv_shapes.<locals>.cspline_derivc                 S   r[   rQ   )r   rd   rD   r   r   r>   cspline_antideriv   r^   z,test_deriv_shapes.<locals>.cspline_antiderivc                 S      t | ||d S rB   )r   rX   rD   r   r   r>   
bspl_deriv   rb   z%test_deriv_shapes.<locals>.bspl_derivc                 S   rs   rB   )r   rd   rD   r   r   r>   bspl_antideriv   rb   z)test_deriv_shapes.<locals>.bspl_antiderivr   r@   )rJ   r#   r$   r?   )rY   rZ   r]   ra   re   rf   rn   ro   rp   rq   rr   rt   ru   rK   rL   rM   r   r   r   r>   test_deriv_shapes\   s2   













rv   c                  C   s   g d} g d}t ttfD ]}|| |}t|| t| qg d}t| ||}t|| t| t|| dt| d S )Nr   r   r   r   )r   r                 ?r   )r   y             r   y              @r   )r   r	   r   r   r   asarrayr   )r5   r7   rK   pr9   r   r   r>   test_complex   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ejjd)d* Zejjd+d, Zd-S ).	TestKroghc                 C   D   t jg d| _t ddd| _t ddd| _| | j| _d S N)rA   r   r   r   r   d   rA   r   
polynomial
Polynomial	true_polylinspacetest_xsxsysri   r   r   r>   setup_method      zTestKrogh.setup_methodc                 C   *   t | j| j}t| | j|| j d S rQ   r   r   r   r   r   r   ri   rm   r   r   r>   test_lagrange      zTestKrogh.test_lagrangec                 C   sN   t | j| j}t| d|ddd t| td|tddd d S )N   Fcheck_0d)r   r   r   r   r   r   arrayr   r   r   r>   test_scalar   s   (zTestKrogh.test_scalarc                 C   N   t | j| j}|| j}t|jd D ]}t| j	|| j||  qd S Nr   )
r   r   r   rS   r   r#   r)   r   r   derivri   rm   Dir   r   r>   test_derivatives   s   zTestKrogh.test_derivativesc                 C   sZ   t | j| j}|| jt| jd }t|jd D ]}t| j	
|| j||  qd S )Nr   r   )r   r   r   rS   r   r$   r#   r)   r   r   r   r   r   r   r>   test_low_derivatives   s   zTestKrogh.test_low_derivativesc                 C   J   t | j| j}d}|| j|}t|D ]}t|| j|||  qd S N
   )r   r   r   rS   r   r#   r   rX   ri   rm   mrr   r   r   r>   test_derivative      zTestKrogh.test_derivativec                 C   R   t | j| j}tt| jdt| j D ]}t|| j|t	t| j qd S r`   )
r   r   r   r#   r$   r   rX   r   r   r(   ri   rm   r   r   r   r>   test_high_derivative      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 ]#}t|| tj||| j||| j||| jfdd q;d S Nr   rA   r   r      r   r   r   rC   r   )r   r   r   r   stackr   r   rS   r   r#   r)   r   r   ri   poly1poly2poly3r   rm   r   r   r   r   r>   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 ]&}t	|
| j|tj||| j||| j||| jfdd q3d S r   )r   r   r   r   r   r   r   r#   nr   rX   r   r   ri   r   r   r   r   rm   r   r   r   r>   test_ndim_derivative   s   &zTestKrogh.test_ndim_derivativec                 C   r   rQ   r   r   r   r   r>   test_hermite   r   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 rQ   )r   .0r   )r   r   r   r>   
<listcomp>      " z)TestKrogh.test_vector.<locals>.<listcomp>r   r   r   c                       g | ]}| qS r   r   r   rz   r   r   r>   r          c                    s   g | ]}|  qS r   rR   r   r   r   r>   r      s    )r   r   r   )r   r   r   r#   r)   r   r   ry   TrS   r'   ri   rm   Pir   )r   r   r   r>   test_vector   s   

zTestKrogh.test_vectorc                 C   s&   t | j| j}t|g tg  d S rQ   )r   r   r   r   r   ry   r   r   r   r>   
test_empty   s   zTestKrogh.test_emptyc                 C   v   t | j| j}t|ddksJ t|tddks J t|dgdks,J t|ddgdks9J d S Nr   r   r   r   )r   )r   r   r   r   r)   r   r   r   r   r>   test_shapes_scalarvalue   
   z!TestKrogh.test_shapes_scalarvaluec                 C      t | j| j}|j}t|d|fksJ t|td|fks'J t|dg|dfks6J t|ddg|dfksFJ d S Nr   r   r   )r   r   r   r   r   r)   rS   r   ri   rm   r   r   r   r>   "test_shapes_scalarvalue_derivative      $z,TestKrogh.test_shapes_scalarvalue_derivativec                 C   h   t | jt| jtd}t|ddksJ t|dgdks%J t|ddgdks2J d S Nr   r   )r   )r   r   r   )r   r   )r   r   r   outerr   aranger)   r   r   r   r>   test_shapes_vectorvalue
     z!TestKrogh.test_shapes_vectorvaluec                 C   d   t | jt| jdg}t|ddksJ t|dgdks#J t|ddgdks0J d S Nr   r   r   )r   r   )r   r   )r   r   r   r   r   r)   r   r   r   r>   test_shapes_1d_vectorvalue     z$TestKrogh.test_shapes_1d_vectorvaluec                 C      t | jt| jtd}|j}t|d|dfksJ t|dg|ddfks/J t|ddg|ddfks@J d S Nr   r   r   r   )	r   r   r   r   r   r   r   r)   rS   r   r   r   r>   "test_shapes_vectorvalue_derivative  
    &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   derr   r   )r   r   r   r   r   r   rX   rS   )ri   rm   kir   r   r>   test_wrapper  s   zTestKrogh.test_wrapperc                 C   sP   g d}t g d}t||}tt||| ||d t |dd d S )N)r      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   r   r   r   absrX   
zeros_like)ri   r5   
offset_cdffr   r   r>   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   rx   r   r   rx   r   rx   V瞯<r   )r   r   r   rS   realimagr   )ri   r5   r7   funccmplxcmplx2r   r   r>   test_derivatives_complex3  s   

z"TestKrogh.test_derivatives_complexc                 C   sJ   t jtdd ttdtd W d    d S 1 sw   Y  d S )Nz40 degrees provided,match(   )pytestwarnsUserWarningr   r   r   onesr   r   r   r>   test_high_degree_warning=  s   "z"TestKrogh.test_high_degree_warningc                    *   t  j j} fdd}td|| d S )Nc                       | j  d S rQ   r   _interpr   r   r>   	worker_fnF  rF   z-TestKrogh.test_concurrency.<locals>.worker_fnr   )r   r   r   r   ri   rm   r  r   r   r>   test_concurrencyB     zTestKrogh.test_concurrencyN)rj   rk   rl   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   markthread_unsafer   r  r   r   r   r>   r|      s2    	

r|   c                   @   rg   )
TestTaylorc                 C   sP   d}t tjd|dd}t|d D ]}t|dd | }qt|dd d S )NrA   r   r      )r   r   expr#   r   r   )ri   degreerz   r   r   r   r>   test_exponentialM  s   
zTestTaylor.test_exponentialN)rj   rk   rl   r  r   r   r   r>   r  L  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ejjd+d, Zejjd-d. Zd/S )0TestBarycentricc                 C   r}   r~   r   r   r   r   r>   r   W  r   zTestBarycentric.setup_methodc                 C   s.   t | j| jdd}t|| j| | j d S )Nr   )random_state)r	   r   r   r   r   r   r   r   r   r>   r   ]  s   zTestBarycentric.test_lagrangec                 C   sR   t | j| jdd}t|d| ddd t|td| tddd d S )Nr   r4   r   Fr   )r	   r   r   r   r   r   r   r   r   r   r>   r   b  s   (zTestBarycentric.test_scalarc                 C   r   r   )
r	   r   r   rS   r   r#   r)   r   r   r   r   r   r   r>   r   g  s
   z TestBarycentric.test_derivativesc                 C   s^   t | j| j}|| jt| jd }t|jd D ]}t| j	
|| j|| dd qd S )Nr   r   -q=r   )r	   r   r   rS   r   r$   r#   r)   r   r   r   r   r   r   r>   r   m  s   z$TestBarycentric.test_low_derivativesc                 C   r   r   )r	   r   r   rS   r   r#   r   rX   r   r   r   r>   r   u  r   zTestBarycentric.test_derivativec                 C   r   )NrA   )
r	   r   r   r#   r$   r   rX   r   r   r(   r   r   r   r>   r   |  r   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 ]%}t|| tj||| j||| j||| jfdddd q;d S Nr   r   r   rC   r   r  r   )r   r   r   r   r   r   r	   rS   r   r#   r)   r   r   r   r   r   r>   r     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 ](}t	|
| j|tj||| j||| j||| jfdddd q3d S r  )r   r   r   r   r   r   r	   r#   r   r   rX   r   r   r   r   r   r>   r     s    &z$TestBarycentric.test_ndim_derivativec                 C   s2   t | j}|| j t| | j|| j d S rQ   )r	   r   set_yir   r   r   r   r   r   r   r>   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	   r   r   add_xir   r   r   r   r   r   r>   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 rQ   r   r   )BIr   r   r   r>   r     r   z/TestBarycentric.test_vector.<locals>.<listcomp>r   r   r   c                    r   r   r   r   r   r   r>   r     r   )	r   r   r	   r#   r)   r   r   ry   r   r   r   )r  r   r   r   r>   r     s   
 zTestBarycentric.test_vectorc                 C   r   r   )r	   r   r   r   r)   r   r   r   r   r>   r     r   z'TestBarycentric.test_shapes_scalarvaluec                 C   r   r   )r	   r   r   r   r   r)   rS   r   r   r   r   r>   r     r   z2TestBarycentric.test_shapes_scalarvalue_derivativec                 C   r   r   )r	   r   r   r   r   r   r)   r   r   r   r>   r     r   z'TestBarycentric.test_shapes_vectorvaluec                 C   r   r   )r	   r   r   r   r   r)   r   r   r   r>   r     r   z*TestBarycentric.test_shapes_1d_vectorvaluec                 C   r   r   )	r	   r   r   r   r   r   r   r)   rS   r   r   r   r>   r     r   z2TestBarycentric.test_shapes_vectorvalue_derivativec              	   C   s   t | j| jdd}t}t|| j|| j| j| jdd t|| jd|| j| j| jddd t|| jd|| j| j| jddgdd d S )Nr   r  r   )r   r4   r   )r	   r   r   r
   r   r   rX   rS   )ri   rm   bir   r   r>   r     s   "zTestBarycentric.test_wrapperc                 C   s<   dt dd }t dd}t||d}t|t d d S )Ni  r      g     @g      #@)r   r   r
   r   ry   )ri   r5   r7   valuer   r   r>   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   astypefloat64cospir	   wir   )ri   r   jr5   wrm   factorr   r   r>   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w   Y  t||j  d S )Nr   r   r   raise)divide)r	   r   errstater8   r   r:   ravel)ri   rm   r:   r   r   r>   test_warning  s
   zTestBarycentric.test_warningc                 C   sZ   t g d}t g d}tjtdd t|| W d    d S 1 s&w   Y  d S )N)皙?r  ?r  rw   z)Interpolation points xi must be distinct.r   )r   r   r   r   
ValueErrorr	   )ri   xisr   r   r   r>   test_repeated_node
  s   "z"TestBarycentric.test_repeated_nodec                    r   )Nc                    r   rQ   r   r   r   r   r>   r    rF   z3TestBarycentric.test_concurrency.<locals>.worker_fnr   )r	   r   r   r   r  r   r   r>   r    r  z TestBarycentric.test_concurrencyN)rj   rk   rl   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  V  s4    
	
	r  c                   @   sf   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd Ze	j
jdd Zdd Zdd Zdd ZdS )	TestPCHIP   c                 C   s6   t jd}t ||}||}t||||fS )Nr   )r   r    r!   sortr   )ri   nptsr4   r8   r:   r   r   r>   _make_random  s   
zTestPCHIP._make_randomc                 C   s   |   \}}}tt|d D ]<}|| ||d  }}|| ||d  }}||kr0||}}t||d}	||	}
||
d k|
|d k@  sKJ qd S )Nr   r   r   r2  r#   r$   r   r   allri   rz   r8   r:   r   x1x2y1y2xpypr   r   r>   test_overshoot%  s   
"zTestPCHIP.test_overshootc                 C   s   |   \}}}tt|d D ]9}|| ||d  }}|| ||d  }}t||d}	||	}
|| |
dd  |
d d   dk sHJ qd S )Nr   r   r   r3  r5  r   r   r>   test_monotone1  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   r   )
rD  ir   r      &   -   5   7   r   r   r         ?+=)r   rtol)r   r   r   r   r   )ri   dataxxcurvedata1curve1r   r   r>   	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
?rL  r   )r   loadtxtioStringIOr   r   )ri   dataStrrM  pch	resultStrresultr   r   r>   test_nagG  s   "0zTestPCHIP.test_nagc                 C   sp   t g d}t g d}t g d}t||t||fD ]}|d |d fD ]}||ddks4J q)qd S )N)rS  r)  g      ?gffffff?)皙uq@g     @@     @@     @)r]  r_  g     p@r^  r   r   r   )r   r   r   )ri   r5   r8  r9  pptr   r   r>   test_endslopesj  s   zTestPCHIP.test_endslopesc                 C   sv   t d}t |}t  td t||}W d    n1 s#w   Y  t ddd}t||dks9J d S )Nr   errorr   	   e   rS  )	r   r   r   warningscatch_warningsfilterwarningsr   r   r4  )ri   r5   r7   rY  rN  r   r   r>   test_all_zerost  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   r   r   r   )ri   r5   rz   r   r   r>   test_two_points  s   zTestPCHIP.test_two_pointsc              	   C   s   t tg dg ddgddtdg t tg dg ddgddtdg t ttg dg ddgddgdtdgdgg d S )	Nr   r   r   )r   rA   r   r  r   r   rJ  r   g      @)r   r   r   ry   r   r   r   r>   test_pchip_interpolate  s   

"z TestPCHIP.test_pchip_interpolatec                 C   s0   t ddgddg}| }t|tdg d S )Nr   r   r   r  )r   rootsr   r   ry   )ri   rz   r   r   r   r>   
test_roots  s   zTestPCHIP.test_rootsN)r/  )rj   rk   rl   r2  r<  r=  rR  r\  rb  r   r  r  ri  rj  rl  rn  r   r   r   r>   r.    s    

#

	r.  c                   @   sn   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-knotrK  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 t	|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r<|jdkr/| |d | |d  |d  }t
|}t| |d d|||d nWt|d
 |d ||d nJ|dkrWt| |d dt	| |d d||d n/|dkrrt| |d dt	| |d d||d n|\}	}
t| |d |	t
|
||d |dkr|jdkr| |d | |d  |d  }t
|}t| |d d|||d dS t|d |d ||d dS |dkrt| |d dt	| |d d||d dS |dkrt| |d dt	| |d dd| d| d dS |\}	}
t| |d |	t
|
||d dS )zVCheck that spline coefficients satisfy the continuity and boundary
        conditions.r   r   r   Nr   r   rT  rp  periodic)r   r   )r   r   rH   rG   )r   r   )r   r   )r5   cr   diffr-   r)   r,   r   r*   r   ry   )Sbc_startbc_endtolr5   rr  dxdxislopeorderr  r   r   r>   check_correctness  s|   
">*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}	| |	|| q-|D ]}
|D ]}t||||
|fd}	| j|	|
|d	d
 qEqAd S )Nr   r   rp  rG   rH   r   r   r   rI   g+=rw  )r"   r)   r   emptyfillr   r|  )ri   r5   r7   r   r2   first_derivsecond_derivbc_allrN   rt  ru  rv  r   r   r>   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      @rd  )r   g      r   r   g      @r   r   r  r   r   r   r   )r   r   r*   r  r  )ri   r5   r7   r   Yr   r   r>   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   rA   r   r   rq  rI   r   rA   r}  )r   r   r  r  r   r|  r  )ri   r   r5   r7   rt  r  r   r   r>   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   rq  r  r   r  )decimal)r   r   r  r  r   r   ri   r5   r7   rt  r   r   r>   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*@)r  g      ?g?r  r  g@g333333@g333333@gffffff @r        @gffffff@r  g333333?gffffff?r*  gffffff?g333333?r  g?r  rq  )rI   extrapolate)r   r   r   r|  r  r   r   r>   *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)rJ  g      @r  )rJ  g      .@rJ  rq  r  r   )      Hr  r  )r   r   r   r|  r   rX   r  r   r   r>   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)rS  rJ  r  rS  rJ  rq  r  r   r   r   rA   )r   r   r   r|  r   r   )ri   r5   r7   rt  S0S1qr   r   r>   #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   )dtype)r   r   r   r   )y            ?rS  y      ?      y      ?      r   )rG   r   y               @r  rG   r  )r   y       @      ?)r   y      ?      )r   r   intr   r|  r  r   r   r>   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   r   )r*   g     @gvIh%<=r~  )r   r    r!   r0  uniformr   r|  )ri   r4   r5   r7   rt  r   r   r>   test_small_dxM  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 qxt 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 )Nrw   )y      ?      ?r   r   r   r   r   r   )r   r   r   r   rk  r   ))rq  rH   ))r   r   )r   r   )r   r   )rS  rS  z
not-a-typor   T)rH   r  rH   )r   r   r   rq  )r   r   nanassert_raisesr+  r   newaxisc_)ri   r5   r7   xcxnxoyny3r6  r8  wrong_bcrI   r  bc1bc2bc3r   r   r>   test_incorrect_inputsT  s6   z%TestCubicSpline.test_incorrect_inputsN)rp  rp  rK  )rj   rk   rl   staticmethodr|  r  r  r  r  r  r  r  r  r  r  r   r   r   r>   ro    s    A	ro  c                  C   sV   g d} g d}g d}t | ||}t|| |dddd t|| d|dddd d S )N)r   r   r   )r   r   r   )r   r   r   Fr   )r?   check_dtyperL  r   )r   r   )r5   r7   r9   r6   r   r   r>   #test_CubicHermiteSpline_correctness}  s   r  c                  C   sH   g d} g d}g d}t tt| || ddtjg}t tt| || d S )Nrk  )r   r   rA   )r   r   r   r   r   r   )r  r+  r   r   r  )r5   r7   r9   dydx_with_nanr   r   r>   &test_CubicHermiteSpline_error_handling  s   r  c                  C   sh   t ddg} t ddg}t ddg}t| ||}|jdd}|jjd	 d	ks+J |jd
ks2J d S )NgMbP?gMb`?gBܻ>gdJ>g/"g%"T)r  r   r   )r   r   r   rm  rr  r)   r*   )r5   r7   dyrz   r   r   r   r>   test_roots_extrapolate_gh_11185  s   r  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 )TestZeroSizeArraysr7   )r   r   rA   )r   rA   r   rI   )rp  rq  rG   rH   r   r   clsc           
      C   s   t d}t d}||||d}||jdksJ ||j|j|jdd   ks+J t |d|}|||||d}|jd | |jf |j|d d   }	||jdksWJ ||j|	ks`J d S )Nr   r   r  r   r   )rI   r   r   r   r*   r)   moveaxis)
ri   r  r7   rI   r   r5   xvalobjytshr   r   r>   test_zero_size  s   

"(z!TestZeroSizeArrays.test_zero_sizec           	      C   s   t d}t d}|||}||jdksJ ||j|j|jdd   ks)J t |d|}||||d}|jd | |jf |j|d d   }||jdksTJ ||j|ks]J d S )Nr   r   r   r   rC   r  )	ri   r  r7   r   r5   r  r  r  r  r   r   r>   test_zero_size_2  s   


"(z#TestZeroSizeArrays.test_zero_size_2N)rj   rk   rl   r   r  parametrizer   r(   r   r   r  r   r   r  r   r   r   r>   r    s     r  )Nr   N)*rf  rV  numpyr   scipy._lib._array_apir   r   r   r   r   r   r  scipy.interpolater   r   r	   r
   r   r   r   r   r   r   r   r   scipy._lib._testutilsr   r?   rJ   rP   rV   rv   r{   r|   r  r  r.  ro  r  r  r  r  r   r   r   r>   <module>   s:    8
)5 .
 I  `	
