o
    Ebü                     @   s  d dl Zd dlmZ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mZmZ d dlmZmZ d dlmZmZmZmZmZmZmZmZmZ G dd dZ G d	d
 d
Z!G dd dZ"G dd dZ#G dd dZ$G dd dZ%G dd dZ&dddZ'dS )    N)assert_equalassert_almost_equalassert_array_equalassert_array_almost_equalassert_allclosesuppress_warnings)raises)arraydifflinspacemeshgridonespishape)bisplrepbisplev)	UnivariateSplineLSQUnivariateSplineInterpolatedUnivariateSplineLSQBivariateSplineSmoothBivariateSplineRectBivariateSplineLSQSphereBivariateSplineSmoothSphereBivariateSplineRectSphereBivariateSplinec                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%S )&TestUnivariateSplinec                 C   sj   g d}g d}t ||dd}t| ddg t| ddg t| d t|g dg d d S )N         )r   r   r   r   kr           r         ?r   r   r   	get_knots
get_coeffsr   get_residualselfxylut r.   G/usr/lib/python3/dist-packages/scipy/interpolate/tests/test_fitpack2.pytest_linear_constant      z)TestUnivariateSpline.test_linear_constantc                 C   s   g d}g d}t ||dd}d}tt|t|| tt|t||dd g d}tt|t|| tt|t||dd d S )Nr   r   r      r   r    r   )Znu)r$   r         @)r   r   r   )r*   r+   r,   r-   argr.   r.   r/   test_preserve_shape   s   z(TestUnivariateSpline.test_preserve_shapec                 C   sj   g d}g d}t ||dd}t| ddg t| ddg t| d t|g d	g d
 d S )Nr   r2   r   r    r   r   r3   r"   r#   )r   r   r   r%   r)   r.   r.   r/   test_linear_1d%   r1   z#TestUnivariateSpline.test_linear_1dc                 C   s@   G dd dt }|g dg ddd}t|ddgd	d	g d S )
Nc                   @   s   e Zd Zdd ZdS )z9TestUnivariateSpline.test_subclassing.<locals>.ZeroSplinec                 S   s   dt | S )Nr   )r	   )r*   r+   r.   r.   r/   __call__2   s   zBTestUnivariateSpline.test_subclassing.<locals>.ZeroSpline.__call__N)__name__
__module____qualname__r8   r.   r.   r.   r/   
ZeroSpline1   s    r<   r   r   r   r3      )r   r   r   r   r   r   r    r$   r4   r"   )r   r   )r*   r<   spr.   r.   r/   test_subclassing.   s   z%TestUnivariateSpline.test_subclassingc                 C   s4   g d}g d}t ||dd}t|g tg  d S )N)r   r   r>      	   )r   r3   rB         r   r    )r   r   r	   )r*   r+   r,   splr.   r.   r/   test_empty_input8   s   z%TestUnivariateSpline.test_empty_inputc                 C   sN   g d}g d}g d}t |||dd}tg d}t|g d|dd	 dS )
zRegression test for #1375.)      g<&g_g@7ѿg46	<ƿgBϠr"   gBϠ?g46	<?g@7?g_?g<&?      ?)rH   1\_#?~a?w?5??0ms?gx?rM   rL   rK   rJ   rI   rH   )   mBo!@u)	~@e?֭z@b@v5|@geSs@rS   rR   rQ   rP   rO   rN   N)r+   r,   ws)gJdv?gc?g=?gt?皙?      ??gGz?gMb@?atol)r   r	   r   )r*   r+   r,   rT   rE   Zdesiredr.   r.   r/   test_resize_regression?   s   z+TestUnivariateSpline.test_resize_regressionc           
   	   C   sP  t jdtd}|d }tddd}| }d|t |dk |d	k< | }|d |||d k < |d
 |||d
 k< ttfD ]}|||d}dD ]}t|||d|d dd t||||d||d dd qGdD ]}t|||d|d dd t||||d||d dd qidD ]}t	t
||fi t|d qdD ]}t|||d|d dd t||||d||d dd qq=| dd }	t|||	}t||dd|d dd t||dd|d dd t	t
||fi tdd t||dd|d dd dD ]#}t||}t	t
||fi t|d t	t
tfi t|||d qd S )Nr>   Zdtyper      d   r   r"         @r+   r,   )r   Zextrapolate)extgؗҜ<rZ   )r   zeros)r   raise)r   constr3   r   r   )rb   unknown)r+   r,   rd   )nparangefloatr   copyZ
logical_orr   r   r   assert_raises
ValueErrordictr&   r   )
r*   r+   r,   xpZxp_zerosZxp_clipclsrE   rd   tr.   r.   r/   test_out_of_range_regressionO   sF   """


z1TestUnivariateSpline.test_out_of_range_regressionc                 C   sF   t dd }t dd }t ddd}d}ttt||||d d S )Nr`   rH   r   c   
   )rb   e   bbox)ri   rj   r   rm   rn   r   )r*   ZxsZysZknotsrx   r.   r.   r/   test_lsq_fpchecx   s   
z$TestUnivariateSpline.test_lsq_fpchecc                 C   sx   t dddd }t |}t||dd}|dd}t|d|d |d}t|d|d	 |d	d d S )
Nr   r   F   r   rU   r   333333?g333333?皙?)ri   r   Zcosr   Zantiderivative
derivativer   integral)r*   r+   r,   rE   spl2r.   r.   r/   "test_derivative_and_antiderivative   s   


z7TestUnivariateSpline.test_derivative_and_antiderivativec                 C   sB   g d}g d}t ||ddd}g d}t| |ddd	 d S )
Nr   r   r3      g      !@)rX   皙??r4   r>   rg   r   )rd   r!   )rb   r   g      rB   g      #@ru   r   V瞯<rZ   )r   r   r~   )r*   x_valuesy_valuesfr+   r.   r.   r/   test_derivative_extrapolation   s
   z2TestUnivariateSpline.test_derivative_extrapolationc                 C   sT   t ddd}tdD ]}t||d|d}dD ]\}}t|||ddd	 qqd S )
Nr"   rH   rA   r3   r   )rU   rd   ))r   r   )r   r>   )r   r>   r   r   )r   )r   rb   r   rZ   )ri   r   ranger   r   r   )r*   r+   rd   r   abr.   r.   r/   test_integral_out_of_bounds   s   z0TestUnivariateSpline.test_integral_out_of_boundsc                 C   s,  t jdtd}|d }t |}t||dd}| dd }|d }t jt jt j fD ]g}||d< tt	tfi t
||dd tt	tfi t
||dd tt	tfi t
|||dd	 ||d< ||d< tt	tfi t
|||dd
 tt	tfi t
|||dd
 tt	tfi t
||||dd q,d S )Nru   r]   r   Tcheck_finiter3   rb   r+   r,   r   )r+   r,   rr   r   )r+   r,   rT   r   r+   r,   rr   rT   r   )ri   rj   rk   	ones_liker   r&   naninfrm   rn   ro   r   r   )r*   r+   r,   rT   rE   rr   Zy_endzr.   r.   r/   test_nan   s:   






zTestUnivariateSpline.test_nanc              	   C   s   t jdtd}|d }t jdtd}|d |d< |d }t |}t||dd}| dd }t|||ddd	 t||||dd
 tttfi t	||ddd ttt
fi t	||dd d S )Nru   r]   r   r   r   Tr   r3   )r+   r,   rT   rU   r   r   )r+   r,   rU   r   r   )ri   rj   rk   r   r   r&   r   rm   rn   ro   r   r*   ZxxZyyr+   r,   rT   rE   rr   r.   r.   r/   test_strictly_increasing_x   s    



z/TestUnivariateSpline.test_strictly_increasing_xc              
   C   s   t jdtd}|d }t jdtd}|d d |d< |d }t |}t||dd}| dd	 }tttfi t||dd
 ttt	fi t||dd
 ttt
fi t||||dd d S )Nru   r]   r   r   rH   r   Tr   r3   r   r   )ri   rj   rk   r   r   r&   rm   rn   ro   r   r   r   r.   r.   r/   test_increasing_x   s"   




z&TestUnivariateSpline.test_increasing_xc                 C   s  t t}g d}g d}t|| W d    n1 sw   Y  dt|jv s*J t t}g d}g d}g d}t|||d W d    n1 sLw   Y  dt|jv sZJ t t}d}t|||d	 W d    n1 srw   Y  d
t|jv sJ t t}t||dd W d    n1 sw   Y  dt|jv sJ t t}t||dd W d    n1 sw   Y  dt|jv sJ d S )Nr   rX   r   r   r4   !x and y should have a same lengthrX   r   r   r4   gffffff@rG   rH   rH   rH   rT   %x, y, and w should have a same lengthrb   rw   bbox shape should be (2,)r   r    k should be 1 <= k <= 5rG   r{   s should be s >= 0.0)rm   rn   r   strvaluer*   infor   r   w_valuesrx   r.   r.   r/   (test_invalid_input_for_univariate_spline   s4   




z=TestUnivariateSpline.test_invalid_input_for_univariate_splinec                 C   sL  t t}g d}g d}t|| W d    n1 sw   Y  dt|jv s*J t t}g d}g d}g d}t|||d W d    n1 sLw   Y  dt|jv sZJ t t}d}t|||d	 W d    n1 srw   Y  d
t|jv sJ t t}t||dd W d    n1 sw   Y  dt|jv sJ d S )Nr   r   r   r   r   r   r   rb   rw   r   r   r    r   )rm   rn   r   r   r   r   r.   r.   r/   5test_invalid_input_for_interpolated_univariate_spline   s,   



zJTestUnivariateSpline.test_invalid_input_for_interpolated_univariate_splinec                 C   s  g d}g d}t ||dd}| dd }tt}g d}g d}t||| W d    n1 s4w   Y  dt|jv sBJ tt}g d}g d}g d	}t||||d
 W d    n1 sew   Y  dt|jv ssJ tt}d}t||||d W d    n1 sw   Y  dt|jv sJ tt}d}t||||d W d    n1 sw   Y  dt|jv sJ tt}t|||dd W d    n1 sw   Y  dt|jv sJ d S )Nr   r   Tr   r   r3   r   r   )rH   rH   rH   rH   r   r   )r`   rw   z;Interior knots t must satisfy Schoenberg-Whitney conditionsrb   r   r   r    r   )r   r&   rm   rn   r   r   r   )r*   r   r   rE   Zt_valuesr   r   rx   r.   r.   r/   ,test_invalid_input_for_lsq_univariate_spline  s>   




zATestUnivariateSpline.test_invalid_input_for_lsq_univariate_splinec                 C   s   t g d}t g d}t g d}t ddg}t||||d}t| | | | d}t|g d|g d d S )Nr   r   )rH   rH   rH   rH   rH   r   r`   )r+   r,   rT   rx   rV   )ri   r	   r   tolistr   )r*   r   r   r   rx   spl1r   r.   r.   r/   test_array_like_input8  s   
z*TestUnivariateSpline.test_array_like_inputN)r9   r:   r;   r0   r6   r7   r@   rF   r\   rs   ry   r   r   r   r   r   r   r   r   r   r   r.   r.   r.   r/   r      s&    		
)

"r   c                   @   D   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )TestLSQBivariateSplinec           
   
   C   s   g d}g d}g d}d}d| d| g}d| d| g}t   }|td}t|||||ddd}	tt|d W d    n1 sDw   Y  t|	d	d	d
 d S )N	r   r   r   r   r   r   r   r   r   	r   r   r   r   r   r   r   r   r   	r   r   r   r   r   r   r   r   r   rW   r   r   
The coefficients of the splinekxkyr         @)r   recordUserWarningr   r   lenr   
r*   r+   r,   r   rU   txtysuprr-   r.   r.   r/   r0   J  s   z+TestLSQBivariateSpline.test_linear_constantc              
   C   s  g d}g d}g d}d}d| d| g}d| d| g}t  }|td t|||||ddd}W d    n1 s=w   Y  | \}}t|d d	 |dd  D ]i\}	}
t|d d	 |dd  D ]W\}}d
D ]P}dD ]K}|	d|  |
|  }|d|  ||  }||	|
 d|  d|  ||
|| d|   ||	|d|  |  ||
|| |  }t|||| qpqlqfqUd S )Nr   r   	r   rA      r   r3   rA   r   r   r3   rW   r   r   r   r   rb   )rW   rX   rY   )r|   皙?gffffff?)r   filterr   r   r&   zipr   )r*   r+   r,   r   rU   r   r   r   r-   ZxaxbZyaZybrr   rp   ypZzpr.   r.   r/   test_bilinearityX  s:   ""z'TestLSQBivariateSpline.test_bilinearityc              
   C   sV  g d}g d}t g d}d}d| d| g}d| d| g}t  }|td}t|||||ddd}	tt|d W d    n1 sFw   Y  |	 \}}|	||}
d	t|d d d f t|d d d f  |
d d
d d
f |
dd d d
f  |
d d
dd f  |
dd dd f   	  }t
|	|d |d
 |d |d
 | d S )N)	r   r   r   r   r   r   r   r   r   r   r   rW   r   r   r   r         ?rb   r   )r	   r   r   r   r   r   r   r&   r
   sumr   r   )r*   r+   r,   r   rU   r   r   r   r   r-   tztrpzr.   r.   r/   test_integralq  s*   
(N z$TestLSQBivariateSpline.test_integralc           
   
   C   s   g d}g d}g d}d}d| d| g}d| d| g}t   }|td}t|||||ddd}	tt|d W d    n1 sDw   Y  t|	g g td	 t|	g g d
dtd d S )Nr   r   r   rW   r   r   r   r   r   Fgridr   )	r   r   r   r   r   r   r   ri   re   r   r.   r.   r/   rF     s   z'TestLSQBivariateSpline.test_empty_inputc              
   C   s  d}d| d| g}d| d| g}t t$}tdd}tdd}tjdddd}t||||| W d    n1 s=w   Y  dt|jv sKJ t t,}tdd}tdd}tdd}tjddd	d}t||||||d
 W d    n1 s~w   Y  dt|jv sJ t t}tdd}t||||||d
 W d    n1 sw   Y  dt|jv sJ t t}d}	t||||||	d W d    n1 sw   Y  dt|jv sJ t t}t|||||ddd W d    n1 sw   Y  dt|jv sJ t t}
t|||||dd W d    n	1 s%w   Y  dt|
jv s4J t t}
t|||||dd W d    n	1 sNw   Y  dt|
jv s]J d S )NrW   r   r   rH         $@ru   Znum%x, y, and z should have a same length   r   (x, y, z, and w should have a same lengthrG   w should be positiver   r`   r   rw   bbox shape should be (4,)r   ;The length of x, y and z should be at least (kx+1) * (ky+1)r"   epseps should be between (0, 1))rm   rn   ri   r   r   r   r   )r*   rU   r   r   r   r+   r,   r   rT   rx   exc_infor.   r.   r/   test_invalid_input  sT   







z)TestLSQBivariateSpline.test_invalid_inputc              
   C   s  d}t d| d| g}t d| d| g}t dd}t dd}t dd}t dd}t g d}t C}	|	td}
t|||||||d}t| | | | | | |d}t|d	d	|d	d	 t	t
|
d
 W d    d S 1 sw   Y  d S )NrW   r   r   rH   r   )rH   r   rH   r   r   )rT   rx          @r   )ri   r	   r   r   r   r   r   r   r   r   r   )r*   rU   r   r   r+   r,   r   rT   rx   r   r   r   r   r.   r.   r/   r     s$   "z,TestLSQBivariateSpline.test_array_like_inputc           	      C   s   t jddddf \}}| }| }dt | }t ddd}t ddd}t }|td}t|||||}t	t
|d	 W d
   n1 sMw   Y  t|||dd| d
S )zkTest for the case when the input knot-location arrays in x and y are
        of different lengths.
        r   r`   r   rW   g     X@   !   r   r   NFr   )ri   Zmgridravelr   r   r   r   r   r   r   r   r   )	r*   r+   r,   r   r   r   r   r   r-   r.   r.   r/   test_unequal_length_of_knots  s   z3TestLSQBivariateSpline.test_unequal_length_of_knotsN)
r9   r:   r;   r0   r   r   rF   r   r   r   r.   r.   r.   r/   r   H  s    +r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestSmoothBivariateSplinec                 C   s   g d}g d}g d}t |||ddd}t| g dg df t| g d t| d t|g d	dd
gddgddgddgg d S )Nr   r   r   r   r   r   r   r   r   )r   r   r   r   r"   r#   r$   r   r   r   r&   r'   r   r(   r*   r+   r,   r   r-   r.   r.   r/   r0        .z.TestSmoothBivariateSpline.test_linear_constantc                 C   s   g d}g d}g d}t |||ddd}t| g dg df t| g d t| d t|g d	dd
gddgddgddgg d S )Nr   r   )	r   r   r   r   r   r   r3   r3   r3   r   r   r   )r   r   r3   r3   r"   r#   r$   r   r   r   r   r.   r.   r/   r7     r   z(TestSmoothBivariateSpline.test_linear_1dc              	   C   s4  g d}g d}t g d}t }|td t|||dddd}W d    n1 s,w   Y  g d}g d	}|||}d
t|d d d f t|d d d f  |d dd df |dd d df  |d ddd f  |dd dd f     }	t||d |d |d |d |	 t|||dddd}
t|
|d |d |d |d |	dd ||d d |d d }d
t|d d d d d f t|d d d d d f  |d dd df |dd d df  |d ddd f  |dd dd f     }	t||d |d |d |d |	 d S )N)	r   r   r   r   r   r   r3   r3   r3   r   r   z
The required storage spacer   r   )r   r   rU   )r   r   r3   r   r   rb   r   )Zdecimalr   )	r	   r   r   r   r   r
   r   r   r   )r*   r+   r,   r   r   r-   r   r   r   r   Zlut2r.   r.   r/   r     s6   
(N&"8N*z'TestSmoothBivariateSpline.test_integralc           
      C   s|   t ddd}t ddd}|| }t ddd}t ddd}t|||}t|||}t|||}|||}	t||	 d S )Nr   r   P   rb   r   r`   )ri   r   r   r   r   r   )
r*   r+   r,   r   xiyiZtckZres1Zinterp_Zres2r.   r.   r/   test_rerun_lwrk2_too_small  s   
z4TestSmoothBivariateSpline.test_rerun_lwrk2_too_smallc                 C   s  t t"}tdd}tdd}tjdddd}t||| W d    n1 s)w   Y  dt|jv s7J t t*}tdd}tdd}tdd}tjdddd}t||||d W d    n1 shw   Y  dt|jv svJ t t}td	d}t||||d W d    n1 sw   Y  d
t|jv sJ t t}d}t||||d W d    n1 sw   Y  dt|jv sJ t t}t|||ddd W d    n1 sw   Y  dt|jv sJ t t}t|||d	d W d    n	1 sw   Y  dt|jv sJ t t}t|||dd W d    n	1 s-w   Y  dt|jv s<J t t}t|||dd W d    n	1 sTw   Y  dt|jv scJ d S )NrH   r   ru   r   r   r   r   r   rG   r   r   rw   r   r   r   r{   r   r"   r   r   )rm   rn   ri   r   r   r   r   )r*   r   r+   r,   r   rT   rx   r   r.   r.   r/   r   &  sV   







z,TestSmoothBivariateSpline.test_invalid_inputc              	   C   s   t g d}t g d}t g d}t g d}t g d}t|||||ddd}t| | | | | ddd}t|d	d
|d	d
 d S )Nr   r   r   )	r   r   r   r   r   r   r   r   r   )rH   r   rH   r   r   )rT   rx   r   r   )rx   rT   r   r   rW   rX   )ri   r	   r   r   r   )r*   r+   r,   r   rT   rx   r   r   r.   r.   r/   r   R  s   z/TestSmoothBivariateSpline.test_array_like_inputN)	r9   r:   r;   r0   r7   r   r   r   r   r.   r.   r.   r/   r     s    

,r   c                   @   4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestLSQSphereBivariateSplinec                 C   s   d\}}t d|d  dd|d   |t }t d|d  dd|d   |d t }t|jd |jd f}|d d d }|d d d }|d d dd d df }t||\}	}
t|	 |
 |j ||}|| _|| _	||| _
| _d S )Nrz   Z   rX   r   r   r   r>   )r   r   r   r   r   r   r   Tlut_lsqdatanew_lonsnew_lats)r*   nthetanphithetaphir   knotstknotspZknotdatalatslonsr   r.   r.   r/   setup_methodb  s   $(z)TestLSQSphereBivariateSpline.setup_methodc                 C   s,   t | j d t| | j| j| j d S )Nr"   )r   r   r(   r   r   r   r   r*   r.   r.   r/   r0   t  s   z1TestLSQSphereBivariateSpline.test_linear_constantc                 C   8   t | g g td t | jg g ddtd d S Nr   Fr   r   )r   r   ri   re   r  r.   r.   r/   rF   y      z-TestLSQSphereBivariateSpline.test_empty_inputc              	   C   sn  d\}}t d|d  dd|d   |t }t d|d  dd|d   |d t }t|jd |jd f}|d d d }|d d d }tt'}t dd|d	t }	t|	|\}
}t|
 | |j	 || W d    n1 srw   Y  d
t
|jv sJ tt'}t dd|d	t }	t|	|\}
}t|
 | |j	 || W d    n1 sw   Y  d
t
|jv sJ tt)}t dd|d	d t }t||\}}t| | |j	 || W d    n1 sw   Y  dt
|jv sJ tt)}t dd|d	d t }t||\}}t| | |j	 || W d    n	1 s+w   Y  dt
|jv s:J t||\}}tt }t|}d|d< t| | |j	 || W d    n	1 siw   Y  dt
|jv sxJ tt }t|}t|d< t| | |j	 || W d    n	1 sw   Y  dt
|jv sJ tt }t|}d|d< t| | |j	 || W d    n	1 sw   Y  dt
|jv sJ tt"}t|}dt |d< t| | |j	 || W d    n	1 sw   Y  dt
|jv sJ tt}tg d}t| | |j	 |||d W d    n	1 sFw   Y  dt
|jv sUJ tt}t| | |j	 ||dd W d    n	1 svw   Y  dt
|jv sJ tt}t| | |j	 ||dd W d    n	1 sw   Y  dt
|jv sJ d S )Nr   rX   r   r   r   r>   皙rH   r   theta should be between [0, pi]rW   皙?phi should be between [0, 2pi]r"   ztt should be between (0, pi)ztp should be between (0, 2pi)r   	rG   rH   r$   rX   rH   r$   rX   rH   rH   r   r   r   r   )r   r   r   r   rm   rn   r   r   r   r   r   r   ri   rl   r	   )r*   r   r   r   r   r   r   r   r   invalid_thetaZinvalid_latsr   invalid_phir   Zinvalid_lonsZinvalid_knotstZinvalid_knotsp	invalid_wr.   r.   r/   r   }  s   (














z/TestLSQSphereBivariateSpline.test_invalid_inputc                 C   s  d\}}t d|d  dd|d   |t }t d|d  dd|d   |d t }t||\}}t|jd |jd f}|d d d }|d d d }	t| jd }
t| | |j ||	|
d}t|  |  |j  | |	 |
 d}t	|dd|dd d S )	Nr   rX   r   r   r   r>   r   rH   )
r   r   r   r   r   r   r   r   r   r   )r*   r   r   r   r   r   r   r   r   r   rT   r   r   r.   r.   r/   r     s8   
z2TestLSQSphereBivariateSpline.test_array_like_inputNr9   r:   r;   r  r0   rF   r   r   r.   r.   r.   r/   r   a  s    Tr   c                   @   r   )TestSmoothSphereBivariateSplinec                 C   s   t dt dt dt dt dt dt dt dt dt g	}t dt tdt dt tdt dt tdt g	}t g d}t|||dd| _d S )Nr   rX         ?r$   r       _Br{   )r	   r   r   r-   )r*   r   r   r   r.   r.   r/   r    s   ,&z,TestSmoothSphereBivariateSpline.setup_methodc                 C   s@   t | j d t| g dddgddgddgddgg d S )Nr"   r#   r   r$   r   )r   r-   r(   r   r  r.   r.   r/   r0     s   z4TestSmoothSphereBivariateSpline.test_linear_constantc                 C   r  r  )r   r-   ri   re   r  r.   r.   r/   rF     r  z0TestSmoothSphereBivariateSpline.test_empty_inputc                 C   s  t dt dt dt dt dt dt dt dt dt g	}t dt tdt dt tdt dt tdt g	}t g d}tt/}t dt dt dt dt dt dt dt dt dt g	}t|||dd W d    n1 stw   Y  d	t|jv sJ tt/}t dt dt dt dt dt dt dt dt d
t g	}t|||dd W d    n1 sw   Y  d	t|jv sJ tt)}t dt tdt dt tdt dt tdt g	}t|||dd W d    n1 sw   Y  dt|jv sJ tt)}t dt tdt dt tdt dt tdt g	}t|||dd W d    n	1 s6w   Y  dt|jv sEJ tt}t g d}t||||dd W d    n	1 sdw   Y  dt|jv ssJ tt}t|||dd W d    n	1 sw   Y  dt|jv sJ tt}t|||dd W d    n	1 sw   Y  dt|jv sJ tt}t|||dd W d    n	1 sw   Y  dt|jv sJ d S )Nr   rX   r  r$   r   r  r  r{   r  r  r	  rH   g @r
  rT   rU   r   rG   s should be positiver   r   )r	   r   rm   rn   r   r   r   )r*   r   r   r   r   r  r  r  r.   r.   r/   r     sl   &&







z2TestSmoothSphereBivariateSpline.test_invalid_inputc                 C   s   t dt dt dt dt dt dt dt dt dt g	}t dt tdt dt tdt dt tdt g	}t g d}t g d}t||||dd}t| | | | dd}t|d	d	|d	d	 d S )
Nr   rX   r  r$   r   )	rH   rH   rH   rH   rH   rH   rH   rH   rH   r  r  rH   )ri   r	   r   r   r   r   )r*   r   r   r   rT   r   r   r.   r.   r/   r   .  s   "&z5TestSmoothSphereBivariateSpline.test_array_like_inputNr  r.   r.   r.   r/   r    s    2r  c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )TestRectBivariateSplinec                 C   s^   t g d}t g d}t g dg dg d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   r	   r   r   r   r.   r.   r/   test_defaults@  s
   &z%TestRectBivariateSpline.test_defaultsc                    s   t g d}t g d}t g dg dg dg dg dg}t||| g d}g d} ||}t  fddt||D }t|| d S )	Nr=   r  r  r  )r   ffffff@g333333@rX   ffffff
@333333?r   )r   r  r  ra   g      @rH   r   c                       g | ]\}} ||d  qS r   r.   .0rp   r   r-   r.   r/   
<listcomp>P      z9TestRectBivariateSpline.test_evaluate.<locals>.<listcomp>)r	   r   evr   r   )r*   r+   r,   r   r   r   zizi2r.   r!  r/   test_evaluateG  s   &z%TestRectBivariateSpline.test_evaluatec                 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 dg dg dgd	 }t g d
g d
g dg dg d
g}t g dg dg dg dg dgd	 }t|||}t|||dd| t|||dd| t|||ddd| d S )Nr=   r  r  r  )r   r   ir   r   )r   r   r_   r   r   )r   r   r3   r   r   )r   r   ir   r   g      @)r3   rb   r   r   )r   r$   r   g      r   )r   r   r         пr   )(   ir      i)ig     @0@r   g     @0   )r^   r>   r   r   )   g     +r   g     +@ir   dxdy)r0  r2  r  r*   r+   r,   r   r0  r2  Zdxdyr-   r.   r.   r/   test_derivatives_gridT  s(   &z-TestRectBivariateSpline.test_derivatives_gridc                 C   s   t g d}t g d}t g dg dg dg dg dg}t g d}t g d}t g dd }t|||}t|||d	d
d| t|||d	d
d| t|||d	d	d
d| d S )Nr=   r  r  r  )r   r   gUUUUUU?r   r   )r3   rb   r   r)  r(  )   A   r   7       g      8@r   F)r0  r   )r2  r   )r0  r2  r   r  r3  r.   r.   r/   test_derivativesc  s   &z(TestRectBivariateSpline.test_derivativesc                 C   s   t g d}t g d}t g dg dg dg dg dg}t|||}t|||||d d d f |d d d f dd d S )Nr=   r  r  r  Fr   )r	   r   r   r   r.   r.   r/   test_broadcasto  s
   &6z&TestRectBivariateSpline.test_broadcastc                 C   s  t t-}tg d}tg d}tg dg dg dg dg dg}t||| W d    n1 s4w   Y  dt|jv sBJ t t-}tg d}tg d}tg dg dg dg dg dg}t||| W d    n1 svw   Y  dt|jv sJ t t*}tg d}tg d}tg dg dg dg dg}t||| W d    n1 sw   Y  d	t|jv sJ t t-}tg d}tg d}tg d
g d
g dg dg d
g}t||| W d    n1 sw   Y  dt|jv sJ t t1}tg d}tg d}tg dg dg dg dg dg}d}t||||d W d    n	1 s?w   Y  dt|jv sNJ t t}t|||dd W d    n	1 sfw   Y  dt|jv suJ d S )N)r   r   r   r3   r>   r=   r  r  r  x must be strictly increasing)r   r   r   r3   r>   y must be strictly increasingz7x dimension of z must have same number of elements as x)r   r   r   r   )r   r   r   r   )r   r   r   r   z7y dimension of z must have same number of elements as yr   rw   r   rG   r{   r   )rm   rn   r	   r   r   r   )r*   r   r+   r,   r   rx   r.   r.   r/   r   v  sl   






z*TestRectBivariateSpline.test_invalid_inputc                 C   s   t g d}t g d}t g dg dg dg dg dg}t g d}t||||d}t| | | | d}t|dd|dd d S )Nr=   r  r  r  )r   r>   r   r>   rw   rH   )r	   r   r   r   )r*   r+   r,   r   rx   r   r   r.   r.   r/   r     s   z-TestRectBivariateSpline.test_array_like_inputc                 C   s0  d}t jdt j|}t jddt j |}t |}t|||dd}d}d}t || t j }t || d t j }	|||	 | }
d|
d< tt	}||
|	 W d    n1 s^w   Y  d	t
|jv slJ |	 }d|d< tt	}||| W d    n1 sw   Y  d
t
|jv sJ d S )Nr   r   r   g      @r{   r   r   MbP?r;  r<  )ri   ZrandomZuniformr   r   r   rj   rl   rm   rn   r   r   )r*   ZNSampZThetaZPhiZDataZInterpolatorZNLonZNLatZGridPosLatsZGridPosLonsZnonGridPosLatsr   ZnonGridPosLonsr.   r.   r/   test_not_increasing_input  s,   



z1TestRectBivariateSpline.test_not_increasing_inputN)r9   r:   r;   r  r'  r4  r9  r:  r   r   r>  r.   r.   r.   r/   r  ?  s    1r  c                   @   r   )TestRectSphereBivariateSplinec              	   C   sv   t ddt d d}t dtd d}tg dg dg dg dg dg dg dg}t|||}t|||| d S N{Gz?r   rA   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r	   r   r   r*   r,   r+   r   r-   r.   r.   r/   r    s   z+TestRectSphereBivariateSpline.test_defaultsc              	      s   t ddt d d}t dtd d}tg dg dg dg dg dg dg dg}t||| g d}g d} ||}t fd	d
t||D }t|| d S )NrA  r   rA   rB  rC  rD  )r}   r   r  g@r   gQ@g      @)r$   r   r  g?gjt?rH   -C6?c                    r  r  r.   r  r!  r.   r/   r"    r#  z?TestRectSphereBivariateSpline.test_evaluate.<locals>.<listcomp>)r   r   r	   r   r$  r   r   )r*   r,   r+   r   r   r   r%  r&  r.   r!  r/   r'    s   z+TestRectSphereBivariateSpline.test_evaluatec              
   C   s  t ddt d d}t dtd d}tg dg dg dg dg dg dg dg}t|||}t ddt d d}t dtd d}t|||dd	t|||dd
ddd t|||ddt|||ddddd t|||dddt|||ddddddd d S )NrA  r   rA   rB  rC  rD  {Gz?r   )dthetar/  rF  Zrtolr[   )dphir1  )rH  rJ  ư>r0  r2  r   r=  )r   r   r	   r   r   _numdiff_2drE  r.   r.   r/   r4    s$   "
z3TestRectSphereBivariateSpline.test_derivatives_gridc              
      s:  t ddt d d}t dtd d}tg dg dg dg dg dg dg dg}t||| t ddt d d}t dtd d}t ||dd	d
j|j t ||dd	d
t fdd||ddddd t ||dd	dt fdd||ddddd t ||ddd	dt fdd||ddddddd d S )NrA  r   rA   rB  rC  rD  rG  r   F)rH  r   c                        | |ddS NFr   r.   rc   r!  r.   r/   <lambda>	      z@TestRectSphereBivariateSpline.test_derivatives.<locals>.<lambda>r/  rF  rI  )rJ  r   c                    rN  rO  r.   rc   r!  r.   r/   rP    rQ  r1  )rH  rJ  r   c                    rN  rO  r.   rc   r!  r.   r/   rP    rQ  rK  rL  r=  )r   r   r	   r   r   r   r   rM  )r*   r,   r+   r   r.   r!  r/   r9    s,   
z.TestRectSphereBivariateSpline.test_derivativesc                 C   s  t t dt ddd jt dt t ddd j}tt&}t d	d
dt j d }t d	ddt j d }t	||| W d    n1 sLw   Y  dt
|jv sZJ tt&}t dddt j d }t d	ddt j d }t	||| W d    n1 sw   Y  dt
|jv sJ tt&}t dd
dt j d }t dddt j d }t	||| W d    n1 sw   Y  dt
|jv sJ tt&}t dd
dt j d }t dddt j d }t	||| W d    n1 sw   Y  dt
|jv sJ tt(}t dd
dt j d }t dddt j d }t	|||dd W d    n	1 s<w   Y  dt
|jv sKJ d S )Ng     V@g      Tg      T@   g     f@r"   g     u@rB   r      i^  zu should be between (0, pi)ru      iKz v[0] should be between [-pi, pi)iih  z"v[-1] should be v[0] + 2pi or lessrb   r{   r  )ri   dotZ
atleast_2dr   r   absrm   rn   r   r   r   r   )r*   r   r   r   r   r.   r.   r/   r     sF   




z0TestRectSphereBivariateSpline.test_invalid_inputc              	   C   s   t ddt d d}t dtd d}tg dg dg dg dg dg dg dg}t|||}t| | | }t|||||| d S r@  )r   r   r	   r   r   r   )r*   r,   r+   r   r   r   r.   r.   r/   r   4  s   z3TestRectSphereBivariateSpline.test_array_like_inputc                 C   s   t g d}t g d}t ||}|d |d  }t |}t |}t|||}t t ddg}t t ddg}	|||	}
t d	d
gddgg}t|
| d S )N)r+     #   r*  -   )iiirz   r   r   rX  g     B@rZ  g     `Sg     Fg=Eg     HgDioEG)ri   r	   r   Zradiansr   r   )r*   r   r   Zmeshr   Zlat_rZlon_rZinterpolatorZ	query_latZ	query_lonZdata_interpZansr.   r.   r/   test_negative_evaluationB  s   



z6TestRectSphereBivariateSpline.test_negative_evaluationN)
r9   r:   r;   r  r'  r4  r9  r   r   r[  r.   r.   r.   r/   r?    s    	"r?  :0yE>c                 C   s   |dkr|dkr| ||S |dkr'|dkr'| || || || | d|  S |dkrA|dkrA| ||| | |||  d|  S |dkrs|dkrs| || || | || ||  | || ||  | || ||  d| d  S t d)Nr   r   r   zinvalid derivative order)rn   )funcr+   r,   r0  r2  r   r.   r.   r/   rM  R  s   
$$"
rM  )r   r   r\  )(Znumpyri   Znumpy.testingr   r   r   r   r   r   Zpytestr   rm   r	   r
   r   r   r   r   r   Zscipy.interpolate._fitpack_pyr   r   Zscipy.interpolate._fitpack2r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r?  rM  r.   r.   r.   r/   <module>   s(    $,  :  z 
U  