o
    iŴ                     @   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values1Zvalues2Zvalues3 r%   Z/home/kim/smarthome/.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皙?r7   r   ?皙?r7   g?g?r   r   r   r   r   )r4   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<   r6   r9   r;   )r5   pytestr   
ValueErrorr   r   r   )r    r   r!   r"   rG   r?   r>   r%   r%   r&   test_spline_dim_errorY   s   
"z1TestRegularGridInterpolator.test_spline_dim_errorzpoints_values, sampler6   r9   r;   r7   r7   r-         "@c                 C   sF   || \}}t ||dd}||}t ||dd}||}t|| d S )Nlinearr<   slinear)r   r   )r    Zpoints_valuesr>   r!   r"   r?   r@   rA   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 )Nr6   r9   r;   rN   r<      )nu)rP   r   r   r   )r   rP   rP   V瞯<atol)r   rP   r   r   )r-   r   r   )r   rP   rP   r   )r   r   r   g-=)r'   r   arrayr   assert_raisesrI   r   r   )r    r!   r"   r>   r?   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 )	NrE   *pchip does not make sense for complex data               @r6   r9   r;   r<                 ?)	rH   skipr4   r   r   r   realimagr   )
r    r   r!   r"   r>   r?   ZrinterpZiinterpr@   rA   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)rP   r+      r   ij)indexingc                 S   s   | d |d  S )Nr   r%   xyr%   r%   r&   <lambda>       zATestRegularGridInterpolator.test_cubic_vs_pchip.<locals>.<lambda>rC   r<   rE   r0   r+   +=r   rT   rtol)r   meshgridr   Zallclose)
r    rc   rd   xgygr"   rC   rE   Z
vals_cubicZ
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 )NrK   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 )Nr6   r9   r;   rn   gq@g     \@r'   r   r   r   r   rp   r%   r%   r&   test_linear_xi3d   s   
z,TestRegularGridInterpolator.test_linear_xi3dzsample, wanted)r7   r7   r8   r8   g     0@)r7   r7   r7   r7   r   r   r   r   r   r   r   r   r        \@)r7   皙?g333333?r8   g     |@c                 C   s8   |   \}}t||dd}t|g}t||| d S )Nnearestr<   rt   )r    r>   rq   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 )Nrv   rw   r   rx   rt   rp   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   rV   rI   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 )Nrv   rw   r}   )r   r   r   )r   r   r   )r   r   r   皙?)r'   r   r   r   rV   rI   )r    r!   r"   r?   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   rx         &@r   rz   r<   )gfffff[gfffff@g     grM   rt   rp   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   rz   r<   )g333333(g33333`@g     gyXrM   ro   rp   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   rz   r<   rM   r6   r9   r;   rs   )r'   r   r   nanr   r   rp   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 )	Nrz   r<   c                 S      g | ]}|qS r%   r%   .0pr%   r%   r&   
<listcomp>  rf   zJTestRegularGridInterpolator.test_nearest_compare_qhull.<locals>.<listcomp>r6   r9   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g dg dg dg}t|||| d S )Nc                 S   r   r%   r%   r   r%   r%   r&   r   &  rf   zITestRegularGridInterpolator.test_linear_compare_qhull.<locals>.<listcomp>r   r6   r9   r;   )	r'   r   r   r   r   r   r   r   r   r   r%   r%   r&   test_linear_compare_qhull"  s   




z5TestRegularGridInterpolator.test_linear_compare_qhullrz   rM   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+      rP      r   r   r<   ry   ffffff?Fcheck_dtype)r   linspaceMyValuer   _vr   )r    r   rc   rd   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   rP   r   r   y      ?       @)r   randomseedr   randr   rV   rI   )r    rc   rd   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%   rb   r%   r%   r&   fU     z;TestRegularGridInterpolator.test_length_one_axis.<locals>.frP   r   r`   Tra   sparserM   Fe   r   r   r   r   )r1         rg   rS   gffffff?333333@)333333@333333@r   r   r   )r   Zcheck_shapeZcheck_0drT   333333?g      '@g?g      )@rR   r0   gffffff?rz   g?gffffff@r3   r   )r   r   rj   r   r   rU   r   r   )r    r   rc   rd   datar?   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   rP   r   )r   r   pisinr   ZzerosvstackTr   r   Z	full_like)r    r   r   optionsrc   zfaZfbZx1aZzaZy1bZ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)rP   r+   r_   r   rP   Fr      lJ r   sizer   r   ignoreinvalid)r_   rP   )
r   r   isnanr   r   default_rngerrstateallr   r   )	r    r   r   rngrc   iresrd   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   rP   r+   )rP   r_   r   c                 S   s   | d |d  S Nr+   r%   rb   r%   r%   r&   r     s   z4TestRegularGridInterpolator.test_nan_x_2d.<locals>.fr`   Tr   Fr   r   r   r   r0   rP   r1   rg   rS   r   r   r   r   r      r   r   )r   rU   rj   r   r   r   r   r   r   r   r   r   r   )r    r   rc   rd   r   rk   rl   r   r?   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+   r_   r%   rb   r%   r%   r&   re         z$TestRegularGridInterpolator.<lambda>r_   c                 C   s   d| d  d|d   | S r   r%   )rc   rd   r   r%   r%   r&   re     s    r   c                 C   s    d| d  d|d   | | S r   r%   rc   rd   r   ar%   r%   r&   re     s     r   c                 C   s$   d| d  d|d   | ||  S r   r%   )rc   rd   r   r   br%   r%   r&   re     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   >   rD   rC   z-too slow; OOM (quintic); or nearly so (cubic)*   rP   r   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   r<   c                 S   s   g | ]	}|d d d qS )Nr   r%   )r   xir%   r%   r&   r     s    )
rH   r[   r   r   r   uniformrangerj   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    d S 1 s;w   Y  d S )
Nc                 S   r   r   r%   rb   r%   r%   r&   val_func_2d     zJTestRegularGridInterpolator.test_invalid_points_order.<locals>.val_func_2dr   r1   r         @      @r   r1   r3   r   r   r`   Tr   (must be strictly ascending or descendingrF   )r   rU   rj   rH   r   rI   r   )r    r   rc   rd   r!   r"   rG   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   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
}||}|jdks8J |g }tdD ]}	t||d|	f |d	d
}||| q>t	|
ddd}
t||
d|d d S )NrD   Way too slow.r   r   r   r0   r1   r2   r+   r   r,   r-         .@r         9@r   r   r   r   r   r   r   r_   r   Fr   r   r_   r   r   .rP   r   rg   rT   err_msg)rH   r[   r   r   r   r   r   r   appendrU   	transposer   )r    r   r!   r   r"   r>   r?   vvsjrA   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>   rD   rC   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   H  r   zGTestRegularGridInterpolator.test_nonscalar_values_2.<locals>.<listcomp>r   r_   r+   r   r   r   	   r   Fr   rP   r   .r   Zaxisrg   r  )rH   r[   r   r   r   r   r   emptyr   itemexpand_dimsr   )r    r   r  r!   r   trailing_pointsr"   r>   r?   r  r  r   r  rA   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 )NrM   r   r/   r   )r_   r   r   r   r+   Fr   rP   r  r   .r   r  rg   r  )
r   r   r   r   r   r  r   r  r  r   )r    r   r!   r   r  r"   r>   r?   r  r  r   r  rA   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%   rb   r%   r%   r&   r     r   z:TestRegularGridInterpolator.test_float32_values.<locals>.frP   r   r   r      r`   Tr   r   g@ffffff
@g@r   g Y`@g{,c@gHz>F)rT   ri   r   )r   r   rj   Zastyper   rU   r   )r    r   r   r   rc   rd   rk   rl   r   r?   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   r_   r   r`   Tr   c                 S      | S r   r%   rc   r%   r%   r&   re         z=TestRegularGridInterpolator.test_bad_solver.<locals>.<lambda>)solverrN   c                 S   r%  r   r%   r&  r%   r%   r&   re     r'  )r   r(  c                 S   r%  r   r%   r&  r%   r%   r&   re     r'  woof)r   r(  r)  r   )r   Zsolver_args)r   r   rj   rV   rI   r   	TypeError)r    rc   rd   rk   rl   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 )Nr6   r9   r;   )r   r7   r:   ry   rN   r<   rz   c                    s0   |j } | d  }||d |j |u sJ d S )Nr+   r<   )Z_spline)tidr?   Zspliner   methodsr>   r%   r&   	worker_fn  s   z?TestRegularGridInterpolator.test_concurrency.<locals>.worker_fnr   )r'   r   rU   r   r   )r    r!   r"   r?   r/  r%   r-  r&   test_concurrency  s   
z,TestRegularGridInterpolator.test_concurrency)6__name__
__module____qualname__r'   r.   r4   r5   parametrize_rgi_interp_methodsrB   rH   markparametrizerJ   r   r   rO   rW   r^   rm   rr   ru   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  Zfloat32Zfloat64Z	complex64Z
complex128r$  r+  thread_unsafer0  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)r1  r2  r3  __doc__r;  r=  r>  rA  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   r1   r3   r   r   g      @)rP   r+   rP   r+   rP   rP   )rP   r+   r_   r+   rP   rP   )rP   r+   r+   r+   rP   rP   )r   rU   )r    rc   rd   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rP   ffffff@r   r   r"  333333?r_   rP   r"  rG  r   r,   r   r_   	splinef2dr<   r   rP   )rD  r
   r   rU   r   r   r	   ev)r    rc   rd   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 )NrE  rH  r<   )r  )rD  r   rU   r   r	   r=   r   )r    r   rc   rd   r   r   r@   rA   r%   r%   r&   rB     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   rP   r+   rP   r+   rP   rP   r+   r_   r+   rP   rP   r+   r+   r+   rP   rP   rF  r   r   r"  rG  r_   rP   r"  rG  g      r,   r   r_   rI  FR?@r   r   rP   r+   r   )	r   rU   r
   r   r	   rJ  r   rV   rI   )r    rc   rd   r   rK  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 )NrK   rM   r<   rV  r   r   r   r	   r   r    r!   r"   Z	interp_rgr>   rq   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r7   r   g333333$@rL   rR  rM   Fr   rV  r   r   r	   r   r    r!   r"   r>   rq   rS  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 )Nrz   r<   rK   rW  rX  r%   r%   r&   test_nearest_4d6  s
   zTestInterpN.test_nearest_4dc                 C   rZ  )Nr[  rR  rz   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 )NrK   F)r   )rV  r   r   r	   r   r    r!   r"   r>   r@   rA   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+   r_   r   rz   Fr   r+   r_   r   )	rV  r   r   r   r   r	   r   r   r   rb  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   rP   r+   r_   Fr   rd  )rD  r   r   r	   r   rj   Zc_r   Zravelr   r   )r    r   rc   rd   r"   r!   r   yir>   r@   xxyyrA   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 )NrD   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   rP   r   rg   r  )rH   r[   r   r   r   r	   r   r   rU   r
  r   )r    r   r   r  r  rA   r%   rl  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>   rD   rC   r   r  r   r  r   r   r   r  r   Fr   rP   c                    s0   g | ]  fd dt jd D qS )c              	      s(   g | ]}t d | f ddqS rj  rk  )r   r   )r  r   r!   r>   r"   r%   r&   r     s    zBTestInterpN.test_nonscalar_values_2.<locals>.<listcomp>.<listcomp>r  )r   r   )r   rl  )r  r&   r     s
    
z7TestInterpN.test_nonscalar_values_2.<locals>.<listcomp>r   rg   r  )rH   r[   r   r   r   r	   r   r   r   r   r   )r    r   r   r  r  r  r%   rl  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   r_   r   r   r   r   rI  r<   )rV  r   r   r   r   rV   rI   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 )NrE   rX   rY   rE  rH  r<   rZ   )
rH   r[   rD  r   rU   r   r	   r\   r]   r   )r    r   rc   rd   r"   r!   r>   r@   Zv2rZv2irA   r%   r%   r&   r^     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 )NrY   rE  rH  r\   rF   rE   r<   )rD  r   rU   r   rH   r   rI   r	   r    rc   rd   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 )NrY   rE  rH  rI  r<   )rD  r   rU   r   r   r   r	   rn  r%   r%   r&   test_complex_spline2fd  s   

"z"TestInterpN.test_complex_spline2fdr   rM   rz   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   rP   r   r   ry   r   r<   Fr   )r   r   r   r	   r   r   )r    r   rc   rd   r"   r@   rA   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   rP   r   r_   r<   rD   g-C6
?g>rh   N)r   r   r   r   r   r	   r   r   )r    r   rc   rd   r"   r>   r@   rA   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)r7   rP   r   rP   g@g	@gffffff@)r+   r_   r   )gQ?gffffff@gffffff @rR   rS   r   r0   gffffffFr   )r   rU   r	   r   )r    r"   r   r   rq   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   rP   r+   r_   )r   r   r   r   )r   r7   r:   r   r`   Tr   r7   r   r   r   r   r   )r   rU   rj   r
  r   r	   r   )r    rr  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    d S 1 sKw   Y  d S )
Nr   r   rM  rN  rO  rP  rQ  r   rF   )r   rU   r   rH   r   rI   r	   )r    rc   rd   r   r   rG   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   rP   r   rP   )rP   rP   r_   zaThe requested sample points xi have dimension 3, but this RegularGridInterpolator has dimension 1rF   )r   r   rV   rI   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   rU   flagsZ	writeabler	   r   )r    rc   rd   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   ry  rz  Fr{  )r    rc   rd   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   rw  rx  )r   r   r   Z
empty_liker   r@  r|  c_contiguousr   rU   r	   r   )r    rc   rd   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  ry  rz  )r   r   r   rU   r	   r   )r    r   rc   rd   r!   r"   r}  r%   r%   r&   test_endiannesst  s   zTestInterpN.test_endiannessN)&r1  r2  r3  rD  rL  r4  rB   rU  rV  rY  r^  r`  ra  rc  re  ri  rH   r5  r7  r  r  rm  r^   r8  ro  rp  r6  r   r   rq  r   rt  r   rv  r  r  r  r  r%   r%   r%   r&   rC    sX    	


		


 






rC  )!r   rH   numpyr   Znumpy.testingr   Zscipy._lib._array_apir   r   r   Zscipy.conftestr   r   rV   Zscipy.interpolater   r	   r
   r   r   Zscipy.sparse._sputilsr   Zscipy._lib._utilr   Zscipy._lib._testutilsr   r5  r6  Z_ALL_METHODSr4  r   r   rC  r%   r%   r%   r&   <module>   s,         :