
    (ph-                    b   S SK r S SKrS SKrS SKrS SKrS SKrS SKJr  S SK	J
r
Jr  S SKJr  S SKrS SKJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJ r   S SK!J"r#  S SK$J%s  J"r&  S SK'J(r(J)r)J*r*J+r+J,r,  S SKJ-r-J.r.J/r/  S SK0J1s  J2r3  S SK4J5r5  S S	K6J7r7  S S
K8J9r9  S SKJ:r;  S SKJ<r=  S SKJ>r>   " S S5      r? " S S5      r@S rAS rBS rCS rDS rES rFSFS jrGSGS jrHS rI " S S5      rJ " S S5      rKS rLSHS  jrM\R                  R                  S!S"S#/5      rP " S$ S%5      rQ " S& S'5      rRSIS( jrSS) rTS* rU " S+ S,5      rVS- rW " S. S/5      rXS0 rYS1 rZS2 r[ " S3 S45      r\ " S5 S65      r] " S7 S85      r^ " S9 S:5      r_S; r`S< ra " S= S>5      rbS? rc " S@ SA5      rd " SB SC5      re " SD SE5      rfg)J    N)suppress_warnings)xp_assert_equalxp_assert_close)raises)BSplineBPolyPPolymake_interp_splinemake_lsq_spline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)generate_knotsmake_splrepmake_splprep)	AxisError)_run_concurrent_barrier)make_ndbspl)	_dfitpack)	_bsplines)_dierckxc                      \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r \!RD                  RG                  S\$" S S!5      5      S" 5       r%S# r&\!RD                  RN                  S$ 5       r(\!RD                  RG                  S%/ S&Q5      \!RD                  RG                  S'\$" S(5      5      S) 5       5       r)S* r*S+ r+S, r,\!RD                  RG                  S-/ S.Q5      S/ 5       r-\!RD                  RG                  S-/ S.Q5      S0 5       r.S1 r/S2 r0\!RD                  RN                  S3 5       r1S4 r2S5r3g6)7TestBSpline'   c                 j   [        [        [        4[        40 [	        SS/S/SS9D6  [
        R                  " SS9   [        [        [        40 [	        S[
        R                  /S/SS9D6  S S S 5        [        [        [        40 [	        S[
        R                  /S/SS9D6  [        [        [        40 [	        SS/S/SS9D6  [        [        [        40 [	        S/S//S/SS9D6  [        [        [        40 [	        / S	QS/SS9D6  [        [        [        40 [	        / S
QSS/SS9D6  [        [        [        40 [	        / SQ/ SQSS9D6  [        [        [        40 [	        / SQ/ SQSS9D6  [        [        [        40 [	        / SQ/ SQSS9D6  Su  p[
        R                  " X-   S-   [
        R                  S9n[
        R                  R                  U5      n[        X4U5      n[        X5R                  5        [        XER                  5        X%R                  :X  d   eg ! , (       d  f       GN= f)N                 ?      ?r   tckignore)invalidr   r*      r   r*   r5         r5   )        r9   r,          @      @      @)r,   r,   r,   cubic      @)r9   r   r*   r*   r5   r7   )r,   r*   r*      r7   dtype)assert_raises	TypeError
ValueErrorr   dictnperrstatenaninfarangefloat64randomr   r.   r/   r0   )selfnr0   r.   r/   bs         X/var/www/html/venv/lib/python3.13/site-packages/scipy/interpolate/tests/test_bsplines.py	test_ctorTestBSpline.test_ctor)   s   y*-w 	1!SbTQ/	1[[**gRBFFtq1QR +j'NTQKB41-MNj'JTQGtq-IJj'MTaS1#J2$!-LM 	j'KTI!-JKj' 	<RH:	< 	i 	O1\WM	Oi 	K1\SI	K 	j' 	B,
a@	B IIac!e2::.IIQA!3333CCxx; +*s   0H##
H2c                 4   [        5       nUR                  n[        UR                  US   SSS9  [        UR                  US   SSS9  UR
                  US   :X  d   e[        R                  " [        5         SUl        S S S 5        g ! , (       d  f       g = f)Nr   V瞯<atolrtolr*   r5   foo)	_make_random_splinetckr   r.   r/   r0   pytestr   AttributeError)rN   rP   r[   s      rQ   test_tckTestBSpline.test_tckL   st    !eeSV%e<SV%e<ssc!f}} ]]>*AE +**s   8B		
Bc                    [         R                  " SSS5      n[        SS/S/SS9n[        U" U5      [         R                  " U5      S-  5        [        / SQSS/SS9n[        U" U5      [         R
                  " US	:  SS
5      5        g )Nr   r*   
   r;   r-   )r   ffffff?r*   r7   r8   rb   r<   )rG   linspacer   r   	ones_likewhererN   xxrP   s      rQ   test_degree_0TestBSpline.test_degree_0X   su    [[Ar"q!f*"r||B/#56lq!f2"rxxT	3<=    c                 ,   / SQn/ SQnSn[        XU5      n[        R                  " SSS5      n[        US   [	        U5      -  US   [	        US-
  5      -  -   US   [	        US-
  5      -  -   U" U5      SS	9  [        [        XQX#45      U" U5      SS	9  g )
Nr6   r*   r5   r7   r*   r7   2   r   r5   +=rW   )r   rG   rc   r   B_012r   )rN   r.   r/   r0   rP   xs         rQ   test_degree_1TestBSpline.test_degree_1a   s    A!KK1b!!U1X!U1Q3Z7!A$uQqSz/I!5	*aQ+QqT>rj   c                 l   Sn[         R                  " S/US-   -  S/US-   -  -   5      n[         R                  " / SQ5      n[        UR                  SS5      SS/5      n[	        X#U5      n[         R
                  " SSS5      n[        U" US	S
9U" US	S
9SS9  [        [        XbX145      U" U5      SS9  g )Nr7   r   r*   r,   r:   r;   r<   r3   g      r:   ra   Textrapolatern   ro   )rG   asarrayr   reshaper   rc   r   r   )rN   r0   r.   r/   bpbsplrg   s          rQ   test_bernsteinTestBSpline.test_bernsteinl   s    JJsAaCyA3!9,-JJ'(199R#aV,qQ[[b"%240RT2	@ba),Ru	.rj   c           	      2   [        5       nUR                  u  p#n[        R                  " X$   X$* S-
     S5      nU" U5      nU Vs/ s H  n[	        XrX45      PM     nn[        XhSS9  U Vs/ s H  n[        XrX45      PM     n	n[        XiSS9  g s  snf s  snf Nr*   rm   rn   ro   )rZ   r[   rG   rc   _naive_evalr   _naive_eval_2)
rN   rP   r.   r/   r0   rg   y_brq   y_ny_n2s
             rQ   test_rndm_naive_eval TestBSpline.test_rndm_naive_evalz   s      !%%a[[qAw+e0231{1&3u-3562aaA)26.	 4 7s   B,Bc           	          [        5       nUR                  u  p#n[        R                  " X$   X$* S-
     S5      n[	        U" U5      [        XRX445      SS9  g r   rZ   r[   rG   rc   r   r   rN   rP   r.   r/   r0   rg   s         rQ   test_rndm_splevTestBSpline.test_rndm_splev   sL    !%%a[[qAw+"uRQ3%@rj   c                 v   [         R                  R                  S5      n[         R                  " UR                  S5      5      nUR                  S5      n[	        X#5      n[        U6 nUR                  UR                  pv[         R                  " Xg   Xg* S-
     S5      n[        U" U5      [        X5      SS9  g )N     r*   P   rn   ro   )rG   rM   RandomStatesortr   r   r.   r0   rc   r   r   )	rN   rngrq   yr[   rP   r.   r0   rg   s	            rQ   test_rndm_splrepTestBSpline.test_rndm_splrep   s    ii##D)GGCJJrN#JJrNQlSMssACC1[[qAw+"uR~E:rj   c                 B   [        5       n[        R                  " UR                  5      Ul        [        R                  " UR
                  UR                     UR
                  UR                  * S-
     S5      n[        U" U5      [        R                  " U5      5        g )Nr*   d   )rZ   rG   rd   r/   rc   r.   r0   r   )rN   rP   rg   s      rQ   test_rndm_unityTestBSpline.test_rndm_unity   se    !ll133[[QSS133tAv;4"r||B/0rj   c                 H   [         R                  R                  S5      nSu  p#[         R                  " UR                  U5      5      nUR                  USS4S9n[	        XEU5      nXC   XC* S-
     pXxU-
  UR                  S5      -  -   n	U" U	5      R
                  S:X  d   eg )	Nr      r7         sizer*   r7   r8      )r7   r8   r   r   r   )rG   rM   r   r   r   shape)
rN   r   rO   r0   r.   r/   rP   tmtprg   s
             rQ   test_vectorizationTestBSpline.test_vectorization   s    ii##D)GGCJJqM"JJQ1IJ&A!qAwB7cjj333u{{o---rj   c           	      6   [         R                  R                  S5      nSu  p#[         R                  " UR                  X#-   S-   5      5      nUR                  U5      n[         R                  XQR                  US-   5      4   n[        XEU5      [        XFU5      pUS   US   -
  n	[         R                  " US   U	-
  US   U	-   S5      n
[        U" U
5      U" U
5      SS9  [        U" U
5      [        XXS45      SS9  [        U" U
5      [        XXc45      SS9  g )	Nr   )!   r7   r*   r3   r   rm   rn   ro   )	rG   rM   r   r   r_r   rc   r   r   )rN   r   rO   r0   r.   r/   c_padrP   b_paddtrg   s              rQ   
test_len_cTestBSpline.test_len_c   s     ii##D)GGCJJqs1u%&JJqM aAaC()1#WQq%95rUQqT\[[1AbEBJ3"uRyu5"uRQ3%@"uRU7eDrj   c           	          [        5       nUR                  u  p4nX5   X5* S-
     pvS H&  n[        U" Xg/U5      U" US-   US-
  /U5      SSS9  M(     g )Nr*   TF绽|=&.>Hz>rV   rZ   r[   r   )	rN   num_parallel_threadsrP   r.   _r0   r   r   extraps	            rQ   test_endpointsTestBSpline.test_endpoints   sb    !%%aqAwB#FArh/rEz2:6?dQUW $rj   c           	          [        5       nUR                  u  p4n[        U" X5S-   U* S-
   S-
  5      U" X5S-   U* S-
   S-   5      SS9  g )Nr*   r   r   ro   r   )rN   r   rP   r.   r   r0   s         rQ   test_continuityTestBSpline.test_continuity   sV    !%%a!aC1+-.!aC1+2E0F	rj   c           	      (   [        5       nUR                  u  p#nUS   US   -
  n[        R                  " X$   U-
  X$* S-
     U-   S5      nX$   U:  XbU* S-
     :  -  n[	        U" Xg   SS9U" Xg   SS95        [	        U" USS9[        XbX44SS95        g )	Nr3   r   r*   rm   Trv   F)extr   )rN   rP   r.   r/   r0   r   rg   masks           rQ   test_extrapTestBSpline.test_extrap   s    !%%arUQqT\[[AbdGbL"5r	baRT7l+ 	"(5"(6	8 	"$/ba)+	-rj   c                     [        5       nUR                  u  p#nUS   S-
  US   S-   /nU" U5      n[        R                  " [        R                  " U5      5      (       a   eg )Nr   r*   r3   )rZ   r[   rG   allisnan)rN   rP   r.   r   r0   rg   yys          rQ   test_default_extrapTestBSpline.test_default_extrap   sZ    !%%adQh"	"rU66"((2,'''''rj   c           	         [         R                  R                  S5      n[         R                  " UR                  S5      5      nUR                  S5      nSn[	        X#USS9nUR
                  US-   -
  nUS   US	   -
  n[         R                  " X$   U-
  X&   U-   S
5      nX$   XU   -
  X&   X$   -
  -  -   n	[        U" U5      [        XX445      5        / SQnX$   XU   -
  X&   X$   -
  -  -   n	[        U" USS9U" U	SS95        g )Nr      r8   r7   periodicrv   r*   r3   r   rm   )r3   r         ?r*   T)
rG   rM   r   r   r   r   rc   r   r   r   )
rN   r   r.   r/   r0   rP   rO   r   rg   xys
             rQ   test_periodic_extrap TestBSpline.test_periodic_extrap   s   ii##D)GGCJJqM"JJqMA!4FFa!erUQqT\[[AD2Ir2TRA$Y14!$;//"uRQ34 TRA$Y14!$;//"*5q7NOrj   c                     [        5       nUR                  u  p#n[        R                  " X#U45      n[        R
                  " X$   X$*    S5      n[        U" U5      U" U5      SSS9  g )Nr   rn   rV   )rZ   r[   r	   from_splinerG   rc   r   )rN   rP   r.   r/   r0   pprg   s          rQ   
test_ppolyTestBSpline.test_ppoly   sY    !%%aay)[[quc*"r"vE>rj   c           	      F   [        5       nUR                  u  p#n[        R                  " US   US   S5      n[        R                  XR4   n[        SUS-   5       H  n[        XRX44US9n[        Xq" XVS9SS9  M     [        U" XTS-   S9[        R                  " U5      SS9  g )	Nr   r3   rm   r*   dernurn   ro   )	rZ   r[   rG   rc   r   ranger   r   
zeros_like)rN   rP   r.   r/   r0   rg   r   yds           rQ   test_derivative_rndm TestBSpline.test_derivative_rndm   s    !%%a[[1qub)UU25\AaC=Crq9#.BB"E: !
 	"1r}}R'8uErj   c                    Sn/ SQn[         R                  R                  S5      n[         R                  SSUR                  S5      SS4   n[	        X$U5      n[         R
                  " / SQ5      n[        U" XfS:g     S-
  5      U" XfS:g     S-   5      5        [         R                  " U" S	5      U" S
5      5      (       a   e[         R
                  " SS/5      n[        U" US-
  SS9U" US-   SS95        [         R
                  " SS/5      n[         R                  " U" US-
  SS9U" US-   SS95      (       a   e[         R                  " U" US-
  SS9U" US-   SS95      (       a   eg )Nr5   )r3   r3   r   r*   r*   r7   r8   r   r   r   r   r   r   r   r   )r*   r7   r8   r   r   r   g2H@gη   @r7   r8   r*   r   )rG   rM   r   r   r   rx   r   allclose)	rN   r0   r.   r   r/   rP   rq   x0x1s	            rQ   test_derivative_jumps!TestBSpline.test_derivative_jumps  sS    2ii##D)EE!Q

1q!+,A! JJ|$!F)e+,!F)e+,	.;;q{AgJ7777 ZZA"u*+"u*+	-ZZA;;qe2Ab5jQ4GHHHH ;;qUq11QY13EFFFFFrj   c           	         [         R                  " SSS5      n[        R                  " / SQS9n[	        U" U5      [        XR                  UR                  UR                  45      SS9  [	        U" U5      [        U5      SS9  [        R                  " / SQS9n[         R                  " S	S
S5      n[	        U" U5      [         R                  " US:  X-  SU-
  S
-  5      SS9  g )Nr3   r8   r   r   r*   r5   r7   )r.   rn   ro   r   r*   r*   r5   r   r5   ra   r*   r:   )rG   rc   r   basis_elementr   r   r.   r/   r0   B_0123re   rf   s      rQ   test_basis_element_quadratic(TestBSpline.test_basis_element_quadratic&  s    [[Q#!!L1"b33QSS/2	@"r
	0 !!L1[[Ar""aB
3%	Arj   c           	          [        5       nUR                  u  p#n[        R                  " X$   X$* S-
     S5      n[	        U" U5      [        XRX45      SS9  g )Nr*   r   rn   ro   )rZ   r[   rG   rc   r   _sum_basis_elementsr   s         rQ   test_basis_element_rndm#TestBSpline.test_basis_element_rndm3  sK    !%%a[[qAw+"22!?eLrj   c                    [        5       nUR                  u  p#nUS-  n[        X%U5      n[        X!R                  R                  U5      n[        X!R                  R
                  U5      n[        R                  " X$   X$* S-
     S5      n[        U" U5      R                  U" U5      SS9  [        U" U5      R
                  U" U5      SS9  g )Ny      ?      @r*   r   rn   ro   )	rZ   r[   r   r/   realimagrG   rc   r   )	rN   rP   r.   r/   r0   ccb_reb_imrg   s	            rQ   
test_cmplxTestBSpline.test_cmplx9  s    !%%a(^A1q##((A&q##((A&[[qAw+"

DH59"

DH59rj   c                     [         R                  " / SQ5      n[        R                  " U" [        R                  5      5      (       d   eg )Nr   )r   r   rG   r   rI   rN   rP   s     rQ   test_nanTestBSpline.test_nanF  s/    !!,/xx"&&	""""rj   c                    [        SS9nUR                  u  p#n[        X#U5      n[        R                  " X$   X$* S-
     S5      n[        SU5       H+  nUR                  5       n[        U" Xg5      U" U5      SSS9  M-     g )Nr   r0   r*   r   -q=rV   )rZ   r[   r   rG   rc   r   
derivativer   )rN   rP   r.   r/   r0   b0rg   js           rQ   test_derivative_method"TestBSpline.test_derivative_methodK  sr    !$%%aQ1[[qAw+q!AABrIqu5uE rj   c                    [        5       nUR                  u  p#n[        R                  " X$   X$* S-
     S5      n[	        UR                  5       R                  5       " U5      U" U5      SSS9  [        R                  X3U4   n[        R                  " X345      n[        X#U5      n[	        UR                  5       R                  5       " U5      U" U5      SSS9  g )Nr*   r   rn   rV   )
rZ   r[   rG   rc   r   antiderivativer   c_dstackr   r   s         rQ   test_antiderivative_method&TestBSpline.test_antiderivative_methodT  s    !%%a[[qAw+((*557;"E	7 EE!'NIIqfA!((*557;"E	7rj   c           
      	   [         R                  " / SQ5      n[        UR                  SS5      [        R
                  " S5      5        [        UR                  SS5      [        R
                  " S5      5        [        UR                  SS5      [        R
                  " S5      5        [        UR                  SS5      [        R
                  " S5      5        [        UR                  SSSS	9[        R
                  " S5      5        [        UR                  SSS
S	9[        R
                  " S5      5        [        UR                  SSS
S	9[        R
                  " S5      5        [        UR                  SSS
S	9[        R
                  " [        R                  " SSUR                  5      5      5        SUl	        UR                  5       n[        R
                  " U" S5      U" S5      -
  5      n[        UR                  SS5      U5        [        UR                  SS5      [        R
                  " SU-  5      5        [        UR                  SS5      U5        [        UR                  SS5      [        R
                  " SU-  5      5        [        UR                  SS5      [        R
                  " U" S5      U" S5      -
  5      5        [        UR                  SS5      [        R
                  " U" S5      U" S5      -
  U" S5      -   U" S5      -
  5      5        [        UR                  SS5      [        R
                  " U" S5      U" S5      -
  U" S5      -   U" S5      -
  5      5        [        UR                  SS5      [        R
                  " U" S5      U" S5      -
  U" S5      -   U" S5      -
  SU-  -   5      5        [        UR                  SS5      [        R
                  " U" S5      U" S5      -
  5      5        [        UR                  SS5      [        R
                  " U" S5      U" S5      -
  5      5        [        UR                  SS5      [        R
                  " U" S5      U" S5      -
  SU-  -
  5      5        g )Nr4   r   r*   r         r3   r9   Trv   Fr   r5   iii      ?r7   g      +@   r   ir8   )r   r   r   	integraterG   rx   _implr   r[   rw   r  )rN   rP   i
period_ints       rQ   test_integralTestBSpline.test_integralb  sI   !!),Aq)2::c?;Aq)2::h+?@Aq)2::d+;< 	B*BJJsO<Bt<bjjoNBu=rzz#OAru=rzz(?ST 	Aru=

5<<2quu#=>	@ #ZZ!qt,
Aq):6Aq)2::b:o+FGB+Z8B+RZZJ-GHC-

1S6AcF?3	5C+

1Q4!A$;1#5##>?	AHf5

1Q4!A$;1#5##>?	AC0

1Q4!A$;1#5##>Z#OP	R 	Ar*BJJqtad{,CDB,bjj1!.EFAr*

1Q4!A$;Z#?@	Brj   c                     / SQn[        X5      nSUl        [        R                  " U5      nS H/  u  pE[	        UR                  XE5      UR                  XE5      5        M1     g )Nr6   r   ))r   )r   r   )r     )r
   rw   r	   r   r   r  )rN   rq   rP   pr   r   s         rQ   test_integrate_ppoly TestBSpline.test_integrate_ppoly  sS    q$"a 5FBAKK/KK/1 6rj   c                     [         R                  " / SQ5      nS HG  nUR                  SSUS9n[        U[        R
                  5      (       d   eUR                  S:X  a  MG   e   g )Nr4   r   r   r*   rv   )r   r   r  
isinstancerG   ndarrayndim)rN   rP   rw   ress       rQ   test_integrate_0D_always$TestBSpline.test_integrate_0D_always  sW    !!),(K++a+<Cc2::....88q= = )rj   c                      " S S[         5      nUR                  / SQ5      nUR                  U:X  d   eUR                  5       R                  U:X  d   eUR	                  5       R                  U:X  d   eg )Nc                       \ rS rSrSrg)'TestBSpline.test_subclassing.<locals>.Bi   N)__name__
__module____qualname____firstlineno____static_attributes__r%  rj   rQ   Br$    s    rj   r+  )r   r*   r5   r5   )r   r   	__class__r   r  )rN   r+  rP   s      rQ   test_subclassingTestBSpline.test_subclassing  sg    	 	 OOL){{a||~''1,,,!++q000rj   axisr  r8   c                 b   Su  p#[         R                  " SSX#-   S-   5      n/ SQnUS-  nUR                  Xb5        [        U5      n[         R                  R                  S5      nUR	                  US9n[        XHX1S9n	U	R                  R                  XV   4US U -   XVS-   S  -   :X  d   eUR	                  S	5      n
U	" U
5      R                  US U U
R                  -   XVS-   S  -   :X  d   eUR                  * S-
  UR                  4 H   n[        [        [        40 [        XHX;S
9D6  M"     [        XHX1S9R                  5       [        XHX1S9R                  S5      [        XHX1S9R                  5       [        XHX1S9R                  S5      4 H  nUR                  U	R                  :X  a  M   e   g )Nr   r   r*   r   r   r   r8   r   r   r/  r   )r.   r/   r0   r/  r5   )rG   rc   r   tuplerM   r   r   r/   r   r  rC   r    rF   r   r  r/  )rN   r/  rO   r0   r.   shpos_axisr   r/   rP   xpaxb1s                rQ   	test_axisTestBSpline.test_axis  s   KK1aeai( !8
		(2Yii##D)JJBJA!'ssyyR\Ob(m;b!oMMMMZZ	"u{{b(mbhh6QJKHHHH FF7Q;'B)W : 1Q8: (
 1.99;1.99!<1.==?1.==a@BB 77aff$$$	Brj   c                     Sn/ SQn[         R                  " / SQ/ SQ/5      n[        X#USS9n[        X#S   U5      n[        X#S   U5      n[        U" S	5      U" S	5      U" S	5      /5        g )
Nr5   )r   r*   r5   r7   r8   r   r   )r3   r5   r   r3   )r5   r   r*   r3   r2  r   r*   r>   )rG   arrayr   r   )rN   r0   r.   r/   splspl0spl1s          rQ   test_neg_axisTestBSpline.test_neg_axis  sh    !HHnm45aAB'qA$"qA$"C49d3i"89rj   c                     S nSnSnS H  nU" X#U5        M     [        SSS5       H  nU" X#S5        M     Sn[        SS	5       H  nU" X#S
5        M     g)a  
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                 .   [         R                  R                  S5      n[         R                  " UR	                  U 5      S-  S-
  5      nUR	                  U 5      S-  S-
  nUS:X  a  US   US'   [        XEXS9n[         R                  " [        UR                  5      U-
  S-
  5      n[        UR                  Xq5      " U5      n[        R                  " UUR                  U5      R                  5       n	[        XR                  -  US	S
9  [        XS	S
9  g)zA
To avoid repetition of code the following function is provided.
r   (   r   r   r3   r   r0   bc_typer*   rn   ro   N)rG   rM   r   r   random_sampler
   eyelenr.   r   design_matrixtoarrayr   r/   )
rO   r0   rG  r   rq   r   r{   r/   des_matr_defdes_matr_csrs
             rQ   run_design_matrix_testsHTestBSpline.test_design_matrix_bc_types.<locals>.run_design_matrix_tests  s     ))''-C))!,r1B67A!!!$r)B.A*$u!%aaADs466{Q*+A"466103L"00151244;GI  L66115ALUCrj   r@   r7   clampednaturalr   r5   
not-a-knotr   r   r   N)r   )rN   rO  rO   r0   bcs        rQ   test_design_matrix_bc_types'TestBSpline.test_design_matrix_bc_types  sg    	D* (B#A"- ) q!QA#A,7   q!A#A*5 rj   rw   )FTr   degreer   c           	         [         R                  R                  S5      nUR                  SUS-   -  5      n[         R                  " U5      [         R
                  " U5      peUn[         R                  [         R                  " US-
  US-
  U5      [         R                  " XVSUS-   -  5      [         R                  " US-   US-   U5      4   n[         R                  " [        U5      U-
  S-
  5      n	[        XXq5      n
[        U
" U5      [        R                  " XHXq5      R                  5       5        [         R                  " US-
  US-
  US-   US-   /5      nU(       d;  [        R                   " ["        5         [        R                  " XHXq5        SSS5        g[        U
" U5      [        R                  " XHXq5      R                  5       5        g! , (       d  f       g= f)z;Test that design_matrix(x) is equivalent to BSpline(..)(x).r   ra   r*   r5   r  N)rG   rM   r   rH  aminamaxr   rc   rI  rJ  r   r   rK  rL  r=  r\   r   rE   )rN   rw   rX  r   rq   xminxmaxr0   r.   r/   bsplines              rQ   'test_design_matrix_same_as_BSpline_call3TestBSpline.test_design_matrix_same_as_BSpline_call  sx    ii##D)bFQJ/0WWQZdEE"++dQhq&9++d!vz*:;++dQhq&9: ; FF3q6A:>"!/AJ--aACKKM	

 HHdRi4#:tbyABz*%%aA; +* 
%%aA;CCE +*s   :G
Gc                    [         R                  R                  S5      nSnSn[         R                  " UR	                  U5      S-  S-
  5      nUR	                  U5      S-  S-
  n[        XEUS9n[        SS5       HT  nUS U nUS U n	[        R                  " UUR                  U5      R                  5       n
[        XR                  -  U	S	S
9  MV     g )Nr   ra   r7   rE  r   r   r*   r8   rn   ro   )rG   rM   r   r   rH  r
   r   r   rK  r.   rL  r   r/   )rN   r   rO   r0   rq   r   r{   r  xcycrN  s              rQ   test_design_matrix_x_shapes'TestBSpline.test_design_matrix_x_shapes  s    ii##D)GGC%%a(2-23a 2%*!!!,q!A2AB2AB"00151244;GI  L6612EB rj   c                 t    / SQn[         R                  " SUS5      R                  5       n[        U/ SQ/SS9  g )N)r,   r,   r,   r:   r;   r<   r<   r<   r:   r7   )g      ?gmਪ?gK}\UU?r9   rn   ro   )r   rK  rL  r   )rN   r.   des_matrs      rQ   test_design_matrix_t_shapes'TestBSpline.test_design_matrix_t_shapes'  s7    ,((Q2::<;<"	$rj   c                    [         R                  R                  S5      nSnSn[         R                  " UR	                  U5      S-  S-
  5      nUR	                  U5      S-  S-
  n[        XEUS9n[        [        5         [        R                  " XFR                  S S S2   U5        S S S 5        Sn/ S	Qn/ S
Qn[        [        5         [        R                  " XGU5        S S S 5        g ! , (       d  f       NH= f! , (       d  f       g = f)Nr   ra   r7   rE  r   r   r3   r5   )r9   r,   r:   r;   r<         @ru   )rG   rM   r   r   rH  r
   rC   rE   r   rK  r.   )rN   r   rO   r0   rq   r   r{   r.   s           rQ   test_design_matrix_asserts&TestBSpline.test_design_matrix_asserts/  s    ii##D)GGC%%a(2-23a 2%*!!!, :&!!!VVDbD\15 '$:&!!!* '& '& '&s   ?(C)C:)
C7:
DrG  )rS  rR  r   rT  c                    [         R                  R                  S5      n[         R                  " UR                  S5      5      nUR                  S5      nUS:X  a  US   US'   [	        X4US9n[
        R                  " XQS9n[         R                  " SSS5      n[        U" U5      U" U5      SS	9  [        X4US9n[        UR                  UR                  SS	9  g )
Nr   r   r   r   r3   rG  r*   rU   ro   )rG   rM   r   r   r   r   from_power_basisrc   r   r
   r/   )	rN   rG  r   rq   r   cbr{   rg   bspl_news	            rQ   test_from_power_basis!TestBSpline.test_from_power_basisA  s     ii##D)GGCJJrN#JJrNj aDAbEw/''<[[Ar"2Ru5%aG<

7rj   c                    [         R                  R                  S5      n[         R                  " UR                  S5      5      nUR                  S5      UR                  S5      S-  -   nUS:X  a  US   US'   [	        X4US9n[
        R                  " XQS9n[        X4R                  US9n[        X4R                  US9n[        UR                  UR                  SUR                  -  -   SS	9  g )
Nr   r   r+   r   r   r3   ro  rU   ro   )rG   rM   r   r   r   r   rp  r
   r   r   r   r/   )	rN   rG  r   rq   r   rq  r{   bspl_new_realbspl_new_imags	            rQ   test_from_power_basis_complex)TestBSpline.test_from_power_basis_complexP  s     ii##D)GGCJJrN#JJrNSZZ^b00j aDAbEw/''<*1ffgF*1ffgF"}2F FUSrj   c                     [         R                  " / SQ5      n[         R                  " / SQ5      n[        R                  " [	        XSS9SS9n[        UR                  / SQSS9  g)	a5  
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]
r6   )r*   r*   r*   r*   r*   rS  ro  )r,   r*   r*   r*   r*   r*   r*   rU   ro   N)rG   r=  r   rp  r   r   r/   )rN   rq   r   r{   s       rQ   test_from_power_basis_exmp&TestBSpline.test_from_power_basis_exmp^  sM     HH_%HH_%''A)(L09; 7eDrj   c                 R   [         R                  " SS/5      n[         R                  " S/5      nUR                  SS9  UR                  SS9  [         R                  " SSS5      nUR                  SS9  [	        XSS9n[        U" U5      [         R                  " U5      S-  5        g )Nr   r*   r;   Fwritera   r-   )rG   r=  setflagsrc   r   r   rd   )rN   r.   r/   rg   rP   s        rQ   test_read_onlyTestBSpline.test_read_onlyq  s    HHaVHHcUO	


	


[[Ar"
% a""r||B/#56rj   c                 6    [        5       nS n[        SX!5        g )Nc                 r    UR                   u  p n[        R                  " X#   X#* S-
     S5      nU" U5        g )Nr*   i'  )r[   rG   rc   )r   rP   r.   r0   rg   s        rQ   	worker_fn/TestBSpline.test_concurrency.<locals>.worker_fn  s2    eeGA!QT1RT7E2BbErj   ra   )rZ   r!   )rN   rP   r  s      rQ   test_concurrencyTestBSpline.test_concurrency~  s      !	
 	 I1rj   c           	      f   [        5       n[        R                  " SSS5      nU" U5      n[        R                  " 5       n[        R
                  " [        UR                  SU S35      5      SUR                  R                  UR                  R                  S9nUR                  US S & [        R
                  " [        UR                  SU S35      5      SUR                  R                  UR                  R                  S9nUR                  US S & Xbl        Xrl        [        U" U5      U5        g )	Nr   r*   ra   r.   z.datzw+)moderB   r   r/   )rZ   rG   rc   	threadingget_native_idmemmapstrjoinr.   rB   r   r/   r   )rN   tmpdirrP   rg   expectedtidt_mmc_mms           rQ   test_memmapTestBSpline.test_memmap  s      ![[Ar"R5%%'yyV[[1SE78t ssyy		;##QyyV[[1SE78t ssyy		;##Q"x(rj   r%  N)4r&  r'  r(  r)  rR   r^   rh   rr   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r   r-  r\   markparametrizer   r9  rA  thread_unsaferV  r_  rd  rh  rl  rs  rx  r{  r  r  r  r*  r%  rj   rQ   r'   r'   '   s   !F
>	?./A
;1.E&W-(P$?FG4AM:#
F7&BP	1!1 [[VU2q\2% 3%:: [[(6 (6T [[],EF[[XuQx0 1 G4C"$+$ [[Y )C D8D8 [[Y )C D
TD
TE&7 [[	2 	2)rj   r'   c                   F   \ rS rSr\R
                  R                  S/ SQ5      S 5       r\R
                  R                  S/ SQ5      S 5       rS r	\R
                  R                  S	/ S
Q5      S 5       r
\R
                  R                  SSS/5      S 5       rS rS rSrg)
TestInserti  xval)r9   r,   r>   r8         @      @c                    [         R                  " S5      n[         R                  " U5      S-  n[        X#SS9n[	        X5      nUR                  U5      n[        UR                  UR                  SS9  [        UR                  UR                  S UR                  * S-
   SS9  XS   :w  a  UOUS S n[         R                  USUSS  US S -   -  4   n[        U" U5      U" U5      SS9  [         R                  " U5      S-  n[        X(SS9n	[        U[         R                  X84   SS9n
U
R                  U5      n[        UR                  UR                  SS9  [        UR                  [         R                  UR                  U5      R                  U	R                  U5      R                  4   SS9  XS   :w  a  UOUS S n[         R                  USUSS  US S -   -  4   n[        U
" U5      U" U5      SS9  g )	Nr   r7   r   rU   ro   r*   r3   r   )rG   rK   sinr
   r   insert_knotr   r.   r/   r0   r   cosr  )rN   r  rq   r   r>  spl_1fspl_1rg   y1spl_y1spl_yyspl_yy1s               rQ   test_insertTestInsert.test_insert  s    IIaLFF1IqL +"%6)CEE6!8!45A B%-QQsVUU2sAabEAcrFN++,Br7 VVAY\#AQ/#AruuQU|q9$$T*		5777		255)>)@)@)/););D)A)C)C*D $EKP	R B%-QQsVUU2sAabEAcrFN++,r
GBKe<rj   zxval, m))r9   r5   )r,   r7   )r  r   )r8   r5   )r  r5   c                    [         R                  " S5      n[         R                  " U5      S-  n[        X4SS9n[	        XUS9nUR                  X5      n[        UR                  UR                  SS9  [        UR                  UR                  S UR                  * S-
   SS9  XS   :w  a  UOUS S n[         R                  US	USS  US S -   -  4   n[        U" U5      U" U5      SS9  g )
Nr   r7   r   mrU   ro   r*   r3   r   )rG   rK   r  r
   r   r  r   r.   r/   r0   r   )	rN   r  r  rq   r   r>  r  r  rg   s	            rQ   test_insert_multiTestInsert.test_insert_multi  s     IIaLFF1IqL +Q'(6)CEE6!8!45AB%-QQsVUU2sAabEAcrFN++,Br7rj   c                    [         R                  R                  S5      nSu  p#[         R                  " UR	                  X#-   S-   S95      nUR	                  USS4S9n[        XEU5      nUR	                  XCS-      XC* S-
     S9nUR                  U5      nUR	                  XCS-      XC* S-
     SS	9n	[        U" U	5      U" U	5      S
S9  g )N90  r?   r*   r   r7   r5   )lowhighr   r  r  r   rU   ro   )rG   rM   default_rngr   uniformr   r  r   )
rN   r   rO   r0   r.   r/   r>  xvr  rg   s
             rQ   test_insert_randomTestInsert.test_insert_random  s    ii##E*GGCKKQSUK+,KKaAYK'aA[[QsV!BqD'[2#[[QsV!BqD'[;Br7rj   r  )	r   皙?r:   r<         @      @      @gffffff@r  c           	         [         R                  " S5      n[         R                  " U5      S-  n[        X#SS9n[	        USS06nUR                  U5      n[        XR                  SS9u  pxn	[        UR                  USS	9  [        UR                  S U	* S
-
   US U	* S
-
   SS	9  [         R                  R                  S5      R                  SSSS9n
[        U" U
5      [        XX45      SS	9  g )Nr   r7   r   rw   r   TperrU   ro   r*   r   r   r   )   r  )rG   rK   r  r   r   r  r   r[   r   r.   r/   rM   r  r  r   )rN   r  rq   r   r[   r>  r  tfcfr0   rg   s              rQ   test_insert_periodicTestInsert.test_insert_periodic  s     IIaLFF1IqLQQs3
3#2wwD1	%0!A5QBqD	>YY""4(00QQR0Hb	5"[#9Frj   rw   Nr   c                 ^   [         R                  " S5      S-  [         R                  -  n[         R                  " U5      [         R                  " U5      pC[        X#SU-  -   SS9nXl        [        X#SS9nXl        [        X$SS9nXl        SnUR                  U5      n	UR                  U5      n
UR                  U5      n[        U	R                  U
R                  SS9  [        U	R                  UR                  SS9  [        U	R                  U
R                  SUR                  -  -   SS9  g )	Nr   r5   r+   r7   r         @rU   ro   )rG   rK   pir  r  r
   rw   r  r   r.   r/   )rN   rw   rq   y_rey_imr>  spl_respl_imr  r  spl_1respl_1ims               rQ   test_complexTestInsert.test_complex  s    IIaLN255 VVAYq	d 2d7Na8%#Aq1(#Aq1(#$$R($$R(77R		\!9Frj   c                    SnSn[         R                  " S/US-   -  / SQ-   S/US-   -  -   5      n[         R                  " [        U5      U-
  S-
  5      n[	        X4USS9n[        [        5         [        XXB4S	S
9  S S S 5        [        [        5         UR                  U5        S S S 5        g ! , (       d  f       N8= f! , (       d  f       g = f)Nr  r7   r   r*   r5   r7   r8   r   r   r   rv   Tr  )	rG   r=  onesrJ  r   rC   rE   r   r  )rN   r  r0   r.   r/   r>  s         rQ   +test_insert_periodic_too_few_internal_knots6TestInsert.test_insert_periodic_too_few_internal_knots  s     HHaS!A#Y-QqS	9:GGCFQJN#aA:6:&21yd+ ' :&OOB '& '& '&s   0B/C /
B= 
Cc                    Sn[         R                  " S/US-   -  / SQ-   S/US-   -  -   5      n[         R                  " [        U5      U-
  S-
  5      n[	        X#U5      n[        [        5         UR                  S5        S S S 5        [        [        5         UR                  S5        S S S 5        [        [        5         UR                  SSS9  S S S 5        g ! , (       d  f       N`= f! , (       d  f       NH= f! , (       d  f       g = f)	Nr7   r   r*   r  r   r3   r   r  )rG   r=  r  rJ  r   rC   rE   r  )rN   r0   r.   r/   r>  s        rQ   test_insert_no_extrap TestInsert.test_insert_no_extrap"  s    HHaS!A#Y-QqS	9:GGCFQJN#aA:&OOB ' :&OOA ' :&OOAO# '& '& '& '&s$   /CC,C=
C),
C:=
Dr%  )r&  r'  r(  r)  r\   r  r  r  r  r  r  r  r  r  r*  r%  rj   rQ   r  r    s    [[V%AB= C=@ [[C888 [[T $8 GG [[]T:,>?G @G, ($rj   r  c            
          SS jn S HR  n[        US9n[        [        U5      5       H.  u  p4U " XC5        [        SUS-   5       H  nU " XCUSS5        M     M0     MT     g )Nc           
         U R                   u  pVn[        R                  " U5      n[        R                  US   S-
  SUSS  US S -   -  US   S-   4   n[	        [        XXg4U5      U " X5      X4SU SU R                   3S9  g )	Nr   r  r   r*   r3   zder = z  k = )rW   rX   err_msg)r[   rG   uniquer   r   r   r0   )	rP   r  r   rW   rX   r.   r/   r0   rq   s	            rQ   check_splev,test_knots_multiplicity.<locals>.check_splev6  s    %%aIIaLEE!A$s(C122A/2s:;aQC0!A)se6!##.G	Irj   r*   r5   r7   r8   r   r   r*   r   )r   rn   rn   )rZ   	enumerate_make_multiplesr   )r  r0   rP   r  r8  r   s         rQ   test_knots_multiplicityr  2  s^    I !$q12EAQ!}B3u5 % 3 rj   c                 J   US:X  a  X2   U s=::  a  X2S-      :  a  S$   S$ X2U-      X2   :X  a  SnO$XU   -
  X2U-      X2   -
  -  [        XS-
  X#5      -  nX2U-   S-      X2S-      :X  a  SnXE-   $ X2U-   S-      U -
  X2U-   S-      X2S-      -
  -  [        XS-
  US-   U5      -  nXE-   $ )zk
Naive way to compute B-spline basis functions. Useful only for testing!
computes B(x; t[i],..., t[i+k+1])
r   r*   r,   r9   _naive_Brq   r0   r  r.   c1c2s         rQ   r  r  I  s    
 	Avda(!aC&(s1(c11v~A$hQ3!$'(1c1*@@1Qx1qS6 G !AhlQs1uXA#./(1c1Q32JJGrj   c                   ^ ^^^^ T TT   :X  a  TmO[         R                  " TT 5      S-
  mTT   T s=::  a  TTS-      ::  d   e   eTT:  a  T[        T5      T-
  :  d   e[        UUUUU 4S j[	        STS-   5       5       5      $ )z5
Naive B-spline evaluation. Useful only for testing!
r*   c              3   X   >#    U  H  nTTU-
     [        TTTU-
  T5      -  v   M!     g 7fNr  ).0r  r/   r  r0   r.   rq   s     rQ   	<genexpr>_naive_eval.<locals>.<genexpr>f  s-     F1q1vAqsA..s   '*r   )rG   searchsortedrJ  sumr   )rq   r.   r/   r0   r  s   ````@rQ   r   r   \  s     	AaDyOOAq!A%Q41!A#6a#a&1*n$$FFa1FFFrj   c                    ^ ^^^ [        T5      TS-   -
  nUTS-   :  d   e[        T5      U:  d   eTT   T s=::  a
  TU   ::  d   e   e[        UUUU 4S j[        U5       5       5      $ )z'Naive B-spline evaluation, another way.r*   c              3   L   >#    U  H  nTU   [        TTUT5      -  v   M     g 7fr  r  r  r  r/   r0   r.   rq   s     rQ   r   _naive_eval_2.<locals>.<genexpr>o  s%     =Hqqthq!Q**H   !$rJ  r  r   rq   r.   r/   r0   rO   s   ```` rQ   r   r   i  si    A!A#A!8O8q6Q;;Q41!=E!H===rj   c                    [        U5      US-   -
  nXCS-   :  d   e[        U5      U:  d   eSn[        U5       HC  n[        R                  " XXc-   S-    SS9" U 5      nXRU   [        R
                  " U5      -  -  nME     U$ )Nr*   r9   r5   Frv   )rJ  r   r   r   rG   
nan_to_num)rq   r.   r/   r0   rO   sr  rP   s           rQ   r   r   r  s    A!A#A!8O8q6Q;;
A1X!!!ac!e*%@C	qTBMM!$$$  Hrj   c                     [         R                  " U 5      n [         R                  " X S:  U S:  -  U S:  U S:  -  U S:  U S:*  -  /S S S /5      $ )z*A linear B-spline function B(x | 0, 1, 2).r   r5   r*   c                     g)Nr9   r%  rq   s    rQ   <lambda>B_012.<locals>.<lambda>  s    brj   c                     U $ r  r%  r  s    rQ   r  r    s    Arj   c                     SU -
  $ Nr:   r%  r  s    rQ   r  r    s    Arj   )rG   
atleast_1d	piecewiser  s    rQ   rp   rp   }  sc    
aA<<Uq1u-!VA.!VQ/1 )+~FH Hrj   c                     [         R                  " U 5      n U S:  U S:  U S:  -  U S:  /nUS:X  a	  S S S /nOUS:X  a	  S S S	 /nO[        S
U 35      e[         R                  " XU5      nU$ )z0A quadratic B-spline function B(x | 0, 1, 2, 3).r*   r5   r   c                     X -  S-  $ r  r%  r  s    rQ   r  B_0123.<locals>.<lambda>  s
    13r6rj   c                     SU S-
  S-  -
  $ )Ng      ?r  r5   r%  r  s    rQ   r  r    s    41T6A+-rj   c                     SU -
  S-  S-  $ )Nr;   r5   r%  r  s    rQ   r  r    s    BqD19q=rj   c                     gNr,   r%  r  s    rQ   r  r        2rj   c                     g)Ng       r%  r  s    rQ   r  r    s    3rj   c                     gr  r%  r  s    rQ   r  r    r  rj   znever be here: der=)rG   r  rE   r  )rq   r   condsfuncspiecess        rQ   r   r     s    
aAUQUq1u%q1u-E
ax!-(* 
 .se455\\!E*FMrj   c                     [         R                  R                  S5      n[         R                  " UR                  X-   S-   5      5      nUR                  U 5      n[        R
                  " X4U5      $ )N{   r*   )rG   rM   r   r   r   construct_fast)rO   r0   r   r.   r/   s        rQ   rZ   rZ     sS    
))


$C


13q5!"A

1A!!!**rj   c              #   v  #    U R                   U R                  p!U R                  R                  5       nUS   USS& US   US'   [	        X1U5      v   U R                  R                  5       nUS   USUS-   & [	        X1U5      v   U R                  R                  5       nUS   X2* S-
  S& [	        X1U5      v   g7f)	zIncrease knot multiplicity.         r   r   Nr*   r3   )r/   r0   r.   copyr   )rP   r/   r0   t1s       rQ   r  r    s     33q	
B2Br"IVBrF
"
	
B!uBt!H
"
	
B2Br!tuI
"
s   B7B9c                   V    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rSrg)TestInteropi  c                 n   [         R                  " SS[         R                  -  S5      n[         R                  " U5      n[	        X5      nUR
                  UR                  UR                  4U l        XUsU l	        U l
        U l        [         R                  " SS[         R                  -  S5      U l        [         R                  UR                  UR                  UR                  4   n[         R                  " XD45      U l        [!        UR
                  U R                  UR                  5      U l        g )Nr   r<   r  r  )rG   rc   r  r  r
   r.   r/   r0   r[   rg   r   rP   xnewr  r  r  r   b2)rN   rg   r   rP   r  s        rQ   setup_methodTestInterop.setup_method  s    [[BruuHb)VVBZr&CCacc?#%1 $&KK2bee8R0	UU133QSS=!))RH%!##tww,rj   c                    U R                   U R                  U R                  p2n[        [	        X5      U" U5      SSS9  [        [	        XR
                  5      U" U5      SSS9  [        [        R                  " U Vs/ s H  n[	        XB5      PM     sn5      U" U5      SSS9  [        [        SS9   [	        X5        S S S 5        [        [        SUR                  R                  5      5      S-   nUR                  R                  U5      nUR                  XcR                   4n[        [        R                  " [	        X5      5      U" U5      R                  U5      SSS9  g s  snf ! , (       d  f       N= f)NrU   rV   zCalling splev.. with BSplinematchr*   r   )r  rP   r  r   r   r[   rG   rx   rC   rE   r3  r   r/   r  	transposer.   r0   )rN   r  rP   r  rq   r4  r   r[   s           rQ   
test_splevTestInterop.test_splev  s   ii 	d$e%	9dEE*$e%	9

#>AE!K#>?$e%	9
 :-KL$O M 5BDDII&'$.TT^^BttR

5#344**2.U	H $?
 MLs   =E$2E))
E7c                    U R                   U R                  p![        X5      n[        R                  " X5      u  pEn[	        US   USS9  [	        US   USS9  US   U:X  d   e[        XSS9u  n    n[	        US   USS9  [	        US   USS9  US   U:X  d   e[        X5      n	[	        X)SS9  [        U6 n
[	        X*" U5      SS9  g )Nr   rU   ro   r*   r5   T)full_output)rg   r   r   r  r   r   r   )rN   rq   r   r[   r.   r/   r0   tck_fr   r   rP   s              rQ   test_splrepTestInterop.test_splrep  s    ww1Ql,,q$aA.A.1v{{  $7q!Qa!%0a!%0Qx1}} 1]E* SM1Q4e,rj   c                 >   U R                   U R                  p![        R                  X"4   n[	        [
        5         [        X5        S S S 5        [	        [
        5         [        R                  " X5        S S S 5        [	        [        SS9   [        US S US S 5        S S S 5        [	        [        SS9   [        R                  " US S US S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N}= f! , (       d  f       Ne= f! , (       d  f       g = f)Nm > k must holdr#  r7   )	rg   r   rG   r  rC   rE   r   r  rD   )rN   rq   r   y2s       rQ   test_splrep_errorsTestInterop.test_splrep_errors  s     ww1UU14[:&1M ':&LL ' 9,=>1Ra5!BQ%  ?9,=>LL2A"1& ?> '&&& ?>>>s/   CC,C=4D
C),
C:=
D
Dc                    [         R                  " S[         R                  S9R                  S5      n[	        U5      u  p#[
        R                  " U5      u  pE[        X5SS9  [        [         R                  " [        X25      5      USS9  [        [         R                  " [        X45      5      USS9  [	        USSS9u  u  pg    n[        X7SS9  [        [         R                  " [        Xv5      5      USS9  g )	Nr  rA   r7   r   rU   ro   r   T)r  r*  )	rG   rK   rL   ry   r   r  r   rx   r   )	rN   rq   rP   ur[   u1b_fu_fr   s	            rQ   test_splprepTestInterop.test_splprep  s    IIb

+33F;qz--" 	E*

5;/?

5=115A &a1$?
Aq!U+

5?3QUCrj   c                    [         R                  " S5      R                  S5      n[        [        SS9   [        U5        S S S 5        [        [        SS9   [        R
                  " U5        S S S 5        [         R                  " SSSS9n[        [        S	S9   [        U/5        S S S 5        [        [        S	S9   [        R
                  " U/5        S S S 5        / S
Qn[        [        SS9   [        U/5        S S S 5        [        [        SS9   [        R
                  " U/5        S S S 5        / SQn/ SQn[        [        SS9   [        U/S U/6   S S S 5        g ! , (       d  f       GN$= f! , (       d  f       GN	= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)N<   r   ztoo many values to unpackr#  r   rE  r7   )numr/  ) >Ir>   >Kr?  zInvalid inputs)r*   r7   r5   r8   )r   g333333?g?r*   )	rG   rK   ry   rC   rE   r   r  rc   rD   )rN   rq   r5  s      rQ   test_splprep_errorsTestInterop.test_splprep_errors  sC   IIe$$Y/:-HIAJ J:-HIMM! J KK21%9,=>QCL ?9,=>MM1# ?
 E:-=>QCL ?:-=>MM1# ? :-=>qc4^$ ?>/ JIII
 ?>>> ?>>> ?>sS   EE/F<F.F#F4G
E,/
E>
F
F #
F14
G
Gc                    U R                   U R                  p![        R                  " / SQ5      [        R                  -  n[        [        U5      USSS9  [        [        UR                  UR                  UR                  45      USSS9  [        [        SS9   [        USS9  S S S 5        UR                  R                  SS	S
5      n[        R                  " [        UR                  XBR                  4SS95      nUR                  S:X  d   e[        XS-
  [        R                  " U5      SS9  g ! , (       d  f       N= f)N)r   r  r>   r  r   rV   zCalling sproot.. with BSpliner#  rm   )mestr*   r5   r   )r7   r5   r8   r   ro   )rP   r  rG   r=  r  r   r   r.   r/   r0   rC   rE   r&  rx   r   r   )rN   rP   r  rootsc2rrrs         rQ   test_sprootTestInterop.test_sproot1  s    2-.ruu4q	5t$?QSS!##/TM :-LM2B N ddnnQ1%ZZc440r:;xx9$$$
BMM"$5EB NMs   D22
E c           	      <   U R                   U R                  p![        [        SSU5      [        SSUR                  5      SSS9  [        [        SSU5      UR                  SS5      SSS9  [        [        SS9   [        SSU5        S S S 5        UR                  R                  SSS5      n[        R                  " [        SSUR                  X2R                  45      5      nUR                  S	:X  d   e[        U[        SSU5      SSS
9  g ! , (       d  f       N= f)Nr   r*   rn   F)rW   check_0dzCalling splint.. with BSpliner#  r5   )r7   r5   )rW   check_shape)rP   r  r   r   r[   r  rC   rE   r/   r&  rG   rx   r.   r0   r   )rN   rP   r  rE  integrs        rQ   test_splintTestInterop.test_splintB  s    2q!Qq!QUU+%%	Iq!QAq)	G :-LM1a N ddnnQ1%F1a"$$TT):;<||v%%%q!Qe	H NMs   9D
Dc           	         U R                   U R                  4 GHJ  n[        UR                  5      [        UR                  5      -
  nUR                  R                  5       nUS:  a:  [        R                  U[        R                  " U4UR                  SS  -   5      4   nS H  n[        U5      n[        R                  " UR                  R                  5       X1R                  45      n[        UR                  US   SS9  [        UR                  US   SS9  UR                  US   :X  d   e[        U[        5      (       d   e[        U[         5      (       a  M   e   GMM     g Nr   r*   rl   rU   ro   r5   )rP   r  rJ  r.   r/   r  rG   r   zerosr   r   r  r0   r   r  r   r3  rN   rP   ctb_crO   bdtck_ds          rQ   test_splderTestInterop.test_splderV  s   &&$''"AQSSCH$B##((*CAveeC2%#))AB-*?!@@AAYacchhj#ss%;<eAhU;eAhU;ttuQx'''!"g....!%////  #rj   c           	         U R                   U R                  4 GHJ  n[        UR                  5      [        UR                  5      -
  nUR                  R                  5       nUS:  a:  [        R                  U[        R                  " U4UR                  SS  -   5      4   nS H  n[        U5      n[        R                  " UR                  R                  5       X1R                  45      n[        UR                  US   SS9  [        UR                  US   SS9  UR                  US   :X  d   e[        U[        5      (       d   e[        U[         5      (       a  M   e   GMM     g rP  )rP   r  rJ  r.   r/   r  rG   r   rQ  r   r   r  r0   r   r  r   r3  rR  s          rQ   test_splantiderTestInterop.test_splantiderg  s   &&$''"AQSSCH$B##((*CAveeC2%#))AB-*?!@@A]((!##((*c33)?@eAhU;eAhU;ttuQx'''!"g....!%////  #rj   c                    U R                   U R                  U R                  p2nUR                  R                  S-  nSUR                  U   UR                  US-      -   -  n[        XQ5      [        XQR                  UR                  UR                  45      pv[        [        X65      [        X75      SS9  [        U[        5      (       d   e[        U[        5      (       d   e[        [        UR                  R                  5      5      nUR                  R                  USS  S-   5      n	[        XRR                  XR                  45      n
[        XR5      n[        [         R"                  " [        X:5      5      R                  SSS5      U" U5      SS9  [        U[        5      (       d   e[        U
[        5      (       d   eg )Nr5   r   r*   rU   ro   r%  r   )rP   r  rg   r.   r   r   r/   r0   r   r   r  r   r3  r   r  r&  rG   rx   )rN   rP   r  rg   r  tnbntck_nr4  r  tck_n2bn2s               rQ   r  TestInterop.test_insertx  sZ   FFDGGTWWrCCHHM!##a&133qs8#$2M6"ssACCo#>Ebb(u	6"g&&&&%'''' 5#$TT^^BqrFTM*TT2tt,-Rn 	

5#45??1aHBe	-#w''''&%((((rj   )rP   r  r  r[   r  rg   r   N)r&  r'  r(  r)  r   r'  r,  r1  r9  r@  rG  rM  rW  rZ  r  r*  r%  rj   rQ   r  r    s=    -H6-0' D%:C"H(0"0")rj   r  c                      \ rS rSr\R
                  " SS\R                  -  5      r\R                  " \5      r	S r
S rS r\R                  R                  S/ SQ5      S	 5       r\R                  R                  S/ SQ5      S
 5       rS rS r\R                  R                  S/ SQ5      S 5       rS rS rS r\R                  R                  S/ SQ5      S 5       rS rS rS rS rS r\R                  R=                  SS9S 5       rS r S r!S r"S r#S  r$S! r%S" r&S# r'\R                  R                  S/ S$Q5      S% 5       r(S& r)S' r*S( r+S) r,S* r-S+r.g,)-
TestInterpi  r9   r:   c                     [        [        5         [        U R                  U R                  SS9  S S S 5        g ! , (       d  f       g = f)Nr>   r   )rC   rD   r
   rg   r   rN   s    rQ   test_non_int_orderTestInterp.test_non_int_order  s*    9%tww37 &%%s	    9
Ac                    [        U R                  U R                  SS9n[        U" U R                  5      U R                  SSS9  [        U R                  U R                  SSS9n[        U" U R                  5      U R                  SSS9  g )Nr   r   rn   rV   r3   r0   r/  r
   rg   r   r   r   s     rQ   test_order_0TestInterp.test_order_0  d    tww15$''
DGG%eDtww12>$''
DGG%eDrj   c                    [        U R                  U R                  SS9n[        U" U R                  5      U R                  SSS9  [        U R                  U R                  SSS9n[        U" U R                  5      U R                  SSS9  g )Nr*   r   rn   rV   r3   rj  rk  r   s     rQ   test_linearTestInterp.test_linear  rn  rj   r0   r   c                 x    / SQn/ SQn[        [        SS9   [        X#US9  S S S 5        g ! , (       d  f       g = f)Nr   r*   r5   r7   r8   r   )r   r*   r5   r7   r8   r   r   r   zShapes of xr#  r   rC   rE   r
   rN   r0   rq   r   s       rQ   test_incompatible_x_y TestInterp.test_incompatible_x_y  s,    $:];qq) <;;s   +
9c                    / SQn/ SQn[        [        SS9   [        X#US9  S S S 5        / SQn[        [        SS9   [        X#US9  S S S 5        / SQn[        R                  " U5      R                  S5      n[        [        SS9   [        X#US9  S S S 5        g ! , (       d  f       N~= f! , (       d  f       Nj= f! , (       d  f       g = f)	N)r   r*   r*   r5   r7   r8   rs  zx to not have duplicatesr#  r   )r   r5   r*   r7   r8   r   zExpect x to be a 1D strictly)r*   r3   )rC   rE   r
   rG   rx   ry   ru  s       rQ   test_broken_xTestInterp.test_broken_x  s    :-GHqq) I :-KLqq) M JJqM!!'*:-KLqq) ML IH ML
 MLs"   BB+B<
B(+
B9<
C
c                     S HJ  n[        U R                  U R                  U5      n[        U" U R                  5      U R                  SSS9  ML     g )Nr5   r7   r8   r   r   r   rn   rV   rk  )rN   r0   rP   s      rQ   test_not_a_knotTestInterp.test_not_a_knot  s<    #A"477DGGQ7AAdggJe%H $rj   c           	      &   [        U R                  U R                  SSS9n[        U" U R                  5      U R                  SSS9  [	        SS5       H2  n[        U" U R                  S   US9U" U R                  S	   US9S
S9  M4     [        U R                  U R                  SSS	S9n[        U" U R                  5      U R                  SSS9  [	        SS5       H2  n[        U" U R                  S   US9U" U R                  S	   US9S
S9  M4     g )Nr   r   rF  rn   rV   r*   r   r   r3   dy=ro   r0   rG  r/  )r
   rg   r   r   r   )rN   rP   r  s      rQ   test_periodicTestInterp.test_periodic  s    tww1jI$''
DGG%eD q!AAdggajQ/4772;11EER  tww1jrR$''
DGG%eDq!AAdggajQ/4772;11EER rj   r|  c                    Sn[         R                  R                  S5      n[         R                  " UR	                  U5      S-  5      nUR	                  U5      S-  nUS   US'   [        XEUSS9n[        U" U5      US	S
9  g )Nr   r   ra   r   r3   r   r   rF  rn   ro   )rG   rM   r   r   rH  r
   r   )rN   r0   rO   r   rq   r   rP   s          rQ   test_periodic_randomTestInterp.test_periodic_random  s{     ii##D)GGC%%a(2-.a 3&u!qq*=!ae,rj   c                 ^   U R                   R                  S   n[        R                  R	                  S5      nUR                  U5      S-  [        R                  -  n[        R                  " U5      nSUS'   S[        R                  -  US'   [        R                  " SU45      n[        R                  " U5      US'   [        R                  " U5      US'   [        X4SSSS	9n[        U5       H  n[        U" X6   5      US S 2U4   S
S9  M     [        U" US   5      U" US   5      S
S9  g )Nr   r   r5   r9   r3   r*   r   r   r  rn   ro   )rg   r   rG   rM   r   rH  r  r   rQ  r  r  r
   r   r   )rN   rO   r   rq   r   rP   r  s          rQ   test_periodic_axisTestInterp.test_periodic_axis  s    GGMM!ii##D)a 1$ruu,GGAJ!BEE	"HHaVvvay!vvay!qq*1EqAAadGQq!tW59 !A$1R56rj   c                 4   [         R                  R                  S5      nSnSn[         R                  " UR	                  U5      5      nUR	                  U5      nUS   S-
  US'   [        [        5         [        XEUSS9  S S S 5        g ! , (       d  f       g = f)	Nr   r   r   r3   r*   r   r   rF  )rG   rM   r   r   rH  rC   rE   r
   )rN   r   r0   rO   rq   r   s         rQ   test_periodic_points_exception)TestInterp.test_periodic_points_exception  sz    ii##D)GGC%%a()a uqy!:&qq*= '&&s   4B		
Bc                 Z   [         R                  R                  S5      nSnSn[         R                  " UR	                  U5      5      nUR	                  U5      n[         R
                  " USU-  -   5      n[        [        5         [        XEX&S5        S S S 5        g ! , (       d  f       g = f)Nr   r7   r   r5   r   )	rG   rM   r   r   rH  rQ  rC   rE   r
   )rN   r   r0   rO   rq   r   r.   s          rQ   test_periodic_knots_exception(TestInterp.test_periodic_knots_exception  s    ii##D)GGC%%a()a HHQQY:&qQ:6 '&&s   B
B*r  c           	      d   [        U R                  U R                  USS9n[        U R                  U R                  SUS9n[	        U R                  U5      n[        XB" U R                  5      SS9  [        SU5       H0  n[	        U R                  X5S9n[        XB" U R                  US	9S
S9  M2     g )Nr   rF  T)r  r0   rn   ro   r*   r   r   r   )r
   rg   r   r   r   r   r   )rN   r0   rP   r[   r>  r  s         rQ   test_periodic_splevTestInterp.test_periodic_splev  s     tww1jITWWdgg415DGGS!QtwwZe4 q!A,CC477q!1> rj   c                    [        U R                  U R                  SSS9n[        U R                  U R                  SS9n[	        U" U R                  5      U" U R                  5      SS9  [
        R                  R                  S5      nSn[
        R                  " UR                  U5      S-  5      nUR                  U5      S	-  nUS
   US'   [        XVSSS9n[        XVSS9n[	        U" U5      U" U5      SS9  g )Nr7   r   rF  ro  rn   ro   r   ra   r   r3   r   )
r
   rg   r   r   r   rG   rM   r   r   rH  )rN   rP   cubr   rO   rq   r   s          rQ   test_periodic_cubicTestInterp.test_periodic_cubic  s    tww1jI$''477J?$''
CLu= ii##D)GGC%%a(2-.a 3&u!qq*=!
3!c!f51rj   c                 L  ^^^ Sm[        U R                  U R                  TSS9n[        U R                  T5      m[	        U R                  U R                  TT5      m[
        R                  " UUU4S j5      n[        U" U R                  5      U" U R                  5      SS9  g )Nr7   r   rF  c                     > [        U TTT5      $ r  )r   )rq   r/   r0   r.   s    rQ   r  6TestInterp.test_periodic_full_matrix.<locals>.<lambda>(  s    K1a$;rj   rn   ro   )r
   rg   r   r   r   rG   	vectorizer   )rN   rP   r8  r/   r0   r.   s      @@@rQ   test_periodic_full_matrix$TestInterp.test_periodic_full_matrix!  su     tww1jIDGGQ'&twwA>\\;<$''
BtwwKe<rj   c                    S/n[        U R                  U R                  SS U4S9n[        U" U R                  5      U R                  SSS9  [        U" U R                  S   S5      US   S   SSS	S
9  [        U R                  U R                  SUS 4S9n[        U" U R                  5      U R                  SSS9  [        U" U R                  S   S5      US   S   SSS	S
9  g )Nr*   g       @r5   rF  rn   rV   r3   r*   r   FrW   rX   rJ  rk  )rN   r   rP   s      rQ   test_quadratic_derivTestInterp.test_quadratic_deriv+  s    i tww1tSkJ$''
DGG%eDdggbk1s1vayu55	

 tww1sDkJ$''
DGG%eDdggaj!c!fQie%%	
rj   c           	         SnS/S/p2[        U R                  U R                  XU4S9n[        U" U R                  5      U R                  SSS9  [        [        R
                  " U" U R                  S   S5      U" U R                  S	   S5      /5      [        R
                  " US   S   US   S   /5      SSS9  S
/S
/p2[        U R                  U R                  XU4S9n[        U" U R                  5      U R                  SSS9  g )Nr7   r*   r;   )r*   r<   ro  rn   rV   r   r*   r3   r5   r   )r
   rg   r   r   rG   rx   )rN   r0   der_lder_rrP   s        rQ   test_cubic_derivTestInterp.test_cubic_deriv<  s      y7)utwwENK$''
DGG%eD

Adggaj!$4aQ6G#HI

E!HQKq!#=>UQV	X x&utwwENK$''
DGG%eDrj   c                 ~   Su  p[         R                  " U5      R                  [         R                  5      n[         R                  " U5      nSS/nSS/n[        X4XU4S9n[        U" U5      USSS9  [        [         R                  " U" US	   S
5      U" US	   S5      /5      [         R                  " U VV	s/ s H  u  pU	PM	     sn	n5      5        [        [         R                  " U" US   S
5      U" US   S5      /5      [         R                  " U VV	s/ s H  u  pU	PM	     sn	n5      5        g s  sn	nf s  sn	nf )N)r   r   )r*   g      ()r5   r*   r  )r5   r;   rF  rn   rV   r   r*   r5   r3   )rG   rK   astyperL   r  r
   r   rx   )
rN   r0   rO   rq   r   r  r  rP   r   vals
             rQ   test_quintic_derivsTestInterp.test_quintic_derivsK  s   IIaL

+FF1IF#'"qq%.A!ae%8

AadAJ!A$
#;<

#?IRC#?@	B

AaeQK1R5!#=>

#?IRC#?@	B $@#?s   9D3D9unstable)reasonc                     Sn[        U R                  U5      nSS/n[        U R                  U R                  XUS 4S9n[	        U" U R                  5      U R                  SSS9  g )Nr7   r  )r5   r<   ro  rn   rV   )r   rg   r
   r   r   )rN   r0   r.   r  rP   s        rQ   test_cubic_deriv_unstable$TestInterp.test_cubic_deriv_unstableX  sY     DGGQ'"twwt}M$''
DGG%eDrj   c                 $   Sn[         R                  U R                  S   4US-   -  U R                  SS  U R                  S S -   S-  U R                  S   4US-   -  4   n[        U R                  U R                  XS/S/4S9n[        U" U R                  5      U R                  SSS	9  [        U" U R                  S   S5      [         R                  " S
5      SS9  [        U" U R                  S   S5      [         R                  " S
5      SS9  g )Nr5   r   r*   r3   r:   r  ro  rn   rV   r9   ro   )rG   r   rg   r
   r   r   rx   )rN   r0   r.   rP   s       rQ   test_knots_not_data_sites$TestInterp.test_knots_not_data_sitesg  s     EE4771:-1%7712;"-3772;.!A#&' ( tww)/6(';= 	$''
DGG%eD$''!*a("**S/F$''"+q)2::c?Grj   c                     SnSS/nSS/n[        X#US/S/4S9n[        R                  " SS5      nUS-  n[        U" U5      USSS9  g )	Nr7   r9   r,   r*   r9   r  ro  rn   rV   )r
   rG   rc   r   )rN   r0   rq   r   rP   rg   r   s          rQ   test_minimum_points_and_deriv(TestInterp.test_minimum_points_and_derivv  s]     HHqQ'WI0FG[[R U"rE:rj   c                    / SQ=p[        [        5         [        XS/S 4S9  S S S 5        [        [        5         [        XSS9  S S S 5        [        [        5         [        XS/S9  S S S 5        [        [        5         [        XSS9  S S S 5        Su  p4[        [        5         [        XX44S9  S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nz= f! , (       d  f       Ni= f! , (       d  f       g = f)N)r,   r5   r7   r8   r   r   r  ro  *   )r  r  rt  rN   rq   r   lrs        rQ   test_deriv_specTestInterp.test_deriv_spec  s     %$:&qwi->? ' :&qW5 ' :&qgY7 ' :&qR0 '
 ":&qaV4 '& '& '& '& '& '&s:   B:CC?C-%C>:
C
C
C*-
C;>
Dc                    [         R                  " S5      nUS-  nS/S/pC[        [        SS9   [	        XX44S9  S S S 5        S/S/pC[        [        S	S9   [	        XX44S9  S S S 5        g ! , (       d  f       N6= f! , (       d  f       g = f)
Nr   r5   )r   r   r*   r   zBad boundary conditions at 0.r#  ro  )ir   zBad boundary conditions at 6.)rG   rK   rC   rE   r
   r  s        rQ   test_deriv_order_too_large%TestInterp.test_deriv_order_too_large  s    IIaLqDx&1:-LMqaV4 N x'1:-LMqaV4 NM NM
 NMs   A+A<+
A9<
B
c                 \   SnU R                   nU R                  SU R                  -  -   nS/S/pT[        X#XU4S9n[        U" U5      USSS9  [        U" US   S	5      US   S	   SSS
S9  [        U" US   S	5      US   S	   SSS
S9  S H  n[        X#US9n[        U" U5      USSS9  M!     g )Nr7   r+   )r*   y              @)r*   y      @       @ro  rn   rV   r   r*   Fr  r3   )r   r*   r   )rg   r   r
   r   )rN   r0   rg   r   r  r  rP   s          rQ   r  TestInterp.test_complex  s    WWWWs477{" !zK=urq%.A"rE:beQKq!5uu	
 	bfaL%(1+E	

 A"2Q/AAbE2E> rj   c                     [         R                  " S5      R                  [        5      n[         R                  " S5      R                  [        5      nS H  n[	        XUS9nU" U5        M     g )Nra   r   r   )rG   rK   r  intr
   )rN   rq   r   r0   rP   s        rQ   test_int_xyTestInterp.test_int_xy  sQ    IIbM  %IIbM  % A"11-AaD rj   c                 z    [         R                  " SSS5      nUS S S2   nUS S S2   nS H  n[        X#US9  M     g )Nr3   r*   r   r   r   r   )rG   rc   r
   )rN   rg   rq   r   r0   s        rQ   test_sliced_inputTestInterp.test_sliced_input  sB    [[Q$ssGssGAqq) rj   c                     [         R                  " S5      R                  [        5      nUS-  n[         R                  [         R
                  [         R
                  * 4 H  nX2S'   [        [        [        X5        M     g )Nra   r5   r3   )	rG   rK   r  floatrI   rJ   rC   rE   r
   rN   rq   r   zs       rQ   test_check_finiteTestInterp.test_check_finite  sV    IIbM  'qD&&"&&266'*AbE*&8!? +rj   )r*   r5   r7   r   c                 r    [        [        S5      5      nU Vs/ s H  o3S-  PM	     nn[        X$US9  g s  snf )Nra   r5   r   )listr   r
   )rN   r0   rq   ar   s        rQ   test_list_inputTestInterp.test_list_input  s6     rO1aT111% s   4c                    [         R                  [         R                  " U R                  5      [         R                  " U R                  5      4   nSSS/4/nSSS/4/n[        U R                  USX#4S9n[        U" U R                  5      USSS	9  [        U" U R                  S
   S5      US
   S   SSS	9  [        U" U R                  S   S5      US
   S   SSS	9  g )Nr*   r,   r:   r;   r<   r7   rF  rn   rV   r   r3   )rG   r  r  rg   r  r
   r   )rN   r   r  r  rP   s        rQ   test_multiple_rhsTestInterp.test_multiple_rhs  s    UU266$''?BFF477O34b"Xb"Xtwwa%H$''
BU?$''!*a(%(1+EN$''"+q)58A;UOrj   c                    [         R                  R                  S5      nSu  p#[         R                  " UR                  US95      nUR                  USSS4S9n[	        XEU5      nUR
                  R                  USSS4:X  d   eSUR                  S5      4/nSUR                  S5      4/n[	        XEX'U4S	9nUR
                  R                  X2-   S-
  SSS4:X  d   eg )
Nr   r7   r   r   r   r   r   r*   r   r   r   ro  )rG   rM   r   r   r
   r/   r   )	rN   r   r0   rO   rq   r   rP   d_ld_rs	            rQ   test_shapesTestInterp.test_shapes  s    ii##D)GGCJJAJ&'JJQ1aLJ)qQ'ssyyQ1aL((( 3::i()*3::i()*qQc
;ssyyQUQY1a0000rj   c                 
   [         R                  " U R                  5      n[        U R                  USSS9n[        U R                  USS/S/4S9n[	        UR
                  UR
                  SS9  [        U R                  USSS9n[        U R                  USS/S/4S9n[	        UR
                  UR
                  SS9  [        U R                  US	S
S9n[        U R                  US	S S/4S9n[	        UR
                  UR
                  SS9  [        U R                  USSS9n[        U R                  USS S9n[	        UR
                  UR
                  SS9  [        [        5         [        U R                  USSS9  S S S 5        [         R                  [         R                  " U R                  5      [         R                  " U R                  5      4   nSSS/4/nS	SS/4/n[        U R                  USXE4S9n[        U R                  USSS9n[	        UR
                  UR
                  SS9  [         R                  R                  S5      nSu  px[         R                  " UR                  US95      n	UR                  USSS4S9n
S[         R                  " S5      4/nS[         R                  " S5      4/n[        XX{U4S9n[        XUSS9n[	        UR
                  UR
                  SS9  g ! , (       d  f       GN|= f)Nr7   rS  rF  r  rU   ro   )rS  rR  r  r5   )NrR  r  rT  typor*   r9   rQ  r   r  r   r   r   r   r  ro  rR  )rG   r  rg   r
   r   r/   rC   rE   r  r  rM   r   r   rQ  )rN   r   r8  r  r  r  r   r0   rO   rq   r   r  r  s                rQ   test_string_aliasesTestInterp.test_string_aliases  s   VVDGG_  q)DqF8fX:NObdd/  q(>@q*0F8(<>bdd/  q:KLq4(:LMbdd/  q,Gq$?bdd/ :&twwa@ ' UU266$''?BFF477O34b"Xb"Xq5.Iq(>@bdd/ ii##D)GGCJJAJ&'JJQ1aLJ) 288I&'(288I&'(as<a;bdd// '&s   'K33
Lc                     [         R                  R                  S5      nSu  p#[         R                  " UR                  US95      nUR                  US9n[	        XB5      n[        XEX&5      n[        XEXb5      n[        UR                  USSS9  g )Nr   )r7   r   r   rn   rV   )	rG   rM   r   r   r   r
   make_interp_full_matrr   r/   )	rN   r   r0   rO   rq   r   r.   rP   r  s	            rQ   test_full_matrixTestInterp.test_full_matrix+  sz    ii##D)GGCJJAJ&'JJAJqQ*"1.Re%8rj   c                    [         R                  R                  S5      nSn[        SSS5       GH  n[	        US-
  S-  5      n[         R
                  " UR                  SU45      5      n[        SUS-   5       Hx  nUSU* 2US24==   [         R
                  " UR                  SX&-
  45      5      -  ss'   XVS2SU* 24==   [         R
                  " UR                  SX&-
  45      5      -  ss'   Mz     UR                  XD45      nXuSU2U* S24'   UR                  XD45      nXU* S2SU24'   [         R                  " X245      n	[        [        XD* S-
  S5      5       HA  u  pjU
S	:  a  [         R                  " XZS
9XSU
24'   M'  [         R                  " XZS
9XU
S24'   MC     UR                  U5      n[        [        XXU5      [         R                  R                  X[5      SS9  GM     g)z
Random elements in diagonal matrix with blocks in the
left lower and right upper corners checking the
implementation of Woodbury algorithm.
r      r7       r5   r*   Nr3   r   )offsetrn   ro   )rG   rM   r   r   r  diagflatrQ  r  diagonalr   r   linalgsolve)rN   r   rO   r0   r  r  r  urlldr  rP   s               rQ   test_woodburyTestInterp.test_woodbury6  s    ii##D)q"aA!a%1%FCJJ1v./A1fqj)#A2#qr'
bkk#**aZ*@AA
"crc'
bkk#**aZ*@AA
 * V,-B#%gvgwx V,-B#%vgh ! A!%!R"@Aq5!{{17A!eH!{{17AeH	 B
 

1A/ra@IIOOA1?# !rj   r%  N)/r&  r'  r(  r)  rG   rc   r  rg   r  r   rg  rl  rp  r\   r  r  rv  ry  r}  r  r  r  r  r  r  r  r  r  r  r  xfailr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r*  r%  rj   rQ   rd  rd    s    
RBEE	"B	B8EE [[S,/* 0* [[S,/* 0*I
S [[S"45- 6-7	>	7 [[S,/
? 0
?2 =
"EB [[j)E *EH
;5.5?**@ [[S,/& 0&P110f	9?rj   rd  c                    U R                   UR                   :X  d   eUR                   U R                   U-   S-   :X  d   eU R                   n[        R                  " XD4[        R                  S9n[	        U5       HO  nX   nXrU   :X  a  UnO[        R
                  " X'5      S-
  n[        R                  " X#Xx5      n	XXhU-
  US-   24'   MQ     [        R                  " XQ5      n
U
$ )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   rG   rQ  rL   r   r  r%   evaluate_all_bsplslr  )rq   r   r.   r0   rO   Ar  r  leftbbr/   s              rQ   r  r  S  s     66QVV66QVVaZ!^###	A
!rzz*A1XtQ4<D??1+a/D ''d9 !!VDF]
  	AHrj   c                 :   [        [        R                  XU45      u  pnU R                  nUR                  U-
  S-
  n[        R                  " XE4[        R
                  S9n[        U5       HO  nX   nXU   :X  a  Un	O[        R                  " X(5      S-
  n	[        R                  " X#X5      n
XXyU-
  U	S-   24'   MQ     [        R                  " UR                  U5      n[        R                  " UR                  U5      n[        R                  " X5      nXU44$ )z,Make the least-square spline, full matrices.r*   rA   )maprG   rx   r   rQ  rL   r   r  r%   r  dotTr  r  )rq   r   r.   r0   r  rO   r  r  r  r  r  r+  Yr/   s                 rQ   make_lsq_full_matrixr  o  s    "**qQi(GA!	A	
QA
!rzz*A1XtQ4<D??1+a/D ''d9 !!VDF]
  	qssAA
qssAA
A!f9rj   methodnorm-eqqrc            	          \ rS rSr\R
                  R                  S5      rSu  rr	\R                  " \R                  \5      5      r\R                  \5      r\" \R                  " \S   \S   S5      \	5      r\S 5       r\S 5       rS	 r\S
 5       r\S 5       rS r\S 5       rS r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\R>                  RA                  S\!" \"" SS5      5      5      S 5       r#S r$Sr%g)TestLSQi  r   )r  r7   r   r3   r   c                    U R                   U R                  U R                  U R                  4u  p#pE[	        X#XE5      u  pg[        X#XEUS9n[        UR                  U5        UR                  R                  UR                  U-
  S-
  4:X  d   eUu  p[        R                  R                  XSS9u  n    n[        UR                  U5        g )Nr  r*   r3   )rcond)rq   r   r.   r0   r  r   r   r/   r   r   rG   r  lstsq)rN   r  rq   r   r.   r0   c0AYrP   aar   r  r   s                rQ   
test_lstsqTestLSQ.test_lstsq  s     VVTVVTVVTVV3
a%aA1A!v6R ssyyQVVaZ!^---- iioob2o6Aq!R rj   c           	      r   U R                   U R                  U R                  U R                  4u  p#pE[        R
                  " U5      n[        X#XEUS9n[        X#XEXaS9n[        UR                  UR                  SS9  [        UR                  UR                  SS9  UR                  UR                  :X  d   eg )Nr  wr  rn   ro   )	rq   r   r.   r0   rG   rd   r   r   r/   )	rN   r  rq   r   r.   r0   r  rP   b_ws	            rQ   test_weightsTestLSQ.test_weights  s     VVTVVTVVTVV3
aLLOA!v6aAA=SUU/SUU/sscee||rj   c           	         U R                   U R                  U R                  U R                  4u  pp4[        R
                  R                  S5      R                  UR                  S   S9n[        XX4USS9n[        XX4USS9n[        XX4SS9n[        UR                  UR                  SS	9  [        R                  " UR                  UR                  SS	9(       a   eg )
Nr   r   r   r  r  r  r  rn   ro   )rq   r   r.   r0   rG   rM   r  r  r   r   r   r/   r   )	rN   rq   r   r.   r0   r  b_neb_qrb_no_ws	            rQ   test_weights_sameTestLSQ.test_weights_same  s    VVTVVTVVTVV3
aII!!$'//QWWQZ/@qQQyAqQQt< qD9U3;;vxxe<<<<rj   c                 @   U R                   U R                  U R                  U R                  4u  p#pE[        R
                  R                  S5      nUR                  USSS4S9n[        X'X4US9nUR                  R                  UR                  U-
  S-
  SSS4:X  d   eg )Nr   r   r   r   r   r  r*   )rq   r.   r0   rO   rG   rM   r   r   r/   r   r   )	rN   r  rq   r.   r0   rO   r   r   rP   s	            rQ   r  TestLSQ.test_multiple_rhs  s    VVTVVTVVTVV3
aii##D)JJQ1aLJ)A!v6ssyyQVVAXaZAq1111rj   c                    U R                   U R                  U R                  U R                  4u  p#pESn[        R
                  R                  S5      nUR                  XV4S9n[        X(X4US9n	[        U5       V
s/ s H  n
[        X(S S 2U
4   X4US9PM     nn
[        R                  " [        U5       V
s/ s H  oU
   R                  PM     sn
5      R                  n[        XR                  SS9  g s  sn
f s  sn
f )Nr7   r   r   r  rU   ro   )rq   r.   r0   rO   rG   rM   r   r   r   vstackr/   r  r   )rN   r  rq   r.   r0   rO   nrhsr   r   rP   r  r  coefss                rQ   test_multiple_rhs_2TestLSQ.test_multiple_rhs_2  s    VVTVVTVVTVV3
aii##D)JJQIJ&A!v6 T{$"! a1a4!v>" 	 $		E$K8Kqa577K89;;ss/	$8s   ;C46C9c                    U R                   U R                  U R                  U R                  4u  pp4Sn[        R
                  R                  XE4S9n[        XX#SS9n[        XX#SS9n[        UR                  UR                  SS9  g )Nr7   r   r  r  r  rU   ro   )	rq   r.   r0   rO   rG   rM   r   r   r/   )	rN   rq   r.   r0   rO   r#  r   r  b_neqs	            rQ   test_multiple_rhs_3TestLSQ.test_multiple_rhs_3  sr    VVTVVTVVTVV3
aII1),qQ$7a9=e4rj   c                    U R                   U R                  U R                  pCnU R                  S-  n[	        X%X4US9n[	        X%R
                  X4US9n[	        X%R                  X4US9n[        U" U5      U" U5      SU" U5      -  -   SSS9  g )N      ?       @r  r+   rU   rV   )rq   r.   r0   r   r   r   r   r   )	rN   r  rq   r.   r0   rc  rP   r   r   s	            rQ   r  TestLSQ.test_complex  s~     &&$&&$&&aVVx A17q''1?q''1?!d1gDG3%eLrj   c                 0   U R                   U R                  U R                  p2nU R                  S-  n[        R
                  " XD4SS9n[        XX#5      n[        XR                  X#5      n[        XR                  X#5      n[        U" U5      U" U5      SU" U5      -  -   SSS9  [        R
                  " XD4SS9n[        XX#5      n[        XR                  X#5      n[        XR                  X#5      n[        U" U5      U" U5      SU" U5      -  -   SSS9  g )Nr,  r*   r2  r+   rU   rV   )
rq   r.   r0   r   rG   stackr   r   r   r   )rN   rq   r.   r0   rc  rP   r   r   s           rQ   test_complex_2TestLSQ.test_complex_2  s     &&$&&$&&aVVx XXrhQ'A1(q''10q''10!d1gDG3%eL XXrhQ'A1(q''10q''10!d1gDG3%eLrj   c                     [         R                  " S5      R                  [        5      n[         R                  " S5      R                  [        5      n[	        USS9n[        X#USUS9  g )Nra   r*   r   r0   r  )rG   rK   r  r  r   r   rN   r  rq   r   r.   s        rQ   r  TestLSQ.test_int_xy   sK    IIbM  %IIbM  %AOa1V4rj   c                    [         R                  " S[         R                  S9n[         R                  " S[         R                  S9n[        USS9n[	        X#USUS9n[	        UR                  [        5      UR                  [        5      UR                  [        5      SUS9nUSS  US S -   S-  n[        U" U5      U" U5      SS	9  g )
Nra   rA   r*   r   r3  r3   r:   rU   ro   )rG   rK   float32r   r   r  r  r   )rN   r  rq   r   r.   spl_f32spl_f64x2s           rQ   test_f32_xyTestLSQ.test_f32_xy  s    IIb

+IIb

+AO!!Qv>!HHUOQXXe_ahhuo6
 eafn#WR[u=rj   c                     [         R                  " SSS5      nUS S S2   nUS S S2   n[        US5      n[        X4USUS9  g )Nr3   r*   r   r7   r3  )rG   rc   r   r   )rN   r  rg   rq   r   r.   s         rQ   r  TestLSQ.test_sliced_input  sI     [[Q$ssGssGAqMa1V4rj   c           
         [         R                  " S5      R                  [        5      nUS-  n[	        US5      n[         R
                  [         R                  [         R                  * 4 H  nXSS'   [        [        [        X#XAS9  M     g )N   r5   r7   r3   r  )
rG   rK   r  r  r   rI   rJ   rC   rE   r   )rN   r  rq   r   r.   r  s         rQ   test_checkfiniteTestLSQ.test_checkfinite  sd     IIbM  'qDAqM&&"&&266'*AbE*oqQN +rj   c                     U R                   U R                  U R                  pCnUR                  SS9  UR                  SS9  UR                  SS9  [	        X#XAS9  g )NFr~  )rq   r   r.   r  )rq   r   r.   r  r   r4  s        rQ   r  TestLSQ.test_read_only*  sO     &&$&&$&&a	


	


	


!A5rj   r0   r*   c                     U R                   U R                  p2[        [        R                  " US   US   S5      U5      n[        X#XASS9n[        X#XASS9nUSS  US S -   S-  n[        U" U5      U" U5      S	S
9  g )Nr   r3   r   r  r3  r  r*   r:   rU   ro   )rq   r   r   rG   rc   r   r   )rN   r0   rq   r   r.   spl_norm_eqspl_qrrg   s           rQ   test_qr_vs_norm_eqTestLSQ.test_qr_vs_norm_eq3  s~     vvtvv1BKK!aeQ/3%aA9E qd;eafn#B%@rj   c                 T   [         R                  " U R                  S5      n[         R                  " U R                  S5      n[	        U R                  U R                  U R
                  SSS9n[	        XU R
                  SSS9nUSS  US S -   S-  n[        U" U5      U" U5      SS	9  g )
Nr5   r7   r  r3  r*   r3   r:   rU   ro   )rG   repeatrq   r   r   r.   r   )rN   rq   r   r  spl_2rg   s         rQ   test_duplicatesTestLSQ.test_duplicates>  s    IIdffa IIdffa !DIdff$?eafn#b	5959rj   r%  N)&r&  r'  r(  r)  rG   rM   r   r   rO   r0   r   rq   r   r   rc   r.   parametrize_lsq_methodsr  r  r  r  r%  r)  r  r0  r  r;  r  rA  r  r\   r  r  r  r   rH  rM  r*  r%  rj   rQ   r	  r	    sv    ))


%CDAq


1A

1AAaD!B%+Q/A! ! 
 

= 2 2 0 05 	M 	MM, 5 5 
> 
> 5 5 O O 6 6 [[S$uQ{"34A 5A:rj   r	  c                   4    \ rS rSrSrS r\S 5       rS rSr	g)PackedMatrixiI  a_  A simplified CSR format for when non-zeros in each row are consecutive.

Assuming that each row of an `(m, nc)` matrix 1) only has `nz` non-zeros, and
2) these non-zeros are consecutive, we only store an `(m, nz)` matrix of
non-zeros and a 1D array of row offsets. This way, a row `i` of the original
matrix A is ``A[i, offset[i]: offset[i] + nz]``.

c                     Xl         X l        X0l        UR                  S:X  d   eUR                  S:X  d   eUR                  S   UR                  S   :X  d   eg )Nr5   r*   r   )r  r  ncr  r   )rN   r  r  rS  s       rQ   __init__PackedMatrix.__init__R  sQ    vv{{{{awwqzV\\!_,,,rj   c                 L    U R                   R                  S   U R                  4$ )Nr   )r  r   rS  rf  s    rQ   r   PackedMatrix.shape[  s    vv||A''rj   c                 n   [         R                  " U R                  5      nU R                  R                  S   n[	        UR                  S   5       H_  n[        U R                  U R                  U   -
  U5      nU R                  US U24   XU R                  U   U R                  U   U-   24'   Ma     U$ )Nr*   r   )rG   rQ  r   r  r   minrS  r  )rN   outnelemr  nels        rQ   todensePackedMatrix.todense_  s    hhtzz"Qsyy|$AdggA.6C:>&&DSD/C4;;q>$++a.3"6667 % 
rj   )r  rS  r  N)
r&  r'  r(  r)  __doc__rT  propertyr   r]  r*  r%  rj   rQ   rQ  rQ  I  s%    - ( (rj   rQ  c                     SSK Jn  U R                  nU R                  nU R                  nUR
                  u  pxUR
                  S   U:X  d   eUR                  5       n	UR                  5       n
[        X'5       H  nX[   n[        X5       H  nU[        X5      :  a    M'  U" XS4   XS4   5      u  pnUXS4'   [        SU5       H&  n[        XXU4   XU4   5      u  XU4'   XUS-
  4'   M(     SXS4'   [        U
R
                  S   5       H#  n[        XXU4   XU4   5      u  XU4'   XU4'   M%     M     M     [        [        U	R
                  S   5      5      n[        U	[        R                  " U[        R                  S9U5      nUU
4$ )zbThis is a python counterpart of the `_qr_reduce` routine,
declared in interpolate/src/__fitpack.h
r   )dlartgr*   r9   r3   rA   )scipy.linalg.lapackrb  r  r  rS  r   r  r   rY  fprotar  rQ  rG   r=  int64)a_pr   startrowrb  r  r  rS  r  nzRr  r  oir  r/   r  r  r  offsR_ps                       rQ   _qr_reduce_pyrm  h  s    + 	AZZF	BGGEA771:??	A	
B8YrACJ Q!tWa1g.GA! AdG1b\%+A!qD'1T7%C"Q$ac6 "AeH 288A;'%+A"T(B!tH%E"a4"T( (   * aggaj!"D
q"((4rxx8"
=C7Nrj   c                 0    X-  X-  -   nU* U-  X-  -   nXE4$ )z@Givens rotate [a, b].

[aa] = [ c s] @ [a]
[bb]   [-s c]   [b]

r%  )r/   r  r  rP   r  r  s         rQ   rd  rd    s)     #)B
AB6Mrj   c                    U R                   nUR                  u  p4U R                  nUR                  S   UR                  S   :X  d   e[        R                  " USU 5      nXS-
     X%S-
  S4   -  XeS-
  S4'   [        US-
  SS5       HG  n[        XEU-
  5      nX'SU2S4   XgS-   Xx-   2S4   -  R                  SS9n	X   U	-
  X'S4   -  XgS4'   MI     U$ )zxBacksubsitution solve upper triangular banded `R @ c = y.`

`R` is in the "packed" format: `R[i, :]` is `a[i, i:i+k+1]`
r   Nr*   .r5   r3   r2  )r  r   rS  rG   r   r   rY  r  )
rl  r   ri  r   rh  rS  r/   r  r\  summs
             rQ   fpbackrq    s    
 	AGGEA	B771:###
afAT7Q!tQwZ'AdCiL2a4R "dmQsUD.!Ac!%in$55:::BdTka1g-S&		 !
 Hrj   c                   2    \ rS rSrS rS rS rS rS rSr	g)	TestGivensQRi  c                 r    Sn[         R                  " U[        S9nUS-  SSU-   -  -   n[        X25      nX4XR4$ )Nr7   rA   r*   )rG   rK   r  r   )rN   rO   r0   rq   r   r.   s         rQ   _get_xytTestGivensQR._get_xyt  s@    IIau%qD1ac7NQzrj   c                     SnU R                  U5      u  p#pE[        R                  " X$U5      n[        R                  " UR                  5       5      u  pxUR                  U-  n	UR                  u  pXR                  S   U-
  S-
  :X  d   eUR                  S S US-   2   n[        R                  " U[        R                  S9nUR                  R                  XS-   5      n[        XU5      nUS S 2S 4   n[        R                   " XX5        [#        [        R$                  " UR                  5       U-   UR                  5       U-
  5      [        R&                  " U5      SS9  [#        [        R$                  " [)        XS S 2S4   -
  5      [)        XS S 2S4   -   5      5      [        R&                  " U	5      SS9  [        R*                  " X5      n[        R,                  " UR.                  UR0                  U5      n[#        UUS S 2S4   SS9  g )	Nra   r   r*   rA   rU   ro   gvIh%L=-a=)ru  r   rK  r  r  r]  r  r   indicesrG   ascontiguousarrayre  datary   rQ  r%   	qr_reducer   minimumr   absr  rq  r  rS  )rN   rO   rq   r   r.   r0   a_csrqr  qTyr  rS  r  r  ri  y_c_fullc_bandeds                     rQ   test_vs_fullTestGivensQR.test_vs_full  s   ]]1%
a %%aA. uuU]]_%ccAg WWQZ!^a''''w!A#w'%%fBHH=JJqA#&B'q$wZ1b- 	

199;?#$99;?457]]15EE	S

3s1X~#6#&s1X~#689;s9KRW	Y !!??133b1AU;rj   c                    SnU R                  U5      u  p#pE[        R                  " X$U5      nUR                  u  pxXR                  S   U-
  S-
  :X  d   eUR                  S S US-   2   n	[
        R                  " U	[
        R                  S9n	UR                  R                  XuS-   5      n
[        XU5      nUS S 2S 4   n[        X5      u  p[        R                  " XX5        [        UR                  UR                  SS9  [!        UR"                  UR"                  SS9  UR$                  UR$                  :X  d   e[        XSS9  g )	Nra   r   r*   rA   rU   ro   F)check_dtype)ru  r   rK  r   ry  rG   rz  re  r{  ry   rQ  rm  r%   r|  r   r  r   r  rS  )rN   rO   rq   r   r.   r0   r  r  rS  r  r  ri  r  RRr   s                  rQ   test_py_vs_compiled TestGivensQR.test_py_vs_compiled  s   ]]1%
a %%aA.WWQZ!^a''''w!A#w'%%fBHH=JJqA#&B'q$wZq%1b.acc.		188?uu}}U+rj   c                    SnU R                  U5      u  p#pE[        R                  " SUS-   [        S9n[        R
                  " X$XV5      u  pxn	UR                  S   n
[        R                  " X$U5      nXS S 2S 4   -  R                  5       nUR                  R                  XS-   45      nUR                  S S US-   2   R                  [        R                  5      n[        X}SS9  [!        X5        XR                  S   U-
  S-
  :X  d   eg )Nra   r*   rA   r   rU   ro   )ru  rG   rK   r  r%   data_matrixr   r   rK  tocsrr{  ry   ry  r  re  r   r   )rN   rO   rq   r   r.   r0   r  r  r  rS  r  r  a_wA_offset_s                  rQ   test_data_matrixTestGivensQR.test_data_matrix  s    ]]1%
aIIa1E* ,,Q182GGAJ%%aA.Dz!((*XXqA#h'++g1g&--bhh7E*(WWQZ!^a''''rj   c                 Z   SnU R                  U5      u  p#pE[        R                  X3S-  4   n[        R                  " X$U[        R
                  " U5      5      u  pgn[        XgU5      n	[        R                  " XgX5        [        X5      n
[        R                  " XhU5      n[        XSS9  g )Nra   r5   rn   ro   )
ru  rG   r  r%   r  rd   rQ  r|  rq  r   )rN   rO   rq   r   r.   r0   r  r  rS  ri  r/   r   s               rQ   test_fpbackTestGivensQR.test_fpback  s    ]]1%
aEE!T'N ,,Q1bll1oF2B'1b,1L__QA&E*rj   r%  N)
r&  r'  r(  r)  ru  r  r  r  r  r*  r%  rj   rQ   rs  rs    s    !<F,6("+rj   rs  c                     [         R                  R                  [         R                  R                  [         R                  R	                  [
        5      5      SU 5      $ )Nr{  )ospathr  abspathdirname__file__)basenames    rQ   	data_filer    s8    77<<(AB* *rj   c                   h    \ rS rSrS rS rS r\R                  R                  S5      S 5       r
Srg)	TestSmoothingSplinei   c                 l   [         R                  R                  S5      nSn[         R                  " UR	                  U5      S-  S-
  5      nUS-  [         R
                  " SU-  5      -  US-  -   UR                  SSU5      -   n[        [        5         [        X4SS  5        S S S 5        [        [        5         [        USS  U5        S S S 5        [        [        5         [        UR                  SU5      U5        S S S 5        [        [        5         [        US S S	2   U5        S S S 5        [         R                  " U5      nUS   US
'   [        [        5         [        XT5        S S S 5        [         R                  " S5      n[         R                  " S5      nSn[        R                  " [        US9   [        X45        S S S 5        g ! , (       d  f       GN1= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nr   r   r8   r5   r7   r9   r  r*   r3   r   z)``x`` and ``y`` length must be at least 5r#  )rG   rM   r   r   rH  r  normalrC   rE   r   ry   r  rK   r  r\   r   )rN   r   rO   rq   r   x_duplexception_messages          rQ   test_invalid_input&TestSmoothingSpline.test_invalid_input$  s   ii##D)GGC%%a(1,q01qD266!a%= 1a4'#**Ra*@@ :&!!qrU+ ':&!!AB%+ ':&!!))Aq/15 ' :&!!DbD'1- ' 1Iq	:&!&, ' IIaLGGAJG]]:->?!!' @?+ '&&&&& '& '& @?sH   G;G "G2HH9H%
G 
G/2
H 
H
H"%
H3c                     [         R                  " [        S5      5       nUS   nUS   nUS   nSSS5        [        WW5      " U5      n[	        UWSSSS9  g! , (       d  f       N.= f)	a}  
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.npzrq   r   y_GCVSPLNg-C6?F)rW   rX   r  )rG   loadr  r   r   )rN   r{  rq   r   r  y_comprs         rQ   test_compare_with_GCVSPL,TestSmoothingSpline.test_compare_with_GCVSPLC  sg    R WWY|,-S	AS	AJ'H . (1-a0 	4US .-s   A
A&c                    [         R                  R                  S5      nSn[         R                  " UR	                  U5      S-  S-
  5      nUS-  [         R
                  " SU-  5      -  US-  -   UR                  SSU5      -   n[        X4SS9n[        X4SS	S
9n[         R                  " US   US   SU-  5      n[        U" U5      U" U5      SS9  g)z~
In case the regularization parameter is 0, the resulting spline
is an interpolation spline with natural boundary conditions.
r   r   r8   r5   r7   r9   r  )lamrS  ro  r   r3   rU   ro   N)rG   rM   r   r   rH  r  r  r   r
   rc   r   )rN   r   rO   rq   r   
spline_GCVspline_interpgrids           rQ   test_non_regularized_case-TestSmoothingSpline.test_non_regularized_case{  s     ii##D)GGC%%a(1,q01qD266!a%= 1a4'#**Ra*@@*1R8
*1IF{{1Q42A.
4(%d+"	$rj   r5   c                 @   [         R                  R                  S5      nSn[         R                  " UR	                  U5      S-  S-
  5      nUS-  [         R
                  " SU-  5      -  US-  -   UR                  SSU5      -   n[        X45      nUR                  [        S5      SS	9 Hq  n[         R                  " U5      nS
Xv'   [        X4U5      n[        U" X6   5      XF   -
  5      n	[        U" X6   5      XF   -
  5      n
X:  d  M`  [        SU	S SU
S 35      e   g )Nr   r   r8   r5   r7   r9   r  ra   r   g      >@zJSpline with weights should be closer to the points than the original one: z.4z < )rG   rM   r   r   rH  r  r  r   choicer   r  r~  rE   )rN   r   rO   rq   r   r>  indr  spl_worigweighteds              rQ   test_weighted_smoothing_spline2TestSmoothingSpline.test_weighted_smoothing_spline  s    ii##D)GGC%%a(1,q01qD266!a%= 1a4'#**Ra*@@#A) ::eCjr:2C
AAF)!2E s16{QV+,D5=1612H  $CCG)3$,R="2 3 3 3rj   r%  N)r&  r'  r(  r)  r  r  r  r\   r  	fail_slowr  r*  r%  rj   rQ   r  r     s6    (>6Tp$& [[13 3rj   r  c           	        ^^^^^^	^
 U u  m	m
Uu  mm[        T5      T-
  S-
  nUTS-   :  d   e[        T5      T-
  S-
  mTTS-   :  d   e[        UUUUUU	U
4S j[        U5       5       5      n[        R                  " U5      $ )z-A naive 2D tensort product spline evaluation.r*   c           	   3      >#    U  H<  n[        T5        H)  nTX4   [        TTUT5      -  [        T	TUT5      -  v   M+     M>     g 7fr  )r   r+  )
r  ixiyr/   r0   nytxtyrq   r   s
      rQ   r  bspline2.<locals>.<genexpr>  sL      7!"E"Ib i!Aq"b/)AaBO;,5 <!s   AA)rJ  r  r   rG   rx   )r   r.   r/   r0   nxr  r  r  r  rq   r   s     ``  @@@@@rQ   bspline2r    s    DAqFB	R1qB!A#II	R1qB!A#II
 7 7b	7 7C::c?rj   c                 J   US:X  a  X2   U s=::  a  X2S-      :  a  S$   S$ X2U-      X2   :X  a  SnO$XU   -
  X2U-      X2   -
  -  [        XS-
  X#5      -  nX2U-   S-      X2S-      :X  a  SnXE-   $ X2U-   S-      U -
  X2U-   S-      X2S-      -
  -  [        XS-
  US-   U5      -  nXE-   $ )Nr   r*   r,   r9   r+  r  s         rQ   r+  r+    s    Avda(!aC&(s1(c11v~A$hQ3!$'!AsA/91Qx1qS6 7N !AhlQs1uXA#./!AsAaC2CC7Nrj   c                    ^ ^^^ [        T5      T-
  S-
  nUTS-   :  a  [        T5      U:  d   e[        UUUU 4S j[        U5       5       5      $ )Nr*   c              3   L   >#    U  H  nTU   [        TTUT5      -  v   M     g 7fr  r  r  s     rQ   r  bspline.<locals>.<genexpr>  s$     6Xqta1am#Xr  r  r  s   ```` rQ   r^  r^    sD    A
QA1H3q6Q;''6U1X666rj   c                   $    \ rS rSrSS jrS rSrg)
NdBSpline0i  c                     [        U5      nU[        UR                  5      ::  d   e [        U5        [        S U 5       5      U l        [        S U 5       5      U l        X l        g! [         a	    U4U-  n NGf = f)aW  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   N   #    U  H  n[         R                  " U5      v   M     g 7fr  )operatorindex)r  kis     rQ   r  &NdBSpline0.__init__.<locals>.<genexpr>  s     6Abx~~b))As   #%c              3   T   #    U  H  n[         R                  " U[        S 9v   M      g7f)rA   N)rG   rx   r  )r  tis     rQ   r  r    s     ?Qrrzz"E2Qs   &(N)rJ  r   rD   r3  r0   r.   r/   )rN   r.   r/   r0   r  s        rQ   rT  NdBSpline0.__init__  sv     1vs177|###	F
 6A66?Q??  	T	A	s   A( (A;:A;c                 l   [        U R                  5      n[        U5      U:X  d   eS/U-  n[        U5       H  nU R                  U   X   peU R                  U   nXeU   :X  a  XsU'   O[        R
                  " XV5      S-
  X4'   XSU      Us=::  a  XSU   S-      ::  d   e   eX4   U:  a  X4   [        U5      U-
  :  a  M   e   [        U5      nSn[        U5       Vs/ s H&  n[        X4   U R                  U   -
  X4   S-   5      PM(     n	n[        R                  " U	6  Hq  n
U R                  U
   [        R                  " [        U5       Vs/ s H/  n[        X   U R                  U   X   U R                  U   5      PM1     sn5      -  nX-  nMs     [        R                  " U5      $ s  snf s  snf )Nnoner*   r   )rJ  r.   r   r0   rG   r  r3  	itertoolsproductr/   prodr+  rx   )rN   rq   r  r  r  tdxdr0   resultitersidxterms               rQ   __call__NdBSpline0.__call__  s   466{1v~~ JtOtAVVAYq	A U{!r.2d8r/R!QZ/////419B!!333  !H
 <A$KHKqqtdffQi'2KH$$e,C66#;38;*@3>a +,AD$&&)SVTVVAY*O3>*@ "A ADNF - zz&!! I*@s   -F,6F1)r/   r0   r.   Nr7   )r&  r'  r(  r)  rT  r  r*  r%  rj   rQ   r  r    s    8"rj   r  c                      \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS r\R*                  R-                  SSS/5      \R*                  R-                  SSS/5      S 5       5       r\R*                  R-                  SSS/5      S 5       rS rS rS rS rS r\R*                  R<                  S  5       rS!r g)"TestNdBSplinei		  c                    [         R                  R                  S5      nSu  p#Sn[         R                  " UR	                  X#-   S-   S95      nUR	                  X$4S9n[        XVU5      n[        U4Xc5      nUR	                  SS9n	[        U" U	S S 2S 4   5      U" U	5      SS9  U" U	S S 2S 4   5      R                  U	R                  S	   UR                  S   4:X  d   eg )
Nr  r?   r   r*   r   r  rn   ro   r   )	rG   rM   r  r   r  r   r   r   r   )
rN   r   rO   r0   n_trr.   r/   rP   nbxis
             rQ   test_1DTestNdBSpline.test_1D	  s    ii##E*GGCKKQUQYK/0KKaYK'A!tQ"[[b[!2ag;"E	+"QW+$$!aggaj(AAAArj   c                     [         R                  " S5      nUS-  n[        XSS9nUS-  SU-  -   n[        XSS9nUR                  UR                  4nUR                  S S 2S 4   UR                  S S S 24   -  nXgS4$ )Nr   r7   r   r5   rG   rK   r
   r.   r/   rN   rq   r   r>  y_1r  t2r  s           rQ   make_2d_caseTestNdBSpline.make_2d_case	  s    IIaLqD +dQqSj"1Q/eeUWWUU1d7^eggdAg..qyrj   c                 X   [         R                  " S5      nUS-  n[        XSS9n[         R                  " S5      S-   nUS-  SU-  -   n[        XSS9nUR                  UR                  4nUR                  S S 2S 4   UR                  S S S 24   -  nXgUR
                  UR
                  4$ )Nr   r7   r   r   r  r5   )rG   rK   r
   r.   r/   r0   r  s           rQ   make_2d_mixedTestNdBSpline.make_2d_mixed*	  s    IIaLqD +IIaL3dQqSj"1Q/eeUWWUU1d7^eggdAg..suuegg%%rj   c                    / SQnU R                  5       u  p#nU VVs/ s H  u  pVUS-  US-  SU-  -   -  PM     nnn[        [        R                  " U Vs/ s H  n[	        XX45      PM     sn5      [        R                  " U5      SSS9  [        X#SS9n	U	" U5      R                  [        U5      4:X  d   e[        U	" U5      USS9  [        R                  R                  S	5      n
U
R                  S
S9S-  nU	" U5      nUR                  S:X  d   eUR                  S5      R                  u  pV[        UR                  5       US-  US-  SU-  -   -  SS9  g s  snnf s  snf )Nr  r>   )r>   r*   )r   r  r7   r5   Frn   rK  rW   r   ro   r  )r8   r7   r5   r   r   )r8   r7   )r3   r5   )r  r   rG   rx   r  r   r   rJ  rM   r  r  ry   r  ravel)rN   r  r  r  r0   rq   r   targetr   bspl2r   r  s               rQ   test_2D_separableTestNdBSpline.test_2D_separable9	  sQ   /%%'	467B&1!Q$!Q$1*%B7 	

b#IbHRR$;b#IJ

6*$)"	$ "A&Ry3r7+---b	U	, ii##E*[[i[(1,r||v%%% zz'"$$11qs
+%	9- 8 $Js   EE c                    Sn/ SQnU VVs/ s H  u  p4US-  US-  SU-  -   -  PM     nnnU R                  5       u  pgn[        R                  " XwXw45      n	Sn
[        XiSS9nU" U
5      n[        XgU5      " U
5      nUR                  S:X  d   e[        UU/S-  SS	9  U" U5      R                  [        R                  " U5      S S
 UR                  R                  US  -   :X  d   e[        U" U5      [        R                  " U5      S S 2S 4   SSS9  U	R                  S5      n[        XnSS9nU" U
5      nUR                  S:X  d   e[        UX/X//SS	9  U" U5      R                  [        R                  " U5      S S
 UR                  R                  US  -   :X  d   e[        U" U5      [        R                  " U5      S S 2S S 4   SSS9  g s  snnf )Nr5   r  r7   r  r   r8   r8   rn   ro   r3   FgvIh%,=r  r   r   r5   r5   )r5   r5   )	r  rG   r  r   r   r   r/   rx   ry   )rN   r  r  rq   r   r  r  r  r0   c2_4r   bspl2_4r  
val_singlec2_22bspl2_22s                   rQ   test_2D_separable_2!TestNdBSpline.test_2D_separable_2U	  s   /467B&1!Q$!Q$1*%B7%%'	yy"")*B*rq)"-
||t####q(u	6
 r{  BHHRL"$5		8N$NNNNbjj&8D&A$)"	$
 \*R!,"||v%%%$1$139>	@ ""Sb!HJJ$4$4TU$;;< 	= <bjj&8D$&G$)"	$E 8s   Gc                    / SQnU VVs/ s H  u  p#US-  US-  SU-  -   -  PM     nnnU Vs/ s H
  oUSU-  -   PM     nnU R                  5       u  pgnUS-  n[        R                  " XwXw45      n	Sn
[        XiSS9nU" U
5      n[        XgU5      " U
5      nUR                  S:X  d   e[        UU/S	-  S
S9  g s  snnf s  snf )Nr  r7   r5   y               @r,  r  r   r  r8   rn   ro   )r  rG   r  r   r   r   )rN   r  rq   r   r  r.   r  r  r0   r  r   r  r  r  s                 rQ   test_2D_separable_2_complex)TestNdBSpline.test_2D_separable_2_complex	  s    /467B&1!Q$!Q$1*%B7$*+Fqbd(F+%%'	6]yy"")*B*rq)"-
||t####q(u	6 8+s
   B9B?c                    [         R                  R                  S5      nSn[         R                  SSSS[         R                  " UR                  SS95      S-  SSSS4	   n[         R                  SSSS[         R                  " UR                  SS95      S-  SSSS4	   nUR                  UR                  U-
  S-
  UR                  U-
  S-
  4S9n[        X44XRS	9nS
n[        U" U5      [        XsU4XR5      SS9  [         R                  / SQ/ SQ4   n[        U" U5      U Vs/ s H  n[        XU4XR5      PM     snSS9  g s  snf )Nr  r7   r   r   r   r   r8   r*   r   )r,   r,   rn   ro   r*   r  r5   皙?g? @)rG   rM   r  r   r   r  r   r   r   r  r  )	rN   r   r0   r  r  r/   r>  r  r   s	            rQ   test_2D_randomTestNdBSpline.test_2D_random	  s9   ii##E*UU1aArwws{{{':;a?Aq!KLUU1aArwws{{{':;a?Aq!KLKKbggaik27719Q;7K8!)B "Xq45	B UU;"# $B@BC""2h5C"	$Cs   &E
c                    U R                  5       u  pp4/ SQnU VVs/ s H  u  pgUS-  US-  SU-  -   -  PM     nnn[        XX44S9n	U	" U5      R                  [        U5      4:X  d   e[	        U	" U5      USS9  g s  snnf )N)ffffff?r  )r>   g333333@)r  r  r7   r5   r   rn   ro   )r  r   r   rJ  r   )
rN   r  r  kxkyr  rq   r   r  r  s
             rQ   test_2D_mixedTestNdBSpline.test_2D_mixed	  s    ++-1467B&1!Q$!Q$1*%B7"RH-Ry3r7+---b	U	, 8s   A<c                 v   U R                  5       u  pp4/ SQn[        XX44S9nU" USS9n[        UU VV	s/ s H  u  pSUS-  -  U	S-  SU	-  -   -  PM     sn	nSS9  U" US	S9n[        UU VV	s/ s H  u  pSUS-  -  SU	-  S-   -  PM     sn	nSS9  U" US
S9n[        UU VV	s/ s H  u  pUS-  U	S-  SU	-  -   -  PM     sn	nSS9  [        [        5         U" USS9nS S S 5        [        [        5         U" USS9nS S S 5        g s  sn	nf s  sn	nf s  sn	nf ! , (       d  f       N@= f! , (       d  f       g = f)Nr  r   r  r   r7   r5   rn   ro   r*   r*   )r   r   )r3   r   )r3   r   r*   )r  r   r   rC   rE   )
rN   r  r  r  r  r  r  r   rq   r   s
             rQ   test_2D_derivative TestNdBSpline.test_2D_derivative	  sM   ++-1"RH-B6";=>2411a41a4!A#:.2>U	L B6"8:;1a41Q37+;%	I B6"9;<AA!,<5	J :&w'C ' :&z*C '& ? < =&& '&s)    D.D$DD6D*
D'*
D8c                 j   [         R                  R                  S5      nSu  p#[         R                  SSSS[         R                  " UR                  SS95      S-  SSSS4	   n[         R                  SSSS[         R                  " UR                  SS95      S-  SSSS4	   nUR                  UR                  U-
  S	-
  UR                  U-
  S	-
  4S9n[         R                  / S
Q/ SQ4   n[        XE4XbU4S9n[        XE4XbU4S9n	[        U" U5      U V
s/ s H
  o" U
5      PM     sn
SS9  g s  sn
f )Nr  )r5   r7   r   r   r   r7   r   r8   r*   r  r  r   rn   ro   )rG   rM   r  r   r   r  r   r  r   r  r   rN   r   r  r  r  r  r/   r  r  bspl2_0r6  s              rQ   test_2D_mixed_random"TestNdBSpline.test_2D_mixed_random	  s(   ii##E*UU1aArwws{{{':;a?Aq!KLUU1aArwws{{{':;a?Aq!KLKKbgglQ."q0@AKBUU;"# $ 2(Ab2bXqH5b	/12rr2	@2s   D0
c                    [         R                  " S5      n[         R                  " S5      S-   n[        XS-  SS9n[        X"S-  SU-  -   SS9nUR                  S S 2S 4   UR                  S S S 24   -  n[	        UR
                  UR
                  4XSR                  UR                  45      nUS-  S S 2S 4   US-  SU-  -   S S S 24   -  n[        X4U5      n[        R                  " X5       V	V
s/ s H  u  pX4PM
     nn	n
U" U5      n[         R                  " U5      R                  5       (       a   e[        X" U5      SS9  [        UR                  UR                  5      USS9  g s  sn
n	f )	Nr   r   r  r7   r   r5   rn   ro   )rG   rK   r
   r/   r   r.   r0   r   r  r  r   anyr   ry   r   )rN   rq   r   spl_xspl_yr   r{   valuesrgir  rP   r  bxis                rQ   test_tx_neq_tyTestNdBSpline.test_tx_neq_ty	  sE   IIaLIIaL3"1da0"1dQqSjA6WWQWa 00%''577+R''5771CDQ$4AqD1Q3Ja#88%qff5!*!2!21!89!8qf!892h88C=$$&&&&SW51FLL16F :s   4E.c                 p   [         R                  " S5      nUS-  n[        XSS9nUS-  SU-  -   n[        XSS9nUS-  SU-  -   S-   n[        XSS9nUR                  UR                  UR                  4nUR                  S S 2S S 4   UR                  S S S 2S 4   -  UR                  S S S S 24   -  n	XS4$ )Nr   r7   r   r5   r*   r  )
rN   rq   r   r>  r  r  y_2rL  r  r  s
             rQ   make_3d_caseTestNdBSpline.make_3d_case	  s    IIaLqD +dQqSj"1Q/dQqSj1n"1Q/eeUWWegg&eeAtTM"ggdAtm$%ggdD!m$% qyrj   c                 n   [         R                  R                  S5      nUR                  SS9S-  u  p#nUS-  US-  SU-  -   -  US-  SU-  -   S-   -  nU R	                  5       u  pgn[        XgSS9n	[        X#U5       V
s/ s H  oPM     nn
U	" U5      nUR                  S	:X  d   e[        XS
S9  g s  sn
f )Nr  r7   r@   r   r   r7   r5   r*   r   )r@   rn   ro   )	rG   rM   r  r  r/  r   zipr   r   )rN   r   rq   r   r  r  t3c3r0   bspl3r   r  r  s                rQ   test_3D_separableTestNdBSpline.test_3D_separable	  s    ii##E*++7++a/aAA!$1qs
Q7%%'	"A&Q1&Aa&r||u$$$U3 's    B2c                    U R                  5       u  pn[        XSS9n[        R                  R	                  S5      nUR                  SS9S-  u  pgn[        XgU5       V	s/ s H  oPM     n
n	[        U" U
SS9SUS	-  -  US-  S	U-  -   -  US-  SU-  -   S
-   -  SS9  [        U" U
SS9SU-  US-  S	U-  -   -  US-  SU-  -   S
-   -  SS9  [        U" U
SS9SU-  SUS	-  -  S	-   -  US-  SU-  -   S
-   -  SS9  [        U" U
SS9SU-  SUS	-  -  S	-   -  S-  SS9  [        U" U
SS9[        R                  " [        U
5      5      SS9  g s  sn	f )Nr7   r   r  r2  r   r   )r*   r   r   r   r5   r*   rn   ro   )r5   r   r   r   )r5   r*   r   )r5   r*   r7   )r5   r*   r8   )
r/  r   rG   rM   r  r  r3  r   rQ  rJ  )rN   r4  r5  r0   r6  r   rq   r   r  r   r  s              rQ   test_3D_derivative TestNdBSpline.test_3D_derivative
  s   %%'	"A&ii##E*++7++a/aQ1&Aa&bY/!Q$!Q$1*-A!a@u	N 	bY/!q!tacz*adQqSj1n=E	K 	bY/!qAvz*adQqSj1n=E	K 	bY/!qAvz*a0u	> 	bY/R)	7 's    E
c                 <   [         R                  R                  S5      nSn[         R                  SSSS[         R                  " UR                  SS95      S-  SSSS4	   n[         R                  SSSS[         R                  " UR                  SS95      S-  SSSS4	   n[         R                  SSSS[         R                  " UR                  SS95      S-  SSSS4	   nUR                  UR                  U-
  S-
  UR                  U-
  S-
  UR                  U-
  S-
  4S9n[        X4U4XbS	9n[        X4U4XbS	9nS
n	[        U" U	5      U" U	5      SS9  [         R                  / SQ/ SQ/ SQ4   n	[        U" U	5      U	 V
s/ s H
  o" U
5      PM     sn
SS9  g s  sn
f )Nr  r7   r   r   r   r   r8   r*   r   )r,   r,   r*   rn   ro   r  r  g?r  gffffff?)rG   rM   r  r   r   r  r   r   r  r   r  )rN   r   r0   r  r  tzr/   r>  spl_0r  r6  s              rQ   test_3D_randomTestNdBSpline.test_3D_random"
  s   ii##E*UU1aArwws{{{':;a?Aq!KLUU1aArwws{{{':;a?Aq!KLUU1aArwws{{{':;a?Aq!KLKKbggaik27719Q;	!DKEa-BB<0Br7UU;""# $ 	Bb!9b%)b!9F!9s   F
c                    [         R                  R                  S5      nSn[         R                  SSSS[         R                  " UR                  SS95      S-  SSSS4	   n[         R                  SSSS[         R                  " UR                  SS95      S-  SSSS4	   n[         R                  SSSS[         R                  " UR                  SS95      S-  SSSS4	   nUR                  UR                  U-
  S-
  UR                  U-
  S-
  UR                  U-
  S-
  4S9UR                  UR                  U-
  S-
  UR                  U-
  S-
  UR                  U-
  S-
  4S9S	-  -   n[        X4U4XbS
9n[        X4U4UR                  US
9n[        X4U4UR                  US
9n	[         R                  / SQ/ SQ/ SQ4   n
[        U" U
5      U" U
5      S	U	" U
5      -  -   SS9  g )Nr  r7   r   r   r   r   r8   r*   r+   r   r  r  r=  rn   ro   )rG   rM   r  r   r   r  r   r   r   r   r  r   )rN   r   r0   r  r  r>  r/   r>  r  r  r  s              rQ   test_3D_random_complex$TestNdBSpline.test_3D_random_complex5
  s   ii##E*UU1aArwws{{{':;a?Aq!KLUU1aArwws{{{':;a?Aq!KLUU1aArwws{{{':;a?Aq!KL[[rwwqy{BGGAIaK1E[F[[rwwqy{BGGAIaK1E[FrIJ a-BB<15BB<15UU;""# $ 	Br
Rr
]2	@rj   
cls_extrapNTcall_extrapc                 4   U R                  5       u  p4n[        X4SUS9n/ SQ/ SQ/ SQpn[        [        R                  XxU	45      u  pxn	[        XxU	5       V
s/ s H  oPM     nn
US-  US-  SU-  -   -  U	S-  SU	-  -   S-   -  nU" XS9n[        XS	S
9  g s  sn
f Nr7   )r0   rw   )r3   r   )r<  r  r  )r3   g            @r5   r*   rv   rn   ro   r/  r   r   rG   rx   r3  r   )rN   rE  rF  r4  r5  r0   r6  rq   r   r  r   r  r  r  s                 rQ   test_extrapolate_3D_separable+TestNdBSpline.test_extrapolate_3D_separableH
  s     %%'	"A:> abjj1),aQ1&Aa&AA!$1qs
Q7r3U3	 's   Br   )FT)TNc                 <   U R                  5       u  p#nUu  pV[        X#SUS9n/ SQ/ SQ/ SQpn[        [        R                  XU
45      u  pn
[        XU
5       Vs/ s H  oPM     nnUS-  U	S-  SU	-  -   -  U
S-  SU
-  -   S-   -  nU" XS9n[        XS	S
9  g s  snf rH  rK  )rN   r   r4  r5  r0   rE  rF  r6  rq   r   r  r   r  r  r  s                  rQ   test_extrapolate_3D_separable_2-TestNdBSpline.test_extrapolate_3D_separable_2X
  s     %%'	"(
"A:> abjj1),aQ1&Aa&AA!$1qs
Q7r3U3	 's   Bc                    U R                  5       u  pn[        XSS9n/ SQ/ SQ/ SQpvn[        [        R                  XVU45      u  pVn[        XVU5       Vs/ s H  oPM     n	nUS-  US-  SU-  -   -  US-  SU-  -   S-   -  n
U" U	SS	9n[        R                  " US
   5      (       d   e[        R                  " US   5      (       d   e[        USS U
SS SS9  g s  snf )Nr7   r   )rI  r*   r   )r<  r   r  )r3   r  rJ  r5   r*   Frv   r   r3   rn   ro   )r/  r   r   rG   rx   r3  r   r   )rN   r4  r5  r0   r6  rq   r   r  r   r  r  r  s               rQ   #test_extrapolate_false_3D_separable1TestNdBSpline.test_extrapolate_false_3D_separablei
  s    %%'	"A& nnabjj1),aQ1&Aa&AA!$1qs
Q7ru-xxq	""""xxr
####qfQrl? 's   Cc           	         U R                  5       u  pn[        XSS9n[        R                  " SS[        R                  SSS[        R                  /5      n[        R                  " SSS[        R                  SS	S	/5      n[        R                  " S
SSS[        R                  SS/5      n[        XVU5       Vs/ s H  oPM     n	nUS-  US-  SU-  -   -  US-  SU-  -   S-   -  n
[        R                  " U5      [        R                  " U5      -  [        R                  " U5      -  n[        R                  X'   U" U	5      n[        R                  " X   5      R                  5       (       d   e[        XSS9  g s  snf )Nr7   r   rI  r*   r5   r   r<  r  r  r3   rJ  rn   ro   )	r/  r   rG   rx   rI   r3  r   r   r   )rN   r4  r5  r0   r6  rq   r   r  r   r  r  r   r  s                rQ   test_x_nan_3DTestNdBSpline.test_x_nan_3Dy
  s<   %%'	"A& JJArvvq!Q78JJCBFFAsC89JJCArvvsC89Q1&Aa&AA!$1qs
Q7xx{RXXa[(288A;6vvrxx%))++++U3 's   ;E>c           	         [         R                  R                  S5      nSu  p#[         R                  " UR	                  SSSS95      n[         R
                  US   4U-  XDS   4U-  4   n[         R                  " UR	                  SSSS95      n[         R
                  US   4U-  XUS   4U-  4   nUS S S2   R                  R                  (       a   eUS S S2   R                  R                  (       a   eUR	                  UR                  S-  U-
  S	-
  UR                  S-  U-
  S	-
  4S
9nUR                  nUR                  R                  (       a   e[         R                  / SQ/ SQ4   n[        US S S2   US S S2   4XbU4S9n[        US S S2   US S S2   4XbU4S9n	[        U" U5      U V
s/ s H
  o" U
5      PM     sn
SS9  g s  sn
f )Nr  r7   r7   r   r8      r  r3   r5   r*   r   r  r  r   rn   ro   )rG   rM   r  r   r  r   flagsc_contiguousr   r  r  r   r  r   r   s              rQ   test_non_c_contiguous#TestNdBSpline.test_non_c_contiguous
  s   ii##E*WWS[[QQR[89UUBqE8B;VIbL01WWS[[QQR[89UUBqE8B;VIbL01cc7==----cc7==----KKbggqj2o1277A:?Q3FGKHCC77''''UU;"# $ 2cc7BssG,a8<b1gr#A#w/2h?b	/12rr2	@2s   7G
c                     U R                  5       u  pn[        XSS9n[        S5       H  nSX   R                  l        M     SUR                  l        [        XSS9nU" S5      U" S5      :X  d   eg )Nr7   r   Frl   )r/  r   r   rZ  	writeable)rN   r4  r5  r0   r6  r  bspl3_s          rQ   test_readonlyTestNdBSpline.test_readonly
  sl    %%'	"A&qA$)BEKK! "2Q'Y6)#4444rj   c                 v   U R                  5       u  pn[        R                  " / SQ/ SQ/5      n[        XU5      R	                  XAU5      n[        R                  " XAX3U/5      nUR
                  S   UR
                  S   :X  d   e[        UR                  5       UR                  5       SS9  [        [        5         [        R                  " / SQX/S-  5        S S S 5        [        [        SS9   [        R                  " S	S
//X/S-  5        S S S 5        g ! , (       d  f       ND= f! , (       d  f       g = f)Nrl   )r8   r   r   r   gؗҜ<ro   r7   zData and knots*r#  r*   r5   )
r/  rG   rx   r   rK  r   r   r]  rC   rE   )rN   r4  r5  r0   r  dmdm1s          rQ   test_design_matrix TestNdBSpline.test_design_matrix
  s    %%'	ZZI./rq!//:%%bqQi8xx{bhhqk)))

ckkm%@:&##Ir3q59 ' :->?##aVHb#a%8 @? '& @?s   =D1D*
D'*
D8c                    [         R                  R                  S5      nSn[         R                  SSSS[         R                  " UR                  SS95      S-  SSSS4	   n[         R                  SSSS[         R                  " UR                  SS95      S-  SSSS4	   n[         R                  SSSS[         R                  " UR                  SS95      S-  SSSS4	   nUR                  UR                  U-
  S-
  UR                  U-
  S-
  UR                  U-
  S-
  4S9n[        X4U4XbS	9nS
 n[        SX5        g )Nr  r7   r   r   r   r   r8   r*   r   c                 L    [         R                  / SQ/ SQ/ SQ4   nU" U5        g )Nr  r  r=  )rG   r  )r   r>  r  s      rQ   r  1TestNdBSpline.test_concurrency.<locals>.worker_fn
  s&    {&&' (B Grj   ra   )	rG   rM   r  r   r   r  r   r   r!   )	rN   r   r0   r  r  r>  r/   r>  r  s	            rQ   r  TestNdBSpline.test_concurrency
  s%   ii##E*UU1aArwws{{{':;a?Aq!KLUU1aArwws{{{':;a?Aq!KLUU1aArwws{{{':;a?Aq!KLKKbggaik27719Q;	!DKEa-	 	 I3rj   r%  )!r&  r'  r(  r)  r  r  r  r  r  r  r  r  r  r"  r+  r/  r7  r:  r@  rC  r\   r  r  rL  rO  rR  rU  r\  ra  rf  r  r  r*  r%  rj   rQ   r  r  		  s   B"&98($V6&$&,+2@ G(&47,G&@& [[\D$<8[[]T4L94 : 94 [[X|'DE4 F4 @ 4$@2
59 [[4 4rj   r  c                   >   \ rS rSrS rS r\R                  R                  S/ SQ5      S 5       r	S r
S rS	 r\R                  R                  S
\R                  \R                  /5      S 5       rS r\R                  R                  S/ SQ5      S 5       rS rSrg)
TestMakeNDi
  c                 \   [         R                  " S5      n[         R                  " S5      S-   nUS S 2S 4   S-  US-  SU-  -   S S S 24   -  n[        R                  " X5       VVs/ s H  u  pEXE4PM
     nnn[	        X4USS9n[        U" U5      UR                  5       SS9  [        XS-  SS9n[        X"S-  SU-  -   SS9n	UR                  S S 2S 4   U	R                  S S S 24   -  n
[        XR                  S	S
S9  S
SK	J
n  U" X4USS9n[        U" U5      U" U5      SS9  g s  snnf )Nr   r   r7   r5   r*   r   rU   ro   r  r   rV   )r   linearr  rn   )rG   rK   r  r  r"   r   r  r
   r/   scipy.interpolater   )rN   rq   r   r(  r  rP   r  r{   r&  r'  r   RGIr)  s                rQ   test_2D_separable_simple#TestMakeND.test_2D_separable_simple
  s$   IIaLIIaL31d7Q!Q$1*dAg!66!*!2!21!89!8qf!89A66Q/R&,,.u= #1da0"1dQqSjA6WWQWa 00FFQ7 	E1&&2Bb6 :s   (D(c                    [         R                  " S5      n[         R                  " S5      n[        R                  " X5       VVs/ s H  u  p4X44PM
     nnnUS S 2S 4   S-  US-  SU-  -   S S S 24   -  n[         R                  " XfXf45      n[        X4US[        R                  S9nU" U5      n	[         R                  " XfXf45      R                  [        5      n
U	R                  S:X  d   e[        U	R                  SSS5      U
SS9  UR                  S	5      n[        X4US[        R                  S9nU" U5      n	U	R                  S
:X  d   e[        U	R                  SSSS5      U
R                  S	5      SS9  g s  snnf )Nr   r7   r5   r0   solver)$   r8   r8   rn   ro   r  )rw  r5   r5   )rG   rK   r  r  r  r"   sslspsolver  r  r   r   ry   )rN   rq   r   r  rP   r  r(  values4r{   r  r  values22s               rQ   test_2D_separable_trailing_dims*TestMakeND.test_2D_separable_trailing_dims
  sZ   IIaLIIaL!*!2!21!89!8qf!89 1d7Q!Q$1*dAg!66))VV<=A67aDbFF;<CCEJ||w&&&q!Q/U	, ??<0A68qEb||z)))q!Q2|45	B' :s   E>r0   )rX  r  )r7   r*   )r*   r7   r4  c                 t   [         R                  " S5      n[         R                  " S5      S-   n[        R                  " X#5       VVs/ s H  u  pEXE4PM
     nnnUS-  S S 2S 4   US-  SU-  -   S S S 24   -  n[	        X#4Xq[
        R                  S9n[        U" U5      UR                  5       SS9  g s  snnf )	Nr   r   r  r7   r5   ru  rU   ro   )	rG   rK   r  r  r"   rx  ry  r   r  )	rN   r0   rq   r   r  rP   r  r(  r{   s	            rQ   r  TestMakeND.test_2D_mixed  s     IIaLIIaL3!*!2!21!89!8qf!89Q$4AqD1Q3Ja#88A66s{{CR&,,.u=	 :s   	B4c           	          [         R                  " / SQ5      n[         R                  " / SQ5      n[         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      nXU4$ )N)r   r:   r;   r<   r  r  )r*   r5   r*   r5   r*   r*   )r*   r5   r7   r5   r*   r*   )r*   r5   r5   r5   r*   r*   )rG   r=  r  s       rQ   _get_sample_2d_dataTestMakeND._get_sample_2d_data  sP    HH./HH./HH""""""	
 Qwrj   c                     U R                  5       u  pn[        X4USS9n[        X4USS9n[        R                  " / SQ/ SQ/5      R
                  n[        U" U5      U" U5      SS9  g )	Nr*   r   ro  r  r*   gffffff@g333333@r   ffffff
@333333?r7   r*   r  r  r<   rk  r,   r7   rn   ro   r  r"   r   rG   r=  r  r   rN   rq   r   r  r{   r)  r  s          rQ   test_2D_vs_RGI_linear TestMakeND.test_2D_vs_RGI_linear  sk    **,aA61*%qfaAXX668 99: 	 	R#b'6rj   c                     U R                  5       u  pn[        X4US[        R                  S9n[	        X4USS9n[
        R                  " / SQ/ SQ/5      R                  n[        U" U5      U" U5      SS9  g )	Nr7   ru  cubic_legacyr  r  r  rn   ro   	r  r"   rx  ry  r   rG   r=  r  r   r  s          rQ   test_2D_vs_RGI_cubicTestMakeND.test_2D_vs_RGI_cubic'  sq    **,aA61#++>%qfaGXX668 99: 	 	R#b'6rj   rv  c                     U R                  5       u  p#n[        X#4USUSS9n[        X#4USS9n[        R                  " / SQ/ SQ/5      R
                  n[        U" U5      U" U5      SS	S
9  g )Nr7   gư>)r0   rv  rX   r  r  r  r  rn   r   rV   r  )rN   rv  rq   r   r  r{   r)  r  s           rQ   test_2D_vs_RGI_cubic_iterative)TestMakeND.test_2D_vs_RGI_cubic_iterative1  ss     **,aA61&tD%qfaGXX668 99: 	 	R#b'DArj   c                     U R                  5       u  pn[        X4US[        R                  S9n[	        X4USS9n[
        R                  " / SQ/ SQ/5      R                  n[        U" U5      U" U5      SS9  g )	Nr   ru  quintic_legacyr  r  r  rn   ro   r  r  s          rQ   test_2D_vs_RGI_quintic!TestMakeND.test_2D_vs_RGI_quintic@  sr    **,aA61#++>%qfa8HIXX668 99: 	 	R#b'6rj   zk, meth))r*   ro  )r7   r  )r   r  c                    [         R                  R                  S5      n[         R                  " UR	                  SS95      n[         R                  " UR	                  SS95      n[         R                  " UR	                  SS95      nUR	                  SS9n[        XEU4Xq[        R                  S9n[        XEU4XrS9n	[         R                  R	                  S	S
SS9n
[        U" U
5      U	" U
5      SS9  g )Ni@ r   r   r   r   r1  ru  r  gffffff?r  r?   r  rn   ro   )
rG   rM   r  cumsumr  r"   rx  ry  r   r   )rN   r0   methrndmrq   r   r  r(  r{   r)  r  s              rQ   test_3D_random_vs_RGI TestMakeND.test_3D_random_vs_RGIJ  s     yy$$V,IIdlll*+IIdlll*+IIdlll*+9-A!9f#++F%qQiEYY3Sw?R#b'6rj   c                 <   U R                  5       u  pnSS0n[        [        SS9   [        X4U4SS0UD6  S S S 5        [        [        SS9   [        X4[        R
                  " X345      4SS0UD6  S S S 5        g ! , (       d  f       NK= f! , (       d  f       g = f)Nmaxiterr*   rv  r#  r0   r7   )r  rC   rE   r"   rG   r  )rN   rq   r   r  solver_argss        rQ   test_solver_err_not_converged(TestMakeND.test_solver_err_not_convergedZ  s    **,a !n:X66Q6+6 7 :X6		1& 1FQF+F 76 76 76s   A<&B<
B

Br%  N)r&  r'  r(  r)  rr  r|  r\   r  r  r  r  r  r  rx  gmresgcrotmkr  r  r  r  r*  r%  rj   rQ   rm  rm  
  s    7(B4 [[S"JK> L> 77 [[X		3;;'?@B AB7 [[N77Grj   rm  c                   P    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rSrg)
TestFpchecid  c                    Sn[         R                  " S5      R                  SS5      n[         R                  " S5      n[        R                  " [
        SS9   [        R                  " X2U5        S S S 5        [        R                  " [
        SS9   [        R                  " X#U5        S S S 5        g ! , (       d  f       NH= f! , (       d  f       g = f)Nr*   r@  r5   r   z1D sequencer#  )rG   rK   ry   r\   r   rE   _bfpcheckrN   r0   r.   rq   s       rQ   test_1D_x_tTestFpchec.test_1D_x_tg  s    IIbM!!!Q'IIbM]]:];JJqQ < ]]:];JJqQ <; <; <;s   B2C2
C 
Cc                    SnSUS-   -  S-
  nUS-   n[         R                  " U5      n[         R                  " U5      n[        R                  " XTU5      S:X  d   e[        R
                  " [        SS9   [        R                  " XTU5        S S S 5        SUS-   -  S-   nX!-
  S-
  n[         R                  " U5      n[         R                  " U5      n[        R                  " XTU5      S:X  d   e[        R
                  " [        SS9   [        R                  " XTU5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr7   r5   r*   r@   ra   z	Need k+1*r#  )	rG   rK   dfitpackfpchecr\   r   rE   r  r  )rN   r0   rO   r  r.   rq   s         rQ   test_condition_1TestFpchec.test_condition_1r  s    AY]FIIaLIIaLqQ'2---]]:[9JJqQ : qsGaKEAIIIaLIIaLqQ'2---]]:[9JJqQ :9 :9 :9s   5D*	D;*
D8;
E	c                    SnS/US-   -  S/-   S/US-   -  -   n/ SQn[         R                  " X2U5      S:X  d   e[        R                  " X2U5      b   eUR	                  5       nUS   US'   [         R                  " X4U5      S:X  d   e[
        R                  " [        S	S
9   [        R                  " X4U5        S S S 5        UR	                  5       nUS   US'   [         R                  " X4U5      S:X  d   e[
        R                  " [        SS
9   [        R                  " X4U5        S S S 5        g ! , (       d  f       N}= f! , (       d  f       g = f)Nr7   r   r*   r5   r   )r*   r5   r7   r8   r  r3   r   zLast k knots*r#  zFirst k knots*r  r  r  r  r  r\   r   rE   )rN   r0   r.   rq   tts        rQ   test_condition_2TestFpchec.test_condition_2  s    C1IOqc1Q3i'qQ'1,,,zz!"***VVXA2qa(B...]]:_=JJqa  > VVX21qa(B...]]:-=>JJqa  ?> >= ?>s   #D2E2
E 
Ec                    SnS/US-   -  SS/-   S/US-   -  -   n/ SQn[         R                  " X2U5      S:X  d   e[        R                  " X2U5      b   eS/US-   -  SS/-   S/US-   -  -   n[         R                  " X2U5      S:X  d   e[        R
                  " [        SS	9   [        R                  " X2U5        S S S 5        g ! , (       d  f       g = f)
Nr7   r   r*   r5   r   r*   r5   r7   r  r8   r     zInternal knots*r#  )r  r  r  r  r\   r   rE   r  s       rQ   test_condition_3TestFpchec.test_condition_3  s    C1IA!ac*"qQ'1,,,zz!"***C1IA!ac*qQ'2---]]:->?JJqQ @??s   $C
Cc                 J   SnS/US-   -  S/US-   -  -   n/ SQn[         R                  " X2U5      S:X  d   e[        R                  " X2U5      b   eUR	                  5       nUS   US'   [         R                  " XBU5      S:X  d   e[        R                  " X2U5      b   eUR	                  5       nUS   S-
  US'   [         R                  " XBU5      S:X  d   e[
        R                  " [        SS9   [        R                  " XBU5        S S S 5        UR	                  5       nUS	   S-   US	'   [         R                  " XBU5      S:X  d   e[
        R                  " [        SS9   [        R                  " XBU5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)
Nr7   r   r*   r   r  rE  zOut of bounds*r#  r3   r  )rN   r0   r.   rq   rg   s        rQ   test_condition_4TestFpchec.test_condition_4  si    C1IQqS	!"qQ'1,,,zz!"***VVX!1ra(A---zz!"***VVX!q1ra(B...]]:-=>JJra  ? VVX22ra(B...]]:-=>JJra  ?> ?> ?>s   1F"F
F
F"c                    Sn/ SQn/ SQn[         R                  " X2U5      S:X  d   e[        R                  " [        SS9   [
        R                  " X2U5        S S S 5        / SQn[         R                  " X2U5      S:X  d   e[        R                  " [        SS9   [
        R                  " X2U5        S S S 5        g ! , (       d  f       Ni= f! , (       d  f       g = f)Nr*   )r   r   r*   r5   r5   )r  r  r  rm   Schoenberg-Whitney*r#  )r   r   r   r  r  r\   r   rE   r  r  r  s       rQ   test_condition_5_x1xm TestFpchec.test_condition_5_x1xm  s    qQ'2---]]:-BCJJqQ D qQ'2---]]:-BCJJqQ DC DC
 DCs   B<C<
C

Cc                     Sn/ SQnSS/n[         R                  " X2U5      S:X  d   e[        R                  " X2U5      b   eg )Nr*   )r   r   r*   r*   r   g333333?r   )r  r  r  r  r  s       rQ   test_condition_5_k1TestFpchec.test_condition_5_k1  sE    #JqQ'1,,,zz!"***rj   c                    SnS/US-   -  S/-   S/US-   -  -   nS/S-  n[         R                  " X2U5      S:X  d   e[        R                  " [        SS9   [
        R                  " X2U5        S S S 5        S/US-   -  S/-   S/US-   -  -   nS/S-  n[         R                  " X2U5      S:X  d   e[        R                  " [        SS9   [
        R                  " X2U5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)	Nr7   r   r*   r5   r   rm   r  r#  r  r  s       rQ   test_condition_5_1TestFpchec.test_condition_5_1  s    C1IOqc1Q3i'CEqQ'2---]]:-BCJJqQ D C1IOqc1Q3i'CEqQ'2---]]:-BCJJqQ DC DC DCs   C*	C;*
C8;
D	c                    SnS/US-   -  SS/-   S/US-   -  -   nS/S-  S/-   n[         R                  " X2U5      S:X  d   e[        R                  " [        S	S
9   [
        R                  " X2U5        S S S 5        S/S-  SS/-   n[         R                  " X2U5      S:X  d   e[
        R                  " X2U5      b   eg ! , (       d  f       NQ= f)Nr7   r   r*   r5   r   r  r8   rm   r  r#  r  r  s       rQ   test_condition_5_2TestFpchec.test_condition_5_2  s    C1IA!ac*E!GqcMqQ'2---]]:-BCJJqQ D E!Gq!fqQ'1,,,zz!"*** DCs   B>>
Cc                     Sn/ SQn/ SQn[         R                  " X2U5      S:X  d   e[        R                  " [        SS9   [
        R                  " X2U5        S S S 5        g ! , (       d  f       g = f)Nr*   )	r   r   r5   r7   r8   r   r   r   r   )r*   r*   r*   @r  r  r  rm   r  r#  r  r  s       rQ   test_condition_5_3TestFpchec.test_condition_5_3  sT    ')qQ'2---]]:-BCJJqQ DCCs   A""
A0r%  N)r&  r'  r(  r)  r  r  r  r  r  r  r  r  r  r  r*  r%  rj   rQ   r  r  d  s4    	  *!, !> + + rj   r  c                    [         R                  " XX"*  5      n[        [        U5      S-
  5       Vs/ s H  oSXE   XES-       R	                  5       PM     nnX4SS    n[        [        U5      5       H%  nXu   S-  nXe==   U-  ss'   XeS-   ==   U-  ss'   M'     US==   US   -  ss'   [        [	        U5      [	        U5      SS9  Xd4$ s  snf )z)Split the knot interval into "runs".
    r*   r3   r5   rU   ro   )rG   r  r   rJ  r  r   )	rq   r.   r0   	residualsr  r  fpartscarriescarrys	            rQ   _splitr  
  s     
aG	$B6;CGAI6FG6Fb1g&**,6FFG1R!G3w< 
Q	U	su !
 2J)B-JCKYe<: Hs   #Cc                 T   [        XX#5      u  pESnSn[        [        U5      5       H%  nXXS-      XX   -
  S:  d  M  XH   U:  d  M  UnXH   nM'     US:X  a  [        S5      eXV   XVS-      -   S-   S-  n	X	   n
[        R
                  " X5      n[        R                  USU XUS 4   nU$ )z Insert a new knot given reduals.ig}Ô%Ir*   z5Internal error, please report it to SciPy developers.r5   N)r  r   rJ  rE   rG   r  r   )rq   r.   r0   r  r  r  idx_max	fpart_maxr  idx_newknotnew_knotidx_tt_news                rQ   	_add_knotr    s    a+JF GI3v;c7RU?Q69y#8G	I  
 $PQQ ;AI.2q8K~HOOA(EEE!FU)Xy01ELrj   c                   N   \ rS rSrS r\R                  R                  S/ SQ5      S 5       rS r	S r
S rS	 rS
 rS rS r\R                  R                  S/ SQ5      \R                  R                  S/ SQ5      S 5       5       r\R                  R"                  S 5       rSrg)TestGenerateKnotsi5  c                    [         R                  " S[        S9nUS-  SSU-   -  -   nSn[         R                  " S/US-   -  S/US-   -  -   5      n[	        XX4S9nU" U5      U-
  S	-  nS
SKJn  UR                  XX65      n[        XX65      n	[        XSS9  [	        XX8S9n
U
" U5      U-
  S	-  nUR                  XX;5      n[        XX;5      n[        XSS9  g )Nr   rA   r7   r,   r*   r9   r  )r0   r.   r5   r   _fitpack_reprorU   ro   )
rG   rK   r  r=  r   rp  r  add_knotr  r   )rN   rq   r   r0   r.   r>  r  _frnew_tnew_t_pyspl2
residuals2new_t2	new_t2_pys                 rQ   test_split_add_knot%TestGenerateKnots.test_split_add_knot6  s    IIau%qD2q1u:HHbT1Q3Z2$!*,-aa-VaZ!O	;Q10Q10e4 qq21gkA%
a6a6	6rj   r0   r  c           	          [         R                  " S[         R                  S9n[         R                  " U[         R                  -  S-  5      n[        [        X#USS95      S   n[        X#USS9S   n[        XESS9  g )Nr   rA   r   r0   r  r3   rU   ro   )	rG   rK   rL   r  r  r  r   r   r   )rN   r0   rq   r   r.   r  s         rQ   test_s0TestGenerateKnots.test_s0N  se    IIarzz*FF1RUU719Q/04AA#A&E*rj   c           	          Sn[         R                  " U5      nUS-  n[        [        X#SSS95      n[	        US   [        US5      SS9  g )Nra   r7   r   r  r3   rU   ro   rG   rK   r  r   r   r   rN   rO   rq   r   knotss        rQ   	test_s0_1TestGenerateKnots.test_s0_1W  sG    IIaLqD^AA34b	;q!#45Arj   c           	          Sn[         R                  " U5      nUS-  n[        [        X#SSS95      n[	        US   [        US5      SS9  g )Nr   r7   r   r  r3   rU   ro   r  r  s        rQ   test_s0_n20TestGenerateKnots.test_s0_n20_  sG    IIaLqD^AA34b	;q!#45Arj   c                     [         R                  " S5      nUS-  n[        [        5         [	        [        XSSSS95        S S S 5        g ! , (       d  f       g = f)Nra   r7   r   r0   r  nest)rG   rK   rC   rE   r  r   rN   rq   r   s      rQ   test_s0_nestTestGenerateKnots.test_s0_nestf  s?    IIbMqD:&QR89 '&&s   A


Ac           	      |   [         R                  " S5      n[         R                  " U[         R                  -  S-  5      nSn[	        [        XUSS95      n/ SQ/ SQ/ SQ/ SQ/ S	Q/n[        U5      [        U5      :X  d   e[        XE5       H  u  pg[        XgS
S9  M     [        XUSS9u  n  n[        US   US
S9  g)aY  
        To generate the `wanted` list below apply the following diff and rerun
        the test. The stdout will contain successive iterations of the `t`
        array.

$ git diff scipy/interpolate/fitpack/fpcurf.f
diff --git a/scipy/interpolate/fitpack/fpcurf.f b/scipy/interpolate/fitpack/fpcurf.f
index 1afb1900f1..d817e51ad8 100644
--- a/scipy/interpolate/fitpack/fpcurf.f
+++ b/scipy/interpolate/fitpack/fpcurf.f
@@ -216,6 +216,9 @@ c  t(j+k) <= x(i) <= t(j+k+1) and store it in fpint(j),j=1,2,...nrint.
         do 190 l=1,nplus
 c  add a new knot.
           call fpknot(x,m,t,n,fpint,nrdata,nrint,nest,1)
+          print*, l, nest, ': ', t
+          print*, "n, nmax = ", n, nmax
+
 c  if n=nmax we locate the knots as for interpolation.
           if(n.eq.nmax) go to 10
 c  test whether we cannot further increase the number of knots.
        r   r7   r   r  )r9   r9   r9   r9   r  r  r  r  )	r9   r9   r9   r9   r<   r  r  r  r  
r9   r9   r9   r9   r:   r<   r  r  r  r  )r9   r9   r9   r9   r:   r<   r  r  r  r  r  )r9   r9   r9   r9   r:   r;   r<   rk  r   r  r  r  rU   ro   r3   N)
rG   rK   r  r  r  r   rJ  r3  r   r   )	rN   rq   r   r0   r  wantedr.   r  r   s	            rQ   test_s_switchTestGenerateKnots.test_s_switchm  s    . IIaLFF1RUU719^AA6726:>A	
 5zS[((('EAA. ( d+1ab	151rj   c                 X    [        [        S5      5      n[        XSSS9n[        U5        g )Nr   r  r*   )r  r0   )r  r   r   next)rN   rq   gens      rQ   r  !TestGenerateKnots.test_list_input  s$    qNQSA.S	rj   c           
      L   [         R                  " S5      n[         R                  " U[         R                  -  S-  5      nSn[	        [        XSUSS95      n[        US   / SQSS	9  [        [        5         [	        [        XSS
S95        S S S 5        g ! , (       d  f       g = f)Nr   r   r7   ra   r  r3   r  rU   ro   r8   )r0   r  )	rG   rK   r  r  r  r   r   rC   rE   )rN   rq   r   r  r  s        rQ   	test_nestTestGenerateKnots.test_nest  s~    IIaLFF1RUU719^AA<=b	@u	N :&23 '&&s   7B
B#c           
         [         R                  " S5      n[         R                  " U[         R                  -  S-  5      n[	        [
        5         [        [        X[         R                  " S5      S95        S S S 5        [	        [
        5         [        [        X[         R                  " S5      * S95        S S S 5        g ! , (       d  f       NO= f! , (       d  f       g = f)Nr   r@   r  )	rG   rK   r  r  rC   rE   r  r   r  r  s      rQ   r  TestGenerateKnots.test_weights  s    IIaLFF1RUU719:&		"67 ' :&45 '& '& '&s   (C)C
C
C npts)r  rm   r   r  )r  g{Gz?r   c           	      |   [         R                  R                  S5      nS[         R                  " UR	                  US95      -  n[         R
                  " U[         R                  -  S-  5      [         R                  " US-
  S-  * 5      -   nSn[        XEXaS9S   n[        [        XEXaS95      S	   n[        XS
S9  g )Nr  ra   r   r   r5   r7   r  r   r3   rU   ro   )rG   rM   r   r   r  r  r  expr   r  r   r   )	rN   r  r  r  rq   r   r0   r.   r  s	            rQ   test_vs_splrep TestGenerateKnots.test_vs_splrep  s     yy$$U+rwwt|||.//FF1RUU72:!A#	!2211"1%.01"5E*rj   c           	      6   Sn[         R                  " U5      nUS-  n[        [        X#SSS95      n[	        5        nUR                  [        5      n[        X#SSS9n[        U5      S:X  d   e S S S 5        [        US   WS   5        g ! , (       d  f       N!= f)N   r7   Jz5r  r*   r3   r   )
rG   rK   r  r   r   recordRuntimeWarningr   rJ  r   )rN   rO   rq   r   r  supr  r[   s           rQ   test_s_too_small"TestGenerateKnots.test_s_too_small  s    IIaLqD ^AA78 C

>*Ae,Cq6Q;; ! 	b	3q6*	 ! s   2B


Br%  N)r&  r'  r(  r)  r  r\   r  r  r  r  r  r  r  r  r  r  r  r  r  r*  r%  rj   rQ   r  r  5  s    70 [[S/2+ 3+BB:)2V46 [[V]3[[S.1+ 2 4+" [[+ +rj   r  c                 F   U R                   S   nXU-
  S-
     X   -
  nUSU-  -
  S-
  nXS-   X!-
  S-
   n[        R                  " US5      nUSSS2==   S-  ss'   USSS2==   S-  ss'   [        U [        R                  " X!-
  S-
  5      U5      " XaS9n[        R
                  " US-
  UR                   S   4[        S9n[        SUR                   S   S5       H   n	XySS24   XyS-   SS24   -
  XS-  SS24'   M"     XU-  U-  [        R                  " U5      -  -  nU$ )zStraitforward way to compute the discontinuity matrix. For testing ONLY.

This routine returns a dense matrix, while `_fitpack_repro.disc` returns
a packed one.
r   r*   r5   Nr   r   rA   )
r   rG   rK  r   rI  emptyr  r   math	factorial)
r.   r0   rO   deltanrintr  tiir  matrr  s
             rQ   
disc_naiver%    s)    	

A!eaiL14E!GaKE	
Q3qs1uB
))B
C!HH1II266!%!)$a(3A88U1Waggaj)7D1aggaj!$Q$!aCF)+T1W % 	5[1t~~a000DKrj   c                   (    \ rS rSrSrSS jrS rSrg)F_densei  zdThe r.h.s. of ``f(p) = s``, an analog of _fitpack_repro.F
Uses full matrices, so is for tests only.
Nc                    Xl         X l        X0l        X@l        Uc  [        R
                  " U[        S9OUU l        U R                  R                  S:X  d   e[        U[        R                  " UR                  S   U-
  S-
  5      U5      " U5      nXpR                  S S 2S 4   -  U l        SSKJn  [        UR!                  X45      6 R#                  5       U l        UR                  S:X  d   eX R                  -  n	[        R&                  U	[        R(                  " U R$                  R                  S   5      4   U l        XPl        g )NrA   r*   r   r  )rq   r   r.   r0   rG   rd   r  r  r  r   rI  r   a_denserp  r  rQ  discr]  b_denser   rQ  r   r  )
rN   rq   r   r.   r0   r  r  r)  r  r   s
             rQ   rT  F_dense.__init__  s    12au-vv{{a !RVVAGGAJNQ$67;A>40;#SXXa^4<<> vv{{Z%%BHHT\\%7%7%:;;<rj   c                    [         R                  " U R                  U R                  U-  45      nSSKJnJn  U" USS9u  pVUR                  U R                  -  nUR                  S   nU" US U2S U24   US U 5      n	[        U R                  XR                  5      n
[         R                  " U R                  S-  U
" U R                  5      U R                   -
  S-  -  5      nXl        XR$                  -
  $ )Nr   )r  r  economic)r  r*   r5   )rG   r"  r)  r+  scipy.linalgr  r  r  r   r   r   r.   r0   r  r  rq   r   r>  r  )rN   r  abr  r  r  r  qyrS  r/   r>  fps               rQ   r  F_dense.__call__  s    YYdllQ&678 	+":&SS477]WWQZ!CRC"H+r#2w'dffa(VVDFFAITVVtvv!5 99:FF{rj   )
r)  r+  r0   r  r>  r.   r  rq   r   r   r  )r&  r'  r(  r)  r_  rT  r  r*  r%  rj   rQ   r'  r'    s    ,rj   r'  c                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 r\R                  R                  S 5       rS rS rSrg)TestMakeSplrepi   c           	         [         R                  " SSS5      n[         R                  " SSS5      n[        [        5         [	        X5        S S S 5        [        [        5         [	        SSSS9  S S S 5        [        [        5         [         R
                  " UR                  SSS45      n[	        XSS9  S S S 5        [         R
                  " S5      n[        [        5         [	        XS	-  USS
9  S S S 5        [         R
                  " S5      * n[        [        5         [	        XS	-  USS
9  S S S 5        [         R
                  " UR                  S   S45      n[        [        5         [	        XS	-  USS
9  S S S 5        [        [        5         [	        US S S2   US	-  SS9  S S S 5        [        [        5         [	        XS	-  SSS9  S S S 5        [        [        5         [	        XS	-  SS9  S S S 5        [        [        5         [	        XS	-  S	SSS9  S S S 5        [        [        5         [	        XS	-  SSS9  S S S 5        [        [        5         [	        [         R                  " S5      [         R                  " S5      SS9  S S S 5        g ! , (       d  f       GNL= f! , (       d  f       GN;= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNy= f! , (       d  f       GN_= f! , (       d  f       GNK= f! , (       d  f       GN8= f! , (       d  f       GN#= f! , (       d  f       GN= f! , (       d  f       g = f)Nr   ra   r@   r@  r*   r5   r  r  r7   )r  r  r3   r>   r  )r0   r  r  )r  r  r   	   )
rG   rc   rC   rE   r   r  r   r   rD   rK   )rN   rq   r   r  s       rQ   test_input_errors TestMakeSplrep.test_input_errors!  s[   KK2r"KK2r":& ' :&1$ ' :&Aq)*A$ '
 GGBK:&a41, ' WWR[L:&a41, ' GGQWWQZO$:&a41, ' :&$B$A- ' 9%a43#. & :&a42& ' :&a4114 ' :&a412. ' :&		!biilc: '&a '& '& '& '&
 '&
 '& '& &% '& '& '& '&s    J#J#/J5"KK*K+K=<L"L!L3.M4M
J #
J25
K
K
K(+
K:=
L
L!
L03
M
M
M%c                     [         R                  " SSS5      n[         R                  " US-  S-  5      S-  nSnSn[         R                  " S/US-   -  S	S
/-   S/US-   -  -   5      nXX4U4$ )Nr   r   r@   gQ	@r5   r7   gq@H&?r*   r>   r<   )rG   rc   r  r=  )rN   rq   r   r0   r  r  s         rQ   	_get_xyktTestMakeSplrep._get_xyktX  su    KK1b!VVAdFQJ"XXqc1Q3i3*,sAaCy89Q2~rj   c                     SSK Jn  U R                  5       u  p#pEnU" X#S S 2S 4   XdU5      n[        X#XdU5      nS H  n	[	        U" U	5      U" U	5      SS9  M     g )Nr   Fr*   ra   r   rU   ro   ) scipy.interpolate._fitpack_repror@  r<  r'  r   )
rN   r@  rq   r   r0   r  r.   ff_dr  s
             rQ   test_fitpack_FTestMakeSplrep.test_fitpack_Fa  sY    6(aAa1d7Q1%aA!$AAaD#a&u5 rj   c           	      d   SSK Jn  U R                  5       u  p#pEn[        R                  " UR
                  S   [        S9nU" X#S S 2S 4   XdXWS9n[        X#XdXWS9n	[        X#XdU5      n
S HC  n[        U" U5      U	" U5      SS9  [        R                  " U
" U5      U	" U5      SS9(       d  MC   e   g )Nr   r?  rA   r  rA  rU   ro   )
rB  r@  r<  rG   rK   r   r  r'  r   r   )rN   r@  rq   r   r0   r  r.   r  fwfw_drD  r  s               rQ   test_fitpack_F_with_weights*TestMakeSplrep.test_fitpack_F_with_weightsk  s    6(aAIIaggaj.qAtG*aA+qQ1*aA!$ABqE477{{3q647???? rj   c                    SS K Js  Jn  [        R                  R                  S5      n[        R                  SSSS[        R                  " UR                  SS95      S-  SSSS4	   n[        U5      SpT[        UR                  X55      6 R                  5       n[        X55      nUR                  S   USU-  -
  S-
  :X  d   e[        XgSS	9  g )
Nr   r  r   r   r   r7   r5   rU   ro   )rB  interpolater  rG   rM   r  r   r   r  rJ  rQ  r*  r]  r%  r   r   )rN   r  r   r.   rO   r0   DD_denses           rQ   test_disc_matrixTestMakeSplrep.test_disc_matrixz  s     	76ii##E*EE!Q1bggckkqk&9:1<aAqHI1vq1#((1.)113Q"wwqzQ1Wq[(((/rj   c                 2   U R                  5       u  pp4n[        R                  " S/US-   -  SS/-   S/US-   -  -   5      n[        XX4S9u  pgn[	        Xe:H  5      (       d   e[        XX4S9n[        US UR                  R                   UR                  SS9  g )	Nr   r*   r>   r<   r   r  rU   ro   )	r<  rG   r=  r   r   r   r   r/   r   )	rN   rq   r   r0   r  r  r.   r/   r>  s	            rQ   test_simple_vs_splrep$TestMakeSplrep.test_simple_vs_splrep  s    )aBXXqc1Q3i3*,sAaCy89qq&A17|||!!)+355::E:rj   c           	      6   U R                  5       u  pp4n[        [        XX4S95      S   n[        XX4S9n[        XXcUS9n[	        UR
                  UR
                  SS9  [	        UR                  UR                  SS9  UR                  UR                  :X  d   eg )Nr  r3   )r.   r0   r  rU   ro   )r<  r  r   r   r   r.   r/   r0   )	rN   rq   r   r0   r  r   r.   spl_autospl_ts	            rQ   test_with_knotsTestMakeSplrep.test_with_knots  s    (aA/04qq.AAa0

EGG%8

EGG%8zzUWW$$$rj   c                     Sn[         R                  " U5      nUS-  nSn[        X#USS9nUR                  R                  S   SUS-   -  :X  d   eg )Nra   r7   r*   r  r   r5   )rG   rK   r   r.   r   )rN   rO   rq   r   r0   r>  s         rQ   test_no_internal_knots%TestMakeSplrep.test_no_internal_knots  sR    IIaLqD!!q)uu{{1~AaC(((rj   c                     Sn[         R                  " U5      nUS-  n[        X#SS9n[        X#SS9n[	        UR
                  UR
                  SS9  g )Nra   r7   r   rU   ro   )rG   rK   r   r
   r   r/   )rN   rO   rq   r   r>  spl_is         rQ   test_default_sTestMakeSplrep.test_default_s  sI    IIaLqD!!$"11-uwwU3rj   c                    Sn[         R                  " U5      nUS-  n[        5        nUR                  [        5      n[        X#SSS9n[        X#SSS9n[        U5      S:X  d   e[        UR                  US   5        [        [         R                  UR                  S/UR                  S-   -  4   US   SS	9  S S S 5        g ! , (       d  f       g = f)
Nr  r7   r  r  r5   r   r*   rx  ro   )rG   rK   r   r  r  r   r   rJ  r   r.   r   r   r/   r0   )rN   rO   rq   r   r  r  r[   r>  s           rQ   r  TestMakeSplrep.test_s_too_small  s     IIaLqD C

>*Ae,Caa51Cq6Q;;CEE3q6*BEE#%%!ceeAg"67F0 !  s   BC
Cc                 <   Su  p[         R                  " U5      nUS-  n[        X4US9n[        X4USS9nUR                  R                  S:X  d   eUR                  R                  S:X  d   e[        X4SSU-   -  -   USS9nUR                  R                  S:X  d   eg )Nra   r7   r7   r   h㈵>r  r*   )rG   rK   r   r/   r  )rN   rO   r0   rq   r   r>  r  rL  s           rQ   
test_shapeTestMakeSplrep.test_shape  s    IIaLqD!!$AA.uuzzQww||q    A1ac7{a48ww||q   rj   c                 p   Su  p[         R                  " U5      nUS-  n[        X4SSS9n[        X4SSS9nUR                  R                  S:X  d   eUR                  R                  S:X  d   eUR
                  R                  S   X-   S-   :X  d   eUR
                  R                  S   SUS-   -  :X  d   eg )Nrd  r7   r   r  r*   r5   )rG   rK   r   r/   r  r.   r   )rN   rO   r0   rq   r   r?  r  s          rQ   test_s0_vs_notTestMakeSplrep.test_s0_vs_not  s    IIaLqDAA+AA+ww||q   ww||q   ww}}Q1519,,,ww}}Q1A;...rj   r%  N)r&  r'  r(  r)  r9  r<  rE  rJ  rP  rS  rX  r[  r_  r\   r  r  r  rf  ri  r*  r%  rj   rQ   r5  r5     sY    5;n6@0;
%)4 [[0 0! /rj   r5  c                       \ rS rSrSS jr\R                  R                  S/ SQ5      S 5       r\R                  R                  S/ SQ5      S 5       r	S r
S rS	 rS
rg)TestMakeSplprepi  c                     [         R                  " U5      [         R                  -  U-  n[         R                  " U5      [         R                  " U5      /nX4U4$ r  )rG   rK   r  r  r  )rN   r  r0   rq   r   s        rQ   _get_xykTestMakeSplprep._get_xyk  s@    IIaL255 1$VVAYq	"Qwrj   r  r   r  gMbP?re  c           
         Su  p#[         R                  " U5      [         R                  -  U-  n[         R                  " U5      [         R                  " U5      /nSSSSS.n[        XQS9u  u  pxp9[        XQS9u  p[        XSS	9  [        U
R                  USS	9  [        U5      Xa   :X  d   e[         R                  " U5      R                  n[        U
R                  USS	9  [        U
" U5      [        XxUS
S9" U5      SS	9  g )Nrd  r  r   r8  ra   rp  r7  rU   ro   r*   r2  )rG   rK   r  r  r  r   r   r   r.   rJ  rx   r  r/   r   )rN   r  r  r0   rq   r   	num_knotsr.   r/   u_r>  r5  r   s                rQ   test_simple_vs_splprep&TestMakeSplprep.test_simple_vs_splprep  s     IIaL255 1$VVAYq	" %u=	  	qa% 	E* 	qu-1v%%% ZZ]__r. 	Aaa03%	Arj   c                 F   U R                  5       u  p#n[        U[        5      (       d   e[        R                  " U5      S   S:X  d   e[        X1S9u  pE[        [        R                  " U5      US9u  pg[        XWUS9  [        US   US   SS9  [        US   5      [        US   5      :X  d   e[        US   US   5       H  u  p[        XSS9  M     US   US   :X  d   e[        R                  " [        XT5      5      [        R                  " U5      :X  d   e[        X1S9u  p[        XWSS9  [        U
R                  US   SS9  [        U
R                  R                  US   SS9  U
R                  US   :X  d   eU
" U5      R                  [        R                  " U5      :X  d   e[        [        R                  " U5      US9u  p[        XWSS9  [        U
R                  US   SS9  [        U
R                  R                  US   SS9  U
R                  US   :X  d   eU
" U5      R                  [        R                  " U5      :X  d   e[!        ["        5         [        [        R                  " U5      R                  US9  S S S 5        g ! , (       d  f       g = f)Nr   r5   r7  ro   rU   r*   )rn  r  r  rG   r   r   rx   r   rJ  r3  r   r   r.   r/   r  r0   rC   rE   )rN   r  r   r   r[   r5  tck_au_ar  r  r>  s              rQ   test_array_not_list#TestMakeSplprep.test_array_not_list  s    --/a!T""""xx{1~""" RZZ]a0
Q'Aau53q6{c%(m+++#a&%(+FBB/ ,1vq!!!xxa&"((1+555a%U+uQxe4q6uua   1v||rxx{***bjjmq1U+uQxe4q6uua   1v||rxx{***:&AA. '&&s    )J
J c                 d    U R                  SS9u  pn[        U5      u  pE[        U" U5      USS9  g )Nra   r  rU   ro   )rn  r   r   )rN   rq   r   r0   r>  r5  s         rQ   test_default_s_is_zero&TestMakeSplprep.test_default_s_is_zero'  s1    --"-%aaA.rj   c                 H   U R                  SS9u  pn[        USS9u  pE[        USS9u  pg[        XWSS9  [        U" U5      USS9  [        U" U5      USS9  UR                  UR                  :X  d   eUR                  R
                  UR                  R
                  :X  d   eg )Nra   r  r   r7  rU   ro   r   )rn  r   r   r/  r/   r   )rN   rq   r   r0   r^  u_ispl_nu_ns           rQ   test_s_zero_vs_near_zero(TestMakeSplprep.test_s_zero_vs_near_zero-  s    --"-%a!!q)
!!u-
u-c
AE2c
AD1zzUZZ'''ww}}---rj   c                    [         R                  " S[        S9n[        [        5         [        U5        S S S 5        [        [        5         [        USS9  S S S 5        [        [        5         [        USS9  S S S 5        [        U/SS9u  p#[        U/SS9u  pEU" U5      R                  S:X  d   e[        U" U5      U/SS	9  g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nu= f)
Nr   rA   r   r7  r  re  )r*   r   rU   ro   )	rG   rK   r  rC   rE   r   r   r   r   )rN   rq   r[   rs  r>  r5  s         rQ   r  TestMakeSplprep.test_1D:  s    IIau%:&AJ ' :&a  ' :&c" ' 1#&qcT*1v||v%%%A%0 '& '& '&s#   CC.C(
C
C%(
C6r%  Nrd  )r&  r'  r(  r)  rn  r\   r  r  rt  ry  r|  r  r  r*  r%  rj   rQ   rl  rl    se    
 [[S"67A 8A: [[S"67 / 8 /D/.1rj   rl  r%  )#   r7   r  )r*   )gr  r  r  r  r  numpyrG   numpy.testingr   scipy._lib._array_apir   r   r\   r   rC   rp  r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r/  r  r  scipy.sparse.linalgsparserx  scipy.interpolate._bsplinesr   r   r   r   r   r   r   r   scipy.interpolate._fitpack_implrM  _fitpack_implr  scipy._lib._utilr    scipy._lib._testutilsr!   scipy.interpolate._ndbspliner"   r#   r  r$   r  r%   r'   r  r  r  r   r   r   rp   r   rZ   r  r  rd  r  r  r  r  rO  r	  rQ  rm  rd  rq  rs  r  r  r  r+  r^  r  r  rm  r  r  r  r  r%  r'  r5  rl  r%  rj   rQ   <module>r     s   	      + B *     
  ! !E E H G / / & 9 5 3 - &y	) y	)vM$ M$`6.&
G>H$+$_) _)D}? }?@88 !++11(Y<MN y: y:x >)X	(d+ d+N*
F3 F3V
7:" :"zG4 G4TNG NGba  a L(.a+ a+H2+ +\}/ }/@i1 i1rj   