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mZm	Z	 d dl
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 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_warns)xp_assert_equalxp_assert_closeassert_array_almost_equal)skip_xp_invalid_arg)raises)RegularGridInterpolatorinterpnRectBivariateSplineNearestNDInterpolatorLinearNDInterpolator)matrix)ComplexWarning)_run_concurrent_barrier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	j
'dNee	j
dOdPdQdR fdSdTdR fdUdVdR fdWdXdR fgdYdZ Z(d[d\ Z)ed]d^ Z*e	j
'dWed_d` Z+ee	j
dadbdcgddde Z,dfdg Z-e	j
dhej.ej/ej0ej1ge	j
diej.ej/gdjdk Z2dldm Z3e	j
j4dndo Z5dGS )pTestRegularGridInterpolatorc                 C      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values1values2values3 r'   `/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/scipy/interpolate/tests/test_rgi.py_get_sample_4d      
z*TestRegularGridInterpolator._get_sample_4dc                 C      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   r   )Nr   r   r         ?       @      @      @r   r   r   r   r   r   r'   r'   r(   _get_sample_4d_32   r*   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_4=   r*   z,TestRegularGridInterpolator._get_sample_4d_4c                 C   sj   |   \}}tg dg dg dg}t|| |d}|| }t|||d}||}t|| d S )N皙?r9   r   ?皙?r9   g?g?r   r   r   r   r   )r6   r   r   r   tolistr   )r    r   r!   r"   sampleinterpv1v2r'   r'   r(   test_list_inputH   s   z+TestRegularGridInterpolator.test_list_inputr   )cubicquinticpchipc                 C   s   |   \}}d}tjt|d t|||d W d    n1 s!w   Y  t||}tg dg dg dg}tjt|d |||d W d    d S 1 sRw   Y  d S )Nzpoints in dimensionmatchr>   r8   r;   r=   )r7   pytestr   
ValueErrorr   r   r   )r    r   r!   r"   rI   rA   r@   r'   r'   r(   test_spline_dim_errorY   s   
"z1TestRegularGridInterpolator.test_spline_dim_errorzpoints_values, sampler8   r;   r=   r9   r9   r/         "@c                 C   sF   || \}}t ||dd}||}t ||dd}||}t|| d S )Nlinearr>   slinear)r   r   )r    points_valuesr@   r!   r"   rA   rB   rC   r'   r'   r(   test_linear_and_slinear_closei   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 s0w   Y  t||ddtg d	d
d t||ddtg dd
d t||ddtg ddd d S )Nr8   r;   r=   rP   r>      )nu)rS   r   r   r   )r   rS   rS   V瞯<atol)r   rS   r   r   )r/   r   r   )r   rS   rS   r   )r   r   r   g-=)r)   r   arrayr   assert_raisesrK   r   r   )r    r!   r"   r@   rA   r'   r'   r(   test_derivatives   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 )	NrG   *pchip does not make sense for complex data               @r8   r;   r=   r>                 ?)	rJ   skipr6   r   r   r   realimagr   )
r    r   r!   r"   r@   rA   rinterpiinterprB   rC   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rCJ d S )N)rS   r-      r   ij)indexingc                 S   s   | d |d  S )Nr   r'   xyr'   r'   r(   <lambda>       zATestRegularGridInterpolator.test_cubic_vs_pchip.<locals>.<lambda>rE   r>   rG   r2   r-   +=r   rW   rtol)r   meshgridr   allclose)
r    rh   ri   xgygr"   rE   rG   
vals_cubic
vals_pchipr'   r'   r(   test_cubic_vs_pchip   s   z/TestRegularGridInterpolator.test_cubic_vs_pchipc                 C   sB   |   \}}t||}tg d}tdg}t||| d S )NrM   H@r0   r   r   r   r   r    r!   r"   rA   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 )Nr8   r;   r=   rv   gq@g     \@r)   r   r   r   r   rx   r'   r'   r(   test_linear_xi3d   s   
z,TestRegularGridInterpolator.test_linear_xi3dzsample, wanted)r9   r9   r:   r:   g     0@)r9   r9   r9   r9   r   r   r   r   r   r   r   r   r        \@)r9   皙?g333333?r:   g     |@c                 C   s8   |   \}}t||dd}t|g}t||| d S )Nnearestr>   r|   )r    r@   ry   r!   r"   rA   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 )Nr~   r   r   r   r|   rx   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   undefmethodr>   )r   r   r   rY   rK   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 )Nr~   r   r   )r   r   r   )r   r   r   )r   r   r   皙?)r)   r   r   r   rY   rK   )r    r!   r"   rA   r@   r'   r'   r(   test_valid_call   s   
z+TestRegularGridInterpolator.test_valid_callc                 C      |   \}}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   r   r   r   r       @皙ir   r   r   r   )r   r         &@r   r   r>   )gfffff[gfffff@g     grO   r|   rx   r'   r'   r(   test_out_of_bounds_extrap      z5TestRegularGridInterpolator.test_out_of_bounds_extrapc                 C   r   )NFr   r   r   r   r   )r   r   r   r   r   r>   )g333333(g33333`@g     gyXrO   rw   rx   r'   r'   r(   test_out_of_bounds_extrap2   r   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   r   r>   rO   r8   r;   r=   r{   )r)   r   r   nanr   r   rx   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 )	Nr   r>   c                 S      g | ]}|qS r'   r'   .0pr'   r'   r(   
<listcomp>  rk   zJTestRegularGridInterpolator.test_nearest_compare_qhull.<locals>.<listcomp>r8   r;   r=   )	r)   r   	itertoolsproductr   r   reshaper   r   r    r!   r"   rA   points_qhullvalues_qhull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   r   r'   r'   r   r'   r'   r(   r   &  rk   zITestRegularGridInterpolator.test_linear_compare_qhull.<locals>.<listcomp>r   r8   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   rO   c                 C   st   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
d d S )Nr   r-      rS      r   r   r>   r   ffffff?Fcheck_dtype)r   linspaceMyValuer   _vr   )r    r   rh   ri   r"   rA   rB   rC   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   rS   r   r   y      ?       @)r   randomseedr   randr   rY   rK   )r    rh   ri   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   L  s    zCTestRegularGridInterpolator.test_fillvalue_type.<locals>.<listcomp>r   r   )r   onesshaper   )r    r"   r!   r'   r'   r(   test_fillvalue_typeI  s   
z/TestRegularGridInterpolator.test_fillvalue_typec                 C   sb  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t 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	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t d!d"gdd d S )#Nc                 S   s   | | S Nr'   rg   r'   r'   r(   fU     z;TestRegularGridInterpolator.test_length_one_axis.<locals>.frS   r   re   Trf   sparserO   Fe   r   r   r   r   )r3         rl   rV   gffffff?333333@)333333@333333@r   r   r   )r   check_shapecheck_0drW   333333?g      '@g?g      )@rU   r2   gffffff?r   g?gffffff@r5   r   )r   r   ro   r   r   rX   r   r   )r    r   rh   ri   datarA   r'   r'   r(   test_length_one_axisQ  sD     
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 rst||	 d S t|t 
|| d S )	NFr   r   r   r   r-   r   r   rS   r   )r   r   pisinr   zerosvstackTr   r   	full_like)r    r   r   optionsrh   zfafbx1azay1bzbr'   r'   r(   test_length_one_axis2}  s"   
$


z1TestRegularGridInterpolator.test_length_one_axis2c           	      C   s:  t g dfg ddd|d}t|tjgsJ tjd}|jddd	 }|jddd
k}tj||< tjdd ||}W d    n1 sIw   Y  t||  sYJ t||  |||   g d}dg}t	d}t ||f|dd|d}tt|tjdgsJ tt|dtjgsJ d S )N)rS   r-   rd   r   rS   Fr      lJ r   sizer   r   ignoreinvalid)rd   rS   )
r   r   isnanr   r   default_rngerrstateallr   r   )	r    r   r   rngrh   iresri   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 sIw   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 sw   Y  t |	|  sJ t|	|  |||  dd d S )N)r   rS   r-   )rS   rd   r   c                 S   s   | d |d  S Nr-   r'   rg   r'   r'   r(   r     s   z4TestRegularGridInterpolator.test_nan_x_2d.<locals>.fre   Tr   Fr   r   r   r   r2   rS   r3   rl   rV   r   r   r   r   r      r   r   )r   rX   ro   r   r   r   r   r   r   r   r   r   r   )r    r   rh   ri   r   rq   rr   r   rA   r   r   i1i2r   r   r'   r'   r(   test_nan_x_2d  s4   




"z)TestRegularGridInterpolator.test_nan_x_2dr   )ndimsfuncr-   c                 C      d| d  d|d   S Nr-   rd   r'   rg   r'   r'   r(   rj         z$TestRegularGridInterpolator.<lambda>rd   c                 C   s   d| d  d|d   | S r   r'   )rh   ri   r   r'   r'   r(   rj     s    r   c                 C   s    d| d  d|d   | | S r   r'   rh   ri   r   ar'   r'   r(   rj     s     r   c                 C   s$   d| d  d|d   | ||  S r   r'   )rh   ri   r   r   br'   r'   r(   rj     s   $ 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   >   rE   rF   z-too slow; OOM (quintic); or nearly so (cubic)*   rS   r   r-   r   c                    s   g | ]	}t  d qS )   )r   r   )r   _sample_high
sample_lowr'   r(   r     s    zITestRegularGridInterpolator.test_descending_points_nd.<locals>.<listcomp>re   Tr   r>   c                 S   s   g | ]	}|d d d qS )Nr   r'   )r   xir'   r'   r(   r     s    )
rJ   r^   r   r   r   uniformrangero   r   r   )r    r   r   r   r   test_pointsascending_pointsascending_valuesascending_interpascending_resultdescending_pointsdescending_valuesdescending_interp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    d S 1 s;w   Y  d S )
Nc                 S   r   r   r'   rg   r'   r'   r(   val_func_2d     zJTestRegularGridInterpolator.test_invalid_points_order.<locals>.val_func_2dr   r3   r         @      @r   r3   r5   r  r  re   Tr   (must be strictly ascending or descendingrH   )r   rX   ro   rJ   r   rK   r   )r    r  rh   ri   r!   r"   rI   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sJ d S )Nr   Fr   r   )r   r   r   r   r   )r    r   rA   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
}||}|jdks8J |g }tdD ]}	t||d|	f |d	d
}||| q>t	|
ddd}
t||
d|d d S )NrF   Way too slow.r   r   r   r2   r3   r4   r-   r   r.   r/         .@r         9@r   r   r   r   r   r   r   rd   r   Fr   r   rd   r   r   .rS   r   rl   rW   err_msg)rJ   r^   r   r   r   r   r   r
  appendrX   	transposer   )r    r   r!   r   r"   r@   rA   vvsjrC   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sFJ t|jdd  }
t|jd D ]#}t|jd D ]}t||d||f |dd}||	 |
||f< q`qWtj
|
dd}t|	|d|d d S )N>   rE   rF   r  r  r1   )r   r.   r/   r!  r   r"       A@      B@)	r   r.   r/   r!  r   r"  r0  r1  /   c                 S   s   g | ]}t t|qS r'   )tuplereversedr   r'   r'   r(   r   H  r   zGTestRegularGridInterpolator.test_nonscalar_values_2.<locals>.<listcomp>r   rd   r-   r   r   r   	   r   Fr   rS   r   .r   axisrl   r&  )rJ   r^   r   r   r   r   r   emptyr
  itemexpand_dimsr   )r    r   r.  r!   r   trailing_pointsr"   r@   rA   r*  r+  r   r,  rC   r'   r'   r(   test_nonscalar_values_28  s2   

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s4J t |jdd  }	t|jd D ]#}
t|jd D ]}t||d|
|f |d	d
}|| |	|
|f< qNqEt j|	dd}t	||d|d d S )NrO   r  r1   r   )rd   r   r   r   r-   Fr   rS   r7  r   .r   r8  rl   r&  )
r   r   r   r   r   r:  r
  r;  r<  r   )r    r   r!   r   r=  r"   r@   rA   r*  r+  r   r,  rC   r'   r'   r(   test_nonscalar_values_linear_2Dc  s0   
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d d S )Nc                 S   r   r   r'   rg   r'   r'   r(   r     r  z:TestRegularGridInterpolator.test_float32_values.<locals>.frS   r   r   r      re   Tr   r   g@ffffff
@g@r   g Y`@g{,c@gHz>F)rW   rn   r   )r   r   ro   astyper   rX   r   )r    r   r@  r   rh   ri   rq   rr   r   rA   ptsr'   r'   r(   test_float32_values  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 s7w   Y  tt t||f|d
dd d W d    n1 sWw   Y  tt t||f|d
dd dd W d    n1 sxw   Y  tt t||f|d
ddid W d    d S 1 sw   Y  d S )Nr   rd   r   re   Tr   c                 S      | S r   r'   rh   r'   r'   r(   rj         z=TestRegularGridInterpolator.test_bad_solver.<locals>.<lambda>)solverrP   c                 S   rF  r   r'   rG  r'   r'   r(   rj     rH  )r   rI  c                 S   rF  r   r'   rG  r'   r'   r(   rj     rH  woof)r   rI  rJ  r  )r   solver_args)r   r   ro   rY   rK   r   	TypeError)r    rh   ri   rq   rr   r   r'   r'   r(   test_bad_solver  s,   



"z+TestRegularGridInterpolator.test_bad_solverc                    sb   |   \}}tg dg dg dg dgt||dd}ddg  fdd	}td
|| d S )Nr8   r;   r=   )r   r9   r<   r   rP   r>   r   c                    s0   |j } | d  }||d |j |u sJ d S )Nr-   r>   )_spline)tidrA   spliner   methodsr@   r'   r(   	worker_fn  s   z?TestRegularGridInterpolator.test_concurrency.<locals>.worker_fnr   )r)   r   rX   r   r   )r    r!   r"   rA   rS  r'   rQ  r(   test_concurrency  s   
z,TestRegularGridInterpolator.test_concurrency)6__name__
__module____qualname__r)   r0   r6   r7   parametrize_rgi_interp_methodsrD   rJ   markparametrizerL   r   r   rR   rZ   rc   ru   rz   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	fail_slowr  r  r  r-  r>  r?  float32float64	complex64
complex128rE  rM  thread_unsaferT  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)NzNo array representation)RuntimeError)r    r   copyr'   r'   r(   	__array__  r   zMyValue.__array__)NN)rU  rV  rW  __doc__rc  re  rf  ri  r'   r'   r'   r(   r     s    r   c                   @   sH  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jdedd Zedd Zdd Zed d! Zejjd"d# Zejjd$d% Zejd&d'd(gd)d* Zeed+d, Zd-d. Zd/d0 Zd1d2 Z d3d4 Z!d5d6 Z"d7d8 Z#d9d: Z$ejd;d<d=gd>d? Z%d@S )A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   r3   r5   r  r  g      @)rS   r-   rS   r-   rS   rS   )rS   r-   rd   r-   rS   rS   )rS   r-   r-   r-   rS   rS   )r   rX   )r    rh   ri   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rS   ffffff@r   r   rB  333333?rd   rS   rB  ro  r  r.   r   rd   	splinef2dr>   r   rS   )rl  r
   r   rX   r   r   r	   ev)r    rh   ri   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 )Nrm  rp  r>   )r'  )rl  r   rX   r   r	   r?   r   )r    r   rh   ri   r   r  rB   rC   r'   r'   r(   rD     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  rS   r-   rS   r-   rS   rS   r-   rd   r-   rS   rS   r-   r-   r-   rS   rS   rn  r   r   rB  ro  rd   rS   rB  ro  g      r.   r   rd   rq  FR?@r   r   rS   r-   r   )	r   rX   r
   r   r	   rr  r   rY   rK   )r    rh   ri   r   rs  r  actualexpectedr'   r'   r(   test_spline_2d_outofbounds  s(   
$

z&TestInterpN.test_spline_2d_outofboundsc                 C   r+   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 )NrM   rO   r>   r~  r   r   r   r	   r   r    r!   r"   	interp_rgr@   ry   r'   r'   r(   test_linear_4d%  s
   
zTestInterpN.test_linear_4dc                 C   J   |   \}}tg dg}tdg}t|||dddd}t|| d S )Nr9   r   g333333$@rN   rz  rO   Fr   r~  r   r   r	   r   r    r!   r"   r@   ry   r{  r'   r'   r(   test_4d_linear_outofbounds-     
z&TestInterpN.test_4d_linear_outofboundsc                 C   sL   |   \}}t||dd}tg dg}t|||dd}t||| d S )Nr   r>   rM   r  r  r'   r'   r(   test_nearest_4d6  s
   zTestInterpN.test_nearest_4dc                 C   r  )Nr  rz  r   Fr   r  r  r'   r'   r(   test_4d_nearest_outofbounds>  r  z'TestInterpN.test_4d_nearest_outofboundsc                 C   sT   |   \}}tg d}t|||dd}t|||d d d f dd}t|| d S )NrM   F)r   )r~  r   r   r	   r   r    r!   r"   r@   rB   rC   r'   r'   r(   
test_xi_1dG  s
   zTestInterpN.test_xi_1dc                 C   sx   |   \}}tjd tjddd}t|||ddd}|jdks$J t|||d	dddd}t|||j d S )
Nr   r-   rd   r   r   Fr   r-   rd   r   )	r~  r   r   r   r   r	   r   r   r   r  r'   r'   r(   
test_xi_ndO  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}	|	jdks9J t||\}
}tj|
j |j f }t||||dd}t	|	|
|	j d S )Nr   rS   r-   rd   Fr   r  )rl  r   r   r	   r   ro   c_r   ravelr   r   )r    r   rh   ri   r"   r!   r  yir@   rB   xxyyrC   r'   r'   r(   test_xi_broadcast^  s    zTestInterpN.test_xi_broadcastr   c                    s    dkr	t d dgd dgd  tjd}|d|dt d	d
}|jdks5J   fddtdD }t|	ddd}t
||d d d S )NrF   r  r  r-   r   r   r#  r$  Fr   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   rS   r   rl   r&  )rJ   r^   r   r   r   r	   r   r
  rX   r)  r   )r    r   r   r*  r+  rC   r'   r  r(   r-  r  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s:J  fddtjd D }t|t	|j
d d d S )N>   rE   rF   r  r/  r   r5  r   r   r   r6  r   Fr   rS   c                    s0   g | ]  fd dt jd D qS )c              	      s(   g | ]}t d | f ddqS r  r  )r   r   )r,  r   r!   r@   r"   r'   r(   r     s    zBTestInterpN.test_nonscalar_values_2.<locals>.<listcomp>.<listcomp>r7  )r
  r   )r   r  )r,  r(   r     s
    
z7TestInterpN.test_nonscalar_values_2.<locals>.<listcomp>r   rl   r&  )rJ   r^   r   r   r   r	   r   r
  r   r   r   )r    r   r   r=  r*  r+  r'   r  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   rd   r   r   r   r   rq  r>   )r~  r   r   r   r   rY   rK   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 )NrG   r[   r\   rm  rp  r>   r]   )
rJ   r^   rl  r   rX   r   r	   r_   r`   r   )r    r   rh   ri   r"   r!   r@   rB   v2rv2irC   r'   r'   r(   rc     s   

zTestInterpN.test_complexc                 C   s~   |   \}}}||f}|d|  }tg dg dgj}tjtdd t|||dd W d    d S 1 s8w   Y  d S )Nr\   rm  rp  r_   rH   rG   r>   )rl  r   rX   r   rJ   r   rK   r	   r    rh   ri   r"   r!   r@   r'   r'   r(   test_complex_pchip  s   
"zTestInterpN.test_complex_pchipc                 C   sx   |   \}}}||f}|d|  }tg dg dgj}tt t|||dd W d    d S 1 s5w   Y  d S )Nr\   rm  rp  rq  r>   )rl  r   rX   r   r   r   r	   r  r'   r'   r(   test_complex_spline2fd  s   

"z"TestInterpN.test_complex_spline2fdr   rO   r   c                 C   sh   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
d d S )Nr   r-   r   rS   r   r   r   r   r>   Fr   )r   r   r   r	   r   r   )r    r   rh   ri   r"   rB   rC   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rDt||d	d
d dS t|| dS )z8np.matrix inputs are allowed for backwards compatibilityr   r-   r   rS   r   rd   r>   rF   g-C6
?g>rm   N)r   r   r   r   r   r	   r   r   )r    r   rh   ri   r"   r@   rB   rC   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)r9   rS   r   rS   g@g	@gffffff@)r-   rd   r   )gQ?gffffff@gffffff @rU   rV   r   r2   gffffffFr   )r   rX   r	   r   )r    r"   r  r   ry   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   rS   r-   rd   )r   r   r   r   )r   r9   r<   r   re   Tr   r9   r   r   r   r   r   )r   rX   ro   r)  r   r	   r   )r    r  x1x2x3x4r!   r"   rD  correct_result
x1_descend
x2_descend
x3_descend
x4_descendpoints_shuffledvalues_shuffled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    d S 1 sKw   Y  d S )
Nr  r  ru  rv  rw  rx  ry  r  rH   )r   rX   r   rJ   r   rK   r	   )r    rh   ri   r   r  rI   r'   r'   r(   r  3  s   
"z%TestInterpN.test_invalid_points_orderc                 C   sZ   dg}ddg}t d}d}tt|d t||| W d    d S 1 s&w   Y  d S )N)r   rS   r   rS   )rS   rS   rd   zaThe requested sample points xi have dimension 3, but this RegularGridInterpolator has dimension 1rH   )r   r   rY   rK   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_q(d|j_d|j_t||| t||| d S )	Nr   r   r   r   r   r   r   r   Gz@(\@gffffff?Fr   r   r   rX   flags	writeabler	   r   )r    rh   ri   r   r!   r"   pointdr'   r'   r(   test_readonly_gridI  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  r  Fr  )r    rh   ri   r!   r"   r  r  r'   r'   r(   test_2d_readonly_gridX  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   
empty_liker   rh  r  c_contiguousr   rX   r	   r   )r    rh   ri   r   r!   r"   r  r'   r'   r(   test_non_c_contiguous_gridg  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   r  r  r  )r   r   r   rX   r	   r   )r    r   rh   ri   r!   r"   r  r'   r'   r(   test_endiannesst  s   zTestInterpN.test_endiannessN)&rU  rV  rW  rl  rt  rX  rD   r}  r~  r  r  r  r  r  r  r  rJ   rY  r[  r-  r>  r  rc   r`  r  r  rZ  r   r   r  r   r  r  r  r  r  r  r  r'   r'   r'   r(   rk    sX    	


		


 






rk  )!r   rJ   numpyr   numpy.testingr   scipy._lib._array_apir   r   r   scipy.conftestr   r   rY   scipy.interpolater   r	   r
   r   r   scipy.sparse._sputilsr   scipy._lib._utilr   scipy._lib._testutilsr   rY  rZ  _ALL_METHODSrX  r   r   rk  r'   r'   r'   r(   <module>   s,         :