U
    Gvfm                     @   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e+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-S ).TestUnivariateSplinec                 C   sr   dddg}dddg}t ||dd}t| ddg t| ddg t| d t|dddgdddg d S )N         k              ?r   r   	get_knots
get_coeffsr   get_residualselfxylut r.   I/tmp/pip-unpacked-wheel-96ln3f52/scipy/interpolate/tests/test_fitpack2.pytest_linear_constant   s    

z)TestUnivariateSpline.test_linear_constantc                 C   s   dddg}dddg}t ||dd}d}tt|t|| tt|t||dd ddd	g}tt|t|| tt|t||dd d S )
Nr   r   r    r      r!   )nur$         @)r   r   r   )r*   r+   r,   r-   argr.   r.   r/   test_preserve_shape   s    


z(TestUnivariateSpline.test_preserve_shapec                 C   sr   dddg}dddg}t ||dd}t| ddg t| ddg t| d t|dddgdddg d S )	Nr   r   r    r   r1   r!   r#   r$   r%   r)   r.   r.   r/   test_linear_1d&   s    

z#TestUnivariateSpline.test_linear_1dc                 C   sL   G dd dt }|dddddgdddddg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__3   s    zBTestUnivariateSpline.test_subclassing.<locals>.ZeroSpline.__call__N)__name__
__module____qualname__r7   r.   r.   r.   r/   
ZeroSpline2   s   r;   r   r   r    r1      r!   r$   r3   r#   )r   r   )r*   r;   spr.   r.   r/   test_subclassing/   s    "z%TestUnivariateSpline.test_subclassingc                 C   s@   dddddg}ddddd	g}t ||dd
}t|g tg  d S )Nr   r    r<      	   r   r1         r!   )r   r   r	   r*   r+   r,   splr.   r.   r/   test_empty_input9   s    z%TestUnivariateSpline.test_empty_inputc                 C   s@   dddddg}ddddd	g}t ||dd
}t| d d d S )Nr   r    r<   r?   r@   r   r1   rA   rB   r!   g7ã?)r   r   rootsrC   r.   r.   r/   
test_roots@   s    zTestUnivariateSpline.test_rootsc                 C   sF   dddddg}ddddd	g}t ||dd
}t|dddddg d S )Nr   r    r<   r?   r@   r   r1   rA   rB   r!         @g;@gpZ<o?gOmǿg      ?)r   r   derivativesrC   r.   r.   r/   test_derivativesF   s    

z%TestUnivariateSpline.test_derivativesc                 C   st   t d}|d d|d   }t||dd}td|}t|ddd	d
gdd t||ddd}t|d|dd d S )N   r           @r   r   sg     F@g     C@g      6@      @V瞯<atol)rN   r"   )nparanger   r   r   r   rI   )r*   r+   r,   tckZdersrD   r.   r.   r/   test_derivatives_2M   s     


z'TestUnivariateSpline.test_derivatives_2c                 C   s   ddddddddd	d
dddg}dddddddddddddg}dddddddddddddg}t |||dd}tdddd g}t|d!d"d#d$g|d%d& dS )'zRegression test for #1375.      g<&g_g@7ѿg46	<ƿgBϠr#   gBϠ?g46	<?g@7?g_?g<&?      ?g1\_#?g~a?gw?g5??g0ms?gx?g   mBgo!@gu)	~@ge?֭z@gb@gv5|@geSs@N)r+   r,   wrN   gJdv?gc?g=?gt?皙?      ??Gz?gMb@?rQ   )r   r	   r   )r*   r+   r,   rY   rD   Zdesiredr.   r.   r/   test_resize_regression]   sB    
                 z+TestUnivariateSpline.test_resize_regressionc           
      C   sF  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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tdd t||dd|d dd dD ]>}t||}t	t
||ft|d t	t
tft|||d qd S )Nr<   Zdtyper       d   r   r#         @r+   r,   )r   Zextrapolate)extgؗҜ<rQ   )r   zeros)r   raise)r    constr1   r   r   )rd   unknown)r+   r,   rf   )rS   rT   floatr   copy
logical_orr   r   r   assert_raises
ValueErrordictr&   r   )
r*   r+   r,   xpZxp_zerosZxp_clipclsrD   rf   tr.   r.   r/   test_out_of_range_regressionm   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 )Nrb   rX   r   c   
   )rd   e   bbox)rS   rT   r   rn   ro   r   )r*   xsZysZknotsry   r.   r.   r/   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    rM   r   333333?g333333?皙?)rS   r   cosr   Zantiderivative
derivativer   integral)r*   r+   r,   rD   spl2r.   r.   r/   "test_derivative_and_antiderivative   s    


z7TestUnivariateSpline.test_derivative_and_antiderivativec                 C   sV   dddddg}dddd	d
g}t ||ddd}ddddddg}t| |ddd d S )Nr   r   r1            !@r[   皙??r3   r<   ri   r    )rf   r"   rd   r   g      r@   g      #@rv   rP   rQ   )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 ]8}t||d|d}dD ]\}}t|||ddd	 q.qd S )
Nr#   rX   r?   r1   r   )rN   rf   ))r   r   )r   r<   )r   r<   r   r   )r   )r   rd   rP   rQ   )rS   r   ranger   r   r   )r*   r+   rf   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 ]}||d< tt	tft
||dd tt	tft
||dd tt	tft
|||dd	 ||d< ||d< tt	tft
|||dd
 tt	tft
|||dd
 tt	tft
||||dd qXd S )Nrv   r_   r    Tcheck_finiter1   rd   r+   r,   r   )r+   r,   rs   r   )r+   r,   rY   r   r+   r,   rs   rY   r   )rS   rT   rk   	ones_liker   r&   naninfrn   ro   rp   r   r   )r*   r+   r,   rY   rD   rs   Zy_endzr.   r.   r/   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t	||ddd ttt
ft	||dd d S )Nrv   r_   r    r   r   Tr   r1   )r+   r,   rY   rN   r   r   )r+   r,   rN   r   r   )rS   rT   rk   r   r   r&   r   rn   ro   rp   r   r*   xxyyr+   r,   rY   rD   rs   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t||dd
 ttt	ft||dd
 ttt
ft||||dd d S )Nrv   r_   r    r   rX   r   Tr   r1   r   r   )rS   rT   rk   r   r   r&   rn   ro   rp   r   r   r   r.   r.   r/   test_increasing_x   s"    
z&TestUnivariateSpline.test_increasing_xc              	   C   sN  t t*}dddddg}dddd	g}t|| W 5 Q R X d
t|jksJtt t<}dddddg}dddd	dg}ddddg}t|||d W 5 Q R X dt|jkstt t}d}t|||d W 5 Q R X dt|jkstt t}t||dd W 5 Q R X dt|jkstt t}t||dd W 5 Q R X dt|jksJtd S )Nr   r   r1   r   r   r[   r   r   r3   !x and y should have a same lengthffffff@rW   rX   rY   %x, y, and w should have a same lengthrd   rx   bbox shape should be (2,)r!   k should be 1 <= k <= 5rM   s should be s >= 0.0)rn   ro   r   strvalueAssertionErrorr*   infor   r   w_valuesry   r.   r.   r/   (test_invalid_input_for_univariate_spline   s*    




z=TestUnivariateSpline.test_invalid_input_for_univariate_splinec              	   C   s  t t*}dddddg}dddd	g}t|| W 5 Q R X d
t|jksJtt t<}dddddg}dddd	dg}ddddg}t|||d W 5 Q R X dt|jkstt t}d}t|||d W 5 Q R X dt|jkstt t}t||dd W 5 Q R X dt|jkstd S )Nr   r   r1   r   r   r[   r   r   r3   r   r   rW   rX   r   r   rd   rx   r   r!   r   )rn   ro   r   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  dddddg}dddd	d
g}t ||dd}| dd }tt,}dddddg}dddd	g}t||| W 5 Q R X dt|jksttt>}dddddg}dddd	d
g}ddddg}t||||d W 5 Q R X dt|jksttt}d}t||||d W 5 Q R X dt|jks ttt}d}t||||d W 5 Q R X dt|jks\ttt}t|||dd W 5 Q R X dt|jkstd S )Nr   r   r1   r   r   r[   r   r   r3   r   Tr   r    r   rX   r   r   )rb   rx   z;Interior knots t must satisfy Schoenberg-Whitney conditionsrd   r   r!   r   )r   r&   rn   ro   r   r   r   r   )r*   r   r   rD   Zt_valuesr   r   ry   r.   r.   r/   ,test_invalid_input_for_lsq_univariate_spline4  s4    




zATestUnivariateSpline.test_invalid_input_for_lsq_univariate_splinec                 C   s   t dddddg}t dddd	d
g}t dddddg}t ddg}t||||d}t| | | | d}t|ddddg|ddddg d S )Nr   r   r1   r   r   r[   r   r   r3   r   rX   r   rb   )r+   r,   rY   ry   rZ   r\   r]   )rS   r	   r   tolistr   )r*   r   r   r   ry   spl1r   r.   r.   r/   test_array_like_inputV  s     z*TestUnivariateSpline.test_array_like_inputc              m   C   s$  t d}ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd	ddddddddddd
dddddddddddddd
dddd	dgm}t .}|td}t||dd tt|d W 5 Q R X d S )Nm   r#   g%@g      &@g      %@gffffff%@g333333%@g      '@g%@g$@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   len)r*   r+   r,   suprr.   r.   r/   test_fpknot_oob_crashe  s                                                                                             z*TestUnivariateSpline.test_fpknot_oob_crashN)r8   r9   r:   r0   r5   r6   r>   rE   rG   rJ   rV   r^   rt   r{   r   r   r   r   r   r   r   r   r   r   r   r.   r.   r.   r/   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   dddddddddg	}dddddddddg	}dddddddddg	}d}d| d| g}d| d| g}t  6}|td}t|||||ddd}	tt|d W 5 Q R X t|	ddd d S )Nr   r   r    rZ   
The coefficients of the splinekxky      @)r   r   r   r   r   r   r   
r*   r+   r,   r   rN   txtyr   r   r-   r.   r.   r/   r0     s    z+TestLSQBivariateSpline.test_linear_constantc              
   C   s  dddddddddg	}dddddddddg	}dddddddddg	}d}d| d| g}d| d| g}t  (}|td	 t|||||ddd
}W 5 Q R X | \}}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    r   r?   rK   r1   rZ   r   r   rd   )rZ   r[   r\   )r}   皙?gffffff?)r   filterr   r   r&   zipr   )r*   r+   r,   r   rN   r   r   r   r-   ZxaxbZyaZybrs   rq   ypZzpr.   r.   r/   test_bilinearity  s0     ""z'TestLSQBivariateSpline.test_bilinearityc              
   C   sl  dddddddddg	}dddddddddg	}t dddddddddg	}d}d| d| g}d| d| g}t 6}|td	}t|||||ddd
}	tt|d W 5 Q R X |	 \}}|	||}
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 )Nr   r   rK   r    r   r?   r1   rZ   r   r         ?rd   )r	   r   r   r   r   r   r   r&   r
   sumr   r   )r*   r+   r,   r   rN   r   r   r   r   r-   tztrpzr.   r.   r/   test_integral  s$    
(N
 z$TestLSQBivariateSpline.test_integralc           
   
   C   s   dddddddddg	}dddddddddg	}dddddddddg	}d}d| d| g}d| d| g}t  6}|td}t|||||ddd}	tt|d W 5 Q R X t|	g g td t|	g g dd	td
 d S )Nr   r   r    rZ   r   r   r   Fgridr   )	r   r   r   r   r   r   r   rS   rg   r   r.   r.   r/   rE     s    z'TestLSQBivariateSpline.test_empty_inputc              
   C   s2  d}d| d| g}d| d| g}t t>}tdd}tdd}tjdddd}t||||| W 5 Q R X dt|jkstt tN}tdd}tdd}tdd}tjddd	d}t||||||d
 W 5 Q R X dt|jkstt t&}tdd}t||||||d
 W 5 Q R X dt|jks8tt t}d}	t||||||	d W 5 Q R X dt|jksxtt t}t|||||ddd W 5 Q R X dt|jkstt t}
t|||||dd W 5 Q R X dt|
jkstt t}
t|||||dd W 5 Q R X dt|
jks.td S )NrZ   r   r    rX         $@rv   num%x, y, and z should have a same length   r   (x, y, z, and w should have a same lengthrW   w should be positiver   rb   r   rx   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))rn   ro   rS   r   r   r   r   r   )r*   rN   r   r   r   r+   r,   r   rY   ry   exc_infor.   r.   r/   test_invalid_input  sF    




 


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 ddddg}t z}	|	td}
t|||||||d}t| | | | | | |d}t|dd|dd t	t
|
d	 W 5 Q R X d S )
NrZ   r   r    rX   r   r   )rY   ry   rL   r   )rS   r	   r   r   r   r   r   r   r   r   r   )r*   rN   r   r   r+   r,   r   rY   ry   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 0}|td}t|||||}t	t
|d	 W 5 Q R X t|||d
d| dS )zkTest for the case when the input knot-location arrays in x and y are
        of different lengths.
        r   rb   r   rZ   g     X@   !   r   r   Fr   N)rS   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)
r8   r9   r:   r0   r   r   rE   r   r   r   r.   r.   r.   r/   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   dddddddddg	}dddddddddg	}dddddddddg	}t |||ddd}t| ddddgddddgf t| ddddg t| d t|dddg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/   r0   !  s    "z.TestSmoothBivariateSpline.test_linear_constantc              	   C   s   dddddddddg	}dddddddddg	}dddddddddg	}t |||ddd}t| ddddgddddgf t| ddddg t| d t|dddgddgddgddgddgg d S )	Nr   r   r    r   r1   r   r#   r$   r   r   r.   r.   r/   r6   +  s    "z(TestSmoothBivariateSpline.test_linear_1dc              
   C   sN  dddddddddg	}dddddddddg	}t dddddddddg	}t &}|td t|||dddd	}W 5 Q R X dddg}dddg}|||}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 )Nr   r   r1   r    r   r?   rK   z
The required storage space)r   r   rN   r   rd   )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   5  s,    


(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   rd   r   rb   )rS   r   r   r   r   r   )
r*   r+   r,   r   xiyirU   Zres1Zinterp_Zres2r.   r.   r/   test_rerun_lwrk2_too_smallP  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 5 Q R X dt|jksZtt tJ}tdd}tdd}tdd}tjdddd}t||||d W 5 Q R X dt|jkstt t"}td	d}t||||d W 5 Q R X d
t|jkstt t}d}t||||d W 5 Q R X dt|jksDtt t}t|||ddd W 5 Q R X dt|jks~tt t}t|||d	d W 5 Q R X dt|jkstt t}t|||dd W 5 Q R X dt|jkstt t}t|||dd W 5 Q R X dt|jks&td S )NrX   r   rv   r   r   r   r   r   rW   r   r   rx   r   r   r   rM   r   r#   r   r   )rn   ro   rS   r   r   r   r   r   )r*   r   r+   r,   r   rY   ry   r   r.   r.   r/   r   _  sF    








z,TestSmoothBivariateSpline.test_invalid_inputc                 C   s   t dddddddddg	}t dddddddddg	}t dddddddddg	}t dddddddddg	}t ddddg}t|||||ddd}t| | | | | ddd}t|dd	|dd	 d S )
Nr   r   r    rX   r   )rY   ry   r   r   )ry   rY   r   r   rZ   r[   )rS   r	   r   r   r   )r*   r+   r,   r   rY   ry   r   r   r.   r.   r/   r     s      z/TestSmoothBivariateSpline.test_array_like_inputN)	r8   r9   r:   r0   r6   r   r   r   r   r.   r.   r.   r/   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   r[   r   rL   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_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*   r.   r.   r/   r0     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   rS   rg   r   r.   r.   r/   rE     s    z-TestLSQSphereBivariateSpline.test_empty_inputc                 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 }ttD}t dd|d	t }	t|	|\}
}t|
 | |j	 || W 5 Q R X d
t
|jkstttD}t dd|d	t }	t|	|\}
}t|
 | |j	 || W 5 Q R X d
t
|jksRtttH}t dd|d	d t }t||\}}t| | |j	 || W 5 Q R X dt
|jkstttH}t dd|d	d t }t||\}}t| | |j	 || W 5 Q R X dt
|jks&tt||\}}tt6}t|}d|d< t| | |j	 || W 5 Q R X dt
|jksttt6}t|}t|d< t| | |j	 || W 5 Q R X dt
|jksttt6}t|}d|d< t| | |j	 || W 5 Q R X dt
|jks<ttt:}t|}dt |d< t| | |j	 || W 5 Q R X dt
|jkstttB}tdddddddddg	}t| | |j	 |||d W 5 Q R X dt
|jksttt(}t| | |j	 ||dd W 5 Q R X dt
|jksFttt(}t| | |j	 ||dd W 5 Q R X dt
|jkstd S )Nr   r[   r   rL   r   r<   皙rX   r   theta should be between [0, pi]rZ   皙?phi should be between [0, 2pi]r#   ztt should be between (0, pi)ztp should be between (0, 2pi)r   rW   r$   r   r   r   r   )r   r   r   r   rn   ro   r   r   r   r   r   r   r   rS   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   r[   r   rL   r   r<   r   rX   )
r   r   r   r   r   r   r   r   r   r   )r*   r   r   r   r   r   r   r   r   r   rY   r   r   r.   r.   r/   r   
  s@       
 z2TestLSQSphereBivariateSpline.test_array_like_inputNr8   r9   r:   r   r0   rE   r   r   r.   r.   r.   r/   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 dddddddddg	}t|||dd| _d S )Nr   r[         ?r$   r        _BrM   )r	   r   r   r-   )r*   r   r   r   r.   r.   r/   r   $  s    , &z,TestSmoothSphereBivariateSpline.setup_methodc                 C   sB   t | j d t| dddg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   s8   t | g g td t | jg g ddtd d S r   )r   r-   rS   rg   r   r.   r.   r/   rE   1  s    z0TestSmoothSphereBivariateSpline.test_empty_inputc                 C   sH  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 dddddddddg	}t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 5 Q R X d	t|jkstt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 5 Q R X d	t|jksttttH}t dt tdt dt tdt dt tdt g	}t|||dd W 5 Q R X dt|jkstttH}t dt tdt dt tdt dt tdt g	}t|||dd W 5 Q R X dt|jksHttt2}t dddddddddg	}t||||dd W 5 Q R X dt|jksttt}t|||dd W 5 Q R X dt|jksttt}t|||dd W 5 Q R X dt|jksttt}t|||dd W 5 Q R X dt|jksDtd S )Nr   r[   r	  r$   r    r   r
  rM   r  r  r  rX   g @rW   rY   rN   r   s should be positiver   r   )r	   r   rn   ro   r   r   r   r   )r*   r   r   r   r   r  r  r  r.   r.   r/   r   5  st    &  &
   
   
  
  



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 dddddddddg	}t dddddddddg	}t||||dd}t| | | | dd}t|dd|dd d S )	Nr   r[   r	  r$   r    rX   r
  r  )rS   r	   r   r   r   r   )r*   r   r   r   rY   r   r   r.   r.   r/   r   g  s&    "   &   z5TestSmoothSphereBivariateSpline.test_array_like_inputNr  r.   r.   r.   r/   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 dddddg}t dddddg}t dddddgdddddgdddddgdddddgdddddgg}t|||}t|||| d S )Nr   r   r    r1   r<   r	   r   r   r   r.   r.   r/   test_defaultsy  s
    Dz%TestRectBivariateSpline.test_defaultsc              
      s   t dddddg}t dddddg}t dddddgdddddgdddddgdddddgdddddgg}t||| ddddd	d
dg}dd	d
ddddg} ||}t  fddt||D }t|| d S )Nr   r   r    r1   r<   ffffff@g333333@r[   gffffff
@g333333?rc   g      @rX   c                    s   g | ]\}} ||d  qS r   r.   .0rq   r   r-   r.   r/   
<listcomp>  s     z9TestRectBivariateSpline.test_evaluate.<locals>.<listcomp>)r	   r   evr   r   )r*   r+   r,   r   r   r   zizi2r.   r  r/   test_evaluate  s    Dz%TestRectBivariateSpline.test_evaluatec              
   C   s  t dddddg}t dddddg}t dddddgdddddgdddddgdddddgdddddgg}t dddddgdddddgdddddgddd	ddgdddddggd
 }t dddddgdddddgdddddgdddddgdddddgg}t dddddgdddddgdddddgddddd gdddddggd
 }t|||}t|||dd!| t|||dd"| t|||ddd#| d S )$Nr   r   r    r1   r<   r   ra   rO   rd   r$         r         пr   (           @0@     @0   r`   rK           +     +@dxdy)r-  r/  r  r*   r+   r,   r   r-  r/  Zdxdyr-   r.   r.   r/   test_derivatives_grid  s0    D& &   z-TestRectBivariateSpline.test_derivatives_gridc              
   C   s   t dddddg}t dddddg}t dddddgdddddgdddddgdddddgdddddgg}t dddddg}t dddd	d
g}t dddddgd }t|||}t|||ddd| t|||ddd| t|||dddd| d S )Nr   r   r    r1   r<   r   UUUUUU?rd   r  r     A   7             8@F)r-  r   )r/  r   r-  r/  r   r  r0  r.   r.   r/   rJ     s    Dz(TestRectBivariateSpline.test_derivativesc              
   C   s  t dddddg}t dddddg}t dddddgdddddgdddddgdddddgdddddgg}t dddddgdddddgdddddgddd	ddgdddddggd
 }t dddddgdddddgdddddgdddddgdddddgg}t dddddgdddddgdddddgddddd gdddddggd
 }t|||}t|dd||| t|dd||| t|dd||| d S )!Nr   r   r    r1   r<   r   r  ra   r  rO   rd   r  r$   r  r   r  r   r  r   r!  r"  r#  r$  r%  r&  r`   r'  rK   r(  r)  r*  r+  r	   r   r   partial_derivativer0  r.   r.   r/   #test_partial_derivative_method_grid  sD    z;TestRectBivariateSpline.test_partial_derivative_method_gridc              
   C   s  t dddddg}t dddddg}t dddddgdddddgdddddgdddddgdddddgg}t dddddg}t dddd	d
g}t dddddgd }t|||}t|dd||dd| t|dd||dd| t|dd||dd| d S )Nr   r   r    r1   r<   r   r2  rd   r  r  r3  r4  r5  r6  r7  Fr   r9  r0  r.   r.   r/   test_partial_derivative_method  s6    z6TestRectBivariateSpline.test_partial_derivative_methodc              	   C   s^   t dddddgtd}| }t|j|jf}t|||}tt |dd W 5 Q R X d S )Nr   r   r   r    r1   r_   )	r	   rk   rl   r   sizer   rn   ro   r:  r   r.   r.   r/   'test_partial_derivative_order_too_large  s    
z?TestRectBivariateSpline.test_partial_derivative_order_too_largec              
   C   s   t dddddg}t dddddg}t dddddgdddddgdddddgdddddgdddddgg}t|||}t|||||d d d f |d d d f dd d S )Nr   r   r    r1   r<   Fr   )r	   r   r   r   r.   r.   r/   test_broadcast  s
    Dz&TestRectBivariateSpline.test_broadcastc                 C   s8  t tz}tdddddg}tdddddg}tdddddgdddddgdddddgdddddgdddddgg}t||| W 5 Q R X dt|jkstt tz}tdddddg}tdddddg}tdddddgdddddgdddddgdddddgdddddgg}t||| W 5 Q R X dt|jks6tt tn}tdddddg}tdddddg}tdddddgdddddgdddddgdddddgg}t||| W 5 Q R X d	t|jkstt tp}tdddddg}tdddddg}tddddgddddgddddgddddgddddgg}t||| W 5 Q R X d
t|jksXtt t}tdddddg}tdddddg}tdddddgdddddgdddddgdddddgdddddgg}d}t||||d W 5 Q R X dt|jkstt t}t|||dd W 5 Q R X dt|jks4td S )Nr   r   r    r1   r<   r   x must be strictly increasingy must be strictly increasingz7x dimension of z must have same number of elements as xz7y dimension of z must have same number of elements as yr   rx   r   rW   rM   r   )rn   ro   r	   r   r   r   r   )r*   r   r+   r,   r   ry   r.   r.   r/   r     sh    
& 
& 
&

 
 


& 
z*TestRectBivariateSpline.test_invalid_inputc              
   C   s   t dddddg}t dddddg}t dddddgdddddgdddddgdddddgdddddgg}t ddddg}t||||d}t| | | | d}t|dd|dd d S )Nr   r   r    r1   r<   rx   rX   )r	   r   r   r   )r*   r+   r,   r   ry   r   r   r.   r.   r/   r     s    & z-TestRectBivariateSpline.test_array_like_inputc              	   C   s
  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 5 Q R X d	t
|jkst|	 }d|d< tt	}||| W 5 Q R X d
t
|jkstd S )Nr   r   r   rH   rM   r   r    MbP?r@  rA  )rS   randomuniformr   r   r   rT   rl   rn   ro   r   r   r   )r*   ZNSampThetaPhiDataZInterpolatorZNLonZNLatZGridPosLatsZGridPosLonsZnonGridPosLatsr   ZnonGridPosLonsr.   r.   r/   test_not_increasing_input&  s(    



z1TestRectBivariateSpline.test_not_increasing_inputN)r8   r9   r:   r  r  r1  rJ   r;  r<  r>  r?  r   r   rH  r.   r.   r.   r/   r  x  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   s   t ddt d d}t dtd d}tdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgg}t|||}t|||| d S N{Gz?r   r?   r   r    )r   r   r	   r   r   r*   r,   r+   r   r-   r.   r.   r/   r  E  s    2  z+TestRectSphereBivariateSpline.test_defaultsc                    s  t ddt d d}t dtd d}tdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgg}t||| ddddd	d
dg}dddddddg} ||}t fddt||D }t|| d S )NrK  r   r?   r   r    r~   r  g@r   gQ@g      @r$   r   r  g?gjt?rX   -C6?c                    s   g | ]\}} ||d  qS r  r.   r  r  r.   r/   r  X  s     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  N  s    2  z+TestRectSphereBivariateSpline.test_evaluatec                 C   s8  t t dt ddd jt dt t ddd j}ttB}t d	d
dt j d }t dddt j d }t	||| W 5 Q R X dt
|jkstttB}t dddt j d }t dddt j d }t	||| W 5 Q R X dt
|jkstttB}t dd
dt j d }t dddt j d }t	||| W 5 Q R X dt
|jkshtttB}t dd
dt j d }t dddt j d }t	||| W 5 Q R X dt
|jkstttF}t dd
dt j d }t dddt j d }t	|||d	d W 5 Q R X dt
|jks4td S )N     V@      T      T@        f@r#        u@r@   rd      r   ^  u should be between (0, pi)rv      K v[0] should be between [-pi, pi)h  "v[-1] should be v[0] + 2pi or lessrM   r  rS   dotZ
atleast_2dr   r   absrn   ro   r   r   r   r   r   r*   r   r   r   r   r.   r.   r/   r   [  s8    




z0TestRectSphereBivariateSpline.test_invalid_inputc                 C   s*  t ddt d d}t dtd d}tdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddg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 )NrK  r   r?   r   r    {Gz?)dthetar,  rM  ZrtolrR   )dphir.  )rb  rd  ư>r-  r/  r   rB  r   Frb  r   r   rd  r   rb  rd  r   )r   r   r	   r   r   _numdiff_2dr   r:  rL  r.   r.   r/   r1  }  sR    2    " z3TestRectSphereBivariateSpline.test_derivatives_gridc                    s  t ddt d d}t dtd d}tdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddg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 )NrK  r   r?   r   r    ra  Frg  c                    s    | |ddS NFr   r.   re   r  r.   r/   <lambda>      z@TestRectSphereBivariateSpline.test_derivatives.<locals>.<lambda>r,  rM  rc  rh  c                    s    | |ddS rk  r.   re   r  r.   r/   rl    rm  r.  ri  c                    s    | |ddS rk  r.   re   r  r.   r/   rl    rm  re  rf  rB  )r   r   r	   r   r   r   r   rj  )r*   r,   r+   r   r.   r  r/   rJ     s6    2     z.TestRectSphereBivariateSpline.test_derivativesc                 C   s8  t t dt ddd jt dt t ddd j}ttB}t d	d
dt j d }t d	ddt j d }t	||| W 5 Q R X dt
|jkstttB}t dddt j d }t d	ddt j d }t	||| W 5 Q R X dt
|jkstttB}t dd
dt j d }t dddt j d }t	||| W 5 Q R X dt
|jkshtttB}t dd
dt j d }t dddt j d }t	||| W 5 Q R X dt
|jkstttF}t dd
dt j d }t dddt j d }t	|||dd W 5 Q R X dt
|jks4td S )NrN  rO  rP  rQ  rR  r#   rS  r@   r   rT  rU  rV  rv      rX  rY  rZ  r[  r\  rd   rM   r  r]  r`  r.   r.   r/   test_invalid_input_2  s8    




z2TestRectSphereBivariateSpline.test_invalid_input_2c                 C   s   t ddt d d}t dtd d}tdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgg}t|||}t| | | }t|||||| d S rJ  )r   r   r	   r   r   r   )r*   r,   r+   r   r   r   r.   r.   r/   r     s    " z3TestRectSphereBivariateSpline.test_array_like_inputc                 C   s   t dddddg}t dddd	d
g}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 )Nr!     #   r  -   iiiir|   r   r   g     B@g     `Sg     Fg=Eg     HgDioEG)rS   r	   r   radiansr   r   )r*   r   r   Zmeshr   Zlat_rZlon_rZinterpolatorZ	query_latZ	query_lonZdata_interpZansr.   r.   r/   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   rv   )r@   r@   ))TT)TF)FFr   )rN   Zpole_continuity)rS   rT   r   rg   r   )r*   uvr   pr.   r.   r/   test_pole_continuity_gh_14591  s
    
z;TestRectSphereBivariateSpline.test_pole_continuity_gh_14591N)r8   r9   r:   r  r  r   r1  rJ   ro  r   rt  rx  r.   r.   r.   r/   rI  D  s   	"!"rI  :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)ro   )funcr+   r,   r-  r/  r   r.   r.   r/   rj    s    
$$"
rj  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 8}|td t	|| tdddtd	d
ddd| _
W 5 Q R X t|| | _tddd}|d }t fddt jD }t|||| _tttdtd| _d S )Nrv   r      r    r   r[   g     3@r1   r$   g     4@rK  r   r   r   rX   c                    s   g | ]}t  |qS r.   )rS   Zroll)r  ir   r.   r/   r  "  s     z<Test_DerivedBivariateSpline.setup_method.<locals>.<listcomp>)rS   Zconcatenatelistr   r   r   r   r   r   r   r   r   
lut_smoothr	   r=  r   lut_rect	itertoolsproductorders)r*   r+   r,   r   r   r   zzr.   r~  r/   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 )NrH   Fr   r8  )r  r   r:  r   r*   ZnuxZnuyZlut_derr   r   r.   r.   r/   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   r8  )r  r  r:  r   r  r.   r.   r/   test_creation_from_Smooth-  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 )Nr[   r$   Fr   r8  )r  r  r:  r   r  r.   r.   r/   test_creation_from_Rect4  s
    z3Test_DerivedBivariateSpline.test_creation_from_Rectc              	   C   s,   | j dd}tt |j W 5 Q R X d S Nr   )r  r:  rn   AttributeErrorfpr*   Zderr.   r.   r/   test_invalid_attribute_fp;  s    
z5Test_DerivedBivariateSpline.test_invalid_attribute_fpc              	   C   s.   | j dd}tt |  W 5 Q R X d S r  )r  r:  rn   r  r(   r  r.   r.   r/   #test_invalid_attribute_get_residual@  s    
z?Test_DerivedBivariateSpline.test_invalid_attribute_get_residualN)
r8   r9   r:   __doc__r   r  r  r  r  r  r.   r.   r.   r/   r{    s   r{  )r   r   ry  )-r  ZnumpyrS   Znumpy.testingr   r   r   r   r   r   Zpytestr   rn   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  rI  rj  objectr{  r.   r.   r.   r/   <module>   s*    $,  r  z 
U M @
