
    Џkhi                     |   d dl Z d dl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      Z( G d d      Z) G d d      Z* G d d      Z+ G d d      Z, G d d      Z- G d d      Z.ddZ/ G d d      Z0y)    N)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                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej4                  j6                  d        Zd Zy)TestUnivariateSplinec                    g d}g d}t        ||d      }t        |j                         ddg       t        |j                         ddg       t	        |j                               dk  sJ t         |g d      g d       t        ||dt        |            }t        |j                  dd	 |j                         d
       t        |j                  |j                         d
       y )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spls        a/var/www/teggl/fontify/venv/lib/python3.12/site-packages/scipy/interpolate/tests/test_fitpack2.pytest_linear_constantz)TestUnivariateSpline.test_linear_constant   s    qQ'!#--/Aq6:!#.."2QF;3##%&...!#k"2I>!Q!s1v.aS]]_5As~~/e<    c                 <   g d}g d}t        ||d      }d}t        |      t         ||            k(  sJ t        |      t         ||d            k(  sJ g d}t        |      t         ||            k(  sJ t        |      t         ||d            k(  sJ y )Nr"   r   r$      r#   r&   r$   )nu)r)   r$         @)r   r   )r6   r7   r8   r9   args        r;   test_preserve_shapez(TestUnivariateSpline.test_preserve_shape&   s    q!q)SzU3s8_,,,SzU3sq>2222SzU3s8_,,,SzU3sq>2222r=   c                    g d}g d}t        ||d      }t        |j                         ddg       t        |j                         ddg       t	        |j                               dk  sJ t         |g d	      g d
       y )Nr"   r?   r#   r&   r%   r   r@   r,   r(   )r   r#   r$   )r   r   r/   r0   r1   r2   )r6   r7   r8   r9   s       r;   test_linear_1dz#TestUnivariateSpline.test_linear_1d1   sm    qQ'!#--/1Q%8!#.."2Aa593##%&...!#i.9r=   c                 l     G d dt               } |g dg dd      }t         |ddg      d	d	g       y )
Nc                       e Zd Zd Zy)9TestUnivariateSpline.test_subclassing.<locals>.ZeroSplinec                     dt        |      z  S )Nr   )r	   )r6   r7   s     r;   __call__zBTestUnivariateSpline.test_subclassing.<locals>.ZeroSpline.__call__>   s    qz!r=   N)__name__
__module____qualname__rK    r=   r;   
ZeroSplinerI   =   s    "r=   rP   r#   r$   r%   r@      )r%   r$   r%   r$   r%   r$   r&   r)   rB           )r   r   )r6   rP   sps      r;   test_subclassingz%TestUnivariateSpline.test_subclassing:   s5    	") 	" [A6C:R1r=   c                 f    g d}g d}t        ||d      }t         |g       t        g              y )Nr#   r%   rR      	   r   r@   rY         r%   r&   )r   r   r	   r6   r7   r8   r:   s       r;   test_empty_inputz%TestUnivariateSpline.test_empty_inputD   s,    q!q)Br+r=   c                 j    g d}g d}t        ||d      }t        |j                         d   d       y )NrW   rZ   r%   r&   r   g7ã?)r   r   rootsr]   s       r;   
test_rootszTestUnivariateSpline.test_rootsK   s/    q!q)CIIKN,=>r=   c                     t        j                  ddt         j                  z  d      }t        j                  |      }t	        ||d      }t        |j                               dk(  sJ y )Nr   2     r*   )npr   r   cosr   r3   r`   r]   s       r;   test_roots_lengthz&TestUnivariateSpline.test_roots_lengthQ   sP    KK2:t,FF1Iq!q)399;2%%%r=   c                 j    g d}g d}t        ||d      }t        |j                  d      g d       y )NrW   rZ   r%   r&         @)g;@gpZ<o?gOmǿg      ?)r   r   derivativesr]   s       r;   test_derivativesz%TestUnivariateSpline.test_derivativesW   s1    q!q)COOC0F	Hr=   c                     t        j                  d      }|dz  d|dz  z  z   }t        ||d      }t        d|      }t	        |g dd	       t        ||dd
      }t	        |j                  d      |d	       y )N   r%          @r$   r   re   )g     F@g     C@g      6@      @r,   r-   )r*   r'   )rf   aranger   r   r   r   rk   )r6   r7   r8   tckdersr:   s         r;   test_derivatives_2z'TestUnivariateSpline.test_derivatives_2^   s|    IIaLqD2ad7NQQa~ # #		$
 q!qA.*"	$r=   c                     g d}g d}g d}t        |||d      }t        g d      }t         |g d      |d	       y)
zRegression test for #1375.)      g<&g_g@7ѿg46	<ƿgBϠrS   gBϠ?g46	<?g@7?g_?g<&?      ?)rw   1\_#?~a?w?5??0ms?gx?r|   r{   rz   ry   rx   rw   )   mBo!@u)	~@e?֭z@b@v5|@geSs@r   r   r   r   r~   r}   N)r7   r8   wr*   )gJdv?gc?g=?gt?皙?      ??gGz?gMb@?r-   )r   r	   r   )r6   r7   r8   r   r:   desireds         r;   test_resize_regressionz+TestUnivariateSpline.test_resize_regressionn   sF     a15HI12G$Gr=   c           
         t        j                  dt              }|dz  }t        ddd      }|j	                         }d|t        j
                  |dk  |d	kD        <   |j	                         }|d   |||d   k  <   |d
   |||d
   kD  <   t        t        fD ]  } |||      }dD ];  }t         |||      |dz  d       t          ||||      |      |dz  d       = dD ];  }t         |||      |dz  d       t          ||||      |      |dz  d       = dD ]  }t        t        ||fi t        |         dD ];  }t         |||      |dz  d       t          ||||      |      |dz  d       =  j                         dd }	t        |||	      }t         ||d      |dz  d       t         ||d      |dz  d       t        t        ||fi t        d       t         ||d      |dz  d       dD ]K  }t        ||      }t        t        ||fi t        |       t        t        t        fi t        |||       M y )NrR   dtyper%      d   r   rS         @r+   )r7   r8   )r   extrapolate)extgؗҜ<r-   )r#   zeros)r$   raise)r%   constgؗҬ<r@   r#   r$   )r+   unknown)r7   r8   r   )rf   rq   floatr   copy
logical_orr   r   r   assert_raises
ValueErrordictr/   r   )
r6   r7   r8   xpxp_zerosxp_clipclsr:   r   r4   s
             r;   test_out_of_range_regressionz1TestUnivariateSpline.test_out_of_range_regression~   sx   IIau%qDb"c"779@Ax"}hm<='')"#A$!A$#$R5!B% $&BC 	PCQ-C) KBC 0"a%eD 2Aqc 22 6AEJK $ QBC 0(A+EJ 2Aqc 22 6!%PQ $ Dj#rCTc]CD# PBC 0'1*5I 2Aqc 22 6
OP	P MMOAa !!Q*BAAE:BA!%@j#r9Ta[9BA
? # 	/C"1a(C*c2?#?*&6 /Q!-/	/r=   c                     t        j                  d      dz  }t        j                  d      dz  }t        j                  ddd      }d}t        t        t
        ||||       y )Nr   rw   r   c   
   )r+   e   bbox)rf   rq   r   r   r   r   )r6   xsysknotsr   s        r;   test_lsq_fpchecz$TestUnivariateSpline.test_lsq_fpchec   sS    YYs^b YYs^b Ar2&j"5r2u	!r=   c                 f   t        j                  ddd      dz  }t        j                  |      }t        ||d      }|j	                  d      j                  d      }t         |d       |d             |j	                  d      }t         |d       |d	      z
  |j                  d	d             y )
Nr   r#   F   r%   re   r$   333333?g333333?皙?)rf   r   rg   r   antiderivative
derivativer   integral)r6   r7   r8   r:   spl2s        r;   "test_derivative_and_antiderivativez7TestUnivariateSpline.test_derivative_and_antiderivative   s    KK1b!1$FF1Iq!q)!!!$//2C$s),!!!$S	DI-S#.	0r=   c                     g d}g d}t        ||dd      }g d}t         |j                         |      t        j                  |      d       y )	Nr#   r$   r@      g      !@)r   皙??rB   rR   r   r%   )r   r'   )r+   r   g      rY   g      #@r   r,   r-   )r   r   r   rf   
zeros_like)r6   x_valuesy_valuesfr7   s        r;   test_derivative_extrapolationz2TestUnivariateSpline.test_derivative_extrapolation   sE     %*XxWB%q)2==+;%Hr=   c                     t        j                  ddd      }t        d      D ];  }t        ||d|      }dD ]%  \  }}t	        |j                  ||            dk  r%J  = y )	NrS   rw   rX   r@   r   )r*   r   ))r#   r#   )r#   rR   )r$   rR   r   r   )r   )r   r+   r,   )rf   r   ranger   r1   r   )r6   r7   r   r   abs         r;   test_integral_out_of_boundsz0TestUnivariateSpline.test_integral_out_of_bounds   sl     KKB"8 	5C A4A6 5A1::a+,u4445	5r=   c                    t        j                  dt              }|dz  }t        j                  |      }t	        ||d      }|j                         dd }|d   }t         j                  t         j                  t         j                   fD ]  }||d<   t        t        t        fi t        ||d       t        t        t        fi t        ||d       t        t        t        fi t        |||d	       ||d<   ||d<   t        t        t        fi t        |||d
       t        t        t        fi t        |||d
       t        t        t        fi t        ||||d        y )Nr   r   r%   Tcheck_finiter@   r+   r7   r8   r   )r7   r8   r4   r   )r7   r8   r   r   r7   r8   r4   r   r   )rf   rq   r   	ones_liker   r/   naninfr   r   r   r   r   )r6   r7   r8   r   r:   r4   y_endzs           r;   test_nanzTestUnivariateSpline.test_nan   sR   IIb&qDLLOq!$7MMOAa "&&"&&266'* 	CAAbE*&6 9Q!$79*&B 9Q!$79*&9 >Q!qt<>AbEAbE*&6 >Q!qt<>*&B >Q!qt<>*&9 CQ!qADAC	Cr=   c           
         t        j                  dt              }|dz  }t        j                  dt              }|d   |d<   |dz  }t        j                  |      }t	        ||d      }|j                         dd }t	        |||dd	       t        ||||d
       t        t        t        fi t        ||dd       t        t        t        fi t        ||d       y )Nr   r   r%   r   r#   Tr   r@   )r7   r8   r   r*   r   r   )r7   r8   r*   r   r   )rf   rq   r   r   r   r/   r   r   r   r   r   r6   xxyyr7   r8   r   r:   r4   s           r;   test_strictly_increasing_xz/TestUnivariateSpline.test_strictly_increasing_x   s    
 YYr'UIIb&t!qDLLOr2D9MMOAa 1Q!$?a1QTBj"2 	:a148	:j"> 	5ad3	5r=   c                    t        j                  dt              }|dz  }t        j                  dt              }|d   dz
  |d<   |dz  }t        j                  |      }t	        ||d      }|j                         dd	 }t        t        t        fi t        ||d
       t        t        t        fi t        ||d
       t        t        t        fi t        ||||d       y )Nr   r   r%   r   rw   r#   Tr   r@   r   r   )rf   rq   r   r   r   r/   r   r   r   r   r   r   s           r;   test_increasing_xz&TestUnivariateSpline.test_increasing_x   s    YYr'UIIb&tcz!qDLLOr2D9MMOAa j"2 	5ad3	5j"> 	5ad3	5j"5 	?a1=	?r=   c                    t        t              5 }g d}g d}t        ||       d d d        dt        j                        v sJ t        t              5 }g d}g d}g d}t        |||       d d d        dt        |j                        v sJ t        t              5 }d}t        |	       d d d        d
t        |j                        v sJ t        t              5 }t        d       d d d        dt        |j                        v sJ t        t              5 }t        d       d d d        dt        |j                        v sJ y # 1 sw Y   .xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   TxY w)Nr   r   r   r   rB   !x and y should have a same lengthr   r   r   rB   gffffff@rv   rw   rw   rw   r   %x, y, and w should have a same lengthr+   r   bbox shape should be (2,)r   r&   k should be 1 <= k <= 5rv   re   s should be s >= 0.0)r   r   r   strvaluer6   infor   r   w_valuesr   s         r;   (test_invalid_input_for_univariate_splinez=TestUnivariateSpline.test_invalid_input_for_univariate_spline  si   :& 	1$(H+HXx0	1 3c$**oEEE:& 	=$(H0H,HXx8<		=
 7#djj/III:& 	<$DXxd;	< +c$**o===:& 	6$Xx15	6(C

O;;;:& 	9$Xx48	9%TZZ8881	1 	1	= 	=	< 	<
	6 	6	9 	9s;   EE E*!E6 FEE'*E36E?Fc                    t        t              5 }g d}g d}t        ||       d d d        dt        j                        v sJ t        t              5 }g d}g d}g d}t        |||       d d d        dt        |j                        v sJ t        t              5 }d}t        |	       d d d        d
t        |j                        v sJ t        t              5 }t        d       d d d        dt        |j                        v sJ y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   zxY w# 1 sw Y   GxY w)Nr   r   r   r   r   r   r   r+   r   r   r   r&   r   )r   r   r   r   r   r   s         r;   5test_invalid_input_for_interpolated_univariate_splinezJTestUnivariateSpline.test_invalid_input_for_interpolated_univariate_spline-  s4   :& 	=$(H+H(8<	= 3c$**oEEE:& 	I$(H0H,H(8xH		I
 7#djj/III:& 	H$D(8$G	H +c$**o===:& 	B$(8qA	B(C

O;;;)	= 	=	I 	I	H 	H
	B 	Bs/   DD D*!D6DD'*D36D?c                 R   g d}g d}t        ||d      }|j                         dd }t        t              5 }g d}g d}t	        |||       d d d        dt        j                        v sJ t        t              5 }g d}g d}g d	}t	        ||||
       d d d        dt        |j                        v sJ d}t        t        |      5 }d}t	        ||||       d d d        t        t              5 }d}t	        ||||       d d d        dt        |j                        v sJ t        t              5 }t	        |||d       d d d        dt        |j                        v sJ y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   TxY w)Nr   r   Tr   r%   r@   r   r   )rw   rw   rw   rw   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   )	r6   r   r   r:   t_valuesr   r   messager   s	            r;   ,test_invalid_input_for_lsq_univariate_splinezATestUnivariateSpline.test_invalid_input_for_lsq_univariate_splineE  s   $,xE==?1Q':& 	>$(H+H(H=	> 3c$**oEEE:& 	J$(H0H+H(HI		J
 7#djj/IIIO:W5 	ID(H4H	I :& 	I$D(H4H	I +c$**o===:& 	C$(HB	C(C

O;;;3	> 	>	J 	J	I 	I	I 	I
	C 	Cs;   E,?E9F8F:F,E69FFFF&c                    t        j                  g d      }t        j                  g d      }t        j                  g d      }t        j                  ddg      }t        ||||      }t        |j                         |j                         |j                         |j                               }t	         |g d       |g d             y )Nr   r   )rw   rw   rw   rw   rw   r   r   )r7   r8   r   r   r   )rf   r	   r   tolistr   )r6   r   r   r   r   spl1r   s          r;   test_array_like_inputz*TestUnivariateSpline.test_array_like_inputg  s    88-.88568856xxs$(h(%)+  (//"3x7H"*//"3$++-I 	2323	5r=   c                     t        d      }g d}t               5 }|j                  t        d      }t	        ||d       t        |      dk(  sJ 	 d d d        y # 1 sw Y   y xY w)Nm   )mrS   rS   rS   rS   rS   %@rS         &@rS   rS   rS   r   rS   rS   rS   rS   rS   rS   r   rS   rS   rS   r   rS   rS   rS   r   rS   rS   rS         %@rS   rS   rS   ffffff%@rS   rS   rS   r   rS   rS   rS   rS   rS   rS   r   rS   rS   r   rS   rS   rS   333333%@rS   rS   rS   r   rS   rS   r   rS   rS   r   rS   rS   g      '@rS   rS   rS   r   rS   rS   r   rS   rS   r   rS   rS   皙%@rS   rS   rS   r   rS   rS   r   rS   rS   rS   $@rS   rS   r   rS   rS   r   rS   rS   rS   r   rS   rS   rS   r   rS   rS   rS   r   rS   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   r3   )r6   r7   r8   suprs        r;   test_fpknot_oob_crashz*TestUnivariateSpline.test_fpknot_oob_crashv  si     #J;   
	C

LMA QQ'q6Q;;
	 
	 
	s   5AA"c                     t        j                  dt              }|dz  }t        j                  dt              }|d   |d<   t        ||d      }d }t	        d	|||       y )
Nr   r   r%   r   r#   Tr   c                      ||       y )NrO   )_interpr7   s      r;   	worker_fnz8TestUnivariateSpline.test_concurrency.<locals>.worker_fn  s	    1Ir=   r   )rf   rq   r   r   r   )r6   r   r   r7   r:   r  s         r;   test_concurrencyz%TestUnivariateSpline.test_concurrency  s]     YYs%(UIIc't!r2D9	 	 IsA6r=   N)rL   rM   rN   r<   rD   rF   rU   r^   ra   rh   rl   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   pytestmarkthread_unsafer  r  rO   r=   r;   r    r       s    =	3:2,?&H$ H '/R!0I5C45*?$98<0 <D5 [[ 67r=   r    c                   0   e Zd Zej                  j
                  d        Zd Zej                  j
                  d        Zej                  j
                  d        Z	d Z
ej                  j
                  d        Zej                  j
                  d        Zy)	TestLSQBivariateSplinec           
      D   g d}g d}g d}d}d|z   d|z
  g}d|z   d|z
  g}t               5 }|j                  t        d      }t        |||||dd      }	t	        |      dk(  sJ 	 d d d        t         	d	d	      t        j                  d
             y # 1 sw Y   0xY w)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%   r   r#   r%   
The coefficients of the splinekxkyr$         @)r   r   r   r   r3   r   rf   asarray
r6   r7   r8   r   r*   txtyr   r   r9   s
             r;   r<   z+TestLSQBivariateSpline.test_linear_constant  s    c!A#Yc!A#Y  	C

;(JKA$Qq2bA;Cq6Q;;	
 	C1Irzz"~6	 	s   9BBc           
      v   g d}g d}g d}d}d|z   d|z
  g}d|z   d|z
  g}t               5 }|j                  t        d       t        |||||dd      }d d d        j	                         \  }}t        |d d	 |dd        D ]  \  }	}
t        |d d	 |dd        D ]  \  }}d
D ]  }dD ]}  }|	d|z
  z  |
|z  z   }|d|z
  z  ||z  z   } ||	|      d|z
  z  d|z
  z   ||
|      |z  d|z
  z  z    ||	|      d|z
  z  |z  z    ||
|      |z  |z  z   }t         |||      |           y # 1 sw Y   xY w)Nr  r  	r   rX   rn   r%   r@   rX   r#   r%   r@   r   r#   r%   r  r  r+   )r   r   r   )r   皙?gffffff?)r   filterr   r   r/   zipr   )r6   r7   r8   r   r*   r  r  r   r9   xaxbyaybr4   r   ypzps                    r;   test_bilinearityz'TestLSQBivariateSpline.test_bilinearity  s   c!A#Yc!A#Y  	<CJJ{$FG$Qq2bA;C	<
 B"Sb'2ab6* 
	<FBb"gr!"v. 	<B( <A, <1X1_1X1_ #BmQqS11Q37 #BAqs 34 #BQqS 1! 34 !$BAa0 ,C2J;<<	<
	<	< 	<s   )D//D8c                    g d}g d}t        g d      }d}d|z   d|z
  g}d|z   d|z
  g}t               5 }|j                  t        d      }t	        |||||dd      }	t        |      dk(  sJ 	 d d d        	j                         \  }} |	||      }
d	t        |      d d d f   t        |      d d d f   z  |
d d
d d
f   |
dd d d
f   z   |
d d
dd f   z   |
dd dd f   z   z  j                         z  }t        t        j                  |	j                  |d   |d
   |d   |d
               t        j                  |             y # 1 sw Y   xY w)N)	r#   r#   r#   r$   r$   r$   rn   rn   rn   r  r  r   r#   r%   r  r        ?r+   r   )r	   r   r   r   r   r3   r/   r
   sumr   rf   r  r   )r6   r7   r8   r   r*   r  r  r   r   r9   tztrpzs               r;   test_integralz$TestLSQBivariateSpline.test_integral  sq   %&c!A#Yc!A#Y  	C

;(JKA$Q1b"qACq6Q;;	 BR[DHQtV$T"Xd1f%55#2#crc'{2ab"f:-b"QRj8ABqrEBDEHSUK 	BJJs||BqE2b62a5"R&'QRJJt,	.	 	s   9EEc           
         g d}g d}g d}d}d|z   d|z
  g}d|z   d|z
  g}t               5 }|j                  t        d      }t        |||||dd      }	t	        |      dk(  sJ 	 d d d        t         	g g       t        j                  d	             t         |	g g d
      t        j                  d             y # 1 sw Y   XxY w)Nr  r  r  r   r#   r%   r  r  r   Fgridr   )r   r   r   r   r3   r   rf   r   r  s
             r;   r^   z'TestLSQBivariateSpline.test_empty_input  s      c!A#Yc!A#Y  	C

;(JKA$Q1b"qACq6Q;;	
 	BRXXe_5B/$@	 	s   9B>>Cc           
         d}d|z   d|z
  g}d|z   d|z
  g}t        t              5 }t        j                  dd      }t        j                  dd      }t        j                  ddd      }t	        |||||       d d d        dt        j                        v sJ t        t              5 }t        j                  dd      }t        j                  dd      }t        j                  dd      }t        j                  ddd	      }t	        ||||||
       d d d        dt        |j                        v sJ t        t              5 }t        j                  dd      }t	        |||
       d d d        dt        |j                        v sJ t        t              5 }d}	t	        |||	       d d d        dt        |j                        v sJ t        t              5 }t	        ||dd       d d d        dt        |j                        v sJ t        t              5 }
t	        ||d       d d d        dt        
j                        v sJ t        t              5 }
t	        ||d       d d d        dt        |
j                        v sJ y # 1 sw Y   #xY w# 1 sw Y   xY w# 1 sw Y   IxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   oxY w)Nr   r#   r%   rw         $@r   num%x, y, and z should have a same length   r   (x, y, z, and w should have a same lengthrv   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)rS   epseps should be between (0, 1))r   r   rf   r   r   r   r   )r6   r*   r  r  r   r7   r8   r   r   r   exc_infos              r;   test_invalid_inputz)TestLSQBivariateSpline.test_invalid_input  s   !eQU^!eQU^:& 	0$C&AC&AC2.Aq!QB/		0
 7#djj/III:& 	5$C&AC&AC&AC2.Aq!QB!4	5 :S_LLL:& 	5$D$'Aq!QB!4	5 &TZZ888:& 	;$$Dq!QBT:	; +c$**o===:& 	>$q!QB2"=	>L4:: 	  :& 	9(q!QBC8	9-X^^1DDDD:& 	9(q!QBC8	9-X^^1DDDDI	0 	0	5 	5	5 	5
	; 	;
	> 	>
	9 	9	9 	9sU   AJ*A,J((J5K"K%K'K'J%(J25J?KKK$'K0c           
      
   d}t        j                  d|z   d|z
  g      }t        j                  d|z   d|z
  g      }t        j                  dd      }t        j                  dd      }t        j                  dd      }t        j                  dd      }t        j                  g d      }t               5 }	|	j	                  t
        d      }
t        |||||||      }t        |j                         |j                         |j                         |j                         |j                         |j                         |      }t         |d	d	       |d	d	             t        |
      d
k(  sJ 	 d d d        y # 1 sw Y   y xY w)Nr   r#   r%   rw   r1  )rw   r1  rw   r1  r  )r   r   ro   r$   )
rf   r	   r   r   r   r   r   r   r   r3   )r6   r*   r  r  r7   r8   r   r   r   r   r   r   r   s                r;   r   z,TestLSQBivariateSpline.test_array_like_input  s4   XXq1ua!en%XXq1ua!en%KKT"KKT"KKT"KKT"xx./  		C

;(JKA%aAr2FD%ahhj!((*ahhj&(iik299;!((*+/1D DcNDcN;q6Q;;		 		 		s   6B9E99Fc                    t         j                  ddddf   \  }}|j                         }|j                         }dt        j                  |      z  }t        j                  ddd      }t        j                  ddd      }t               5 }|j                  t        d      }t        |||||      }t        |      d	k(  sJ 	 d
d
d
       t         ||d      |       y
# 1 sw Y   xY w)zkTest for the case when the input knot-location arrays in x and y are
        of different lengths.
        r   r   r  r   g     X@   !   r  r#   NFr-  )rf   mgridravelr   r   r   r   r   r   r3   r   )	r6   r7   r8   r   r  r  r   r   r9   s	            r;   test_unequal_length_of_knotsz3TestLSQBivariateSpline.test_unequal_length_of_knots2  s    
 xx#qu%1GGIGGI",,q/![[dB'[[dB'  	C

;(JKA$Qq2b1Cq6Q;;	
 	C15115	 	s   6C""C+N)rL   rM   rN   r  r	  r
  r<   r%  r+  r^   r?  r   rF  rO   r=   r;   r  r    s    [[7 7<2 [[. .( [[A A )EV [[ * [[6 6r=   r  c                   b    e Zd Zd Zd Zej                  j                  d        Zd Z	d Z
d Zy)TestSmoothBivariateSplinec                 6   g d}g d}g d}t        |||dd      }|j                         D ]  }t        |g d        t        |j                         g d       t	        |j                               dk  sJ t         |g d	dd
g      ddgddgddgg       y )Nr  r  r  r#   r  )r#   r#   r%   r%   )r%   r%   r%   r%   r,   r(   r)   r%   )r   r/   r   r0   r1   r2   r6   r7   r8   r   r9   r4   s         r;   r<   z.TestSmoothBivariateSpline.test_linear_constantF  s    #AaQ!4 	7A%a6	7 	"#.."2LA3##%&...!#kAs8"<1v1vPQSTv>VWr=   c                 \   g d}g d}g d}t        |||dd      }|j                         D ]#  }t        |t        j                  g d             % t        |j                         g d       t        |j                               dk  sJ t         |g d	dd
g      ddgddgddgg       y )Nr  r  )	r   r   r   r$   r$   r$   r@   r@   r@   r#   r  )rw   r#   r%   r%   )r   r   r@   r@   r,   r(   r)   r   r$   )	r   r/   r   rf   r  r   r0   r1   r2   rJ  s         r;   rF   z(TestSmoothBivariateSpline.test_linear_1dR  s    #AaQ!4 	;AArzz.9:	;!#.."2LA3##%&...!#i3"81Q%1qe9LMr=   c                    g d}g d}t        g d      }t               5 }|j                  t        d       t	        |||ddd      }d d d        g d}g d	} ||      }d
t        |      d d d f   t        |      d d d f   z  |d dd df   |dd d df   z   |d ddd f   z   |dd dd f   z   z  j                         z  }	t        t        j                  |j                  |d   |d   |d   |d               t        j                  |	             t	        |||ddd      }
t        t        j                  |
j                  |d   |d   |d   |d               t        j                  |	      d        ||d d |d d       }d
t        |d d       d d d f   t        |d d       d d d f   z  |d dd df   |dd d df   z   |d ddd f   z   |dd dd f   z   z  j                         z  }	t        t        j                  |j                  |d   |d   |d   |d               t        j                  |	             y # 1 sw Y    xY w)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   rf   r  r   )r6   r7   r8   r   r   r9   r  r  r)  r*  lut2s              r;   r+  z'TestSmoothBivariateSpline.test_integral]  sq   %&  	BCJJ{$BC'1aA!qAC	B
 R[DHQtV$T"Xd1f%55#2#crc'{2ab"f:-b"QRj8ABqrEBDEHSUKBJJs||BqE2b62a5"R&'QRJJt,	. %Q1qA>BJJt}}RUBrFBqE2b6'RSJJt,$%	' CR"Sb'"DCRM!D&)$r#2w-Q*??#2#crc'{2ab"f:-b"QRj8ABqrEBDEHSUKBJJs||BqE2b62a5"R&'QRJJt,	.-	B 	Bs   (IIc                 >   t        j                  ddd      }t        j                  ddd      }||z   }t        j                  ddd      }t        j                  ddd      }t        |||      }t        |||      }t	        |||      } |||      }	t        ||	       y )Nr   r$   P   r+   r#   r   )rf   r   r   r   r   r   )
r6   r7   r8   r   xiyirr   res1interp_res2s
             r;   test_rerun_lwrk2_too_smallz4TestSmoothBivariateSpline.test_rerun_lwrk2_too_small|  s     KKAr"KKAr"E[[Q$[[Q$q!Qr2s#'1a0r2D$'r=   c                 8   t        t              5 }t        j                  dd      }t        j                  dd      }t        j                  ddd      }t	        |||       d d d        dt        j                        v sJ t        t              5 }t        j                  dd      }t        j                  dd      }t        j                  dd      }t        j                  ddd      }t	        ||||       d d d        dt        |j                        v sJ t        t              5 }t        j                  d	d      }t	        |       d d d        d
t        |j                        v sJ t        t              5 }d}t	        |       d d d        dt        |j                        v sJ t        t              5 }t	        dd       d d d        dt        |j                        v sJ t        t              5 }t	        d	       d d d        dt        |j                        v sJ t        t              5 }t	        d       d d d        dt        j                        v sJ t        t              5 }t	        d       d d d        dt        |j                        v sJ y # 1 sw Y   WxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   LxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   |xY w)Nrw   r1  r   r2  r4  r5  r   r6  rv   r7  r8  r   r9  r  r:  re   r   rS   r;  r=  )r   r   rf   r   r   r   r   )r6   r   r7   r8   r   r   r   r>  s           r;   r?  z,TestSmoothBivariateSpline.test_invalid_input  s   :& 	+$C&AC&AC2.A!!Q*		+
 7#djj/III:& 	0$C&AC&AC&AC2.A!!QQ/	0 :S_LLL:& 	0$D$'A!!QQ/	0 &TZZ888:& 	6$$D!!Q5	6 +c$**o===:& 	9$!!QbR8	9L4:: 	  :& 	3$!!QT2	3%TZZ888:& 	4(!!Qs3	4-X^^1DDDD:& 	4(!!Qs3	4-X^^1DDDDQ	+ 	+	0 	0	0 	0
	6 	6
	9 	9
	3 	3	4 	4	4 	4sa   AJ7A*K,&KKK+K8LL7KKKK(+K58LLLc           	         t        j                  g d      }t        j                  g d      }t        j                  g d      }t        j                  g d      }t        j                  g d      }t        |||||dd      }t        |j                         |j                         |j                         |j                         |j                         dd      }t	         |d	d
       |d	d
             y )Nr  r  r  )	r#   r#   r#   r#   r#   r#   r#   r#   r#   )rw   r  rw   r  r#   )r   r   r  r  )r   r   r  r  r   r   )rf   r	   r   r   r   )r6   r7   r8   r   r   r   r   r   s           r;   r   z/TestSmoothBivariateSpline.test_array_like_input  s    HH01HH01HH01HH01xx,-$Q1qI$QXXZQXXZ*.++-188:()a1 	S#S#7r=   N)rL   rM   rN   r<   rF   r  r	  r
  r+  rV  r?  r   rO   r=   r;   rH  rH  E  s=    
X	N [[. .<(*EX8r=   rH  c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestLSQSphereBivariateSplinec                    d\  }}t        d|dz
  z  dd|dz
  z  z
  |      t        z  }t        d|dz
  z  dd|dz
  z  z
  |      dz  t        z  }t        |j                  d   |j                  d   f      }|d d d   }|d d d   }|d d dd d df   }t	        ||      \  }	}
t        |	j                         |
j                         |j                  j                         ||      }|| _        || _	        ||c| _
        | _        y )Nr   Z   r   r#   ro   r   rR   )r   r   r   r   r   r   rE  Tlut_lsqdatanew_lonsnew_lats)r6   nthetanphithetaphir`  knotstknotspknotdatalatslonsr_  s               r;   setup_methodz)TestLSQSphereBivariateSpline.setup_method  s
   fqj)1sFQJ/?+?H2MsD1H~q3q>'94@2EJU[[^SYYq\23ssSqS!SqS>eS)
d*4::<+/66<<>66K	'-v$t}r=   c                     t        | j                  j                               dk  sJ t        | j                  | j                  | j
                        | j                         y )Nr,   )r1   r_  r2   r   rb  ra  r`  r6   s    r;   r<   z1TestLSQSphereBivariateSpline.test_linear_constant  sF    4<<,,./%777!$,,t}}dmm"L"&))	-r=   c                     t        | j                  g g       t        j                  d             t        | j                  g g d      t        j                  d             y Nr   Fr-  r/  )r   r_  rf   r   rn  s    r;   r^   z-TestLSQSphereBivariateSpline.test_empty_input  s@    !$,,r2"6H!$,,r2E,"BBHHTNSr=   c           	      x   d\  }}t        d|dz
  z  dd|dz
  z  z
  |      t        z  }t        d|dz
  z  dd|dz
  z  z
  |      dz  t        z  }t        |j                  d   |j                  d   f      }|d d d   }|d d d   }t	        t
              5 }t        dd|	      t        z  }	t        |	|      \  }
}t        |
j                         |j                         |j                  j                         ||       d d d        d
t        j                        v sJ t	        t
              5 }t        dd|	      t        z  }	t        |	|      \  }
}t        |
j                         |j                         |j                  j                         ||       d d d        d
t        |j                        v sJ t	        t
              5 }t        dd|	      dz  t        z  }t        ||      \  }}t        |j                         |j                         |j                  j                         ||       d d d        dt        |j                        v sJ t	        t
              5 }t        dd|	      dz  t        z  }t        ||      \  }}t        |j                         |j                         |j                  j                         ||       d d d        dt        |j                        v sJ t        ||      \  }}t	        t
              5 }t        j                  |      }d|d<   t        |j                         |j                         |j                  j                         ||       d d d        dt        |j                        v sJ t	        t
              5 }t        j                  |      }t        |d<   t        |j                         |j                         |j                  j                         ||       d d d        dt        |j                        v sJ t	        t
              5 }t        j                  |      }d|d<   t        |j                         |j                         |j                  j                         ||       d d d        dt        |j                        v sJ t	        t
              5 }t        j                  |      }dt        z  |d<   t        |j                         |j                         |j                  j                         ||       d d d        dt        |j                        v sJ t	        t
              5 }t        g d      }t        |j                         |j                         |j                  j                         |||       d d d        dt        |j                        v sJ t	        t
              5 }t        |j                         |j                         |j                  j                         ||d       d d d        dt        |j                        v sJ t	        t
              5 }t        |j                         |j                         |j                  j                         ||d       d d d        dt        |j                        v sJ y # 1 sw Y   xY w# 1 sw Y   (xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   |xY w# 1 sw Y   xY w# 1 sw Y   vxY w# 1 sw Y   xY w# 1 sw Y   xxY w# 1 sw Y   xY w# 1 sw Y   xY w)Nr\  r   r#   ro   r   rR   皙rw   r2  theta should be between [0, pi]r   皙?phi should be between [0, 2pi]rS   ztt should be between (0, pi)ztp should be between (0, 2pi)r$   	rv   rw   r)   r   rw   r)   r   rw   rw   r   r7  r;  r=  )r   r   r   r   r   r   r   r   rE  r^  r   r   rf   r   r	   )r6   rc  rd  re  rf  r`  rg  rh  r>  invalid_thetainvalid_latsrk  invalid_phirj  invalid_lonsinvalid_knotstinvalid_knotsp	invalid_ws                     r;   r?  z/TestLSQSphereBivariateSpline.test_invalid_input  s#   
+Q
1C-C!#%&sdQh'SD1H-=)=tDrIBNU[[^SYYq\23ssSqS:& 	E($T3F;b@M!)-!=L$$\%7%7%94::<%)VV\\^VVE	E
 1C4GGGG:& 	E($S#6:R?M!)-!=L$$\%7%7%94::<%)VV\\^VVE	E
 1C4GGGG:& 	E("4&9C?"DK!)%!=D,$TZZ\<3E3E3G%)VV\\^VVE	E
 03x~~3FFFF:& 	E("383>CK!)%!=D,$TZZ\<3E3E3G%)VV\\^VVE	E
 03x~~3FFFFeS)
d:& 	M(WWV_N $N1$TZZ\4::<%)VV\\^^VM	M
 .X^^1DDDD:& 	M(WWV_N "N1$TZZ\4::<%)VV\\^^VM	M
 .X^^1DDDD:& 	M(WWV_N $N1$TZZ\4::<%)VV\\^V^M	M
 /#hnn2EEEE:& 	M(WWV_N !BN1$TZZ\4::<%)VV\\^V^M	M
 /#hnn2EEEE:& 	B(LMI$TZZ\4::<%+VyB	B &X^^)<<<<:& 	>($TZZ\4::<%+V>	> .X^^1DDDD:& 	>($TZZ\4::<%+V>	> .X^^1DDDDQ	E 	E	E 	E	E 	E	E 	E	M 	M	M 	M	M 	M	M 	M	B 	B	> 	>
	> 	>s   A(Z.-A(Z;A+[ A+[
A["A"[/*A[<8A%\	A\A\#A\0.Z8;[[["[,/[9<\	\\ #\-0\9c           	      h   d\  }}t        d|dz
  z  dd|dz
  z  z
  |      t        z  }t        d|dz
  z  dd|dz
  z  z
  |      dz  t        z  }t        ||      \  }}t        |j                  d   |j                  d   f      }|d d d   }|d d d   }	t        |j                         j                  d         }
t        |j                         |j                         |j                  j                         ||	|
      }t        |j                         j                         |j                         j                         |j                  j                         j                         |j                         |	j                         |
j                               }t         |dd       |dd             y )	Nr\  r   r#   ro   r   rR   r   rw   )
r   r   r   r   r   rE  r   r^  r   r   )r6   rc  rd  re  rf  rj  rk  r`  rg  rh  r   r   r   s                r;   r   z2TestLSQSphereBivariateSpline.test_array_like_input6  s   
+Q
1C-C!#%&sdQh'SD1H-=)=!"$&'eS)
dU[[^SYYq\23ssSqS##A&' (

djjl(,!M (

(;(;(=(,

(;(;(=(,(=(=(?(.(.188:	G
 	"$sC.$sC.Ar=   NrL   rM   rN   rl  r<   r^   r?  r   rO   r=   r;   rZ  rZ    s     6$-
TREhBr=   rZ  c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestSmoothSphereBivariateSplinec                    t        dt        z  dt        z  dt        z  dt        z  dt        z  dt        z  dt        z  dt        z  dt        z  g	      }t        dt        z  t        dt        z  dt        z  t        dt        z  dt        z  t        dt        z  g	      }t        g d      }t        |||d      | _        y )Nr'  r         ?r)   r      _Bre   )r	   r   r   r9   )r6   re  rf  r   s       r;   rl  z,TestSmoothSphereBivariateSpline.setup_methodP  s    s2vs2vs2vr"ubeRUCF2vs2v' (R"Wb#(BGRr27B2X  -..uc1Er=   c                     t        | j                  j                               dk  sJ t        | j                  g dddg      ddgddgddgg       y )Nr,   r(   r#   r)   r%   )r1   r9   r2   r   rn  s    r;   r<   z4TestSmoothSphereBivariateSpline.test_linear_constantX  sQ    488((*+e333!$((;3x"@$%q6Aq6Aq6":	<r=   c                     t        | j                  g g       t        j                  d             t        | j                  g g d      t        j                  d             y rp  )r   r9   rf   r   rn  s    r;   r^   z0TestSmoothSphereBivariateSpline.test_empty_input]  s@    !$((2r"2BHHUOD!$((2r(">Or=   c                    t        dt        z  dt        z  dt        z  dt        z  dt        z  dt        z  dt        z  dt        z  dt        z  g	      }t        dt        z  t        dt        z  dt        z  t        dt        z  dt        z  t        dt        z  g	      }t        g d      }t        t              5 }t        dt        z  dt        z  dt        z  dt        z  dt        z  dt        z  dt        z  dt        z  dt        z  g	      }t	        |||d       d d d        d	t        j                        v sJ t        t              5 }t        dt        z  dt        z  dt        z  dt        z  dt        z  dt        z  dt        z  dt        z  d
t        z  g	      }t	        |||d       d d d        d	t        |j                        v sJ t        t              5 }t        dt        z  t        dt        z  dt        z  t        dt        z  dt        z  t        dt        z  g	      }t	        |||d       d d d        dt        |j                        v sJ t        t              5 }t        dt        z  t        dt        z  dt        z  t        dt        z  dt        z  t        dt        z  g	      }t	        |||d       d d d        dt        |j                        v sJ t        t              5 }t        g d      }t	        ||||d       d d d        dt        |j                        v sJ t        t              5 }t	        |||d       d d d        dt        |j                        v sJ t        t              5 }t	        |||d       d d d        dt        |j                        v sJ t        t              5 }t	        |||d       d d d        dt        |j                        v sJ y # 1 sw Y   xY w# 1 sw Y   SxY w# 1 sw Y   xY w# 1 sw Y   YxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   |xY w)Nr'  r   r  r)   r  rr  r  re   rs  rt  ru  rw   g @rv  r   r*   r7  rv   s should be positiver;  r=  )r	   r   r   r   r   r   r   )r6   re  rf  r   r>  rw  ry  r}  s           r;   r?  z2TestSmoothSphereBivariateSpline.test_invalid_inputa  s   sRxr38R"Wb2grBwRxr385 6R"Wb#(BGRr27B2X  -.:& 	G(!4"9cBhb"r'#%7BGS2XsRx#&8#- .M (sAF		G
 1C4GGGG:& 	G(!38S2XsRxb#%7BGS2XsRx#&8#- .M (sAF		G
 1C4GGGG:& 	G(r2sRxb"cBh!#b"cBh!8 9K'{AF	G 03x~~3FFFF:& 	G(r2sRxb"cBh!#b"cBh!8 9K'{AF	G 03x~~3FFFF:& 	L(LMI'sAdK	L &X^^)<<<<:& 	?('sA>	?%X^^)<<<<:& 	A('sA4@	A-X^^1DDDD:& 	@('sA3?	@-X^^1DDDDS	G 	G	G 	G	G 	G	G 	G	L 	L
	? 	?	A 	A	@ 	@sd   :A#O4A#P AP*AP4P(P5QQ4O>PPP%(P25P>Q
Qc                    t        j                  dt        z  dt        z  dt        z  dt        z  dt        z  dt        z  dt        z  dt        z  dt        z  g	      }t        j                  dt        z  t        dt        z  dt        z  t        dt        z  dt        z  t        dt        z  g	      }t        j                  g d      }t        j                  g d      }t        ||||d      }t        |j	                         |j	                         |j	                         |j	                         d      }t         |d	d	       |d	d	             y )
Nr'  r   r  r)   r  )	rw   rw   rw   rw   rw   rw   rw   rw   rw   r  r  rw   )rf   r	   r   r   r   r   )r6   re  rf  r   r   r   r   s          r;   r   z5TestSmoothSphereBivariateSpline.test_array_like_input  s   #(C"HcBhRbr'38S2XsRxA BhhRS2XrBwC"Hb2gC"H& 'HH01HHBC +5#qAF +5<<>3::<+,88:tM!$sC.$sC.Ar=   Nr  rO   r=   r;   r  r  O  s     F<
P0EdBr=   r  c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zej                   j#                         ej                   j%                  dddg      ej                   j%                  dg d      d                      Zej                   j#                         ej                   j)                  ej,                  dk  d      d               Zy)TestRectBivariateSplinec                     t        g d      }t        g d      }t        g dg dg dg dg dg      }t        |||      }t         |||      |       y )NrQ   r#   r$   r#   r$   r#   r#   r$   r%   r$   r#   r#   r$   r$   r$   r#   r	   r   r   r6   r7   r8   r   r9   s        r;   test_defaultsz%TestRectBivariateSpline.test_defaults  sI    ++;{;{;OP!!Aa(!#a(1-r=   c           
      B   t        g d      }t        g d      }t        g dg dg dg dg dg      }t        |||      }g d}g d}|j                  ||      }t        t        ||      D 	cg c]  \  }}	 |||	      d    c}	}      }
t	        ||
       y c c}	}w )NrQ   r  r  r  )r#   ffffff@g333333@r   ffffff
@333333?r%   )r#   r  r  r   g      @rw   r%   r   )r	   r   evr  r   )r6   r7   r8   r   r9   rQ  rR  zir   r#  zi2s              r;   test_evaluatez%TestRectBivariateSpline.test_evaluate  s    ++;{;{;OP!!Aa(,,VVB^CBK@&"bSR[%@AB$ As   0B
c                    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	z  }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	z  }t        |||      }t         |||d      |       t         |||d      |       t         |||dd      |       y )NrQ   r  r  r  r   r   ir   r   r   r   r   r   r   r   r   r@   r   r   r   r   ir   r   rp   r@   r+   r   r#   r   r)   r   g      r   r$   r'  r         пr   (   ir      iig     @0@r   g     @0   r   rR   r   rn      g     +r   g     +@ir#   dxdy)r  r  r  r6   r7   r8   r   r  r  dxdyr9   s           r;   test_derivatives_gridz-TestRectBivariateSpline.test_derivatives_grid  s    ++;{;{;OPM,{+' ((*+M-0@m- .'(?1-A BBDE!!Aa(!#aQ-3!#aQ-3!#aQ!"4T:r=   c           	      `   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z  }t        |||      }t         |||d	d
      |       t         |||d	d
      |       t         |||d	d	d
      |       y )NrQ   r  r  r  r   r   gUUUUUU?r   r   r@   r+   r   r  r     A   r   7             8@r#   F)r  r.  )r  r.  r  r  r.  r  r  s           r;   rl   z(TestRectBivariateSpline.test_derivatives  s    ++;{;{;OP>"#$%&s*!!Aa(!#aQE":2>!#aQE":2>!#aQ!"?Er=   c                     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	z  }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	z  }t        |||      }t         |j                  dd      ||      |       t         |j                  dd      ||      |       t         |j                  dd      ||      |       y )NrQ   r  r  r  r  r  r  r  rp   r  r  r  r  r  r  r  r#   r   r	   r   r   partial_derivativer  s           r;   #test_partial_derivative_method_gridz;TestRectBivariateSpline.test_partial_derivative_method_grid  s   /"/"?""""	$ %
 %$#%#	% & )+	+
 %%()%	' (
 +1'1'	) * -/	/
 "!Q*!">#"8"8A">q!"DbI!">#"8"8A">q!"DbI!">#"8"8A">q!"DdKr=   c                    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z  }t        |||      }t         |j                  d	d
      ||d      |       t         |j                  d
d	      ||d      |       t         |j                  d	d	      ||d      |       y )NrQ   r  r  r  r  r  r  r  r#   r   Fr-  r  r  s           r;   test_partial_derivative_methodz6TestRectBivariateSpline.test_partial_derivative_method  s    /"/"?""""	$ %
 %&'()*S0!!Q*!">#"8"8A">q!DI#K"$	& 	"">#"8"8A">q!DI#K"$	& 	"">#"8"8A">q!DI#K"&	(r=   c                    t        g dt              }|j                         }t        |j                  |j                  f      }t        |||      }t        t              5  |j                  dd       d d d        y # 1 sw Y   y xY w)N)r   r#   r$   r%   r@   r   r@   r#   )	r	   r   r   r   sizer   r   r   r  r  s        r;   'test_partial_derivative_order_too_largez?TestRectBivariateSpline.test_partial_derivative_order_too_large  sk    //FFH!&&!&&!"!!Q*:& 	)""1a(	) 	) 	)s   !A==Bc           
          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             y )NrQ   r  r  r  Fr-  )r	   r   r   r  s        r;   test_broadcastz&TestRectBivariateSpline.test_broadcast  sb    ++;{;{;OP!!Aa(Aq	3q4y!DF)%#HIr=   c           	         t        t              5 }t        g d      }t        g d      }t        g dg dg dg dg dg      }t        |||       d d d        dt	        j
                        v sJ t        t              5 }t        g d      }t        g d      }t        g dg dg dg dg dg      }t        |||       d d d        dt	        |j
                        v sJ t        t              5 }t        g d      }t        g d      }t        g dg dg dg dg      }t        |||       d d d        d	t	        |j
                        v sJ t        t              5 }t        g d      }t        g d      }t        g d
g d
g dg dg d
g      }t        |||       d d d        dt	        |j
                        v sJ t        t              5 }t        g d      }t        g d      }t        g dg dg dg dg dg      }d}t        ||||       d d d        dt	        |j
                        v sJ t        t              5 }t        d       d d d        dt	        |j
                        v sJ y # 1 sw Y   -xY w# 1 sw Y   xY w# 1 sw Y   fxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   cxY w)N)r   r$   r%   r@   rR   rQ   r  r  r  x must be strictly increasing)r$   r$   r%   r@   rR   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 yr8  r   r9  rv   re   r   )r   r   r	   r   r   r   )r6   r   r7   r8   r   r   s         r;   r?  z*TestRectBivariateSpline.test_invalid_input  s   :& 	)$o&Ao&A&9 :A1a(	) /#djj/AAA:& 	)$o&Ao&A&9 :A1a(	) /#djj/AAA:& 	)$o&Ao&A&( )A1a(	) Idjj/" 	" " :& 	)$o&Ao&A|\<#\3 4A1a(	) Idjj/" 	" " :& 	4$o&Ao&A&9 :A$D1ad3	4 +c$**o===:& 	1$1a40	1%TZZ888[	) 	)	) 	)	) 	)	) 	)	4 	4	1 	1sK   AI=AJ
4?J#AJ$AJ1J==J
JJ!$J.1J:=Kc                 f   t        g d      }t        g d      }t        g dg dg dg dg dg      }t        g d      }t        ||||      }t        |j                         |j                         |j                         |j                               }t         |dd       |dd             y )NrQ   r  r  r  )r#   rR   r#   rR   r   rw   )r	   r   r   r   )r6   r7   r8   r   r   r   r   s          r;   r   z-TestRectBivariateSpline.test_array_like_inputF  s    /"/"?O_"O5 6\""1a6"188:qxxz188:(,7!$sC.$sC.Ar=   c                 B   d}t         j                  j                  dt         j                  |      }t         j                  j                  ddt         j                  z  |      }t        j                  |      }t        |||d      }d}d}t        j                  |      |z  t         j                  z  }t        j                  |      |z  dz  t         j                  z  }	 |||	       |j                         }
d|
d<   t        t              5 } ||
|	       d d d        d	t        j                        v sJ |	j                         }d|d<   t        t              5 } |||       d d d        d
t        |j                        v sJ y # 1 sw Y   rxY w# 1 sw Y   /xY w)Nr5  r   r$   rj   re   r   r%   MbP?r  r  )rf   randomuniformr   r   r   rq   r   r   r   r   r   )r6   NSampThetaPhiDataInterpolatorNLonNLatGridPosLatsGridPosLonsnonGridPosLatsr>  nonGridPosLonss                r;   test_not_increasing_inputz1TestRectBivariateSpline.test_not_increasing_inputR  sa   		!!!RUUE2ii1ruu9e4wwu~25#tsKiio,ruu4iio,q02558 	[+.$))+!q:& 	6(5	6.#hnn2EEEE$))+!q:& 	6(n5	6.#hnn2EEEE	6 	6	6 	6s   
F	
F	FFc                    t         j                  j                  d      }t        j                  |      }t        j                  |      }|j	                  dd||f      }|||j                  t         j                        fS )Nr#   r   r   )rf   r  default_rngrq   integersastypefloat64)r6   nxnyrngr7   r8   r   s          r;   _sample_large_2d_dataz-TestRectBivariateSpline._sample_large_2d_datao  s`    ii##A&IIbMIIbMLLC"b*!QXXbjj)))r=   r   )^  iR  )i     s_tols))r   -q=gHz>)r#   gy&1|?-C6?)r%   {Gz?r  c                     |\  }}|\  }}}| j                  ||      \  }}	}
t        ||	|
|      } |||	      }t        j                  |      j	                         rJ t        ||
||       y )Nre   r.   rtolr  r   rf   isnananyr   )r6   r   r  r  r  r*   r.   r  r7   r8   r   r:   z_spls                r;   test_spline_large_2dz,TestRectBivariateSpline.test_spline_large_2dw  ss     B4,,R41a!!QQ/Aq	88E?&&()(qt$7r=   l        z2Segfaults on 32-bit system due to large input data)reasonc                     d\  }}d\  }}}| j                  ||      \  }}}t        ||||d      }	 |	||      }
t        j                  |
      j	                         rJ t        |
|||       y )N)rd   i  )r$   r  r  r  )r*   maxitr  r  )r6   r  r  r*   r.   r  r7   r8   r   r:   r  s              r;   test_spline_large_2d_maxitz2TestRectBivariateSpline.test_spline_large_2d_maxit  su    
 B&4,,R41a!!QQb9Aq	88E?&&()(qt$7r=   N)rL   rM   rN   r  r  r  rl   r  r  r  r  r?  r   r  r  r  r	  slowparametrizer  skipifsysmaxsizer  rO   r=   r;   r  r    s    .%;
FL8(,)J/9b
BF:* [[[[Wz;&?@[[X (9 :	8: A 
	8 [[[[u, 6O P	8P 	8r=   r  c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)TestRectSphereBivariateSplinec           
          t        ddt        z  dz
  d      }t        dt        dz
  d      }t        g dg dg dg dg dg dg dg      }t        |||      }t	         |||      |       y N{Gz?r$   rX   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   r6   r8   r7   r   r9   s        r;   r  z+TestRectSphereBivariateSpline.test_defaults  si    T1R49a(T2d7A&???"??"$ % (!A.!#a(1-r=   c           
      p   t        ddt        z  dz
  d      }t        dt        dz
  d      }t        g dg dg dg dg dg dg dg      }t        |||      }g d}g d}|j	                  ||      }t        t        ||      D 	cg c]  \  }}	 |||	      d	    c}	}      }
t        ||
       y c c}	}w )
Nr  r$   rX   r  r  r  )r   r#   r  g@r  gQ@g      @)r)   r  rt  g?gjt?rw   r  r   )r   r   r	   r   r  r  r   )r6   r8   r7   r   r9   rR  rQ  r  r   r#  r  s              r;   r  z+TestRectSphereBivariateSpline.test_evaluate  s    T1R49a(T2d7A&???"??"$ % (!A.16VVB^CBK@&"bSR[%@AB$ As   B2
c                 t   t        j                  t        j                  dt        j                  ddd      z
        j                  t        j                  dt        j
                  t        j                  ddd            z
              j                  }t        t              5 }t        j                  d	d
d      t         j                  z  dz  }t        j                  ddd      t         j                  z  dz  }t        |||       d d d        dt        j                        v sJ t        t              5 }t        j                  ddd      t         j                  z  dz  }t        j                  ddd      t         j                  z  dz  }t        |||       d d d        dt        |j                        v sJ t        t              5 }t        j                  dd
d      t         j                  z  dz  }t        j                  ddd      t         j                  z  dz  }t        |||       d d d        dt        |j                        v sJ t        t              5 }t        j                  dd
d      t         j                  z  dz  }t        j                  ddd      t         j                  z  dz  }t        |||       d d d        dt        |j                        v sJ t        t              5 }t        j                  dd
d      t         j                  z  dz  }t        j                  ddd      t         j                  z  dz  }t        |||d	       d d d        dt        |j                        v sJ y # 1 sw Y   vxY w# 1 sw Y   xY w# 1 sw Y   hxY w# 1 sw Y   xY w# 1 sw Y   VxY w)N     V@      T      T@        f@rS        u@rY   r+   r  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 lessre   r  rf   dot
atleast_2dr   r^  r1   r   r   r   r   r   r   r6   r`  r>  rj  rk  s        r;   r?  z0TestRectSphereBivariateSpline.test_invalid_input  s   vvbmmC"++dC*D$DEGGmmD266"++b$2J+K$KLNNOa 	 :& 	8(;;r3*RUU2T9D;;q#r*RUU2T9D%dD$7	8 -HNN0CCCC:& 	8(;;r3*RUU2T9D;;q#r*RUU2T9D%dD$7	8 -HNN0CCCC:& 	8(;;r3*RUU2T9D;;tR,ruu4t;D%dD$7	8 2S5HHHH:& 	8(;;r3*RUU2T9D;;sC,ruu4t;D%dD$7	8 4s8>>7JJJJ:& 	>(;;r3*RUU2T9D;;r3+bee3d:D%dD$"=	> &X^^)<<<<9	8 	8	8 	8	8 	8	8 	8	> 	>A   #A$M;7A$NA$NA$N"3A&N.;NNN"N+.N7c                    t        ddt        z  dz
  d      }t        dt        dz
  d      }t        g dg dg dg dg dg dg dg      }t        |||      }t        ddt        z  dz
  d      }t        dt        dz
  d      }t	         |||d	      t        |||d
      dd       t	         |||d      t        |||d      dd       t	         |||dd      t        |||ddd      dd       t         |||d	       |j                  dd      ||             t         |||d       |j                  dd      ||             t         |||dd       |j                  dd      ||             t         |||dd       |j                  dd      ||d             t         |||dd       |j                  dd      ||d             t         |||ddd       |j                  dd      ||d             y )Nr  r$   rX   r  r  r  r  r#   )dthetar  r  r  r.   )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  s        r;   r  z3TestRectSphereBivariateSpline.test_derivatives_grid  s   T1R49a(T2d7A&???"??"$ % (!A.T1R49a(T2d7A&Aq+[aq-I!	.Aqq);sAqQ+G!	.Aq3#CA!tD!	. 	Aq+7311!Q71=	?Aqq)7311!Q71=	?Aq37311!Q71=	? 	Aq77311!Q715I	KAqqu57311!Q715I	KAq?7311!Q715I	Kr=   c                 R   t        ddt        z  dz
  d      }t        dt        dz
  d      }t        g dg dg dg dg dg dg dg      }t        |||      t        ddt        z  dz
  d      }t        dt        dz
  d      } ||dd	
      j                  |j                  k(  sJ t         ||dd	
      t        fd||d      dd       t         ||dd	      t        fd||d      dd       t         ||ddd	      t        fd||ddd      dd       y )Nr  r$   rX   r  r  r  r  r#   Fr"  c                      | |d      S NFr-  rO   r7   r8   r9   s     r;   <lambda>z@TestRectSphereBivariateSpline.test_derivatives.<locals>.<lambda>      AaU0C r=   r  r  r  r#  c                      | |d      S r(  rO   r)  s     r;   r*  z@TestRectSphereBivariateSpline.test_derivatives.<locals>.<lambda>  r+  r=   r  r$  c                      | |d      S r(  rO   r)  s     r;   r*  z@TestRectSphereBivariateSpline.test_derivatives.<locals>.<lambda>  r+  r=   r   r!  r  )r   r   r	   r   r   r   r%  r  s       @r;   rl   z.TestRectSphereBivariateSpline.test_derivatives  s.   T1R49a(T2d7A&???"??"$ % (!A.T1R49a(T2d7A&1a.44???Aq7#$CQaP!	. 	Aqqu5#$CQaP!	. 	Aq?#$C$%qQ1$@!	.r=   c                 t   t        j                  t        j                  dt        j                  ddd      z
        j                  t        j                  dt        j
                  t        j                  ddd            z
              j                  }t        t              5 }t        j                  d	d
d      t         j                  z  dz  }t        j                  d	dd      t         j                  z  dz  }t        |||       d d d        dt        j                        v sJ t        t              5 }t        j                  ddd      t         j                  z  dz  }t        j                  d	dd      t         j                  z  dz  }t        |||       d d d        dt        |j                        v sJ t        t              5 }t        j                  dd
d      t         j                  z  dz  }t        j                  ddd      t         j                  z  dz  }t        |||       d d d        dt        |j                        v sJ t        t              5 }t        j                  dd
d      t         j                  z  dz  }t        j                  ddd      t         j                  z  dz  }t        |||       d d d        dt        |j                        v sJ t        t              5 }t        j                  dd
d      t         j                  z  dz  }t        j                  ddd      t         j                  z  dz  }t        |||d       d d d        dt        |j                        v sJ y # 1 sw Y   vxY w# 1 sw Y   xY w# 1 sw Y   hxY w# 1 sw Y   xY w# 1 sw Y   VxY w)Nr
  r  r  r  r  rS   r  rY   r   r  r  r  r      r  r  r  r  r  r+   re   r  r  r  s        r;   test_invalid_input_2z2TestRectSphereBivariateSpline.test_invalid_input_2	  s   vvbmmC"++dC*D$DEGGmmD266"++b$2J+K$KLNNOa 	 :& 	8(;;q#q)BEE1D8D;;q#r*RUU2T9D%dD$7	8 -HNN0CCCC:& 	8(;;r3*RUU2T9D;;q#r*RUU2T9D%dD$7	8 -HNN0CCCC:& 	8(;;r3*RUU2T9D;;tR,ruu4t;D%dD$7	8 2S5HHHH:& 	8(;;r3*RUU2T9D;;sC,ruu4t;D%dD$7	8 4s8>>7JJJJ:& 	>(;;r3*RUU2T9D;;r3+bee3d:D%dD$"=	> &X^^)<<<<9	8 	8	8 	8	8 	8	8 	8	> 	>r  c           
      V   t        ddt        z  dz
  d      }t        dt        dz
  d      }t        g dg dg dg dg dg dg dg      }t        |||      }t        |j	                         |j	                         |j	                               }t         |||       |||             y r  )r   r   r	   r   r   r   )r6   r8   r7   r   r   r   s         r;   r   z3TestRectSphereBivariateSpline.test_array_like_input+  s    T1r6D=!,T29a((*?((*?((	* + )Aq1(QXXZL!$q!*d1aj9r=   c                    t        j                  g d      }t        j                  g d      }t        j                  ||      }|d   |d   z   }t        j                  |      }t        j                  |      }t	        |||      }t        j                  t        j                  ddg            }t        j                  t        j                  ddg            }	 |||	      }
t        j                  d	d
gddgg      }t        |
|       y )N)r     #   r  -   )iiir   r   r#   r4  g     B@r6  g     `Sg     Fg=Eg     HgDioEG)rf   r	   r   radiansr   r   )r6   rj  rk  meshr`  lat_rlon_rinterpolator	query_lat	query_londata_interpanss               r;   test_negative_evaluationz6TestRectSphereBivariateSpline.test_negative_evaluation9  s    xx,-xx01{{4&Awa 

4 

4 0tDJJrxxT
34	JJrxxe56	"9i8hh
+!9-/ 0!+s3r=   c                    t        j                  dd      t         j                  z  dz  }t        j                  dd      t         j                  z  dz  }t        j                  d      }dD ]  }t	        |||d|        y )Nr#   r   )rY   rY   ))TT)TF)FFr   )r*   pole_continuity)rf   rq   r   r   r   )r6   uvr   ps        r;   test_pole_continuity_gh_14591z;TestRectSphereBivariateSpline.test_pole_continuity_gh_14591H  so     IIaruu$r)IIaruu$r)HHV> 	GA%aAAF	Gr=   N)rL   rM   rN   r  r  r?  r  rl   r0  r   r@  rF  rO   r=   r;   r   r     s4    .% =D KD.0 =D:4Gr=   r   c                    |dk(  r|dk(  r	 | ||      S |dk(  r$|dk(  r | ||z   |       | ||z
  |      z
  d|z  z  S |dk(  r$|dk(  r | |||z          | |||z
        z
  d|z  z  S |dk(  rM|dk(  rH | ||z   ||z          | ||z
  ||z         z
   | ||z   ||z
        z
   | ||z
  ||z
        z   d|z  dz  z  S t        d      )Nr   r#   r$   zinvalid derivative order)r   )funcr7   r8   r  r  r<  s         r;   r%  r%  W  s   	Qw27Aqz	qR1WQWa 4C#33#>>	qR1WQC 41s7#33#>>	qR1WQWa#g&a#gq3w)??q3wC()+/CS+ABFGeaZP 	P 344r=   c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	Test_DerivedBivariateSplinezgTest the creation, usage, and attribute access of the (private)
    _DerivedBivariateSpline class.
    c                    t        j                  t        t        t	        d      t	        d                        }t        j                  t        t        t	        d      t	        dd                        }t        j                  t        j
                  ddd      t        j
                  ddd      f      }t               5 }|j                  t        d       t        |||t        ddd      t        d	d
d      d      | _
        d d d        t        |||      | _        t        ddd      }|dz   }t        t	        |j                        D cg c]  }t        j                  ||       c}      }t!        |||      | _        t        t%        j&                  t	        d      t	        d                  | _        y # 1 sw Y   xY wc c}w )Nr   r#      r%   r  r   g     3@r@   r)   g     4@r  r;  r   r5  rw   )rf   concatenatelistr  r   r   r   r   r   r   r_  r   
lut_smoothr	   r  rollr   lut_rect	itertoolsproductorders)	r6   r7   r8   r   r   r   r   izzs	            r;   rl  z(Test_DerivedBivariateSpline.setup_methodi  sS   NN4E"IuRy 9:;NN4E"IuQ| <=>NNBKK1b12;;q!R3HIJ  	8CJJ{$FG-aA.6sD!.D.6sD!.D268DL	8 01a8aB#X5=9aBGGAqM9:+BB79,,U1XuQx@A	8 	8 :s   AF9G9Gc                     | j                   D ]I  \  }}| j                  j                  ||      } |ddd      }| j                  dd||d      }||k(  rIJ  y )Nrj   Fr-  r  )rT  r_  r  r6   nuxnuylut_derr   r   s         r;   test_creation_from_LSQz2Test_DerivedBivariateSpline.test_creation_from_LSQz  s`     	HCll55c3?GSu-AS###EBA6M6		r=   c                     | j                   D ]I  \  }}| j                  j                  ||      } |ddd      }| j                  dd||d      }||k(  rIJ  y )Ng      @Fr-  r  )rT  rO  r  rX  s         r;   test_creation_from_Smoothz5Test_DerivedBivariateSpline.test_creation_from_Smooth  s`     	HCoo88cBGSu-ASSSuEA6M6		r=   c                     | j                   D ]I  \  }}| j                  j                  ||      } |ddd      }| j                  dd||d      }||k(  rIJ  y )Nr   r)   Fr-  r  )rT  rQ  r  rX  s         r;   test_creation_from_Rectz3Test_DerivedBivariateSpline.test_creation_from_Rect  s`     	HCmm66sC@GSu-Ac333UCA6M6		r=   c                     | j                   j                  dd      }t        t              5  |j                   d d d        y # 1 sw Y   y xY wNr#   )rQ  r  r   AttributeErrorfpr6   ders     r;   test_invalid_attribute_fpz5Test_DerivedBivariateSpline.test_invalid_attribute_fp  s<    mm..q!4>* 	FF	 	 	s   AAc                     | j                   j                  dd      }t        t              5  |j	                          d d d        y # 1 sw Y   y xY wrb  )rO  r  r   rc  r2   re  s     r;   #test_invalid_attribute_get_residualz?Test_DerivedBivariateSpline.test_invalid_attribute_get_residual  sA    oo00A6>* 		 	 	s   AAN)
rL   rM   rN   __doc__rl  r\  r^  r`  rg  ri  rO   r=   r;   rJ  rJ  e  s&    B"
r=   rJ  )r   r   g:0yE>)1rR  r  numpyrf   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  rH  rZ  r  r  r   r%  rJ  rO   r=   r;   <module>rr     s     
  +  *  C B B K K# # # : )F7 F7Ra6 a6H~8 ~8BFB FBRRB RBjo8 o8d~G ~GB52 2r=   