o
    ?Hh<                     @   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   e/home/air/sanwanet/gpt-api/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 Nr   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   gh㈵>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   gvIh%<=gHz>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{Gzt?g{Gz?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%