
    Ugp                    ~   d dl Z d dlZd dlZd dlZd dlmZmZmZ d dl	m
Z d dl	Z	d dlmZmZmZmZmZmZmZmZmZ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#c m Z$ d dl%m&Z&m'Z'm(Z(m)Z)m*Z* d dl+m,c m-Z. d dl/m0Z0 d dl1m2Z2 d dlm3Z4 d d	lm5Z6  G d
 d          Z7 G d d          Z8d Z9d Z:d Z;d Z<d Z=d Z>d/dZ?d0dZ@d ZA G d d          ZB G d d          ZCd ZDd1dZE G d d           ZFd! ZG G d" d#          ZHd$ ZId% ZJd& ZK G d' d(          ZL G d) d*          ZM G d+ d,          ZN G d- d.          ZOdS )2    N)assert_equalassert_allcloseassert_)raises)BSplineBPolyPPolymake_interp_splinemake_lsq_spline_bsplsplevsplrepsplprepsplder
splantidersprootsplintinsertCubicSpline	NdBSplinemake_smoothing_splineRegularGridInterpolator)_not_a_knot_augknt_woodbury_algorithm_periodic_knots_make_interp_per_full_matr)	AxisError)make_ndbspl)	_dfitpack)	_bsplinesc                   t   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d Zd Zd Zd Zd Zd Zej         !                    d e"dd                    d              Z#d! Z$d" Z%ej         !                    d#g d$          ej         !                    d% e"d&                    d'                         Z&d( Z'd) Z(d* Z)ej         !                    d+g d,          d-             Z*ej         !                    d+g d,          d.             Z+d/ Z,d0 Z-d1S )2TestBSplinec           
         t          t          t          ft          fi t	          ddgdgd           t          j        d          5  t          t          t          fi t	          dt
          j        gdgd           d d d            n# 1 swxY w Y   t          t          t          fi t	          dt
          j        gdgd           t          t          t          fi t	          ddgdgd           t          t          t          fi t	          dgdggdgd           t          t          t          fi t	          g d	dgd           t          t          t          fi t	          g d
ddgd           t          t          t          fi t	          g dg dd           t          t          t          fi t	          g dg dd           t          t          t          fi t	          g dg dd           d\  }}t          j	        ||z   dz             }t
          j
        
                    |          }t          |||          }t          ||j                   t          ||j                   t          ||j                   d S )N                 ?      ?r   tckignore)invalidr   r%      r   r%   r0         r0   )        r4   r'          @      @      @)r'   r'   r'   cubic      @)r4   r   r%   r%   r0   r2   )r'   r%   r%      r2   )assert_raises	TypeError
ValueErrorr   dictnperrstatenaninfarangerandomr   r)   r*   r   r+   )selfnr+   r)   r*   bs         d/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/interpolate/tests/test_bsplines.py	test_ctorzTestBSpline.test_ctor!   s+   y*-w 	1 	1!SbTQ///	1 	1 	1[*** 	S 	S*gRRBFtq1Q1Q1QRRR	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	Sj'NNTQKB41-M-M-MNNNj'JJTQGtq-I-I-IJJJj'MMTaS1#J2$!-L-L-LMMM 	j'KKTIII!-J-J-JKKKj' 	< 	<RH:::	< 	< 	< 	i 	O 	O111\\\WMMM	O 	O 	Oi 	K 	K111\\\SIII	K 	K 	K 	j' 	B 	B,,,


a@@@	B 	B 	B 1Iac!eIQAq!1313Qs   6B

BBc                 P   t                      }|j        }t          |j        |d         dd           t          |j        |d         dd           t          |j        |d                    t          j        t                    5  d|_        d d d            d S # 1 swxY w Y   d S )Nr   V瞯<atolrtolr%   r0   foo)
_make_random_splinetckr   r)   r*   r   r+   pytestr   AttributeError)rF   rH   rR   s      rI   test_tckzTestBSpline.test_tckD   s    !!eSV%e<<<<SV%e<<<<QS#a&!!! ]>** 	 	AE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   BB"Bc                    t          j        ddd          }t          ddgdgd          }t           ||          d           t          g dddgd          }t           ||          t          j        |d	k     dd                     d S )
Nr   r%   
   r6   r(   r2   )r   ffffff?r%   r3   rX   )r@   linspacer   r   whererF   xxrH   s      rI   test_degree_0zTestBSpline.test_degree_0P   s    [Ar""q!f***"q!!!lllq!f222"rxT	1a8899999    c                    g d}g d}d}t          |||          }t          j        ddd          }t          |d         t	          |          z  |d         t	          |dz
            z  z   |d         t	          |dz
            z  z    ||          d	           t          t          ||||f           ||          d	           d S )
Nr1   r%   r0   r2   r%   r2   2   r   r0   +=rN   )r   r@   rY   r   B_012r   )rF   r)   r*   r+   rH   xs         rI   test_degree_1zTestBSpline.test_degree_1Y   s    OOIIAq!K1b!!!U1XX!U1Q3ZZ7!A$uQqSzz/I!5	* 	* 	* 	*a!Q++QQqTT>>>>>>r^   c                    d}t          j        dg|dz   z  dg|dz   z  z             }t          j        g d          }t          |                    dd          ddg          }t	          |||          }t          j        ddd          }t           ||d	
           ||d	
          d           t          t          ||||f           ||          d           d S )Nr2   r   r%   r'   r5   r6   r7   r.   g      r5   rW   Textrapolaterb   rc   )r@   asarrayr   reshaper   rY   r   r   )rF   r+   r)   r*   bpbsplr\   s          rI   test_bernsteinzTestBSpline.test_bernsteind   s
   JsAaCyA3!9,--J'''((199R##aV,,q!Q[b"%%24000RT222	@ 	@ 	@ 	@b1a),,Ru	. 	. 	. 	. 	. 	.r^   c                 (   t                      }|j        \  t          j                  dz
           d          } ||          }fd|D             }t	          ||d           fd|D             }t	          ||d           d S )Nr%   ra   c                 4    g | ]}t          |          S  _naive_eval.0re   r*   r+   r)   s     rI   
<listcomp>z4TestBSpline.test_rndm_naive_eval.<locals>.<listcomp>z   s'    3331{1aA&&333r^   rb   rc   c                 4    g | ]}t          |          S rr   )_naive_eval_2ru   s     rI   rw   z4TestBSpline.test_rndm_naive_eval.<locals>.<listcomp>}   s'    666aaAq))666r^   )rQ   rR   r@   rY   r   )	rF   rH   r\   y_by_ny_n2r*   r+   r)   s	         @@@rI   test_rndm_naive_evalz TestBSpline.test_rndm_naive_evalr   s      !!%1a[1q!Aw++aee333333333Su----6666662666T......r^   c           	          t                      }|j        \  }}}t          j        ||         || dz
           d          }t	           ||          t          ||||f          d           d S )Nr%   ra   rb   rc   rQ   rR   r@   rY   r   r   rF   rH   r)   r*   r+   r\   s         rI   test_rndm_splevzTestBSpline.test_rndm_splev   sn    !!%1a[1q!Aw++"uR!Q33%@@@@@@r^   c                    t           j                            d           t          j        t           j                            d                    }t           j                            d          }t	          ||          }t          | }|j        |j        }}t          j        ||         || dz
           d          }t           ||          t          ||          d           d S )N     r%   P   rb   rc   )r@   rE   seedsortr   r   r)   r+   rY   r   r   )rF   re   yrR   rH   r)   r+   r\   s           rI   test_rndm_splrepzTestBSpline.test_rndm_splrep   s    
	tGBI$$R(())IR  QllSMsAC1[1q!Aw++"uR~~E::::::r^   c                    t                      }t          j        |j                  |_        t          j        |j        |j                 |j        |j         dz
           d          }t           ||          d           d S )Nr%   d   r'   )rQ   r@   	ones_liker*   rY   r)   r+   r   )rF   rH   r\   s      rI   test_rndm_unityzTestBSpline.test_rndm_unity   sg    !!l13[QS13tAv;44"r"""""r^   c                    d\  }}t          j        t           j                            |                    }t           j                            |ddf          }t          |||          }||         || dz
           }}|||z
  t           j                            d          z  z   }t	           ||          j        d           d S )N   r2         sizer%   r2   r3      )r2   r3   r   r   r   )r@   r   rE   r   r   shape)	rF   rG   r+   r)   r*   rH   tmtpr\   s	            rI   test_vectorizationzTestBSpline.test_vectorization   s    1GBI$$Q''((I1a),,Aq!1q!AwB27bi..y9999QQrUU[/22222r^   c           	         d\  }}t          j        t           j                            ||z   dz                       }t           j                            |          }t           j        |t           j                            |dz             f         }t	          |||          t	          |||          }}|d         |d         z
  }t          j        |d         |z
  |d         |z   d          }	t           ||	           ||	          d           t           ||	          t          |	|||f          d           t           ||	          t          |	|||f          d           d S )N)!   r2   r%   r.   r   ra   rb   rc   )r@   r   rE   r_r   rY   r   r   )
rF   rG   r+   r)   r*   c_padrH   b_paddtr\   s
             rI   
test_len_czTestBSpline.test_len_c   sJ    1GBI$$QqSU++,,IQ a))!A#.../1a##WQq%9%95rUQqT\[1AbEBJ33"uuRyyu5555"uR!Q33%@@@@"uR!UA77eDDDDDDr^   c           	          t                      }|j        \  }}}||         || dz
           }}dD ]2}t           |||g|           ||dz   |dz
  g|          d           3d S )Nr%   )TF绽|=&.>rc   rQ   rR   r   )rF   rH   r)   _r+   r   r   extraps           rI   test_endpointszTestBSpline.test_endpoints   s    !!%1a1q!AwB# 	L 	LFAAr2h//ArEz2:6??dL L L L L	L 	Lr^   c           	          t                      }|j        \  }}}t           |||dz   | dz
           dz
             |||dz   | dz
           dz             d           d S )Nr%   r   r   rc   r   )rF   rH   r)   r   r+   s        rI   test_continuityzTestBSpline.test_continuity   s    !!%1a!AaC1H+-..!AaC1H+2E0F0F	 	 	 	 	 	r^   c           	         t                      }|j        \  }}}|d         |d         z
  }t          j        ||         |z
  || dz
           |z   d          }||         |k     ||| dz
           k     z  }t	           |||         d           |||         d                     t	           ||d          t          ||||fd                     d S )	Nr.   r   r%   ra   Tri   F)extr   )rF   rH   r)   r*   r+   r   r\   masks           rI   test_extrapzTestBSpline.test_extrap   s    !!%1arUQqT\[1AqbdGbL"55!r	b1aRT7l+ 	"T(555"T(666	8 	8 	8 	"$///b1a)+++	- 	- 	- 	- 	-r^   c                     t                      }|j        \  }}}|d         dz
  |d         dz   g} ||          }t          t          j        t          j        |                                d S )Nr   r%   r.   )rQ   rR   r   r@   allisnan)rF   rH   r)   r   r+   r\   yys          rI   test_default_extrapzTestBSpline.test_default_extrap   sj    !!%1adQh"	"QrUUBF28B<<((()))))r^   c           	         t           j                            d           t          j        t           j                            d                    }t           j                            d          }d}t	          |||d          }|j        |dz   z
  }|d         |d	         z
  }t          j        ||         |z
  ||         |z   d
          }||         |||         z
  ||         ||         z
  z  z   }t           ||          t          ||||f                     g d}||         |||         z
  ||         ||         z
  z  z   }t           ||d           ||d                     d S )Nr      r3   r2   periodicri   r%   r.   r   ra   )r.   r         ?r%   T)
r@   rE   r   r   r   r   rY   r   r   r   )	rF   r)   r*   r+   rH   rG   r   r\   xys	            rI   test_periodic_extrapz TestBSpline.test_periodic_extrap   s^   
	tGBI$$Q''((IQAq!444Fa!erUQqT\[1AaD2Ir22qTR!A$Y1Q4!A$;//"uR!Q33444 __qTR!A$Y1Q4!A$;//QQrz222AAbd4K4K4KLLLLLr^   c                     t                      }|j        \  }}}t          j        |||f          }t	          j        ||         ||          d          }t           ||           ||          dd           d S )Nr   rb   rM   )rQ   rR   r	   from_spliner@   rY   r   )rF   rH   r)   r*   r+   ppr\   s          rI   
test_ppolyzTestBSpline.test_ppoly   sz    !!%1a1ay))[1q!uc**"rr"vvE>>>>>>r^   c                 t   t                      }|j        \  }}}t          j        |d         |d         d          }t          j        ||f         }t          d|dz             D ]4}t          ||||f|          }t          | |||          d           5t           |||dz             dd           d S )	Nr   r.   ra   r%   dernurb   rc   )rQ   rR   r@   rY   r   ranger   r   )rF   rH   r)   r*   r+   r\   r   yds           rI   test_derivative_rndmz TestBSpline.test_derivative_rndm   s    !!%1a[1qub))U2q5\AaC== 	; 	;CrAq!9#...BB"E::::: 	"1qu555555r^   c                    d}g d}t           j                            d           t           j        ddt           j                            d          ddf         }t	          |||          }t          j        g d          }t           |||dk             dz
             |||dk             dz                        t          t          j         |d	           |d
                                t          j        ddg          }t           ||dz
  d           ||dz   d                     t          j        ddg          }t          t          j	        t          j         ||dz
  d           ||dz   d                                          t          t          j	        t          j         ||dz
  d           ||dz   d                                          d S )Nr0   )r.   r.   r   r%   r%   r2   r3   r   r   r   r   r   r   r   r   )r%   r2   r3   r   r   r   g2H@gη   @r2   r3   r%   r   )
r@   rE   r   r   r   rk   r   r   allcloser   )rF   r+   r)   r*   rH   re   x0x1s           rI   test_derivative_jumpsz!TestBSpline.test_derivative_jumps  s    222
	tE!Q	((++Q12Aq! J|||$$!AF)e+,,!AF)e+,,	. 	. 	.BK(QQwZZ888999 ZA"u*+++"u*+++	- 	- 	-ZABF2;qqe':':':'(qe':':':< < = = = 	> 	> 	> 	BF2;qqUq'9'9'9'(qUq'9'9'9; ; < < < 	= 	= 	= 	= 	=r^   c           	         t          j        ddd          }t          j        g d          }t	           ||          t          ||j        |j        |j        f          d           t	           ||          t          |          d           t          j        g d          }t          j        d	d
d          }t	           ||          t          j
        |dk     ||z  d|z
  d
z            d           d S )Nr.   r3   r   r   r%   r0   r2   )r)   rb   rc   r   r%   r%   r0   r   r0   rW   r%   r5   )r@   rY   r   basis_elementr   r   r)   r*   r+   B_0123rZ   r[   s      rI   test_basis_element_quadraticz(TestBSpline.test_basis_element_quadratic  s   [Q##!LLL111"b13QS/22	@ 	@ 	@ 	@"r

	0 	0 	0 	0 !LLL111[Ar"""aBB
33%	A 	A 	A 	A 	A 	Ar^   c           	          t                      }|j        \  }}}t          j        ||         || dz
           d          }t	           ||          t          ||||          d           d S )Nr%   r   rb   rc   )rQ   rR   r@   rY   r   _sum_basis_elementsr   s         rI   test_basis_element_rndmz#TestBSpline.test_basis_element_rndm*  sm    !!%1a[1q!Aw++"22q!Q??eLLLLLLr^   c                    t                      }|j        \  }}}|dz  }t          |||          }t          ||j        j        |          }t          ||j        j        |          }t          j        ||         || dz
           d          }t           ||          j         ||          d           t           ||          j         ||          d           d S )Ny      ?      @r%   r   rb   rc   )	rQ   rR   r   r*   realimagr@   rY   r   )	rF   rH   r)   r*   r+   ccb_reb_imr\   s	            rI   
test_cmplxzTestBSpline.test_cmplx0  s    !!%1a(^Ar1q!#(A&&q!#(A&&[1q!Aw++"
DDHH59999"
DDHH5999999r^   c                     t          j        g d          }t          t          j         |t          j                                       d S )Nr   )r   r   r   r@   r   rB   rF   rH   s     rI   test_nanzTestBSpline.test_nan=  s>    !,,,//26##$$$$$r^   c                 D   t          d          }|j        \  }}}t          |||          }t          j        ||         || dz
           d          }t          d|          D ]<}|                                }t           |||           ||          dd           =d S )Nr   r+   r%   r   -q=rM   )rQ   rR   r   r@   rY   r   
derivativer   )rF   rH   r)   r*   r+   b0r\   js           rI   test_derivative_methodz"TestBSpline.test_derivative_methodB  s    !$$$%1aQ1[1q!Aw++q! 	F 	FAABBr1IIqquu5uEEEEE	F 	Fr^   c                     t                      }|j        \  }}}t          j        ||         || dz
           d          }t	           |                                                                |           ||          dd           t          j        |||f         }t          j        ||f          }t          |||          }t	           |                                                                |           ||          dd           d S )Nr%   r   rb   rM   )
rQ   rR   r@   rY   r   antiderivativer   c_dstackr   r   s         rI   test_antiderivative_methodz&TestBSpline.test_antiderivative_methodK  s   !!%1a[1q!Aw++7((**5577;;"E	7 	7 	7 	7 E!Q'NIq!fAq!7((**5577;;"E	7 	7 	7 	7 	7 	7r^   c                 
   t          j        g d          }t          |                    dd          d           t          |                    dd          d           t          |                    dd          d           t          |                    dd          d           t          |                    ddd          d           t          |                    ddd	          d           t          |                    ddd	          d           t          |                    ddd	          t	          j        dd|j                             d
|_        |                                } |d           |d          z
  }t          |                    dd          |           t          |                    dd          d|z             t          |                    dd          |           t          |                    dd          d|z             t          |                    dd           |d           |d          z
             t          |                    dd           |d           |d          z
   |d          z    |d          z
             t          |                    dd           |d           |d          z
   |d          z    |d          z
             t          |                    dd           |d           |d          z
   |d          z    |d          z
  d|z  z              t          |                    dd           |d           |d          z
             t          |                    dd           |d           |d          z
             t          |                    dd           |d           |d          z
  d|z  z
             d S )Nr/   r   r%   r         r.   Tri   Fr   r0   iii      ?r2   g      +@   r   ir3   )	r   r   r   	integrate_implr   rR   rj   r   )rF   rH   i
period_ints       rI   test_integralzTestBSpline.test_integralY  s   !))),,Aq))3///Aq))8444Aq))4000 	B**A...Bt<<a@@@Bu==sCCCAru==xHHH 	Aru==QAE22	4 	4 	4 #QqTTAAaDD[
Aq)):666Aq))2
?;;;B++Z888B++Q^<<<C--qqvv#???C++QQqTTAAaDD[11Q44-?!!C&&-HIIIHf55!qqttaadd*QQsVV3	5 	5 	5C00!qqttaadd*QQsVV3a*nD	F 	F 	F 	Ar**AAaDD11Q44K888B,,aaddQQqTTk:::Ar**AAaDD11Q44K!j.,HIIIIIr^   c                     g d}t          ||          }d|_        t          j        |          }dD ]=\  }}t	          |                    ||          |                    ||                     >d S )Nr1   r   ))r   )r   r   )r      )r
   rj   r	   r   r   r   )rF   re   rH   pr   r   s         rI   test_integrate_ppolyz TestBSpline.test_integrate_ppoly~  s    OOq!$$"a  5 	1 	1FBAKKB//KKB//1 1 1 1	1 	1r^   c                      G d dt                     }|                    g d          }t          |j        |           t          |                                j        |           t          |                                j        |           d S )Nc                       e Zd ZdS )'TestBSpline.test_subclassing.<locals>.BN)__name__
__module____qualname__rr   r^   rI   Br     s        Dr^   r   )r   r%   r0   r0   )r   r   r   	__class__r   r   )rF   r   rH   s      rI   test_subclassingzTestBSpline.test_subclassing  s    	 	 	 	 	 	 	 	 OOLLL))Q[!$$$Q\\^^-q111Q%%''1155555r^   axisr   r3   c                    d\  }}t          j        dd||z   dz             }g d}|dz  }|                    ||           t           j                            |          }t	          ||||          }t          |j        j        ||         g|d |         z   ||dz   d          z              t           j                            d          }	t           ||	          j        |d |         t          |	j                  z   ||dz   d          z              |j	         dz
  |j	        fD ]+}
t          t          t          fi t          ||||
	           ,t	          ||||                                          t	          ||||                              d
          t	          ||||                                          t	          ||||                              d
          fD ]}t          |j        |j                   d S )Nr   r   r%   r   r   r   r3   r   r  r   )r)   r*   r+   r  r0   )r@   rY   r   rE   r   r   r*   r   listndimr<   r   r?   r   r   r  )rF   r  rG   r+   r)   shpos_axisr*   rH   xpaxb1s               rI   	test_axiszTestBSpline.test_axis  s3   1K1a!eai((YY !8
		(AI"%%Aq!$'''QSYl_r)8)}4r(1*++F	H 	H 	H Yi((QQrUU[		]T"(^^3b!oE	G 	G 	G F7Q;' 	: 	:B)W : : 1QR888: : : : 1a...99;;1a...99!<<1a...==??1a...==a@@B 	* 	*B !&))))		* 	*r^   c                 "   d}g d}t          j        g dg dg          }t          |||d          }t          ||d         |          }t          ||d         |          }t           |d	           |d	           |d	          g           d S )
Nr0   )r   r%   r0   r2   r3   r   r   )r.   r0   r   r.   )r0   r   r%   r.   r  r   r%   r9   )r@   arrayr   r   )rF   r+   r)   r*   splspl0spl1s          rI   test_neg_axiszTestBSpline.test_neg_axis  s    !!!Hnnnmmm455aAB'''q!A$""q!A$""SSXXS		4499566666r^   c                     d }d}d}dD ]} ||||           t          ddd          D ]} |||d           d}t          dd	          D ]} |||d
           dS )a7  
        Splines with different boundary conditions are built on different
        types of vectors of knots. As far as design matrix depends only on
        vector of knots, `k` and `x` it is useful to make tests for different
        boundary conditions (and as following different vectors of knots).
        c                    t           j                            d           t          j        t           j                            |           dz  dz
            }t           j                            |           dz  dz
  }|dk    r|d         |d<   t          ||||          }t          j        t          |j                  |z
  dz
            } t          |j        ||          |          }t          j
        ||j        |                                          }t          ||j        z  |d	
           t          ||d	
           dS )zY
            To avoid repetition of code the following function is provided.
            r   (   r   r   r.   r   r+   bc_typer%   rb   rc   N)r@   rE   r   r   random_sampler
   eyelenr)   r   design_matrixtoarrayr   r*   )	rG   r+   r  re   r   rn   r*   des_matr_defdes_matr_csrs	            rI   run_design_matrix_testszHTestBSpline.test_design_matrix_bc_types.<locals>.run_design_matrix_tests  s,    INN4   	//22R7"<==A	''**R/"4A*$$u!%aaAAADs46{{Q*++A07461a0033L"015124 44;GII  L46115AAAAL,UCCCCCCr^   r;   r2   clampednaturalr   r0   
not-a-knotr   r   r   N)r   )rF   r!  rG   r+   bcs        rI   test_design_matrix_bc_typesz'TestBSpline.test_design_matrix_bc_types  s    	D 	D 	D* ( 	. 	.B##Aq"---- q!Q 	8 	8A##Aq,7777 q! 	6 	6A##Aq*5555	6 	6r^   rj   )FTr   degreer   c           	         t           j                            d           t           j                            d|dz   z            }t          j        |          t          j        |          }}|}t           j        t          j        |dz
  |dz
  |          t          j        ||d|dz   z            t          j        |dz   |dz   |          f         }t          j        t          |          |z
  dz
            }t          ||||          }	t           |	|          t          j        ||||                                                     t          j        |dz
  |dz
  |dz   |dz   g          }|sKt          j        t"                    5  t          j        ||||           ddd           dS # 1 swxY w Y   dS t           |	|          t          j        ||||                                                     dS )z;Test that design_matrix(x) is equivalent to BSpline(..)(x).r   rW   r%   r0   r   N)r@   rE   r   r  aminamaxr   rY   r  r  r   r   r  r  r  rS   r   r>   )
rF   rj   r(  re   xminxmaxr+   r)   r*   bsplines
             rI   'test_design_matrix_same_as_BSpline_callz3TestBSpline.test_design_matrix_same_as_BSpline_call  s$    		tI##B&1*$566WQZZdE"+dQhq&99+dD!vz*:;;+dQhq&99: ; F3q66A:>""!Q;//GAJJ-aA{CCKKMM	
 	
 	

 HdRi4#:tbyABB 	z** < <%aA{;;;< < < < < < < < < < < < < < < < < < 

%aA{;;CCEE    s   
F//F36F3c                    t           j                            d           d}d}t          j        t           j                            |          dz  dz
            }t           j                            |          dz  dz
  }t          |||          }t          dd          D ]]}|d |         }|d |         }t          j        ||j	        |          
                                }	t          |	|j        z  |d	
           ^d S )Nr   rW   r2   r  r   r   r%   r3   rb   rc   )r@   rE   r   r   r  r
   r   r   r  r)   r  r   r*   )
rF   rG   r+   re   r   rn   r   xcycr   s
             rI   test_design_matrix_x_shapesz'TestBSpline.test_design_matrix_x_shapes  s   
	tGBI++A..3b899I##A&&+b0!!Q!,,,q! 	C 	CA2A2B2A2B"015124 44;GII  L4612EBBBBB	C 	Cr^   c                     g d}t          j        d|d                                          }t          |g dgd           d S )N)r'   r'   r'   r5   r6   r7   r7   r7   r5   r2   )g      ?gmਪ?gK}\UU?r4   rb   rc   )r   r  r  r   )rF   r)   des_matrs      rI   test_design_matrix_t_shapesz'TestBSpline.test_design_matrix_t_shapes  s_    ,,,(Q22::<<;;;<"	$ 	$ 	$ 	$ 	$ 	$r^   c                 b   t           j                            d           d}d}t          j        t           j                            |          dz  dz
            }t           j                            |          dz  dz
  }t          |||          }t          t                    5  t          j	        ||j
        d d d         |           d d d            n# 1 swxY w Y   d}g d	}g d
}t          t                    5  t          j	        |||           d d d            d S # 1 swxY w Y   d S )Nr   rW   r2   r  r   r   r.   r0   )r4   r'   r5   r6   r7         @rh   )r@   rE   r   r   r  r
   r<   r>   r   r  r)   )rF   rG   r+   re   r   rn   r)   s          rI   test_design_matrix_assertsz&TestBSpline.test_design_matrix_asserts  s   
	tGBI++A..3b899I##A&&+b0!!Q!,,, :&& 	6 	6!!TVDDbD\1555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6$$$:&& 	+ 	+!!Q***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s$   &%CCC D$$D(+D(r  )r$  r#  r   r%  c                 &   t           j                            d           t          j        t           j                            d                    }t           j                            d          }|dk    r|d         |d<   t	          |||          }t          j        ||          }t          j        ddd          }t           ||           ||          d	           t          |||          }t          |j
        |j
        d	           d S )
Nr   r   r   r   r.   r  r%   rL   rc   )r@   rE   r   r   r   r   from_power_basisrY   r   r
   r*   )rF   r  re   r   cbrn   r\   bspl_news           rI   test_from_power_basisz!TestBSpline.test_from_power_basis,  s     		tGBI$$R(())IR  j  aDAbEAw///'G<<<[Ar""2Ru5555%aG<<<
777777r^   c                    t           j                            d           t          j        t           j                            d                    }t           j                            d          t           j                            d          dz  z   }|dk    r|d         |d<   t	          |||          }t          j        ||          }t          ||j        |          }t          ||j	        |          }t          |j        j        |j        d|j        z  z   j                   t          |j        |j        d|j        z  z   d	           d S )
Nr   r   r&   r   r   r.   r;  rL   rc   )r@   rE   r   r   r   r   r<  r
   r   r   r   r*   dtyper   )rF   r  re   r   r=  rn   bspl_new_realbspl_new_imags           rI   test_from_power_basis_complexz)TestBSpline.test_from_power_basis_complex;  s?    		tGBI$$R(())IR  29#3#3B#7#7"#<<j  aDAbEAw///'G<<<*1afgFFF*1afgFFFTV\MO&(=?&:%;<A	C 	C 	C}.!/5:	< 	< 	< 	< 	< 	<r^   c                     t          j        g d          }t          j        g d          }t          j        t	          ||d          d          }t          |j        g dd           dS )	a}  
        For x = [0, 1, 2, 3, 4] and y = [1, 1, 1, 1, 1]
        the coefficients of Cubic Spline in the power basis:

        $[[0, 0, 0, 0, 0],\$
        $[0, 0, 0, 0, 0],\$
        $[0, 0, 0, 0, 0],\$
        $[1, 1, 1, 1, 1]]$

        It could be shown explicitly that coefficients of the interpolating
        function in B-spline basis are c = [1, 1, 1, 1, 1, 1, 1]
        r1   )r%   r%   r%   r%   r%   r$  r;  )r%   r%   r%   r%   r%   r%   r%   rL   rc   N)r@   r  r   r<  r   r   r*   )rF   re   r   rn   s       rI   test_from_power_basis_exmpz&TestBSpline.test_from_power_basis_exmpL  sy     H___%%H___%%'Aq)(L(L(L09; ; ; 5 5 5EBBBBBBr^   c                 b   t          j        ddg          }t          j        dg          }|                    d           |                    d           t          j        ddd          }|                    d           t	          ||d          }t           ||          d           d S )	Nr   r%   r6   FwriterW   r(   r2   )r@   r  setflagsrY   r   r   )rF   r)   r*   r\   rH   s        rI   test_read_onlyzTestBSpline.test_read_only_  s    HaVHcUOO	


	


[Ar""
%   a1""""q!!!!!r^   N).r   r   r   rJ   rU   r]   rf   ro   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  rS   markparametrizer   r  r  r'  r/  r3  r6  r9  r?  rD  rF  rK  rr   r^   rI   r#   r#      se       ! ! !F
 
 
: : :	? 	? 	?. . ./ / /A A A
; 
; 
;# # #3 3 3E E E$L L L  - - -* * *M M M$? ? ?6 6 6= = =8A A AM M M: : :% % %
F F F7 7 7#J #J #JJ	1 	1 	16 6 6 [VUU2q\\22* * 32*:7 7 7(6 (6 (6T [],E,E,EFF[XuuQxx00  10 GF4C C C"$ $ $+ + +$ [Y )C )C )C D D8 8D D8 [Y )C )C )C D D< <D D<C C C&" " " " "r^   r#   c                      e Zd Zej                            dg d          d             Zej                            dg d          d             Zd Zej                            dg d	          d
             Z	d Z
d ZdS )
TestInsertxval)r4   r'   r9   r3         @      @c                    t          j        d          }t          j        |          dz  }t          ||d          }t	          ||          }|                    |          }t          |j        |j        d           t          |j        |j        d |j	         dz
           d           ||d         k    r|n	|d d         }t           j
        |d|dd          |d d         z   z  f         }t           ||           ||          d           t          j        |          dz  }t          ||d          }	t          |t           j        ||f         d          }
|
                    |          }t          |j        |j        d           t          |j        t           j        |                    |          j        |	                    |          j        f         d           ||d         k    r|n	|d d         }t           j
        |d|dd          |d d         z   z  f         }t           |
|           ||          d           d S )	Nr   r2   r   rL   rc   r%   r.   r   )r@   rD   sinr
   r   insert_knotr   r)   r*   r+   r   cosr   )rF   rP  re   r   r  spl_1fspl_1r\   y1spl_y1spl_yyspl_yy1s               rI   test_insertzTestInsert.test_inserto  sC    IaLLF1IIqL A+++c""%%6666)CE6!8)!45AAAA !B%--QQQssVU2sAabbEAcrcFN++,Br7777 VAYY\#ArQ///#AruQU|q999$$T**	577777	25)>)>)@)/););D)A)A)C*D $EKP	R 	R 	R 	R !B%--QQQssVU2sAabbEAcrcFN++,r

GGBKKe<<<<<<r^   zxval, m))r4   r0   )r'   r2   )r   r   )r3   r0   )rR  r0   c                 .   t          j        d          }t          j        |          dz  }t          ||d          }t	          |||          }|                    ||          }t          |j        |j        d           t          |j        |j        d |j	         dz
           d           ||d         k    r|n	|d d         }t           j
        |d	|dd          |d d         z   z  f         }t           ||           ||          d           d S )
Nr   r2   r   mrL   rc   r%   r.   r   )r@   rD   rT  r
   r   rU  r   r)   r*   r+   r   )	rF   rP  r`  re   r   r  rW  rX  r\   s	            rI   test_insert_multizTestInsert.test_insert_multi  s    IaLLF1IIqL A+++cQ'''a((6666)CE6!8)!45AAAA!B%--QQQssVU2sAabbEAcrcFN++,Br777777r^   c                    t           j                            d          }d\  }}t          j        |                    ||z   dz                       }|                    |ddf          }t          |||          }|                    ||dz            || dz
                     }|                    |          }|                    ||dz            || dz
           d	          }	t           ||	           ||	          d
           d S )N90  r:   r%   r   r2   r0   )lowhighr   rd  re  r   rL   rc   )r@   rE   default_rngr   uniformr   rU  r   )
rF   rngrG   r+   r)   r*   r  xvrX  r\   s
             rI   test_insert_randomzTestInsert.test_insert_random  s    i##E**1GCKKQqSUK++,,KKaAYK''aA[[QqsV!QBqD'[22##[[QqsV!QBqD'[;;Br777777r^   rj  )	r   皙?r5   r7         @      @      @gffffff@rR  c           	      F   t          j        d          }t          j        |          dz  }t          ||d          }t	          |ddi}|                    |          }t          ||j        d          \  }}}	t          |j	        |d	           t          |j
        d |	 d
z
           |d |	 d
z
           d	           t           j                            d                              ddd          }
t           ||
          t          |
|||	f          d	           d S )Nr   r2   r   rj   r   TperrL   rc   r%   r   r   r   )   rf  )r@   rD   rT  r   r   rU  r   rR   r   r)   r*   rE   rg  rh  r   )rF   rj  re   r   rR   r  rX  tfcfr+   r\   s              rI   test_insert_periodiczTestInsert.test_insert_periodic  s    IaLLF1IIqLQQs3
33##2swD111	B%0000!A5QBqD5	>>>>Y""4((00QQR0HHb		5b"a[#9#9FFFFFFr^   c                    d}d}t          j        dg|dz   z  g dz   dg|dz   z  z             }t          j        t          |          |z
  dz
            }t	          |||d          }t          t                    5  t          ||||fd	
           d d d            n# 1 swxY w Y   t          t                    5  |                    |           d d d            d S # 1 swxY w Y   d S )N      @r2   r   r%   r0   r2   r3   r   r   r   ri   Trq  )	r@   r  onesr  r   r<   r>   r   rU  )rF   rj  r+   r)   r*   r  s         rI   +test_insert_periodic_too_few_internal_knotsz6TestInsert.test_insert_periodic_too_few_internal_knots  sv    HaS!A#Y-QqS	9::GCFFQJN##aA:666:&& 	, 	,21ayd++++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, :&& 	  	 OOB	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s$   =BB#&B#>C!!C%(C%c                 Z   d}t          j        dg|dz   z  g dz   dg|dz   z  z             }t          j        t          |          |z
  dz
            }t	          |||          }t          t                    5  |                    d           d d d            n# 1 swxY w Y   t          t                    5  |                    d           d d d            n# 1 swxY w Y   t          t                    5  |                    dd           d d d            d S # 1 swxY w Y   d S )	Nr2   r   r%   ry  r   r.   r   r_  )r@   r  rz  r  r   r<   r>   rU  )rF   r+   r)   r*   r  s        rI   test_insert_no_extrapz TestInsert.test_insert_no_extrap  s   HaS!A#Y-QqS	9::GCFFQJN##aA:&& 	  	 OOB	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  :&& 	 	OOA	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 :&& 	$ 	$OOAO###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s6   9BB"B:CC #C ;D  D$'D$N)r   r   r   rS   rL  rM  r]  ra  rk  rv  r{  r}  rr   r^   rI   rO  rO  m  s        [V%A%A%ABB= = CB=@ [CCC 8 8 88 8 8 [T $8 $8 $8  G G G     ($ $ $ $ $r^   rO  c            
          dd} dD ]e}t          |          }t          t          |                    D ]6\  }} | ||           t          d|dz             D ]} | |||dd           7fd S )	Nr   rb   c           
      4   | j         \  }}}t          j        |          }t          j        |d         dz
  d|dd          |d d         z   z  |d         dz   f         }t	          t          ||||f|           | ||          ||d| d| j                    d S )	Nr   rl  r   r%   r.   zder = z  k = )rN   rO   err_msg)rR   r@   uniquer   r   r   r+   )	rH   r   r   rN   rO   r)   r*   r+   re   s	            rI   check_splevz,test_knots_multiplicity.<locals>.check_splev  s    %1aIaLLE!A$s(C1222A2/2s:;a!QC00!!As)).Gs.G.G!#.G.G	I 	I 	I 	I 	I 	Ir^   )r%   r0   r2   r3   r   r   r%   r   )r   rb   rb   )rQ   	enumerate_make_multiplesr   )r  r+   rH   r   r  r   s         rI   test_knots_multiplicityr    s    I I I I  6 6!$$$q1122 	6 	6EArKAQ!}} 6 6B3u55556	66 6r^   c                    |dk    r#||         | cxk    r||dz            k     rn ndndS |||z            ||         k    rd}n6| ||         z
  |||z            ||         z
  z  t          | |dz
  ||          z  }|||z   dz            ||dz            k    rd}nE|||z   dz            | z
  |||z   dz            ||dz            z
  z  t          | |dz
  |dz   |          z  }||z   S )zw
    Naive way to compute B-spline basis functions. Useful only for testing!
    computes B(x; t[i],..., t[i+k+1])
    r   r%   r'   r4   _naive_Bre   r+   r   r)   c1c2s         rI   r  r    s   
 	Avvda((((!AaC&(((((ssc11v1~~!A$h1Q3!A$'(1ac1a*@*@@1Qx1QqS6!AhlQqs1uX!A#./(1ac1Q32J2JJGr^   c                 6              k    rnt          j                   dz
            cxk    rdz            k    sn J k    rt                    z
  k     sJ t           fdt	          ddz             D                       S )z=
    Naive B-spline evaluation. Useful only for testing!
    r%   c              3   Z   K   | ]%}|z
           t          |z
            z  V  &d S Nr  )rv   r   r*   r   r+   r)   re   s     rI   	<genexpr>z_naive_eval.<locals>.<genexpr>  sB      FF1q1vAqsA...FFFFFFr^   r   )r@   searchsortedr  sumr   )re   r)   r*   r+   r   s   ````@rI   rt   rt     s     	AaDyyOAq!!A%Q41!A#66a#a&&1*nnnnFFFFFFFFa1FFFFFFr^   c                     t                    dz   z
  }|dz   k    sJ t                    |k    sJ           cxk    r|         k    sn J t           fdt          |          D                       S )z'Naive B-spline evaluation, another way.r%   c              3   N   K   | ]}|         t          |          z  V   d S r  r  rv   r   r*   r+   r)   re   s     rI   r  z _naive_eval_2.<locals>.<genexpr>#  s:      ==qqthq!Q***======r^   r  r  r   re   r)   r*   r+   rG   s   ```` rI   ry   ry     s    A!A#A!8888q66Q;;;;Q41!=======E!HH======r^   c                 2   t          |          |dz   z
  }||dz   k    sJ t          |          |k    sJ d}t          |          D ]O} t          j        ||||z   dz            d          |           }|||         t	          j        |          z  z  }P|S )Nr%   r4   r0   Fri   )r  r   r   r   r@   
nan_to_num)re   r)   r*   r+   rG   sr   rH   s           rI   r   r   &  s    A!A#A!8888q66Q;;;;
A1XX % %@G!!Aac!eG*%@@@CC	QqTBM!$$$$Hr^   c                     t          j        |           } t          j        | | dk     | dk    z  | dk    | dk     z  | dk    | dk    z  gd d d g          S )z+ A linear B-spline function B(x | 0, 1, 2).r   r0   r%   c                     dS )Nr4   rr   re   s    rI   <lambda>zB_012.<locals>.<lambda>7  s    b r^   c                     | S r  rr   r  s    rI   r  zB_012.<locals>.<lambda>7  s    A r^   c                     d| z
  S Nr5   rr   r  s    rI   r  zB_012.<locals>.<lambda>7  s
    A r^   )r@   
atleast_1d	piecewiser  s    rI   rd   rd   1  sp    
aA<QUq1u-!VA.!VQ/1 )L++~~FH H Hr^   c                     t          j        |           } | dk     | dk    | dk     z  | dk    g}|dk    r	d d d g}n!|dk    r	d d d	 g}nt          d
|z            t          j        | ||          }|S )z0A quadratic B-spline function B(x | 0, 1, 2, 3).r%   r0   r   c                     | | z  dz  S r  rr   r  s    rI   r  zB_0123.<locals>.<lambda>?  s    1Q3r6 r^   c                     d| dz
  dz  z
  S )Ng      ?r   r0   rr   r  s    rI   r  zB_0123.<locals>.<lambda>@  s    41T6A+- r^   c                     d| z
  dz  dz  S )Nr6   r0   rr   r  s    rI   r  zB_0123.<locals>.<lambda>A  s    BqD19q= r^   c                     dS Nr'   rr   r  s    rI   r  zB_0123.<locals>.<lambda>C      2 r^   c                     dS )Ng       rr   r  s    rI   r  zB_0123.<locals>.<lambda>D  s    3 r^   c                     dS r  rr   r  s    rI   r  zB_0123.<locals>.<lambda>E  r  r^   znever be here: der=%s)r@   r  r>   r  )re   r   condsfuncspiecess        rI   r   r   :  s    
aAUQUq1u%q1u-E
axx!!--((* 
 036777\!UE**FMr^   #   r2   c                    t           j                            d           t          j        t           j                            | |z   dz                       }t           j                            |           }t	          j        |||          S )N{   r%   )r@   rE   r   r   r   construct_fast)rG   r+   r)   r*   s       rI   rQ   rQ   L  sg    INN3
	  1Q''((A
	A!!Q***r^   c              #     K   | j         | j        }}| j                                        }|d         |dd<   |d         |d<   t	          |||          V  | j                                        }|d         |d|dz   <   t	          |||          V  | j                                        }|d         || dz
  d<   t	          |||          V  dS )	zIncrease knot multiplicity.         r   r   Nr%   r.   )r*   r+   r)   copyr   )rH   r*   r+   t1s       rI   r  r  S  s      3qA	
B2Br"uIVBrF
"a

	
B!uBt!tH
"a

	
B2Br!tuuI
"a

r^   c                   P    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S )TestInteropc                 
   t          j        ddt           j        z  d          }t          j        |          }t	          ||          }|j        |j        |j        f| _        |||c| _	        | _
        | _        t          j        ddt           j        z  d          | _        t           j        |j        |j        |j        f         }t          j        ||f          | _        t!          |j        | j        |j                  | _        d S )Nr   r7   rs  r  )r@   rY   pirV  r
   r)   r*   r+   rR   r\   r   rH   xnewr   r   r  r   b2)rF   r\   r   rH   r  s        rI   setup_methodzTestInterop.setup_methodi  s    [BruHb))VBZZr2&&Cac?#%r1 $&K2be8R00	U13QS=!)RH%%!#tw,,r^   c                    | j         | j        | j        c}}t          t	          |           |          dd           t          t	          |j                   |          dd           t          fd|D              |          dd           t          t          d          5  t	          ||           d d d            n# 1 swxY w Y   t          t          d|j
        j                            dz   }|j
                            |          }|j        ||j        f}t          t	          ||           ||                              |          dd           d S )NrL   rM   c                 0    g | ]}t          |          S rr   )r   )rv   re   rH   s     rI   rw   z*TestInterop.test_splev.<locals>.<listcomp>  s!    333q!333r^   zCalling splev.. with BSplinematchr%   r   )r  rH   r  r   r   rR   r<   r>   tupler   r*   r  	transposer)   r+   )rF   r  r  r  r   rR   rH   s         @rI   
test_splevzTestInterop.test_splevv  s   ia 	dA$e%	9 	9 	9 	9dAE**$e%	9 	9 	9 	93333d333$e%	9 	9 	9 	9
 :-KLLL 	 	$OOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 5BDI&&''$.T^^BtRdC((4**2..U	H 	H 	H 	H 	H 	Hs   /CCCc                 F   | j         | j        }}t          ||          }t          j        ||          \  }}}t	          |d         |d           t	          |d         |d           t          |d         |           t          ||d          \  }}}}t	          |d         |d           t	          |d         |d           t          |d         |           t          ||          }	t	          ||	d           t          | }
t	          | |
|          d           d S )Nr   rL   rc   r%   r0   T)full_output)r\   r   r   r   r   r   r   r   )rF   re   r   rR   r)   r*   r+   tck_fr   r   rH   s              rI   test_splrepzTestInterop.test_splrep  s/   w1Qll,q!$$1aA....A....SVQ  1$777q!Qa!%0000a!%0000U1Xq!!! 1c]]2E**** SM11Q44e,,,,,,r^   c                    | j         | j        }}t          j        ||f         }t	          t
                    5  t          ||           d d d            n# 1 swxY w Y   t	          t
                    5  t          j        ||           d d d            n# 1 swxY w Y   t	          t          d          5  t          |d d         |d d                    d d d            n# 1 swxY w Y   t	          t          d          5  t          j        |d d         |d d                    d d d            d S # 1 swxY w Y   d S )Nm > k must holdr  r2   )	r\   r   r@   r   r<   r>   r   r   r=   )rF   re   r   y2s       rI   test_splrep_errorszTestInterop.test_splrep_errors  s*    w1U1a4[:&& 	 	1bMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	:&& 	  	 LB	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  9,=>>> 	! 	!1RaR5!BQB%   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!9,=>>> 	' 	'L2A2"1"&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'sG   AAA3BBB6!C##C'*C'&D77D;>D;c                    t          j        d                              d          }t          |          \  }}t	          j        |          \  }}t          ||d           t          t          ||          |d           t          t          ||          |d           t          |dd          \  \  }}}}}t          ||d           t          t          ||          |d           d S )Nr   r2   r   rL   rc   r   T)r  r  )r@   rD   rl   r   r   r   r   )	rF   re   rH   urR   u1b_fu_fr   s	            rI   test_splprepzTestInterop.test_splprep  s    IbMM!!&))qzz1-""R 	2E****aQU3333aqu5555 &a1$???
cAq!3U++++c3777777r^   c                    t          j        d                              d          }t          t          d          5  t          |           d d d            n# 1 swxY w Y   t          t          d          5  t          j        |           d d d            n# 1 swxY w Y   t          j        ddd          }t          t          d	          5  t          |g           d d d            n# 1 swxY w Y   t          t          d	          5  t          j        |g           d d d            n# 1 swxY w Y   g d
}t          t          d          5  t          |g           d d d            n# 1 swxY w Y   t          t          d          5  t          j        |g           d d d            n# 1 swxY w Y   g d}g d}t          t          d          5  t          |gd |g  d d d            d S # 1 swxY w Y   d S )N<   r   ztoo many values to unpackr  r   r  r2   )numr  ) >Ir   >Kr  zInvalid inputs)r%   r2   r0   r3   )r   g333333?g?r%   )	r@   rD   rl   r<   r>   r   r   rY   r=   )rF   re   r  s      rI   test_splprep_errorszTestInterop.test_splprep_errors  s   Ie$$Y//:-HIII 	 	AJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	:-HIII 	 	M!	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 K21%%%9,=>>> 	 	QCLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	9,=>>> 	 	M1#	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 EDD:-=>>> 	 	QCLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	:-=>>> 	 	M1#	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 LL:-=>>> 	% 	%qc4^$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s}   AA!A;BB #B C11C58C5D44D8;D8E66E:=E:F99F= F="G==HHc                 v   | j         | j        }}t          j        g d          t          j        z  }t          t          |          |dd           t          t          |j        |j        |j	        f          |dd           t          t          d          5  t          |d           d d d            n# 1 swxY w Y   |j                            dd	d
          }t          j        t          |j        ||j	        fd                    }t          |j        d           t          ||z
  d
d           d S )N)r   r   r9   rx  gHz>rM   zCalling sproot.. with BSpliner  ra   )mestr%   r0   r   )r2   r0   r3   r   rc   )rH   r  r@   r  r  r   r   r)   r*   r+   r<   r>   r  rk   r   r   )rF   rH   r  rootsc2rrrs         rI   test_sprootzTestInterop.test_sproot  sc   2---..ru4q		5t$????QS!#//TMMMM :-LMMM 	  	 2B	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  dnnQ1%%Zc240r:::;;RXy)))U
AE222222s   B88B<?B<c           	      x   | j         | j        }}t          t          dd|          t          dd|j                  d           t          t          dd|          |                    dd          d           t          t          d          5  t          dd|           d d d            n# 1 swxY w Y   |j        	                    ddd          }t          j        t          dd|j        ||j        f                    }t          |j        d           t          |t          dd|          d           d S )	Nr   r%   rb   rc   zCalling splint.. with BSpliner  r0   r2   r0   )rH   r  r   r   rR   r   r<   r>   r*   r  r@   rk   r)   r+   r   r   )rF   rH   r  r  integrs        rI   test_splintzTestInterop.test_splint  s{   2q!Qq!QU++%	9 	9 	9 	9q!QAq))	7 	7 	7 	7 :-LMMM 	 	1a	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dnnQ1%%F1a"$RT):;;<<V\6***q!Qe	5 	5 	5 	5 	5 	5s   B--B14B1c           	         | j         | j        fD ]K}t          |j                  t          |j                  z
  }|dk    rFt
          j        |j        t          j        |f|j        j        dd          z             f         |_        dD ]}t          |          }t          j	        |j        |j        |j        f          }t          |j        |d         d           t          |j        |d         d           t          |j        |d                    t          t          |t                                t          t          |t"                               ѐMd S Nr   r%   r`   rL   rc   r0   )rH   r  r  r)   r*   r@   r   zerosr   r   r   r+   r   r   r   
isinstancer   r  rF   rH   ctrG   bdtck_ds         rI   test_splderzTestInterop.test_splder	  s2   &$'" 	2 	2AQSCHH$BAvveAC2%!#)ABB-*?!@!@@A 2 2AYYac13_55eAhU;;;;eAhU;;;;RT58,,,
2w//000
5%0011112	2 	2r^   c           	         | j         | j        fD ]K}t          |j                  t          |j                  z
  }|dk    rFt
          j        |j        t          j        |f|j        j        dd          z             f         |_        dD ]}t          |          }t          j	        |j        |j        |j        f          }t          |j        |d         d           t          |j        |d         d           t          |j        |d                    t          t          |t                                t          t          |t"                               ѐMd S r  )rH   r  r  r)   r*   r@   r   r  r   r   r   r+   r   r   r   r  r   r  r  s         rI   test_splantiderzTestInterop.test_splantider  s3   &$'" 	2 	2AQSCHH$BAvveAC2%!#)ABB-*?!@!@@A 2 2]](!#qsAC99eAhU;;;;eAhU;;;;RT58,,,
2w//000
5%0011112	2 	2r^   c                    | j         | j        | j        }}}|j        j        dz  }d|j        |         |j        |dz            z   z  }t          ||          t          ||j        |j        |j        f          }}t          t          ||          t          ||          d           t          t          |t                               t          t          |t                               t          t          |j        j                            }|j                            |dd          dz             }	t          ||j        |	|j        f          }
t          ||          }t          t#          j        t          ||
                                        ddd           ||          d           t          t          |t                               t          t          |
t                               d S )Nr0   r   r%   rL   rc   r  r   )rH   r  r\   r)   r   r   r*   r+   r   r   r   r  r   r  r   r  r  r@   rk   )rF   rH   r  r\   r   tnbntck_nr  r   tck_n2bn2s               rI   r]  zTestInterop.test_insert)  s   FDGTWr2CHM!#a&13qs8#$2qMM6"qsACo#>#>Eb"b%((u	6 	6 	6 	6
2w''(((
5%(())) 5##$$T^^BqrrFTM**RT2rt,--Rnn 	
5V#4#455??1aHHBe	- 	- 	- 	-
3(()))
65))*****r^   N)r   r   r   r  r  r  r  r  r  r  r  r  r  r]  rr   r^   rI   r  r  e  s        - - -H H H6- - -0' ' ' 8 8 8% % %:3 3 3"5 5 5&2 2 2 2 2 2 + + + + +r^   r  c                      e Zd Z ej        ddej        z            Z ej        e          Zd Z	d Z
d Zej                            dg d          d             Zej                            dg d          d	             Zd
 Zd Zej                            dg d          d             Zd Zd Zd Zej                            dg d          d             Zd Zd Zd Zd Zd Zej                            d          d             Zd Zd Z d Z!d Z"d Z#d  Z$d! Z%d" Z&ej                            dg d#          d$             Z'd% Z(d& Z)d' Z*d( Z+d) Z,d*S )+
TestInterpr4   r5   c                     t          t                    5  t          | j        | j        d           d d d            d S # 1 swxY w Y   d S )Nr9   r   )r<   r=   r
   r\   r   )rF   s    rI   test_non_int_orderzTestInterp.test_non_int_orderK  s    9%% 	8 	8tw37777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s   ?AAc                    t          | j        | j        d          }t           || j                  | j        dd           t          | j        | j        dd          }t           || j                  | j        dd           d S )Nr   r   rb   rM   r.   r+   r  r
   r\   r   r   r   s     rI   test_order_0zTestInterp.test_order_0O      tw1555$'

DG%eDDDDtw12>>>$'

DG%eDDDDDDr^   c                    t          | j        | j        d          }t           || j                  | j        dd           t          | j        | j        dd          }t           || j                  | j        dd           d S )Nr%   r   rb   rM   r.   r  r  r   s     rI   test_linearzTestInterp.test_linearU  r   r^   r+   r   c                     g d}g d}t          t          d          5  t          |||           d d d            d S # 1 swxY w Y   d S )Nr   r%   r0   r2   r3   r   )r   r%   r0   r2   r3   r   r   r   zShapes of xr  r   r<   r>   r
   rF   r+   re   r   s       rI   test_incompatible_x_yz TestInterp.test_incompatible_x_y[  s    $$$:];;; 	* 	*q!q))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   ?AAc                    g d}g d}t          t          d          5  t          |||           d d d            n# 1 swxY w Y   g d}t          t          d          5  t          |||           d d d            n# 1 swxY w Y   g d}t          j        |                              d          }t          t          d          5  t          |||           d d d            d S # 1 swxY w Y   d S )	N)r   r%   r%   r0   r2   r3   r  zx to not have duplicatesr  r   )r   r0   r%   r2   r3   r   zExpect x to be a 1D strictly)r%   r.   )r<   r>   r
   r@   rk   rl   r  s       rI   test_broken_xzTestInterp.test_broken_xb  s   :-GHHH 	* 	*q!q))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* :-KLLL 	* 	*q!q))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* JqMM!!'**:-KLLL 	* 	*q!q))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s3   >AA#BB	BC..C25C2c                     dD ]C}t          | j        | j        |          }t           || j                  | j        dd           Dd S )Nr  rb   rM   r  )rF   r+   rH   s      rI   test_not_a_knotzTestInterp.test_not_a_knotr  sZ     	I 	IA"47DGQ77AAAdgJJe%HHHHH	I 	Ir^   c                 X   t          | j        | j        dd          }t           || j                  | j        dd           t	          dd          D ]@}t           || j        d         |           || j        d	         |          d
           At          | j        | j        ddd	          }t           || j                  | j        dd           t	          dd          D ]@}t           || j        d         |           || j        d	         |          d
           Ad S )Nr   r   r  rb   rM   r%   r   r   r.   dy=rc   r+   r  r  )r
   r\   r   r   r   )rF   rH   r   s      rI   test_periodiczTestInterp.test_periodicw  sB   tw1jIII$'

DG%eDDDD q! 	S 	SAAAdgajQ///472;11E1E1EERRRRRtw1jrRRR$'

DG%eDDDDq! 	S 	SAAAdgajQ///472;11E1E1EERRRRR	S 	Sr^   )r0   r2   r3   r   r   r   c                 f   d}t           j                            d           t          j        t           j                            |          dz            }t           j                            |          dz  }|d         |d<   t          |||d          }t           ||          |d	
           d S )Nr   r   rW   r   r.   r   r   r  rb   rc   )r@   rE   r   r   r  r
   r   )rF   r+   rG   re   r   rH   s         rI   test_periodic_randomzTestInterp.test_periodic_random  s     
	tGBI++A..344I##A&&,u!q!q*===!ae,,,,,,r^   c                    | j         j        d         }t          j                            d           t          j                            |          dz  t          j        z  }t          j        |          }d|d<   dt          j        z  |d<   t          j        d|f          }t          j	        |          |d<   t          j
        |          |d<   t          ||ddd	          }t          |          D ]-}t           |||                   |d d |f         d
           .t           ||d                    ||d                   d
           d S )Nr   r   r0   r4   r.   r%   r   r   r  rb   rc   )r\   r   r@   rE   r   r  r  r   r  rT  rV  r
   r   r   )rF   rG   re   r   rH   r   s         rI   test_periodic_axiszTestInterp.test_periodic_axis  s/   GM!
	tI##A&&*RU2GAJJ!BE	"HaVvayy!vayy!q!q*1EEEq 	: 	:AAAadGGQqqq!tW599999!A$1R5666666r^   c                    t           j                            d           d}d}t          j        t           j                            |                    }t           j                            |          }|d         dz
  |d<   t          t                    5  t          |||d           d d d            d S # 1 swxY w Y   d S )	Nr   r   r   r.   r%   r   r   r  )r@   rE   r   r   r  r<   r>   r
   )rF   r+   rG   re   r   s        rI   test_periodic_points_exceptionz)TestInterp.test_periodic_points_exception  s    
	tGBI++A..//I##A&&uqy!:&& 	> 	>q!q*====	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s   B77B;>B;c                    t           j                            d           d}d}t          j        t           j                            |                    }t           j                            |          }t          j        |d|z  z             }t          t                    5  t          ||||d           d d d            d S # 1 swxY w Y   d S )Nr   r2   r   r0   r   )	r@   rE   r   r   r  r  r<   r>   r
   )rF   r+   rG   re   r   r)   s         rI   test_periodic_knots_exceptionz(TestInterp.test_periodic_knots_exception  s    
	tGBI++A..//I##A&&HQQY:&& 	7 	7q!Q:666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   "CC
Cry  c                 |   t          | j        | j        |d          }t          | j        | j        d|          }t	          | j        |          }t          | || j                  d           t          d|          D ];}t	          | j        ||          }t          | || j        |	          d
           <d S )Nr   r  T)rr  r+   rb   rc   r%   r   r   r   )r
   r\   r   r   r   r   r   )rF   r+   rH   rR   r  r   s         rI   test_periodic_splevzTestInterp.test_periodic_splev  s     tw1jIIITWdg41555DGS!!QQtwZZe4444 q! 	? 	?A!,,,CC47q!1!1!1>>>>>	? 	?r^   c                 ,   t          | j        | j        dd          }t          | j        | j        d          }t	           || j                   || j                  d           d}t          j        t
          j                            |          dz            }t
          j                            |          dz  }|d	         |d
<   t          ||dd          }t          ||d          }t	           ||           ||          d           d S )Nr2   r   r  r;  rb   rc   rW   r   r.   r   )	r
   r\   r   r   r   r@   r   rE   r  )rF   rH   cubrG   re   r   s         rI   test_periodic_cubiczTestInterp.test_periodic_cubic  s   tw1jIII$'47J???$'

CCLLu==== GBI++A..344I##A&&,u!q!q*===!Q
333!cc!ff5111111r^   c                 :   dt          | j        | j        d          }t          | j                  t	          | j        | j                  t          j        fd          }t           || j                   || j                  d           d S )Nr2   r   r  c                 (    t          |           S r  rs   )re   r*   r+   r)   s    rI   r  z6TestInterp.test_periodic_full_matrix.<locals>.<lambda>  s    K1a$;$; r^   rb   rc   )r
   r\   r   r   r   r@   	vectorizer   )rF   rH   r  r*   r+   r)   s      @@@rI   test_periodic_full_matrixz$TestInterp.test_periodic_full_matrix  s     tw1jIIIDGQ''&twA>>\;;;;;;<<$'

BBtwKKe<<<<<<r^   c                    dg}t          | j        | j        dd |f          }t           || j                  | j        dd           t           || j        d         d          |d         d         dd           t          | j        | j        d|d f          }t           || j                  | j        dd           t           || j        d         d          |d         d         dd           d S )	Nr%   g       @r0   r  rb   rM   r.   r%   r   r  )rF   r   rH   s      rI   test_quadratic_derivzTestInterp.test_quadratic_deriv  s    i tw1tSkJJJ$'

DG%eDDDD$'"+q))3q6!95uMMMM tw1sDkJJJ$'

DG%eDDDD$'!*a((#a&)%eLLLLLLr^   c                    d}dgdg}}t          | j        | j        |||f          }t           || j                  | j        dd           t           || j        d         d           || j        d	         d          g|d         d         |d         d         gdd           d
gd
g}}t          | j        | j        |||f          }t           || j                  | j        dd           d S )Nr2   r%   r6   )r%   r7   r;  rb   rM   r   r%   r.   r0   r   r  )rF   r+   der_lder_rrH   s        rI   test_cubic_derivzTestInterp.test_cubic_deriv  s     y7)utwUENKKK$'

DG%eDDDD471:q))11TWR[!+<+<=q!eAhqk2U	L 	L 	L 	L x&utwUENKKK$'

DG%eDDDDDDr^   c                    d\  }}t          j        |                              t           j                  }t          j        |          }ddg}ddg}t          |||||f          }t           ||          |dd           t           ||d	         d
           ||d	         d          gd |D                        t           ||d         d
           ||d         d          gd |D                        d S )N)r   r   )r%   g      ()r0   r%   r"  )r0   r6   r  rb   rM   r   r%   r0   c                     g | ]\  }}|S rr   rr   rv   r   vals      rI   rw   z2TestInterp.test_quintic_derivs.<locals>.<listcomp>       444"c444r^   r.   c                     g | ]\  }}|S rr   rr   r,  s      rI   rw   z2TestInterp.test_quintic_derivs.<locals>.<listcomp>  r.  r^   )r@   rD   astypefloat64rT  r
   r   )rF   r+   rG   re   r   r'  r(  rH   s           rI   test_quintic_derivszTestInterp.test_quintic_derivs  s   1IaLL
++F1IIF#'"q!q5%.AAA!ae%88881Q4QQqtQZZ044e444	6 	6 	61R5!aa"qkk244e444	6 	6 	6 	6 	6r^   unstable)reasonc                     d}t          | j        |          }ddg}t          | j        | j        |||d f          }t	           || j                  | j        dd           d S )Nr2   r%  )r0   r7   r;  rb   rM   )r   r\   r
   r   r   )rF   r+   r)   r'  rH   s        rI   test_cubic_deriv_unstablez$TestInterp.test_cubic_deriv_unstable  sm     DGQ'"twAt}MMM$'

DG%eDDDDDDr^   c                    d}t           j        | j        d         f|dz   z  | j        dd          | j        d d         z   dz  | j        d         f|dz   z  f         }t          | j        | j        ||dgdgf          }t           || j                  | j        dd	           t           || j        d         d           || j        d         d          gd
d
gd           d S )Nr0   r   r%   r.   r5   r&  r;  rb   rM   r4   rc   )r@   r   r\   r
   r   r   )rF   r+   r)   rH   s       rI   test_knots_not_data_sitesz$TestInterp.test_knots_not_data_sites  s
    E471:-1%7122;"-372;.!A#&' ( twA)/6(';= = = 	$'

DG%eDDDD471:q))11TWR[!+<+<=Bx	 	 	 	 	 	r^   c                     d}ddg}ddg}t          |||dgdgf          }t          j        dd          }|dz  }t           ||          |dd           d S )	Nr2   r4   r'   r%   r4   r%  r;  rb   rM   )r
   r@   rY   r   )rF   r+   re   r   rH   r\   r   s          rI   test_minimum_points_and_derivz(TestInterp.test_minimum_points_and_deriv"  sy     HHq!Q'WI0FGGG[R  U"rE::::::r^   c                    g dx}}t          t                    5  t          ||dgd f           d d d            n# 1 swxY w Y   t          t                    5  t          ||d           d d d            n# 1 swxY w Y   t          t                    5  t          ||dg           d d d            n# 1 swxY w Y   t          t                    5  t          ||d           d d d            n# 1 swxY w Y   d\  }}t          t                    5  t          ||||f           d d d            d S # 1 swxY w Y   d S )N)r'   r0   r2   r3   r   r   r:  r;  *   )r:  r:  r  rF   re   r   lrs        rI   test_deriv_speczTestInterp.test_deriv_spec.  s    %$$$A:&& 	@ 	@q!wi->????	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ :&& 	6 	6q!W5555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 :&& 	8 	8q!gY7777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 :&& 	1 	1q!R0000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1
 "1:&& 	5 	5q!aV4444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5sW   =AAA;;A?A?B::B>B>C88C<?C<D>>EEc                 Z   t          j        d          }|dz  }dgdg}}t          t          d          5  t	          ||||f           d d d            n# 1 swxY w Y   dgdg}}t          t          d	          5  t	          ||||f           d d d            d S # 1 swxY w Y   d S )
Nr   r0   )r   r   r%   r   zBad boundary conditions at 0.r  r;  )ir   zBad boundary conditions at 6.)r@   rD   r<   r>   r
   r>  s        rI   test_deriv_order_too_largez%TestInterp.test_deriv_order_too_largeE  sG   IaLLqDx&1:-LMMM 	5 	5q!aV4444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 x'1:-LMMM 	5 	5q!aV4444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s#   AAA>B  B$'B$c                    d}| j         }| j        d| j        z  z   }dgdg}}t          |||||f          }t           ||          |dd           t           ||d         d	           ||d
         d	          g|d         d	         |d         d	         gdd           dD ]0}t          |||          }t           ||          |dd           1d S )Nr2   r&   )r%   y              @)r%   y      @       @r;  rb   rM   r   r%   r.   )r   r%   r   )r\   r   r
   r   )rF   r+   r\   r   r'  r(  rH   s          rI   test_complexzTestInterp.test_complexR  s   WWs47{" !zK=ur2q5%.AAA"rE::::2a5!aa2ll3q!eAhqk2U	L 	L 	L 	L  	? 	?A"2rQ///AAAbEE2E>>>>>	? 	?r^   c                     t          j        d                              t                    }t          j        d                              t                    }dD ]}t	          |||          } ||            d S )NrW   r   r   )r@   rD   r0  intr
   )rF   re   r   r+   rH   s        rI   test_int_xyzTestInterp.test_int_xyc  sv    IbMM  %%IbMM  %%  	 	A"1a1---AAaDDDD	 	r^   c                     t          j        ddd          }|d d d         }|d d d         }dD ]}t          |||           d S )Nr.   r%   r   r   r   r   )r@   rY   r
   )rF   r\   re   r   r+   s        rI   test_sliced_inputzTestInterp.test_sliced_inputm  sd    [Q$$sssGsssG 	* 	*Aq!q)))))	* 	*r^   c                     t          j        d                              t                    }|dz  }t           j        t           j        t           j         fD ]#}||d<   t          t          t          ||           $d S )NrW   r0   r.   )	r@   rD   r0  floatrB   rC   r<   r>   r
   rF   re   r   zs       rI   test_check_finitezTestInterp.test_check_finitew  ss    IbMM  ''qD&"&26'* 	@ 	@AAbE*&8!Q????	@ 	@r^   )r%   r0   r2   r   c                 z    t          t          d                    }d |D             }t          |||           d S )NrW   c                     g | ]}|d z  S )r0   rr   )rv   as     rI   rw   z.TestInterp.test_list_input.<locals>.<listcomp>  s    aQTr^   r   )r  r   r
   r  s       rI   test_list_inputzTestInterp.test_list_input  sC     rOO11a1%%%%%%r^   c                    t           j        t          j        | j                  t          j        | j                  f         }dddgfg}dddgfg}t          | j        |d||f          }t           || j                  |dd	           t           || j        d
         d          |d
         d         dd	           t           || j        d         d          |d
         d         dd	           d S )Nr%   r'   r5   r6   r7   r2   r  rb   rM   r   r.   )r@   r   rT  r\   rV  r
   r   )rF   r   r'  r(  rH   s        rI   test_multiple_rhszTestInterp.test_multiple_rhs  s    U26$'??BF47OO34b"Xb"Xtwa%HHH$'

BU????$'!*a((%(1+ENNNN$'"+q))58A;UOOOOOOr^   c                 R   t           j                            d           d\  }}t          j        t           j                            |                    }t           j                            |dddf          }t	          |||          }t          |j        j        |dddf           dt           j                            d          fg}dt           j                            d          fg}t	          |||||f	          }t          |j        j        ||z   dz
  dddf           d S )
Nr   r2   r   r   r   r   r   r%   r   r   r   r;  )r@   rE   r   r   r
   r   r*   r   )rF   r+   rG   re   r   rH   d_ld_rs           rI   test_shapeszTestInterp.test_shapes  s   
	t1GBI$$!$,,--I1aA,//q!Q''QSYAq!--- 29##I../029##I../0q!Qc
;;;QSYQAq! 455555r^   c                 J   t          j        | j                  }t          | j        |dd          }t          | j        |ddgdgf          }t	          |j        |j        d           t          | j        |dd          }t          | j        |ddgdgf          }t	          |j        |j        d           t          | j        |d	d
          }t          | j        |d	d dgf          }t	          |j        |j        d           t          | j        |dd          }t          | j        |dd           }t	          |j        |j        d           t          t                    5  t          | j        |dd           d d d            n# 1 swxY w Y   t           j        t          j        | j                  t          j	        | j                  f         }dddgfg}d	ddgfg}t          | j        |d||f          }t          | j        |dd          }t	          |j        |j        d           t           j
                            d           d\  }}t          j        t           j
        
                    |                    }t           j
        
                    |dddf          }	dt          j        d          fg}
dt          j        d          fg}t          ||	||
|f          }t          ||	|d          }t	          |j        |j        d           d S )Nr2   r$  r  r&  rL   rc   )r$  r#  rC  r0   )Nr#  r:  r%  typor%   r4   r"  r   rX  r   r   r   r   rY  r;  r#  )r@   rT  r\   r
   r   r*   r<   r>   r   rV  rE   r   r   r  )rF   r   r  r  r'  r(  r+   rG   re   r   rZ  r[  s               rI   test_string_aliaseszTestInterp.test_string_aliases  ss   VDG__  q)DDDqF8fX:NOOObd////  q(>@ @ @q*0F8(<> > >bd////  q:KLLLq4(:LMMMbd////  q,GGGq$???bd//// :&& 	A 	Atwa@@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A U26$'??BF47OO34b"Xb"Xq5%.IIIq(>@ @ @bd//// 		t1GBI$$!$,,--I1aA,// 28I&&'(28I&&'(1a#s<<<1a;;;bd//////s   )FFFc                    t           j                            d           d\  }}t          j        t           j                            |                    }t           j                            |          }t	          ||          }t          ||||          }t          ||||          }t          |j        |dd           d S )Nr   )r2   r   r   rb   rM   )	r@   rE   r   r   r   r
   make_interp_full_matrr   r*   )rF   r+   rG   re   r   r)   rH   ru  s           rI   test_full_matrixzTestInterp.test_full_matrix  s    
	t1GBI$$!$,,--I!$$1q!Q**"1aA..Re%888888r^   c                    t           j                            d           d}t          ddd          D ]0}t	          |dz
  dz            }t          j        t           j                            d|f                    }t          d|dz             D ]}|d| |dfxx         t          j        t           j                            d||z
  f                    z  cc<   ||dd| fxx         t          j        t           j                            d||z
  f                    z  cc<   t           j                            ||f          }||d|| df<   t           j                            ||f          }||| dd|f<   t          j        ||f          }t          t          || dz
  d                    D ]F\  }}	|	d	k     rt          j        ||	
          ||d|	f<   )t          j        ||	
          |||	df<   Gt           j                            |          }
t          t          ||||
|          t           j                            ||
          d           2dS )z
        Random elements in diagonal matrix with blocks in the
        left lower and right upper corners checking the
        implementation of Woodbury algorithm.
        r      r2       r0   r%   Nr.   r   )offsetrb   rc   )r@   rE   r   r   rH  diagflatr  r  diagonalr   r   linalgsolve)rF   rG   r+   rf  rS  r   urlldr   rH   s              rI   test_woodburyzTestInterp.test_woodbury  sq    		tq"a 	? 	?A!a%1%%FBI,,aV4455A1fqj)) H H#A2#qrr'


bk")*:*:Aq1u:*F*FGGG


!""crc'


bk")*:*:Aq1u:*F*FGGG



!!66"233B#%Agvgwxx !!66"233B#%Avghh !Q  A!%!R"@"@AA 8 81q55!{1Q777Aa!eHH!{1Q777AaeHH	  ##A/2r1a@@IOOAq11? ? ? ? ?#	? 	?r^   N)-r   r   r   r@   rY   r  r\   rT  r   r  r  r  rS   rL  rM  r  r	  r  r  r  r  r  r  r  r  r   r#  r)  r2  xfailr6  r8  r;  rA  rD  rF  rI  rK  rP  rT  rV  r\  r_  rb  rn  rr   r^   rI   r  r  D  s        
RBE	"	"B	B8 8 8E E EE E E [S,,,//* * 0/* [S,,,//* * 0/*I I I
S S S [S"4"4"455- - 65-7 7 7	> 	> 	>	7 	7 	7 [S,,,//
? 
? 0/
?2 2 2= = =M M ME E E6 6 6 [j))E E *)E  
; 
; 
;5 5 5.5 5 5? ? ?"  * * *@ @ @ [S,,,//& & 0/&P P P6 6 610 10 10f	9 	9 	9? ? ? ? ?r^   r  c                    | j         |j         k    sJ |j         | j         |z   dz   k    sJ | j         }t          j        ||ft          j                  }t	          |          D ]W}| |         }|||         k    r|}nt          j        ||          dz
  }t          j        ||||          }	|	||||z
  |dz   f<   Xt          j	        ||          }
|
S )zAssemble an spline order k with knots t to interpolate
    y(x) using full matrices.
    Not-a-knot BC only.

    This routine is here for testing only (even though it's functional).
    r%   rA  )
r   r@   r  r1  r   r  r   evaluate_all_bsplslrj  )re   r   r)   r+   rG   Ar   rP  leftbbr*   s              rI   ra  ra    s     6QV6QVaZ!^####	A
!Qrz***A1XX 	! 	!t1Q4<<DD?1d++a/D $Q466 !T!VDF]

AAHr^   c                    t          t          j        | ||f          \  } }}| j        }|j        |z
  dz
  }t          j        ||ft          j                  }t          |          D ]W}| |         }|||         k    r|}	nt          j        ||          dz
  }	t          j	        ||||	          }
|
|||	|z
  |	dz   f<   Xt          j
        |j        |          }t          j
        |j        |          }t          j        ||          }|||ffS )z,Make the least-square spline, full matrices.r%   rq  )mapr@   rk   r   r  r1  r   r  r   rr  dotTrs  rj  )re   r   r)   r+   r`  rG   rt  r   rP  ru  rv  r   Yr*   s                 rI   make_lsq_full_matrixr|    s   "*q!Qi((GAq!	A	
QA
!Qrz***A1XX 
! 
!t1Q4<<DD?1d++a/D $Q466 !T!VDF]
 	qsAA
qsAA
AAq!f9r^   c                   P   e Zd Zej                            d           d\  ZZ ej        ej                            e                    Z	ej                            e          Z
 e ej        e	d         e	d         d          e          Zd Zd Zd Zd	 Zd
 Zd Zd Zd ZdS )TestLSQr   )r   r2   r   r.   r   c                    | j         | j        | j        | j        f\  }}}}t	          ||||          \  }}t          ||||          }t          |j        |           t          |j        j	        |j
        |z
  dz
  f           |\  }}	t          j                            ||d          \  }
}}}t          |j        |
           d S )Nr%   r.   )rcond)re   r   r)   r+   r|  r   r   r*   r   r   r   r@   ri  lstsq)rF   re   r   r)   r+   c0AYrH   aar   r  r   s               rI   
test_lstsqzTestLSQ.test_lstsq=  s    VTVTVTV3
1a%aAq11BAq!Q''R   QSY!a 1222 Bioob!2o66Aq!R     r^   c                 \   | j         | j        | j        | j        f\  }}}}t	          j        |          }t          ||||          }t          |||||          }t          |j        |j        d           t          |j        |j        d           t          |j        |j                   d S )N)wrb   rc   )
re   r   r)   r+   r@   r   r   r   r*   r   )rF   re   r   r)   r+   r  rH   b_ws           rI   test_weightszTestLSQ.test_weightsL  s    VTVTVTV3
1aLOOAq!Q''aAqA...SU////SU////QS#%     r^   c                    | j         | j        | j        | j        f\  }}}}t          j                            |dddf          }t          ||||          }t          |j        j	        |j
        |z
  dz
  dddf           d S )Nr   r   r   r   r%   )re   r)   r+   rG   r@   rE   r   r   r*   r   r   )rF   re   r)   r+   rG   r   rH   s          rI   rV  zTestLSQ.test_multiple_rhsX  s    VTVTVTV3
1aI1aA,//Aq!Q''QSY!Q1 566666r^   c                 ,   | j         | j        | j        }}}| j        dz  }t	          ||||          }t	          ||j        ||          }t	          ||j        ||          }t           ||           ||          d ||          z  z   dd           d S )Ny      ?       @r&   rL   rM   )re   r)   r+   r   r   r   r   r   )rF   re   r)   r+   r2  rH   r   r   s           rI   rF  zTestLSQ.test_complex_  s    &$&$&a1Vx Ar1a((q"'1a00q"'1a00!dd1ggDDGG3%eLLLLLLr^   c                     t          j        d                              t                    }t          j        d                              t                    }t	          |d          }t          |||d           d S )NrW   r%   r   )r@   rD   r0  rH  r   r   rF   re   r   r)   s       rI   rI  zTestLSQ.test_int_xyj  sd    IbMM  %%IbMM  %%AOOO1a1%%%%%%r^   c                     t          j        ddd          }|d d d         }|d d d         }t          |d          }t          |||d           d S )Nr.   r%   r   r2   r   )r@   rY   r   r   )rF   r\   re   r   r)   s        rI   rK  zTestLSQ.test_sliced_inputq  s]    [Q$$sssGsssGAqMM1a1%%%%%%r^   c                    t          j        d                              t                    }|dz  }t	          |d          }t           j        t           j        t           j         fD ]$}||d<   t          t          t          |||           %d S )N   r0   r2   r.   )
r@   rD   r0  rM  r   rB   rC   r<   r>   r   )rF   re   r   r)   rO  s        rI   test_checkfinitezTestLSQ.test_checkfinitez  s    IbMM  ''qDAqMM&"&26'* 	@ 	@AAbE*oq!Q????	@ 	@r^   c                     | j         | j        | j        }}}|                    d           |                    d           |                    d           t	          |||           d S )NFrH  )re   r   r)   )re   r   r)   rJ  r   r  s       rI   rK  zTestLSQ.test_read_only  sl    &$&$&a1	


	


	


!qA&&&&&&r^   N)r   r   r   r@   rE   r   rG   r+   r   re   r   r   rY   r)   r  r  rV  rF  rI  rK  r  rK  rr   r^   rI   r~  r~  3  s        INN4DAq	  ##$$A
	AAaD!B%++Q//A! ! !
! 
! 
!7 7 7	M 	M 	M& & && & &@ @ @' ' ' ' 'r^   r~  c                     t           j                            t           j                            t           j                            t
                              d|           S )Ndata)ospathjoinabspathdirname__file__)basenames    rI   	data_filer    s=    7<<(A(ABB* * *r^   c                   &    e Zd Zd Zd Zd Zd ZdS )TestSmoothingSplinec                    t           j                            d           d}t          j        t           j                            |          dz  dz
            }|dz  t          j        d|z            z  |dz  z   t           j                            dd|          z   }t          t                    5  t          ||dd                     d d d            n# 1 swxY w Y   t          t                    5  t          |dd          |           d d d            n# 1 swxY w Y   t          t                    5  t          |
                    d|          |           d d d            n# 1 swxY w Y   t          t                    5  t          |d d d	         |           d d d            n# 1 swxY w Y   t          j        |          }|d         |d
<   t          t                    5  t          ||           d d d            n# 1 swxY w Y   t          j        d          }t          j        d          }d}t          j        t          |          5  t          ||           d d d            d S # 1 swxY w Y   d S )Nr   r   r3   r0   r2   r4   r   r%   r.   r   z)``x`` and ``y`` length must be at least 5r  )r@   rE   r   r   r  rT  normalr<   r>   r   rl   r  rD   rz  rS   r   )rF   rG   re   r   x_duplexception_messages         rI   test_invalid_inputz&TestSmoothingSpline.test_invalid_input  s   
	tGBI++A..2Q677qD26!a%== 1a4'")*:*:2sA*F*FF :&& 	, 	,!!QqrrU+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,:&& 	, 	,!!ABB%+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,:&& 	6 	6!!))Aq//1555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 :&& 	. 	.!!DDbD'1---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 1Iq	:&& 	- 	-!&!,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- IaLLGAJJG]:->??? 	( 	(!!Q'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(sl   2CCC6DD"D:%E++E/2E/
F00F47F4.HHHI99I= I=c                     t          j        t          d                    5 }|d         }|d         }|d         }ddd           n# 1 swxY w Y    t          ||          |          }t	          ||dd           dS )ae  
        Data is generated in the following way:
        >>> np.random.seed(1234)
        >>> n = 100
        >>> x = np.sort(np.random.random_sample(n) * 4 - 2)
        >>> y = np.sin(x) + np.random.normal(scale=.5, size=n)
        >>> np.savetxt('x.csv', x)
        >>> np.savetxt('y.csv', y)

        We obtain the result of performing the GCV smoothing splines
        package (by Woltring, gcvspl) on the sample data points
        using its version for Octave (https://github.com/srkuberski/gcvspl).
        In order to use this implementation, one should clone the repository
        and open the folder in Octave.
        In Octave, we load up ``x`` and ``y`` (generated from Python code
        above):

        >>> x = csvread('x.csv');
        >>> y = csvread('y.csv');

        Then, in order to access the implementation, we compile gcvspl files in
        Octave:

        >>> mex gcvsplmex.c gcvspl.c
        >>> mex spldermex.c gcvspl.c

        The first function computes the vector of unknowns from the dataset
        (x, y) while the second one evaluates the spline in certain points
        with known vector of coefficients.

        >>> c = gcvsplmex( x, y, 2 );
        >>> y0 = spldermex( x, c, 2, x, 0 );

        If we want to compare the results of the gcvspl code, we can save
        ``y0`` in csv file:

        >>> csvwrite('y0.csv', y0);

        z
gcvspl.npzre   r   y_GCVSPLNg-C6?rM   )r@   loadr  r   r   )rF   r  re   r   r  y_comprs         rI   test_compare_with_GCVSPLz,TestSmoothingSpline.test_compare_with_GCVSPL  s    R WY|,,-- 	(S	AS	AJ'H	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( .'1--a00
 	4@@@@@@s   AAAc                    t           j                            d           d}t          j        t           j                            |          dz  dz
            }|dz  t          j        d|z            z  |dz  z   t           j                            dd|          z   }t          ||d          }t          ||dd	
          }t          j	        |d         |d         d|z            }t           ||           ||          d           dS )z
        In case the regularization parameter is 0, the resulting spline
        is an interpolation spline with natural boundary conditions.
        r   r   r3   r0   r2   r4   r   )lamr$  r;  r   r.   rL   rc   N)r@   rE   r   r   r  rT  r  r   r
   rY   r   )rF   rG   re   r   
spline_GCVspline_interpgrids          rI   test_non_regularized_casez-TestSmoothingSpline.test_non_regularized_case  s    		tGBI++A..2Q677qD26!a%== 1a4'")*:*:2sA*F*FF*1aR888
*1aIFFF{1Q42A..

4((%d++"	$ 	$ 	$ 	$ 	$ 	$r^   c                    t           j                            d           d}t          j        t           j                            |          dz  dz
            }|dz  t          j        d|z            z  |dz  z   t           j                            dd|          z   }t          ||          }t           j                            t          d          d	          D ]}t          j
        |          }d
||<   t          |||          }t           |||                   ||         z
            }t           |||                   ||         z
            }	||	k     rt          d|dd|	d          d S )Nr   r   r3   r0   r2   r4   r   rW   r   g      >@zJSpline with weights should be closer to the points than the original one: z.4z < )r@   rE   r   r   r  rT  r  r   choicer   rz  absr>   )
rF   rG   re   r   r  indr  spl_worigweighteds
             rI   test_weighted_smoothing_splinez2TestSmoothingSpline.test_weighted_smoothing_spline  sw   
	tGBI++A..2Q677qD26!a%== 1a4'")*:*:2sA*F*FF#Aq)) 9##E#JJR#88 	3 	3C

AAcF)!Q22E ss1S6{{QsV+,,D553==1S6122Hh  "2CG!O"2 "2$,!1"2 "2 3 3 3 	3 	3r^   N)r   r   r   r  r  r  r  rr   r^   rI   r  r    sT        ( ( (>4A 4A 4Al$ $ $&3 3 3 3 3r^   r  c           	         	 | \  	|\  t                    z
  dz
  }|dz   k    sJ t                    z
  dz
  dz   k    sJ t          	fdt          |          D                       S )z-A naive 2D tensort product spline evaluation.r%   c           	   3      K   | ]F}t                    D ]4}||f         t          |          z  t          	|          z  V  5Gd S r  )r   r   )
rv   ixiyr*   r+   nytxtyre   r   s
      rI   r  zbspline2.<locals>.<genexpr>"  s{       8 8U2YY8 8') Ry1Q2r??*Qq!R__< 8 8 8 8 8 8 8r^   r  )
r   r)   r*   r+   nxr  r  r  re   r   s
     `` @@@@@rI   bspline2r    s    DAqFB	R1qB!A#IIII	R1qB!A#IIII 8 8 8 8 8 8 8 8 8 8r8 8 8 8 8 8r^   c                    |dk    r#||         | cxk    r||dz            k     rn ndndS |||z            ||         k    rd}n6| ||         z
  |||z            ||         z
  z  t          | |dz
  ||          z  }|||z   dz            ||dz            k    rd}nE|||z   dz            | z
  |||z   dz            ||dz            z
  z  t          | |dz
  |dz   |          z  }||z   S )Nr   r%   r'   r4   r   r  s         rI   r   r   &  s   Avvda((((!AaC&(((((ssc11v1~~!A$h1Q3!A$'!AqsAq//91Qx1QqS6!AhlQqs1uX!A#./!AqsAaC2C2CC7Nr^   c                      t                    z
  dz
  }|dz   k    rt                    |k    sJ t           fdt          |          D                       S )Nr%   c              3   N   K   | ]}|         t          |          z  V   d S r  r  r  s     rI   r  zbspline.<locals>.<genexpr>7  s8      66qta1amm#666666r^   r  r  s   ```` rI   r.  r.  4  sj    A
QA1HH3q66Q;;;;6666666U1XX666666r^   c                       e Zd ZddZd ZdS )
NdBSpline0r2   c                 ,   t          |          }|t          |j                  k    sJ 	 t          |           n# t          $ r	 |f|z  }Y nw xY wt          d |D                       | _        t          d |D                       | _        || _        dS )a  Tensor product spline object.

        c[i1, i2, ..., id] * B(x1, i1) * B(x2, i2) * ... * B(xd, id)

        Parameters
        ----------
        c : ndarray, shape (n1, n2, ..., nd, ...)
            b-spline coefficients
        t : tuple of 1D ndarrays
            knot vectors in directions 1, 2, ... d
            ``len(t[i]) == n[i] + k + 1``
        k : int or length-d tuple of integers
            spline degrees.
        c              3   >   K   | ]}t          j        |          V  d S r  )operatorindex)rv   kis     rI   r  z&NdBSpline0.__init__.<locals>.<genexpr>S  s,      66bx~b))666666r^   c              3   L   K   | ]}t          j        |t                     V   dS )rq  N)r@   rk   rM  )rv   tis     rI   r  z&NdBSpline0.__init__.<locals>.<genexpr>T  s1      ??rrz"E222??????r^   N)r  r   r=   r  r+   r)   r*   )rF   r)   r*   r+   r  s        rI   __init__zNdBSpline0.__init__;  s     1vvs17||####	FFFF 	 	 	T	AAA	 66A66666??Q?????s   ; AAc                    
 t           j                  }t                    |k    sJ dg|z  
t          |          D ]} j        |         |         }} j        |         }|||         k    r|
|<   nt	          j        ||          dz
  
|<   |
|                  |cxk    r|
|         dz            k    sn J 
|         |k    r
|         t          |          |z
  k     sJ t          
          
d}
 fdt          |          D             }t          j        | D ]D j	                 t	          j
         fdt          |          D                       z  }	||	z  }E|S )Nnoner%   r   c                 j    g | ]/}t          |         j        |         z
  |         d z             0S )r%   )r   r+   )rv   rm  r   rF   s     rI   rw   z'NdBSpline0.__call__.<locals>.<listcomp>o  s:    HHHqqtdfQi'122HHHr^   c           	      x    g | ]6}t          |         j        |         |         j        |                   7S rr   )r   r+   r)   )rv   rm  idxrF   re   s     rI   rw   z'NdBSpline0.__call__.<locals>.<listcomp>q  sQ     *@ *@ *@./ +,AaD$&)SVTVAY*O*O *@ *@ *@r^   )r  r)   r   r+   r@   r  r  	itertoolsproductr*   prod)rF   re   r  rm  tdxdr+   resultiterstermr   r  s   ``        @@rI   __call__zNdBSpline0.__call__W  s   46{{1vv~~~~ JtOt 
	4 
	4AVAY!Bq	A RU{{!r2..2!ad8r////R!QZ//////Q41991B!!3!3!3!3!3!HH
 HHHHHE$KKHHH$e, 	 	C6#; *@ *@ *@ *@ *@ *@38;;*@ *@ *@ "A "A ADdNFFr^   Nr2   )r   r   r   r  r  rr   r^   rI   r  r  :  s7           8    r^   r  c                   d   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ej                            dddg          ej                            dddg          d                         Zej                            dddg          d             Zd Zd Zd Zd Zd ZdS )TestNdBSplinec                    t           j                            d          }d\  }}d}t          j        |                    ||z   dz                       }|                    ||f          }t          |||          }t          |f||          }|                    d          }	t           ||	d d d f                    ||	          d            ||	d d d f                   j        |	j        d	         |j        d         fk    sJ d S )
Nrc  r:   r   r%   r   r  rb   rc   r   )	r@   rE   rg  r   rh  r   r   r   r   )
rF   ri  rG   r+   n_trr)   r*   rH   nbxis
             rI   test_1DzTestNdBSpline.test_1Dy  s   i##E**1GCKKQUQYK//00KKaYK''Aq!tQ""[[b[!!2aaag;"E	+ 	+ 	+ 	+r"QQQW+$!agaj(AAAAAAAr^   c                     t          j        d          }|dz  }t          ||d          }|dz  d|z  z   }t          ||d          }|j        |j        f}|j        d d d f         |j        d d d f         z  }||dfS )Nr   r2   r   r0   r@   rD   r
   r)   r*   rF   re   r   r  y_1rX  t2r  s           rI   make_2d_casezTestNdBSpline.make_2d_case  s    IaLLqD A+++dQqSj"1cQ///eUWU111d7^egdAAAg..2qyr^   c                 B   t          j        d          }|dz  }t          ||d          }t          j        d          dz   }|dz  d|z  z   }t          ||d          }|j        |j        f}|j        d d d f         |j        d d d f         z  }|||j        |j        fS )Nr   r2   r   r   r   r0   )r@   rD   r
   r)   r*   r+   r  s           rI   make_2d_mixedzTestNdBSpline.make_2d_mixed  s    IaLLqD A+++IaLL3dQqSj"1cQ///eUWU111d7^egdAAAg..2sueg%%r^   c                 ~  	
 g d}|                                  \  
	d |D             }t          	
fd|D             |d           t          
d          } ||          j        t	          |          fk    sJ t           ||          |d           t
          j                            d          }|                    d	
          dz  } ||          }|j        dk    sJ |	                    d          j
        \  }}t          |                                |dz  |dz  d|z  z   z  d           d S )Nr   r9   )r9   r%   )r   r   c                 6    g | ]\  }}|d z  |d z  d|z  z   z  S r  rr   rv   re   r   s      rI   rw   z3TestNdBSpline.test_2D_separable.<locals>.<listcomp>  1    777&1a!Q$!Q$1*%777r^   c                 4    g | ]}t          |          S rr   r  )rv   r   r  r+   r  s     rI   rw   z3TestNdBSpline.test_2D_separable.<locals>.<listcomp>  s'    >>>R"b"a00>>>r^   rb   rc   r2   r   rc  )r3   r2   r0   r   r   )r3   r2   )r.   r0   r0   )r  r   r   r   r  r@   rE   rg  rh  rl   rz  ravel)rF   r  targetbspl2ri  r  re   r   r  r+   r  s           @@@rI   test_2D_separablezTestNdBSpline.test_2D_separable  s   ///%%''	B77B777 	>>>>>>2>>>"	$ 	$ 	$ 	$
 "bA&&&uRyy3r77+----b		U	, 	, 	, 	, i##E**[[i[((1,r|v%%%% zz'""$111qs
+%	9 	9 	9 	9 	9 	9r^   c                    d}g d}d |D             }|                                  \  }}}t          j        ||||f          }d}t          ||d          }	 |	|          }
 t          |||          |          }|
j        dk    sJ t          |
|gdz  d	
            |	|          j        t          j        |          d d         |	j        j        |d          z   k    sJ t           |	|          t          j        |          d d d f         z
  dd
           |                    d          }t          ||d          } ||          }
|
j        dk    sJ t          |
||g||ggd	
            ||          j        t          j        |          d d         |j        j        |d          z   k    sJ t           ||          t          j        |          d d d d f         z
  dd
           d S )Nr0   r  c                 6    g | ]\  }}|d z  |d z  d|z  z   z  S r  rr   r  s      rI   rw   z5TestNdBSpline.test_2D_separable_2.<locals>.<listcomp>  r  r^   r  r2   r   )r3   r3   rb   rc   r.   r   gvIh%,=r   r   r0   r0   )r0   r0   )	r  r@   r   r   r   r   r*   rk   rl   )rF   r  r  r  r  r  r+   c2_4r   bspl2_4r  
val_singlec2_22bspl2_22s                 rI   test_2D_separable_2z!TestNdBSpline.test_2D_separable_2  se   ///77B777%%''	By"b"b)**B***)Yr2q))"--
|t#####q(u	6 	6 	6 	6
 wr{{ BHRLL"$5	8N$NNNNNbj&8&8D&AA	' 	' 	' 	' \**R!,,,"|v%%%%$j1$j139>	@ 	@ 	@ 	@ "SbS!HJ$4TUU$;;< < < <rz&'9'9!!!T4-'HH	' 	' 	' 	' 	' 	'r^   c           
         t           j                            d          }dt           j        ddddt          j        |                    d                    dz  ddddf	         t           j        ddddt          j        |                    d                    dz  ddddf	         |                    j        z
  dz
  j        z
  dz
  f          t          f	          }d
}t           ||          t          |f          d           t           j
        g dg df         }t           ||          fd|D             d           d S )Nrc  r2   r   r   r   r   r3   r%   r   )r'   r'   rb   rc   r%   r   r0   皙?g? @c                 8    g | ]}t          |f          S rr   r  )rv   r   r*   r+   r  r  s     rI   rw   z0TestNdBSpline.test_2D_random.<locals>.<listcomp>  s+    CCC""r2h155CCCr^   )r@   rE   rg  r   r   rh  r   r   r   r  r   )rF   ri  r  r  r*   r+   r  r  s       @@@@rI   test_2D_randomzTestNdBSpline.test_2D_random  s   i##E**U1aArws{{{':':;;a?Aq!KLU1aArws{{{':':;;a?Aq!KLKKbgaik2719Q;7K88R!q)))B b"Xq!445	B 	B 	B 	B U;;;"??# $BCCCCCCCCCC"	$ 	$ 	$ 	$ 	$ 	$r^   c                     |                                  \  }}}}g d}d |D             }t          ||||f          } ||          j        t          |          fk    sJ t	           ||          |d           d S )N)ffffff?rm  )r9   g333333@)rm  rx  c                 6    g | ]\  }}|d z  |dz  d|z  z   z  S r  rr   r  s      rI   rw   z/TestNdBSpline.test_2D_mixed.<locals>.<listcomp>   r  r^   r   rb   rc   )r  r   r   r  r   )rF   r  r  kxkyr  r  r  s           rI   test_2D_mixedzTestNdBSpline.test_2D_mixed  s    ++--BB11177B777"bRH---uRyy3r77+----b		U	, 	, 	, 	, 	, 	,r^   c                 D   |                                  \  }}}}g d}t          ||||f          } ||d          }t          |d |D             d            ||d          }t          |d	 |D             d            ||d
          }t          |d |D             d           t          t                    5   ||d          }d d d            n# 1 swxY w Y   t          t                    5   ||d          }d d d            d S # 1 swxY w Y   d S )Nr	  r   rC  r   c                 <    g | ]\  }}d |dz  z  |dz  d|z  z   z  S r  rr   r  s      rI   rw   z4TestNdBSpline.test_2D_derivative.<locals>.<listcomp>  s5    >>>41a1a41a4!A#:.>>>r^   rb   rc   r%   r%   c                 6    g | ]\  }}d |dz  z  d|z  dz   z  S r  rr   r  s      rI   rw   z4TestNdBSpline.test_2D_derivative.<locals>.<listcomp>  s1    ;;;11a41Q37+;;;r^   )r   r   c                 6    g | ]\  }}|d z  |dz  d|z  z   z  S r  rr   r  s      rI   rw   z4TestNdBSpline.test_2D_derivative.<locals>.<listcomp>  s1    <<<AAA!,<<<r^   )r.   r   )r.   r   r%   )r  r   r   r<   r>   )rF   r  r  r  r  r  r  r   s           rI   test_2D_derivativez TestNdBSpline.test_2D_derivative  s   ++--BB111"bRH---eB6""">>2>>>U	L 	L 	L 	L eB6""";;;;;%	I 	I 	I 	I eB6"""<<<<<5	J 	J 	J 	J :&& 	( 	(%w'''C	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( :&& 	+ 	+%z***C	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s$   CC"C:DDDc           
        	 t           j                            d          }d\  }}t           j        ddddt          j        |                    d                    dz  ddddf	         }t           j        ddddt          j        |                    d                    dz  ddddf	         }|                    |j        |z
  d	z
  |j        |z
  d	z
  f          }t           j        g d
g df         }t          ||f|||f          }t          ||f|||f          	t           ||          	fd|D             d           d S )Nrc  )r0   r2   r   r   r   r2   r   r3   r%   r  r  r   c                 &    g | ]} |          S rr   rr   rv   r
  bspl2_0s     rI   rw   z6TestNdBSpline.test_2D_mixed_random.<locals>.<listcomp>-  !    222222r^   rb   rc   )r@   rE   rg  r   r   rh  r   r   r   r  r   
rF   ri  r  r  r  r  r*   r  r  r  s
            @rI   test_2D_mixed_randomz"TestNdBSpline.test_2D_mixed_random  si   i##E**BU1aArws{{{':':;;a?Aq!KLU1aArws{{{':':;;a?Aq!KLKKbglQ."q0@AKBBU;;;"??# $ 2r(A"b222b"XqRH555b		2222r222	@ 	@ 	@ 	@ 	@ 	@r^   c                    t          j        d          }t          j        d          dz   }t          ||dz  d          }t          ||dz  d|z  z   d          }|j        d d d f         |j        d d d f         z  }t	          |j        |j        f||j        |j        f          }|dz  d d d f         |dz  d|z  z   d d d f         z  }t          ||f|          }d t          j	        ||          D             }	 ||	          }
t          j
        |
                                          rJ t          |
 ||	          d	           t          |
                    |j                  |d	           d S )
Nr   r   r   r2   r   r0   c                     g | ]	\  }}||f
S rr   rr   rv   rS  rH   s      rI   rw   z0TestNdBSpline.test_tx_neq_ty.<locals>.<listcomp><       999Aq!f999r^   rb   rc   )r@   rD   r
   r*   r   r)   r+   r   r  r  r   anyr   rl   r   )rF   re   r   spl_xspl_yr   rn   valuesrgir  bxis              rI   test_tx_neq_tyzTestNdBSpline.test_tx_neq_ty/  s}   IaLLIaLL3"1ada000"1adQqSjA666WQQQWaaa 00%'57+R%'571CDDQ$4AqD1Q3Jaaa#88%q!ff5599!21a!8!8999d2hh8C==$$&&&&&SSWW51111FL116FFFFFFr^   c                 t   t          j        d          }|dz  }t          ||d          }|dz  d|z  z   }t          ||d          }|dz  d|z  z   dz   }t          ||d          }|j        |j        |j        f}|j        d d d d f         |j        d d d d f         z  |j        d d d d f         z  }	||	dfS )Nr   r2   r   r0   r%   r  )
rF   re   r   r  r  rX  y_2spl_2r  r  s
             rI   make_3d_casezTestNdBSpline.make_3d_caseC  s    IaLLqD A+++dQqSj"1cQ///dQqSj1n"1cQ///eUWeg&eAAAtTM"gdAAAtm$%gdD!!!m$% 2qyr^   c                    t           j                            d          }|                    d          dz  \  }}}|dz  |dz  d|z  z   z  |dz  d|z  z   dz   z  }|                                 \  }}}t          ||d          }	d	 t          |||          D             }
 |	|
          }|j        d
k    sJ t          ||d           d S )Nrc  r2   r;   r   r   r2   r0   r%   r   c                     g | ]}|S rr   rr   rv   r   s     rI   rw   z3TestNdBSpline.test_3D_separable.<locals>.<listcomp>^      &&&Aa&&&r^   )r;   rb   rc   )	r@   rE   rg  rh  r*  r   zipr   r   )rF   ri  re   r   rO  r  t3c3r+   bspl3r  r  s               rI   test_3D_separablezTestNdBSpline.test_3D_separableV  s    i##E**++7+++a/1aAA!$1qs
Q7%%''	B"bA&&&&&Q1&&&r|u$$$$U333333r^   c                 F   |                                  \  }}}t          ||d          }t          j                            d          }|                    d          dz  \  }}}d t          |||          D             }	t           ||	d	          d|d
z  z  |dz  d
|z  z   z  |dz  d|z  z   dz   z  d           t           ||	d	          d|z  |dz  d
|z  z   z  |dz  d|z  z   dz   z  d           t           ||	d	          d|z  d|d
z  z  d
z   z  |dz  d|z  z   dz   z  d           t           ||	d	          d|z  d|d
z  z  d
z   z  dz  d           t           ||	d	          t          j        t          |	                    d           d S )Nr2   r   rc  r,  r   r   c                     g | ]}|S rr   rr   r.  s     rI   rw   z4TestNdBSpline.test_3D_derivative.<locals>.<listcomp>h  r/  r^   )r%   r   r   r   r0   r%   rb   rc   )r0   r   r   r   )r0   r%   r   )r0   r%   r2   )r0   r%   r3   )
r*  r   r@   rE   rg  rh  r0  r   r  r  )
rF   r1  r2  r+   r3  ri  re   r   rO  r  s
             rI   test_3D_derivativez TestNdBSpline.test_3D_derivativec  s(   %%''	B"bA&&&i##E**++7+++a/1a&&Q1&&&bY///!Q$!Q$1*-A!a@u	N 	N 	N 	N 	bY///!q!tacz*adQqSj1n=E	K 	K 	K 	K 	bY///!qAvz*adQqSj1n=E	K 	K 	K 	K 	bY///!qAvz*a0u	> 	> 	> 	> 	bY///R))	7 	7 	7 	7 	7 	7r^   c           
      z  	 t           j                            d          }d}t           j        ddddt          j        |                    d                    dz  ddddf	         }t           j        ddddt          j        |                    d                    dz  ddddf	         }t           j        ddddt          j        |                    d                    dz  ddddf	         }|                    |j        |z
  dz
  |j        |z
  dz
  |j        |z
  dz
  f          }t          |||f||	          }t          |||f||	          	d
}t           ||           	|          d           t           j
        g dg dg df         }t           ||          	fd|D             d           d S )Nrc  r2   r   r   r   r   r3   r%   r   )r'   r'   r%   rb   rc   r  r  g?r
  gffffff?c                 &    g | ]} |          S rr   rr   )rv   r
  spl_0s     rI   rw   z0TestNdBSpline.test_3D_random.<locals>.<listcomp>  s!    !9!9!9%%))!9!9!9r^   )r@   rE   rg  r   r   rh  r   r   r  r   r   )
rF   ri  r+   r  r  tzr*   r  r  r;  s
            @rI   test_3D_randomzTestNdBSpline.test_3D_randomy  s   i##E**U1aArws{{{':':;;a?Aq!KLU1aArws{{{':':;;a?Aq!KLU1aArws{{{':':;;a?Aq!KLKKbgaik2719Q;	!DKEERa1---BB<a000Br7777U;;;"??"??# $ 	B!9!9!9!9b!9!9!9FFFFFFr^   c           
         t           j                            d          }d}t           j        ddddt          j        |                    d                    dz  ddddf	         }t           j        ddddt          j        |                    d                    dz  ddddf	         }t           j        ddddt          j        |                    d                    dz  ddddf	         }|                    |j        |z
  dz
  |j        |z
  dz
  |j        |z
  dz
  f          |                    |j        |z
  dz
  |j        |z
  dz
  |j        |z
  dz
  f          d	z  z   }t          |||f||
          }t          |||f|j        |
          }t          |||f|j	        |
          }	t           j
        g dg dg df         }
t           ||
           ||
          d	 |	|
          z  z   d           d S )Nrc  r2   r   r   r   r   r3   r%   r&   r   r  r  r9  rb   rc   )r@   rE   rg  r   r   rh  r   r   r   r   r   r   )rF   ri  r+   r  r  r<  r*   r  spl_respl_imr  s              rI   test_3D_random_complexz$TestNdBSpline.test_3D_random_complex  s   i##E**U1aArws{{{':':;;a?Aq!KLU1aArws{{{':':;;a?Aq!KLU1aArws{{{':':;;a?Aq!KL[[rwqy{BGAIaK1E[FF[[rwqy{BGAIaK1E[FFrIJ Ra1---BB<1555BB<1555U;;;"??"??# $ 	Br

Rr

]2	@ 	@ 	@ 	@ 	@ 	@r^   
cls_extrapNTcall_extrapc                 j   |                                  \  }}}t          ||d|          }g dg dg d}	}}t          t          j        |||	f          \  }}}	d t          |||	          D             }
|dz  |dz  d|z  z   z  |	dz  d|	z  z   dz   z  } ||
|	          }t          ||d
           d S )Nr2   r+   rj   r.   r   r  r   rQ  r.   g            @c                     g | ]}|S rr   rr   r.  s     rI   rw   z?TestNdBSpline.test_extrapolate_3D_separable.<locals>.<listcomp>  r/  r^   r0   r%   ri   rb   rc   r*  r   rx  r@   rk   r0  r   )rF   rB  rC  r1  r2  r+   r3  re   r   rO  r  r  r  s                rI   test_extrapolate_3D_separablez+TestNdBSpline.test_extrapolate_3D_separable  s     %%''	B"bA:>>> ++a1bj1a),,1a&&Q1&&&AA!$1qs
Q7r{333U333333r^   r   )FT)TNc                 t   |                                  \  }}}|\  }}t          ||d|          }g dg dg d}
}	}t          t          j        ||	|
f          \  }}	}
d t          ||	|
          D             }|dz  |	dz  d|	z  z   z  |
dz  d|
z  z   dz   z  } |||	          }t          ||d
           d S )Nr2   rE  rF  rH  rI  c                     g | ]}|S rr   rr   r.  s     rI   rw   zATestNdBSpline.test_extrapolate_3D_separable_2.<locals>.<listcomp>  r/  r^   r0   r%   ri   rb   rc   rL  )rF   r   r1  r2  r+   rB  rC  r3  re   r   rO  r  r  r  s                 rI   test_extrapolate_3D_separable_2z-TestNdBSpline.test_extrapolate_3D_separable_2  s     %%''	B"(
K"bA:>>> ++a1bj1a),,1a&&Q1&&&AA!$1qs
Q7r{333U333333r^   c                    |                                  \  }}}t          ||d          }g dg dg d}}}t          t          j        |||f          \  }}}d t          |||          D             }|dz  |dz  d|z  z   z  |dz  d|z  z   dz   z  }	 ||d	
          }
t          j        |
d                   sJ t          j        |
d                   sJ t          |
dd         |	dd         d           d S )Nr2   r   )rG  r%   r   )r  r   rQ  )r.   r   rJ  c                     g | ]}|S rr   rr   r.  s     rI   rw   zETestNdBSpline.test_extrapolate_false_3D_separable.<locals>.<listcomp>  r/  r^   r0   r%   Fri   r   r.   rb   rc   )r*  r   rx  r@   rk   r0  r   r   )rF   r1  r2  r+   r3  re   r   rO  r  r  r  s              rI   #test_extrapolate_false_3D_separablez1TestNdBSpline.test_extrapolate_false_3D_separable  s$   %%''	B"bA&&& **nnnnnna1bj1a),,1a&&Q1&&&AA!$1qs
Q7ru---xq	"""""xr
#####qtfQrTl??????r^   c           	         |                                  \  }}}t          ||d          }t          j        ddt          j        dddt          j        g          }t          j        dddt          j        dd	d	g          }t          j        d
dddt          j        ddg          }d t          |||          D             }|dz  |dz  d|z  z   z  |dz  d|z  z   dz   z  }	t          j        |          t          j        |          z  t          j        |          z  }
t          j        |	|
<    ||          }t          j        ||
                                                   sJ t          ||	d           d S )Nr2   r   rG  r%   r0   r   r  rx  rQ  r.   rJ  c                     g | ]}|S rr   rr   r.  s     rI   rw   z/TestNdBSpline.test_x_nan_3D.<locals>.<listcomp>  r/  r^   rb   rc   )	r*  r   r@   rk   rB   r0  r   r   r   )rF   r1  r2  r+   r3  re   r   rO  r  r  r   r  s               rI   test_x_nan_3DzTestNdBSpline.test_x_nan_3D  s]   %%''	B"bA&&& JArvq!Q788JCBFAsC899JCArvsC899&&Q1&&&AA!$1qs
Q7x{{RXa[[(28A;;6vtrxt%%))+++++U333333r^   c                   	 t           j                            d          }d\  }}t          j        |                    ddd                    }t           j        |d         f|z  ||d         f|z  f         }t          j        |                    ddd                    }t           j        |d         f|z  ||d         f|z  f         }|d d d         j        j        rJ |d d d         j        j        rJ |                    |j        dz  |z
  d	z
  |j        dz  |z
  d	z
  f
          }|j	        }|j        j        rJ t           j
        g dg df         }t          |d d d         |d d d         f|||f          }t          |d d d         |d d d         f|||f          	t           ||          	fd|D             d           d S )Nrc  r2   r2   r   r3      rf  r.   r0   r%   r   r  r  r   c                 &    g | ]} |          S rr   rr   r  s     rI   rw   z7TestNdBSpline.test_non_c_contiguous.<locals>.<listcomp>  r  r^   rb   rc   )r@   rE   rg  r   rh  r   flagsc_contiguousr   rz  r   r   r  r   r  s
            @rI   test_non_c_contiguousz#TestNdBSpline.test_non_c_contiguous  s   i##E**BWS[[QQR[8899UBqE8B;RVIbL01WS[[QQR[8899UBqE8B;RVIbL01ccc7=----ccc7=----KKbgqj2o127A:?Q3FGKHHC7''''U;;;"??# $ 2ccc7BsssG,aB8<<<b1gr##A#w/r2h???b		2222r222	@ 	@ 	@ 	@ 	@ 	@r^   c                    |                                  \  }}}t          ||d          }t          d          D ]}d||         j        _        d|j        _        t          ||d          } |d           |d          k    sJ d S )Nr2   r   Fr`   )r*  r   r   r[  	writeable)rF   r1  r2  r+   r3  r   bspl3_s          rI   test_readonlyzTestNdBSpline.test_readonly  s    %%''	B"bA&&&q 	* 	*A$)BqEK!!"2rQ'''uY66)#4#4444444r^   c                    |                                  \  }}}t          j        g dg dg          }t          |||                              |||          }t          j        |||||g          }|j        d         |j        d         k    sJ t          |                                |                                d           t          t                    5  t          j        g d||gdz             d d d            n# 1 swxY w Y   t          t          d          5  t          j        d	d
gg||gdz             d d d            d S # 1 swxY w Y   d S )Nr`   )r3   r   r   r   gؗҜ<rc   r2   zData and knots*r  r%   r0   )
r*  r@   rk   r   r  r   r   todenser<   r>   )rF   r1  r2  r+   r  dmdm1s          rI   test_design_matrixz TestNdBSpline.test_design_matrix	  s   %%''	BZIII.//r2q!!//B::%b"q!Qi88x{bhqk))))

ckkmm%@@@@:&& 	: 	:#IIIrA3q5999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: :->??? 	9 	9#aVHb1#a%888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s$   DD
D$EEE)r   r   r   r  r  r  r  r   r  r  r  r  r&  r*  r4  r7  r=  rA  rS   rL  rM  rM  rP  rS  rV  r]  ra  rf  rr   r^   rI   r  r  w  s       B B B"  & & &9 9 96&' &' &'P$ $ $&, , ,+ + +2@ @ @ G G G(  &4 4 47 7 7,G G G&@ @ @& [\D$<88[]T4L994 4 :9 984 [X|'DEE4 4 FE4 @ @ @ 4 4 4$@ @ @2
5 
5 
59 9 9 9 9r^   r  c                   0   e Zd Zd Zd Zej                            dg d          d             Zd Z	d Z
d Zej                            d	ej        ej        g          d
             Zd Zej                            dg d          d             Zd ZdS )
TestMakeNDc                    t          j        d          }t          j        d          dz   }|d d d f         dz  |dz  d|z  z   d d d f         z  }d t          j        ||          D             }t	          ||f|d          }t           ||          |                                d	           t          ||dz  d          }t          ||dz  d|z  z   d          }|j        d d d f         |j        d d d f         z  }t          ||j        d
d           ddl	m
}	  |	||f|d          }
t           |
|           ||          d	           d S )Nr   r   r2   r0   c                     g | ]	\  }}||f
S rr   rr   r  s      rI   rw   z7TestMakeND.test_2D_separable_simple.<locals>.<listcomp>	  r  r^   r%   r   rL   rc   r  r   rM   )r   linearmethodrb   )r@   rD   r  r  r   r   r  r
   r*   scipy.interpolater   )rF   re   r   r#  r  rn   r!  r"  r   RGIr$  s              rI   test_2D_separable_simplez#TestMakeND.test_2D_separable_simple	  s   IaLLIaLL3111d7Q!Q$1*dAAAg!6699!21a!8!8999Aq66Q///R&,,..u==== #1ada000"1adQqSjA666WQQQWaaa 00DFQ7777 	EDDDDDc1a&&222Bb666666r^   c                    t          j        d          }t          j        d          }d t          j        ||          D             }|d d d f         dz  |dz  d|z  z   d d d f         z  }t          j        ||||f          }t          ||f|dt          j                  } ||          }t          j        ||||f          }|j        dk    sJ t          |
                    ddd          |d	           |
                    d
          }	t          ||f|	dt          j                  } ||          }|j        dk    sJ t          |
                    dddd          |
                    d
          d	           d S )Nr   c                     g | ]	\  }}||f
S rr   rr   r  s      rI   rw   z>TestMakeND.test_2D_separable_trailing_dims.<locals>.<listcomp>0	  r  r^   r2   r0   r+   solver)$   r3   r3   rb   rc   r  )ru  r0   r0   )r@   rD   r  r  r   r   sslspsolver   r   rl   )
rF   re   r   r  r#  values4rn   r  r  values22s
             rI   test_2D_separable_trailing_dimsz*TestMakeND.test_2D_separable_trailing_dims,	  s   IaLLIaLL99!21a!8!8999 111d7Q!Q$1*dAAAg!66)VVVV<==Aq67aDDDbFFFF;<<|w&&&&q!Q//U	, 	, 	, 	, ??<00Aq68qEEEb|z))))q!Q22|445	B 	B 	B 	B 	B 	Br^   r+   )rX  r  )r2   r%   )r%   r2   r  c                 |   t          j        d          }t          j        d          dz   }d t          j        ||          D             }|dz  d d d f         |dz  d|z  z   d d d f         z  }t	          ||f||t
          j                  }t           ||          |                                d	           d S )
Nr   r   r   c                     g | ]	\  }}||f
S rr   rr   r  s      rI   rw   z,TestMakeND.test_2D_mixed.<locals>.<listcomp>K	  r  r^   r2   r0   rs  rL   rc   )	r@   rD   r  r  r   rv  rw  r   r  )rF   r+   re   r   r  r#  rn   s          rI   r  zTestMakeND.test_2D_mixedF	  s     IaLLIaLL399!21a!8!8999Q$4AqD1Q3Jaaa#88Aq66Qs{CCCR&,,..u======r^   c           	          t          j        g d          }t          j        g d          }t          j        g dg dg dg dg dg dg          }|||fS )N)r   r5   r6   r7   rn  ro  )r%   r0   r%   r0   r%   r%   )r%   r0   r2   r0   r%   r%   )r%   r0   r0   r0   r%   r%   )r@   r  rN  s       rI   _get_sample_2d_datazTestMakeND._get_sample_2d_dataQ	  s    H...//H...//H""""""""""""""""""	
 	
 !Qwr^   c                    |                                  \  }}}t          ||f|d          }t          ||f|d          }t          j        g dg dg          j        }t           ||           ||          d           d S )	Nr%   r   rk  rl  r%   gffffff@g333333@r   ffffff
@333333?r2   r%   r  r  r7   r8  r'   r2   rb   rc   r~  r   r   r@   r  rz  r   rF   re   r   rO  rn   r$  r  s          rI   test_2D_vs_RGI_linearz TestMakeND.test_2D_vs_RGI_lineara	  s    **,,1aAq61***%q!faAAAX6666668 9 99: 	 	R##b''666666r^   c                 "   |                                  \  }}}t          ||f|dt          j                  }t	          ||f|d          }t          j        g dg dg          j        }t           ||           ||          d           d S )	Nr2   rs  cubic_legacyrl  r  r  rb   rc   	r~  r   rv  rw  r   r@   r  rz  r   r  s          rI   test_2D_vs_RGI_cubiczTestMakeND.test_2D_vs_RGI_cubick	  s    **,,1aAq61#+>>>%q!faGGGX6666668 9 99: 	 	R##b''666666r^   rt  c                    |                                  \  }}}t          ||f|d|d          }t          ||f|d          }t          j        g dg dg          j        }t           ||           ||          d	           d S )
Nr2   gư>)r+   rt  rO   r  rl  r  r  rb   rc   r  )rF   rt  re   r   rO  rn   r$  r  s           rI   test_2D_vs_RGI_cubic_iterativez)TestMakeND.test_2D_vs_RGI_cubic_iterativeu	  s     **,,1aAq61&tDDD%q!faGGGX6666668 9 99: 	 	R##b''666666r^   c                 "   |                                  \  }}}t          ||f|dt          j                  }t	          ||f|d          }t          j        g dg dg          j        }t           ||           ||          d           d S )	Nr   rs  quintic_legacyrl  r  r  rb   rc   r  r  s          rI   test_2D_vs_RGI_quinticz!TestMakeND.test_2D_vs_RGI_quintic	  s    **,,1aAq61#+>>>%q!fa8HIIIX6666668 9 99: 	 	R##b''666666r^   zk, meth))r%   rk  )r2   r  )r   r  c                 V   t           j                            d          }t          j        |                    d                    }t          j        |                    d                    }t          j        |                    d                    }|                    d          }t          |||f||t          j                  }t          |||f||          }	t           j                            d	d
d          }
t           ||
           |	|
          d           d S )Ni@ r   r   r   r   r  rs  rl  gffffff?r  r:   rf  rb   rc   )
r@   rE   rg  cumsumrh  r   rv  rw  r   r   )rF   r+   methrndmre   r   rO  r#  rn   r$  r  s              rI   test_3D_random_vs_RGIz TestMakeND.test_3D_random_vs_RGI	  s    y$$V,,Idlll**++Idlll**++Idlll**++9--Aq!9f#+FFF%q!QiEEEY3Sw??R##b''666666r^   c                 h   |                                  \  }}}ddi}t          t          d          5  t          ||f|fddi| d d d            n# 1 swxY w Y   t          t          d          5  t          ||ft	          j        ||f          fddi| d d d            d S # 1 swxY w Y   d S )Nmaxiterr%   rt  r  r+   r2   )r~  r<   r>   r   r@   r   )rF   re   r   rO  solver_argss        rI   test_solver_err_not_convergedz(TestMakeND.test_solver_err_not_converged	  sg   **,,1a !n:X666 	7 	7A66Q6+666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 :X666 	G 	GA	1a& 1 1FFQF+FFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs#   AAA3'B''B+.B+N)r   r   r   rp  rz  rS   rL  rM  r  r~  r  r  rv  gmresgcrotmkr  r  r  r  rr   r^   rI   rh  rh  	  s/       7 7 7(B B B4 [S"J"J"JKK> > LK>   7 7 77 7 7 [X	3;'?@@7 7 A@77 7 7 [NNN 7 7 7G G G G Gr^   rh  c                   J    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S )
TestFpchecc                    d}t          j        d                              dd          }t          j        d          }t          j        t
          d          5  t          j        |||           d d d            n# 1 swxY w Y   t          j        t
          d          5  t          j        |||           d d d            d S # 1 swxY w Y   d S )Nr%   r  r0   r   z1D sequencer  )r@   rD   rl   rS   r   r>   _bfpcheckrF   r+   r)   re   s       rI   test_1D_x_tzTestFpchec.test_1D_x_t	  s>   IbMM!!!Q''IbMM]:];;; 	  	 Jq!Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  ]:];;; 	  	 Jq!Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s$   A==BB#CCCc                    d}d|dz   z  dz
  }|dz   }t          j        |          }t          j        |          }t          j        |||          dk    sJ t	          j        t          d          5  t          j        |||           d d d            n# 1 swxY w Y   d|dz   z  dz   }||z
  dz
  }t          j        |          }t          j        |          }t          j        |||          dk    sJ t	          j        t          d          5  t          j        |||           d d d            d S # 1 swxY w Y   d S )Nr2   r0   r%   r;   rW   z	Need k+1*r  )	r@   rD   dfitpackfpchecrS   r   r>   r  r  )rF   r+   rG   r`  r)   re   s         rI   test_condition_1zTestFpchec.test_condition_1	  s   AY]FIaLLIaLLq!Q''2----]:[999 	  	 Jq!Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  qsGaKEAIIaLLIaLLq!Q''2----]:[999 	  	 Jq!Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s$   2BBBD66D:=D:c                    d}dg|dz   z  dgz   dg|dz   z  z   }g d}t          j        |||          dk    sJ t          j        |||          J |                                }|d         |d<   t          j        |||          dk    sJ t          j        t          d	
          5  t          j        |||           d d d            n# 1 swxY w Y   |                                }|d         |d<   t          j        |||          dk    sJ t          j        t          d
          5  t          j        |||           d d d            d S # 1 swxY w Y   d S )Nr2   r   r%   r0   r   )r%   r0   r2   r3   rm  r.   r   zLast k knots*r  zFirst k knots*r  r  r  r  r  rS   r   r>   )rF   r+   r)   re   tts        rI   test_condition_2zTestFpchec.test_condition_2	  s    C1IOqc1Q3i'q!Q''1,,,,z!Q""***VVXXA2q"a((B....]:_=== 	! 	!Jq"a   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! VVXX21q"a((B....]:-=>>> 	! 	!Jq"a   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s$   (CCC,EEEc                    d}dg|dz   z  ddgz   dg|dz   z  z   }g d}t          j        |||          dk    sJ t          j        |||          J dg|dz   z  ddgz   dg|dz   z  z   }t          j        |||          dk    sJ t	          j        t          d	          5  t          j        |||           d d d            d S # 1 swxY w Y   d S )
Nr2   r   r%   r0   r   r%   r0   r2   rx  r3   rm     zInternal knots*r  )r  r  r  r  rS   r   r>   r  s       rI   test_condition_3zTestFpchec.test_condition_3	  sF   C1IA!ac*"""q!Q''1,,,,z!Q""***C1IA!ac*q!Q''2----]:->??? 	  	 Jq!Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   "CC
C
c                 d   d}dg|dz   z  dg|dz   z  z   }g d}t          j        |||          dk    sJ t          j        |||          J |                                }|d         |d<   t          j        |||          dk    sJ t          j        |||          J |                                }|d         dz
  |d<   t          j        |||          dk    sJ t          j        t          d          5  t          j        |||           d d d            n# 1 swxY w Y   |                                }|d	         dz   |d	<   t          j        |||          dk    sJ t          j        t          d          5  t          j        |||           d d d            d S # 1 swxY w Y   d S )
Nr2   r   r%   r   r  r  zOut of bounds*r  r.   r  )rF   r+   r)   re   r\   s        rI   test_condition_4zTestFpchec.test_condition_4	  sG    C1IQqS	!"""q!Q''1,,,,z!Q""***VVXX!1r1a((A----z!Q""***VVXX!q1r1a((B....]:-=>>> 	! 	!Jr1a   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! VVXX22r1a((B....]:-=>>> 	! 	!Jr1a   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s$   :DD!$D!F%%F),F)c                    d}g d}g d}t          j        |||          dk    sJ t          j        t          d          5  t          j        |||           d d d            n# 1 swxY w Y   g d}t          j        |||          dk    sJ t          j        t          d          5  t          j        |||           d d d            d S # 1 swxY w Y   d S )Nr%   )r   r   r%   r0   r0   )r  r  r  ra   Schoenberg-Whitney*r  )r   r   r   r  r  rS   r   r>   r  r  r  s       rI   test_condition_5_x1xmz TestFpchec.test_condition_5_x1xm
  so   OOOOq!Q''2----]:-BCCC 	  	 Jq!Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  OOq!Q''2----]:-BCCC 	  	 Jq!Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s$   A%%A),A)+CCCc                     d}g d}ddg}t          j        |||          dk    sJ t          j        |||          J d S )Nr%   )r   r   r%   r%   r   g333333?r   )r  r  r  r  r  s       rI   test_condition_5_k1zTestFpchec.test_condition_5_k1
  sX    LL#Jq!Q''1,,,,z!Q""*****r^   c                    d}dg|dz   z  dgz   dg|dz   z  z   }dgdz  }t          j        |||          dk    sJ t          j        t          d          5  t          j        |||           d d d            n# 1 swxY w Y   dg|dz   z  dgz   dg|dz   z  z   }dgdz  }t          j        |||          dk    sJ t          j        t          d          5  t          j        |||           d d d            d S # 1 swxY w Y   d S )	Nr2   r   r%   r0   r   ra   r  r  r  r  s       rI   test_condition_5_1zTestFpchec.test_condition_5_1#
  s   C1IOqc1Q3i'CEq!Q''2----]:-BCCC 	  	 Jq!Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  C1IOqc1Q3i'CEq!Q''2----]:-BCCC 	  	 Jq!Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s$   A::A>A>C==DDc                    d}dg|dz   z  ddgz   dg|dz   z  z   }dgdz  dgz   }t          j        |||          dk    sJ t          j        t          d	
          5  t          j        |||           d d d            n# 1 swxY w Y   dgdz  ddgz   }t          j        |||          dk    sJ t          j        |||          J d S )Nr2   r   r%   r0   r   r  r3   ra   r  r  r  r  s       rI   test_condition_5_2zTestFpchec.test_condition_5_22
  s2   C1IA!ac*E!GqcMq!Q''2----]:-BCCC 	  	 Jq!Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  E!Gq!fq!Q''1,,,,z!Q""*****s   A??BBc                     d}g d}g d}t          j        |||          dk    sJ t          j        t          d          5  t          j        |||           d d d            d S # 1 swxY w Y   d S )Nr%   )	r   r   r0   r2   r3   r   r   r   r   )r%   r%   r%   @r  r  rQ  ra   r  r  r  r  s       rI   test_condition_5_3zTestFpchec.test_condition_5_3A
  s    ''')))q!Q''2----]:-BCCC 	  	 Jq!Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   A&&A*-A*N)r   r   r   r  r  r  r  r  r  r  r  r  r  rr   r^   rI   r  r  	  s        	  	  	      *! ! !,     ! ! !>     + + +     + + +         r^   r  r  )r  r2   r  )Pr  r  r  numpyr@   numpy.testingr   r   r   rS   r   r<   rn  r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   scipy.linalgri  rs  scipy.sparse.linalgsparserv  scipy.interpolate._bsplinesr   r   r   r   r   scipy.interpolate._fitpack_implinterpolate_fitpack_implr   scipy._lib._utilr   scipy.interpolate._ndbspliner   r    r  r!   r  r#   rO  r  r  rt   ry   r   rd   r   rQ   r  r  r  ra  r|  r~  r  r  r  r   r.  r  r  rh  r  rr   r^   rI   <module>r     s   				          @ @ @ @ @ @ @ @ @ @ * * * * * *                                        
       ! ! ! ! ! ! ! ! !E E E E E E E E E E E E E E 0 / / / / / / / / & & & & & & 5 4 4 4 4 4 3 3 3 3 3 3 - - - - - -K	" K	" K	" K	" K	" K	" K	" K	"\v$ v$ v$ v$ v$ v$ v$ v$r6 6 6.  &
G 
G 
G> > >  H H H   $+ + + +  $\+ \+ \+ \+ \+ \+ \+ \+~t? t? t? t? t? t? t? t?n  8   8W' W' W' W' W' W' W' W't* * *
C3 C3 C3 C3 C3 C3 C3 C3P	8 	8 	8  7 7 7: : : : : : : :z]9 ]9 ]9 ]9 ]9 ]9 ]9 ]9@NG NG NG NG NG NG NG NGba  a  a  a  a  a  a  a  a  a r^   