a
    Re+                     @   s"  d dl Z 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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*G 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splrepspalde)	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%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/S )0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 r0   Y/var/www/sunrise/env/lib/python3.9/site-packages/scipy/interpolate/tests/test_fitpack2.pytest_linear_constant   s    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    )nu)r&   r          @)r   r   r   )r,   r-   r.   r/   argr0   r0   r1   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   r3   r   r"   r!   r   r4   r$   r%   )r   r   r    r'   r+   r0   r0   r1   test_linear_1d&   s    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-   r0   r0   r1   __call__3   s    zBTestUnivariateSpline.test_subclassing.<locals>.ZeroSpline.__call__N)__name__
__module____qualname__r:   r0   r0   r0   r1   
ZeroSpline2   s   r>   r   r    r!   r4      )r!   r    r!   r    r!   r    r"   r&   r6   r$   )r   r   )r,   r>   spr0   r0   r1   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   r4   rE         r!   r"   )r   r   r	   r,   r-   r.   splr0   r0   r1   test_empty_input9   s    z%TestUnivariateSpline.test_empty_inputc                 C   s4   g d}g d}t ||dd}t| d d d S )NrC   rF   r!   r"   r   g7ã?)r   r   rootsrI   r0   r0   r1   
test_roots@   s    zTestUnivariateSpline.test_rootsc                 C   sB   t ddt j d}t |}t||dd}tt| d d S )Nr   2   i  s)npr   r   cosr   r   lenrL   rI   r0   r0   r1   test_roots_lengthF   s    
z&TestUnivariateSpline.test_roots_lengthc                 C   s6   g d}g d}t ||dd}t|dg d d S )NrC   rF   r!   r"         @)g;@gpZ<o?gOmǿg      ?)r   r   derivativesrI   r0   r0   r1   test_derivativesL   s    
z%TestUnivariateSpline.test_derivativesc                 C   sp   t d}|d d|d   }t||dd}td|}t|g ddd	 t||ddd
}t|d|dd	 d S )N   r!          @r    r   rO   )g     F@g     C@g      6@      @V瞯<atol)rP   r#   )rQ   aranger   r   r   r   rV   )r,   r-   r.   tckZdersrJ   r0   r0   r1   test_derivatives_2S   s    



z'TestUnivariateSpline.test_derivatives_2c                 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<&?      ?)rb   1\_#?~a?w?5??0ms?gx?rg   rf   re   rd   rc   rb   )   mBo!@u)	~@e?֭z@b@v5|@geSs@rm   rl   rk   rj   ri   rh   N)r-   r.   wrP   )gJdv?gc?g=?gt?皙?      ??gGz?gMb@?r\   )r   r	   r   )r,   r-   r.   rn   rJ   Zdesiredr0   r0   r1   test_resize_regressionc   s    z+TestUnivariateSpline.test_resize_regressionc           
   	   C   sV  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 qdD ]>}t|||d|d dd t||||d||d dd qdD ] }t	t
||fi t|d qdD ]@}t|||d|d dd t||||d||d dd q>qz| 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 ]F}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ؗҜ<r\   )r   zeros)r    raise)r!   constr4   r   r    )ry   unknown)r-   r.   r{   )rQ   r^   floatr   copy
logical_orr   r   r   assert_raises
ValueErrordictr(   r   )
r,   r-   r.   xpZxp_zerosZxp_clipclsrJ   r{   tr0   r0   r1   test_out_of_range_regressions   sB    ""&

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 )Nrw   rb   r   c   
   )ry   e   bbox)rQ   r^   r   r   r   r   )r,   xsZysZknotsr   r0   r0   r1   test_lsq_fpchec   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!   rO   r    333333?g333333?皙?)rQ   r   rR   r   Zantiderivative
derivativer   integral)r,   r-   r.   rJ   spl2r0   r0   r1   "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    r4      g      !@)rq   皙??r6   r@   r~   r!   )r{   r#   )ry   r   g      rE   g      #@r   r   r[   r\   )r   r   r   )r,   x_valuesy_valuesfr-   r0   r0   r1   test_derivative_extrapolation   s
    z2TestUnivariateSpline.test_derivative_extrapolationc                 C   sT   t ddd}tdD ]8}t||d|d}dD ]\}}t|||ddd	 q.qd S )
Nr$   rb   rD   r4   r   )rP   r{   ))r   r   )r   r@   )r    r@   r   r   )r   )r   ry   r[   r\   )rQ   r   ranger   r   r   )r,   r-   r{   r   abr0   r0   r1   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 ]}||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 qXd S )Nr   rt   r!   Tcheck_finiter4   ry   r-   r.   r   )r-   r.   r   r   )r-   r.   rn   r   r-   r.   r   rn   r   )rQ   r^   r   	ones_liker   r(   naninfr   r   r   r   r   )r,   r-   r.   rn   rJ   r   Zy_endzr0   r0   r1   test_nan   s8    






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 )Nr   rt   r!   r   r   Tr   r4   )r-   r.   rn   rP   r   r   )r-   r.   rP   r   r   )rQ   r^   r   r   r   r(   r   r   r   r   r   r,   xxyyr-   r.   rn   rJ   r   r0   r0   r1   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 )Nr   rt   r!   r   rb   r   Tr   r4   r   r   )rQ   r^   r   r   r   r(   r   r   r   r   r   r   r0   r0   r1   test_increasing_x   s"    



z&TestUnivariateSpline.test_increasing_xc                 C   s  t t*}g d}g d}t|| W d    n1 s80    Y  dt|jv sTJ t t6}g d}g d}g d}t|||d W d    n1 s0    Y  dt|jv sJ t t"}d}t|||d	 W d    n1 s0    Y  d
t|jv sJ t t}t||dd W d    n1 s00    Y  dt|jv sNJ t t}t||dd W d    n1 s|0    Y  dt|jv sJ d S )Nr   rq   r   r   r6   !x and y should have a same lengthrq   r   r   r6   gffffff@ra   rb   rb   rb   rn   %x, y, and w should have a same lengthry   r   bbox shape should be (2,)r   r"   k should be 1 <= k <= 5ra   rO   s should be s >= 0.0)r   r   r   strvaluer,   infor   r   w_valuesr   r0   r0   r1   (test_invalid_input_for_univariate_spline  s*    
(
,
,
.
.z=TestUnivariateSpline.test_invalid_input_for_univariate_splinec                 C   sR  t t*}g d}g d}t|| W d    n1 s80    Y  dt|jv sTJ t t6}g d}g d}g d}t|||d W d    n1 s0    Y  dt|jv sJ t t"}d}t|||d	 W d    n1 s0    Y  d
t|jv sJ t t}t||dd W d    n1 s00    Y  dt|jv sNJ d S )Nr   r   r   r   r   r   r   ry   r   r   r   r"   r   )r   r   r   r   r   r   r0   r0   r1   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 sh0    Y  dt|jv sJ tt8}g d}g d}g d	}t||||d
 W d    n1 s0    Y  dt|jv sJ tt$}d}t||||d W d    n1 s0    Y  dt|jv s8J tt$}d}t||||d W d    n1 sl0    Y  dt|jv sJ tt }t|||dd W d    n1 s0    Y  dt|jv sJ d S )Nr   r   Tr   r!   r4   r   r   )rb   rb   rb   rb   r   r   )rw   r   z;Interior knots t must satisfy Schoenberg-Whitney conditionsry   r   r   r"   r   )r   r(   r   r   r   r   r   )r,   r   r   rJ   Zt_valuesr   r   r   r0   r0   r1   ,test_invalid_input_for_lsq_univariate_spline:  s4    
*
.
0
0
0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   )rb   rb   rb   rb   rb   r   rw   )r-   r.   rn   r   ro   )rQ   r	   r   tolistr   )r,   r   r   r   r   spl1r   r0   r0   r1   test_array_like_input\  s    
z*TestUnivariateSpline.test_array_like_inputc                 C   sb   t d}g d}t 8}|td}t||dd tt|d W d    n1 sT0    Y  d S )Nm   )mr$   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$   ffffff%@r$   r$   r$   r   r$   r$   r$   r$   r$   r$   r   r$   r$   r   r$   r$   r$   333333%@r$   r$   r$   r   r$   r$   r   r$   r$   r   r$   r$   g      '@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$   r   r$   r$   r$   r   r$   a#  
The maximal number of iterations maxit \(set to 20 by the program\)
allowed for finding a smoothing spline with fp=s has been reached: s
too small.
There is an approximation returned but the corresponding weighted sum
of squared residuals does not satisfy the condition abs\(fp-s\)/s < tol.r   r"   )r   r   recordUserWarningr   r   rS   )r,   r-   r.   suprr0   r0   r1   test_fpknot_oob_crashk  s    z*TestUnivariateSpline.test_fpknot_oob_crashN)r;   r<   r=   r2   r8   r9   rB   rK   rM   rT   rW   r`   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r0   r0   r0   r1   r      s.   		
)

"r   c                   @   sD   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 s0    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!   rp   r   r!   
The coefficients of the splinekxkyr          @)r   r   r   r   r   rS   r   
r,   r-   r.   r   rP   txtyr   r   r/   r0   r0   r1   r2     s    ,z+TestLSQBivariateSpline.test_linear_constantc              
   C   s  g d}g d}g d}d}d| d| g}d| d| g}t  2}|td t|||||ddd}W d    n1 sz0    Y  | \}}t|d d	 |dd  D ]\}	}
t|d d	 |dd  D ]\}}d
D ]}dD ]}|	d|  |
|  }|d|  ||  }||	|
 d|  d|  ||
|| d|   ||	|d|  |  ||
|| |  }t|||| qqqqd S )Nr   r   	r   rD   rX   r!   r4   rD   r   r!   r4   rp   r   r!   r   r   ry   )rp   rq   rr   )r   皙?gffffff?)r   filterr   r   r(   zipr   )r,   r-   r.   r   rP   r   r   r   r/   ZxaxbZyaZybr   r   ypZzpr0   r0   r1   test_bilinearity  s0    4""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 s0    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    rX   rX   rX   r   r   rp   r   r!   r   r         ?ry   r   )r	   r   r   r   r   r   rS   r(   r
   sumr   r   )r,   r-   r.   r   rP   r   r   r   r   r/   tztrpzr0   r0   r1   test_integral  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 s0    Y  t|	g g td	 t|	g g d
dtd d S )Nr   r   r   rp   r   r!   r   r   r   Fgridr   )	r   r   r   r   r   rS   r   rQ   r|   r   r0   r0   r1   rK     s    ,z'TestLSQBivariateSpline.test_empty_inputc              
   C   s  d}d| d| g}d| d| g}t tH}tdd}tdd}tjdddd}t||||| W d    n1 sz0    Y  dt|jv sJ t tX}tdd}tdd}tdd}tjddd	d}t||||||d
 W d    n1 s0    Y  dt|jv sJ t t0}tdd}t||||||d
 W d    n1 sZ0    Y  dt|jv sxJ t t(}d}	t||||||	d W d    n1 s0    Y  dt|jv sJ t t&}t|||||ddd W d    n1 s0    Y  dt|jv s"J t t$}
t|||||dd W d    n1 sV0    Y  dt|
jv stJ t t$}
t|||||dd W d    n1 s0    Y  dt|
jv sJ d S )Nrp   r   r!   rb         $@r   num%x, y, and z should have a same length   r   (x, y, z, and w should have a same lengthra   w should be positiver   rw   r   r   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))r   r   rQ   r   r   r   r   )r,   rP   r   r   r   r-   r.   r   rn   r   exc_infor0   r0   r1   test_invalid_input  sF    
.
2
4
4
6

4
4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 }	|	td}
t|||||||d}t| | | | | | |d}t|d	d	|d	d	 t	t
|
d
 W d    n1 s0    Y  d S )Nrp   r   r!   rb   r   )rb   r   rb   r   r   )rn   r   rY   r    )rQ   r	   r   r   r   r   r   r   r   r   rS   )r,   rP   r   r   r-   r.   r   rn   r   r   r   r   r   r0   r0   r1   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 s0    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   rw   r   rp   g     X@   !   r   r   NFr   )rQ   Zmgridravelr   r   r   r   r   r   r   rS   r   )	r,   r-   r.   r   r   r   r   r   r/   r0   r0   r1   test_unequal_length_of_knots  s    ,z3TestLSQBivariateSpline.test_unequal_length_of_knotsN)
r;   r<   r=   r2   r   r   rK   r   r   r  r0   r0   r0   r1   r     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/   r0   r0   r1   r2   '  s    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    r4   r4   r4   r   r   r  )r   r   r4   r4   r$   r%   r&   r   r    r  r  r0   r0   r1   r9   1  s    z(TestSmoothBivariateSpline.test_linear_1dc              	   C   s4  g d}g d}t g d}t 0}|td t|||dddd}W d    n1 sX0    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    r4   r4   r4   r   r   z
The required storage spacer   r   )r   r   rP   )r   r    r4   r   r   ry   r    )decimalr   )	r	   r   r   r   r   r
   r   r   r   )r,   r-   r.   r   r   r/   r   r   r   r   Zlut2r0   r0   r1   r   ;  s,    2
(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   ry   r   rw   )rQ   r   r   r   r   r   )
r,   r-   r.   r   xiyir_   Zres1Zinterp_Zres2r0   r0   r1   test_rerun_lwrk2_too_smallV  s    
z4TestSmoothBivariateSpline.test_rerun_lwrk2_too_smallc                 C   s  t tD}tdd}tdd}tjdddd}t||| W d    n1 sR0    Y  dt|jv snJ t tT}tdd}tdd}tdd}tjdddd}t||||d W d    n1 s0    Y  dt|jv sJ t t,}td	d}t||||d W d    n1 s(0    Y  d
t|jv sFJ t t$}d}t||||d W d    n1 sz0    Y  dt|jv sJ t t"}t|||ddd W d    n1 s0    Y  dt|jv sJ t t }t|||d	d W d    n1 s0    Y  dt|jv s6J t t }t|||dd W d    n1 sf0    Y  dt|jv sJ t t }t|||dd W d    n1 s0    Y  dt|jv sJ d S )Nrb   r   r   r   r   r   r   r   ra   r   r   r   r   r   r   rO   r   r$   r   r   )r   r   rQ   r   r   r   r   )r,   r   r-   r.   r   rn   r   r   r0   r0   r1   r   e  sF    
*
.
0
0
2

0
0
0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   )rb   r   rb   r   r   )rn   r   r   r   )r   rn   r   r   rp   rq   )rQ   r	   r   r   r   )r,   r-   r.   r   rn   r   r   r   r0   r0   r1   r     s    z/TestSmoothBivariateSpline.test_array_like_inputN)	r;   r<   r=   r2   r9   r   r  r   r   r0   r0   r0   r1   r  &  s   

,r  c                   @   s4   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r   Z   rq   r   rY   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  r0   r0   r1   setup_method  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,   r0   r0   r1   r2     s    z1TestLSQSphereBivariateSpline.test_linear_constantc                 C   s8   t | g g td t | jg g ddtd d S Nr   Fr   r   )r   r  rQ   r|   r  r0   r0   r1   rK     s    z-TestLSQSphereBivariateSpline.test_empty_inputc              	   C   sx  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N}t dd|d	t }	t|	|\}
}t|
 | |j	 || W d    n1 s0    Y  d
t
|jv sJ ttN}t dd|d	t }	t|	|\}
}t|
 | |j	 || W d    n1 s`0    Y  d
t
|jv s~J ttR}t dd|d	d t }t||\}}t| | |j	 || W d    n1 s0    Y  dt
|jv sJ ttR}t dd|d	d t }t||\}}t| | |j	 || W d    n1 s`0    Y  dt
|jv s~J t||\}}tt@}t|}d|d< t| | |j	 || W d    n1 s0    Y  dt
|jv sJ tt@}t|}t|d< t| | |j	 || W d    n1 sJ0    Y  dt
|jv shJ tt@}t|}d|d< t| | |j	 || W d    n1 s0    Y  dt
|jv sJ ttD}t|}dt |d< t| | |j	 || W d    n1 s*0    Y  dt
|jv sHJ tt>}tg d}t| | |j	 |||d W d    n1 s0    Y  dt
|jv sJ tt2}t| | |j	 ||dd W d    n1 s0    Y  dt
|jv sJ tt2}t| | |j	 ||dd W d    n1 sV0    Y  dt
|jv stJ d S )Nr  rq   r   rY   r   r@   皙rb   r   theta should be between [0, pi]rp   皙?phi should be between [0, 2pi]r$   ztt should be between (0, pi)ztp should be between (0, 2pi)r    	ra   rb   r&   rq   rb   r&   rq   rb   rb   r   r   r   r   )r   r   r   r   r   r   r   r   r  r  r   r   rQ   r   r	   )r,   r  r  r  r  r  r  r  r   invalid_thetaZinvalid_latsr  invalid_phir  Zinvalid_lonsZinvalid_knotstZinvalid_knotsp	invalid_wr0   r0   r1   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  rq   r   rY   r   r@   r   rb   )
r   r   r   r   r   r  r   r  r   r   )r,   r  r  r  r  r  r  r  r  r  rn   r   r   r0   r0   r1   r     s8    
z2TestLSQSphereBivariateSpline.test_array_like_inputNr;   r<   r=   r  r2   rK   r   r   r0   r0   r0   r1   r    s
   Tr  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )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   rq         ?r&   r       _BrO   )r	   r   r   r/   )r,   r  r  r   r0   r0   r1   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  r0   r0   r1   r2   2  s    z4TestSmoothSphereBivariateSpline.test_linear_constantc                 C   s8   t | g g td t | jg g ddtd d S r  )r   r/   rQ   r|   r  r0   r0   r1   rK   7  s    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 s0    Y  d	t|jv sJ 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 st0    Y  d	t|jv sJ ttR}t dt tdt dt tdt dt tdt g	}t|||dd W d    n1 s0    Y  dt|jv sJ ttR}t dt tdt dt tdt dt tdt g	}t|||dd W d    n1 st0    Y  dt|jv sJ tt.}t g d}t||||dd W d    n1 s0    Y  dt|jv sJ tt }t|||dd W d    n1 s0    Y  dt|jv s<J tt }t|||dd W d    n1 sl0    Y  dt|jv sJ tt }t|||dd W d    n1 s0    Y  dt|jv sJ d S )Nr   rq   r*  r&   r   r   r+  rO   r!  r"  r#  rb   g @r$  rn   rP   r   ra   s should be positiver   r   )r	   r   r   r   r   r   r   )r,   r  r  r   r   r%  r&  r'  r0   r0   r1   r   ;  s\    &&
.
0
0
0
2
0
0
0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   rq   r*  r&   r   )	rb   rb   rb   rb   rb   rb   rb   rb   rb   r+  r,  rb   )rQ   r	   r   r   r   r   )r,   r  r  r   rn   r   r   r0   r0   r1   r   m  s    "&z5TestSmoothSphereBivariateSpline.test_array_like_inputNr(  r0   r0   r0   r1   r)  )  s
   2r)  c                   @   sd   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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  r0   r0   r1   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/  r0  r1  )r   ffffff@g333333@rq   ffffff
@333333?r!   )r   r5  r6  rx   g      @rb   r!   c                    s   g | ]\}} ||d  qS r   r0   .0r   r   r/   r0   r1   
<listcomp>      z9TestRectBivariateSpline.test_evaluate.<locals>.<listcomp>)r	   r   evr   r   )r,   r-   r.   r   r
  r  zizi2r0   r:  r1   test_evaluate  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/  r0  r1  r   r   ir   r   r   r   rv   r   r   r   r   r4   r   r   r   r   ir   r   rZ   r4   ry   r   r   r   r&   r   g      r   r    r   r         пr   (   ir      iig     @0@r   g     @0   ru   r@   r   rX      g     +r   g     +@ir   dxdy)rT  rV  r2  r,   r-   r.   r   rT  rV  Zdxdyr/   r0   r0   r1   test_derivatives_grid  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/  r0  r1  r   r   gUUUUUU?r   r   r4   ry   r   rI  rF     A   r   7             8@r   F)rT  r   )rV  r   rT  rV  r   r2  rW  r0   r0   r1   rW     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 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 S )Nr?   r/  r0  r1  rA  rB  rC  rD  rZ   rE  rG  rH  rJ  rM  rO  rQ  r   r   r	   r   r   partial_derivativerW  r0   r0   r1   #test_partial_derivative_method_grid  sD    z;TestRectBivariateSpline.test_partial_derivative_method_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d| t|d
d	||dd| t|d	d	||dd| d S )Nr?   r/  r0  r1  rY  rZ  r[  r`  r   r   Fr   rb  rW  r0   r0   r1   test_partial_derivative_method  s6    z6TestRectBivariateSpline.test_partial_derivative_methodc                 C   sl   t g dtd}| }t|j|jf}t|||}tt |dd W d    n1 s^0    Y  d S )N)r   r   r    r!   r4   rt   r4   r   )	r	   r   r   r   sizer   r   r   rc  r  r0   r0   r1   'test_partial_derivative_order_too_large  s    
z?TestRectBivariateSpline.test_partial_derivative_order_too_largec                 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/  r0  r1  Fr   )r	   r   r   r  r0   r0   r1   test_broadcast  s
    &z&TestRectBivariateSpline.test_broadcastc                 C   s  t tZ}tg d}tg d}tg dg dg dg dg dg}t||| W d    n1 sh0    Y  dt|jv sJ t tZ}tg d}tg d}tg dg dg dg dg dg}t||| W d    n1 s0    Y  dt|jv s
J t tT}tg d}tg d}tg dg dg dg dg}t||| W d    n1 sn0    Y  d	t|jv sJ t tZ}tg d}tg d}tg d
g d
g dg dg d
g}t||| W d    n1 s0    Y  dt|jv sJ t tb}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 s0    Y  dt|jv sJ t t }t|||dd W d    n1 s0    Y  dt|jv sJ d S )N)r   r    r!   r4   r@   r?   r/  r0  r1  x must be strictly increasing)r    r    r!   r4   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   r   r   ra   rO   r   )r   r   r	   r   r   r   )r,   r   r-   r.   r   r   r0   r0   r1   r     s`    
*
*
,

,

0
0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/  r0  r1  )r   r@   r   r@   r   rb   )r	   r   r   r   )r,   r-   r.   r   r   r   r   r0   r0   r1   r      s    z-TestRectBivariateSpline.test_array_like_inputc                 C   s4  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 s0    Y  d	t
|jv sJ |	 }d|d< tt	}||| W d    n1 s0    Y  d
t
|jv s0J d S )Nr   r   r    rU   rO   r   r!   MbP?ri  rj  )rQ   randomuniformr   r   r   r^   r   r   r   r   r   )r,   ZNSampThetaPhiZDataZInterpolatorZNLonZNLatZGridPosLatsZGridPosLonsZnonGridPosLatsr   ZnonGridPosLonsr0   r0   r1   test_not_increasing_input,  s(    


(
*z1TestRectBivariateSpline.test_not_increasing_inputN)r;   r<   r=   r3  r@  rX  rW   rd  re  rg  rh  r   r   rp  r0   r0   r0   r1   r.  ~  s   1r.  c                   @   sT   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S )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    rD   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/   r0   r0   r1   r3  K  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 )Nrs  r    rD   rt  ru  rv  )r   r   r4  g@r   gQ@g      @)r&   r   r"  g?gjt?rb   -C6?c                    s   g | ]\}} ||d  qS r7  r0   r8  r:  r0   r1   r;  ^  r<  z?TestRectSphereBivariateSpline.test_evaluate.<locals>.<listcomp>)r   r   r	   r   r=  r   r   )r,   r.   r-   r   r  r
  r>  r?  r0   r:  r1   r@  T  s    z+TestRectSphereBivariateSpline.test_evaluatec                 C   s  t t dt ddd jt dt t ddd j}ttL}t d	d
dt j d }t dddt j d }t	||| W d    n1 s0    Y  dt
|jv sJ ttL}t dddt j d }t dddt j d }t	||| W d    n1 s0    Y  dt
|jv s.J ttL}t dd
dt j d }t dddt j d }t	||| W d    n1 s0    Y  dt
|jv sJ ttL}t dd
dt j d }t dddt j d }t	||| W d    n1 s0    Y  dt
|jv s"J ttP}t dd
dt j d }t dddt j d }t	|||d	d W d    n1 s0    Y  dt
|jv sJ d S )N     V@      T      T@        f@r$        u@rE   ry      r   ^  u should be between (0, pi)r      K v[0] should be between [-pi, pi)h  "v[-1] should be v[0] + 2pi or lessrO   r-  rQ   dotZ
atleast_2dr   r  absr   r   r   r   r   r   r,   r  r   r  r  r0   r0   r1   r   a  s8    
*
,
,
,
0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 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 t|||dd	|dd|| t|||dd|dd|| t|||ddd|dd|| t|||ddd|dd||dd t|||ddd|dd||dd t|||dddd|dd||dd d S )Nrs  r    rD   rt  ru  rv  {Gz?r   )dthetarS  rx  Zrtolr]   )dphirU  )r  r  ư>rT  rV  r   rk  r   Fr  r   r   r  r   r  r  r   )r   r   r	   r   r   _numdiff_2dr   rc  rw  r0   r0   r1   rX    sH    "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 )Nrs  r    rD   rt  ru  rv  r  r   Fr  c                    s    | |ddS NFr   r0   rz   r:  r0   r1   <lambda>  r<  z@TestRectSphereBivariateSpline.test_derivatives.<locals>.<lambda>rS  rx  r  r  c                    s    | |ddS r  r0   rz   r:  r0   r1   r    r<  rU  r  c                    s    | |ddS r  r0   rz   r:  r0   r1   r    r<  r  r  rk  )r   r   r	   r   r   r   r   r  )r,   r.   r-   r   r0   r:  r1   rW     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L}t d	d
dt j d }t d	ddt j d }t	||| W d    n1 s0    Y  dt
|jv sJ ttL}t dddt j d }t d	ddt j d }t	||| W d    n1 s0    Y  dt
|jv s.J ttL}t dd
dt j d }t dddt j d }t	||| W d    n1 s0    Y  dt
|jv sJ ttL}t dd
dt j d }t dddt j d }t	||| W d    n1 s0    Y  dt
|jv s"J ttP}t dd
dt j d }t dddt j d }t	|||dd W d    n1 s0    Y  dt
|jv sJ d S )Nry  rz  r{  r|  r}  r$   r~  rE   r   r  r  r  r      r  r  r  r  r  ry   rO   r-  r  r  r0   r0   r1   test_invalid_input_2  s8    
*
,
,
,
0z2TestRectSphereBivariateSpline.test_invalid_input_2c              	   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 rr  )r   r   r	   r   r   r   )r,   r.   r-   r   r   r   r0   r0   r1   r     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)rL     #   rK  -   )iiir   r   r   r  g     B@r  g     `Sg     Fg=Eg     HgDioEG)rQ   r	   r   radiansr   r   )r,   r  r  Zmeshr  Zlat_rZlon_rZinterpolatorZ	query_latZ	query_lonZdata_interpZansr0   r0   r1   test_negative_evaluation  s    



z6TestRectSphereBivariateSpline.test_negative_evaluationc                 C   sV   t ddt j d }t ddt j d }t d}dD ]}t|||d|d q:d S )Nr   r   )rE   rE   ))TT)TF)FFr   )rP   Zpole_continuity)rQ   r^   r   r|   r   )r,   uvr   pr0   r0   r1   test_pole_continuity_gh_14591  s
    
z;TestRectSphereBivariateSpline.test_pole_continuity_gh_14591N)r;   r<   r=   r3  r@  r   rX  rW   r  r   r  r  r0   r0   r0   r1   rq  J  s   	"!"rq  :0yE>c                 C   s   |dkr|dkr| ||S |dkrN|dkrN| || || || | d|  S |dkr|dkr| ||| | |||  d|  S |dkr|dkr| || || | || ||  | || ||  | || ||  d| d  S t dd S )Nr   r   r    zinvalid derivative order)r   )funcr-   r.   rT  rV  r   r0   r0   r1   r  	  s    
$$"
r  c                   @   s@   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dS )Test_DerivedBivariateSplinezgTest the creation, usage, and attribute access of the (private)
    _DerivedBivariateSpline class.
    c              
      s  t tttdtd}t tttdtdd}t t dddt dddf t B}|td t	|| tdddtd	d
ddd| _
W d    n1 s0    Y  t|| | _tddd}|d }t fddt jD }t|||| _tttdtd| _d S )Nr   r      r!   r   rq   g     3@r4   r&   g     4@rs  r   r   r   rb   c                    s   g | ]}t  |qS r0   )rQ   Zroll)r9  ir   r0   r1   r;  (  r<  z<Test_DerivedBivariateSpline.setup_method.<locals>.<listcomp>)rQ   Zconcatenatelistr   r   r   r   r   r   r   r  r   
lut_smoothr	   rf  r   lut_rect	itertoolsproductorders)r,   r-   r.   r   r   r   zzr0   r  r1   r    s     "

&z(Test_DerivedBivariateSpline.setup_methodc                 C   sN   | j D ]B\}}| j||}|dddd}| jdd||dd}t|| qd S )NrU   Fr   ra  )r  r  rc  r   r,   ZnuxZnuyZlut_derr   r   r0   r0   r1   test_creation_from_LSQ,  s
    z2Test_DerivedBivariateSpline.test_creation_from_LSQc                 C   sN   | j D ]B\}}| j||}|dddd}| jdd||dd}t|| qd S )Ng      @Fr   ra  )r  r  rc  r   r  r0   r0   r1   test_creation_from_Smooth3  s
    z5Test_DerivedBivariateSpline.test_creation_from_Smoothc                 C   sN   | j D ]B\}}| j||}|dddd}| jdd||dd}t|| qd S )Nrq   r&   Fr   ra  )r  r  rc  r   r  r0   r0   r1   test_creation_from_Rect:  s
    z3Test_DerivedBivariateSpline.test_creation_from_Rectc                 C   s@   | j dd}tt |j W d    n1 s20    Y  d S Nr   )r  rc  r   AttributeErrorfpr,   Zderr0   r0   r1   test_invalid_attribute_fpA  s    
z5Test_DerivedBivariateSpline.test_invalid_attribute_fpc                 C   sB   | j dd}tt |  W d    n1 s40    Y  d S r  )r  rc  r   r  r*   r  r0   r0   r1   #test_invalid_attribute_get_residualF  s    
z?Test_DerivedBivariateSpline.test_invalid_attribute_get_residualN)
r;   r<   r=   __doc__r  r  r  r  r  r  r0   r0   r0   r1   r    s   r  )r   r   r  ),r  numpyrQ   Znumpy.testingr   r   r   r   r   r   Zpytestr   r   r	   r
   r   r   r   r   r   Zscipy.interpolate._fitpack_pyr   r   r   r   Zscipy.interpolate._fitpack2r   r   r   r   r   r   r   r   r   r   r   r  r  r)  r.  rq  r  r  r0   r0   r0   r1   <module>   s*    $,  x  z 
U M @
