U
    »mœd;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   ú^/home/sam/Atlas/atlas_env/lib/python3.8/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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 ©Néþÿÿÿr   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=   gñhãˆµøä>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   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…   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{®Gázt?g{®Gáz„?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‰   Ú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   Ú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    %