o
    ?Hh                     @   sR  d dl Z d dlmZ d dlZd dlmZ d dlZd dl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 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$ d d	l%m&Z& d d
l'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Z0G dd dZ1dS )    N)Lock)suppress_warnings)raises)xp_assert_equalxp_assert_closeassert_almost_equalassert_array_almost_equal)arraydifflinspacemeshgridonespishape)bisplrepbisplevsplrepspalde)	UnivariateSplineLSQUnivariateSplineInterpolatedUnivariateSplineLSQBivariateSplineSmoothBivariateSplineRectBivariateSplineLSQSphereBivariateSplineSmoothSphereBivariateSplineRectSphereBivariateSpline)_run_concurrent_barrier)make_splrepc                   @   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ejjd-d. Zd/d0 Zd1S )2TestUnivariateSplinec                 C   s   g d}g d}t ||dd}t| ddg t| ddg t| dk s+J t|g dg d t||dt|d}t|j	dd	 | d
d t|j
| d
d d S )N         )r#   r#   r#   r!   kr#   g|=r!         ?r"   )r%   sV瞯<atol)r   r   	get_knots
get_coeffsabsget_residualr   lenr   tc)selfxylutspl r9   e/home/air/sanwanet/gpt-api/venv/lib/python3.10/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||ksJ t|t||ddks+J g d}t|t||ks;J t|t||ddksIJ d S )Nr    r   r"      r!   r$   r"   )nu)r'   r"         @)r   r   )r4   r5   r6   r7   argr9   r9   r:   test_preserve_shape&   s    z(TestUnivariateSpline.test_preserve_shapec                 C   sp   g d}g d}t ||dd}t| ddg t| ddg t| dk s+J t|g d	g d
 d S )Nr    r<   r!   r$   r#   r   r=   r*   r&   )r   r!   r"   )r   r   r-   r.   r/   r0   )r4   r5   r6   r7   r9   r9   r:   test_linear_1d1   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	   )r4   r5   r9   r9   r:   __call__>      zBTestUnivariateSpline.test_subclassing.<locals>.ZeroSpline.__call__N)__name__
__module____qualname__rC   r9   r9   r9   r:   
ZeroSpline=   s    rH   r!   r"   r#   r=      )r#   r"   r#   r"   r#   r"   r$   r'   r?           )r   r   )r4   rH   spr9   r9   r:   test_subclassing:   s   z%TestUnivariateSpline.test_subclassingc                 C   s4   g d}g d}t ||dd}t|g tg  d S )Nr!   r#   rJ      	   r   r=   rP         r#   r$   )r   r   r	   r4   r5   r6   r8   r9   r9   r:   test_empty_inputD   s   z%TestUnivariateSpline.test_empty_inputc                 C   s4   g d}g d}t ||dd}t| d d d S )NrN   rQ   r#   r$   r   g7ã?)r   r   rootsrT   r9   r9   r:   
test_rootsK   s   zTestUnivariateSpline.test_rootsc                 C   sD   t ddt j d}t |}t||dd}t| dks J d S )Nr   2   i  r(   )npr   r   cosr   r1   rV   rT   r9   r9   r:   test_roots_lengthQ   s   
z&TestUnivariateSpline.test_roots_lengthc                 C   s6   g d}g d}t ||dd}t|dg d d S )NrN   rQ   r#   r$         @)g;@gpZ<o?gOmǿg      ?)r   r   derivativesrT   r9   r9   r:   test_derivativesW   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   rY   )g     F@g     C@g      6@      @r*   r+   )r(   r%   )rZ   aranger   r   r   r   r^   )r4   r5   r6   tckdersr8   r9   r9   r:   test_derivatives_2^   s   




z'TestUnivariateSpline.test_derivatives_2c                 C   sN   g d}g d}g d}t |||dd}tg d}t|g d|dd	 dS )
zRegression test for #1375.)      g<&g_g@7ѿg46	<ƿgBϠrK   gBϠ?g46	<?g@7?g_?g<&?      ?)rh   1\_#?~a?w?5??0ms?gx?rm   rl   rk   rj   ri   rh   )   mBo!@u)	~@e?֭z@b@v5|@geSs@rs   rr   rq   rp   ro   rn   N)r5   r6   wr(   )gJdv?gc?g=?gt?皙?      ??gGz?gMb@?r+   )r   r	   r   )r4   r5   r6   rt   r8   desiredr9   r9   r:   test_resize_regressionn   s   z+TestUnivariateSpline.test_resize_regressionc           
   	   C   sP  t jdtd}|d }tddd}| }d|t |dk |d	k< | }|d |||d k < |d
 |||d
 k< ttfD ]}|||d}dD ]}t|||d|d dd t||||d||d dd qGdD ]}t|||d|d dd t||||d||d dd qidD ]}t	t
||fi t|d qdD ]}t|||d|d dd t||||d||d dd qq=| dd }	t|||	}t||dd|d dd t||dd|d dd t	t
||fi tdd t||dd|d dd dD ]#}t||}t	t
||fi t|d t	t
tfi t|||d qd S )NrJ   dtyper#      d   r   rK         @r)   r5   r6   )r   extrapolate)extgؗҜ<r+   )r!   zeros)r"   raise)r#   constgؗҬ<r=   r!   r"   )r)   unknown)r5   r6   r   )rZ   rc   floatr   copy
logical_orr   r   r   assert_raises
ValueErrordictr-   r   )
r4   r5   r6   xpxp_zerosxp_clipclsr8   r   r2   r9   r9   r:   test_out_of_range_regression~   sF   """


z1TestUnivariateSpline.test_out_of_range_regressionc                 C   sF   t dd }t dd }t ddd}d}ttt||||d d S )Nr   rh   r   c   
   )r)   e   bbox)rZ   rc   r   r   r   r   )r4   xsysknotsr   r9   r9   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#   rY   r"   333333?g333333?皙?)rZ   r   r[   r   antiderivative
derivativer   integral)r4   r5   r6   r8   spl2r9   r9   r:   "test_derivative_and_antiderivative   s   


z7TestUnivariateSpline.test_derivative_and_antiderivativec                 C   sH   g d}g d}t ||ddd}g d}t| |t|dd d S )	Nr!   r"   r=      g      !@)rw   皙??r?   rJ   r   r#   )r   r%   )r)   r   g      rP   g      #@r   r*   r+   )r   r   r   rZ   
zeros_like)r4   x_valuesy_valuesfr5   r9   r9   r:   test_derivative_extrapolation   s
    z2TestUnivariateSpline.test_derivative_extrapolationc                 C   sV   t ddd}tdD ]}t||d|d}dD ]\}}t|||dk s'J qqd S )	NrK   rh   rO   r=   r   )r(   r   ))r!   r!   )r!   rJ   )r"   rJ   r   r   )r   )r   r)   r*   )rZ   r   ranger   r/   r   )r4   r5   r   r   abr9   r9   r:   test_integral_out_of_bounds   s   z0TestUnivariateSpline.test_integral_out_of_boundsc                 C   s,  t jdtd}|d }t |}t||dd}| dd }|d }t jt jt j fD ]g}||d< tt	tfi t
||dd tt	tfi t
||dd tt	tfi t
|||dd	 ||d< ||d< tt	tfi t
|||dd
 tt	tfi t
|||dd
 tt	tfi t
||||dd q,d S )Nr   r{   r#   Tcheck_finiter=   r)   r5   r6   r   )r5   r6   r2   r   )r5   r6   rt   r   r5   r6   r2   rt   r   )rZ   rc   r   	ones_liker   r-   naninfr   r   r   r   r   )r4   r5   r6   rt   r8   r2   y_endzr9   r9   r:   test_nan   s:   






zTestUnivariateSpline.test_nanc              	   C   s   t jdtd}|d }t jdtd}|d |d< |d }t |}t||dd}| dd }t|||ddd	 t||||dd
 tttfi t	||ddd ttt
fi t	||dd d S )Nr   r{   r#   r   r!   Tr   r=   )r5   r6   rt   r(   r   r   )r5   r6   r(   r   r   )rZ   rc   r   r   r   r-   r   r   r   r   r   r4   xxyyr5   r6   rt   r8   r2   r9   r9   r:   test_strictly_increasing_x   s    



z/TestUnivariateSpline.test_strictly_increasing_xc              
   C   s   t jdtd}|d }t jdtd}|d d |d< |d }t |}t||dd}| dd	 }tttfi t||dd
 ttt	fi t||dd
 ttt
fi t||||dd d S )Nr   r{   r#   r   rh   r!   Tr   r=   r   r   )rZ   rc   r   r   r   r-   r   r   r   r   r   r   r9   r9   r:   test_increasing_x   s"   




z&TestUnivariateSpline.test_increasing_xc                 C   s  t t}g d}g d}t|| W d    n1 sw   Y  dt|jv s*J t t}g d}g d}g d}t|||d W d    n1 sLw   Y  dt|jv sZJ t t}d}t|||d	 W d    n1 srw   Y  d
t|jv sJ t t}t||dd W d    n1 sw   Y  dt|jv sJ t t}t||dd W d    n1 sw   Y  dt|jv sJ d S )Nr   rw   r   r   r?   !x and y should have a same lengthrw   r   r   r?   gffffff@rg   rh   rh   rh   rt   %x, y, and w should have a same lengthr)   r   bbox shape should be (2,)r   r$   k should be 1 <= k <= 5rg   rY   s should be s >= 0.0)r   r   r   strvaluer4   infor   r   w_valuesr   r9   r9   r:   (test_invalid_input_for_univariate_spline  s4   




z=TestUnivariateSpline.test_invalid_input_for_univariate_splinec                 C   sL  t t}g d}g d}t|| W d    n1 sw   Y  dt|jv s*J t t}g d}g d}g d}t|||d W d    n1 sLw   Y  dt|jv sZJ t t}d}t|||d	 W d    n1 srw   Y  d
t|jv sJ t t}t||dd W d    n1 sw   Y  dt|jv sJ d S )Nr   r   r   r   r   r   r   r)   r   r   r   r$   r   )r   r   r   r   r   r   r9   r9   r:   5test_invalid_input_for_interpolated_univariate_spline-  s,   



zJTestUnivariateSpline.test_invalid_input_for_interpolated_univariate_splinec           	      C   s  g d}g d}t ||dd}| dd }tt}g d}g d}t||| W d    n1 s4w   Y  dt|jv sBJ tt}g d}g d}g d	}t||||d
 W d    n1 sew   Y  dt|jv ssJ d}tt|d}d}t||||d W d    n1 sw   Y  tt}d}t||||d W d    n1 sw   Y  dt|jv sJ tt}t|||dd W d    n1 sw   Y  dt|jv sJ d S )Nr   r   Tr   r#   r=   r   r   )rh   rh   rh   rh   r   r   z;Interior knots t must satisfy Schoenberg-Whitney conditions)match)r   r   r)   r   r   r$   r   )r   r-   r   r   r   r   r   )	r4   r   r   r8   t_valuesr   r   messager   r9   r9   r:   ,test_invalid_input_for_lsq_univariate_splineE  s>   



zATestUnivariateSpline.test_invalid_input_for_lsq_univariate_splinec                 C   s   t g d}t g d}t g d}t ddg}t||||d}t| | | | d}t|g d|g d d S )Nr   r   )rh   rh   rh   rh   rh   r   r   )r5   r6   rt   r   ru   )rZ   r	   r   tolistr   )r4   r   r   r   r   spl1r   r9   r9   r:   test_array_like_inputg  s   
z*TestUnivariateSpline.test_array_like_inputc                 C   sf   t d}g d}t }|td}t||dd t|dks!J W d    d S 1 s,w   Y  d S )Nm   )mrK   rK   rK   rK   rK   %@rK         &@rK   rK   rK   r   rK   rK   rK   rK   rK   rK   r   rK   rK   rK   r   rK   rK   rK   r   rK   rK   rK         %@rK   rK   rK   ffffff%@rK   rK   rK   r   rK   rK   rK   rK   rK   rK   r   rK   rK   r   rK   rK   rK   333333%@rK   rK   rK   r   rK   rK   r   rK   rK   r   rK   rK   g      '@rK   rK   rK   r   rK   rK   r   rK   rK   r   rK   rK   皙%@rK   rK   rK   r   rK   rK   r   rK   rK   rK   $@rK   rK   r   rK   rK   r   rK   rK   rK   r   rK   rK   rK   r   rK   rK   rK   r   rK   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   r1   )r4   r5   r6   suprr9   r9   r:   test_fpknot_oob_crashv  s   "z*TestUnivariateSpline.test_fpknot_oob_crashc                 C   sX   t jdtd}|d }t jdtd}|d |d< t||dd}dd	 }td
||| d S )Nr   r{   r#   r   r!   Tr   c                 S   s   || d S )Nr9   )_interpr5   r9   r9   r:   	worker_fn  rD   z8TestUnivariateSpline.test_concurrency.<locals>.worker_fnr   )rZ   rc   r   r   r   )r4   r   r   r5   r8   r   r9   r9   r:   test_concurrency  s   z%TestUnivariateSpline.test_concurrencyN)rE   rF   rG   r;   rA   rB   rM   rU   rW   r\   r_   rf   rz   r   r   r   r   r   r   r   r   r   r   r   r   pytestmarkthread_unsafer   r   r9   r9   r9   r:   r      s4    	
)

"
r   c                   @   sl   e Zd Zejjdd Zdd Zejjdd Zejjdd Z	d	d
 Z
ejjdd Zejj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|dks;J W d    n1 sEw   Y  t|	d	d	t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#   rv   r!   r#   
The coefficients of the splinekxkyr"         @)r   r   r   r   r1   r   rZ   asarray
r4   r5   r6   r   r(   txtyr   r   r7   r9   r9   r:   r;     s   z+TestLSQBivariateSpline.test_linear_constantc              
   C   s  g d}g d}g d}d}d| d| g}d| d| g}t  }|td t|||||ddd}W d    n1 s=w   Y  | \}}t|d d	 |dd  D ]i\}	}
t|d d	 |dd  D ]W\}}d
D ]P}dD ]K}|	d|  |
|  }|d|  ||  }||	|
 d|  d|  ||
|| d|   ||	|d|  |  ||
|| |  }t|||| qpqlqfqUd S )Nr   r   	r   rO   r`   r#   r=   rO   r!   r#   r=   rv   r!   r#   r   r   r)   )rv   rw   rx   )r   皙?gffffff?)r   filterr   r   r-   zipr   )r4   r5   r6   r   r(   r   r   r   r7   xaxbyaybr2   r   ypzpr9   r9   r:   test_bilinearity  s:   ""z'TestLSQBivariateSpline.test_bilinearityc              
   C   sd  g d}g d}t g d}d}d| d| g}d| d| g}t !}|td}t|||||ddd}	t|dks=J W d    n1 sGw   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	t
|	|d |d
 |d |d
 t
| d S )N)	r!   r!   r!   r"   r"   r"   r`   r`   r`   r   r   rv   r!   r#   r   r         ?r)   r   )r	   r   r   r   r   r1   r-   r
   sumr   rZ   r   r   )r4   r5   r6   r   r(   r   r   r   r   r7   tztrpzr9   r9   r:   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|dks;J W d    n1 sEw   Y  t|	g g td	 t|	g g d
dtd d S )Nr   r   r   rv   r!   r#   r   r   r   Fgridr   )r   r   r   r   r1   r   rZ   r   r   r9   r9   r:   rU     s   z'TestLSQBivariateSpline.test_empty_inputc              
   C   s  d}d| d| g}d| d| g}t t$}tdd}tdd}tjdddd}t||||| W d    n1 s=w   Y  dt|jv sKJ t t,}tdd}tdd}tdd}tjddd	d}t||||||d
 W d    n1 s~w   Y  dt|jv sJ t t}tdd}t||||||d
 W d    n1 sw   Y  dt|jv sJ t t}d}	t||||||	d W d    n1 sw   Y  dt|jv sJ t t}t|||||ddd W d    n1 sw   Y  dt|jv sJ t t}
t|||||dd W d    n	1 s%w   Y  dt|
jv s4J t t}
t|||||dd W d    n	1 sNw   Y  dt|
jv s]J d S )Nrv   r!   r#   rh         $@r   num%x, y, and z should have a same length   r   (x, y, z, and w should have a same lengthrg   w should be positiver   r   r   r   bbox shape should be (4,)r   ;The length of x, y and z should be at least (kx+1) * (ky+1)rK   epseps should be between (0, 1))r   r   rZ   r   r   r   r   )r4   r(   r   r   r   r5   r6   r   rt   r   exc_infor9   r9   r:   test_invalid_input  sT   







z)TestLSQBivariateSpline.test_invalid_inputc              
   C   s  d}t d| d| g}t d| d| g}t dd}t dd}t dd}t dd}t g d}t D}	|	td}
t|||||||d}t| | | | | | |d}t|d	d	|d	d	 t	|
d
ksvJ W d    d S 1 sw   Y  d S )Nrv   r!   r#   rh   r  )rh   r  rh   r  r   )rt   r   ra   r"   )
rZ   r	   r   r   r   r   r   r   r   r1   )r4   r(   r   r   r5   r6   r   rt   r   r   r   r   r   r9   r9   r:   r     s$   "z,TestLSQBivariateSpline.test_array_like_inputc           	      C   s   t jddddf \}}| }| }dt | }t ddd}t ddd}t }|td}t|||||}t	|d	ksDJ W d
   n1 sNw   Y  t
|||dd| d
S )zkTest for the case when the input knot-location arrays in x and y are
        of different lengths.
        r   r   r   rv   g     X@   !   r   r!   NFr  )rZ   mgridravelr   r   r   r   r   r   r1   r   )	r4   r5   r6   r   r   r   r   r   r7   r9   r9   r:   test_unequal_length_of_knots2  s   z3TestLSQBivariateSpline.test_unequal_length_of_knotsN)rE   rF   rG   r   r   r   r;   r  r
  rU   r  r   r!  r9   r9   r9   r:   r     s    


+
r   c                   @   sD   e Zd Zdd Zdd Zejj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}| D ]	}t|g d qt| g d t| dk s6J 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/   r0   r4   r5   r6   r   r7   r2   r9   r9   r:   r;   F  s   .z.TestSmoothBivariateSpline.test_linear_constantc                 C   s   g d}g d}g d}t |||ddd}| D ]}t|tg d qt| g d t| dk s9J 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   )rh   r!   r#   r#   )r   r   r=   r=   r*   r&   r'   r   r"   )	r   r-   r   rZ   r   r   r.   r/   r0   r#  r9   r9   r:   rB   R  s   .z(TestSmoothBivariateSpline.test_linear_1dc              
   C   sX  g d}g d}t g d}t }|td t|||dddd}W d    n1 s,w   Y  g d}g d	}|||}d
t|d d d f t|d d d f  |d dd df |dd d df  |d ddd f  |dd dd f     }	tt	|
|d |d |d |d t	|	 t|||dddd}
tt	|

|d |d |d |d t	|	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t	|
|d |d |d |d t	|	 d S )N)	r!   r!   r!   r"   r"   r"   r=   r=   r=   r   r   z
The required storage spacer!   r   )r   r   r(   )r!   r"   r=   r    r  r)   r"   )decimalr   )r	   r   r   r   r   r
   r  r   rZ   r   r   )r4   r5   r6   r   r   r7   r   r   r  r	  lut2r9   r9   r:   r
  ]  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   r)   r!   r   )rZ   r   r   r   r   r   )
r4   r5   r6   r   xiyird   res1interp_res2r9   r9   r:   test_rerun_lwrk2_too_small|  s   
z4TestSmoothBivariateSpline.test_rerun_lwrk2_too_smallc                 C   s  t t"}tdd}tdd}tjdddd}t||| W d    n1 s)w   Y  dt|jv s7J t t*}tdd}tdd}tdd}tjdddd}t||||d W d    n1 shw   Y  dt|jv svJ t t}td	d}t||||d W d    n1 sw   Y  d
t|jv sJ t t}d}t||||d W d    n1 sw   Y  dt|jv sJ t t}t|||ddd W d    n1 sw   Y  dt|jv sJ t t}t|||d	d W d    n	1 sw   Y  dt|jv sJ t t}t|||dd W d    n	1 s-w   Y  dt|jv s<J t t}t|||dd W d    n	1 sTw   Y  dt|jv scJ d S )Nrh   r  r   r  r  r  r   r  rg   r  r  r   r  r   r  rY   r   rK   r  r  )r   r   rZ   r   r   r   r   )r4   r   r5   r6   r   rt   r   r  r9   r9   r:   r    sV   







z,TestSmoothBivariateSpline.test_invalid_inputc              	   C   s   t g d}t g d}t g d}t g d}t g d}t|||||ddd}t| | | | | ddd}t|d	d
|d	d
 d S )Nr   r   r   )	r!   r!   r!   r!   r!   r!   r!   r!   r!   )rh   r   rh   r   r!   )rt   r   r   r   )r   rt   r   r   rv   rw   )rZ   r	   r   r   r   )r4   r5   r6   r   rt   r   r   r   r9   r9   r:   r     s   z/TestSmoothBivariateSpline.test_array_like_inputN)rE   rF   rG   r;   rB   r   r   r   r
  r,  r  r   r9   r9   r9   r:   r"  E  s    
,r"  c                   @   4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestLSQSphereBivariateSplinec                 C   s   d\}}t d|d  dd|d   |t }t d|d  dd|d   |d t }t|jd |jd f}|d d d }|d d d }|d d dd d df }t||\}	}
t|	 |
 |j ||}|| _|| _	||| _
| _d S )Nr   Z   rw   r!   ra   r   rJ   )r   r   r   r   r   r   r   Tlut_lsqdatanew_lonsnew_lats)r4   nthetanphithetaphir3  knotstknotspknotdatalatslonsr2  r9   r9   r:   setup_method  s   $(z)TestLSQSphereBivariateSpline.setup_methodc                 C   s2   t | j dk sJ t| | j| j| j d S )Nr*   )r/   r2  r0   r   r5  r4  r3  r4   r9   r9   r:   r;     s   z1TestLSQSphereBivariateSpline.test_linear_constantc                 C   8   t | g g td t | jg g ddtd d S Nr   Fr  r  )r   r2  rZ   r   r@  r9   r9   r:   rU         z-TestLSQSphereBivariateSpline.test_empty_inputc              	   C   sn  d\}}t d|d  dd|d   |t }t d|d  dd|d   |d t }t|jd |jd f}|d d d }|d d d }tt'}t dd|d	t }	t|	|\}
}t|
 | |j	 || W d    n1 srw   Y  d
t
|jv sJ tt'}t dd|d	t }	t|	|\}
}t|
 | |j	 || W d    n1 sw   Y  d
t
|jv sJ tt)}t dd|d	d t }t||\}}t| | |j	 || W d    n1 sw   Y  dt
|jv sJ tt)}t dd|d	d t }t||\}}t| | |j	 || W d    n	1 s+w   Y  dt
|jv s:J t||\}}tt }t|}d|d< t| | |j	 || W d    n	1 siw   Y  dt
|jv sxJ tt }t|}t|d< t| | |j	 || W d    n	1 sw   Y  dt
|jv sJ tt }t|}d|d< t| | |j	 || W d    n	1 sw   Y  dt
|jv sJ tt"}t|}dt |d< t| | |j	 || W d    n	1 sw   Y  dt
|jv sJ tt}tg d}t| | |j	 |||d W d    n	1 sFw   Y  dt
|jv sUJ tt}t| | |j	 ||dd W d    n	1 svw   Y  dt
|jv sJ tt}t| | |j	 ||dd W d    n	1 sw   Y  dt
|jv sJ d S )Nr/  rw   r!   ra   r   rJ   皙rh   r  theta should be between [0, pi]rv   皙?phi should be between [0, 2pi]rK   ztt should be between (0, pi)ztp should be between (0, 2pi)r"   	rg   rh   r'   rw   rh   r'   rw   rh   rh   r   r  r  r  )r   r   r   r   r   r   r   r   r   r1  r   r   rZ   r   r	   )r4   r6  r7  r8  r9  r3  r:  r;  r  invalid_thetainvalid_latsr>  invalid_phir=  invalid_lonsinvalid_knotstinvalid_knotsp	invalid_wr9   r9   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/  rw   r!   ra   r   rJ   r   rh   )
r   r   r   r   r   r   r   r1  r   r   )r4   r6  r7  r8  r9  r=  r>  r3  r:  r;  rt   r   r   r9   r9   r:   r   6  s8   
z2TestLSQSphereBivariateSpline.test_array_like_inputNrE   rF   rG   r?  r;   rU   r  r   r9   r9   r9   r:   r.    s    Tr.  c                   @   r-  )TestSmoothSphereBivariateSplinec                 C   s   t dt dt dt dt dt dt dt dt dt g	}t dt tdt dt tdt dt tdt g	}t g d}t|||dd| _d S )Nr  rw         ?r'   r       _BrY   )r	   r   r   r7   )r4   r8  r9  r   r9   r9   r:   r?  P  s   ,&z,TestSmoothSphereBivariateSpline.setup_methodc                 C   sF   t | j dk sJ t| g dddgddgddgddgg d S )Nr*   r&   r!   r'   r#   )r/   r7   r0   r   r@  r9   r9   r:   r;   X  s   z4TestSmoothSphereBivariateSpline.test_linear_constantc                 C   rA  rB  )r   r7   rZ   r   r@  r9   r9   r:   rU   ]  rC  z0TestSmoothSphereBivariateSpline.test_empty_inputc                 C   s  t dt dt dt dt dt dt dt dt dt g	}t dt tdt dt tdt dt tdt g	}t g d}tt/}t dt dt dt dt dt dt dt dt dt g	}t|||dd W d    n1 stw   Y  d	t|jv sJ tt/}t dt dt dt dt dt dt dt dt d
t g	}t|||dd W d    n1 sw   Y  d	t|jv sJ tt)}t dt tdt dt tdt dt tdt g	}t|||dd W d    n1 sw   Y  dt|jv sJ tt)}t dt tdt dt tdt dt tdt g	}t|||dd W d    n	1 s6w   Y  dt|jv sEJ tt}t g d}t||||dd W d    n	1 sdw   Y  dt|jv ssJ tt}t|||dd W d    n	1 sw   Y  dt|jv sJ tt}t|||dd W d    n	1 sw   Y  dt|jv sJ tt}t|||dd W d    n	1 sw   Y  dt|jv sJ d S )Nr  rw   rR  r'   r   rD  rS  rY   rE  rF  rG  rh   g @rH  rt   r(   r  rg   s should be positiver  r  )r	   r   r   r   r   r   r   )r4   r8  r9  r   r  rI  rK  rO  r9   r9   r:   r  a  sl   &&







z2TestSmoothSphereBivariateSpline.test_invalid_inputc                 C   s   t dt dt dt dt dt dt dt dt dt g	}t dt tdt dt tdt dt tdt g	}t g d}t g d}t||||dd}t| | | | dd}t|d	d	|d	d	 d S )
Nr  rw   rR  r'   r   )	rh   rh   rh   rh   rh   rh   rh   rh   rh   rS  rT  rh   )rZ   r	   r   r   r   r   )r4   r8  r9  r   rt   r   r   r9   r9   r:   r     s   "&z5TestSmoothSphereBivariateSpline.test_array_like_inputNrP  r9   r9   r9   r:   rQ  O  s    2rQ  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 )NrI   r!   r"   r!   r"   r!   r!   r"   r#   r"   r!   r!   r"   r"   r"   r!   r	   r   r   r4   r5   r6   r   r7   r9   r9   r:   test_defaults  s
   &z%TestRectBivariateSpline.test_defaultsc                    s   t g d}t g d}t g dg dg dg dg dg}t||| g d}g d} ||}t  fddt||D }t|| d S )	NrI   rW  rX  rY  )r!   ffffff@g333333@rw   ffffff
@333333?r#   )r!   r^  r_  r   g      @rh   r#   c                       g | ]\}} ||d  qS r   r9   .0r   r  r7   r9   r:   
<listcomp>      z9TestRectBivariateSpline.test_evaluate.<locals>.<listcomp>)r	   r   evr   r   )r4   r5   r6   r   r'  r(  zizi2r9   rd  r:   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 )NrI   rW  rX  rY  r   r   ir   r   r   r   r~   r   r   r   r   r=   r   r   r   r   ir   r   rb   r=   r)   r   r!   r   r'   r   g      r   r"   r  r         пr   (   ir      iig     @0@r   g     @0   r}   rJ   r   r`      g     +r   g     +@ir!   dxdy)r~  r  rZ  r4   r5   r6   r   r~  r  dxdyr7   r9   r9   r:   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 )NrI   rW  rX  rY  r   r   gUUUUUU?r   r   r=   r)   r   rs  rp     A   r   7             8@r!   F)r~  r  )r  r  r~  r  r  rZ  r  r9   r9   r:   r_     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 )NrI   rW  rX  rY  rk  rl  rm  rn  rb   ro  rq  rr  rt  rw  ry  r{  r!   r   r	   r   r   partial_derivativer  r9   r9   r:   #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 )NrI   rW  rX  rY  r  r  r  r  r!   r   Fr  r  r  r9   r9   r:   test_partial_derivative_method  s6   z6TestRectBivariateSpline.test_partial_derivative_methodc                 C   sn   t g dtd}| }t|j|jf}t|||}tt |dd W d    d S 1 s0w   Y  d S )N)r   r!   r"   r#   r=   r{   r=   r!   )	r	   r   r   r   sizer   r   r   r  r[  r9   r9   r:   '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 )NrI   rW  rX  rY  Fr  )r	   r   r   r[  r9   r9   r:   test_broadcast  s
   &6z&TestRectBivariateSpline.test_broadcastc                 C   s  t t-}tg d}tg d}tg dg dg dg dg dg}t||| W d    n1 s4w   Y  dt|jv sBJ t t-}tg d}tg d}tg dg dg dg dg dg}t||| W d    n1 svw   Y  dt|jv sJ t t*}tg d}tg d}tg dg dg dg dg}t||| W d    n1 sw   Y  d	t|jv sJ t t-}tg d}tg d}tg d
g d
g dg dg d
g}t||| W d    n1 sw   Y  dt|jv sJ t t1}tg d}tg d}tg dg dg dg dg dg}d}t||||d W d    n	1 s?w   Y  dt|jv sNJ t t}t|||dd W d    n	1 sfw   Y  dt|jv suJ d S )N)r   r"   r#   r=   rJ   rI   rW  rX  rY  x must be strictly increasing)r"   r"   r#   r=   rJ   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  rg   rY   r   )r   r   r	   r   r   r   )r4   r   r5   r6   r   r   r9   r9   r:   r    sl   






z*TestRectBivariateSpline.test_invalid_inputc                 C   s   t g d}t g d}t g dg dg dg dg dg}t g d}t||||d}t| | | | d}t|dd|dd d S )NrI   rW  rX  rY  )r!   rJ   r!   rJ   r   rh   )r	   r   r   r   )r4   r5   r6   r   r   r   r   r9   r9   r:   r   F  s   z-TestRectBivariateSpline.test_array_like_inputc                 C   s0  d}t jdt j|}t jddt j |}t |}t|||dd}d}d}t || t j }t || d t j }	|||	 | }
d|
d< tt	}||
|	 W d    n1 s^w   Y  d	t
|jv slJ |	 }d|d< tt	}||| W d    n1 sw   Y  d
t
|jv sJ d S )Nr  r   r"   r]   rY   r   r#   MbP?r  r  )rZ   randomuniformr   r   r   rc   r   r   r   r   r   )r4   NSampThetaPhiDataInterpolatorNLonNLatGridPosLatsGridPosLonsnonGridPosLatsr  nonGridPosLonsr9   r9   r:   test_not_increasing_inputR  s,   



z1TestRectBivariateSpline.test_not_increasing_inputN)rE   rF   rG   r\  rj  r  r_   r  r  r  r  r  r   r  r9   r9   r9   r:   rV    s    1rV  c                   @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )TestRectSphereBivariateSplinec              	   C   sv   t ddt d d}t dtd d}tg dg dg dg dg dg dg dg}t|||}t|||| d S N{Gz?r"   rO   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   r4   r6   r5   r   r7   r9   r9   r:   r\  q  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 )Nr  r"   rO   r  r  r  )r   r!   r]  g@r   gQ@g      @)r'   r   rF  g?gjt?rh   -C6?c                    r`  ra  r9   rb  rd  r9   r:   re    rf  z?TestRectSphereBivariateSpline.test_evaluate.<locals>.<listcomp>)r   r   r	   r   rg  r   r   )r4   r6   r5   r   r(  r'  rh  ri  r9   rd  r:   rj  z  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&}t d	d
dt j d }t dddt j d }t	||| W d    n1 sLw   Y  dt
|jv sZJ tt&}t dddt j d }t dddt j d }t	||| W d    n1 sw   Y  dt
|jv sJ tt&}t dd
dt j d }t dddt j d }t	||| W d    n1 sw   Y  dt
|jv sJ tt&}t dd
dt j d }t dddt j d }t	||| W d    n1 sw   Y  dt
|jv sJ tt(}t dd
dt j d }t dddt j d }t	|||d	d W d    n	1 s<w   Y  dt
|jv sKJ d S )N     V@      T      T@        f@rK        u@rP   r)      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 lessrY   rU  rZ   dot
atleast_2dr   r1  r/   r   r   r   r   r   r   r4   r3  r  r=  r>  r9   r9   r:   r    F   




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 )Nr  r"   rO   r  r  r  {Gz?r!   )dthetar}  r  rtolr,   )dphir  )r  r  ư>r~  r  r  r  r   Fr  r  r  r  r  r  r  r  )r   r   r	   r   r   _numdiff_2dr   r  r  r9   r9   r:   r    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} ||dd	d
j|jksQJ 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 )Nr  r"   rO   r  r  r  r  r!   Fr  c                        | |ddS NFr  r9   r   rd  r9   r:   <lambda>      z@TestRectSphereBivariateSpline.test_derivatives.<locals>.<lambda>r}  r  r  r  c                    r  r  r9   r   rd  r9   r:   r    r  r  r  c                    r  r  r9   r   rd  r9   r:   r    r  r  r  r  )r   r   r	   r   r   r   r  )r4   r6   r5   r   r9   rd  r:   r_     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&}t d	d
dt j d }t d	ddt j d }t	||| W d    n1 sLw   Y  dt
|jv sZJ tt&}t dddt j d }t d	ddt j d }t	||| W d    n1 sw   Y  dt
|jv sJ tt&}t dd
dt j d }t dddt j d }t	||| W d    n1 sw   Y  dt
|jv sJ tt&}t dd
dt j d }t dddt j d }t	||| W d    n1 sw   Y  dt
|jv sJ tt(}t dd
dt j d }t dddt j d }t	|||dd W d    n	1 s<w   Y  dt
|jv sKJ d S )Nr  r  r  r  r  rK   r  rP   r   r  r  r  r      r  r  r  r  r  r)   rY   rU  r  r  r9   r9   r:   test_invalid_input_2  r  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 r  )r   r   r	   r   r   r   )r4   r6   r5   r   r   r   r9   r9   r:   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)rv     #   ru  -   )iiir   r   r!   r  g     B@r  g     `Sg     Fg=Eg     HgDioEG)rZ   r	   r   radiansr   r   )r4   r=  r>  meshr3  lat_rlon_rinterpolator	query_lat	query_londata_interpansr9   r9   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!   r   )rP   rP   ))TT)TF)FFr   )r(   pole_continuity)rZ   rc   r   r   r   )r4   uvr   pr9   r9   r:   test_pole_continuity_gh_14591"  s   
z;TestRectSphereBivariateSpline.test_pole_continuity_gh_14591N)rE   rF   rG   r\  rj  r  r  r_   r  r   r  r  r9   r9   r9   r:   r  p  s    	"""r  :0yE>c                 C   s   |dkr|dkr| ||S |dkr'|dkr'| || || || | d|  S |dkrA|dkrA| ||| | |||  d|  S |dkrs|dkrs| || || | || ||  | || ||  | || ||  d| d  S t d)Nr   r!   r"   zinvalid derivative order)r   )funcr5   r6   r~  r  r  r9   r9   r:   r  1  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 !}|td t	|| tdddtd	d
ddd| _
W d    n1 sUw   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   rw   g     3@r=   r'   g     4@r  r  r   r  rh   c                    s   g | ]}t  |qS r9   )rZ   roll)rc  ir   r9   r:   re  P  s    z<Test_DerivedBivariateSpline.setup_method.<locals>.<listcomp>)rZ   concatenatelistr   r   r   r   r   r   r   r2  r   
lut_smoothr	   r  r   lut_rect	itertoolsproductorders)r4   r5   r6   r   r   r   zzr9   r  r:   r?  C  s"   "


z(Test_DerivedBivariateSpline.setup_methodc                 C   P   | j D ]"\}}| j||}|dddd}| jdd||dd}||ks%J qd S )Nr]   Fr  r  )r  r2  r  r4   nuxnuylut_derr   r   r9   r9   r:   test_creation_from_LSQT     z2Test_DerivedBivariateSpline.test_creation_from_LSQc                 C   r  )Ng      @Fr  r  )r  r  r  r  r9   r9   r:   test_creation_from_Smooth[  r  z5Test_DerivedBivariateSpline.test_creation_from_Smoothc                 C   sP   | j D ]"\}}| j||}|dddd}| jdd||dd}||ks%J qd S )Nrw   r'   Fr  r  )r  r  r  r  r9   r9   r:   test_creation_from_Rectb  r  z3Test_DerivedBivariateSpline.test_creation_from_Rectc                 C   sB   | j dd}tt |j W d    d S 1 sw   Y  d S Nr!   )r  r  r   AttributeErrorfpr4   derr9   r9   r:   test_invalid_attribute_fpi  s   
"z5Test_DerivedBivariateSpline.test_invalid_attribute_fpc                 C   sD   | j dd}tt |  W d    d S 1 sw   Y  d S r  )r  r  r   r  r0   r   r9   r9   r:   #test_invalid_attribute_get_residualn  s   

"z?Test_DerivedBivariateSpline.test_invalid_attribute_get_residualN)
rE   rF   rG   __doc__r?  r  r  r  r  r  r9   r9   r9   r:   r  ?  s    r  )r   r   r  )2r  	threadingr   numpyrZ   numpy.testingr   r   r   r   scipy._lib._array_apir   r   r   r   r	   r
   r   r   r   r   r   scipy.interpolate._fitpack_pyr   r   r   r   scipy.interpolate._fitpack2r   r   r   r   r   r   r   r   r   scipy._lib._testutilsr   scipy.interpolater   r   r   r"  r.  rQ  rV  r  r  r  r9   r9   r9   r:   <module>   s:   $,    %  
U M 
B