a
    ‡ù»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m	Z	 d dlm
Z d dlmZmZmZmZmZ d dlmZ d dlmZ ej dej¡ZG dd	„ d	ƒZG d
d„ dƒZG dd„ dƒZdS )é    N)Úassert_allcloseÚassert_equalÚassert_warnsÚassert_array_almost_equalÚassert_array_equal)Úraises)ÚRegularGridInterpolatorÚinterpnÚRectBivariateSplineÚNearestNDInterpolatorÚLinearNDInterpolator)Úmatrix)ÚComplexWarningÚmethodc                   @   sÌ  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zed	d
„ ƒZe	j
 dg d¢¡dd„ ƒZe	j
 dee g d¢g d¢g d¢g¡fee g d¢¡fg¡dd„ ƒZdd„ Zedd„ ƒZdd„ Zdd„ Zdd„ Ze	j
 d e g d!¢¡d"fe g d#¢¡d$fe g d%¢¡d$fe g d&¢¡d'fe g d(¢¡d)fg¡d*d+„ ƒZd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Ze	j
 dd<d=g¡d>d?„ ƒZd@dA„ ZdBdC„ Z dDdE„ Z!e	j
 dFdGej"ej#g¡e	j
 dd=d<g¡dHdI„ ƒƒZ$e	j
 dd<d=g¡dJdK„ ƒZ%e	j
 dd<d=g¡dLdM„ ƒZ&ee	j
 dNdOdPdQ„ fdRdSdQ„ fdTdUdQ„ fdVdWdQ„ fg¡dXdY„ ƒƒZ'dZd[„ Z(ed\d]„ ƒZ)ed^d_„ ƒZ*ee	j
 d`dadbg¡dcdd„ ƒƒZ+dedf„ Z,e	j
 dgej-ej.ej/ej0g¡e	j
 dhej-ej.g¡didj„ ƒƒZ1dkdl„ Z2dGS )mÚTestRegularGridInterpolatorc                 C   s¤   dgd }t  g d¢¡}|d d …t jt jt jf }|t jd d …t jt jf }|t jt jd d …t jf }|t jt jt jd d …f }||d  |d  |d  }||fS )N©ç        ç      à?ç      ð?é   é
   éd   éè  ©ÚnpÚasarrayÚnewaxis©ÚselfÚpointsÚvaluesÚvalues0Úvalues1Zvalues2Zvalues3© r#   úFE:\soccer\ml_env\Lib\site-packages\scipy/interpolate/tests/test_rgi.pyÚ_get_sample_4d   s    
z*TestRegularGridInterpolator._get_sample_4dc                 C   s®   dgd dgd  }t  g d¢¡}|d d …t jt jt jf }|t jd d …t jt jf }|t jt jd d …t jf }|t jt jt jd d …f }||d  |d  |d  }||fS ©Nr   é   )r   ç      @ç      $@r   r   r   r   r   r#   r#   r$   Ú_get_sample_4d_2"   s    z,TestRegularGridInterpolator._get_sample_4d_2c                 C   s¤   dgd }t  g d¢¡}|d d …t jt jt jf }|t jd d …t jt jf }|t jt jd d …t jf }|t jt jt jd d …f }||d  |d  |d  }||fS )N©r   r   r   ç      ø?ç       @ç      @ç      @r   r   r   r   r   r   r#   r#   r$   Ú_get_sample_4d_3-   s    
z,TestRegularGridInterpolator._get_sample_4d_3c                 C   s¤   dgd }t  ddg¡}|d d …t jt jt jf }|t jd d …t jt jf }|t jt jd d …t jf }|t jt jt jd d …f }||d  |d  |d  }||fS )N)r   r   r   r   r   r   r   r   r   r   r#   r#   r$   Ú_get_sample_4d_48   s    
z,TestRegularGridInterpolator._get_sample_4d_4c                 C   sj   |   ¡ \}}t g d¢g d¢g d¢g¡}t|| ¡ |d�}|| ¡ ƒ}t|||d�}||ƒ}t||ƒ d S )N©çš™™™™™¹?r3   r   çÍÌÌÌÌÌì?©çš™™™™™É?r3   gÍÌÌÌÌÌÜ?gš™™™™™é?©r   r   r   r   ©r   )r0   r   r   r   Útolistr   )r   r   r   r    ÚsampleÚinterpÚv1Úv2r#   r#   r$   Útest_list_inputC   s    ÿþþz+TestRegularGridInterpolator.test_list_inputr   )ÚcubicÚquinticÚpchipc                 C   s°   |   ¡ \}}d}tjt|d�� t|||d� W d   ƒ n1 sB0    Y  t||ƒ}t g d¢g d¢g d¢g¡}tjt|d�� |||d� W d   ƒ n1 s¢0    Y  d S )Nzpoints in dimension©Úmatchr8   r2   r5   r7   )r1   Úpytestr   Ú
ValueErrorr   r   r   )r   r   r   r    rC   r;   r:   r#   r#   r$   Útest_spline_dim_errorT   s    ,
ÿz1TestRegularGridInterpolator.test_spline_dim_errorzpoints_values, sampler2   r5   r7   ©r3   r3   r)   ç      "@c                 C   sF   || ƒ\}}t ||dd�}||ƒ}t ||dd�}||ƒ}t||ƒ d S )NÚlinearr8   Úslinear)r   r   )r   Zpoints_valuesr:   r   r    r;   r<   r=   r#   r#   r$   Útest_linear_and_slinear_closed   s    z9TestRegularGridInterpolator.test_linear_and_slinear_closec                 C   s¼   |   ¡ \}}t g d¢g d¢g d¢g¡}t||dd�}ttƒ� ||dd� W d   ƒ n1 s`0    Y  t||dd�g d	¢d
d� t||dd�g d¢d
d� t||dd�g d¢dd� d S )Nr2   r5   r7   rJ   r8   é   )Únu)rL   r   r   r   )rL   rL   rL   çVçž¯Ò<©Úatol)r   rL   r   r   )r   r   r   )r   rL   rL   r   )r   r   r   gê-�™—�=)r%   r   Úarrayr   Úassert_raisesrE   r   )r   r   r    r:   r;   r#   r#   r$   Útest_derivativesz   s"    
þ
*ÿÿÿz,TestRegularGridInterpolator.test_derivativesc           
      C   sž   |dkrt  d¡ |  ¡ \}}|d|  }t g d¢g d¢g d¢g¡}t|||d�}t||j|d�}t||j|d�}||ƒ}||ƒd||ƒ  }	t||	ƒ d S )	NrA   ú*pchip does not make sense for complex dataù               @r2   r5   r7   r8   ù              ð?)	rD   Úskipr0   r   r   r   ÚrealÚimagr   )
r   r   r   r    r:   r;   ZrinterpZiinterpr<   r=   r#   r#   r$   Útest_complexŽ   s    
ÿz(TestRegularGridInterpolator.test_complexc           
      C   sŠ   g d¢g d¢ }}t j||dd�\}}dd„ ||ƒ}t||f|dd�}t||f|dd�}|d	d
gƒ}|d	d
gƒ}	t j||	ddd�r†J ‚d S )N)rL   r'   é   r   Úij)Úindexingc                 S   s   | d |d  S )Nr   r#   ©ÚxÚyr#   r#   r$   Ú<lambda>£   ó    zATestRegularGridInterpolator.test_cubic_vs_pchip.<locals>.<lambda>r?   r8   rA   r,   r'   ç›+¡†›„=r   ©rP   Zrtol)r   Úmeshgridr   Zallclose)
r   r_   r`   ÚxgÚygr    r?   rA   Z
vals_cubicZ
vals_pchipr#   r#   r$   Útest_cubic_vs_pchipŸ   s    z/TestRegularGridInterpolator.test_cubic_vs_pchipc                 C   s:   |   ¡ \}}t||ƒ}t g d¢¡}d}t||ƒ|ƒ d S )NrG   çÍÌÌÌÌH�@©r*   r   r   r   r   ©r   r   r    r;   r:   Úwantedr#   r#   r$   Útest_linear_xi1d«   s
    
z,TestRegularGridInterpolator.test_linear_xi1dc                 C   sR   |   ¡ \}}t||ƒ}t g d¢g d¢g d¢g¡}t g d¢¡}t||ƒ|ƒ d S )Nr2   r5   r7   ©ri   gš™™™™qŠ@g     \�@©r%   r   r   r   r   rk   r#   r#   r$   Útest_linear_xi3d²   s    
ÿz,TestRegularGridInterpolator.test_linear_xi3dzsample, wanted)r3   r3   r4   r4   g     0‘@)r3   r3   r3   r3   r   ©r   r   r   r   ©r   r   r   r   ç     \‘@)r3   çš™™™™™Ù?g333333ã?r4   g     |�@c                 C   s,   |   ¡ \}}t||dd�}t||ƒ|ƒ d S )NÚnearestr8   )r%   r   r   )r   r:   rl   r   r    r;   r#   r#   r$   Útest_nearestº   s    z(TestRegularGridInterpolator.test_nearestc                 C   sL   |   ¡ \}}t||ƒ}t g d¢g d¢g¡}t ddg¡}t||ƒ|ƒ d S )Nrq   rr   r   rs   ro   rk   r#   r#   r$   Útest_linear_edgesÉ   s
    
z-TestRegularGridInterpolator.test_linear_edgesc                 C   s´   ddg}t  g d¢¡}|d d …t jf }|t jd d …f }||d  }ttt||ƒ ddg}ttt||ƒ ddg}ttt||ƒ g d¢}ttt||ƒ ddg}ttt||dd� d S )	Nr   )r   r   r   r   )r   )r   r   g      è?r   )r   r   r   Úundefmethodr8   )r   r   r   rR   rE   r   )r   r   r    r!   r"   r#   r#   r$   Útest_valid_createÐ   s     
ÿz-TestRegularGridInterpolator.test_valid_createc                 C   s‚   |   ¡ \}}t||ƒ}t g d¢g d¢g¡}tt||dƒ t g d¢g d¢g¡}tt||ƒ t g d¢g d¢g¡}tt||ƒ d S )Nrq   rr   rx   )r   r   r   )r   r   r   )r   r   r   çš™™™™™ñ?)r%   r   r   r   rR   rE   )r   r   r    r;   r:   r#   r#   r$   Útest_valid_callâ   s    
z+TestRegularGridInterpolator.test_valid_callc                 C   s‚   |   ¡ \}}t||dd d�}t g d¢g d¢g d¢g d¢g¡}t g d¢¡}t||dd	�|ƒ t g d
¢¡}t||dd	�|ƒ d S )NF©Úbounds_errorÚ
fill_value©çš™™™™™¹¿r€   r€   r€   ©rz   rz   rz   rz   ©é   çÍÌÌÌÌÌ @çš™™™™™ñ¿iõÿÿÿ©r„   r„   r…   r…   )r   rs   ç      &@r‡   ru   r8   )gfffffÆ[Àgfffff“@g     žÅÀgš™™™™‹’ÀrI   ro   rk   r#   r#   r$   Útest_out_of_bounds_extrapì   s    ÿÿz5TestRegularGridInterpolator.test_out_of_bounds_extrapc                 C   s‚   |   ¡ \}}t||dd d�}t g d¢g d¢g d¢g d¢g¡}t g d¢¡}t||dd	�|ƒ t g d
¢¡}t||dd	�|ƒ d S )NFr|   r   r�   r‚   r†   )r   r‡   r‡   r‡   ru   r8   )g333333(Àg33333£`@g     ´�Àgš™™™™yXÀrI   rj   rk   r#   r#   r$   Útest_out_of_bounds_extrap2÷   s    ÿÿz6TestRegularGridInterpolator.test_out_of_bounds_extrap2c                 C   s°   |   ¡ \}}t||dtjd�}t g d¢g d¢g d¢g¡}t tjtjtjg¡}t||dd�|ƒ t||dd�|ƒ t g d	¢g d
¢g d¢g¡}t g d¢¡}t||ƒ|ƒ d S )NFr|   r   r�   r†   ru   r8   rI   r2   r5   r7   rn   )r%   r   r   Únanr   r   rk   r#   r#   r$   Útest_out_of_bounds_fill  s    ÿÿÿz3TestRegularGridInterpolator.test_out_of_bounds_fillc                 C   s‚   |   ¡ \}}t||dd�}tj|Ž }dd„ |D ƒ}t |¡}| d¡}t||ƒ}t g d¢g d¢g d¢g¡}t||ƒ||ƒƒ d S )	Nru   r8   c                 S   s   g | ]}|‘qS r#   r#   ©Ú.0Úpr#   r#   r$   Ú
<listcomp>  rb   zJTestRegularGridInterpolator.test_nearest_compare_qhull.<locals>.<listcomp>éÿÿÿÿr2   r5   r7   )	r%   r   Ú	itertoolsÚproductr   r   Úreshaper   r   ©r   r   r    r;   Zpoints_qhullZvalues_qhullZinterp_qhullr:   r#   r#   r$   Útest_nearest_compare_qhull  s    



ÿz6TestRegularGridInterpolator.test_nearest_compare_qhullc                 C   s~   |   ¡ \}}t||ƒ}tj|Ž }dd„ |D ƒ}t |¡}| d¡}t||ƒ}t g d¢g d¢g d¢g¡}t||ƒ||ƒƒ d S )Nc                 S   s   g | ]}|‘qS r#   r#   rŒ   r#   r#   r$   r�      rb   zITestRegularGridInterpolator.test_linear_compare_qhull.<locals>.<listcomp>r�   r2   r5   r7   )	r%   r   r‘   r’   r   r   r“   r   r   r”   r#   r#   r$   Útest_linear_compare_qhull  s    




ÿz5TestRegularGridInterpolator.test_linear_compare_qhullru   rI   c                 C   sp   t  ddd¡}t  ddd¡}tdƒ}t||f||d�}|dd	gƒ}t||f|j|d�}|dd	gƒ}t||ƒ d S )
Nr   r'   é   rL   é   ©r—   r˜   r8   rt   çffffffæ?)r   ÚlinspaceÚMyValuer   Ú_vr   )r   r   r_   r`   r    r;   r<   r=   r#   r#   r$   Útest_duck_typed_values(  s    z2TestRegularGridInterpolator.test_duck_typed_valuesc                 C   sb   t j d¡ t  ddd¡}t  ddd¡}t j dd¡}t||f|dd� ttt||f|dd� d S )	NéÒ  r   r'   r—   rL   r˜   ©r~   y      ð?       @)r   ÚrandomÚseedr›   Úrandr   rR   rE   )r   r_   r`   r    r#   r#   r$   Útest_invalid_fill_value6  s    
ÿz3TestRegularGridInterpolator.test_invalid_fill_valuec                 C   s:   t jddd�}dd„ |jD ƒ}t||ƒ t||dd� d S )N©r   é   é   z>f4©Údtypec                 S   s   g | ]}t  |¡‘qS r#   )r   Úarange)r�   Únr#   r#   r$   r�   F  rb   zCTestRegularGridInterpolator.test_fillvalue_type.<locals>.<listcomp>r   r    )r   ÚonesÚshaper   )r   r    r   r#   r#   r$   Útest_fillvalue_typeC  s    
z/TestRegularGridInterpolator.test_fillvalue_typec                 C   sP  dd„ }t  ddd¡}t  ddd¡}|t j||ddd�Ž }t||f|dd	d
d�}t|t  ddgddgddgg¡ƒg d¢dd� t|t  ddgddgddgg¡ƒg d¢dd� t|t  ddg¡ƒ|jdd� d |_t|ddgddggƒddgdd� t|ddgddggƒddgdd� t||f|dd	d d�}t|ddgddggƒd d!gdd� d S )"Nc                 S   s   | | S ©Nr#   r^   r#   r#   r$   ÚfO  s    z;TestRegularGridInterpolator.test_length_one_axis.<locals>.frL   r   r\   T©r]   ÚsparserI   Fée   ©r   r}   r~   r—   )r'   é   é   rc   rO   gffffffö?ç333333@)ç333333@ç333333@r¶   rz   r¸   ç333333Ó?g      '@gÍÌÌÌÌÌô?g      )@rN   r,   gffffffþ?ru   gÍÌÌÌÌÌü?éüÿÿÿgffffff@r[   rµ   )r   r›   re   r   r   rQ   r~   )r   r°   r_   r`   Údatar;   r#   r#   r$   Útest_length_one_axisK  sB    ÿ þ þþÿÿÿþz0TestRegularGridInterpolator.test_length_one_axisr~   Nc                 C   sò   |d|dœ}t  ddt j d¡}t  |¡}t|f|d d … fi |¤Ž}t|dgf|d d …d f fi |¤Ž}t  ddt j d d¡}||ƒ}	t  d¡}
|t  ||
g¡jƒ}t||	ƒ t  	d¡}
|t  ||
g¡jƒ}|d u rät||	ƒ n
t||ƒ d S )	NF©r~   r}   r   r   r'   r¦   r�   rL   r   )
r   r›   ÚpiÚsinr   ZzerosÚvstackÚTr   r¬   )r   r~   r   Úoptionsr_   ÚzÚfaZfbZx1aZzaZy1bZzbr#   r#   r$   Útest_length_one_axis2v  s"    ÿ
$


z1TestRegularGridInterpolator.test_length_one_axis2c           	      C   s,  t g d¢fg d¢dd|d�}t |tjgƒ¡s2J ‚tj d¡}|jdd�d	 }|jdd�d
k}tj||< tjdd�� ||ƒ}W d   ƒ n1 s’0    Y  t|| tjƒ t||  |||  ƒƒ g d¢}dg}t d¡}t ||f|dd|d�}t |tjdgƒ¡�sJ ‚t |dtjgƒ¡�s(J ‚d S )N)rL   r'   r[   r¥   rL   Fr¾   ì   l¿J r   ©Úsizer   r   Úignore©Úinvalid)r[   rL   )	r   r   ÚisnanrŠ   r¡   Údefault_rngÚerrstater   r¬   )	r   r   r°   Úrngr_   ÚiÚresr`   r¼   r#   r#   r$   Útest_nan_x_1d’  s(    ÿ
&
ÿz)TestRegularGridInterpolator.test_nan_x_1dc                 C   s   t  g d¢¡t  g d¢¡ }}dd„ }t j||ddd�\}}|||ƒ}t||f||dd	�}t jd
d��& |dt jgddggƒ}	W d   ƒ n1 s’0    Y  t|	d ddd� t  |	d ¡sÀJ ‚t j 	d¡}
|
jdd�d d }|
jdd�d }|
jdd�dk}|
jdd�dk}||B }t j||< t j||< t  ||g¡j
}t jd
d�� ||ƒ}	W d   ƒ n1 �sh0    Y  t|	| t jƒ t|	|  |||  ƒƒ d S )N)r   rL   r'   )rL   r[   r˜   c                 S   s   | d |d  S ©Nr'   r#   r^   r#   r#   r$   r°   µ  s    z4TestRegularGridInterpolator.test_nan_x_2d.<locals>.fr\   Tr±   F©r   r}   rÊ   rË   r,   rL   r'   rc   rO   r   rÇ   r   rÈ   r   é   r   )r   rQ   re   r   rÏ   rŠ   r   rÍ   r¡   rÎ   rÂ   r   )r   r   r_   r`   r°   rf   rg   r¼   r;   rÒ   rÐ   Úi1Úi2rÑ   rÄ   r#   r#   r$   Útest_nan_x_2d±  s0    

ÿ4

(z)TestRegularGridInterpolator.test_nan_x_2d)ÚndimsÚfuncr'   c                 C   s   d| d  d|d   S ©Nr'   r[   r#   r^   r#   r#   r$   ra   Ø  rb   z$TestRegularGridInterpolator.<lambda>r[   c                 C   s   d| d  d|d   | S rÜ   r#   )r_   r`   rÄ   r#   r#   r$   ra   Ù  rb   r   c                 C   s    d| d  d|d   | | S rÜ   r#   ©r_   r`   rÄ   Úar#   r#   r$   ra   Ú  rb   r—   c                 C   s$   d| d  d|d   | ||  S rÜ   r#   )r_   r`   rÄ   rÞ   Úbr#   r#   r$   ra   Û  rb   c                    sÎ   |dkr|dv rt  d¡ tj d¡}d‰d‰ |jˆˆ d|fd�}‡ ‡fdd	„t|ƒD ƒ}|tj|d
ddœŽŽ }t|||d�}||ƒ}	dd	„ |D ƒ}
|tj|
d
ddœŽŽ }t|
||d�}||ƒ}t	|	|ƒ d S )Nr—   >   r?   r@   z-too slow; OOM (quintic); or nearly so (cubic)é*   rL   r'   rÈ   c                    s   g | ]}t  ˆˆ d ¡‘qS )é   )r   r›   )r�   Ú_©Zsample_highZ
sample_lowr#   r$   r�   ç  s   ÿzITestRegularGridInterpolator.test_descending_points_nd.<locals>.<listcomp>r\   Tr±   r8   c                 S   s   g | ]}|d d d… ‘qS )Nr�   r#   )r�   Úxir#   r#   r$   r�   ó  rb   )
rD   rW   r   r¡   rÎ   ÚuniformÚrangere   r   r   )r   r   rÚ   rÛ   rÐ   Ztest_pointsZascending_pointsZascending_valuesZascending_interpZascending_resultZdescending_pointsZdescending_valuesZdescending_interpZdescending_resultr#   rã   r$   Útest_descending_points_ndÖ  s:    	
ÿþ
þþ
þz5TestRegularGridInterpolator.test_descending_points_ndc                 C   s‚   dd„ }t  g d¢¡}t  g d¢¡}||f}|t j|dddœŽŽ }d}tjt|d	�� t||ƒ W d   ƒ n1 st0    Y  d S )
Nc                 S   s   d| d  d|d   S rÜ   r#   r^   r#   r#   r$   Úval_func_2dÿ  s    zJTestRegularGridInterpolator.test_invalid_points_order.<locals>.val_func_2d©r   r-   r   ç      @ç      @©r   r-   r/   rê   rë   r\   Tr±   ú(must be strictly ascending or descendingrB   )r   rQ   re   rD   r   rE   r   )r   rè   r_   r`   r   r    rC   r#   r#   r$   Útest_invalid_points_orderþ  s    
ÿ
z5TestRegularGridInterpolator.test_invalid_points_orderc                 C   s6   t t d¡gt d¡|dd�}t |dgƒ¡s2J ‚d S )Nrµ   FrÕ   r   )r   r   rª   r¬   rÍ   )r   r   r;   r#   r#   r$   Útest_fill_value  s    ÿz+TestRegularGridInterpolator.test_fill_valuec                 C   sÎ   |dkrt  d¡ dgd dgd  }tj d¡}| d¡}| d¡}t|||d	d
�}||ƒ}t|jd|d� g }tdƒD ]*}	t||d|	f |d	d
�}| 	||ƒ¡ qzt 
|¡ ddd¡}
t||
d|d� d S )Nr@   úWay too slow.©r   r   r   r,   r-   r.   r'   ©r   r(   r)   ç      .@r¦   ç      9@rŸ   ©rµ   rµ   rµ   rµ   rÖ   ©r˜   r[   r   FrÕ   ©r˜   r[   rÖ   ©Úerr_msgrÖ   .rL   r   rc   ©rP   rù   )rD   rW   r   r¡   rÎ   r   r   r­   ræ   ÚappendrQ   Ú	transposer   )r   r   r   rÐ   r    r:   r;   ÚvÚvsÚjr=   r#   r#   r$   Útest_nonscalar_values  s0    
ÿþ

ÿþz1TestRegularGridInterpolator.test_nonscalar_valuesÚflip_pointsFTc                 C   s  |dv rt  d¡ g d¢}|r,dd„ |D ƒ}tj d¡}d}| dd	d
dg|¢R ¡}| d¡}t|||dd�}||ƒ}	|	jdg|¢R ksŒJ ‚t |jdd … ¡}
t|jd ƒD ]F}t|jd ƒD ]2}t||d||f |dd�}||ƒ 	¡ |
||f< qÀq®tj
|
dd�}t|	|d|d� d S )N>   r?   r@   rð   ©rñ   r+   )r   r(   r)   ró   r¦   rô   ç     €A@ç      B@)	r   r(   r)   ró   r¦   rô   r  r  é/   c                 S   s   g | ]}t t|ƒƒ‘qS r#   )ÚtupleÚreversedrŒ   r#   r#   r$   r�   ?  rb   zGTestRegularGridInterpolator.test_nonscalar_values_2.<locals>.<listcomp>rŸ   ©r[   r'   rµ   r˜   rÖ   é	   r   FrÕ   rL   éþÿÿÿr�   .r   ©Zaxisrc   rú   )rD   rW   r   r¡   rÎ   r   r­   Úemptyræ   ÚitemÚexpand_dimsr   )r   r   r  r   rÐ   Útrailing_pointsr    r:   r;   rý   rþ   rÑ   rÿ   r=   r#   r#   r$   Útest_nonscalar_values_2/  s0    

ÿþz3TestRegularGridInterpolator.test_nonscalar_values_2c                 C   sô   d}ddg}t j d¡}d}| ddg|¢R ¡}| d¡}t|||d	d
�}||ƒ}|jdg|¢R kshJ ‚t  |jdd … ¡}	t|jd ƒD ]F}
t|jd ƒD ]2}t||d|
|f |d	d
�}||ƒ ¡ |	|
|f< qœqŠt j|	dd�}t	||d|d� d S )NrI   rñ   r+   rŸ   )r[   r   rµ   r˜   r'   FrÕ   rL   r
  r�   .r   r  rc   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$   Útest_nonscalar_values_linear_2DZ  s.    ÿ
ÿþz;TestRegularGridInterpolator.test_nonscalar_values_linear_2Dr©   Úxi_dtypec                 C   s�   dd„ }t  ddd¡}t  ddd¡}t j||dd	d
�\}}|||ƒ}| |¡}t||f|ƒ}	t jddgddgg|d�}
t|	|
ƒddgdd� d S )Nc                 S   s   d| d  d|d   S rÜ   r#   r^   r#   r#   r$   r°   €  s    z:TestRegularGridInterpolator.test_float32_values.<locals>.frL   r   r¶   r˜   é   r\   Tr±   r„   gÍÌÌÌÌÌ@çffffff
@gÍÌÌÌÌÌ@r¨   g Öú¦YÃ`@gÖÉø{Ò,c@gH¯¼šò×z>rO   )r   r›   re   Zastyper   rQ   r   )r   r©   r  r°   r_   r`   rf   rg   r¼   r;   Úptsr#   r#   r$   Útest_float32_valuesy  s    


ÿÿz/TestRegularGridInterpolator.test_float32_valuesc                 C   s@  t  ddd¡}t  ddd¡}t j||ddd�\}}|| }ttƒ�& t||f|dd„ d	� W d   ƒ n1 sn0    Y  ttƒ�( t||f|d
dd„ d� W d   ƒ n1 s®0    Y  ttƒ�* t||f|d
dd„ dd� W d   ƒ n1 sð0    Y  ttƒ�( t||f|d
ddid� W d   ƒ n1 �s20    Y  d S )Nr   r[   r˜   r\   Tr±   c                 S   s   | S r¯   r#   ©r_   r#   r#   r$   ra   �  rb   z=TestRegularGridInterpolator.test_bad_solver.<locals>.<lambda>)ÚsolverrJ   c                 S   s   | S r¯   r#   r  r#   r#   r$   ra   ¢  rb   )r   r  c                 S   s   | S r¯   r#   r  r#   r#   r$   ra   ¨  rb   Úwoof)r   r  r  rà   )r   Zsolver_args)r   r›   re   rR   rE   r   Ú	TypeError)r   r_   r`   rf   rg   r¼   r#   r#   r$   Útest_bad_solver•  s$    
4
ÿ$
ÿ$
ÿz+TestRegularGridInterpolator.test_bad_solver)3Ú__name__Ú
__module__Ú__qualname__r%   r*   r0   r1   Úparametrize_rgi_interp_methodsr>   rD   ÚmarkÚparametrizerF   r   r   rK   rS   rZ   rh   rm   rp   rv   rw   ry   r{   rˆ   r‰   r‹   r•   r–   rž   r¤   r®   r½   rŠ   r¿   rÆ   rÓ   rÙ   rç   rî   rï   r   r  r  Zfloat32Zfloat64Z	complex64Z
complex128r  r  r#   r#   r#   r$   r      s¤   

þÿþ÷þ

ûþ



+

$



ü!

)þr   c                   @   s2   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	d
„ZdS )rœ   z"
    Minimal indexable object
    c                 C   s(   d| _ || _t t |¡¡ |¡| _d S rÔ   )Úndimr­   r   rª   Úprodr“   r�   )r   r­   r#   r#   r$   Ú__init__·  s    zMyValue.__init__c                 C   s
   | j | S r¯   )r�   )r   Úidxr#   r#   r$   Ú__getitem__¼  s    zMyValue.__getitem__c                 C   s   d S r¯   r#   )r   r#   r#   r$   Ú__array_interface__¿  s    zMyValue.__array_interface__Nc                 C   s   t dƒ‚d S )NzNo array representation)ÚRuntimeError)r   r©   Úcopyr#   r#   r$   Ú	__array__Â  s    zMyValue.__array__)NN)r  r  r  Ú__doc__r$  r&  r'  r*  r#   r#   r#   r$   rœ   ²  s
   rœ   c                   @   s(  e Zd Zdd„ Zdd„ Ze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dd„ ƒZedd„ ƒZedd„ ƒZdd„ Zedd „ ƒZd!d"„ Zd#d$„ Zej d%d&d'g¡d(d)„ ƒZed*d+„ ƒZd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Z d8d9„ Z!ej d:d;d<g¡d=d>„ ƒZ"d?S )@ÚTestInterpNc              	   C   sT   t  g d¢¡}t  g d¢¡}t  g d¢g d¢g d¢g d¢g d¢g d¢g¡}|||fS )N)r   r-   r/   rê   rë   g      @)rL   r'   rL   r'   rL   rL   )rL   r'   r[   r'   rL   rL   )rL   r'   r'   r'   rL   rL   )r   rQ   )r   r_   r`   rÄ   r#   r#   r$   Ú_sample_2d_dataÇ  s    úÿ
zTestInterpN._sample_2d_datac                 C   sp   |   ¡ \}}}t|||ƒ}t g d¢g d¢g¡j}tt||f||dd�| |d d …df |d d …df ¡ƒ d S )N©rL   çffffff@r·   r   r  ç333333ó?r[   ©rL   r  r0  rê   r(   r   r[   Ú	splinef2dr8   r   rL   )r-  r
   r   rQ   rÂ   r   r	   Úev)r   r_   r`   rÄ   Úluträ   r#   r#   r$   Útest_spline_2dÖ  s    
ÿ"ÿzTestInterpN.test_spline_2dc                 C   sp   |   ¡ \}}}t g d¢g d¢g¡j}t||f|||d�}t| ¡ | ¡ f| ¡ | ¡ |d�}t|||d� d S )Nr.  r1  r8   rø   )r-  r   rQ   rÂ   r	   r9   r   )r   r   r_   r`   rÄ   rä   r<   r=   r#   r#   r$   r>   ß  s    
ÿÿzTestInterpN.test_list_inputc              
   C   sÚ   t  g d¢¡}t  g d¢¡}t  g d¢g d¢g d¢g d¢g d¢g¡}t|||ƒ}t  g d¢g d¢g¡j}t||f||ddd	d
�}| |d d …df |d d …df ¡}d	|dd…< t||ƒ ttt||f||ddd d
� d S )Nrì   ©rL   r'   rL   r'   rL   ©rL   r'   r[   r'   rL   ©rL   r'   r'   r'   rL   ©rL   r/  r¹   r   r  r0  r[   ©rL   r  r0  g      Àr(   r   r[   r2  FçR¸…ë?�@r´   r   rL   r'   r   )	r   rQ   r
   rÂ   r	   r3  r   rR   rE   )r   r_   r`   rÄ   r4  rä   ÚactualÚexpectedr#   r#   r$   Útest_spline_2d_outofboundsê  s$    ÿ
ÿÿ$
ÿz&TestInterpN.test_spline_2d_outofboundsc                 C   s®   dgd dgd  }t  g d¢¡}|d d …t jt jt jf }|t jd d …t jt jf }|t jt jd d …t jf }|t jt jt jd d …f }||d  |d  |d  }||fS r&   r   r   r#   r#   r$   Ú_sample_4d_dataý  s    zTestInterpN._sample_4d_datac                 C   sH   |   ¡ \}}t||ƒ}t g d¢g¡}t|||dd�}t||ƒ|ƒ d S )NrG   rI   r8   ©r?  r   r   r   r	   r   ©r   r   r    Z	interp_rgr:   rl   r#   r#   r$   Útest_linear_4d  s
    
zTestInterpN.test_linear_4dc                 C   sB   |   ¡ \}}t g d¢g¡}d}t|||dddd�}t||ƒ d S )N©r3   r€   g333333$@rH   r;  rI   Fr´   ©r?  r   r   r	   r   ©r   r   r    r:   rl   r<  r#   r#   r$   Útest_4d_linear_outofbounds  s    
ÿz&TestInterpN.test_4d_linear_outofboundsc                 C   sL   |   ¡ \}}t||dd�}t g d¢g¡}t|||dd�}t||ƒ|ƒ d S )Nru   r8   rG   r@  rA  r#   r#   r$   Útest_nearest_4d  s
    zTestInterpN.test_nearest_4dc                 C   sB   |   ¡ \}}t g d¢g¡}d}t|||dddd�}t||ƒ d S )NrC  r;  ru   Fr´   rD  rE  r#   r#   r$   Útest_4d_nearest_outofbounds   s    
ÿz'TestInterpN.test_4d_nearest_outofboundsc                 C   sT   |   ¡ \}}t g d¢¡}t|||dd�}t|||d d d …f dd�}t||ƒ d S )NrG   F)r}   )r?  r   r   r	   r   ©r   r   r    r:   r<   r=   r#   r#   r$   Ú
test_xi_1d)  s
    zTestInterpN.test_xi_1dc                 C   sv   |   ¡ \}}tj d¡ tj ddd¡}t|||ddd�}t|jdƒ t||| d	d¡ddd�}t	|| |j¡ƒ d S )
NrŸ   r'   r[   r   ru   FrÕ   ©r'   r[   r�   )
r?  r   r¡   r¢   r£   r	   r   r­   r“   r   rI  r#   r#   r$   Ú
test_xi_nd1  s    
ÿÿzTestInterpN.test_xi_ndc                 C   sÂ   |   ¡ \}}}||f}t ddd¡}t ddd¡}|d d …d f |d d d …f f}t||||dd�}	t|	jdƒ t ||¡\}
}tj|
j 	¡ |j 	¡ f }t||||dd�}t
|	| |	j¡ƒ d S )Nr   rL   r'   r[   FrÕ   rK  )r-  r   r›   r	   r   r­   re   Zc_rÂ   Zravelr   r“   )r   r   r_   r`   r    r   rä   Úyir:   r<   ÚxxÚyyr=   r#   r#   r$   Útest_xi_broadcast@  s     ÿzTestInterpN.test_xi_broadcastc                    s¬   ˆ dkrt  d¡ dgd dgd  ‰tj d¡}| d¡‰| d¡‰tˆˆˆˆ d	d
�}t|jdˆ d� ‡ ‡‡‡fdd„tdƒD ƒ}t 	|¡ 
ddd¡}t||dˆ d� d S )Nr@   rð   rñ   r'   rò   rŸ   rõ   rö   FrÕ   r÷   rø   c              	      s&   g | ]}t ˆˆd |f ˆˆ dd�‘qS ©.FrÕ   ©r	   )r�   rÿ   ©r   r   r:   r    r#   r$   r�   g  s   ÿÿz5TestInterpN.test_nonscalar_values.<locals>.<listcomp>rÖ   rL   r   rc   rú   )rD   rW   r   r¡   rÎ   r	   r   r­   ræ   rQ   rü   r   )r   r   rÐ   rý   rþ   r=   r#   rS  r$   r   T  s&    
ÿþ


ÿÿz!TestInterpN.test_nonscalar_valuesc                    s²   ˆ dv rt  d¡ g d¢‰tj d¡}d}| dddd	g|¢R ¡‰| d
¡‰tˆˆˆˆ dd�}|jdg|¢R kstJ ‚‡ ‡‡‡fdd„tˆjd ƒD ƒ}t|t 	|¡j
dˆ d� d S )N>   r?   r@   rð   r  rŸ   r  rµ   r˜   rÖ   r	  r   FrÕ   rL   c                    s0   g | ](‰ ‡ ‡‡‡‡fd d„t ˆjd ƒD ƒ‘qS )c              	      s(   g | ] }t ˆˆd |ˆ f ˆˆdd�‘qS rQ  rR  )r�   rÑ   )rÿ   r   r   r:   r    r#   r$   r�   ‡  s   ÿÿzBTestInterpN.test_nonscalar_values_2.<locals>.<listcomp>.<listcomp>r
  )ræ   r­   )r�   rS  )rÿ   r$   r�   ‡  s   ýþz7TestInterpN.test_nonscalar_values_2.<locals>.<listcomp>r�   rc   rú   )rD   rW   r   r¡   rÎ   r	   r­   ræ   r   r   rÂ   )r   r   rÐ   r  rý   rþ   r#   rS  r$   r  m  s    

ýz#TestInterpN.test_nonscalar_values_2c                 C   sT   |   ¡ \}}tj d¡ tj ddddd¡}tj ddd¡}ttt|||dd� d S )	NrŸ   r[   rµ   r˜   r¶   r   r2  r8   )r?  r   r¡   r¢   r£   rR   rE   r	   )r   r   r    r:   r#   r#   r$   Ú test_non_scalar_values_splinef2dŽ  s    ÿz,TestInterpN.test_non_scalar_values_splinef2dc                 C   sš   |dkrt  d¡ |  ¡ \}}}||f}|d|  }t g d¢g d¢g¡j}t||||d�}t||j||d�}t||j||d�}	|d|	  }
t	||
ƒ d S )NrA   rT   rU   r.  r1  r8   rV   )
rD   rW   r-  r   rQ   rÂ   r	   rX   rY   r   )r   r   r_   r`   r    r   r:   r<   Zv2rZv2ir=   r#   r#   r$   rZ   ˜  s    

ÿzTestInterpN.test_complexc                 C   sz   |   ¡ \}}}||f}|d|  }t g d¢g d¢g¡j}tjdd��  t|||dd� W d   ƒ n1 sl0    Y  d S )NrU   r.  r1  ÚcomplexrB   rA   r8   )r-  r   rQ   rÂ   rD   Zdeprecated_callr	   ©r   r_   r`   r    r   r:   r#   r#   r$   Útest_complex_pchip«  s    
ÿzTestInterpN.test_complex_pchipc                 C   sv   |   ¡ \}}}||f}|d|  }t g d¢g d¢g¡j}ttƒ�  t|||dd� W d   ƒ n1 sh0    Y  d S )NrU   r.  r1  r2  r8   )r-  r   rQ   rÂ   r   r   r	   rV  r#   r#   r$   Útest_complex_spline2fd¶  s    
ÿ
z"TestInterpN.test_complex_spline2fdr   rI   ru   c                 C   sd   t  ddd¡}t  ddd¡}tdƒ}t||f|ddg|d	�}t||f|jddg|d	�}t||ƒ d S )
Nr   r'   r—   rL   r˜   r™   rt   rš   r8   )r   r›   rœ   r	   r�   r   )r   r   r_   r`   r    r<   r=   r#   r#   r$   rž   Á  s    z"TestInterpN.test_duck_typed_valuesc                 C   s”   t  ddd¡}t  ddd¡}tt j dd¡ƒ}t j ddd¡}t||f|||d�}t||ft  |¡||d�}|dkr†t||d	d
d� n
t||ƒ d S )Nr   r'   rµ   rL   r˜   r[   r8   r@   g-Cëâ6
?g�íµ ÷ÆÀ>rd   )r   r›   r   r¡   r£   r	   r   r   )r   r   r_   r`   r    r:   r<   r=   r#   r#   r$   Útest_matrix_inputÏ  s    zTestInterpN.test_matrix_inputc                 C   s¢   t  g d¢g¡}t  ddgddgddgg¡}tdgg d¢f||ƒ}g d¢}t||dd	� t  d
dgddgddgg¡}tdgg d¢f||dd d�}t||dd	� d S )N)r3   rL   r   rL   gš™™™™™@gš™™™™™	@gffffff@)r'   r[   r   )gìQ¸…ëÑ?gffffff@gffffff @rN   rO   rz   r,   gffffffÀFr|   )r   rQ   r	   r   )r   r    rä   rÒ   rl   r#   r#   r$   r½   à  s    ÿz TestInterpN.test_length_one_axisc              	   C   s  dd„ }t  g d¢¡}t  g d¢¡}t  g d¢¡}t  g d¢¡}||||f}|t j|dddœŽŽ }d	d
t  t  ddd¡¡t  dd
d¡f}t|||ƒ}	|d d d… }
|d d d… }|d d d… }|d d d… }|
|||f}|t j|dddœŽŽ }t|||ƒ}t|	|ƒ d S )Nc                 S   s    d| d  d|d   | | S rÜ   r#   rÝ   r#   r#   r$   Úvalue_func_4d÷  s    z9TestInterpN.test_descending_points.<locals>.value_func_4d)r   rL   r'   r[   )r   r   r¦   r§   )r   r3   r6   rº   r\   Tr±   r3   rº   r   r§   r   r�   )r   rQ   re   rü   r›   r	   r   )r   rZ  Úx1Zx2Zx3Zx4r   r    r  Zcorrect_resultZ
x1_descendZ
x2_descendZ
x3_descendZ
x4_descendZpoints_shuffledZvalues_shuffledZtest_resultr#   r#   r$   Útest_descending_pointsö  s.    ÿÿÿz"TestInterpN.test_descending_pointsc                 C   s¢   t  g d¢¡}t  g d¢¡}t  g d¢g d¢g d¢g d¢g d¢g¡}t  g d¢g d¢g¡j}d}tjt|d	��  t||f||ƒ W d   ƒ n1 s”0    Y  d S )
Nré   rì   r6  r7  r8  r9  r:  rí   rB   )r   rQ   rÂ   rD   r   rE   r	   )r   r_   r`   rÄ   rä   rC   r#   r#   r$   rî     s    ÿ
ÿz%TestInterpN.test_invalid_points_orderc                 C   sX   dg}ddg}t  d¡}d}tt|d�� t|||ƒ W d   ƒ n1 sJ0    Y  d S )N)r   rL   r   rL   )rL   rL   r[   zaThe requested sample points xi have dimension 3, but this RegularGridInterpolator has dimension 1rB   )r   r¬   rR   rE   r	   )r   r   r    rä   Úmsgr#   r#   r$   Útest_invalid_xi_dimensions  s    
z&TestInterpN.test_invalid_xi_dimensionsc                 C   sŒ   t  ddd¡}t  ddd¡}t  ddd¡}|||f}t  d¡}t  g d¢¡}|D ]}d|j_qPd|j_d|j_t|||ƒ t||ƒ|ƒ d S )	Nr   r   r—   rµ   r˜   ©r—   rµ   r˜   ©ç®Gáz®@çö(\�Âõ@gffffffò?F©r   r›   r¬   rQ   ÚflagsZ	writeabler	   r   )r   r_   r`   rÄ   r   r    ÚpointÚdr#   r#   r$   Útest_readonly_grid&  s    


zTestInterpN.test_readonly_gridc                 C   s|   t  ddd¡}t  ddd¡}||f}t  d¡}t  ddg¡}|D ]}d|j_q@d|j_d|j_t|||ƒ t||ƒ|ƒ d S )	Nr   r   r—   rµ   ©r—   rµ   ra  rb  Frc  )r   r_   r`   r   r    re  rf  r#   r#   r$   Útest_2d_readonly_grid5  s    

z!TestInterpN.test_2d_readonly_gridc                 C   sœ   t  ddd¡}t  |t  |¡f¡j ¡ d d …df }|jjr@J ‚t  ddd¡}t  ddd¡}|||f}t  d¡}t  	g d¢¡}t
|||ƒ t||ƒ|ƒ d S )Nr   r   r—   rµ   r˜   r_  r`  )r   r›   rÁ   Z
empty_likerÂ   r)  rd  Úc_contiguousr¬   rQ   r	   r   )r   r_   r`   rÄ   r   r    re  r#   r#   r$   Útest_non_c_contiguous_gridD  s    &

z&TestInterpN.test_non_c_contiguous_gridr©   z>f8z<f8c                 C   sj   t jddd|d�}t jddd|d�}||f}t jd|d�}t jddg|d�}t|||ƒ t||ƒ|ƒ d S )	Nr   r   r—   r¨   rµ   rh  ra  rb  )r   r›   r¬   rQ   r	   r   )r   r©   r_   r`   r   r    re  r#   r#   r$   Útest_endiannessQ  s    zTestInterpN.test_endiannessN)#r  r  r  r-  r5  r  r>   r>  r?  rB  rF  rG  rH  rJ  rL  rP  r   r  rT  rZ   rW  rX  rD   r   r!  rž   rY  r½   r\  rî   r^  rg  ri  rk  rl  r#   r#   r#   r$   r,  Æ  sN   	


		


 

þ



r,  )r‘   rD   Únumpyr   Znumpy.testingr   r   r   r   r   r   rR   Zscipy.interpolater   r	   r
   r   r   Zscipy.sparse._sputilsr   Zscipy._lib._utilr   r   r!  Z_ALL_METHODSr  r   rœ   r,  r#   r#   r#   r$   Ú<module>   s$   ÿ     !