
    Bpj\                    r   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rS SKrS SKrS SK	r
S SKJrJrJrJrJrJrJrJr  S SKJs  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K0J1s  J.r2  S SK3J4r4J5r5J6r6J7r7J8r8  S SK9J:r:J;r;  S SKJ<r<J=r=J>r>  S SK?J@s  JArB  S SKCJDrD  S S	KEJFrF  S S
KGJHrH  S SKJIrJ  S SKJKrL  S SKJMrM  \R                  R                  rO\R                  R                  rP\" \5       " S S5      5       rQ\" \S45       " S S5      5       rRS rSS rTS rUS rVS rW\
4S jrXSSS jrYSS\
4S jrZS r[ " S S5      r\\" \5       " S  S!5      5       r]S" r^STS# jr_\R                  R                  S$S%S&/5      ra\" \ 5       " S' S(5      5       rb " S) S*5      rcSUS+ jrdS, reS- rf " S. S/5      rgS0 rh\" \+5       " S1 S25      5       riS3 rjS4 rkS5 rl " S6 S75      rm\" \*5       " S8 S95      5       rn " S: S;5      ro " S< S=5      rpS> rqS? rr\" \<5       " S@ SA5      5       rsSB rt " SC SD5      ru " SE SF5      rv\" \=5       " SG SH\v5      5       rw\" \=5       " SI SJ\v5      5       rx\" \>5       " SK SL5      5       ry\" \>5       " SM SN5      5       rz " SO SP5      r{ " SQ SR5      r|g)V    N)xp_assert_equalxp_assert_closexp_default_dtype	concat_1dmake_xp_test_casexp_ravel_xp_copy_to_numpyarray_namespace)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)	Fperiodic	root_rati)generate_knotsmake_splrepmake_splprep)	AxisError)_run_concurrent_barrier)make_ndbspl)_fitpack)	_bsplines)_dierckxc                   >   \ rS rSrS rS rS rS rS rS r	S r
\" S	S
S9\" SSS9\" SSS9S 5       5       5       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SS9S  5       rS! rS" rS# rS$ rS% rS& r S' r!\"" SS(S9S) 5       r#S* r$S+ r%S, r&\'RP                  RS                  S-\*" S.S/5      5      S0 5       r+S1 r,S2 r-\'RP                  RS                  S3/ S4Q5      \'RP                  RS                  S5\*" S65      5      S7 5       5       r.S8 r/S9 r0S: r1\'RP                  RS                  S;/ S<Q5      S= 5       r2\'RP                  RS                  S;/ S<Q5      S> 5       r3S? r4S@ r5SA r6\'RP                  Ro                  \8Rr                  SB:H  SC\:SD9SE 5       r;SFr<gG)HTestBSpline2   c                 v   [        [        [        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#UR                  X#-   S-   UR                  S9nUR                  [
        R                  R                  U5      5      n[        XEU5      n[        XFR                  5        [        XVR                  5        X6R                   :X  d   eg ! , (       d  f       GN= f)N                 ?      ?r   tckignore)invalidr   r1      r   r1   r<         r<   )        r@   r3          @      @      @)r3   r3   r3   cubic      @)r@   r   r1   r1   r<   r>   )r3   r1   r1      r>   dtype)assert_raises	TypeError
ValueErrorr   dictnperrstatenaninfarangefloat64asarrayrandomr   r5   r6   r7   )selfxpnr7   r5   r6   bs          a/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/scipy/interpolate/tests/test_bsplines.py	test_ctorTestBSpline.test_ctor5   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::I.JJryy''*+A!3333CCxx; +*s   0H))
H8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rtolr1   r<   foo)	_make_random_splinetckr   r5   r6   r7   pytestr   AttributeError)rV   rY   rd   s      rZ   test_tckTestBSpline.test_tckX   st    !eeSV%e<SV%e<ssc!f}} ]]>*AE +**s   8B		
Bc                    [        UR                  / SQ5      UR                  SS/5      SS9nUR                  SSS5      nUR                  US:  UR                  SUR                  S	9S
5      n[        U" U5      U5        g )Nr   r3   r<   rB   r?   r   r4   r<   
   r3   rH   rC   )r   rT   linspacewhererS   r   )rV   rW   rY   xxexpecteds        rZ   test_call_namespaceTestBSpline.test_call_namespaced   so     bjj,

B70CqI[[Ar"88BGRZZ"**Z%EsK"x(    c                     [        UR                  / SQ5      UR                  SS/5      SS9n[        UR                  5      UL d   e[        UR                  5      UL d   eg )Nrj   rB   r?   r   r4   )r   rT   r
   r5   r6   rV   rW   rY   s      rZ   &test_attributes_have_correct_namespace2TestBSpline.test_attributes_have_correct_namespacem   sT    bjj,

B70CqIqss#r)))qss#r)))rr   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   r1   rk   rB   r4   )r   ffffff?r1   r>   r?   rx   rC   )rN   rl   r   r   	ones_likerm   )rV   rn   rY   s      rZ   test_degree_0TestBSpline.test_degree_0r   su    [[Ar"q!f*"r||B/#56lq!f2"rxxT	3<=rr   c           
         UR                  / SQ5      nUR                  / SQ5      nSn[        X#U5      nUR                  SSSUR                  S9n[	        U" U5      US   [        XaS	9-  US   [        US-
  US	9-  -   US
   [        US
-
  US	9-  -   SS9  [        [        XbU45      u  pxn	[        XxX45      n
[	        U" U5      UR                  U
5      SS9  g )Nr=   )r3   r<   r>   r1   r3   rB   r/   rH   r   rW   r<   +=r`   )	rT   r   rl   rS   r   B_012mapr	   r   )rV   rW   r5   r6   r7   rY   xx_npt_npc_npsplev_results              rZ   test_degree_1TestBSpline.test_degree_1{   s    JJ'JJ{#A!KKS"BJJK7aDaDq 1Q4acb(9#99AaDqsrAR<RR	

 01)<DT$?3!bjj6UCrr   c           
         SnUR                  S/US-   -  S/US-   -  -   5      nUR                  / SQ5      n[        [        UR                  US5      5      [        UR                  SS/5      5      5      n[	        X4U5      nUR                  SSS5      n[        U" US	S
9UR                  U" [        U5      S	S
95      SS9  g )Nr>   r   r1   r3   rA   rB   rC   )r:   r1   g      rA   rk   Textrapolater~   r   )rT   r   r	   reshaper   rl   r   )rV   rW   r7   r5   r6   bpbsplrn   s           rZ   test_bernsteinTestBSpline.test_bernstein   s    JJsAaCyA3!9,-JJ'(bjjG45bjj!Q01
 qQ[[b"%&JJr+B/TBC	
rr   z
dask.arrayz"_naive_eval is not dask-compatiblereasonz	jax.numpyztoo slow; XXX a slow-if marker?torchz	OOB on CIc                 b   [        US9nUR                  u  p4nUR                  X5   X5* S-
     S5      nU" U5      nUR                  U Vs/ s H  n[	        XXEUS9PM     sn5      n	[        XySS9  UR                  U Vs/ s H  n[        XXEUS9PM     sn5      n
[        XzSS9  g s  snf s  snf )Nr}   r1   r/   r~   r   )rc   rd   rl   stack_naive_evalr   _naive_eval_2)rV   rW   rY   r5   r6   r7   rn   y_br   y_ny_n2s              rZ   test_rndm_naive_eval TestBSpline.test_rndm_naive_eval   s      2&%%a[[qAw+ehhC1A!26CDu-xx2F2aqQb92FG.	 D Gs   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 )Nr1   r/   r~   r   )rc   rd   rN   rl   r   r   rV   rY   r5   r6   r7   rn   s         rZ   test_rndm_splevTestBSpline.test_rndm_splev   sL    !%%a[[qAw+"uRQ3%@rr   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     r1   P   r~   r   )rN   rU   RandomStatesortr   r   r5   r7   rl   r   r   )	rV   rngr   yrd   rY   r5   r7   rn   s	            rZ   test_rndm_splrepTestBSpline.test_rndm_splrep   s    ii##D)GGCJJrN#JJrNQlSMssACC1[[qAw+"uR~E:rr   c                 4   [        US9nUR                  UR                  5      Ul        UR                  UR                  UR
                     UR                  UR
                  * S-
     SUR                  S9n[        U" U5      UR                  U5      5        g )Nr}   r1   d   rH   )rc   ry   r6   rl   r5   r7   rS   r   )rV   rW   rY   rn   s       rZ   test_rndm_unityTestBSpline.test_rndm_unity   so    2&ll133[[QSS133tAv;2::[F"r||B/0rr   c                    [         R                  R                  S5      nSu  p4[         R                  " UR                  U5      5      nUR                  USS4S9n[	        UR
                  XV45      u  pV[        XVU5      nXT   XT* S-
     pXU-
  UR                  UR                  S5      5      -  -   n
U" U
5      R                  S:X  d   eg )	Nr      r>         sizer1   r>   r?      )r>   r?   r   r   r   )rN   rU   r   r   r   rT   r   shape)rV   rW   r   rX   r7   r5   r6   rY   tmtprn   s              rZ   test_vectorizationTestBSpline.test_vectorization   s    ii##D)GGCJJqM"JJQ1IJ&2::v&A!qAwB7bjjI)>???u{{o---rr   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   )!   r>   r1   r:   r   r/   r~   r   )	rN   rU   r   r   r_r   rl   r   r   )rV   r   rX   r7   r5   r6   c_padrY   b_paddtrn   s              rZ   
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Drr   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 )Nr1   TF绽|=&.>Hz>r_   rc   rd   r   )	rV   num_parallel_threadsrY   r5   _r7   r   r   extraps	            rZ   test_endpointsTestBSpline.test_endpoints   sb    !%%aqAwB#FArh/rEz2:6?dQUW $rr   c           	          [        5       nUR                  u  p4n[        U" X5S-   U* S-
   S-
  5      U" X5S-   U* S-
   S-   5      SS9  g )Nr1   r   r   r   r   )rV   r   rY   r5   r   r7   s         rZ   test_continuityTestBSpline.test_continuity   sV    !%%a!aC1+-.!aC1+2E0F	rr   c                 h   [        US9nUR                  u  p4nUS   US   -
  nUR                  X5   U-
  X5* S-
     U-   S5      nX5   U:  XsU* S-
     :  -  n[        U" Xx   SS9U" Xx   SS95        [	        [
        XsU45      u  pnUR                  [        XX4SS	95      n[        U" USS9U5        g )
Nr}   r:   r   r1   r/   Tr   F)ext)rc   rd   rl   r   r   r	   rT   r   )rV   rW   rY   r5   r6   r7   r   rn   maskxx_npr   r   r   s                rZ   test_extrapTestBSpline.test_extrap   s    2&%%arUQqT\[[AbdGbL"5r	baRT7l+ 	"(5"(6	8   1B1:>Tzz%dA"FG"$/>rr   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   r1   r:   )rc   rd   rN   allisnan)rV   rY   r5   r   r7   rn   yys          rZ   test_default_extrapTestBSpline.test_default_extrap  sZ    !%%adQh"	"rU66"((2,'''''rr   c                    [         R                  R                  S5      n[         R                  " UR                  S5      5      nUR                  S5      n[	        UR
                  X445      u  p4Sn[        X4USS9nUR                  S   US-   -
  nUS	   US   -
  nUR                  X5   U-
  X7   U-   S
5      n	X5   XU   -
  X7   X5   -
  -  -   n
[	        [        XU45      u  pn[        U5      UR                  :X  a  SOSn[        U" U	5      UR                  [        XX45      5      US9  UR                  / SQ5      n	X5   XU   -
  X7   X5   -
  -  -   n
[        U" U	SS9U" U
SS9[        U5      UR                  :X  a  SOSS9  g )Nr      r?   r>   periodicr   r   r1   r:   r/   -q=gH׊>r   )r:   r         ?r1   Tr~   gƠ>)rN   rU   r   r   r   rT   r   r   rl   r	   r   rS   r   r   )rV   rW   r   r5   r6   r7   rY   rX   r   rn   xyxy_npr   r   r`   s                  rZ   test_periodic_extrap TestBSpline.test_periodic_extrap  sv   ii##D)GGCJJqM"JJqM2::v&A!4GGAJ!a% rUQqT\[[AD2Ir2TRA$Y14!$;// 1B1:>T(,

:ubE2::eE$?;<4	

 ZZ(TRA$Y14!$;//bj)bd#*2."**<$	
rr   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   r~   r_   )rc   rd   r   from_splinerN   rl   r   )rV   rY   r5   r6   r7   pprn   s          rZ   
test_ppolyTestBSpline.test_ppoly'  sY    !%%aay)[[quc*"r"vE>rr   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   r:   r/   r1   dernur~   r   )	rc   rd   rN   rl   r   ranger   r   
zeros_like)rV   rY   r5   r6   r7   rn   r   yds           rZ   test_derivative_rndm TestBSpline.test_derivative_rndm/  s    !%%a[[1qub)UU25\AaC=Crq9#.BB"E: !
 	"1r}}R'8uErr   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 )Nr<   )r:   r:   r   r1   r1   r>   r?   r   r   r   r   r   r   r   r   )r1   r>   r?   r   r   r   g2H@gη   @r>   r?   r1   r   )rN   rU   r   r   r   rT   r   allclose)	rV   r7   r5   r   r6   rY   r   x0x1s	            rZ   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Frr   cupyzCuPy doesn't raisec           	          [        [        [        R                  40 [	        UR                  S/5      S9D6  [        [        [        R                  40 [	        UR                  / 5      S9D6  g )Nr   r5   )rJ   rL   r   basis_elementrM   rT   rV   rW   s     rZ   $test_basis_element_invalid_too_short0TestBSpline.test_basis_element_invalid_too_shortV  sJ     	j'"7"7S4"**aS/;RSj'"7"7R4"**R.;QRrr   c           	         UR                  SSS5      n[        R                  " UR                  / SQ5      S9n[	        [
        X#R                  UR                  45      u  pEnUR                  [        XEXcR                  45      5      n[        U" U5      USS9  [        U5      UR                  :X  a  SOSn[        U" U5      UR                  [        U5      UR                  S	9US9  [        R                  " UR                  / S
Q5      S9nUR                  SSSUR                  S	9n[        U" U5      UR                  US:  X"-  SU-
  S-  5      SS9  g )Nr:   r?   r   r   r1   r<   r>   r   r~   r   r   rH   r   r1   r1   r<   r   r<   rk   r1   rA   )rl   r   r  rT   r   r	   r5   r6   r   r7   r   r   rS   B_0123rm   )	rV   rW   rn   rY   r   r   r   r   r`   s	            rZ   test_basis_element_quadratic(TestBSpline.test_basis_element_quadratic\  s   [[Q#!!BJJ|$<= 1BQSS>BTzz%dCC/@"AB"|%8&r*bjj8Ud"rzz&*BJJzGdS!!BJJ|$<=[[Ar[4"aB
3%	Arr   c           	          [        5       nUR                  u  p#n[        R                  " X$   X$* S-
     S5      n[	        U" U5      [        XRX45      SS9  g )Nr1   r   r~   r   )rc   rd   rN   rl   r   _sum_basis_elementsr   s         rZ   test_basis_element_rndm#TestBSpline.test_basis_element_rndml  sK    !%%a[[qAw+"22!?eLrr   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      ?      @r1   r   r~   r   )	rc   rd   r   r6   realimagrN   rl   r   )	rV   rY   r5   r6   r7   ccb_reb_imrn   s	            rZ   
test_cmplxTestBSpline.test_cmplxr  s    !%%a(^A1q##((A&q##((A&[[qAw+"

DH59"

DH59rr   c                     [         R                  " UR                  / SQ5      5      nUR                  U" UR                  5      5      (       d   eg )Nr  )r   r  rT   r   rP   rt   s      rZ   test_nanTestBSpline.test_nan  s8    !!"**\":;xx"&&	""""rr   c                     [        SUS9nUR                  u  p4n[        X4U5      nUR                  X5   X5* S-
     S5      n[	        SU5       H+  nUR                  5       n[        U" Xx5      U" U5      SSS9  M-     g )Nr   )r7   rW   r1   r   r   r_   )rc   rd   r   rl   r   
derivativer   )	rV   rW   rY   r5   r6   r7   b0rn   js	            rZ   test_derivative_method"TestBSpline.test_derivative_method  st    !+%%aQ1[[qAw+q!AABrIqu5uE rr   c                    [        US9nUR                  u  p4nUR                  X5   X5* S-
     S5      n[        UR	                  5       R                  5       " U5      U" U5      SSS9  UR                  XDU4SS9nUR                  XD4SS9n[        X4U5      n[        UR	                  5       R                  5       " U5      U" U5      SSS9  g )Nr}   r1   r   r~   r_   axisr<   )rc   rd   rl   r   antiderivativer  r   r   )rV   rW   rY   r5   r6   r7   rn   s          rZ   test_antiderivative_method&TestBSpline.test_antiderivative_method  s    2&%%a[[qAw+((*557;"E	7 HHaAYQH'HHaV!H$A!((*557;"E	7rr   c                    [         R                  " UR                  / SQ5      5      n[        R                  " UR                  SS5      SSS9(       d   e[        R                  " UR                  SS5      SSS9(       d   e[        R                  " UR                  SS5      SSS9(       d   e[        R                  " UR                  SS5      SSS9(       d   e[        R                  " UR                  SS5      SSS9(       d   e[        R                  " UR                  SS5      SSS9(       d   e[        R                  " UR                  SS5      S	SS9(       d   e[        R                  " UR                  SSS
S9S	SS9(       d   e[        R                  " UR                  SSSS9SSS9(       d   e[        R                  " UR                  SSSS9SSS9(       d   e[        R                  " UR                  SSSS9[        R                  " SS[        [        UR                  5      5      SS9(       d   eg )Nr;   r   r1   r   r~   abs_tol      r:   r@   Tr   F)r   r  rT   mathisclose	integrate_implr   r   r	   rd   rt   s      rZ   test_integralTestBSpline.test_integral  s   !!"**Y"78||AKK1-sEBBB||AKK1-xGGG||AKK1-tUCCC ||AKK1-sEBBB||AKK1-xGGG||AKK1-tUCCC ||AKKA.UCCC||AKKA4K@#uUUU||AKKA5KA3PUVVV||AKK25KA4QVWWW ||AKK25KA!LLB4Equu0MN$)+ 	+ +rr   z(CuPy periodic extrapolation seems brokenc           	         [         R                  " UR                  / SQ5      5      nSUl        UR	                  5       nUR                  U" S5      U" S5      -
  UR
                  S9n[        R                  " UR                  SS5      U5      (       d   e[        R                  " UR                  SS5      SU-  5      (       d   e[        R                  " UR                  SS5      U5      (       d   e[        R                  " UR                  S	S
5      SU-  5      (       d   e[        UR                  SS5      UR                  U" S5      U" S5      -
  5      5        [        UR                  SS5      UR                  U" S5      U" S5      -
  U" S5      -   U" S5      -
  5      5        [        UR                  SS5      UR                  U" S5      U" S5      -
  U" S5      -   U" S5      -
  5      5        [        UR                  SS5      UR                  U" S5      U" S5      -
  U" S5      -   U" S5      -
  SU-  -   5      5        [        UR                  SS5      UR                  U" S5      U" S5      -
  5      5        [        UR                  SS5      UR                  U" S5      U" S5      -
  5      5        [        UR                  SS5      UR                  U" S5      U" S5      -
  SU-  -
  5      5        g )Nr;   r   r<   r   rH   r:   iiir         ?r>   r1   g      +@   r   ir?   )
r   r  rT   r   r#  rS   r*  r+  r,  r   )rV   rW   rY   i
period_ints        rZ   test_integral_periodic"TestBSpline.test_integral_periodic  sg    !!"**Y"78"ZZ!qt2::Z>
||AKK1-z::::||AKK1-rJ????||AKKB/<<<<||AKKB/Z@@@@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rr   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 )Nr=   r   ))r   )r   r   )r1     )r   r   r   r   r   r,  )rV   r   rY   pr   r   s         rZ   test_integrate_ppoly TestBSpline.test_integrate_ppoly  sS    q$"a 5FBAKK/KK/1 6rr   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 )Nr;   r   r   r1   r   )r   r  r,  
isinstancerN   ndarrayndim)rV   rY   r   ress       rZ   test_integrate_0D_always$TestBSpline.test_integrate_0D_always  sW    !!),(K++a+<Cc2::....88q= = )rr   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__rH  rr   rZ   BrG    s    rr   rN  )r   r1   r<   r<   )r   r  	__class__r  r#  )rV   rN  rY   s      rZ   test_subclassingTestBSpline.test_subclassing  sg    	 	 OOL){{a||~''1,,,!++q000rr   r"  r1  r?   c                 v   Su  p4UR                  SSX4-   S-   5      n/ SQnUS-  nUR                  Xs5        [        U5      n[        R                  R                  S5      nUR                  UR	                  US95      n	[        XYXAS9n
U
R                  R                  Xg   4US U -   XgS-   S  -   :X  d   eUR	                  S	5      nU
" U5      R                  US U UR                  -   XgS-   S  -   :X  d   eU	R                  * S-
  U	R                  4 H   n[        [        [        40 [        XYXKS
9D6  M"     [        XYXAS9R                  5       [        XYXAS9R                  S5      [        XYXAS9R                  5       [        XYXAS9R                  S5      4 H  nUR                   U
R                   :X  a  M   e   g )Nr   r   r1   r   r   r   r?   r   r   r!  r   )r5   r6   r7   r"  r<   )rl   r   tuplerN   rU   r   rT   r   r6   r   rA  rJ   r'   rM   r  r#  r"  )rV   r"  rW   rX   r7   r5   shpos_axisr   r6   rY   axb1s                rZ   	test_axisTestBSpline.test_axis  s   KK1aeai( !8
		(2Yii##D)JJszzrz*+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rr   c           	         SnUR                  / SQ5      nUR                  / SQ/ SQ/5      n[        X4USS9n[        X4SS S 24   U5      n[        X4SS S 24   U5      n[        U" S	5      UR                  U" S	5      U" S	5      /5      5        g )
Nr<   )r   r1   r<   r>   r?   r   r   )r:   r<   r   r:   )r<   r   r1   r:   r!  r   r1   rE   )rT   r   r   r   )rV   rW   r7   r5   r6   splspl0spl1s           rZ   test_neg_axisTestBSpline.test_neg_axis  s    JJ,-JJ67aAB'qAqD'1%qAqD'1%C"((DItCy+A"BCrr   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   r:   r   r7   bc_typer1   r~   r   N)rN   rU   r   r   random_sampler   eyelenr5   r   design_matrixtoarrayr   r6   )
rX   r7   rf  r   r   r   r   r6   des_matr_defdes_matr_csrs
             rZ   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Crr   rG   r>   clampednaturalr   r<   
not-a-knotr   r   r   N)r   )rV   rn  rX   r7   bcs        rZ   test_design_matrix_bc_types'TestBSpline.test_design_matrix_bc_types  sg    	D* (B#A"- ) q!QA#A,7   q!A#A*5 rr   r   )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   rk   r1   r<   r2  N)rN   rU   r   rg  aminamaxr   rl   rh  ri  r   r   rj  rk  arrayre   r   rL   )rV   r   rw  r   r   xminxmaxr7   r5   r6   bsplines              rZ   '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   rk   r>   rd  r   r7   r1   r?   r~   r   )rN   rU   r   r   rg  r   r   r   rj  r5   rk  r   r6   )rV   r   rX   r7   r   r   r   r4  xcycrm  s              rZ   test_design_matrix_x_shapes'TestBSpline.test_design_matrix_x_shapesW  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 rr   c                 t    / SQn[         R                  " SUS5      R                  5       n[        U/ SQ/SS9  g )N)r3   r3   r3   rA   rB   rC   rC   rC   rA   r>   )g      ?gmਪ?gK}\UU?r@   r~   r   )r   rj  rk  r   )rV   r5   des_matrs      rZ   test_design_matrix_t_shapes'TestBSpline.test_design_matrix_t_shapesh  s7    ,((Q2::<;<"	$rr   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   rk   r>   rd  r   r  r:   r<   )r@   r3   rA   rB   rC         @r   )rN   rU   r   r   rg  r   rJ   rL   r   rj  r5   )rV   r   rX   r7   r   r   r   r5   s           rZ   test_design_matrix_asserts&TestBSpline.test_design_matrix_assertsp  s    ii##D)GGC%%a(2-23a 2%*!!!, :&!!!VVDbD\15 '$:&!!!* '& '& '&s   ?(C)C:)
C7:
Drf  )rr  rq  r   rs  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   r:   rf  r1   r^   r   )rN   rU   r   r   r   r   from_power_basisrl   r   r   r6   )	rV   rf  r   r   r   cbr   rn   bspl_news	            rZ   test_from_power_basis!TestBSpline.test_from_power_basis  s     ii##D)GGCJJrN#JJrNj aDAbEw/''<[[Ar"2Ru5%aG<

7rr   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   r2   r   r   r:   r  r^   r   )rN   rU   r   r   r   r   r  r   r  r  r   r6   )	rV   rf  r   r   r   r  r   bspl_new_realbspl_new_imags	            rZ   test_from_power_basis_complex)TestBSpline.test_from_power_basis_complex  s     ii##D)GGCJJrN#JJrNSZZ^b00j aDAbEw/''<*1ffgF*1ffgF"}2F FUSrr   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]
r=   )r1   r1   r1   r1   r1   rr  r  )r3   r1   r1   r1   r1   r1   r1   r^   r   N)rN   r{  r   r  r   r   r6   )rV   r   r   r   s       rZ   test_from_power_basis_exmp&TestBSpline.test_from_power_basis_exmp  sM     HH_%HH_%''A)(L09; 7eDrr   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   r1   rB   Fwriterk   r4   )rN   r{  setflagsrl   r   r   ry   )rV   r5   r6   rn   rY   s        rZ   test_read_onlyTestBSpline.test_read_only  s    HHaVHHcUO	


	


[[Ar"
% a""r||B/#56rr   c                 <   ^ [        TS9nU4S jn[        SX25        g )Nr}   c                 j   > UR                   u  p nTR                  X#   X#* S-
     S5      nU" U5        g )Nr1   i'  )rd   rl   )r   rY   r5   r7   rn   rW   s        rZ   	worker_fn/TestBSpline.test_concurrency.<locals>.worker_fn  s3    eeGA!QT1RT7E2BbErr   rk   )rc   r(   )rV   rW   rY   r  s    `  rZ   test_concurrencyTestBSpline.test_concurrency  s    2&	
 	 I1rr   cygwinz'threading.get_native_id not implemented)r   r   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   r1   rk   r5   z.datzw+)moderI   r   r6   )rc   rN   rl   	threadingget_native_idmemmapstrjoinr5   rI   r   r6   r   )rV   tmpdirrY   rn   ro   tidt_mmc_mms           rZ   test_memmapTestBSpline.test_memmap  s      ![[Ar"R5%%'yyV[[1SE78t ssyy		;##QyyV[[1SE78t ssyy		;##Q"x(rr   rH  N)=rI  rJ  rK  rL  r[   rg   rp   ru   rz   r   r   skip_xp_backendsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r  r  r  r$  r.  xfail_xp_backendsr6  r<  rC  rP  re   markparametrizer   rY  r`  ru  r  r  r  r  r  r  r  r  r  xfailsysplatformrf   r  rM  rH  rr   rZ   r.   r.   2   sM   !F
)*
>D 
$ l+OPk*KLgk2/ 3 M Q/A
;1	.E&W? (
6?FG4 f%9:S ;S
A M:#
F7+, v&PQB RB4	1!1 [[VU2q\2% 3%:D(6T [[],EF[[XuQx0 1 G4C"$+$ [[Y )C D8D8 [[Y )C DTDTE&7	2 [[ 8  
)
)rr   r.   insert_knotc                   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)r@   r3   rE   r?         @      @c           	         UR                  SUR                  S9nUR                  U5      S-  n[        X4SS9n[	        UR
                  5      [	        UR                  5      UR                  4n[        [        X5      6 nUR                  U5      n[        UR
                  UR                  UR
                  5      SS9  [        UR                  UR                  UR                  S UR                  * S-
   5      SS9  XS   :w  a  UOUS S n	UR                  U	S	USS  US S -   -  45      n	[        U" U	5      U" U	5      SS9  UR                  U5      S-  n
[        X:SS9n[        X2R                  XJ4SS
9SS9nUR                  U5      n[        UR
                  UR
                  SS9  [        UR                  UR                  UR                  U5      R                  UR                  U5      R                  4SS
9SS9  XS   :w  a  UOUS S n	UR                  U	S	USS  US S -   -  45      n	[        U" U	5      U" U	5      SS9  g )Nr   rH   r>   r  r^   r   r1   r:   r   r!  )rR   rS   sinr   r	   r5   r6   r7   r   r   r  r   rT   concatcosr   )rV   r  rW   r   r   r]  rd   spl_1fspl_1rn   y1spl_y1spl_yyspl_yy1s                 rZ   test_insertTestInsert.test_insert  s    IIarzzI*FF1IqL + '):355)A355I&+,%FHH!5EBFHHYsuufQh,?!@uM B%-QQsVYYC123B012Br7 VVAY\#AQ/#Axxax'@AF$$T*		5777IIHHcood+--v/A/A$/G/I/IJQRHS	
 B%-QQsVYYC123B012r
GBKe<rr   zxval, m))r@   r<   )r3   r>   )r2  r   )r?   r<   )r  r<   c           	         UR                  SUR                  S9nUR                  U5      S-  n[        XESS9n[	        [        U[        UR                  5      [        UR                  5      UR                  4US96 nUR                  X5      n[        UR                  UR                  UR                  5      SS9  [        UR                  UR                  UR                  S UR                  * S-
   5      SS9  XS	   :w  a  UOUS S	 n	UR                  U	S
USS  US S	 -   -  45      n	[        U" U	5      U" U	5      SS9  g )Nr   rH   r>   r  mr^   r   r1   r:   r   )rR   rS   r  r   r   r   r	   r5   r6   r7   r  r   rT   r  )
rV   r  r  rW   r   r   r]  r  r  rn   s
             rZ   test_insert_multiTestInsert.test_insert_multi  s    IIarzzI*FF1IqL +(/1B3551I355QUV

 (FHH!5EBFHHYsuufQh,?!@uMB%-QQsVYYC123B012Br7rr   c                    [         R                  R                  S5      nSu  p4UR                  [         R                  " UR                  X4-   S-   S95      5      nUR                  UR                  USS4S95      n[        XVU5      nUR                  UR                  XTS-      XT* S-
     S95      nUR                  U5      n	UR                  UR                  XTS-      XT* S-
     SS	95      n
[        U" U
5      U	" U
5      S
S9  g )N90  rF   r1   r   r>   r<   )lowhighr   r  r  r   r^   r   )	rN   rU   default_rngrT   r   uniformr   r  r   )rV   rW   r   rX   r7   r5   r6   r]  xvr  rn   s              rZ   test_insert_randomTestInsert.test_insert_random(  s    ii##E*JJrwws{{A{678JJs{{Aq	{23aAZZA#Qr!tW=>#ZZA#Qr!tW2FGBr7rr   r  )	r   皙?rA   rC         @      @      @gffffff@r  c                    UR                  SUR                  S9nUR                  U5      S-  n[        X4SS9u  pVn[	        UR
                  XV45      u  pV[        XVUSS9nUR                  U5      n	[        XR                  SS9u  pn[        U	R                  UR                  U
5      S	S
9  [        U	R                  S U* S-
   UR                  US U* S-
   5      S	S
9  [        R                  R                  S5      R!                  SSSS9nUR                  U5      n[        U	" U5      UR                  [#        XX45      5      S	S
9  g )Nr   rH   r>   r  r   r   Tperr^   r   r1   r   r   r   )   r  )rR   rS   r  r   r   rT   r   r  r   rd   r   r5   r6   rN   rU   r  r  r   )rV   r  rW   r   r   r5   r6   r7   r]  r  tfcfr   rn   s                 rZ   test_insert_periodicTestInsert.test_insert_periodic6  s    IIarzzI*FF1IqL#a2::v&aA:6#2wwD1	Be<!A

2er!t9(=EJ		%%d+333KZZb	2::eE;.G#HuUrr   r   Nr   c                 R   UR                  SUR                  S9S-  [        R                  -  nUR	                  U5      UR                  U5      pT[        X4SU-  -   SS9nXl        [        X4SS9nXl        [        X5S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   rH   r<   r2   r>   r        @r^   r   )rR   rS   rN   pir  r  r   r   r  r   r5   r6   )rV   r   rW   r   y_rey_imr]  spl_respl_imr  r  spl_1respl_1ims                rZ   test_complexTestInsert.test_complexJ  s    IIarzzI*Q.6VVAYq	d 2d7Na8%#Aq1(#Aq1(#$$R($$R(77R		\!9Frr   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  r>   r   r1   r<   r>   r?   r   r   r   r   Tr  )	rN   r{  onesri  r   rJ   rL   r   r  )rV   r  r7   r5   r6   r]  s         rZ   +test_insert_periodic_too_few_internal_knots6TestInsert.test_insert_periodic_too_few_internal_knotsa  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)	Nr>   r   r1   r  r   r:   r   r  )rN   r{  r  ri  r   rJ   rL   r  )rV   r7   r5   r6   r]  s        rZ   test_insert_no_extrap TestInsert.test_insert_no_extrapu  s    HHaS!A#Y-QqS	9:GGCFQJN#aA:&OOB ' :&OOA ' :&OOAO# '& '& '& '&s$   /CC,C=
C),
C:=
DrH  )rI  rJ  rK  rL  re   r  r  r  r  r  r  r  r  r  rM  rH  rr   rZ   r  r    s     [[V%AB!= C!=H [[C88&8 [[T $8 VV" [[]T:,>?G @G, ($rr   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   r1   r:   zder = z  k = )r`   ra   err_msg)rd   rN   uniquer   r   r   r7   )	rY   r  r   r`   ra   r5   r6   r7   r   s	            rZ   check_splev,test_knots_multiplicity.<locals>.check_splev  s    %%aIIaLEE!A$s(C122A/2s:;aQC0!A)se6!##.G	Irr   r1   r<   r>   r?   r   r  r1   r   )r   r~   r~   )rc   	enumerate_make_multiplesr   )r  r7   rY   r  rX  r   s         rZ   test_knots_multiplicityr    s^    I !$q12EAQ!}B3u5 % 3 rr   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   r1   r3   r@   _naive_Br   r7   r4  r5   c1c2s         rZ   r  r    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rr   c                  ^ ^^^^ T TT   :X  a  TmOUR                  TT 5      S-
  mTT   T s=::  a  TTS-      ::  d   e   eTT:  a  TTR                  S   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!
r1   r   c              3   X   >#    U  H  nTTU-
     [        TTTU-
  T5      -  v   M!     g 7fNr
  ).0r  r6   r4  r7   r5   r   s     rZ   	<genexpr>_naive_eval.<locals>.<genexpr>  s-     F1q1vAqsA..s   '*)searchsortedr   sumr   )r   r5   r6   r7   rW   r4  s   ```` @rZ   r   r     s     	AaDyOOAq!A%Q41!A#6a!''!*q.(((FFa1FFFrr   c                   ^ ^^^ TR                   S   TS-   -
  nUTS-   :  d   eTR                   S   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   r1   c              3   L   >#    U  H  nTU   [        TTUT5      -  v   M     g 7fr  r
  r  r4  r6   r7   r5   r   s     rZ   r   _naive_eval_2.<locals>.<genexpr>  s%     =Hqqthq!Q**H   !$)r   r  r   )r   r5   r6   r7   rW   rX   s   ````  rZ   r   r     sr    	
acA!8O8771:??Q41!=E!H===rr   c                    [        U5      US-   -
  nXCS-   :  d   eUR                  S   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$ )Nr1   r   r@   r<   Fr   )ri  r   r   r   r  rN   
nan_to_num)r   r5   r6   r7   rX   sr4  rY   s           rZ   r  r    s    A!A#A!8O8771:??
A1X!!!ac!e*%@C	qTBMM!$$$  Hrr   c                     [         R                  " [        U 5      5      n [         R                  " X S:  U S:  -  U S:  U S:  -  U S:  U S:*  -  /S S S /5      nUR	                  U5      $ )z*A linear B-spline function B(x | 0, 1, 2).r   r<   r1   c                     gNr@   rH  r   s    rZ   <lambda>B_012.<locals>.<lambda>  s    brr   c                     U $ r  rH  r"  s    rZ   r#  r$    s    Arr   c                     SU -
  $ NrA   rH  r"  s    rZ   r#  r$    s    Arr   )rN   
atleast_1dr	   	piecewiserT   )r   rW   results      rZ   r   r     sv    
'*+A\\!1uQ/!VA.!VQ/1 )+~FHF ::frr   c                     [         R                  " [        U 5      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).r1   r<   r   c                     X -  S-  $ r'  rH  r"  s    rZ   r#  B_0123.<locals>.<lambda>  s
    13r6rr   c                     SU S-
  S-  -
  $ )Ng      ?r2  r<   rH  r"  s    rZ   r#  r-    s    41T6A+-rr   c                     SU -
  S-  S-  $ )NrB   r<   rH  r"  s    rZ   r#  r-    s    BqD19q=rr   c                     gNr3   rH  r"  s    rZ   r#  r-        2rr   c                     g)Ng       rH  r"  s    rZ   r#  r-    s    3rr   c                     gr1  rH  r"  s    rZ   r#  r-    r2  rr   znever be here: der=)rN   r(  r	   rL   r)  )r   r   condsfuncspiecess        rZ   r  r    s    
'*+AUQUq1u%q1u-E
ax!-(* 
 .se455\\!E*FMrr   #   r>   c                 &   [         R                  R                  S5      n[         R                  " UR                  X-   S-   5      5      nUR                  U 5      nUR	                  U5      UR	                  U5      pT[
        R                  " XEU5      $ )N{   r1   )rN   rU   r   r   rT   r   construct_fast)rX   r7   rW   r   r5   r6   s         rZ   rc   rc     sj    
))


$C


13q5!"A

1A::a="**Q-q!!!**rr   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   Nr1   r:   )r6   r7   r5   copyr   )rY   r6   r7   t1s       rZ   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   rC   r  r?  )rN   rl   r  r  r   r5   r6   r7   rd   rn   r   rY   xnewc_dstackr  r   b2)rV   rn   r   rY   r  s        rZ   setup_methodTestInterop.setup_method	  s    [[BruuHb)VVBZr&CCacc?#%1 $&KK2bee8R0	UU133QSS=!))RH%!##tww,rr   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)Nr^   r_   zCalling splev.. with BSplinematchr1   r   )rE  rY   rH  r   r   rd   rN   rT   rJ   rL   rT  r   r6   rA  	transposer5   r7   )rV   rE  rY   rH  r   rU  r  rd   s           rZ   
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   r^   r   r1   r<   T)full_output)rn   r   r   r-  r   r   r   )rV   r   r   rd   r5   r6   r7   tck_fr   r   rY   s              rZ   test_splrepTestInterop.test_splrep1  s    ww1Ql,,q$aA.A.1v{{  $7q!Qa!%0a!%0Qx1}} 1]E* SM1Q4e,rr   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 holdrL  r>   )	rn   r   rN   rF  rJ   rL   r   r-  rK   )rV   r   r   y2s       rZ   test_splrep_errorsTestInterop.test_splrep_errorsI  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 )	Nr3  rH   r>   r   r^   r   r   T)r  rS  )	rN   rR   rS   r   r   r-  r   rT   r   )	rV   r   rY   urd   u1b_fu_fr   s	            rZ   test_splprepTestInterop.test_splprepY  s    IIb

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

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

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

5?3QUCrr   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 unpackrL  r   rd  r>   )numrX  ) >Irg   >Krh  zError on input data)r1   r>   r<   r?   )r   g333333?g?r1   )	rN   rR   r   rJ   rL   r   r-  rl   rK   )rV   r   r^  s      rZ   test_splprep_errorsTestInterop.test_splprep_errorsh  sH   IIe$$Y/:-HIAJ J:-HIMM! J KK21%9,=>QCL ?9,=>MM1# ?
 E:-BCQCL D:-BCMM1# D :-BCqc4^$ DC/ JIII
 ?>>> DCCC DCsS   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   r2  rE   r  r   r_   zCalling sproot.. with BSplinerL  r/   )mestr1   r<   r   )r>   r<   r?   r   r   )rY   rH  rN   r{  r  r   r   r5   r6   r7   rJ   rL   rO  rT   r   r   )rV   rY   rH  rootsc2rrrs         rZ   test_sprootTestInterop.test_sproot  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   r1   r~   F)r`   check_0dzCalling splint.. with BSplinerL  r<   )r>   r<   )r`   check_shape)rY   rH  r   r   rd   r,  rJ   rL   r6   rO  rN   rT   r5   r7   r   )rV   rY   rH  rn  integrs        rZ   test_splintTestInterop.test_splint  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   r1   r1   r<   r>   r^   r   r<   )rY   rH  ri  r5   r6   r@  rN   r   zerosr   r   r-  r7   r   r?  r   rT  rV   rY   ctb_crX   bdtck_ds          rZ   test_splderTestInterop.test_splder  s   &&$''"AQSSCH$B##((*CAveeC2%#))AB-*?!@@AAYacchhj#ss%;<eAhU;eAhU;ttuQx'''!"g....!%////  #rr   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 ry  )rY   rH  ri  r5   r6   r@  rN   r   r{  r   r   r-  r7   r   r?  r   rT  r|  s          rZ   test_splantiderTestInterop.test_splantider  s   &&$''"AQSSCH$B##((*CAveeC2%#))AB-*?!@@A]((!##((*c33)?@eAhU;eAhU;ttuQx'''!"g....!%////  #rr   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 )Nr<   r   r1   r^   r   rN  r   )rY   rH  rn   r5   r   r   r6   r7   r   r   r?  r   rT  r   rA  rO  rN   rT   )rV   rY   rH  rn   r  tnbntck_nrU  rF  tck_n2bn2s               rZ   r  TestInterop.test_insert  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''''&%((((rr   )rY   rH  r  rd   rE  rn   r   N)rI  rJ  rK  rL  rI  rP  rU  rZ  rb  ri  rp  rv  r  r  r  rM  rH  rr   rZ   rC  rC    s=    -H6-0' D%:C"H(0"0")rr   rC  c                      \ rS rSr\R
                  " SS\R                  -  5      r\R                  " \5      r	S 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  r@   rA   c                 n    UR                  U R                  5      UR                  U R                  5      4$ r  )rT   rn   r   r  s     rZ   _get_xyTestInterp._get_xy  s'    zz$''"BJJtww$777rr   c                     [        [        5         [        U R                  U R                  SS9  S S S 5        g ! , (       d  f       g = f)NrE   r  )rJ   rK   r   rn   r   rV   s    rZ   test_non_int_orderTestInterp.test_non_int_order  s*    9%tww37 &%%s	    9
Ac                     U R                  U5      u  p#[        X#SS9n[        U" U5      USSS9  [        X#SSS9n[        U" U5      USSS9  g )Nr   r  r~   r_   r:   r7   r"  r  r   r   rV   rW   rn   r   rY   s        rZ   test_order_0TestInterp.test_order_0  P    b!r+"rE:r4"rE:rr   c                     U R                  U5      u  p#[        X#SS9n[        U" U5      USSS9  [        X#SSS9n[        U" U5      USSS9  g )Nr1   r  r~   r_   r:   r  r  r  s        rZ   test_linearTestInterp.test_linear  r  rr   r7   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   r1   r<   r>   r?   r   )r   r1   r<   r>   r?   r   r   r   zShapes of xrL  r  rJ   rL   r   rV   r7   r   r   s       rZ   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   r1   r1   r<   r>   r?   r  zx to not have duplicatesrL  r  )r   r<   r1   r>   r?   r   zExpect x to be a 1D strictly)r1   r:   )rJ   rL   r   rN   rT   r   r  s       rZ   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                 x    U R                  U5      u  p#S H!  n[        X#U5      n[        U" U5      USSS9  M#     g )Nr<   r>   r?   r   r   r   r~   r_   r  )rV   rW   rn   r   r7   rY   s         rZ   test_not_a_knotTestInterp.test_not_a_knot  s:    b!#A"21-AAbE2E> $rr   c           	      X   U R                  U5      u  p#[        X#SSS9n[        U" U5      USSS9  [        SS5       H  n[        U" US   US9U" US	   US9S
S9  M      [        X#SSS	S9n[        U" U5      USSS9  [        SS5       H  n[        U" US   US9U" US	   US9S
S9  M      g )Nr   r   re  r~   r_   r1   r   r   r:   dy=r   r7   rf  r"  )r  r   r   r   )rV   rW   rn   r   rY   r4  s         rZ   test_periodicTestInterp.test_periodic!  s    b! rJ?"rE: q!AAbeNAbfO%H  rJRH"rE:q!AAbeNAbfO%H rr   r  c                 H   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'   UR                  U5      UR                  U5      pe[        XVUSS9n[        U" U5      US	S
9  g )Nr   r   rk   r   r:   r   r   re  r~   r   )rN   rU   r   r   rg  rT   r   r   )rV   r7   rW   rX   r   r   r   rY   s           rZ   test_periodic_randomTestInterp.test_periodic_random1  s     ii##D)GGC%%a(2-.a 3&u!zz!}bjjm1qq*=!ae,rr   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'   UR                  U5      UR                  U5      pT[        XESSSS	9n[        U5       H  n[        U" XG   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   r<   r@   r:   r1   r   r   r  r~   r   )rn   r   rN   rU   r   rg  r  r   r{  r  r  rT   r   r   r   )rV   rW   rX   r   r   r   rY   r4  s           rZ   test_periodic_axisTestInterp.test_periodic_axis>  s   GGMM!ii##D)a 1$ruu,GGAJ!BEE	"HHaVvvay!vvay!zz!}bjjm1qq*1EqAAadGQq!tW59 !A$1R56rr   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   r:   r1   r   r   re  )rN   rU   r   r   rg  rJ   rL   r   )rV   r   r7   rX   r   r   s         rZ   test_periodic_points_exception)TestInterp.test_periodic_points_exceptionO  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   r>   r   r<   r   )	rN   rU   r   r   rg  r{  rJ   rL   r   )rV   r   r7   rX   r   r   r5   s          rZ   test_periodic_knots_exception(TestInterp.test_periodic_knots_exceptionZ  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   re  T)r  r7   r~   r   r1   r   r   r   )r   rn   r   r   r   r   r   )rV   r7   rY   rd   r]  r4  s         rZ   test_periodic_splevTestInterp.test_periodic_spleve  s     tww1jITWWdgg415DGGS!QtwwZe4 q!A,CC477q!1> rr   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 )Nr>   r   re  r  r~   r   r   rk   r   r:   r   )
r   rn   r   r   r   rN   rU   r   r   rg  )rV   rY   cubr   rX   r   r   s          rZ   test_periodic_cubicTestInterp.test_periodic_cubicr  s    tww1jI$''477J?$''
CLu= ii##D)GGC%%a(2-.a 3&u!qq*=!
3!c!f51rr   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 )Nr>   r   re  c                 &   > [        U TTT[        S9$ )Nr}   )r   rN   )r   r6   r7   r5   s    rZ   r#  6TestInterp.test_periodic_full_matrix.<locals>.<lambda>  s    K1ar$Brr   r~   r   )r   rn   r   r    r!   rN   	vectorizer   )rV   rY   rX  r6   r7   r5   s      @@@rZ   test_periodic_full_matrix$TestInterp.test_periodic_full_matrix  su     tww1jIDGGQ'&twwA>\\BC$''
BtwwKe<rr   c                    U R                  U5      u  p#S/n[        X#SS U4S9n[        U" U5      USSS9  [        U" US   S5      UR                  US   S   UR                  S	9SSS
S9  [        X#SUS 4S9n[        U" U5      USSS9  [        U" US   S5      UR                  US   S   UR                  S	9SSS
S9  g )Nr1   g       @r<   re  r~   r_   r:   r1   r   rH   F)r`   ra   rs  r  r   r   rT   rS   )rV   rW   rn   r   r   rY   s         rZ   test_quadratic_derivTestInterp.test_quadratic_deriv  s    b!i rT3K@"rE:bfaLJJs1vay

J3UU	
 rS$K@"rE:beQKJJs1vay

J3UU	
rr   c                    U R                  U5      u  p#SnS/S/pe[        X#XEU4S9n[        U" U5      USSS9  [        U" US   S5      UR                  US   S   UR                  S	9SSS9  [        U" US
   S5      UR                  US   S   UR                  S	9SSS9  S/S/pe[        X#XEU4S9n[        U" U5      USSS9  g )Nr>   r1   rB   )r1   rC   r  r~   r_   r   r1   rH   r:   r<   r   r  )rV   rW   rn   r   r7   der_lder_rrY   s           rZ   test_cubic_derivTestInterp.test_cubic_deriv  s    b!  y7)urq%.A"rE:beQKJJuQx{"**J5E	
 	bfaLJJuQx{"**J5E	
 x&urq%.A"rE:rr   c                 <   Su  p#UR                  X1R                  S9nUR                  U5      nSS/nSS/n[        XEX&U4S9n[	        U" U5      USSS	9  [	        UR                  U" US
   S5      U" US
   S5      /5      UR                  U V	V
s/ s H  u  pU
PM	     sn
n	UR                  S95        [	        UR                  U" US   S5      U" US   S5      /5      UR                  U V	V
s/ s H  u  pU
PM	     sn
n	UR                  S95        g s  sn
n	f s  sn
n	f )N)r   r   rH   )r1   g      ()r<   r1   r  )r<   rB   re  r~   r_   r   r1   r<   r:   )rR   rS   r  r   r   r   rT   )rV   rW   r7   rX   r   r   r  r  rY   r   vals              rZ   test_quintic_derivsTestInterp.test_quintic_derivs  s   IIazzI*FF1IF#'"qq%.A!ae%8!AaD!*a!aj!9:

#?IRC#?rzz
R	T!AbE1+q2{!;<

#?IRC#?rzz
R	T $@#?s   D.Dunstabler   c                     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 )Nr>   r  )r<   rC   r  r~   r_   )r   rn   r   r   r   )rV   r7   r5   r  rY   s        rZ   test_cubic_deriv_unstable$TestInterp.test_cubic_deriv_unstable  sY     DGGQ'"twwt}M$''
DGG%eDrr   c           	         SnU R                  U5      u  p4[        UUR                  US-   5      US   -  USS  US S -   S-  UR                  US-   5      US   -  5      n[        X4X%S/S/4S9n[	        U" U5      USSS	9  [
        R                  " U" US   S5      S
SS9(       d   e[
        R                  " U" US   S5      S
SS9(       d   eg )Nr<   r1   r   r:   rA   r  r  r~   r_   r@   r'  )r  r   r  r   r   r*  r+  )rV   rW   r7   rn   r   r5   rY   s          rZ   test_knots_not_data_sites$TestInterp.test_knots_not_data_sites  s     b!b!r!u$AB"Sb'!R'!r"v%

 rq)/6(';= 	"rE:||AbeQKe<<<||AbfaL#u===rr   c                     SnUR                  SS/5      nUR                  SS/5      n[        X4US/S/4S9nUR                  SSSUR                  S9nUS-  n[	        U" U5      US	S	S
9  g )Nr>   r@   r3   r1   r@   r  r  r?  rH   r~   r_   )rT   r   rl   rS   r   )rV   rW   r7   r   r   rY   rn   r   s           rZ   test_minimum_points_and_deriv(TestInterp.test_minimum_points_and_deriv  sy     JJBx JJBx qQ'WI0FG[[R2::[6U"rE:rr   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)r3   r<   r>   r?   r   r   r  r  *   )r  r  r  )rV   r   r   lrs        rZ   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                    UR                  S5      nUS-  nS/S/pT[        [        SS9   [        X#XE4S9  S S S 5        S/S/pT[        [        S	S9   [        X#XE4S9  S S S 5        g ! , (       d  f       N6= f! , (       d  f       g = f)
Nr   r<   )r   r   r1   r   zBad boundary conditions at 0.rL  r  )ir   zBad boundary conditions at 6.)rR   rJ   rL   r   )rV   rW   r   r   r  r  s         rZ   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&A7&
A47
Bc                    SnU R                  U5      u  p4USU-  -   nS/S/pe[        X4X%U4S9n[        U" U5      USSS9  [        R                  " U" US   S	5      US   S	   SS
9(       d   e[        R                  " U" US   S	5      US   S	   SS
9(       d   eS H  n[        X4US9n[        U" U5      USSS9  M!     g )Nr>   r2   )r1   y              @)r1   y      @       @r  r~   r_   r   r1   r'  r:   r   r1   r  )r  r   r   cmathr+  )rV   rW   r7   rn   r   r  r  rY   s           rZ   r  TestInterp.test_complex  s    b!#b&[ !zK=urq%.A"rE:}}Qr!ua[%(1+uEEE}}Qr"vq\58A;FFF A"2Q/AAbE2E> rr   c                     UR                  SUR                  S9nUR                  SUR                  S9nS H  n[        X#US9nU" U5        M     g )Nrk   rH   r  r  )rR   int32r   )rV   rW   r   r   r7   rY   s         rZ   test_int_xyTestInterp.test_int_xy(  sM    IIbI)IIbI) A"11-AaD rr   c                 p    UR                  SSS5      nUS S S2   nUS S S2   nS H  n[        X4US9  M     g )Nr:   r1   r   r   r  r  )rl   r   )rV   rW   rn   r   r   r7   s         rZ   test_sliced_inputTestInterp.test_sliced_input2  sB    [[Q$ssGssGAqq) rr   c                    UR                  SUR                  S9nUS-  nUR                  UR                  UR                  * 4 H>  n[        R
                  " US5      R                  U5      n[        [        [        X#5        M@     g )Nrk   rH   r<   r:   )
rR   rS   rP   rQ   xpxatsetrJ   rL   r   )rV   rW   r   r   zs        rZ   test_check_finiteTestInterp.test_check_finite<  sg    IIb

I+qD&&"&&266'*Aq"!!!$A*&8!? +rr   )r1   r<   r>   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 )Nrk   r<   r  )listr   r   )rV   r7   r   ar   s        rZ   test_list_inputTestInterp.test_list_inputE  s6     rO1aT111% s   4c                 t   U R                  U5      u  p#UR                  X#4SS9nSSS/4/nSSS/4/n[        X#SXE4S9n[        U" U5      US	S	S
9  [        U" US   S5      UR	                  US   S   UR
                  S9S	S	S
9  [        U" US   S5      UR	                  US   S   UR
                  S9S	S	S
9  g )Nr1   r!  r3   rA   rB   rC   r>   re  r~   r_   r   rH   r:   )r  r   r   r   rT   rS   )rV   rW   rn   r   r  r  rY   s          rZ   test_multiple_rhsTestInterp.test_multiple_rhsL  s    b!XXrhQX'b"Xb"XrUNC"rE:beQKJJuQx{"**J5E	
 	bfaLJJuQx{"**J5E	
rr   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   r>   r   r   r   r   r   r1   r   r   r   r  )rN   rU   r   r   r   r6   r   )	rV   r   r7   rX   r   r   rY   d_ld_rs	            rZ   test_shapesTestInterp.test_shapes]  s    ii##D)GGCJJAJ&'JJQ1aLJ)qQ'ssyyQ1aL((( 3::i()*3::i()*qQc
;ssyyQUQY1a0000rr   c                    U R                  U5      u  p#UR                  U5      n[        X#SSS9n[        X#SS/S/4S9n[        UR                  UR                  SS9  [        X#SSS9n[        X#SS/S/4S9n[        UR                  UR                  SS9  [        X#S	S
S9n[        X#S	S S/4S9n[        UR                  UR                  SS9  [        X#SSS9n[        X#SS S9n[        UR                  UR                  SS9  [        [        5         [        X#SSS9  S S S 5        UR                  UR                  U5      UR                  U5      4SS9nSSS/4/nS	SS/4/n[        X#SXg4S9n[        X#SSS9n[        UR                  UR                  SS9  [        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UR                  U5      UR                  U5      pSUR                  S5      4/nSUR                  S5      4/n[        XXU4S9n[        XU	SS9n[        UR                  UR                  SS9  g ! , (       d  f       GN\= f)Nr>   rr  re  r  r^   r   )rr  rq  r  r<   )Nrq  r  rs  typor1   r!  r@   rp  r   r  r   r   r   r   r  r  rq  )r  r  r   r   r6   rJ   rL   r   r  rN   rU   r   r   rT   r{  )rV   rW   rn   r   rX  rH  r  r  r   r7   rX   r   r   r  r  s                  rZ   test_string_aliasesTestInterp.test_string_aliasesl  sn   b!VVBZ  !Y?!vh5IJbdd/  !(>@!*0F8(<>bdd/  !5FG!dXJ5GHbdd/  !\B!T:bdd/ :&rF; ' XXrvvbz266":.QX7b"Xb"X!e^D!(>@bdd/ ii##D)GGCJJAJ&'JJQ1aLJ)zz!}bjjm1 288I&'(288I&'(as<a;bdd/1 '&s   I44
Jc                 x   [         R                  R                  S5      nSu  p4[         R                  " UR                  US95      nUR                  US9n[	        XS5      n[        XVXs5      nUR                  U5      n[        UR                  XVU45      u  pn[        XX;5      n[        UR                  USSS9  g )Nr   )r>   r   r   r~   r_   )rN   rU   r   r   r   make_interp_full_matrrT   r   r   r   r6   )rV   rW   r   r7   rX   r   y_npr   r  r   r   r5   rY   s                rZ   test_full_matrixTestInterp.test_full_matrix  s    ii##D)wwszzqz)*zzqz!4#"4t7ZZ^bjj4t"45aqQ*Re%8rr   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      r>       r<   r1   Nr:   r   )offsetr~   r   )rN   rU   r   r   intdiagflatr{  r  diagonalr   r   linalgsolve)rV   r   rX   r7   r  r  r4  urlldr  rY   s               rZ   test_woodburyTestInterp.test_woodbury  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?# !rr   rH  N)0rI  rJ  rK  rL  rN   rl   r  rn   r  r   r  r  r  r  re   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r&  rM  rH  rr   rZ   r  r    s   
 
RBEE	"B	B88;; [[S,/* 0* [[S,/* 0*?I  [[S"45
- 6
-7"	>	7 [[S,/
? 0
?2 =
,;,T [[j)E *E>&
;5.5?"*@ [[S,/& 0&
"130j9?rr   r  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).
r1   rH   )
r   rN   r{  rS   r   r  r,   evaluate_all_bsplslr"  )r   r   r5   r7   rX   Ar  r  leftbbr6   s              rZ   r  r    s     66QVV66QVVaZ!^###	A
!rzz*A1XtQ4<D??1+a/D ''d9 !!VDF]
  	AHrr   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.r1   rH   )r   rN   rT   r   r{  rS   r   r  r,   r)  dotTr*  r"  )r   r   r5   r7   r  rX   r+  r  r  r,  r-  rN  Yr6   s                 rZ   make_lsq_full_matrixr2    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rr   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:  r>   r   r:   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r3  r1   r:   )rcond)r   r   r5   r7   r2  r   r   r6   r   r   rN   r!  lstsq)rV   r3  r   r   r5   r7   c0AYrY   aar   r  r   s                rZ   
test_lstsqTestLSQ.test_lstsq  s     VVTVVTVVTVV3
a%aA1A!v6R ssyyQVVaZ!^---- iioob2o6Aq!R rr   c           	         / [        UR                  U R                  U R                  U R                  45      QU R
                  P7u  p4pVUR                  U5      n[        X4XVUS9n[        X4XVXqS9n	[        UR                  U	R                  SS9  [        UR                  U	R                  SS9  UR
                  U	R
                  :X  d   eg )Nr9  wr3  r~   r   )
r   rT   r   r   r5   r7   ry   r   r   r6   )
rV   r3  rW   r   r   r5   r7   rC  rY   b_ws
             rZ   test_weightsTestLSQ.test_weights!  s     Hc"**tvvtvvtvv&>?GG
aLLOA!v6aAA=SUU/SUU/sscee||rr   c           	      0   / [        UR                  U R                  U R                  U R                  45      QU R
                  P7u  p#pE[        R                  R                  S5      R                  UR                  S   S9nUR                  U5      n[        X#XEUSS9n[        X#XEUSS9n[        X#XESS9n	[        UR                  UR                  SS	9  UR                  UR                  U	R                  UR                  -
  5      S:  5      (       a   eg )
Nr   r   r   r4  rB  r5  r9  r~   r   )r   rT   r   r   r5   r7   rN   rU   r  r  r   r   r   r6   r   abs)
rV   rW   r   r   r5   r7   rC  b_neb_qrb_no_ws
             rZ   test_weights_sameTestLSQ.test_weights_same.  s    Gc"**tvvtvvtvv&>?GG
aII!!$'//QWWQZ/@JJqMqQQyAqQQt< qD9U366"&&DFF!23e;<<<<<rr   c                    / [        UR                  U R                  U R                  45      QU R                  PU R
                  P7u  p4pV[        R                  R                  S5      nUR                  USSS4S9nUR                  U5      n[        X8XEUS9n	U	R                  R                  UR                  S   U-
  S-
  SSS4:X  d   eg )	Nr   r   r   r   r   r9  r   r1   )r   rT   r   r5   r7   rX   rN   rU   r   r   r6   r   )
rV   r3  rW   r   r5   r7   rX   r   r   rY   s
             rZ   r  TestLSQ.test_multiple_rhs;  s    Gc"**tvvtvv&67GGG
aii##D)JJQ1aLJ)JJqMA!v6ssyyQWWQZ!^a/Aq9999rr   c                 F   / [        UR                  U R                  U R                  45      QU R                  PU R
                  P7u  p4pVSn[        R                  R                  S5      nUR                  Xg4S9n	UR                  U	5      n	[        X9XEUS9n
[        U5       Vs/ s H  n[        X9S S 2U4   XEUS9PM     nnU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 )Nr>   r   r   r9  r^   r   )r   rT   r   r5   r7   rX   rN   rU   r   r   r   r   r6   r0  r   )rV   r3  rW   r   r5   r7   rX   nrhsr   r   rY   r4  r-  coefss                 rZ   test_multiple_rhs_2TestLSQ.test_multiple_rhs_2E  s    Gc"**tvvtvv&67GGG
aii##D)JJQIJ&JJqMA!v6 T{$"! a1a4!v>" 	 $5;7;aQ%'';78::ss/	$7s   %DDc                 d   / [        UR                  U R                  U R                  45      QU R                  PU R
                  P7u  p#pESn[        R                  R                  XV4S9nUR                  U5      n[        X'X4SS9n[        X'X4SS9n	[        UR                  U	R                  SS9  g )Nr>   r   r5  r9  r4  r^   r   )r   rT   r   r5   r7   rX   rN   rU   r   r   r6   )
rV   rW   r   r5   r7   rX   rQ  r   rJ  b_neqs
             rZ   test_multiple_rhs_3TestLSQ.test_multiple_rhs_3T  s    Gc"**tvvtvv&67GGG
aII1),JJqMqQ$7a9=e4rr   c                    / [        UR                  U R                  U R                  45      QU R                  P7u  p4nUR                  U R
                  S-  5      n[        X6XEUS9n[        X2R                  U5      XEUS9n[        X2R                  U5      XEUS9n	[        U" U5      U" U5      SU	" U5      -  -   SSS9  g )N      ?       @r9  r2   r^   r_   )
r   rT   r   r5   r7   r   r   r  r  r   )
rV   r3  rW   r   r5   r7   r  rY   r  r  s
             rZ   r  TestLSQ.test_complex]  s     =3rzzDFFDFF#34<dff<aZZ(+,A17q''"+qFCq''"+qFC!d1gDG3%eLrr   c                    / [        UR                  U R                  U R                  45      QU R                  P7u  p#nUR                  U R
                  S-  5      nUR                  XU4SS9n[        X%X45      n[        X!R                  U5      X45      n[        X!R                  U5      X45      n[        U" U5      U" U5      SU" U5      -  -   SSS9  UR                  XU4SS9n[        X%X45      n[        X!R                  U5      X45      n[        X!R                  U5      X45      n[        U" U5      U" U5      SU" U5      -  -   SSS9  g )NrZ  r1   r!  r2   r^   r_   )r   rT   r   r5   r7   r   r   r   r  r  r   )	rV   rW   r   r5   r7   r  rY   r  r  s	            rZ   test_complex_2TestLSQ.test_complex_2i  s"    =3rzzDFFDFF#34<dff<aZZ(+,XXrhQX'A1(q''"+q4q''"+q4!d1gDG3%eL XXrhQX'A1(q''"+q4q''"+q4!d1gDG3%eLrr   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 )Nrk   r1   r  r7   r3  )rN   rR   astyper  r   r   rV   r3  r   r   r5   s        rZ   r  TestLSQ.test_int_xy  sK    IIbM  %IIbM  %AOa1V4rr   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 )
Nrk   rH   r1   r  r`  r:   rA   r^   r   )rN   rR   float32r   r   ra  floatr   )rV   r3  r   r   r5   spl_f32spl_f64x2s           rZ   test_f32_xyTestLSQ.test_f32_xy  s    IIb

+IIb

+AO!!Qv>!HHUOQXXe_ahhuo6
 eafn#WR[u=rr   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 )Nr:   r1   r   r>   r`  )rN   rl   r   r   )rV   r3  rn   r   r   r5   s         rZ   r  TestLSQ.test_sliced_input  sI     [[Q$ssGssGAqMa1V4rr   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   r<   r>   r:   r9  )
rN   rR   ra  rf  r   rP   rQ   rJ   rL   r   )rV   r3  r   r   r5   r  s         rZ   test_checkfiniteTestLSQ.test_checkfinite  sd     IIbM  'qDAqM&&"&&266'*AbE*oqQN +rr   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  )r   r   r5   r3  )r   r   r5   r  r   rb  s        rZ   r  TestLSQ.test_read_only  sO     &&$&&$&&a	


	


	


!A5rr   r7   r1   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   r:   r   r4  r`  r5  r1   rA   r^   r   )r   r   r   rN   rl   r   r   )rV   r7   r   r   r5   spl_norm_eqspl_qrrn   s           rZ   test_qr_vs_norm_eqTestLSQ.test_qr_vs_norm_eq  s~     vvtvv1BKK!aeQ/3%aA9E qd;eafn#B%@rr   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 )
Nr<   r>   r5  r`  r1   r:   rA   r^   r   )rN   repeatr   r   r   r5   r   )rV   r   r   r  spl_2rn   s         rZ   test_duplicatesTestLSQ.test_duplicates  s    IIdffa IIdffa !DIdff$?eafn#b	5959rr   rH  N)&rI  rJ  rK  rL  rN   rU   r   r   rX   r7   r   r   r   r   rl   r5   parametrize_lsq_methodsr?  rE  rL  r  rS  rW  r  r]  r  rj  r  rp  r  re   r  r  r  r   rw  r|  rM  rH  rr   rZ   r7  r7    sv   
 ))


%CDAq


1A

1AAaD!B%+Q/A! ! 
 
= : : 0 05 	M 	MM, 5 5 
> 
> 5 5 O O 6 6 [[S$uQ{"34A 5A:rr   r7  c                   4    \ rS rSrSrS r\S 5       rS rSr	g)PackedMatrixi  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 )Nr<   r1   r   )r  r  ncrA  r   )rV   r  r  r  s       rZ   __init__PackedMatrix.__init__  sQ    vv{{{{awwqzV\\!_,,,rr   c                 L    U R                   R                  S   U R                  4$ Nr   )r  r   r  r  s    rZ   r   PackedMatrix.shape  s    vv||A''rr   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$ )Nr1   r   )rN   r{  r   r  r   minr  r  )rV   outnelemr4  nels        rZ   todensePackedMatrix.todense  s    hhtzz"Qsyy|$AdggA.6C:>&&DSD/C4;;q>$++a.3"6667 % 
rr   )r  r  r  N)
rI  rJ  rK  rL  __doc__r  propertyr   r  rM  rH  rr   rZ   r  r    s%    - ( (rr   r  c                 R   SSK Jn  U" S[        R                  SS9nU R                  nU R
                  nU R                  nUR                  u  pUR                  S   U:X  d   eUR                  5       n
UR                  5       n[        X(5       H  nXl   n[        X5       H  nU[        X5      :  a    M'  U" XS4   XS4   5      u  nnnUXS4'   [        SU	5       H'  n[        UUXU4   XU4   5      u  XU4'   XUS-
  4'   M)     SXS4'   [        UR                  S   5       H$  n[        UUXU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   )get_lapack_funcslartg	preferred)rI   ilp64r1   r@   r:   rH   )scipy.linalg.lapackr  rN   rS   r  r  r  r   r@  r   r  fprotar  r  r{  int64)a_pr   startrowr  dlartgr  r  r  r  nzRr  r4  oir  r6   r  r  r  offsR_ps                        rZ   _qr_reduce_pyr    s    5gRZZ{KF 	AZZF	BGGEA771:??	A	
B8YrACJ Q!tWa1g.GAq! AdG1b\%+Aq!qD'1T7%C"Q$ac6 "AeH 288A;'%+Aq"T(B!tH%E"a4"T( (   * aggaj!"D
q"((4rxx8"
=C7Nrr   c                 0    X-  X-  -   nU* U-  X-  -   nXE4$ )z@Givens rotate [a, b].

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

rH  )r6   r  r  rY   r>  r-  s         rZ   r  r    s)     #)B
AB6Mrr   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   Nr1   .r<   r:   r!  )r  r   r  rN   r   r   r  r  )
r  r   r  r   r  r  r6   r4  r  summs
             rZ   fpbackr     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&		 !
 Hrr   c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
TestGivensQRi4  c                 r    Sn[         R                  " U[        S9nUS-  SSU-   -  -   n[        X25      nX4XR4$ )Nr>   rH   r1   )rN   rR   rf  r   )rV   rX   r7   r   r   r5   s         rZ   _get_xytTestGivensQR._get_xyt7  s@    IIau%qD1ac7NQzrr   c                 V   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                  X/XE[        R2                  " U5      U5      u  n  n[#        UUS S 2S4   SS9  g )	Nrk   r   r1   rH   r^   r   gvIh%L=-a=)r  r   rj  r*  r5  r  r0  r   indicesrN   ascontiguousarrayr  datar   r  r,   	qr_reducer   minimumr   rH  r"  r  r  r  ry   )rV   rX   r   r   r5   r7   a_csrqr  qTyr  r  r  r+  r  y_c_fullc_bandedr   s                      rZ   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 !!!addA1aRTU!QAU;rr   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 )	Nrk   r   r1   rH   r^   r   F)check_dtype)r  r   rj  r   r  rN   r  r  r  r   r  r  r,   r  r   r  r   r  r  )rV   rX   r   r   r5   r7   r  r  r  r  r+  r  r  RRr   s                  rZ   test_py_vs_compiled TestGivensQR.test_py_vs_compileda  s   ]]1%
a %%aA.WWQZ!^a''''w!A#w'%%fBHH=JJqA#&B'q$wZq%1b.acc.		188?uu}}U+rr   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 )Nrk   r1   rH   r   r^   r   )r  rN   rR   rf  r,   data_matrixr   r   rj  tocsrr  r   r  ra  r  r   r   )rV   rX   r   r   r5   r7   rC  r+  r  r  r  r  a_wA_offset_s                  rZ   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''''rr   c                    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                  " XhX#XE[        R
                  " U5      U5      u  n  n[        XSS9  g )Nrk   r<   r~   r   )
r  rN   rF  r,   r  ry   r  r  r  r   )rV   rX   r   r   r5   r7   r+  r  r  r  r6   r  r   s                rZ   test_fpbackTestGivensQR.test_fpback  s    ]]1%
aEE!T'N ,,Q1bll1oF2B'1b,1L??1!bll1oqIAqE*rr   c                    SnU R                  U5      u  p#pE[        R                  " US-   4[        S9nU HM  n[	        [
        R                  " XEXqUS-   5      U5        [	        [
        R                  " XEXqSU-  5      U5        MO     g )Nrk   r1   rH   r<   )r  rN   r{  rf  r   r,   r)  )rV   rX   r   r   r5   r7   
zero_arrayr  s           rZ   test_evaluate_all_bspl#TestGivensQR.test_evaluate_all_bspl  s{    ]]1%
aXXq1uhe4
D**1!a%@*N**1!A#>
L rr   rH  N)rI  rJ  rK  rL  r  r  r  r  r  r  rM  rH  rr   rZ   r  r  4  s"    !<F,6("+Lrr   r  c                     [         R                  R                  [         R                  R                  [         R                  R	                  [
        5      5      SU 5      $ )Nr  )ospathr  abspathdirname__file__)basenames    rZ   	data_filer    s8    77<<(AB* *rr   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   r?   r<   r>   r@   r2  r1   r:   r   z)``x`` and ``y`` length must be at least 5rL  )rN   rU   r   r   rg  r  normalrJ   rL   r   r   r@  rR   r  re   r   )rV   r   rX   r   r   x_duplexception_messages          rZ   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.npzr   r   y_GCVSPLN-C6?F)r`   ra   r  )rN   loadr  r   r   )rV   r  r   r   r  y_comprs         rZ   test_compare_with_GCVSPL,TestSmoothingSpline.test_compare_with_GCVSPL  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UR                  U5      UR                  U5      pT[        XESS9n[        XESS	S
9nU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   r?   r<   r>   r@   r2  )lamrr  r  r   r:   r^   r   N)rN   rU   r   r   rg  r  r  rT   r   r   rl   r   )	rV   rW   r   rX   r   r   
spline_GCVspline_interpgrids	            rZ   test_non_regularized_case-TestSmoothingSpline.test_non_regularized_case	  s     ii##D)GGC%%a(1,q01qD266!a%= 1a4'#**Ra*@@zz!}bjjm1*1R8
*1IF{{1Q42A.
4(%d+"	$rr   r<   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[        UR                  XE45      u  pE[        XE5      nUR                  [        S5      SS	9 H  nUR                  U5      n[        R                  " U[        U5      5      R!                  S
5        [        XEU5      n	[#        U" XG   5      XW   -
  5      n
[#        U	" XG   5      XW   -
  5      nX:  d  M  [%        SU
S SUS 35      e   g )Nr   r   r?   r<   r>   r@   r2  rk   r   g      >@zJSpline with weights should be closer to the points than the original one: z.4z < )rN   rU   r   r   rg  r  r  r   rT   r   choicer   r  r  r  r  r  rH  rL   )rV   rW   r   rX   r   r   r]  indrC  spl_worigweighteds               rZ   test_weighted_smoothing_spline2TestSmoothingSpline.test_weighted_smoothing_spline	  sC    ii##D)GGC%%a(1,q01qD266!a%= 1a4'#**Ra*@@2::v&#A) ::eCjr:2C
AFF1c#h##C()!2E s16{QV+,D5=1612H  $CCG)3$,R="2 3 3 3rr   rH  N)rI  rJ  rK  rL  r  r  r  re   r  	fail_slowr  rM  rH  rr   rZ   r  r    s6    
(>6Tp$* [[13 3rr   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.r1   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   rN  )
r  ixiyr6   r7   nytxtyr   r   s
      rZ   r  bspline2.<locals>.<genexpr>B	  sL      7!"E"Ib i!Aq"b/)AaBO;,5 <!s   AA)ri  r  r   rN   rT   )r   r5   r6   r7   nxrB  r  r  r  r   r   s     ``  @@@@@rZ   bspline2r  :	  s    DAqFB	R1qB!A#II	R1qB!A#II
 7 7b	7 7C::c?rr   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   r1   r3   r@   rN  r  s         rZ   rN  rN  G	  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7Nrr   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      $ )Nr1   c              3   L   >#    U  H  nTU   [        TTUT5      -  v   M     g 7fr  r   r  s     rZ   r  bspline.<locals>.<genexpr>X	  s$     6Xqta1am#Xr  )ri  r  r   )r   r5   r6   r7   rX   s   ```` rZ   r~  r~  U	  sD    A
QA1H3q6Q;''6U1X666rr   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     rZ   r  &NdBSpline0.__init__.<locals>.<genexpr>t	  s     6Abx~~b))As   #%c              3   T   #    U  H  n[         R                  " U[        S 9v   M      g7f)rH   N)rN   rT   rf  )r  tis     rZ   r  r  u	  s     ?Qrrzz"E2Qs   &(N)ri  r   rK   rT  r7   r5   r6   )rV   r5   r6   r7   rA  s        rZ   r  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noner1   r   )ri  r5   r   r7   rN   r  rT  	itertoolsproductr6   prodrN  rT   )rV   r   rA  r4  r%  tdxdr7   r*  itersidxterms               rZ   __call__NdBSpline0.__call__x	  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)r6   r7   r5   Nr>   )rI  rJ  rK  rL  r  r  rM  rH  rr   rZ   r  r  [	  s    8"rr   r  c                   |   \ rS rSrS r\4S jr\4S jrS rS r	S r
S rS	 rS
 rS rS r\4S j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S  rS!r g)"TestNdBSplinei	  c                 &   [         R                  R                  S5      nSu  p4Sn[         R                  " UR	                  X4-   S-   S95      nUR	                  X54S9nUR                  U5      nUR                  U5      n[        XgU5      n[        U4Xt5      n	UR	                  SS9n
UR                  U
5      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  rF   r   r1   r   r?  r~   r   r   )
rN   rU   r  r   r  rT   r   r   r   r   )rV   rW   r   rX   r7   n_trr5   r6   rY   nbxis              rZ   test_1DTestNdBSpline.test_1D	  s    ii##E*GGCKKQUQYK/0KKaYK'JJqMJJqMA!tQ"[[b[!ZZ^ 	2ag;"E	+"QW+$$!aggaj(AAAArr   c                     U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XxS4$ )Nr   r>   r  r<   rR   r   r5   r6   	rV   rW   r   r   r]  y_1r  t2r  s	            rZ   make_2d_caseTestNdBSpline.make_2d_case	  s    IIaLqD +dQqSj"1Q/eeUWWUU1d7^eggdAg..qyrr   c                 V   UR                  S5      nUS-  n[        X#SS9nUR                  SUR                  S9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XxUR
                  UR
                  4$ )Nr   r>   r  r   rH   r2  r<   )rR   r   rS   r5   r6   r7   r&  s	            rZ   make_2d_mixedTestNdBSpline.make_2d_mixed	  s    IIaLqD +IIarzzI*S0dQqSj"1Q/eeUWWUU1d7^eggdAg..suuegg%%rr   c                    / SQnU R                  US9u  p4nU VVs/ s H  u  pgUS-  US-  SU-  -   -  PM     nnnU V	V
s/ s HJ  n	[        U	U V
s/ s H  n
[        R                  " U
5      PM     sn
[        R                  " U5      U5      PML     nn	n
[        R                  " U[        R                  S9n[        UR                  U5      UR                  XR                  S9SSS9  [        X4SS	9nU" U5      R                  [        U5      4:X  d   e[        U" U5      UR                  XR                  S9SS
9  [        R                  " U5      n[        R                  US'   UR                  U5      n[        UR                  U" U5      5      UR                  / SQ5      5        [        R                  R                  S5      nUR                  SS9S-  nUR                  U5      nU" U5      nUR                  S:X  d   eUR                  US5      R                   nUS   US   pv[        [#        XS9US-  US-  SU-  -   -  SS
9  g s  snnf s  sn
f s  sn
n	f )Nr2  rE   )rE   r1   )r   r2  r}   r>   r<   rH   Fr~   rt  r`   r  r   r  )TFFr  )r?   r>   r<   r   r   )r?   r>   )r:   r<   )r   .)r1   .)r)  r  rN   rT   rS   r   r   r   ri  rP   r   r   rU   r  r  r   r0  r   )rV   rW   r!  r(  r  r7   r   r   targetr   r   rH  bspl2r   r*  rrrs                   rZ   test_2D_separableTestNdBSpline.test_2D_separable	  s)   /%%%,	467B&1!Q$!Q$1*%B7 

 B (*+1A+

2	
  	 
 ZZ"**-

2

6
<$)"	$ "A&Ry3r7+---b	

6
<5	J ZZ^664ZZ^r+RZZ8L-MN ii##E*[[i[(1,ZZ^r||v%%% jjW%''6{CK1/11qs
+%	9M 8
 ,
s   II I1!IIc                    Sn/ SQnU VVs/ s H  u  pEUS-  US-  SU-  -   -  PM     nnnU R                  US9u  pxn	UR                  XX4SS9n
Sn[        XzSS9nU" U5      n[        XxU	5      " U5      nUR                  S:X  d   e[	        UUR                  U/S	-  5      S
S9  U" U5      R                  [
        R                  " U5      S S UR                  R                  US  -   :X  d   e[	        U" U5      UR                  XaR                  S9S S 2S 4   SSS9  UR                  U
S5      n[        XSS9nU" U5      nUR                  S:X  d   eUR                  SUR                  S9U-  n[	        UUS
S9  U" U5      R                  [
        R                  " U5      S S UR                  R                  US  -   :X  d   e[	        U" U5      UR                  XaR                  S9S S 2S S 4   SSS9  g s  snnf )Nr<   r/  r>   r}   r!  r0  r  r?   r?   r~   r   r:   rH   FgvIh%,=r1  r   r   r<   r<   )r<   r<   )r)  r   r   r   r   rN   r6   rT   rS   r   r  )rV   rW   rA  r!  r   r   r2  r(  r  r7   c2_4r   bspl2_4r*  
val_singlec2_22bspl2_22
target2_22s                     rZ   test_2D_separable_2!TestNdBSpline.test_2D_separable_2	  s   /467B&1!Q$!Q$1*%B7%%%,	xx(qx1B*rq)"-
||t###*!12	@
 r{  BHHRL"$5		8N$NNNN

6
<QWE$)"	$ 

4.R!,"||v%%%WWV2::W6zA

7 ""Sb!HJJ$4$4TU$;;< 	= <

6
<Qd]K$)"	$E 8s   G8c                    / SQnU VVs/ s H  u  p4US-  US-  SU-  -   -  PM     nnnU Vs/ s H
  ofSU-  -   PM     nnU R                  US9u  pxn	US-  nUR                  XX4SS9n
Sn[        XzSS	9nU" U5      n[        XxU	5      " U5      nUR                  S
:X  d   e[	        UUR                  U/S-  5      SS9  g s  snnf s  snf )Nr/  r>   r<   y               @r}   rZ  r!  r0  r  r8  r?   r~   r   )r)  r   r   r   r   )rV   rW   r!  r   r   r2  r5   r(  r  r7   r:  r   r;  r*  r<  s                  rZ   test_2D_separable_2_complex)TestNdBSpline.test_2D_separable_2_complex%
  s    /467B&1!Q$!Q$1*%B7$*+Fqbd(F+%%%,	6]xx(qx1B*rq)"-
||t###*a0u	> 8+s
   CC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  r>   r   r   r   r   r?   r1   r  )r3   r3   r~   r   r1   r2  r<   皙?g? @)rN   rU   r  r   r   r  r   r   r   r  rF  )	rV   r   r7   r  r  r6   r]  r!  r   s	            rZ   test_2D_randomTestNdBSpline.test_2D_random8
  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  )rE   g333333@)r  r  r>   r<   r  r~   r   )r,  r   r   ri  r   )
rV   r(  r  kxkyr!  r   r   r2  r3  s
             rZ   test_2D_mixedTestNdBSpline.test_2D_mixedK
  s    ++-1467B&1!Q$!Q$1*%B7"RH-Ry3r7+---b	U	, 8s   A<c                    U R                  US9u  p#pE/ SQn[        X#XE4S9nSS SS SS	 S
U-  S4S S
U-  S4S SSU-  4S SSU-  4S SU-  S
U-  4S 0nUR                  5        Hk  u  pUR                  U VVs/ s H  u  pU
" X5      PM     snnUR                  S9nU" XiS9n[        XSS9  UR                  U	5      " U5      n[        XSS9  Mm     S HK  n[        [        5         U" UUS9  S S S 5        [        [        5         UR                  U5        S S S 5        MM     g s  snnf ! , (       d  f       NB= f! , (       d  f       Mv  = f)Nr}   rM  r  r  c                 *    SU S-  -  US-  SU-  -   -  $ Nr>   r<   rH  r   r   s     rZ   r#  2TestNdBSpline.test_2D_derivative.<locals>.<lambda>[
  s    QTQTAaCZ!8rr   r1   r1   c                 $    SU S-  -  SU-  S-   -  $ rU  rH  rV  s     rZ   r#  rW  \
  s    QTQqS1W!5rr   )r   r   c                 $    U S-  US-  SU-  -   -  $ rU  rH  rV  s     rZ   r#  rW  ]
  s    AA!!4rr   r<   r1   c                     gr  rH  rV  s     rZ   r#  rW  ^
      Arr   r   c                     gr  rH  rV  s     rZ   r#  rW  _
  r\  rr   r>   c                     gr  rH  rV  s     rZ   r#  rW  `
  r\  rr   c                     gr  rH  rV  s     rZ   r#  rW  a
  r\  rr   c                     gr  rH  rV  s     rZ   r#  rW  b
  s    qrr   rH   r   r~   r   ))r:   r   r:   r   r1   )	r,  r   itemsrT   rS   r   r  rJ   rL   )rV   rW   r(  r  rO  rP  r!  r3  
test_casesr   expected_fnr   r   expected_valsdirect
via_methodbad_nus                    rZ   test_2D_derivative TestNdBSpline.test_2D_derivativeT
  sb   ++r+21"RH- 854rT1I~rT1I~"I~"I~rT1R4L.	

  *//1OBJJ/12rtqQ"r2"** ' M
 2%FF> ))"-b1JJEB  2#Fz*bV$ +z*  ( +*	# 3 +***s   =D)+D/
E /
D=	 
E	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  )r<   r>   r   r   r   r>   r   r?   r1   rF  rG  r  r~   r   )rN   rU   r  r   r   r  r   rF  r   r  r   rV   r   rO  rP  r  r  r6   r!  r3  bspl2_0rW   s              rZ   test_2D_mixed_random"TestNdBSpline.test_2D_mixed_randomz
  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   r2  r>   r  r<   r~   r   )rN   rR   r   r6   r   r5   r7   r   r  r  r   anyr   r   r   )rV   r   r   spl_xspl_yr  r   valuesrgir  rY   r!  bxis                rZ   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                 f   U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   r>   r  r<   r1   r%  )rV   rW   r   r   r]  r'  r  y_2r{  r(  r  s              rZ   make_3d_caseTestNdBSpline.make_3d_case
  s    IIaLqD +dQqSj"1Q/dQqSj1n"1Q/eeUWWegg&eeAtTM"ggdAtm$%ggdD!m$% qyrr   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  r>   rG   r   r   r>   r<   r1   r  rG   r~   r   )	rN   rU   r  r  r{  r   zipr   r   )rV   r   r   r   r  r2  t3c3r7   bspl3r   r!  r*  s                rZ   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                 6   U R                  US9u  p#n[        X#SS9n[        R                  R	                  S5      nUR                  SS9S-  u  pxn	[        XxU	5       V
s/ s H  oPM     nn
UR                  U5      nS S	 S
 S S S.nUR                  5        Hp  u  pU VVVs/ s H  u  nnnU" UUU5      PM     nnnnUR                  UUR                  S9n[        U" XS9USS9  [        UR                  U5      " U5      USS9  Mr     g s  sn
f s  snnnf )Nr}   r>   r  r  r~  r   r   c                 H    SU S-  -  US-  SU-  -   -  US-  SU-  -   S-   -  $ )Nr>   r<   r1   rH  r   r   r  s      rZ   r#  2TestNdBSpline.test_3D_derivative.<locals>.<lambda>
  s2    q1a4x1a4!A#:'>!Q$1*q.'Qrr   c                 B    SU -  US-  SU-  -   -  US-  SU-  -   S-   -  $ Nr   r>   r<   r1   rH  r  s      rZ   r#  r  
  s.    q1u1qs
';q!taczA~'Nrr   c                 B    SU -  SUS-  -  S-   -  US-  SU-  -   S-   -  $ r  rH  r  s      rZ   r#  r  
  s.    q1u!Q$
';q!taczA~'Nrr   c                 *    SU -  SUS-  -  S-   -  S-  $ )Nr   r>   r<   rH  r  s      rZ   r#  r  
  s    q1u!Q$
';a'?rr   c                     gr!  rH  r  s      rZ   r#  r  
  s    srr   ))r1   r   r   )r<   r   r   )r<   r1   r   )r<   r1   r>   )r<   r1   r?   rH   r   r~   r   )r{  r   rN   rU   r  r  r  rT   rb  rS   r   r  )rV   rW   r  r  r7   r  r   r   r   r  r   xi_npr!  rc  r   rd  xi_yi_zi_re  s                       rZ   test_3D_derivative TestNdBSpline.test_3D_derivative
  s   %%%,	"A&ii##E*++7++a/aaL)LqL)ZZ RNN?*

  *//1OBMRSUMCc[c37UMSJJ}BJJJGME",m%HE,,R04m%P	  2 * Ts   D%D
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  r>   r   r   r   r   r?   r1   r  )r3   r3   r1   r~   r   rF  rG  g?rN  gffffff?)rN   rU   r  r   r   r  r   r   r  r   rF  )rV   r   r7   r  r  tzr6   r]  spl_0r!  rW   s              rZ   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  r>   r   r   r   r   r?   r1   r2   r  rF  rG  r  r~   r   )rN   rU   r  r   r   r  r   r   r  r  rF  r   )rV   r   r7   r  r  r  r6   r]  r  r  r!  s              rZ   test_3D_random_complex$TestNdBSpline.test_3D_random_complex
  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	@rr   
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 Nr>   )r7   r   )r:   r   )r\  r)  r  )r:   g            @r<   r1   r   r~   r   r{  r   r   rN   rT   r  r   )rV   r  r  r  r  r7   r  r   r   r  r   r!  r2  r*  s                 rZ   test_extrapolate_3D_separable+TestNdBSpline.test_extrapolate_3D_separable
  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 r  r  )rV   r   r  r  r7   r  r  r  r   r   r  r   r!  r2  r*  s                  rZ   test_extrapolate_3D_separable_2-TestNdBSpline.test_extrapolate_3D_separable_2  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 )Nr>   r  )r  r1   r   )r\  r   r  )r:   r2  r  r<   r1   Fr   r   r:   r~   r   )r{  r   r   rN   rT   r  r   r   )rV   r  r  r7   r  r   r   r  r   r!  r2  r*  s               rZ   #test_extrapolate_false_3D_separable1TestNdBSpline.test_extrapolate_false_3D_separable  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 )Nr>   r  r  r1   r<   r   r\  r  r  r:   r  r~   r   )	r{  r   rN   rT   rP   r  r   r   r   )rV   r  r  r7   r  r   r   r  r   r!  r2  r   r*  s                rZ   test_x_nan_3DTestNdBSpline.test_x_nan_3D-  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  r>   r>   r   r?      r  r:   r<   r1   r   rF  rG  r  r~   r   )rN   rU   r  r   r  r   flagsc_contiguousr   r0  rF  r   r  r   rl  s              rZ   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 )Nr>   r  Frz  )r{  r   r   r  	writeable)rV   r  r  r7   r  r4  bspl3_s          rZ   test_readonlyTestNdBSpline.test_readonlyX  sl    %%'	"A&qA$)BEKK! "2Q'Y6)#4444rr   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)Nrz  )r?   r   r   r   gؗҜ<r   r>   zData and knots*rL  r1   r<   )
r{  rN   rT   r   rj  r   r   r  rJ   rL   )rV   r  r  r7   r!  dmdm1s          rZ   test_design_matrix TestNdBSpline.test_design_matrixd  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  r>   r   r   r   r   r?   r1   r  c                 L    [         R                  / SQ/ SQ/ SQ4   nU" U5        g )NrF  rG  r  )rN   rF  )r   r]  r!  s      rZ   r  1TestNdBSpline.test_concurrency.<locals>.worker_fn}  s&    {&&' (B Grr   rk   )	rN   rU   r  r   r   r  r   r   r(   )	rV   r   r7   r  r  r  r6   r]  r  s	            rZ   r  TestNdBSpline.test_concurrencys  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3rr   rH  )!rI  rJ  rK  rL  r"  rN   r)  r,  r5  r@  rC  rJ  rQ  ri  rn  rw  r{  r  r  r  r  re   r  r  r  r  r  r  r  r  r  r  rM  rH  rr   rZ   r  r  	  s    B, !   " &*9X)$V>&$&,$)L@ G( ! &4Q0G&@& [[\D$<8[[]T4L94 : 94 [[X|'DE4 F4 @ 4$@2
594rr   r  c                   D   \ 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\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   r>   r<   r1   r  r^   r   r  r   r_   )r   linearr9  r~   )rN   rR   r  r  r)   r   ravelr   r6   scipy.interpolater   )rV   r   r   rt  r  rY   r!  r   rr  rs  r  RGIru  s                rZ   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   r>   r<   r7   solver)$   r?   r?   r~   r   r9  )r  r<   r<   )rN   rR   r  r  rG  r)   sslspsolvera  rf  r   r   r   )rV   r   r   r  rY   r!  rt  values4r   r*  r2  values22s               rZ   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>r7   )r  rX  )r>   r1   )r1   r>   r]  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   r2  r>   r<   r  r^   r   )	rN   rR   r  r  r)   r  r  r   r  )	rV   r7   r   r   r  rY   r!  rt  r   s	            rZ   rQ  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                 0   [         R                  " S5      n[         R                  " S5      S-   n[         R                  US'   US S 2S 4   S-  US-  SU-  -   S S S 24   -  n[        [        5         [        X4USS9  S S S 5        g ! , (       d  f       g = f)Nr   r   r:   r>   r<   r1   r  )rN   rR   rP   rJ   rL   r)   )rV   r   r   rt  s       rZ   test_2D_nansTestMakeND.test_2D_nans  s{    IIaLIIaL3"1d7Q!Q$1*dAg!66:&!, '&&s   1B
B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   rA   rB   rC   r  r  )r1   r<   r1   r<   r1   r1   )r1   r<   r>   r<   r1   r1   )r1   r<   r<   r<   r1   r1   )rN   r{  )rV   r   r   r  s       rZ   _get_sample_2d_dataTestMakeND._get_sample_2d_data  sP    HH./HH./HH""""""	
 Qwrr   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 )	Nr1   r  r  r9  r1   gffffff@g333333@r   ffffff
@333333?r>   r1   r  r  rC   r  r3   r>   r~   r   r  r)   r   rN   r{  r0  r   rV   r   r   r  r   ru  r!  s          rZ   test_2D_vs_RGI_linear TestMakeND.test_2D_vs_RGI_linear  sk    **,aA61*%qfaAXX668 99: 	 	R#b'6rr   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>   r  cubic_legacyr9  r  r  r~   r   	r  r)   r  r  r   rN   r{  r0  r   r  s          rZ   test_2D_vs_RGI_cubicTestMakeND.test_2D_vs_RGI_cubic  sq    **,aA61#++>%qfaGXX668 99: 	 	R#b'6rr   r  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 )Nr>   ư>)r7   r  ra   r  r9  r  r  r~   r   r_   r  )rV   r  r   r   r  r   ru  r!  s           rZ   test_2D_vs_RGI_cubic_iterative)TestMakeND.test_2D_vs_RGI_cubic_iterative  ss     **,aA61&tD%qfaGXX668 99: 	 	R#b'DArr   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   r  quintic_legacyr9  r  r  r~   r   r  r  s          rZ   test_2D_vs_RGI_quintic!TestMakeND.test_2D_vs_RGI_quintic  sr    **,aA61#++>%qfa8HIXX668 99: 	 	R#b'6rr   zk, meth))r1   r  )r>   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   rS  r  r9  gffffff?rI  rF   r  r~   r   )
rN   rU   r  cumsumr  r)   r  r  r   r   )rV   r7   methrndmr   r   r  rt  r   ru  r!  s              rZ   test_3D_random_vs_RGI TestMakeND.test_3D_random_vs_RGI  s     yy$$V,IIdlll*+IIdlll*+IIdlll*+9-A!9f#++F%qQiEYY3Sw?R#b'6rr   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maxiterr1   r  rL  r7   r>   )r  rJ   rL   r)   rN   rG  )rV   r   r   r  solver_argss        rZ   test_solver_err_not_converged(TestMakeND.test_solver_err_not_converged  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rH  N)rI  rJ  rK  rL  r  r  re   r  r  rQ  r  r  r  r  r  gmresgcrotmkr  r  r  r  rM  rH  rr   rZ   r  r    s    7(B4 [[S"JK> L>- 77 [[X		3;;'?@B AB7 [[N77Grr   r  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)
TestFpcheci   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)Nr1   ro  r<   r   z1D sequencerL  )rN   rR   r   re   r   rL   _bfpcheckrV   r7   r5   r   s       rZ   test_1D_x_tTestFpchec.test_1D_x_t#  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)Nr>   r<   r1   rG   rk   z	Need k+1*rL  )	rN   rR   dfitpackfpchecre   r   rL   r  r  )rV   r7   rX   r  r5   r   s         rZ   test_condition_1TestFpchec.test_condition_1.  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)Nr>   r   r1   r<   r   )r1   r<   r>   r?   r  r:   r   zLast k knots*rL  zFirst k knots*r  r  r  r  r@  re   r   rL   )rV   r7   r5   r   tts        rZ   test_condition_2TestFpchec.test_condition_2C  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)
Nr>   r   r1   r<   r   r1   r<   r>   r  r?   r     zInternal knots*rL  )r  r  r  r  re   r   rL   r  s       rZ   test_condition_3TestFpchec.test_condition_3Y  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)
Nr>   r   r1   r   r  rd  zOut of bounds*rL  r:   r  )rV   r7   r5   r   rn   s        rZ   test_condition_4TestFpchec.test_condition_4f  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)Nr1   )r   r   r1   r<   r<   )rH  rH  rH  r/   Schoenberg-Whitney*rL  )r   r   r   r  r  re   r   rL   r  r  r  s       rZ   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 )Nr1   )r   r   r1   r1   r   g333333?r   )r  r  r  r  r  s       rZ   test_condition_5_k1TestFpchec.test_condition_5_k1  sE    #JqQ'1,,,zz!"***rr   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)	Nr>   r   r1   r<   r   r/   r  rL  r  r  s       rZ   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)Nr>   r   r1   r<   r   rH  r?   r/   r  rL  r  r  s       rZ   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)Nr1   )	r   r   r<   r>   r?   r   r   r   r   )r1   r1   r1   @r,  r,  r  r/   r  rL  r  r  s       rZ   test_condition_5_3TestFpchec.test_condition_5_3  sT    ')qQ'2---]]:-BCJJqQ DCCs   A""
A0rH  N)rI  rJ  rK  rL  r	  r  r  r  r  r   r#  r&  r)  r-  rM  rH  rr   rZ   r  r     s4    	  *!, !> + + rr   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".
    r1   r:   r<   r^   r   )rN   r  r   ri  r  r   )	r   r5   r7   	residualsr  r4  fpartscarriescarrys	            rZ   _splitr4    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}Ô%Ir1   z5Internal error, please report it to SciPy developers.r<   N)r4  r   ri  rL   rN   r  r   )r   r5   r7   r0  r1  r  idx_max	fpart_maxr4  idx_newknotnew_knotidx_tt_news                rZ   	_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Lrr   c                   "   \ 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S rS rSrg)TestGenerateKnotsi  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   rH   r>   r3   r1   r@   r  )r7   r5   r<   r   _fitpack_repror^   r   )
rN   rR   rf  r{  r   r  rA  add_knotr<  r   )rV   r   r   r7   r5   r]  r0  _frnew_tnew_t_pyspl2
residuals2new_t2	new_t2_pys                 rZ   test_split_add_knot%TestGenerateKnots.test_split_add_knot  s    IIau%qD2q1u:HHbT1Q3Z2$!*,-aa-VaZ!O	;Q10Q10e4 qq21gkA%
a6a6	6rr   r7   r  c           	         UR                  SUR                  S9nUR                  X2R                  -  S-  5      n[	        [        X4USS95      S   n[        X4USS9S   nUR                  XbR                  S9n[        XVSS9  g )Nr   rH   r   r7   r  r:   r^   r   )	rR   rS   r  r  r  r$   r   rT   r   )rV   r7   rW   r   r   r5   r  s          rZ   test_s0TestGenerateKnots.test_s0  sy    IIarzzI*FF1UU719Q/04AA#A&ZZ**Z-E*rr   c           	          SnUR                  X!R                  S9nUS-  n[        [        X4SSS95      nUR	                  [        [        R                  " U5      S5      5      n[        US   USS9  g )	Nrk   rH   r>   r   rM  r:   r^   r   )rR   rS   r  r$   rT   r   rN   r   rV   rW   rX   r   r   knotsro   s          rZ   	test_s0_1TestGenerateKnots.test_s0_1  sd    IIazzI*qD^AA34::k"**Q-;<b	8%8rr   c           	          SnUR                  U5      nUS-  n[        [        X4SSS95      nUR                  [	        [
        R                  " U5      S5      5      n[        US   USS9  g )Nr   r>   r   rM  r:   r^   r   )rR   r  r$   rT   r   rN   r   rQ  s          rZ   test_s0_n20TestGenerateKnots.test_s0_n20  s]    IIaLqD^AA34::k"**Q-;<b	8%8rr   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)Nrk   r>   r   r7   r  nest)rN   rR   rJ   rL   r  r$   rV   r   r   s      rZ   test_s0_nestTestGenerateKnots.test_s0_nest&  s?    IIbMqD:&QR89 '&&s   A


Ac           	         UR                  SUR                  S9nU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 Vs/ s H  oqR                  XqR                  S9PM     nn[        U5      [        U5      :X  d   e[        XV5       H  u  p[        XSS9  M     [        X#USS9u  n  n
[        US   UR                  U5      SS9  gs  snf )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   rH   r>   r   rM  )r@   r@   r@   r@   r  r  r  r  )	r@   r@   r@   r@   rC   r  r  r  r  
r@   r@   r@   r@   rA   rC   r  r  r  r  )r@   r@   r@   r@   rA   rC   r  r  r  r  r  )r@   r@   r@   r@   rA   rB   rC   r  r   r  r  r  r^   r   r:   N)rR   rS   r  rN   r  r  r$   rT   ri  r  r   r   )rV   rW   r   r   r7   rR  wantedwantr5   r  r   s              rZ   test_s_switchTestGenerateKnots.test_s_switch-  s    . IIarzzI*FF1RUU719^AA6726:>A	
 BHH**T*4H5zS[((('EAA. ( d+1ab	2::a=u= Is   +"C4c                 X    [        [        S5      5      n[        XSSS9n[        U5        g )Nr   r  r1   )r  r7   )r  r   r$   next)rV   r   gens      rZ   r  !TestGenerateKnots.test_list_inputY  s$    qNQSA.S	rr   c           
      p   UR                  SUR                  S9nUR                  X!R                  -  S-  5      nSn[	        [        X#SUSS95      n[        US   UR                  / SQUR                  S9S	S
9  [        [        5         [	        [        X#SSS95        S S S 5        g ! , (       d  f       g = f)Nr   rH   r   r>   rk   rY  r:   r_  r^   r   r?   )r7   rZ  )
rR   rS   r  r  r  r$   r   rT   rJ   rL   )rV   rW   r   r   r  rR  s         rZ   	test_nestTestGenerateKnots.test_nest_  s    IIarzzI*FF1UU719^AA<="IJJ?rzzJR	
 :&23 '&&s   	B''
B5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   rG   rC  )	rN   rR   r  r  rJ   rL   r  r$   r  r[  s      rZ   rE  TestGenerateKnots.test_weightsp  s    IIaLFF1RUU719:&		"67 ' :&45 '& '& '&s   (C)C
C
C npts)r  r/   r   r  )r  {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  rk   r   r   r<   r>   rM  r   r:   r^   r   )rN   rU   r   r   r  r  r  expr   r  r$   r   )	rV   r  rn  r  r   r   r7   r5   r  s	            rZ   test_vs_splrep TestGenerateKnots.test_vs_splrepz  s     yy$$U+rwwt|||.//FF1RUU72:!A#	!2211"1%.01"5E*rr   c           	      *   Sn[         R                  " U5      nUS-  n[        [        X#SSS95      n[        R
                  " [        5       n[        X#SSS9nS S S 5        [        W5      S:X  d   e[        US   WS   5        g ! , (       d  f       N2= f)N   r>   Jz5rM  r1   r:   r   )
rN   rR   r  r$   re   warnsRuntimeWarningr   ri  r   )rV   rX   r   r   rR  r  rd   s          rZ   test_s_too_small"TestGenerateKnots.test_s_too_small  s~    IIaLqD ^AA78\\.)Qe,C *1v{{b	3q6* *)s   B
Bc                     [        / SQ/ SQ/ SQSS9n[        R                  " [        SS9   [	        U5        S S S 5        g ! , (       d  f       g = f)N)r@   r3   rA   rB   )rC   r  r  r  )r@   r@   r@   r@   r1   )rC  r  zweights are zerorL  )r$   re   r   rL   r  )rV   rf  s     rZ   test_zero_weights#TestGenerateKnots.test_zero_weights  s5    ]M]aP]]:-?@I A@@s   A
ArH  N)rI  rJ  rK  rL  rJ  re   r  r  rN  rS  rV  r\  rb  r  ri  rE  rr  ry  r|  rM  rH  rr   rZ   r>  r>    s    70 [[S/2+ 3+99:*>X4"6 [[V]3[[S.1+ 2 4+"+rr   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   r1   r<   Nr   r   rH   )
r   rN   rz  r   rh  emptyrf  r   r*  	factorial)
r5   r7   rX   deltanrintr  tiir  matrr4  s
             rZ   
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Krr   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        Xpl        U R                  R                  S:X  d   e[        U[        R                  " UR                  S   U-
  S-
  5      XGS9" U5      nXR                  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 )NrH   r1   r   r   r@  )r   r   r5   r7   rN   ry   rf  rC  r   rA  r   rh  r   a_denser  rA  r  discr  b_denser   r{  r   r  )rV   r   r   r5   r7   r  rC  r   r  rC  r   s              rZ   r  F_dense.__init__  s    12au-&vv{{a !RVVAGGAJNQ$67TUVW40;#SXXa^4<<> vv{{Z%%BHHT\\%7%7%:;;<rr   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                  U R                  S9n
[         R                  " U R                  S-  U
" U R                   5      U R"                  -
  S-  -  5      nXl        XR&                  -
  $ )Nr   )r5  r"  economic)r  r1   r   r<   )rN   vstackr  r  scipy.linalgr5  r"  r0  r   r   r   r5   r7   r   r  rC  r   r   r]  r  )rV   r;  abr5  r"  r  r  qyr  r6   r]  fps               rZ   r  F_dense.__call__  s    YYdllQ&678 	+":&SS477]WWQZ!CRC"H+r#2w'dffaT5E5EFVVDFFAITVVtvv!5 99:FF{rr   )r  r  r   r7   r  r]  r5   rC  r   r   r   )NT)rI  rJ  rK  rL  r  r  r  rM  rH  rr   rZ   r  r    s    .rr   r  c                      \ rS rSrSr\4S jrS rS r\	R                  R                  S/ SQ5      S 5       rS	 r\	R                  R                  S/ SQ5      S
 5       r\	R                  R                  S 5       r\	R                  R                  S/ SQ5      S 5       rS r\	R                  R                  SSS/5      \	R                  R                  S/ SQ5      S 5       5       r\	R                  R                  SSS/5      S 5       r\	R                  R                  SSS/5      \	R                  R                  S/ SQ5      S 5       5       r\	R                  R                  S/ SQ5      \	R                  R                  S/ SQ5      S 5       5       r\	R                  R                  S/ SQ5      \	R                  R                  S/ SQ5      S 5       5       rSrg)_TestMakeSplrepBasei  Nc                     U R                   S:X  a;  UR                  SS[        R                  -  S5      nUR	                  U5      nSnX#U4$ UR                  SSS5      nUR	                  US-  S-  5      S-  nSnX#U4$ )	Nr   r   r<   rk   gq@H&?r   rG   gQ	@)rf  rl   rN   r  r  )rV   rW   r   r   r  s        rZ   	_get_xykt_TestMakeSplrepBase._get_xykt  s~    <<:%Aqw+AAA7NAq"%A$
#Q&AA7Nrr   c           
         [         R                  " SSS5      n[         R                  " SSS5      n[        [        5         [	        XU R
                  S9  S S S 5        [        [        5         [	        SSSU R
                  S	9  S S S 5        [        [        5         [         R                  " UR                  SSS45      n[	        XSU R
                  S	9  S S S 5        [         R                  " S5      n[        [        5         [	        XS
-  USU R
                  S9  S S S 5        [         R                  " S5      * n[        [        5         [	        XS
-  USU R
                  S9  S S S 5        [         R                  " UR                  S   S45      n[        [        5         [	        XS
-  USU R
                  S9  S S S 5        [        [        5         [	        US S S2   US
-  SU R
                  S	9  S S S 5        [        [        5         [	        XS
-  SSU R
                  S9  S S S 5        [        [        5         [	        XS
-  SU R
                  S	9  S S S 5        [        [        5         [	        XS
-  S
SSU R
                  S9  S S S 5        [        [        5         [	        XS
-  SSU R
                  S9  S S S 5        [        [        5         [	        [         R                  " S5      [         R                  " S5      SU R
                  S	9  S S S 5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNj= f! , (       d  f       GN5= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNw= f! , (       d  f       GNY= f! , (       d  f       GN9= f! , (       d  f       GN= f! , (       d  f       g = f)Nr   rk   rG   ro  r  r1   r<   r  r  rf  r>   )rC  r  rf  r:   rE   r7   r  rf  )r7   rZ  r  rf  )r  rZ  rf  r   	   )rN   rl   rJ   rL   r%   rf  r  r   r   rK   rR   rV   r   r   rC  s       rZ   test_input_errors%_TestMakeSplrepBase.test_input_errors  s   KK2r"KK2r":&dll3 ' :&1T\\: ' :&Aq)*AT\\: '
 GGBK:&a41T\\B ' WWR[L:&a41T\\B ' GGQWWQZO$:&a41T\\B ' :&$B$AdllC ' 9%a43#t||D & :&a42t||< ' :&a411T\\J ' :&a412t||D ' :&		!biilc4<<P '&a '& '& '& '&
 '&
 '& '& &% '& '& '& '&s    L,L%:L7M		MM- M?N8N#(N5O?O
L"%
L47
M	
M
M*-
M<?
N
N #
N25
O
O
O'c           
      N   [        [        XX4U R                  S95      S   n[        XX4U R                  S9n[        XXSX@R                  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  r:   )r5   r7   r  rf  r^   r   )r  r$   rf  r%   r   r5   r6   r7   )rV   r   r   r7   r  r5   spl_autospl_ts           rZ   _test_with_knots$_TestMakeSplrepBase._test_with_knots2  s    EFrJqqt||DAAaF

EGG%8

EGG%8zzUWW$$$rr   r7   r1   r<   r>   r?   r   r   c                 N    U R                  5       u  p#nU R                  X#X5        g r  )r  r  )rV   r7   r   r   r  s        rZ   test_with_knots#_TestMakeSplrepBase.test_with_knots<  s"    .."aaA)rr   c           	      &   [        XX0R                  S9n[        XX0R                  S9n[        [	        XX0R                  S95      S   n[        UR                  UR                  SS9  [        UR                  USS9  [        UR                  USS9  g )Nre  r:   r^   r   )r%   rf  r   r  r$   r   r6   r5   )rV   r   r   r7   r]  spl_ir5   s          rZ   _test_default_s#_TestMakeSplrepBase._test_default_sB  sp    !!\\:"11llC<<@A"EuwwU3qu-/rr   c                 N    U R                  5       u  p#nU R                  X#U5        g r  )r  r  )rV   r7   r   r   r   s        rZ   test_default_s"_TestMakeSplrepBase.test_default_sK  s"    .."aQ1%rr   c           	      
   SnU R                   S:X  a@  [        R                  " SS[        R                  -  S5      n[        R                  " U5      nO[        R
                  " S5      nUS-  n[        R                  " 5          [        R                  " S[        5        [        X#SXR                   S:H  S9nS S S 5        [        R                  " 5          [        R                  " S[        5        [        X#SXR                   S	9nS S S 5        [        WR                  WS   5        [        [        R                  UR                  S/UR                   S
-   -  4   US
   SS9  g ! , (       d  f       N= f! , (       d  f       Nu= f)NgKH9r   r   r<   ru  r>   r8   r7   r  r  r  r1   r  r   )rf  rN   rl   r  r  rR   warningscatch_warningssimplefilterrx  r   r%   r   r5   r   r6   r7   )rV   r  r   r   rd   r]  s         rZ   ry  $_TestMakeSplrepBase.test_s_too_smallP  s$    <<:%Aqw+Aq	A		"A1A$$&!! allj.HJC ' $$&!! aa1llCC ' 	s1v&ceeaS#%%']23AU	, '& '&s   4E#1E4#
E14
Frz  c                    SnU R                   S:X  a@  [        R                  " SS[        R                  -  U5      n[        R                  " U5      nO[        R
                  " U5      nUS-  n[        X4XR                   S9n[        X4USU R                   S9nUR                  R                  S	:X  d   eUR                  R                  S	:X  d   e[        X4S	S	U-   -  -   USU R                   S9nUR                  R                  S	:X  d   eg )
Nrk   r   r   r<   r>   re  h㈵>r  r1   )	rf  rN   rl   r  r  rR   r%   r6   rA  )rV   r7   rX   r   r   r]  r  r{  s           rZ   
test_shape_TestMakeSplrepBase.test_shapem  s     <<:%Aqw*Aq	A		!A1A!!\\:AAt||DuuzzQww||q    A1ac7{a4Nww||q   rr   c                     SnSS[         R                  -  p2[         R                  " X#US-   5      n[         R                  " U5      n[	        [
        5         [        XESSS9  S S S 5        g ! , (       d  f       g = f)Nrk   r   r<   r1   :0yE>nonsenser  )rN   r  rl   rq  rJ   rL   r%   rV   Nr  rY   r   r   s         rZ   test_error_on_invalid_bc_type1_TestMakeSplrepBase.test_error_on_invalid_bc_type  sW    !BEE'1KKa!e$FF1I:&j9 '&&s   A++
A9rf  r   r  c           	         [         R                  " SS[         R                  -  S5      n[         R                  " U5      n[         R                  " SS[	        U5      5      n[        X4XRSUS:H  S9n[        X4USX!S	9n[        UR                  US   5        [        [         R                  UR                  S/UR                  S-   -  4   US   SS
9  g )Nr   r<   rk   r1   r   r  r   rC  r7   r  r  rC  r  r7   rf  r   )rN   rl   r  r  ri  r   r%   r   r5   r   r6   r7   )rV   rf  r7   r   r   rC  rd   r]  s           rZ   %test_make_splrep_with_unequal_weights9_TestMakeSplrepBase.test_make_splrep_with_unequal_weights  s     KK1RUU7B'FF1IKK1c!f%QQt'Z2GI!!tqBs1v&ceeaS#%%']23AT	+rr   c           	         S n[         R                  " SS[         R                  -  S5      n[         R                  " U5      n[         R                  X44   R
                  u  pVUR                  R                  SL d   eUR                  R                  SL d   e[         R                  " SS[        U5      5      n[         R                  Xw4   R
                  u  pUR                  R                  SL d   e[        X4USS	US
:H  S9n
[        XTUS	SUS9nU" X5        [        X6US	SUS9nU" X5        [        X4US	SUS9nU" X5        [        XVUS	SUS9nU" X5        g )Nc                     [        U R                  US   5        [        [        R                  U R                  S/U R
                  S-   -  4   US   SS9  g )Nr   r1   r  r   )r   r5   rN   r   r6   r7   )r]  rd   s     rZ   checkO_TestMakeSplrepBase.test_make_splrep_with_non_c_contiguous_input.<locals>.check  sG    CEE3q6*BEE#%%!ceeAg"67F/rr   r   r<   rk   Fr1   r   r>   r  r   r  r  )rN   rl   r  r  rF  r0  r  r  ri  r   r%   )rV   rf  r  r   r   r   r  rC  w1r   rd   r]  s               rZ   ,test_make_splrep_with_non_c_contiguous_input@_TestMakeSplrepBase.test_make_splrep_with_non_c_contiguous_input  sB   	/ KK1RUU7B'FF1Iqt xx$$---xx$$---KK1c!f%ad xx$$---QQ!t'Z2GI "17Cc !17Cc !"7Cc "B$!")+crr   c                    [         R                  " SSS5      n[         R                  " S[         R                  -  U-  5      nUS   US   peSnSn[         R                  " U/US-   -  U/US-   -  -   5      n[        X4XVUXxS US9	n	[        U	[        5      (       d   eU	R                  R                  S   SUS-   -  :X  d   eU	R                  U:X  d   e[        U	R                  S US-    [         R                  " U/US-   -  5      5        [        U	R                  US-   * S  [         R                  " U/US-   -  5      5        g )	Nr   r1   rk   r<   r:   r>   r  )xbxer7   r  r5   rZ  rf  )rN   rl   r  r  r{  r%   r?  r   r5   r   r7   r   rT   )
rV   rf  r7   r   r   r  r  r  r5   r]  s
             rZ   %test_make_splrep_impl_no_optimization9_TestMakeSplrepBase.test_make_splrep_impl_no_optimization  s*    KK1b!FF1ruu9q=!1quB HHbTQU^rda!en45 !2tW> #w''''uu{{1~a!e,,,uuzzdqsRZZA%?@!fg

B41q5>(BCrr   rX   )r   3   r3  rG   r  )rk   r   r   r1   ro  c           
      P   [         R                  R                  S5      n[         R                  S[         R                  " UR                  SS[         R                  -  US-
  S95      S[         R                  -  4   n[         R                  " U5      [         R                  " U5      -   n[        XEX R                  S:H  S9u  pgn[        XEX R                  S9n	US:X  a  US	:X  a  U R                  S:X  d2  [        U	R                  US
S9  [        U	R                  US U* S	-
   S
S9  g g )Nr:  r   r<   r   r   r  r  r  rG   r1   r^   r   )rN   rU   r  r   r   r  r  r  r  r   rf  r%   r   r5   r6   
rV   rX   r  r   r   r   r5   r6   r7   r]  s
             rZ   (test_make_splrep_matches_splrep_periodic<_TestMakeSplrepBase.test_make_splrep_matches_splrep_periodic  s     ii##C(EE!RWWS[[AIAE[BCQYNOFF1Iq	!)CEa!!\\:RAFt||z'ACEE151CEE1Wqb1f:E: (Brr   c           
         [         R                  R                  S5      n[         R                  S[         R                  " UR                  SS[         R                  -  US-
  S95      S[         R                  -  4   n[         R                  " U5      [         R                  " U5      -   n[        XEX R                  S:H  S9u  pgn[        XEX R                  US9n	[        U	R                  US U* S-
   S	S
9  g )Nr:  r   r<   r   r   r  )r  rf  r5   r1   r^   r   )rN   rU   r  r   r   r  r  r  r  r   rf  r%   r   r6   r  s
             rZ   "test_make_splrep_with_splrep_knots6_TestMakeSplrepBase.test_make_splrep_with_splrep_knots  s     ii##C(EE!RWWS[[AIAE[BCQYNOFF1Iq	!)CEa!!\\Q?q1"q&z6rr   rH  )rI  rJ  rK  rL  rf  rN   r  r  r  re   r  r  r  r  r  thread_unsafery  r  r  r  r  r  r  r  rM  rH  rr   rZ   r  r    s   G 5Qn% [[S"45* 6*
0 [[S"45& 6& [[, ,8 [[S),! -!(: [[YT(:;[[S/2+ 3 <+ [[YT(:;+ <+\ [[YT(:;[[S/2D 3 <D, [[S"34[[S"56
; 7 5
; [[S"34[[S"567 7 57rr   r  c                       \ 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
S rS	 rS
 rS rS rS rS rSrg)TestMakeSplrepi  r7   r  c                 
   SSK Jn  U R                  5       u  p4n[        R                  " S/US-   -  SS/-   S/US-   -  -   5      nU" X4S S 2S 4   XaU5      n[        X4XaU5      nS H  n	[        U" U	5      U" U	5      SS	9  M     g )
Nr   Fr1   rE   rC   r   r1   rk   r   r^   r   ) scipy.interpolate._fitpack_repror  r  rN   r{  r  r   )
rV   r7   r  r   r   r  r5   ff_dr;  s
             rZ   test_fitpack_FTestMakeSplrep.test_fitpack_F   s     	7.."aHHaS!A#Y#s+qc1Q3i78a1d7Q1%aA!$AAaD#a&u5 rr   c           	         SSK Jn  U R                  5       u  p4n[        R                  " S/US-   -  SS/-   S/US-   -  -   5      n[        R
                  " UR                  S   [        S9nU" X4S S 2S 4   XaXWS9n[        X4XaXWS9n	[        X4XaU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  r1   rE   rC   r   rH   rl  r  r^   r   )r  r  r  rN   r{  rR   r   rf  r  r   r   )rV   r7   r  r   r   r  r5   rC  fwfw_dr  r;  s               rZ   test_fitpack_F_with_weights*TestMakeSplrep.test_fitpack_F_with_weights  s     	7.."aHHaS!A#Y#s+qc1Q3i78IIaggaj.qAtG*aA+qQ1*aA!$ABqE477{{3q647???? rr   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   r>   r<   r^   r   )r  interpolaterA  rN   rU   r  r   r   r  ri  r  r  r  r  r   r   )rV   rC  r   r5   rX   r7   DD_denses           rZ   test_disc_matrixTestMakeSplrep.test_disc_matrix  s     	76ii##E*EE!Q1bggckkqk&9:1<aAqHI1vq1#((1.)113Q"wwqzQ1Wq[(((/rr   c                 t   SnU R                  U5      u  p4nUR                  S/US-   -  SS/-   S/US-   -  -   5      n[        X4X%S9u  pxnUR                  U5      UR                  U5      p[        Xv:H  5      (       d   e[	        X4X%S9n	[        US U	R                  R                  S    U	R                  SS	9  g )
Nr>   r   r1   rE   rC   r   rM  r^   r   )r  rT   r   r   r%   r   r6   r   )
rV   rW   r7   r   r   r  r  r5   r6   r]  s
             rZ   test_simple_vs_splrep$TestMakeSplrep.test_simple_vs_splrep+  s    ..$aZZQqS	S#J.!ac:;(azz!}bjjm117|||!!)/355;;q>*CEE>rr   c           	      8   SnU R                  5       u  p#n[        [        X#XS95      S   n[        X#XS9n[        X#XQU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>   rM  r:   )r5   r7   r  r^   r   )r  r  r$   r%   r   r5   r6   r7   )rV   r7   r   r   r  r5   r  r  s           rZ   r  TestMakeSplrep.test_with_knots8  s    .."a/04qq.AAa0

EGG%8

EGG%8zzUWW$$$rr   c                     SnUR                  X!R                  S9nUS-  nSn[        X4USS9nUR                  R                  S   SUS-   -  :X  d   eg )Nrk   rH   r>   r1   rM  r   r<   )rR   rS   r%   r5   r   )rV   rW   rX   r   r   r7   r]  s          rZ   test_no_internal_knots%TestMakeSplrep.test_no_internal_knotsE  sY    IIazzI*qD!!q)uu{{1~AaC(((rr   c                     SnUR                  X!R                  S9nUS-  n[        X4SS9n[        X4SS9n[	        UR
                  UR
                  SS9  g )Nrk   rH   r>   r  r^   r   )rR   rS   r%   r   r   r6   )rV   rW   rX   r   r   r]  r  s          rZ   r  TestMakeSplrep.test_default_sN  sP    IIazzI*qD!!$"11-uwwU3rr   c                    Sn[         R                  " U5      nUS-  n[        R                  " [        5       n[        X#SSS9n[        X#SSS9n[        UR                  US   5        [        [         R                  UR                  S/UR                  S-   -  4   US   SS9  S S S 5        [        W5      S	:X  d   eg ! , (       d  f       N = f)
Nru  r>   rv  rM  r   r1   r  r   r<   )rN   rR   re   rw  rx  r   r%   r   r5   r   r   r6   r7   ri  )rV   rX   r   r   r  rd   r]  s          rZ   ry  TestMakeSplrep.test_s_too_smallW  s    IIaLqD\\.)Qe,Caa51CCEE3q6*BEE#%%!ceeAg"67F0	 * 1v{{ *)s   A,B>>
Cc           	      j   [         R                  " / SQ[         R                  S9n[         R                  " / SQ[         R                  S9n[         R                  " S/UR                  S   -  [         R                  S9n[	        [
        5         [        XUSSS9  S S S 5        g ! , (       d  f       g = f)	N)g      4@gR9c@g
ףp=e@gףp=
Oi@gQm@gQo@g)\(p@gfffffq@gq=
ףq@g(\Yr@g)\r@g(\r@gQs@gQ3s@g33333Gs@皙as@r   g     hs@rH   )g     J@g     H@gLH@gffffffG@gE@g)\(D@gC@g      B@g333333@@g<@g3333339@g5@g      2@g,@g%@g@g@r@   g5{2?r   r<   ro  )rC  r7   r  )rN   rT   rS   r   rJ   rL   r%   r  s       rZ   test_issue_22704TestMakeSplrep.test_issue_22704e  s    JJ % -/JJ8 JJ  &(ZZ1 JJy1771:-RZZ@:&Q"- '&&s   B$$
B2c                 B   Su  p#UR                  X!R                  S9nUS-  n[        XEUS9n[        XEUSS9nUR                  R                  S:X  d   eUR                  R                  S:X  d   e[        XESSU-   -  -   USS9nUR                  R                  S:X  d   eg )Nrk   r>   rH   r>   r  r  rM  r1   )rR   rS   r%   r6   rA  )	rV   rW   rX   r7   r   r   r]  r  r{  s	            rZ   r  TestMakeSplrep.test_shapes  s    IIazzI*qD!!$AA.uuzzQww||q    A1ac7{a48ww||q   rr   c                 v   Su  p#UR                  X!R                  S9nUS-  n[        XESSS9n[        XES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 )Nr  rH   r>   r   rM  r1   r<   )rR   rS   r%   r6   rA  r5   r   )rV   rW   rX   r7   r   r   r  r  s           rZ   test_s0_vs_notTestMakeSplrep.test_s0_vs_not  s    IIazzI*qDAA+AA+ww||q   ww||q   ww}}Q1519,,,ww}}Q1A;...rr   rH  N)rI  rJ  rK  rL  re   r  r  r  r  r  r  r  r  r  ry  r  r  r  rM  rH  rr   rZ   r  r    s}     [[S"45	6 6	6 [[S"45@ 6@ 0?%)4.! /rr   r  c                      \ 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
S/5      S 5       r\R                  R                  S/ SQ5      \R                  R                  S	S/5      S 5       5       rSrg)TestMakeSplrepPeriodici  r   r7   r  c                     UR                  SSS5      nUR                  S5      n[        X4USU R                  S9nUR                  R
                  S   SUS-   -  :X  d   eg )Nr   rk   rG   r  r1   r  r<   )rl   r  r%   rf  r5   r   )rV   r7   rW   r   r   r]  s         rZ   r  -TestMakeSplrepPeriodic.test_no_internal_knots  sY     KK2r"GGEN!!q$,,?uu{{1~AaC(((rr   c                    Sn[         R                  " SS[         R                  -  U5      n[         R                  " U5      [         R                  " U5      -   n[        X4USU R                  S9n[        X4USU R                  S9nUR                  R                  S:X  d   eUR                  R                  S:X  d   eUR                  R                  S   USU-  -   :X  d   eg )Nrk   r   r<   r  r1   )rN   rl   r  r  r  r%   rf  r6   rA  r5   r   )rV   r7   rX   r   r   r  r  s          rZ   r  %TestMakeSplrepPeriodic.test_s0_vs_not  s     KK1RUU7A&FF1Iq	!AADLLAAADLLAww||q   ww||q   ww}}Q1q1u9,,,rr   c                    SnSSUR                   -  pCUR                  X4US-   UR                  S9nUR                  U5      n[	        XVSU R
                  S9n[        [        XW5      USS	S
9  UR                  U5      UR                  U5      -   n[	        XVSU R
                  S9n[        [        XW5      USSS
9  SUR                  U5      -  UR                  U5      S-  -   n[	        XVSU R
                  S9n[        [        XW5      USS	S
9  g )Nrk   r   r<   r1   rH   r  r  r  r  r_   r   r  r   r>   )	r  rl   rS   r  r%   rf  r   r   r  )rV   rW   r  r  rY   r   r   r]  s           rZ    test_periodic_with_periodic_data7TestMakeSplrepPeriodic.test_periodic_with_periodic_data  s    !BEE'1KKa!e2::K6FF1I!$=aqt$?FF1Iq	!!%>aqt$?bffQiK"&&)A+%!$=aqt$?rr   c                    SnSS[         R                  -  p2[         R                  " X#US-   5      n[         R                  " U5      n[	        [
        5         [        XESU R                  S9  S S S 5        g ! , (       d  f       g = f)Nrk   r   r<   r1   r  r  )rN   r  rl   rq  rJ   rL   r%   rf  r  s         rZ   $test_periodic_with_non_periodic_data;TestMakeSplrepPeriodic.test_periodic_with_non_periodic_data  s[    !BEE'1KKa!e$FF1I:&dll; '&&s   A55
Br  r   rv  c           	         [         R                  " SS/5      n[         R                  " SS/5      nUS:  a  [         R                  " SS/5      OS n[        X#USSUS9n[        X#USSUS9nUS:  a  [	        UR
                  US   5        [	        [         R                  UR                  S/UR                  S-   -  4   US   5        g )	Nr@   r3   r  r   r1   r   )rC  r7   rf  r  )rC  r7   r  r  )	rN   r{  r%   r   r   r5   r   r6   r7   )rV   r  r   r   rC  r]  rd   s          rZ   'test_make_splrep_periodic_m_eq_2_k_eq_1>TestMakeSplrepPeriodic.test_make_splrep_periodic_m_eq_2_k_eq_1  s     HHc3Z HHc3Z $%EBHHc3Z t !!q*BQQ!a0q5CEE3q6*ceeaS#%%']23A	 rr   k_fp))r1   -C6)r<   r  )r>   gAȘr  c           	      :   Sn[         R                  " SSU5      n[         R                  " S[         R                  -  U-  5      nUu  pg[	        XEXbSS9nSn	[        XES S 2S 4   US   XbS9n
[        R                  " 5          [        R                  " S[        5        [        U
S	SX-
  4[         R                  Xr-
  44US
-  5      nS S S 5        U
R                  n[         R                  " SS/5      nU" U5      n[        US   US   5        g ! , (       d  f       NM= f)Nrk   r   r1   r<   r  r  rM  r8   rA   MbP?r@   r3   )rN   rl   r  r  r   r"   r  r  r  rx  r#   rQ   r]  r{  r   )rV   r  r  rX   r   r   r7   r  rd   fp0spliner   bsx_checky_checks                  rZ   test_fperiodic_basic_fit/TestMakeSplrepPeriodic.test_fperiodic_basic_fit  s     KK1a FF1ruu9q=!QQ+14j#a&A;$$&!!(N;&#CGrvvrv6F'GUSA '
 ZZ((C:&W+
GAJ/ '&s    AD
DrH  N)rI  rJ  rK  rL  rf  re   r  r  r  r  r  r  r  r!  rM  rH  rr   rZ   r
  r
    s     G[[S"45) 6) [[S"45- 6-@"< [[S1e*-  .  [[V%QR[[S4&)0 * S0rr   r
  c                       \ rS rSrSS\4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  rk   r>   c                     UR                  XR                  S9UR                  -  U-  nUR                  U5      UR	                  U5      /nXEU4$ )NrH   )rR   rS   r  r  r  )rV   r  r7   rW   r   r   s         rZ   _get_xykTestMakeSplprep._get_xyk  sG    IIazzI*RUU2Q6VVAYq	"Qwrr   r  r   r  r  r  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 )Nr  ru  r   r  rk   r(  r  r^   r   r1   r!  )rN   rR   r  r  r  r   r&   r   r5   ri  rT   r0  r6   r   )rV   r  r  r7   r   r   	num_knotsr5   r6   u_r]  r^  r  s                rZ   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rr   c                    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   SS9  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   r<   r*  r   r^   r1   )r&  r?  r  rN   r   r   rT   r   ri  r   r&   r5   r6   r0  r7   rJ   rL   )	rV   r  r   r   rd   r^  tck_au_ar]  s	            rZ   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au5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   )I>>
Jc                     U R                  SUS9u  p#n[        U5      u  pV[        U" U5      UR                  U5      SS9  g )Nrk   r  rW   r^   r   r&  r&   r   r   rV   rW   r   r   r7   r]  r^  s          rZ   test_default_s_is_zero&TestMakeSplprep.test_default_s_is_zero:  s;    --"-,aaA%8rr   c                    U R                  SUS9u  p#n[        USS9u  pV[        USS9u  px[        XhSS9  [        U" U5      UR                  U5      SS9  [        U" U5      UR                  U5      SS9  UR                  UR                  :X  d   eUR
                  R                  UR
                  R                  :X  d   eg )Nrk   r5  r   r*  r^   r   r   )r&  r&   r   r   r"  r6   r   )	rV   rW   r   r   r7   r  u_ispl_nu_ns	            rZ   test_s_zero_vs_near_zero(TestMakeSplprep.test_s_zero_vs_near_zero@  s    --"-,a!!q)
!!u-
u-c
BHHQKe<c
BHHQKd;zzUZZ'''ww}}---rr   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   rH   r   r*  r  r  r1   r   r^   r   )	rN   rR   rf  rJ   rL   r   r&   r   r   )rV   r   rd   r,  r]  r^  s         rZ   r"  TestMakeSplprep.test_1DM  s    IIau%:&AJ ' :&a  ' :&c" ' 1#&qcT*1v||v%%%A%0 '& '& '&s#   CC.C(
C
C%(
C6rH  NrI  rJ  rK  rL  rN   r&  re   r  r  r-  r2  r8  r>  r"  rM  rH  rr   rZ   r$  r$    sl    qR 
 [[S"67A 8A: [[S"67/ 8/B9.1rr   r$  c                       \ rS rSrSS\4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)TestMakeSplprepPeriodici_  rk   r>   c                     UR                  SSUR                  -  XR                  S9nUR                  U5      UR	                  U5      /nXEU4$ )Nr   r<   rH   )rl   r  rS   r  r  )rV   rX   r7   rW   r   r   s         rZ   r&   TestMakeSplprepPeriodic._get_xykb  sE    KK1RUU7AZZK8VVAYq	"Qwrr   r  r   r  r  r  c           
         Sn[         R                  " SS[         R                  -  U5      n[         R                  " U5      [         R                  " U5      /nSSSSS.n[        XASS9u  u  pgp[        XAS	S
9u  p[        XSS9  [        U
R                  5      XQ   :X  d   e[        U
" U5      [        XgUSS9" U5      SSS9  g )Nrk   r   r<   ru  r  rH  r1   r  r   r  r^   r   r!  r  r_   )rN   rl   r  r  r  r   r&   r   ri  r5   r   )rV   r  rX   r   r   r+  r5   r6   r7   r,  r]  r^  s               rZ   r-  .TestMakeSplprepPeriodic.test_simple_vs_splprepg  s     KK1RUU7A&VVAYq	" "Bb9	  A.	qaj9 	E* 355zY\))) 	Aaa 8 ;"	0rr   c                 h   U R                  5       u  p#n[        U[        5      (       d   e[        R                  " U5      S   S:X  d   e[        X1SS9u  pE[        [        R                  " U5      US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S9u  p[        XWSS9  U
R                  US   :X  d   eU
" U5      R                  [        R                  " U5      :X  d   e[        [        R                  " U5      USS9u  p[        XWS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S9  S S S 5        g ! , (       d  f       g = f)	Nr   r<   r1   r  r   r^   r   r  )r&  r?  r  rN   r   r   rT   r   ri  r  r   r&   r7   rJ   rL   r0  )rV   r  r   r   rd   r^  r0  r1  r  r  r]  s              rZ   r2  +TestMakeSplprepPeriodic.test_array_not_list  s    --/a!T""""xx{1~""" Q'RZZ]aQ7
Q'Aau53q6{c%(m+++#a&%(+FBB/ ,1vq!!!xxa&"((1+555aj9U+uua   1v||rxx{***bjjmq*EU+uua   1v||rxx{***:&AAzB '&&s   0*H##
H1c                     U R                  SUS9u  p#n[        USS9u  pV[        U" U5      UR                  U5      SS9  g )Nrk   rX   rW   r   r  r^   r   r6  r7  s          rZ   r8  .TestMakeSplprepPeriodic.test_default_s_is_zero  s>    --"-,aa4A%8rr   c                    U R                  SUS9u  p#n[        USSS9u  pV[        USSS9u  px[        XhSS9  UR                  U5      n	[        U" U5      U	SS9  [        U" U5      U	S	S
S9  UR                  UR                  :X  d   eg )Nrk   rN  r   r   r  r   r^   r   r   r  r_   )r&  r&   r   r   r"  )
rV   rW   r   r   r7   r  r;  r<  r=  y_arrs
             rZ   r>  0TestMakeSplprepPeriodic.test_s_zero_vs_near_zero  s    --"-,a!!q*=
!!ujA
u-c
E6c
E4@zzUZZ'''rr   c                 (   [         R                  " SS[         R                  -  S5      n[         R                  " U5      n[	        [
        5         [        USS9  S S S 5        [	        [
        5         [        USSS9  S S S 5        [	        [
        5         [        USSS9  S S S 5        [        U/S	SS9u  p#U" 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       Ni= f)Nr   r<   r   r1   r  r   r  r  r^   rA  r   )
rN   rl   r  r  rJ   rL   r   r&   r   r   )rV   r   r]  r^  s       rZ   r"  TestMakeSplprepPeriodic.test_1D  s    KK1RUU7A&FF1I:&A1 ' :&a4 ' :&c:6 ' qcUJ?1v||v%%%A%0 '& '& '&s$   C!1C2D!
C/2
D 
DrH  NrC  rH  rr   rZ   rE  rE  _  sm     qR 
 [[S"780 900 [[S"78C 9C<9(1rr   rE  c                   6    \ rS rSrS rS rS	S jrS rS rSr	g)
BatchSplinei  c                    [         R                  " X#S5      nUR                  S S U l        UR	                  SUR                  S   5       Vs/ s H  od" X40 UD6PM     snU l        X0l        g s  snf Nr:   )rN   moveaxisr   _batch_shaper   _splines_axis)rV   r   r   r"  r  kwargsyis          rZ   r  BatchSpline.__init__  se    KK$GGCRL;<99RQS;UV;UR00;UV
 Ws   A.c                    U R                    Vs/ s H
  o"" U5      PM     nn[        R                  " X0R                  UR                  -   5      nUR                  (       a"  [        R
                  " USU R                  5      $ U$ s  snf rX  )r[  rN   r   rZ  r   rY  r\  )rV   r   r  r   s       rZ   r  BatchSpline.__call__  sb    %)]]3]6VAY]3JJq++agg5612r{{1b$**-?a? 4s   BNc                     U R                    Vs/ s H  oDR                  XU5      PM     nn[        R                  " XPR                  5      $ s  snf r  )r[  r,  rN   r   rZ  )rV   r  rY   r   r  r   s         rZ   r,  BatchSpline.integrate  s@    ?C}}M}VaK0}Mzz!..// Ns   Ac                     [         R                  " U 5      nUR                   Vs/ s H  o3R                  U5      PM     snUl        U$ s  snf r  )r@  deepcopyr[  r  rV   r   rB  r  s       rZ   r  BatchSpline.derivative  s>    mmD!<?LLIL&))"-LI
 J   A	c                     [         R                  " U 5      nUR                   Vs/ s H  o3R                  U5      PM     snUl        U$ s  snf r  )r@  re  r[  r#  rf  s       rZ   r#  BatchSpline.antiderivative  s>    mmD!@CMf--b1M
 Nrh  )r\  rZ  r[  r  )
rI  rJ  rK  rL  r  r  r,  r  r#  rM  rH  rr   rZ   rV  rV    s    @
0
rr   rV  c            
          \ rS rSr\R
                  R                  S\0 4\0 4\SS04\	SS04\	SS04/5      \R
                  R                  S/ S	Q5      \R
                  R                  S
/ SQ5      S 5       5       5       r
Srg)	TestBatchi  zmake_spline, kwargsr  r3   r3  r4  r5  
eval_shape)rH  r1   r  r"  ra  c                    [         R                  R                  S5      nSnSSSU4nSn[         R                  " / UQUP76 n	[         R                  " UR                  U5      SU5      n
U[
        :X  a'  SnU	S   4US	-   -  U	S   4US	-   -  -   nU[        XS
9-  nU" X4SU0UD6n[        X4X1S.UD6nUR                  " USU06n	[         R                  R                  U" U	5      U" U	5      5        UR                  S	5      UR                  S	5      p[         R                  R                  U" U	5      U" U	5      5        UR                  S5      UR                  S5      p[         R                  R                  U" U	5      U" U	5      5        [         R                  R                  UR                  " U6 UR                  " U6 5        g )Nl   UU{ rk   r<   r>   r?   )r   rk   r:   r   r1   )r5   r7   r"  )r"  r  r   )rN   rU   r  rl   rY  r   rM   rV  r  testingassert_allcloser#  r  r,  )rV   make_spliner]  r"  rm  r   rX   r   domainr   r   r7   r5   rB  refs                  rZ   
test_batchTestBatch.test_batch  s    ii##$45Aq!KK###KK

5)2t4/)A11q5!QrUHA$66AdQn,F!4T4V4!HTHHKK1j1


""3q63q62%%a(#*<*<Q*?S


""3q63q62>>!$cnnQ&7S


""3q63q62


""3==&#93==&;QRrr   rH  N)rI  rJ  rK  rL  re   r  r  r   r   r   ru  rM  rH  rr   rZ   rl  rl    s    [[2
b	!
	$
%	.
Hi0	1
Hd+	,		 [[\+;<[[VZ0S 1 =Srr   rl  rN  r  rn  )}r  r  r  r*  r  r  r@  r  r  numpyrN   scipy._lib._array_apir   r   r   r   r   r   r	   r
   scipy._external.array_api_extra	_externalarray_api_extrar  re   r   rJ   r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r!  r*  scipy.sparse.linalgsparser  scipy.interpolate._bsplinesr   r   r   r    r!   r  r"   r#   r$   r%   r&   scipy.interpolate._fitpack_implr  _fitpack_implr-  scipy._lib._utilr'   scipy._lib._testutilsr(   scipy.interpolate._ndbspliner)   r*   r  r+   r  r,   r  r  r  r.   r  r  r  r   r   r  r   r  rc   r  rC  r  r  r2  r  r~  r7  r  r  r  r  r  r  r  r  rN  r~  r  r  r  r  r4  r<  r>  r  r  r  r  r
  r$  rE  rV  rl  rH  rr   rZ   <module>r     sK   	        
    . - *     
  ! !E E B G G / / & 9 5 2 - &;;// KK11  7t
) t
) t
)n G]+,W$ W$ -W$t6,$G>  $ b +$_) _)D %&`? `? '`?F88 !++11(Y<MN  ?#~: ~: $~:B >*Z	(nL nLb*
 ()J3 J3 *J3^
7:" :"z 9j4 j4 j4ZWG WGta  a L(. >"l l #l^2, ,^Q7 Q7h ;R/( R/  R/j ;\00 \0  \0~ < h1 h1 !h1V < b1 b1 !b1J 8$S $Srr   