a
    ‡ù»j±ê  ã                   @   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   úKE:\soccer\ml_env\Lib\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Ñ¿gš46	<Æ¿gŠÅóBÏ ¹¿r$   gŠÅóBÏ ¹?gš46	<Æ?g@ø³Ìà7Ñ?g_�µ€Õâ?gææ<ß&Îä?ç      ð?)rb   ç1\_#ä?ç~aèÇ�â?çwõÆÿ“Ù?ç¶ß5?×?ç0¯m›sÖ?gî­x—‰Ö?rg   rf   re   rd   rc   rb   )ç   ¢”mBçoÙ!þ‡…@çuª)	•~@ç¡eÝ?Ö­z@ç½Œbùý‚@ç¦Öû�v5|@geS®ð®×s@rm   rl   rk   rj   ri   rh   N)r-   r.   ÚwrP   )gJ·dØvÖ?gÔc�Œà?gœž=¸ì?gt²—ï?©çš™™™™™¹?ç      à?çÍÌÌÌÌÌì?g®Gáz®ï?gü©ñÒMb@?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� q�dD ]>}t|||d�|d dd� t||||d�|ƒ|d dd� qÔd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,   Z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 s˜0    Y  dt|jƒv s´J ‚t tƒ�"}d}t|||d	� W d   ƒ n1 sä0    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 �sšJ ‚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 s˜0    Y  dt|jƒv s´J ‚t tƒ�"}d}t|||d	� W d   ƒ n1 sä0    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 s„J ‚ttƒ�8}g d¢}g d¢}g d	¢}t||||d
� W d   ƒ n1 sÊ0    Y  dt|jƒv sæJ ‚d}tt|d��$}d}t||||d� W d   ƒ n1 �s"0    Y  ttƒ�$}d}t||||d� W d   ƒ n1 �s`0    Y  dt|jƒv �s~J ‚ttƒ� }t|||dd� W d   ƒ n1 �s®0    Y  dt|jƒv �sÌJ ‚d S )Nr—   rµ   Tr¥   r!   r4   r³   r´   )rb   rb   rb   rb   r·   r¸   z;Interior knots t must satisfy Schoenberg-Whitney conditions)Úmatch)rw   éœÿÿÿr�   ry   r¹   r˜   r"   rº   )r   r(   rƒ   r„   r   r¼   r½   )	r,   r›   rœ   rJ   Zt_valuesr¿   rÀ   ÚmessagerŽ   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 )Ném   )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 sˆ0    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|||ƒ|ƒ qàqØqÌqªd 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 sŒ0    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 sˆ0    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 s–J ‚t tƒ�X}t dd¡}t dd¡}t dd¡}tjddd	d�}t||||||d
� W d   ƒ n1 sü0    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 �s°0    Y  dt|jƒv �sÎJ ‚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 �s¨0    Y  dt|
jƒv �sÆJ ‚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 sþ0    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 sš0    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 sÐ0    Y  dt|jƒv sìJ ‚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 �s˜J ‚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 �s0    Y  dt|jƒv �s6J ‚t tƒ� }t|||dd� W d   ƒ n1 �sf0    Y  dt|jƒv �s„J ‚t tƒ� }t|||dd� W d   ƒ n1 �s´0    Y  dt|jƒv �sÒJ ‚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 sä0    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 �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 �s`0    Y  dt
|jƒv �s~J ‚t||ƒ\}}ttƒ�@}t |¡}d|d< t| ¡ | ¡ |j	 ¡ ||ƒ W d   ƒ n1 �sÜ0    Y  dt
|jƒv �súJ ‚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 �s¸0    Y  dt
|jƒv �sÖJ ‚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 �s–0    Y  dt
|jƒv �s´J ‚ttƒ�2}t| ¡ | ¡ |j	 ¡ ||dd� W d   ƒ n1 �sö0    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 sè0    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 �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 �sô0    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 �s’J ‚ttƒ�.}t g d¢ƒ}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 �s0    Y  dt|jƒv �s<J ‚ttƒ� }t|||dd� W d   ƒ n1 �sl0    Y  dt|jƒv �sŠJ ‚ttƒ� }t|||dd� W d   ƒ n1 �sº0    Y  dt|jƒv �sØJ ‚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?   r0  r1  r2  )r   çffffff@g333333@rq   çffffff
@ç333333ó?r!   )r   r6  r7  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?   r0  r1  r2  ©r   r   iìÿÿÿr   r   ©r   r   rv   r   r   ©r   r   r4   r   r   ©r   r   iõÿÿÿr   r   rZ   ©r4   ry   r   r   éüÿÿÿ©r   r&   r   g      ø¿r   ©r    rê   r   ç      Ð¿r    ©é(   içÿÿÿr   é   iØÿÿÿ©iæÿÿÿg     @0@r   g     @0Àé   ©ru   r@   r   éûÿÿÿrX   ©é   g     €+Àr   g     €+@iêÿÿÿr   ©Údx©Údy)rU  rW  r3  ©r,   r-   r.   r¬   rU  rW  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?   r0  r1  r2  ©r   r   gUUUUUUå?r   r   ©r4   ry   r   rJ  rG  ©é    éA   r   é7   é    ç      8@r   F)rU  rð   )rW  rð   ©rU  rW  rð   r3  rX  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?   r0  r1  r2  rB  rC  rD  rE  rZ   rF  rH  rI  rK  rN  rP  rR  r   r   ©r	   r   r   Úpartial_derivativerX  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?   r0  r1  r2  rZ  r[  r\  ra  r   r   Frï   rc  rX  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„   rd  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?   r0  r1  r2  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 s„J ‚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 sì0    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 �sŒJ ‚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 �sö0    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 �s†0    Y  dt|jƒv �s¤J ‚t tƒ� }t|||dd� W d   ƒ n1 �sÔ0    Y  dt|jƒv �sòJ ‚d S )N)r˜   r    r!   r4   r@   r?   r0  r1  r2  ú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?   r0  r1  r2  )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 s¼0    Y  d	t
|jƒv sØJ ‚|	 ¡ }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?rj  rk  )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=   r4  rA  rY  rW   re  rf  rh  ri  r   rÉ   rq  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ç{®Gáz„?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   r4  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 )Nrt  r    rD   ru  rv  rw  )r’   r   r5  gÍÌÌÌÌÌ@rß   gìQ¸…ë@g      @)r&   rä   r#  gÍÌÌÌÌÌÜ?gj¼t“Î?rb   ç-Cëâ6?c                    s   g | ]\}}ˆ ||ƒd  ‘qS r8  r0   r9  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   rA  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 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 �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 �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 �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 �s‚0    Y  dt
|jƒv �s J ‚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 )Nrt  r    rD   ru  rv  rw  ç{®Gáz”?r   )ÚdthetarT  ry  ©Zrtolr]   )ÚdphirV  )rŽ  r�  ç�íµ ÷Æ°>©rU  rW  rý   rl  r   F©rŽ  rð   rï   ©r�  rð   ©rŽ  r�  rð   )r   r   r	   r   r   Ú_numdiff_2dr   rd  rx  r0   r0   r1   rY  ƒ  sJ    þÿÿþÿÿÿÿÿÿ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 )Nrt  r    rD   ru  rv  rw  r�  r   Fr“  c                    s   ˆ | |dd�S ©NFrï   r0   rz   r;  r0   r1   Ú<lambda>³  r=  z@TestRectSphereBivariateSpline.test_derivatives.<locals>.<lambda>rT  ry  r�  r”  c                    s   ˆ | |dd�S r—  r0   rz   r;  r0   r1   r˜  ¶  r=  rV  r•  c                    s   ˆ | |dd�S r—  r0   rz   r;  r0   r1   r˜  ¹  r=  r‘  r’  rl  )r   r   r	   r   r   r   r   r–  )r,   r.   r-   r¬   r0   r;  r1   rW   ¥  s0    þþþ
ÿý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 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 �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 �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 �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 �s‚0    Y  dt
|jƒv �s J ‚d S )Nrz  r{  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 rs  )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)rM  é   é#   rL  é-   )i¦ÿÿÿi«ÿÿÿé°ÿÿÿiµÿÿÿr�   r   r   rœ  g     ÀB@rž  g     `SÀg     €FÀgÐñÑâŒ=EÀg     ˆHÀgDioð…EGÀ)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=   r4  rA  r   rY  rW   rš  rÉ   r   r¤  r0   r0   r0   r1   rr  J  s   	"""rr  ç:Œ0âŽyE>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.   rU  rW  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 sª0    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@rt  rü   r   rö   rb   c                    s   g | ]}t  ˆ |¡‘qS r0   )rQ   Zroll)r:  Ú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	   rg  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ï   rb  )r°  r  rd  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ï   rb  )r°  r¬  rd  r   r²  r0   r0   r1   Útest_creation_from_Smooth5  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ï   rb  )r°  r­  rd  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­  rd  rƒ   ÚAttributeErrorÚfp©r,   Zderr0   r0   r1   Útest_invalid_attribute_fpC  s    
z5Test_DerivedBivariateSpline.test_invalid_attribute_fpc                 C   sB   | j  dd¡}ttƒ� | ¡  W d   ƒ n1 s40    Y  d S r¶  )r¬  rd  rƒ   r·  r*   r¹  r0   r0   r1   Ú#test_invalid_attribute_get_residualH  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/  rr  r–  r§  r0   r0   r0   r1   Ú<module>   s*    $,  x  z 
U M B
