o
    Ö­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 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   úa/var/www/html/CropPilot/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`ê  )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   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  iíÿÿÿr€   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rÄt|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�rßt| |d dƒt 	| |d dƒ¡||d� dS |dk�rÿt| |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   )ç      HÀr“  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     ˆÃ@g‚vIhÂ%<=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 )Ngü©ñÒMbP?gü©ñÒMb`?g˜‡�B…Ü»>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  `	
