U
    Gvf                  	   @   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 ejdddd	d
ddg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methodlinearnearestslinearcubicquinticpchipc                   @   s  e Zd Zdd Zdd Zdd Zdd Zed	d
 Ze	j
ddddgdd Ze	j
deeddddgddddgddddggfeeddddgfgdd Zedd Zdd  Zd!d" Zd#d$ Ze	j
d%eddddgd&feddddgd'fed'd'd'd'gd'feddddgd(fedd)d*dgd+fgd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Ze	j
dd>d?gd@dA ZdBdC ZdDdE ZdFdG Z e	j
dHdIej!ej"ge	j
dd?d>gdJdK Z#e	j
dd>d?gdLdM Z$e	j
dd>d?gdNdO Z%edPdQ Z&dRdS Z'edTdU Z(edVdW Z)ee	j
dXdYdZgd[d\ Z*d]d^ Z+e	j
d_ej,ej-ej.ej/ge	j
d`ej,ej-gdadb Z0dIS )cTestRegularGridInterpolatorc                 C   s   dgd }t d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   
   d     npasarraynewaxisselfpointsvaluesvalues0values1Zvalues2Zvalues3 r(   D/tmp/pip-unpacked-wheel-96ln3f52/scipy/interpolate/tests/test_rgi.py_get_sample_4d   s    
z*TestRegularGridInterpolator._get_sample_4dc                 C   s   dgd dgd  }t d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 
Nr      )r         @      $@r   r   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 ddddd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   r1   r2   r3   r4   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_46   s    
z,TestRegularGridInterpolator._get_sample_4d_4c                 C   sv   |   \}}tddddgddddgddddgg}t|| |d}|| }t|||d}||}t|| d S )	N皙?r   ?皙??皙?r   r   )r5   r   r    r   tolistr   )r#   r   r$   r%   sampleinterpv1v2r(   r(   r)   test_list_inputA   s    
z+TestRegularGridInterpolator.test_list_inputr   r   r   r   c              	   C   s   |   \}}d}tjt|d t|||d W 5 Q R X t||}tddddgdddd	gd
d
d
d
gg}tjt|d |||d W 5 Q R X d S )Nzpoints in dimensionmatchr<   r7   r   r8   r9   r:   r;   r   )r6   pytestr   
ValueErrorr   r   r    )r#   r   r$   r%   rD   r?   r>   r(   r(   r)   test_spline_dim_errorR   s    

z1TestRegularGridInterpolator.test_spline_dim_errorzpoints_values, sampler7   r   r8   r9   r:   r;   r   r.         "@c                 C   sF   || \}}t ||dd}||}t ||dd}||}t|| d S )Nr   r<   r   )r   r   )r#   Zpoints_valuesr>   r$   r%   r?   r@   rA   r(   r(   r)   test_linear_and_slinear_closeb   s    z9TestRegularGridInterpolator.test_linear_and_slinear_closec           
      C   s   |   \}}|d|  }tddddgddddgddddgg}t|||d	}t||j|d	}t||j|d	}||}||d
||  }	t||	 d S )N               @r7   r   r8   r9   r:   r;   r   r<                 ?)r5   r   r    r   realimagr   )
r#   r   r$   r%   r>   r?   ZrinterpZiinterpr@   rA   r(   r(   r)   test_complexx   s    
z(TestRegularGridInterpolator.test_complexc           
      C   s   ddddgddddg }}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rtd S )N   r,      r   ij)indexingc                 S   s   | d |d  S )Nr   r(   xyr(   r(   r)   <lambda>       zATestRegularGridInterpolator.test_cubic_vs_pchip.<locals>.<lambda>r   r<   r   r1   +=r   )atolZrtol)r   meshgridr   ZallcloseAssertionError)
r#   rT   rU   xgygr%   r   r   Z
vals_cubicZ
vals_pchipr(   r(   r)   test_cubic_vs_pchip   s    z/TestRegularGridInterpolator.test_cubic_vs_pchipc                 C   s>   |   \}}t||}tddddg}d}t||| d S )Nr7   r.   rH   H@r/   r   r   r    r   r#   r$   r%   r?   r>   wantedr(   r(   r)   test_linear_xi1d   s
    
z,TestRegularGridInterpolator.test_linear_xi1dc                 C   s`   |   \}}t||}tddddgddddgddddgg}tdd	d
g}t||| d S )Nr7   r   r8   r9   r:   r;   r   r_   皙q@     \@r*   r   r   r    r   ra   r(   r(   r)   test_linear_xi3d   s    

z,TestRegularGridInterpolator.test_linear_xi3dzsample, wantedg     0@r        \@皙?g333333?g     |@c                 C   s,   |   \}}t||dd}t||| d S )Nr   r<   )r*   r   r   )r#   r>   rb   r$   r%   r?   r(   r(   r)   test_nearest   s    z(TestRegularGridInterpolator.test_nearestc                 C   sT   |   \}}t||}tddddgddddgg}tddg}t||| d S )Nr   r   rh   rf   ra   r(   r(   r)   test_linear_edges   s
    
z-TestRegularGridInterpolator.test_linear_edgesc                 C   s   ddg}t dddg}|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|| dddg}ttt|| ddg}ttt||d	d
 d S )Nr   )r   r   r   r   r   r   r   )r   )r   r   g      ?r   undefmethodr<   )r   r    r!   assert_raisesrF   r   )r#   r$   r%   r&   r'   r(   r(   r)   test_valid_create   s     

z-TestRegularGridInterpolator.test_valid_createc                 C   s   |   \}}t||}tddddgddddgg}tt||d tdddgdddgg}tt|| tddddgddddgg}tt|| d S )Nr   r   rl   皙?)r*   r   r   r    rm   rF   )r#   r$   r%   r?   r>   r(   r(   r)   test_valid_call   s    
z+TestRegularGridInterpolator.test_valid_callc              	   C   s   |   \}}t||dd d}tddddgddddgddddgddddgg}td	d
ddg}t||dd| tddddg}t||dd| d S )NFbounds_error
fill_value皙ro       @皙r   rh         &@r   r<   gfffff[gfffff@g     gr   rf   ra   r(   r(   r)   test_out_of_bounds_extrap   s    
 
z5TestRegularGridInterpolator.test_out_of_bounds_extrapc              	   C   s   |   \}}t||dd d}tddddgddddgddddgddddgg}td	d
d
d
g}t||dd| tddddg}t||dd| d S )NFrq   rt   ro   ru   rv   rw   rx   r   ry   r   r<   g333333(g33333`@g     gyXr   r`   ra   r(   r(   r)   test_out_of_bounds_extrap2   s    
 
z6TestRegularGridInterpolator.test_out_of_bounds_extrap2c                 C   s   |   \}}t||dtjd}tddddgddddgddddgg}ttjtjtjg}t||dd| t||d	d| td
d
ddgdd
ddgddddgg}tdddg}t||| d S )NFrq   rt   ro   rv   rw   r   r<   r   r7   r   r8   r9   r:   r;   r   r_   rd   re   )r*   r   r   nanr    r   ra   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ddddgd	dd
dgddddgg}t|||| d S )Nr   r<   c                 S   s   g | ]}|qS r(   r(   .0pr(   r(   r)   
<listcomp>   s     zJTestRegularGridInterpolator.test_nearest_compare_qhull.<locals>.<listcomp>r7   r   r8   r9   r:   r;   r   )	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ddddgdddd	gd
d
d
d
gg}t|||| d S )Nc                 S   s   g | ]}|qS r(   r(   r~   r(   r(   r)   r     s     zITestRegularGridInterpolator.test_linear_compare_qhull.<locals>.<listcomp>r   r7   r   r8   r9   r:   r;   r   )	r*   r   r   r   r   r    r   r   r   r   r(   r(   r)   test_linear_compare_qhull  s    





z5TestRegularGridInterpolator.test_linear_compare_qhullr   r   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,      rO      r   r   r<   ri   ffffff?)r   linspaceMyValuer   _vr   )r#   r   rT   rU   r%   r?   r@   rA   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   rO   r   rs   y      ?       @)r   randomseedr   randr   rm   rF   )r#   rT   rU   r%   r(   r(   r)   test_invalid_fill_value  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   .  s     zCTestRegularGridInterpolator.test_fillvalue_type.<locals>.<listcomp>r   r   )r   onesshaper   )r#   r%   r$   r(   r(   r)   test_fillvalue_type+  s    
z/TestRegularGridInterpolator.test_fillvalue_typec                 C   sT  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dddgdd t|t ddgddgddggdddg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(   rS   r(   r(   r)   f7  s    z;TestRegularGridInterpolator.test_length_one_axis.<locals>.frO   r   rQ   TrR   sparser   Fe   r   rr   rs   r   r,         rX   rY   gffffff?333333@g333333@333333@ro   333333?g      '@g?g      )@V瞯<r1   gffffff?r   g?gffffff@rP   )r   r   rZ   r   r   arrayrs   )r#   r   rT   rU   datar?   r(   r(   r)   test_length_one_axis3  sJ          z0TestRegularGridInterpolator.test_length_one_axisrs   Nc                 C   s   |d|d}t ddt j d}t |}t|f|d d  f|}t|dgf|d d d f f|}t ddt j d d}||}	t d}
|t ||
gj}t||	 t 	d}
|t ||
gj}|d krt||	 n
t|| d S )	NFrs   rr   r   r   r,   r   r   rO   r   )
r   r   pisinr   zerosvstackTr   r   )r#   rs   r   optionsrT   zfaZfbZx1aZzaZy1bZzbr(   r(   r)   test_length_one_axis2^  s"    
 


z1TestRegularGridInterpolator.test_length_one_axis2c           	   	   C   s  t dddgfdddgdd|d}t|tjgs6ttjd	}|jd
dd }|jd
ddk}tj||< tjdd ||}W 5 Q R X t|| tj t||  |||   dddg}dg}t	d}t ||f|dd|d}t|tjdgstt|dtjgstd S )NrO   r,   rP   r   r   r   Fr      lJ r   sizer   r   ignoreinvalid)rP   rO   )
r   r   isnanr|   r[   r   default_rngerrstater   r   )	r#   r   r   rngrT   iresrU   r   r(   r(   r)   test_nan_x_1dz  s,     


 z)TestRegularGridInterpolator.test_nan_x_1dc              	   C   sz  t dddgt dddg }}dd }t j||dd	d
\}}|||}t||f||dd}t jdd |dt jgddgg}	W 5 Q R X t|	d ddd t |	d st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 5 Q R X t|	| t j t|	|  |||   d S )Nr   rO   r,   rP   r   c                 S   s   | d |d  S Nr,   r(   rS   r(   r(   r)   r     s    z4TestRegularGridInterpolator.test_nan_x_2d.<locals>.frQ   Tr   Fr   rr   r   r   r1   rX   r   r   r   r   r      r   )r   r   rZ   r   r   r|   r   r   r[   r   r   r   r   )r#   r   rT   rU   r   r\   r]   r   r?   r   r   i1i2r   r   r(   r(   r)   test_nan_x_2d  s2    "

  

z)TestRegularGridInterpolator.test_nan_x_2dc                 C   s   dd }t ddd}t ddd}t ddd	}|||f}|t j|d
dd }t|||d}t dddgdddgg}	||	}
|d d d }|d d d }|d d d }|||f}|t j|d
dd }t|||d}||	}t|
| d S )Nc                 S   s   d| d  d|d   | S Nr,   rP   r(   )rT   rU   r   r(   r(   r)   val_func_3d  s    zGTestRegularGridInterpolator.test_descending_points.<locals>.val_func_3drO   r   r   r      	   !   rQ   Tr   r<   rv   @g @ffffff
@@gffffff@r   )r   r   rZ   r   r   r   )r#   r   r   rT   rU   r   r$   r%   Zmy_interpolating_functionptscorrect_resultZx_descendingZy_descendingZz_descendingpoints_shuffledvalues_shuffledtest_resultr(   r(   r)   test_descending_points  s8    

  z2TestRegularGridInterpolator.test_descending_pointsc              	   C   sz   dd }t dddddg}t dddddg}||f}|t j|d	d
d }d}tjt|d t|| W 5 Q R X d S )Nc                 S   s   d| d  d|d   S r   r(   rS   r(   r(   r)   val_func_2d  s    zJTestRegularGridInterpolator.test_invalid_points_order.<locals>.val_func_2dr   r2   r         @      @r4   rQ   Tr   (must be strictly ascending or descendingrC   )r   r   rZ   rE   r   rF   r   )r#   r   rT   rU   r$   r%   rD   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s2td S )Nr   Fr   r   )r   r   r   r   r   r[   )r#   r   r?   r(   r(   r)   test_fill_value  s
     z+TestRegularGridInterpolator.test_fill_valuec                 C   s   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}||| qht |	ddd}
t
||
d|d d S )Nr   r   r   r1   r2   r3   r,   r   r-   r.         .@r         9@r   r   r   r   r   r   r   rP   r   Fr   r   rP   r   err_msgr   .rO   r   rX   rY   r   )r   r   r   r   r   r   rangeappendr   	transposer   )r#   r   r$   r   r%   r>   r?   vvsjrA   r(   r(   r)   test_nonscalar_values  s,    

z1TestRegularGridInterpolator.test_nonscalar_valuesflip_pointsFTc                 C   s   ddddg}|rdd |D }t jd}d}|d|}|d}t|||dd}||}	|	jd|ksptt |jdd  }
t|jd D ]B}t|jd D ].}t||d||f |dd}|||
||f< qqt j|
dd}t	|	|d|d d S )Nr   r0   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     s     zGTestRegularGridInterpolator.test_nonscalar_values_2.<locals>.<listcomp>r   rP   r,   r   r   r   r   r   Fr   rO   r   .r   ZaxisrX   r   )r   r   r   r   )rO   
r   r   r   r   r   r[   emptyr   Zexpand_dimsr   )r#   r   r   r$   r   trailing_pointsr%   r>   r?   r   r   r   r   rA   r(   r(   r)   test_nonscalar_values_2	  s4    
z3TestRegularGridInterpolator.test_nonscalar_values_2c                 C   s   d}ddg}t jd}d}|d|}|d}t|||d	d
}||}|jd|ks^tt |jdd  }	t|jd D ]B}
t|jd D ].}t||d|
|f |d	d
}|||	|
|f< qqt j|	dd}t	||d|d d S )Nr   r   r0   r   )rP   r   r   r   r,   Fr   rO   r   r   .r   r   rX   r   )r   r   )rO   r   )r#   r   r$   r   r   r%   r>   r?   r   r   r   r   rA   r(   r(   r)   test_nonscalar_values_linear_2D0  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(   rS   r(   r(   r)   r   V  s    z:TestRegularGridInterpolator.test_float32_values.<locals>.frO   r   r   r   r   rQ   Tr   rv   r   r   r   r   g Y`@g{,c@gHz>r   )r   r   rZ   Zastyper   r   r   )r#   r   r  r   rT   rU   r\   r]   r   r?   r   r(   r(   r)   test_float32_valuesO  s    


z/TestRegularGridInterpolator.test_float32_values)1__name__
__module____qualname__r*   r/   r5   r6   parametrize_rgi_interp_methodsrB   rE   markparametrizerG   r   r    rI   rN   r^   rc   rg   rj   rk   rn   rp   rz   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      s   










+

$


%r   c                   @   s0   e Zd ZdZdd Zdd Zdd Z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__q  s    zMyValue.__init__c                 C   s
   | j | S r   )r   )r#   idxr(   r(   r)   __getitem__v  s    zMyValue.__getitem__c                 C   s   d S r   r(   r#   r(   r(   r)   __array_interface__y  s    zMyValue.__array_interface__c                 C   s   t dd S )NzNo array representation)RuntimeErrorr  r(   r(   r)   	__array__|  s    zMyValue.__array__N)r  r  r  __doc__r  r  r  r  r(   r(   r(   r)   r   l  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ejd#d$d%gd&d' Zed(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Z ejd8d9d:gd;d< Z!d=S )>TestInterpNc                 C   s   t ddddddg}t ddddddg}t ddddddgddddddgddd	dddgddddddgddddddgddddddgg}|||fS )
Nr   r2   r4   r   r   g      @rO   r,   rP   )r   r   )r#   rT   rU   r   r(   r(   r)   _sample_2d_data  s    
zTestInterpN._sample_2d_datac              
   C   s   |   \}}}t|||}tdddddddgddddd	d
dggj}tt||f||dd||d d df |d d df  d S )NrO   ffffff@r   r   r   333333?rP   r   r-   r   	splinef2dr<   r   )r  r
   r   r   r   r   r	   ev)r#   rT   rU   r   lutxir(   r(   r)   test_spline_2d  s    "zTestInterpN.test_spline_2dc              
   C   s   |   \}}}tdddddddgddddd	d
dggj}t||f|||d}t| | f| | |d}t|||d d S )NrO   r  r   r   r   r  rP   r   r-   r   r<   r   )r  r   r   r   r	   r=   r   )r#   r   rT   rU   r   r  r@   rA   r(   r(   r)   rB     s       zTestInterpN.test_list_inputc                 C   s  t dddddg}t dddddg}t dddddgdddddgdddddgdddddgdddddgg}t|||}t dd	d
ddddgdddddddg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   r2   r4   r   r   rO   r,   rP   r  r   r   r        r-   r   r  FR?@r   r   r   )	r   r   r
   r   r	   r  r   rm   rF   )r#   rT   rU   r   r  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 d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 r+   r   r"   r(   r(   r)   _sample_4d_data  s    zTestInterpN._sample_4d_datac                 C   sL   |   \}}t||}tddddgg}t|||dd}t||| d S )Nr7   r.   rH   r   r<   r#  r   r   r    r	   r   r#   r$   r%   Z	interp_rgr>   rb   r(   r(   r)   test_linear_4d  s
    
zTestInterpN.test_linear_4dc                 C   sF   |   \}}tddddgg}d}t|||dddd}t|| d S )	Nr7   rt   333333$@rH   r  r   Fr   r#  r   r    r	   r   r#   r$   r%   r>   rb   r   r(   r(   r)   test_4d_linear_outofbounds  s    
 z&TestInterpN.test_4d_linear_outofboundsc                 C   sP   |   \}}t||dd}tddddgg}t|||dd}t||| d S )Nr   r<   r7   r.   rH   r$  r%  r(   r(   r)   test_nearest_4d  s
    zTestInterpN.test_nearest_4dc                 C   sF   |   \}}tddddgg}d}t|||dddd}t|| d S )	Nr7   rt   r'  rH   r  r   Fr   r(  r)  r(   r(   r)   test_4d_nearest_outofbounds  s    
 z'TestInterpN.test_4d_nearest_outofboundsc                 C   sX   |   \}}tddddg}t|||dd}t|||d d d f dd}t|| d S )Nr7   r.   rH   F)rr   )r#  r   r    r	   r   r#   r$   r%   r>   r@   rA   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,   rP   r   r   Fr   r,   rP   r   )
r#  r   r   r   r   r	   r   r   r   r   r-  r(   r(   r)   
test_xi_nd  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   rO   r,   rP   Fr   r/  )r  r   r   r	   r   r   rZ   Zc_r   Zravelr   r   )r#   r   rT   rU   r%   r$   r  yir>   r@   ZxxyyrA   r(   r(   r)   test_xi_broadcast  s      zTestInterpN.test_xi_broadcastc                    s   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   Fr   r   r   c              	      s&   g | ]}t d |f  ddqS .Fr   r	   )r   r   r   r$   r>   r%   r(   r)   r     s   z5TestInterpN.test_nonscalar_values.<locals>.<listcomp>r   rO   r   rX   r   )
r   r   r   r	   r   r   r   r   r   r   )r#   r   r   r   r   rA   r(   r6  r)   r     s"    


z!TestInterpN.test_nonscalar_valuesc                    s   ddddgt jd}d}|d||dt dd}|jd|ksXt fddtjd D }t|t |j	d d d S )Nr   r0   r   r   r   r   r   r   r   r   r   Fr   rO   c                    s0   g | ](  fd dt jd D qS )c              	      s(   g | ] }t d | f ddqS r4  r5  )r   r   )r   r   r$   r>   r%   r(   r)   r   :  s   zBTestInterpN.test_nonscalar_values_2.<locals>.<listcomp>.<listcomp>r   )r   r   )r   r6  )r   r)   r   :  s   z7TestInterpN.test_nonscalar_values_2.<locals>.<listcomp>r   rX   r   )r   r   r   r   )rO   )
r   r   r   r	   r   r[   r   r   r    r   )r#   r   r   r   r   r   r(   r6  r)   r  $  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   rP   r   r   r   r   r  r<   )r#  r   r   r   r   rm   rF   r	   )r#   r$   r%   r>   r(   r(   r)    test_non_scalar_values_splinef2dA  s    z,TestInterpN.test_non_scalar_values_splinef2dc              
   C   s   |   \}}}||f}|d|  }tdddddddgdddd	d
ddggj}t||||d}t||j||d}t||j||d}	|d|	  }
t||
 d S )NrJ   rO   r  r   r   r   r  rP   r   r-   r   r<   rK   )r  r   r   r   r	   rL   rM   r   )r#   r   rT   rU   r%   r$   r>   r@   Zv2rZv2irA   r(   r(   r)   rN   K  s    zTestInterpN.test_complexc              
   C   sx   |   \}}}||f}|d|  }tdddddddgdddd	d
ddggj}ttj t|||dd W 5 Q R X d S )NrJ   rO   r  r   r   r   r  rP   r   r-   r   r  r<   )r  r   r   r   r   ZComplexWarningr	   )r#   rT   rU   r%   r$   r>   r(   r(   r)   test_complex_spline2fdZ  s    z"TestInterpN.test_complex_spline2fdr   r   r   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   rO   r   r   ri   r   r<   )r   r   r   r	   r   r   )r#   r   rT   rU   r%   r@   rA   r(   r(   r)   r   e  s    z"TestInterpN.test_duck_typed_valuesc                 C   sz   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}t|| d S )Nr   r,   r   rO   r   rP   r<   )r   r   r   r   r   r	   r    r   )r#   r   rT   rU   r%   r>   r@   rA   r(   r(   r)   test_matrix_inputs  s    zTestInterpN.test_matrix_inputc                 C   s   t dddgg}t ddgddgddgg}tdgddd	gf||}d
ddg}t||dd t ddgddgddgg}tdgddd	gf||dd d}t||dd d S )Nr7   rO   r   g@g	@gffffff@r,   rP   r   gQ?gffffff@gffffff @r   r   ro   r1   gffffffFrq   )r   r   r	   r   )r#   r%   r  r   rb   r(   r(   r)   r     s     z TestInterpN.test_length_one_axisc              	   C   s  dd }t ddddg}t dddd	g}t dddd	g}t dd
ddg}||||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(   )rT   rU   r   ar(   r(   r)   value_func_4d  s    z9TestInterpN.test_descending_points.<locals>.value_func_4dr   rO   r,   rP   r   r   r   r7   r9   r   rQ   Tr   r   r   )r   r   rZ   r   r   r	   r   )r#   r;  x1Zx2Zx3Zx4r$   r%   r   r   Z
x1_descendZ
x2_descendZ
x3_descendZ
x4_descendr   r   r   r(   r(   r)   r     s.    z"TestInterpN.test_descending_pointsc                 C   s   t dddddg}t dddddg}t dddddgdddddgddd	ddgdddddgdddddgg}t dd
ddddd	gddddddd	ggj}d}tjt|d t||f|| W 5 Q R X d S )Nr   r2   r   r   r   r4   rO   r,   rP   r  r   r   r  r  r-   r   r   rC   )r   r   r   rE   r   rF   r	   )r#   rT   rU   r   r  rD   r(   r(   r)   r     s    ( z%TestInterpN.test_invalid_points_orderc              	   C   sD   dg}ddg}t d}d}tt|d t||| W 5 Q R X d S )N)r   rO   r   rO   )rO   rO   rP   zaThe requested sample points xi have dimension 3, but this RegularGridInterpolator has dimension 1rC   )r   r   rm   rF   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 ddd	g}|D ]}d
|j_qRd
|j_d
|j_t||| t||| d S )Nr   r   r   r   r   r   r   r   Gz@(\@ffffff?Fr   r   r   r   flagsZ	writeabler	   r   )r#   rT   rU   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   r@  rA  FrC  )r#   rT   rU   r$   r%   rE  rF  r(   r(   r)   test_2d_readonly_grid  s    

z!TestInterpN.test_2d_readonly_gridc                 C   s   t ddd}t |t |fj d d df }|jjr@tt ddd}t ddd}|||f}t 	d}t 
ddd	g}t||| t||| d S )
Nr   r   r   r   r   r?  r@  rA  rB  )r   r   r   Z
empty_liker   copyrD  c_contiguousr[   r   r   r	   r   )r#   rT   rU   r   r$   r%   rE  r(   r(   r)   test_non_c_contiguous_grid  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  r@  rA  )r   r   r   r   r	   r   )r#   r   rT   rU   r$   r%   rE  r(   r(   r)   test_endianness  s    zTestInterpN.test_endiannessN)"r  r  r  r  r  r  rB   r"  r#  r&  r*  r+  r,  r.  r0  r3  r   r  r7  rN   r8  rE   r	  r
  r   r9  r   r   r   r>  rG  rI  rL  rM  r(   r(   r(   r)   r    sL   	

		








r  )r   rE   Znumpyr   Znumpy.testingr   r   r   r   r   r   rm   Zscipy.interpolater   r	   r
   r   r   Zscipy.sparse._sputilsr   r	  r
  r  r   r   r  r(   r(   r(   r)   <module>   s"        \