o
    Ö­j¹<  ã                   @   sÈ   d dl Z d dlZd dlZd dlmZ d dlmZ d dlZd dl	m
Z
mZ d dlmZ d dlm  mZ d dlm  mZ d dlZd dlZejdk Zdd„ ZG d	d
„ d
ƒZG dd„ dƒZG dd„ dƒZdS )é    N)Úsuppress_warnings)Úraises)Úxp_assert_closeÚassert_almost_equal)Úcheck_free_memoryl        c                 C   s    t j t j t j t¡¡d| ¡S )NÚdata)ÚosÚpathÚjoinÚabspathÚdirnameÚ__file__)Úbasename© r   úb/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/interpolate/tests/test_interpnd.pyÚ	data_file   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ejjejjejjedd�dd„ ƒƒƒZdS )ÚTestLinearNDInterpolationc                 C   sH   t jg d¢t jd�}t j|jd t jd�}t ||¡|ƒ}t||ƒ d S )N©©r   r   )ç      à¿r   )r   ç      à?)r   r   )ç      Ð?ç333333Ó?©Údtyper   ©ÚnpÚarrayÚfloat64ÚarangeÚshapeÚinterpndÚLinearNDInterpolatorr   ©ÚselfÚxÚyÚyir   r   r   Útest_smoketest   s   
ÿz(TestLinearNDInterpolation.test_smoketestc                 C   s~   t jg d¢t jd�}t j|jd t jd�}t |d d …df |d d …df f|¡|d d …df |d d …df ƒ}t||ƒ d S )Nr   r   r   é   r   r#   r   r   r   Útest_smoketest_alternate#   s   
ÿFz2TestLinearNDInterpolation.test_smoketest_alternatec                 C   sT   t jg d¢t jd�}t j|jd t jd�}|d|  }t ||¡|ƒ}t||ƒ d S ©Nr   r   r   ù              @r   r#   r   r   r   Útest_complex_smoketest,   s   
ÿz0TestLinearNDInterpolation.test_complex_smoketestc                 C   sp   t jg d¢t jd�}t j|jd t jd�}|d|  }t |¡}t ||¡}||ƒ}t	||ƒ |j
|u s6J ‚d S r+   )r   r   r   r   r    ÚqhullÚDelaunayr!   r"   r   Útri)r$   r%   r&   r0   Úinterpolatorr'   r   r   r   Útest_tri_input6   s   
ÿ

z(TestLinearNDInterpolation.test_tri_inputc                    s¸   t jg d¢t jd�}t jg d¢t jd�‰ ‡ fdd„}t  t  ddd¡d d …d f t  ddd¡d d d …f ¡\}}| ¡ }| ¡ }t  ||g¡j ¡ }t 	|ˆ ¡|ƒ}t
||||ƒƒ d S )	N)r   ©r   r)   ©r)   r)   ©r)   r   r   ©g      ð?g       @g      Àg      @c           	         s¦   | | dk}| }| | }|| }| | }|| }d|  }ˆ d d| |  ˆ d |  ˆ d |  ||< ˆ d || d  ˆ d d|   ˆ d d|   ||< |S )Nr)   r   é   é   r   )	r%   r&   Út1Út2Úx1Úy1Úx2Úy2Úz©Úvaluesr   r   ÚipQ   s$   
ÿ
þÿþz1TestLinearNDInterpolation.test_square.<locals>.ipr   r)   é   ©r   r   r   Úbroadcast_arraysÚlinspaceÚravelÚTÚcopyr!   r"   r   )r$   ÚpointsrB   ÚxxÚyyÚxiÚzir   r@   r   Útest_squareC   s   	ÿz%TestLinearNDInterpolation.test_squarec                 C   sL   t jg d¢t jd�}t j|jd t jd�}tj||dd�|ƒ}t||ƒ d S )N©r   )éûÿÿÿrQ   )rQ   é   )rR   rR   )g      @r7   r   r   T©Úrescaler   r#   r   r   r   Útest_smoketest_rescalep   s   
ÿz0TestLinearNDInterpolation.test_smoketest_rescalec                 C   sº   t jg d¢t jd�}t jg d¢t jd�}t  t  ddd¡d d …d f t  ddd¡d d d …f ¡\}}| ¡ }| ¡ }t  ||g¡j ¡ }t 	||¡|ƒ}tj	||dd	�|ƒ}t
||ƒ d S )
N)r   )r   éd   )é
   rV   )rW   r   r   r6   r   rW   rC   rV   TrS   rD   )r$   rJ   rA   rK   rL   rM   rN   Úzi_rescaledr   r   r   Útest_square_rescaley   s   ÿÿÿz-TestLinearNDInterpolation.test_square_rescalec                 C   óv   t jg d¢t jd�}t j|jd t jd�}|d|  }t |¡}t |j	|¡|ƒ}tj|j	|dd�|ƒ}t
||ƒ d S ©NrP   r   r   r,   TrS   )r   r   r   r   r    r.   r/   r!   r"   rJ   r   ©r$   r%   r&   r0   r'   Ú
yi_rescaler   r   r   Útest_tripoints_input_rescale‹   s   
ÿ

ÿÿz6TestLinearNDInterpolation.test_tripoints_input_rescalec                 C   óŒ   t jg d¢t jd�}t j|jd t jd�}|d|  }t |¡}d}tjt	|d�� t
j||dd�|ƒ W d   ƒ d S 1 s?w   Y  d S ©	NrP   r   r   r,   zORescaling is not supported when passing a Delaunay triangulation as ``points``.)ÚmatchTrS   )r   r   r   r   r    r.   r/   Úpytestr   Ú
ValueErrorr!   r"   ©r$   r%   r&   r0   ra   r   r   r   Útest_tri_input_rescale˜   ó   
ÿ
"ÿz0TestLinearNDInterpolation.test_tri_input_rescalec                 C   sl   t j d¡ t j dd¡}t j d¡dt j d¡  }t ||¡}t t |¡¡}t	|ddƒ|ddƒƒ d S ©NéÒ  é   r8   y              ð?r   )
r   ÚrandomÚseedÚrandr!   r"   ÚpickleÚloadsÚdumpsr   )r$   r%   r&   rB   Úip2r   r   r   Útest_pickle¥   s   z%TestLinearNDInterpolation.test_picklezit fails on 32-bit)Úreasonc                 C   s0  t dƒ t ddd¡}t ddd¡}t ||¡\}}dd„ }t | ¡ | ¡ f¡j}||  ¡ }t ||¡}t	j
||tddƒtddƒfd�}	t	j
||tddƒtddƒfd�}
t	j
||tddƒtddƒfd�}t	j
||tddƒtddƒfd�}|	 ¡  |
 ¡  | ¡  | ¡  |	 ¡  |
 ¡  | ¡  | ¡  d S )	Ni'  r   ih  rW   c                 S   s"   t j||f \}}| ||fƒ}|S ©N)r   Úmgrid)r1   Ú
slice_rowsÚ
slice_colsÚgrid_xÚgrid_yÚresr   r   r   Ú	do_interp¼   s   z;TestLinearNDInterpolation.test_threading.<locals>.do_interpi4  )ÚtargetÚargs)r   r   r   ÚmeshgridÚvstackrG   rH   r!   r"   Ú	threadingÚThreadÚsliceÚstartr
   )r$   Úr_ticksÚ	phi_ticksÚr_gridÚphi_gridrz   rJ   rA   r1   Úworker_thread_1Úworker_thread_2Úworker_thread_3Úworker_thread_4r   r   r   Útest_threading°   s@   þþþþz(TestLinearNDInterpolation.test_threadingN)Ú__name__Ú
__module__Ú__qualname__r(   r*   r-   r2   rO   rU   rY   r^   re   rq   rb   ÚmarkÚslowÚthread_unsafeÚskipifÚ	_IS_32BITr‹   r   r   r   r   r      s    		
-	r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestEstimateGradients2DGlobalc           	      C   sÒ   t jg d¢td�}t |¡}dd„ dfdd„ dfdd„ d	fd
d„ dfg}t|ƒD ]>\}\}}||d d …df |d d …df ƒ}tj||dd�}|jdksNJ ‚t	|t  |¡d d d …f d|  ddd| d� q(d S )N)r   )r   r8   r5   )r)   r8   ©r   g      è?©g333333ã?gš™™™™™é?r   c                 S   ó   d|  d S ©Nr   r)   r   ©r%   r&   r   r   r   Ú<lambda>æ   ó    z>TestEstimateGradients2DGlobal.test_smoketest.<locals>.<lambda>r   c                 S   ó   d|  S ©Nr   r   r™   r   r   r   rš   ç   ó    r5   c                 S   ó   d| S ©Néþÿÿÿr   r™   r   r   r   rš   è   rž   r3   c                 S   ó   dd|   d|  S ©Nr7   çÍÌÌÌÌL,@r   r™   r   r   r   rš   é   ó    )r7   r¤   r   r)   ç�íµ ÷Æ°>)Útol)é   r8   gñhãˆµøä>zitem %d)ÚrtolÚatolÚerr_msg)
r   r   Úfloatr.   r/   Ú	enumerater!   Úestimate_gradients_2d_globalr    r   )	r$   r%   r0   ÚfuncsÚjÚfuncÚgradr?   Údzr   r   r   r(   Þ   s"   
ÿ




ü" 
ÿûz,TestEstimateGradients2DGlobal.test_smoketestc                 C   st   t  tdƒ¡}t j |jd ¡}t |¡}tƒ �}| 	t
jd¡ t
j||dd� W d   ƒ d S 1 s3w   Y  d S )Nzestimate_gradients_hang.npyr   z$Gradient estimation did not converger)   )Úmaxiter)r   Úloadr   rj   rl   r    r.   r/   r   Úfilterr!   ÚGradientEstimationWarningr®   )r$   rJ   rA   r0   Úsupr   r   r   Útest_regression_2359ô   s   
ÿ"ýz2TestEstimateGradients2DGlobal.test_regression_2359N)rŒ   r�   rŽ   r(   r¹   r   r   r   r   r”   Ý   s    r”   c                   @   sn   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
 d¡dd„ ƒZdd„ Zdd„ Zdd„ ZdS )ÚTestCloughTocher2DInterpolatorNr¦   Fc                 K   sN  t j d¡}|d u rt jg d¢td�}|s.tj|||d d …df |d d …df ƒd|d�}n&tj|d d …df |d d …df f||d d …df |d d …df ƒd|d�}| dd	¡}	|sa||	ƒ}
n||	d d …df |	d d …df ƒ}
||	d d …df |	d d …df ƒ}zt|
|fi |¤Ž W d S  t	y¦   t
d
t|
| ƒƒ t
d|jƒ ‚ w )Nrh   )r   r3   r5   r4   r•   r–   )r   gš™™™™™É?r   r   r)   r¦   )r§   rT   é2   r8   z_check_accuracy: abs(a-b):zip.grad:)r   rj   ÚRandomStater   r¬   r!   ÚCloughTocher2DInterpolatorrl   r   ÚAssertionErrorÚprintÚabsr²   )r$   r±   r%   r§   Ú	alternaterT   ÚkwÚrngrB   ÚpÚaÚbr   r   r   Ú_check_accuracy  s2   
ý&ÿ" þ
""ýz.TestCloughTocher2DInterpolator._check_accuracyc              
   C   sš   dd„ dd„ dd„ dd„ g}t |ƒD ]8\}}| j|dddd| d	� | j|dddd
d| d� | j|dddd| d
d� | j|dddd
d
d| d� qd S )Nc                 S   r—   r˜   r   r™   r   r   r   rš   (  r›   zFTestCloughTocher2DInterpolator.test_linear_smoketest.<locals>.<lambda>c                 S   rœ   r�   r   r™   r   r   r   rš   )  rž   c                 S   rŸ   r    r   r™   r   r   r   rš   *  rž   c                 S   r¢   r£   r   r™   r   r   r   rš   +  r¥   g‚vIhÂ%<=gH¯¼šò×z>úFunction %d©r§   rª   r©   r«   TzFunction (alternate) %d)r§   rª   r©   rÁ   r«   zFunction (rescaled) %d©r§   rª   r©   r«   rT   z!Function (alternate, rescaled) %d)r§   rª   r©   rÁ   rT   r«   ©r­   rÇ   ©r$   r¯   r°   r±   r   r   r   Útest_linear_smoketest%  s*   üÿþÿþ÷z4TestCloughTocher2DInterpolator.test_linear_smoketestc              	   C   sd   dd„ dd„ dd„ dd„ g}t |ƒD ]\}}| j|dddd	| d
� | j|dddd	| dd� qd S )Nc                 S   ó   | d S ©Nr8   r   r™   r   r   r   rš   >  rž   zITestCloughTocher2DInterpolator.test_quadratic_smoketest.<locals>.<lambda>c                 S   ó   |d S rÏ   r   r™   r   r   r   rš   ?  rž   c                 S   ó   | d |d  S rÏ   r   r™   r   r   r   rš   @  ó    c                 S   ó   | | S rs   r   r™   r   r   r   rš   A  rž   ç•Ö&è.>g)\�Âõ(Ì?r   rÈ   rÉ   TrÊ   rË   rÌ   r   r   r   Útest_quadratic_smoketest;  s   üÿÿýz7TestCloughTocher2DInterpolator.test_quadratic_smoketestc                 C   s^   t jg d¢t jd�}t j|jd t jd�}|d|  }t |¡}t ||¡|ƒ}t	||ƒ d S r+   )
r   r   r   r   r    r.   r/   r!   r½   r   )r$   r%   r&   r0   r'   r   r   r   r2   J  s   
ÿ
z-TestCloughTocher2DInterpolator.test_tri_inputc                 C   r_   r`   )r   r   r   r   r    r.   r/   rb   r   rc   r!   r½   rd   r   r   r   re   U  rf   z5TestCloughTocher2DInterpolator.test_tri_input_rescalec                 C   rZ   r[   )r   r   r   r   r    r.   r/   r!   r½   rJ   r   r\   r   r   r   r^   b  s   
ÿ
z;TestCloughTocher2DInterpolator.test_tripoints_input_rescalerR   c              
   C   sž   dd„ dd„ dd„ dd„ dd„ g}t j d¡}t jt jg d¢td	�| d
d¡f }t|ƒD ]\}}| j||dddd| d� | j||dddd| dd� q-d S )Nc                 S   rÎ   rÏ   r   r™   r   r   r   rš   r  rž   z;TestCloughTocher2DInterpolator.test_dense.<locals>.<lambda>c                 S   rÐ   rÏ   r   r™   r   r   r   rš   s  rž   c                 S   rÑ   rÏ   r   r™   r   r   r   rš   t  rÒ   c                 S   rÓ   rs   r   r™   r   r   r   rš   u  rž   c                 S   s(   t  dt j |  ¡t  dt j | ¡ S rÏ   )r   ÚcosÚpiÚsinr™   r   r   r   rš   v  s   ( iá  )r   r3   r5   r4   r   i„  r8   rÔ   g{®Gázt?g{®Gáz„?rÈ   )r%   r§   rª   r©   r«   T)r%   r§   rª   r©   r«   rT   )	r   rj   r¼   Úr_r   r¬   rl   r­   rÇ   )r$   r¯   rÃ   Úgridr°   r±   r   r   r   Ú
test_densen  s$   û
ÿÿÿýz)TestCloughTocher2DInterpolator.test_densec                 C   s.   t j dd¡}t j d¡}tttj||ƒ d S )Nri   r7   )r   rj   ÚrandnÚassert_raisesrc   r!   r½   )r$   r%   r&   r   r   r   Útest_wrong_ndimƒ  s   z.TestCloughTocher2DInterpolator.test_wrong_ndimc                 C   sf   t j d¡}| dd¡}| d¡d| d¡  }t ||¡}t t |¡¡}t	|ddƒ|ddƒƒ d S rg   )
r   rj   r¼   rl   r!   r½   rm   rn   ro   r   )r$   rÃ   r%   r&   rB   rp   r   r   r   rq   ˆ  s   z*TestCloughTocher2DInterpolator.test_picklec                 C   sR  t  dddt  d¡d fg¡}t  g d¢¡}t ||¡}d|jd< d	}t  dt  |¡ dt  |¡ g¡}t  dt  t jd | ¡ dt  t jd | ¡ g¡}||ƒ}||ƒ}t	||ƒ t j
 d
¡}	|	 dd¡}
|	 d¡}|
 |j¡j|d d d …f  }|
 |¡| }|
 |¡| }t ||¡}d|jd< ||ƒ}||ƒ}t	||ƒ t	||ƒ d S )Nr   r5   r   r7   r8   )r)   r   r   r   .r   r)   )r   r   Úsqrtr!   r½   r²   rÖ   rØ   r×   r   rj   r¼   rÜ   ÚdotrH   )r$   rJ   rA   rB   ÚalphaÚp1Úp2Úv1Úv2rÃ   ÚArÆ   Úw1Úw2r   r   r   Útest_boundary_tri_symmetry“  s,   
"6



z9TestCloughTocher2DInterpolator.test_boundary_tri_symmetry)Nr¦   FF)rŒ   r�   rŽ   rÇ   rÍ   rÕ   r2   re   r^   rb   r�   Ú	fail_slowrÛ   rÞ   rq   ré   r   r   r   r   rº     s    
ÿ!

rº   )r   ÚsysÚnumpyr   Únumpy.testingr   rb   r   rÝ   Úscipy._lib._array_apir   r   Úscipy._lib._testutilsr   Úscipy.interpolate._interpndÚinterpolateÚ	_interpndr!   Úscipy.spatial._qhullÚspatialÚ_qhullr.   rm   r   Úmaxsizer“   r   r   r”   rº   r   r   r   r   Ú<module>   s$    
 E%