U
    Gvf;5                     @   s   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  mZ d dlm  mZ d dlZdd ZG dd dZG dd	 d	ZG d
d dZdS )    N)assert_equalassert_allcloseassert_almost_equalsuppress_warnings)raisesc                 C   s    t jt jt jtd| S )Ndata)ospathjoinabspathdirname__file__)basename r   I/tmp/pip-unpacked-wheel-96ln3f52/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dS )TestLinearNDInterpolationc                 C   sN   t jdddddgt jd}t j|jd t jd}t|||}t|| d S )Nr   r         r   r         ?r   r         ?333333?Zdtyper   nparraydoublearangeshapeinterpndLinearNDInterpolatorr   selfxyyir   r   r   test_smoketest   s    z(TestLinearNDInterpolation.test_smoketestc                 C   s   t jdddddg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   r%   r   r   r   test_smoketest_alternate   s    Fz2TestLinearNDInterpolation.test_smoketest_alternatec                 C   sZ   t jdddddgt jd}t j|jd t jd}|d|  }t|||}t|| d S 	Nr   r   r   r   r   r   r                 @r   r%   r   r   r   test_complex_smoketest'   s    z0TestLinearNDInterpolation.test_complex_smoketestc                 C   sd   t jdddddgt jd}t j|jd t jd}|d|  }t|}t|||}t	|| d S r-   )
r   r   r    r!   r"   qhullDelaunayr#   r$   r   r&   r'   r(   trir)   r   r   r   test_tri_input1   s    
z(TestLinearNDInterpolation.test_tri_inputc                    s   t jddddgt jd}t jdddd	g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 )Nr   r   r+   r+   r+   r+   r   r         ?       @            @c           	         s   | | dk}| }| | }|| }| | }|| }d|  } d d| |   d |   d |  ||<  d || d   d d|    d d|   ||< |S )Nr+   r         r   )	r'   r(   t1t2x1y1Zx2y2zvaluesr   r   ipJ   s$    

z1TestLinearNDInterpolation.test_square.<locals>.ipr   r+      r   r   r    Zbroadcast_arraysZlinspaceZravelTcopyr#   r$   r   )r&   pointsrF   xxyyxizir   rD   r   test_square<   s    	z%TestLinearNDInterpolation.test_squarec                 C   sR   t jdddddgt jd}t j|jd t jd}tj||dd	|}t|| d S )
Nr   rR   rR      rT   rT   g      @r<   r   r   Trescaler   r%   r   r   r   test_smoketest_rescalei   s    z0TestLinearNDInterpolation.test_smoketest_rescalec                 C   s   t jddddgt jd}t jdddd	g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 )Nr   )r   d   )
   rZ   )r[   r   r   r8   r9   r:   r;   r   r[   rG   rZ   TrW   rH   )r&   rK   rE   rL   rM   rN   rO   Zzi_rescaledr   r   r   test_square_rescaler   s    z-TestLinearNDInterpolation.test_square_rescalec                 C   s|   t jdddddgt jd}t j|jd t jd}|d|  }t|}t|j	||}tj|j	|d	d
|}t
|| d S Nr   rQ   rS   rU   rV   r   r   r.   TrW   )r   r   r    r!   r"   r0   r1   r#   r$   rK   r   r&   r'   r(   r3   r)   Z
yi_rescaler   r   r   test_tripoints_input_rescale   s    

z6TestLinearNDInterpolation.test_tripoints_input_rescalec              	   C   s|   t jdddddgt jd}t j|jd t jd}|d|  }t|}d	}tjt	|d
 t
j||dd| W 5 Q R X d S Nr   rQ   rS   rU   rV   r   r   r.   zORescaling is not supported when passing a Delaunay triangulation as ``points``.)matchTrW   )r   r   r    r!   r"   r0   r1   pytestr   
ValueErrorr#   r$   r&   r'   r(   r3   ra   r   r   r   test_tri_input_rescale   s    
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     r=   y              ?r   )
r   randomseedrandr#   r$   pickleloadsdumpsr   r&   r'   r(   rF   Zip2r   r   r   test_pickle   s    z%TestLinearNDInterpolation.test_pickleN)__name__
__module____qualname__r*   r,   r/   r4   rP   rY   r\   r_   re   rp   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ddddddgtd}t|}dd	 dfd
d	 dfdd	 dfdd	 dfg}t|D ]z\}\}}||d d df |d d df }tj||dd}t|j	d t
|t |d d d f d|  ddd| d qXd S )Nr   )r   r=   r7   )r+   r=   r   g      ?g333333?g?r   c                 S   s   d|  d S Nr   r+   r   r'   r(   r   r   r   <lambda>       z>TestEstimateGradients2DGlobal.test_smoketest.<locals>.<lambda>c                 S   s   d|  S Nr   r   rx   r   r   r   ry      rz   c                 S   s   d| S Nr   rx   r   r   r   ry      rz   r5   c                 S   s   dd|   d|  S Nr<   L,@r   rx   r   r   r   ry      rz   )r<   r   r   r+   ư>)tol)   r=   gh㈵>zitem %d)rtolatolerr_msg)r   r   floatr0   r1   	enumerater#   estimate_gradients_2d_globalr   r"   r   )	r&   r'   r3   funcsjfuncgradrC   Zdzr   r   r   r*      s.       




"   z,TestEstimateGradients2DGlobal.test_smoketestc              	   C   s^   t td}t j|jd }t|}t $}|	t
jd t
j||dd W 5 Q R X d S )Nzestimate_gradients_hang.npyr   z$Gradient estimation did not converger+   )maxiter)r   loadr   ri   rk   r"   r0   r1   r   filterr#   ZGradientEstimationWarningr   )r&   rK   rE   r3   supr   r   r   test_regression_2359   s    
z2TestEstimateGradients2DGlobal.test_regression_2359N)rq   rr   rs   r*   r   r   r   r   r   rt      s   rt   c                   @   s^   e Zd ZdddZdd Zdd	 Zd
d Zdd Zdd Zdd Z	dd Z
dd Zdd ZdS )TestCloughTocher2DInterpolatorNr   Fc                 K   s`  t jd |d kr0t jdddddddgtd	}|sftj|||d d d
f |d d df d|d}nLtj|d d d
f |d d df f||d d d
f |d d df d|d}t jdd}|s||}	n"||d d d
f |d d df }	||d d d
f |d d df }
zt|	|
f| W n6 t	k
rZ   t
dt|	|
  t
d|j  Y nX d S )Nrg   r   r5   r7   r6   ru   rv   )r   g?r   r   r+   r   )r   rX   2   r=   z_check_accuracy: abs(a-b):zip.grad:)r   ri   rj   r   r   r#   CloughTocher2DInterpolatorrk   r   AssertionErrorprintabsr   )r&   r   r'   r   	alternaterX   kwrF   pabr   r   r   _check_accuracy   s@       & "  
""z.TestCloughTocher2DInterpolator._check_accuracyc              
   C   s   dd dd dd dd g}t |D ]p\}}| 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   s   d|  d S rw   r   rx   r   r   r   ry      rz   zFTestCloughTocher2DInterpolator.test_linear_smoketest.<locals>.<lambda>c                 S   s   d|  S r{   r   rx   r   r   r   ry      rz   c                 S   s   d| S r|   r   rx   r   r   r   ry      rz   c                 S   s   dd|   d|  S r~   r   rx   r   r   r   ry      rz   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   rX   z!Function (alternate, rescaled) %d)r   r   r   r   rX   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   s   | d S Nr=   r   rx   r   r   r   ry   	  rz   zITestCloughTocher2DInterpolator.test_quadratic_smoketest.<locals>.<lambda>c                 S   s   |d S r   r   rx   r   r   r   ry   
  rz   c                 S   s   | d |d  S r   r   rx   r   r   r   ry     rz   c                 S   s   | | S Nr   rx   r   r   r   ry     rz   &.>g)\(?r   r   r   Tr   r   r   r   r   r   test_quadratic_smoketest  s     z7TestCloughTocher2DInterpolator.test_quadratic_smoketestc                 C   sd   t jdddddgt jd}t j|jd t jd}|d|  }t|}t|||}t	|| d S r-   )
r   r   r    r!   r"   r0   r1   r#   r   r   r2   r   r   r   r4     s    
z-TestCloughTocher2DInterpolator.test_tri_inputc              	   C   s|   t jdddddgt jd}t j|jd t jd}|d|  }t|}d	}tjt	|d
 t
j||dd| W 5 Q R X d S r`   )r   r   r    r!   r"   r0   r1   rb   r   rc   r#   r   rd   r   r   r   re      s    
z5TestCloughTocher2DInterpolator.test_tri_input_rescalec                 C   s|   t jdddddgt jd}t j|jd t jd}|d|  }t|}t|j	||}tj|j	|d	d
|}t
|| d S r]   )r   r   r    r!   r"   r0   r1   r#   r   rK   r   r^   r   r   r   r_   -  s    
z;TestCloughTocher2DInterpolator.test_tripoints_input_rescalec              
   C   s   dd dd dd dd dd g}t jd t jt jdd	d
dgtdt jddf }t|D ]>\}}| j||dddd| d | j||dddd| dd q`d S )Nc                 S   s   | d S r   r   rx   r   r   r   ry   <  rz   z;TestCloughTocher2DInterpolator.test_dense.<locals>.<lambda>c                 S   s   |d S r   r   rx   r   r   r   ry   =  rz   c                 S   s   | d |d  S r   r   rx   r   r   r   ry   >  rz   c                 S   s   | | S r   r   rx   r   r   r   ry   ?  rz   c                 S   s(   t dt j |  t dt j |  S r   )r   cospisinrx   r   r   r   ry   @  rz   i  r   r5   r7   r6   r   i  r=   r   g{Gzt?g{Gz?r   )r'   r   r   r   r   T)r'   r   r   r   r   rX   )	r   ri   rj   Zr_r   r   rk   r   r   )r&   r   Zgridr   r   r   r   r   
test_dense9  s$     z)TestCloughTocher2DInterpolator.test_densec                 C   s.   t jdd}t jd}tttj|| d S )Nrh   r<   )r   ri   randnassert_raisesrc   r#   r   )r&   r'   r(   r   r   r   test_wrong_ndimM  s    z.TestCloughTocher2DInterpolator.test_wrong_ndimc                 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 rf   )
r   ri   rj   rk   r#   r   rl   rm   rn   r   ro   r   r   r   rp   R  s    z*TestCloughTocher2DInterpolator.test_picklec                 C   sX  t dddt dd fg}t dddg}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 t j
dd}	t j
d}
|	|jj|
d d d f  }|	||
 }|	||
 }t||}d|jd< ||}||}t	|| t	|| d S )
Nr   r7   r   r<   r=   r+   r   .r   )r   r   sqrtr#   r   r   r   r   r   r   ri   rj   r   dotrI   )r&   rK   rE   rF   alphap1p2Zv1Zv2Ar   Zw1Zw2r   r   r   test_boundary_tri_symmetry]  s,    
"6


z9TestCloughTocher2DInterpolator.test_boundary_tri_symmetry)Nr   FF)rq   rr   rs   r   r   r   r4   re   r_   r   r   rp   r   r   r   r   r   r      s   
r   )r   Znumpyr   Znumpy.testingr   r   r   r   rb   r   r   Zscipy.interpolate.interpndZinterpolater#   Zscipy.spatial._qhullZspatialZ_qhullr0   rl   r   r   rt   r   r   r   r   r   <module>   s    %