U
    »mœdmä  ã                   @   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.   ú^/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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Ñ¿gš46	<Æ¿gŠÅóBÏ ¹¿r#   gŠÅóBÏ ¹?gš46	<Æ?g@ø³Ìà7Ñ?g_�µ€Õâ?gææ<ß&Îä?ç      ð?g1\_#ä?g~aèÇ�â?gwõÆÿ“Ù?g¶ß5?×?g0¯m›sÖ?gî­x—‰Ö?g   ¢”mBgoÙ!þ‡…@guª)	•~@g¡eÝ?Ö­z@g½Œbùý‚@g¦Öû�v5|@geS®ð®×s@N)r+   r,   ÚwrN   gJ·dØvÖ?gÔc�Œà?gœž=¸ì?gt²—ï?çš™™™™™¹?ç      à?çÍÌÌÌÌÌì?ç®Gáz®ï?gü©ñÒMb@?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� q�dD ]>}t|||d�|d dd� t||||d�|ƒ|d dd� qÔd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*   Z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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�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 lengthçffffff@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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�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s†t‚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sät‚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�s”t‚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 )Ném   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   rz   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|||ƒ|ƒ qöqîqâqÀd 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s‚t‚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sðt‚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�s¶t‚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�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sÄt‚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�s¶t‚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�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sìt‚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�s¼t‚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�sŒt‚ttƒ�6}t |¡}t|d< t| ¡ | ¡ |j	 ¡ ||ƒ W 5 Q R X dt
|jƒk�sät‚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�s˜t‚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�süt‚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�s�t‚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sþt‚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�sÞt‚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�sœt‚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�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  r/  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_derivativer/  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   r1  rd   r  r  r2  r3  r4  r5  r6  FrÎ   r8  r/  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   r9  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sšt‚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�sÆt‚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�süt‚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sÄt‚|	 ¡ }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?  r@  )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  r0  rJ   r:  r;  r=  r>  rß   r²   rG  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ç{®Gáz„?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 )NrJ  r   r?   r   r    r}   r  gÍÌÌÌÌÌ@r¿   gìQ¸…ë@g      @r$   rÃ   r  gÍÌÌÌÌÌÜ?gj¼t“Î?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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�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�sÌt‚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 )NrJ  r   r?   r   r    ç{®Gáz”?)Údthetar+  rL  ©ZrtolrR   )Údphir-  )ra  rc  ç�íµ ÷Æ°>©r,  r.  rÜ   rA  r   F©ra  rÏ   rÎ   ©rc  rÏ   ©ra  rc  rÏ   )r   r   r	   r   r   Ú_numdiff_2dr   r9  rK  r.   r.   r/   r0  }  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 )NrJ  r   r?   r   r    r`  Frf  c                    s   ˆ | |dd�S ©NFrÎ   r.   re   r  r.   r/   Ú<lambda>¬  ó    z@TestRectSphereBivariateSpline.test_derivatives.<locals>.<lambda>r+  rL  rb  rg  c                    s   ˆ | |dd�S rj  r.   re   r  r.   r/   rk  ¯  rl  r-  rh  c                    s   ˆ | |dd�S rj  r.   re   r  r.   r/   rk  ²  rl  rd  re  rA  )r   r   r	   r   r   r   r   ri  )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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�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�sÌt‚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 )NrM  rN  rO  rP  rQ  r#   rR  r@   r   rS  rT  rU  rv   é´   rW  rX  rY  rZ  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 rI  )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  é-   i¦ÿÿÿi«ÿÿÿi°ÿÿÿiµÿÿÿr{   r   r   g     ÀB@g     `SÀg     €FÀgÐñÑâŒ=EÀg     ˆHÀgDioð…EGÀ)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ß   r0  rJ   rn  r²   rs  rw  r.   r.   r.   r/   rH  D  s   	"!"rH  ç:Œ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)ro   )Úfuncr+   r,   r,  r.  rÜ   r.   r.   r/   ri    s    
$$"ÿÿ
ÿri  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@rJ  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Î   r7  )rƒ  rð   r9  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Î   r7  )rƒ  r  r9  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Î   r7  )rƒ  r€  r9  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€  r9  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  r9  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/   rz    s   rz  )r   r   rx  )-r�  Ú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  rH  ri  Úobjectrz  r.   r.   r.   r/   Ú<module>   s*    $,  r  z 
U M @
