
    doifW                    :   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  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K.J/s  J,r0  S SK1J2r2J3r3J4r4J5r5J6r6  S SK7J8r8J9r9  S SKJ:r:J;r;J<r<  S SK=J>s  J?r@  S SKAJBrB  S S	KCJDrD  S S
KEJFrF  S SKJGrH  S SKJIrJ  S SKJKrK  \R                  R                  rM\" \5       " S S5      5       rN\" \5       " S S5      5       rOS rPS rQS rRS rSS rT\
4S jrUSRS jrVSS\
4S jrWS rX " S S5      rY\" \5       " S S 5      5       rZS! r[SSS" jr\\R                  R                  S#S$S%/5      r^\" \5       " S& S'5      5       r_ " S( S)5      r`STS* jraS+ rbS, rc " S- S.5      rdS/ re\" \)5       " S0 S15      5       rfS2 rgS3 rhS4 ri " S5 S65      rj\" \(5       " S7 S85      5       rk " S9 S:5      rl " S; S<5      rmS= rnS> ro\" \:5       " S? S@5      5       rpSA rq " SB SC5      rr " SD SE5      rs\" \;5       " SF SG\s5      5       rt\" \;5       " SH SI\s5      5       ru\" \<5       " SJ SK5      5       rv\" \<5       " SL SM5      5       rw " SN SO5      rx " SP SQ5      ryg)U    N)xp_assert_equalxp_assert_closexp_default_dtype	concat_1dmake_xp_test_casexp_ravel)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)	_dfitpack)	_bsplines)_dierckxc                      \ 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 rS rS rS  rS! rS" rS# rS$ r S% r!S& r"\#RH                  RK                  S'\&" S(S)5      5      S* 5       r'S+ r(S, r)\#RH                  RK                  S-/ S.Q5      \#RH                  RK                  S/\&" S05      5      S1 5       5       r*S2 r+S3 r,S4 r-\#RH                  RK                  S5/ S6Q5      S7 5       r.\#RH                  RK                  S5/ S6Q5      S8 5       r/S9 r0S: r1S; r2\#RH                  Rg                  \4Rj                  S<:H  S=\6S>9S? 5       r7S@r8gA)BTestBSpline1   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   r/      r   r/   r:         r:   )        r>   r1          @      @      @)r1   r1   r1   cubic      @)r>   r   r/   r/   r:   r<   )r1   r/   r/      r<   dtype)assert_raises	TypeError
ValueErrorr
   dictnperrstatenaninfarangefloat64asarrayrandomr   r3   r4   r5   )selfxpnr5   r3   r4   bs          a/var/www/html/land-ocr/venv/lib/python3.13/site-packages/scipy/interpolate/tests/test_bsplines.py	test_ctorTestBSpline.test_ctor4   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rtolr/   r:   foo)	_make_random_splinetckr   r3   r4   r5   pytestr	   AttributeError)rT   rW   rb   s      rX   test_tckTestBSpline.test_tckW   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   r1   r:   r@   r=   r   r2   r:   
   r1   rF   rA   )r
   rR   linspacewhererQ   r   )rT   rU   rW   xxexpecteds        rX   test_call_namespaceTestBSpline.test_call_namespacec   so     bjj,

B70CqI[[Ar"88BGRZZ"**Z%EsK"x(    c                    [         R                  " SSS5      n[        SS/S/SS9n[        U" U5      [         R                  " U5      S-  5        [        / SQSS/SS9n[        U" U5      [         R
                  " US	:  SS
5      5        g )Nr   r/   rh   r@   r2   )r   ffffff?r/   r<   r=   rq   rA   )rL   ri   r
   r   	ones_likerj   )rT   rk   rW   s      rX   test_degree_0TestBSpline.test_degree_0l   su    [[Ar"q!f*"r||B/#56lq!f2"rxxT	3<=ro   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  [        [        R                   XbU45      u  pxn	[        XxX45      n
[	        U" U5      UR                  U
5      SS9  g )Nr;   )r1   r:   r<   r/   r1   r@   2   rF   r   rU   r:   +=r^   )	rR   r
   ri   rQ   r   B_012maprL   r   )rT   rU   r3   r4   r5   rW   xx_npt_npc_npsplev_results              rX   test_degree_1TestBSpline.test_degree_1u   s    JJ'JJ{#A!KKS"BJJK7aDaDq 1Q4acb(9#99AaDqsrAR<RR	

 rzzA!95DT$?3!bjj6UCro   c                 4   SnUR                  S/US-   -  S/US-   -  -   5      nUR                  / SQ5      n[        UR                  US5      UR                  SS/5      5      n[        X4U5      nUR	                  SSS5      n[        U" US	S
9U" US	S
9SS9  g )Nr<   r   r/   r1   r?   r@   rA   )r8   r/   g      r?   rh   Textrapolaterx   ry   )rR   r   reshaper
   ri   r   )rT   rU   r5   r3   r4   bpbsplrk   s           rX   test_bernsteinTestBSpline.test_bernstein   s    JJsAaCyA3!9,-JJ'(2::a)2::q!f+=>qQ[[b"%240RT2	@ro   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 )Nrw   r/   rv   rx   ry   )ra   rb   ri   stack_naive_evalr   _naive_eval_2)rT   rU   rW   r3   r4   r5   rk   y_br|   y_ny_n2s              rX   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 )Nr/   rv   rx   ry   )ra   rb   rL   ri   r   r   rT   rW   r3   r4   r5   rk   s         rX   test_rndm_splevTestBSpline.test_rndm_splev   sL    !%%a[[qAw+"uRQ3%@ro   c                 v   [         R                  R                  S5      n[         R                  " UR                  S5      5      nUR                  S5      n[	        X#5      n[        U6 nUR                  UR                  pv[         R                  " Xg   Xg* S-
     S5      n[        U" U5      [        X5      SS9  g )N     r/   P   rx   ry   )rL   rS   RandomStatesortr   r
   r3   r5   ri   r   r   )	rT   rngr|   yrb   rW   r3   r5   rk   s	            rX   test_rndm_splrepTestBSpline.test_rndm_splrep   s    ii##D)GGCJJrN#JJrNQlSMssACC1[[qAw+"uR~E:ro   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 )Nrw   r/   d   rF   )ra   rr   r4   ri   r3   r5   rQ   r   )rT   rU   rW   rk   s       rX   test_rndm_unityTestBSpline.test_rndm_unity   so    2&ll133[[QSS133tAv;2::[F"r||B/0ro   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<         sizer/   r<   r=      )r<   r=   r   r   r   )rL   rS   r   r   r{   rR   r
   shape)rT   rU   r   rV   r5   r3   r4   rW   tmtprk   s              rX   test_vectorizationTestBSpline.test_vectorization   s    ii##D)GGCJJqM"JJQ1IJ&2::v&A!qAwB7bjjI)>???u{{o---ro   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<   r/   r8   r   rv   rx   ry   )	rL   rS   r   r   r_r
   ri   r   r   )rT   r   rV   r5   r3   r4   c_padrW   b_paddtrk   s              rX   
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Dro   c           	          [        5       nUR                  u  p4nX5   X5* S-
     pvS H&  n[        U" Xg/U5      U" US-   US-
  /U5      SSS9  M(     g )Nr/   TF绽|=&.>Hz>r]   ra   rb   r   )	rT   num_parallel_threadsrW   r3   _r5   r   r   extraps	            rX   test_endpointsTestBSpline.test_endpoints   sb    !%%aqAwB#FArh/rEz2:6?dQUW $ro   c           	          [        5       nUR                  u  p4n[        U" X5S-   U* S-
   S-
  5      U" X5S-   U* S-
   S-   5      SS9  g )Nr/   r   r   ry   r   )rT   r   rW   r3   r   r5   s         rX   test_continuityTestBSpline.test_continuity   sV    !%%a!aC1+-.!aC1+2E0F	ro   c                 |   [        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        [	        [
        R                  XsU45      u  pnUR                  [        XX4SS	95      n[        U" USS9U5        g )
Nrw   r8   r   r/   rv   Tr   F)ext)ra   rb   ri   r   r{   rL   rR   r   )rT   rU   rW   r3   r4   r5   r   rk   maskxx_npr~   r   r   s                rX   test_extrapTestBSpline.test_extrap   s    2&%%arUQqT\[[AbdGbL"5r	baRT7l+ 	"(5"(6	8  

RAJ7Tzz%dA"FG"$/>ro   c                     [        5       nUR                  u  p#nUS   S-
  US   S-   /nU" U5      n[        R                  " [        R                  " U5      5      (       a   eg )Nr   r/   r8   )ra   rb   rL   allisnan)rT   rW   r3   r   r5   rk   yys          rX   test_default_extrapTestBSpline.test_default_extrap   sZ    !%%adQh"	"rU66"((2,'''''ro   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
[	        [         R
                  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   r/   r8   rv   -q=gH׊>ry   )r8   r         ?r/   Trx   gƠ>)rL   rS   r   r   r{   rR   r
   r   ri   r   rQ   r   r   )rT   rU   r   r3   r4   r5   rW   rV   r   rk   xyxy_npr~   r   r^   s                  rX   test_periodic_extrap TestBSpline.test_periodic_extrap   sy   ii##D)GGCJJqM"JJqM2::v&A!4GGAJ!a% rUQqT\[[AD2Ir2TRA$Y14!$;//

RAJ7T(,

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

 ZZ(TRA$Y14!$;//bj)bd#*2."**<$	
ro   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   rx   r]   )ra   rb   r   from_splinerL   ri   r   )rT   rW   r3   r4   r5   pprk   s          rX   
test_ppolyTestBSpline.test_ppoly  sY    !%%aay)[[quc*"r"vE>ro   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   r8   rv   r/   dernurx   ry   )	ra   rb   rL   ri   r   ranger   r   
zeros_like)rT   rW   r3   r4   r5   rk   r   yds           rX   test_derivative_rndm TestBSpline.test_derivative_rndm#  s    !%%a[[1qub)UU25\AaC=Crq9#.BB"E: !
 	"1r}}R'8uEro   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:   )r8   r8   r   r/   r/   r<   r=   r   r   r   r   r   r   r   r   )r/   r<   r=   r   r   r   g2H@gη   @r<   r=   r/   r   )rL   rS   r   r   r
   rR   r   allclose)	rT   r5   r3   r   r4   rW   r|   x0x1s	            rX   test_derivative_jumps!TestBSpline.test_derivative_jumps0  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Fro   c           	         UR                  SSS5      n[        R                  " UR                  / SQ5      S9n[	        [
        R                  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 )Nr8   r=   r   r   r/   r:   r<   )r3   rx   ry   r   rF   r   r/   r/   r:   r   r:   rh   r/   r?   )ri   r
   basis_elementrR   r{   rL   r3   r4   r   r5   r   r   rQ   B_0123rj   )	rT   rU   rk   rW   r   r~   r   r   r^   s	            rX   test_basis_element_quadratic(TestBSpline.test_basis_element_quadraticJ  s   [[Q#!!BJJ|$<=

RaccN;Tzz%dCC/@"AB"|%8&r*bjj8Ud"rzz&*BJJzGdS!!BJJ|$<=[[Ar[4"aB
3%	Aro   c           	          [        5       nUR                  u  p#n[        R                  " X$   X$* S-
     S5      n[	        U" U5      [        XRX45      SS9  g )Nr/   r   rx   ry   )ra   rb   rL   ri   r   _sum_basis_elementsr   s         rX   test_basis_element_rndm#TestBSpline.test_basis_element_rndmZ  sK    !%%a[[qAw+"22!?eLro   c                    [        5       nUR                  u  p#nUS-  n[        X%U5      n[        X!R                  R                  U5      n[        X!R                  R
                  U5      n[        R                  " X$   X$* S-
     S5      n[        U" U5      R                  U" U5      SS9  [        U" U5      R
                  U" U5      SS9  g )Ny      ?      @r/   r   rx   ry   )	ra   rb   r
   r4   realimagrL   ri   r   )	rT   rW   r3   r4   r5   ccb_reb_imrk   s	            rX   
test_cmplxTestBSpline.test_cmplx`  s    !%%a(^A1q##((A&q##((A&[[qAw+"

DH59"

DH59ro   c                     [         R                  " UR                  / SQ5      5      nUR                  U" UR                  5      5      (       d   eg )Nr   )r
   r   rR   r   rN   )rT   rU   rW   s      rX   test_nanTestBSpline.test_nanm  s8    !!"**\":;xx"&&	""""ro   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   )r5   rU   r/   r   r   r]   )ra   rb   r
   ri   r   
derivativer   )	rT   rU   rW   r3   r4   r5   b0rk   js	            rX   test_derivative_method"TestBSpline.test_derivative_methodr  st    !+%%aQ1[[qAw+q!AABrIqu5uE ro   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 )Nrw   r/   r   rx   r]   axisr:   )ra   rb   ri   r   antiderivativer  r   r
   )rT   rU   rW   r3   r4   r5   rk   s          rX   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	7ro   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      SS9(       d   e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 )Nr9   r   r/   r   rx   abs_tol      r8   r>   Tr   Fr   r:   rF   iii      ?r<   g      +@   r   ir=   )r
   r   rR   mathisclose	integrate_implr   rb   r   r  rQ   r   )rT   rU   rW   i
period_ints        rX   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6G 	G G #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ro   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   )r     )r   r   r   r   r   r#  )rT   r|   rW   pr   r   s         rX   test_integrate_ppoly TestBSpline.test_integrate_ppoly  sS    q$"a 5FBAKK/KK/1 6ro   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 )Nr9   r   r   r/   r   )r
   r   r#  
isinstancerL   ndarrayndim)rT   rW   r   ress       rX   test_integrate_0D_always$TestBSpline.test_integrate_0D_always  sW    !!),(K++a+<Cc2::....88q= = )ro   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__r9  ro   rX   Br8    s    ro   r?  )r   r/   r:   r:   )r
   r   	__class__r  r  )rT   r?  rW   s      rX   test_subclassingTestBSpline.test_subclassing  sg    	 	 OOL){{a||~''1,,,!++q000ro   r  r  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   r/   r   r   r   r=   r   r   r  r   )r3   r4   r5   r  r:   )ri   r   tuplerL   rS   r   rR   r
   r4   r   r2  rH   r%   rK   r  r  r  )rT   r  rU   rV   r5   r3   shpos_axisr   r4   rW   axb1s                rX   	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ro   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   r/   r:   r<   r=   r   r   )r8   r:   r   r8   )r:   r   r/   r8   r  r   r/   rC   )rR   r
   r   r   )rT   rU   r5   r3   r4   splspl0spl1s           rX   test_neg_axisTestBSpline.test_neg_axis  s    JJ,-JJ67aAB'qAqD'1%qAqD'1%C"((DItCy+A"BCro   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   r8   r   r5   bc_typer/   rx   ry   N)rL   rS   r   r   random_sampler   eyelenr3   r
   design_matrixtoarrayr   r4   )
rV   r5   rW  r   r|   r   r   r4   des_matr_defdes_matr_csrs
             rX   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Cro   rE   r<   clampednaturalr   r:   
not-a-knotr   r   r   N)r   )rT   r_  rV   r5   bcs        rX   test_design_matrix_bc_types'TestBSpline.test_design_matrix_bc_types  sg    	D* (B#A"- ) q!QA#A,7   q!A#A*5 ro   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   rh   r/   r:   r  N)rL   rS   r   rX  aminamaxr   ri   rY  rZ  r
   r   r[  r\  arrayrc   r	   rJ   )rT   r   rh  r   r|   xminxmaxr5   r3   r4   bsplines              rX   '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   rh   r<   rU  r   r5   r/   r=   rx   ry   )rL   rS   r   r   rX  r   r   r
   r[  r3   r\  r   r4   )rT   r   rV   r5   r|   r   r   r%  xcycr^  s              rX   test_design_matrix_x_shapes'TestBSpline.test_design_matrix_x_shapesA  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 ro   c                 t    / SQn[         R                  " SUS5      R                  5       n[        U/ SQ/SS9  g )N)r1   r1   r1   r?   r@   rA   rA   rA   r?   r<   )g      ?gmਪ?gK}\UU?r>   rx   ry   )r
   r[  r\  r   )rT   r3   des_matrs      rX   test_design_matrix_t_shapes'TestBSpline.test_design_matrix_t_shapesR  s7    ,((Q2::<;<"	$ro   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   rh   r<   rU  r   rs  r8   r:   )r>   r1   r?   r@   rA         @r   )rL   rS   r   r   rX  r   rH   rJ   r
   r[  r3   )rT   r   rV   r5   r|   r   r   r3   s           rX   test_design_matrix_asserts&TestBSpline.test_design_matrix_assertsZ  s    ii##D)GGC%%a(2-23a 2%*!!!, :&!!!VVDbD\15 '$:&!!!* '& '& '&s   ?(C)C:)
C7:
DrW  )rc  rb  r   rd  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   r8   rW  r/   r\   ry   )rL   rS   r   r   r   r
   from_power_basisri   r   r   r4   )	rT   rW  r   r|   r   cbr   rk   bspl_news	            rX   test_from_power_basis!TestBSpline.test_from_power_basisl  s     ii##D)GGCJJrN#JJrNj aDAbEw/''<[[Ar"2Ru5%aG<

7ro   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   r0   r   r   r8   r  r\   ry   )rL   rS   r   r   r   r
   r  r   r  r  r   r4   )	rT   rW  r   r|   r   r  r   bspl_new_realbspl_new_imags	            rX   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Sro   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;   )r/   r/   r/   r/   r/   rc  r  )r1   r/   r/   r/   r/   r/   r/   r\   ry   N)rL   rl  r
   r  r   r   r4   )rT   r|   r   r   s       rX   test_from_power_basis_exmp&TestBSpline.test_from_power_basis_exmp  sM     HH_%HH_%''A)(L09; 7eDro   c                 R   [         R                  " SS/5      n[         R                  " S/5      nUR                  SS9  UR                  SS9  [         R                  " SSS5      nUR                  SS9  [	        XSS9n[        U" U5      [         R                  " U5      S-  5        g )Nr   r/   r@   Fwriterh   r2   )rL   rl  setflagsri   r
   r   rr   )rT   r3   r4   rk   rW   s        rX   test_read_onlyTestBSpline.test_read_only  s    HHaVHHcUO	


	


[[Ar"
% a""r||B/#56ro   c                 <   ^ [        TS9nU4S jn[        SX25        g )Nrw   c                 j   > UR                   u  p nTR                  X#   X#* S-
     S5      nU" U5        g )Nr/   i'  )rb   ri   )r   rW   r3   r5   rk   rU   s        rX   	worker_fn/TestBSpline.test_concurrency.<locals>.worker_fn  s3    eeGA!QT1RT7E2BbEro   rh   )ra   r&   )rT   rU   rW   r  s    `  rX   test_concurrencyTestBSpline.test_concurrency  s    2&	
 	 I1ro   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   r/   rh   r3   z.datzw+)moderG   r   r4   )ra   rL   ri   	threadingget_native_idmemmapstrjoinr3   rG   r   r4   r   )rT   tmpdirrW   rk   rl   tidt_mmc_mms           rX   test_memmapTestBSpline.test_memmap  s      ![[Ar"R5%%'yyV[[1SE78t ssyy		;##QyyV[[1SE78t ssyy		;##Q"x(ro   r9  N)9r:  r;  r<  r=  rY   re   rm   rs   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-  r4  rA  rc   markparametrizer   rJ  rQ  rf  rp  rv  rz  r~  r  r  r  r  r  xfailsysplatformrd   r  r>  r9  ro   rX   r,   r,   1   s   !F
)>D 
@ l+OPk*KLgk2/ 3 M Q/A
;1	.E&W? (
6?FG4A M:#
F7+BZ	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  
)
)ro   r,   c                   F   \ rS rSr\R
                  R                  S/ SQ5      S 5       r\R
                  R                  S/ SQ5      S 5       rS r	\R
                  R                  S	/ S
Q5      S 5       r
\R
                  R                  SSS/5      S 5       rS rS rSrg)
TestInserti  xval)r>   r1   rC   r=         @      @c           	      h   UR                  SUR                  S9nUR                  U5      S-  n[        X4SS9nUR                  UR
                  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   rF   r<   rs  r\   ry   r/   r8   r   r  )rP   rQ   sinr   _t_cr5   r
   r   insert_knotr   r3   rR   r4   concatcosr   )rT   r  rU   r|   r   rN  rb   spl_1fspl_1rk   y1spl_y1spl_yyspl_yy1s                 rX   test_insertTestInsert.test_insert  s    IIarzzI*FF1IqL +vvsvvsuu%&+,%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<ro   zxval, m))r>   r:   )r1   r<   )r  r   )r=   r:   )r  r:   c           	      \   UR                  SUR                  S9nUR                  U5      S-  n[        XESS9n[	        [        XR                  UR                  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   rF   r<   rs  mr\   ry   r/   r8   r   )rP   rQ   r  r   r
   r   r  r  r5   r  r   r3   rR   r4   r  )
rT   r  r  rU   r|   r   rN  r  r  rk   s
             rX   test_insert_multiTestInsert.test_insert_multi  s    IIarzzI*FF1IqL +&'>!DE(FHH!5EBFHHYsuufQh,?!@uMB%-QQsVYYC123B012Br7ro   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  rD   r/   r   r<   r:   )lowhighr   r  r  r   r\   ry   )	rL   rS   default_rngrR   r   uniformr
   r  r   )rT   rU   r   rV   r5   r3   r4   rN  xvr  rk   s              rX   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7ro   r  )	r   皙?r?   rA         @      @      @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   rF   r<   rs  r   r   Tperr\   ry   r/   r   r   r   )   r  )rP   rQ   r  r   r{   rR   r
   r  r   rb   r   r3   r4   rL   rS   r  r  r   )rT   r  rU   r|   r   r3   r4   r5   rN  r  tfcfr   rk   s                 rX   test_insert_periodicTestInsert.test_insert_periodic  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Uro   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   rF   r:   r0   r<   rs        @r\   ry   )rP   rQ   rL   pir  r  r   r   r  r   r3   r4   )rT   r   rU   r|   y_rey_imrN  spl_respl_imr  r  spl_1respl_1ims                rX   test_complexTestInsert.test_complex0  s    IIarzzI*Q.6VVAYq	d 2d7Na8%#Aq1(#Aq1(#$$R($$R(77R		\!9Fro   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   r/   r:   r<   r=   r   r   r   r   Tr  )	rL   rl  onesrZ  r
   rH   rJ   r   r  )rT   r  r5   r3   r4   rN  s         rX   +test_insert_periodic_too_few_internal_knots6TestInsert.test_insert_periodic_too_few_internal_knotsG  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   r/   r  r   r8   r   r  )rL   rl  r  rZ  r
   rH   rJ   r  )rT   r5   r3   r4   rN  s        rX   test_insert_no_extrap TestInsert.test_insert_no_extrap[  s    HHaS!A#Y-QqS	9:GGCFQJN#aA:&OOB ' :&OOA ' :&OOAO# '& '& '& '&s$   /CC,C=
C),
C:=
Dr9  )r:  r;  r<  r=  rc   r  r  r  r  r  r  r  r  r  r>  r9  ro   rX   r  r    s     [[V%AB!= C!=H [[C888 [[T $8 VV" [[]T:,>?G @G, ($ro   r  c            
          SS jn S HR  n[        US9n[        [        U5      5       H.  u  p4U " XC5        [        SUS-   5       H  nU " XCUSS5        M     M0     MT     g )Nc           
         U R                   u  pVn[        R                  " U5      n[        R                  US   S-
  SUSS  US S -   -  US   S-   4   n[	        [        XXg4U5      U " X5      X4SU SU R                   3S9  g )	Nr   r  r   r/   r8   zder = z  k = )r^   r_   err_msg)rb   rL   uniquer   r   r   r5   )	rW   r  r   r^   r_   r3   r4   r5   r|   s	            rX   check_splev,test_knots_multiplicity.<locals>.check_splevo  s    %%aIIaLEE!A$s(C122A/2s:;aQC0!A)se6!##.G	Iro   r/   r:   r<   r=   r   rs  r/   r   )r   rx   rx   )ra   	enumerate_make_multiplesr   )r  r5   rW   r  rI  r   s         rX   test_knots_multiplicityr  k  s^    I !$q12EAQ!}B3u5 % 3 ro   c                 J   US:X  a  X2   U s=::  a  X2S-      :  a  S$   S$ X2U-      X2   :X  a  SnO$XU   -
  X2U-      X2   -
  -  [        XS-
  X#5      -  nX2U-   S-      X2S-      :X  a  SnXE-   $ X2U-   S-      U -
  X2U-   S-      X2S-      -
  -  [        XS-
  US-   U5      -  nXE-   $ )zk
Naive way to compute B-spline basis functions. Useful only for testing!
computes B(x; t[i],..., t[i+k+1])
r   r/   r1   r>   _naive_Br|   r5   r%  r3   c1c2s         rX   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ro   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!
r/   r   c              3   X   >#    U  H  nTTU-
     [        TTTU-
  T5      -  v   M!     g 7fNr  ).0r  r4   r%  r5   r3   r|   s     rX   	<genexpr>_naive_eval.<locals>.<genexpr>  s-     F1q1vAqsA..s   '*)searchsortedr   sumr   )r|   r3   r4   r5   rU   r%  s   ```` @rX   r   r     s     	AaDyOOAq!A%Q41!A#6a!''!*q.(((FFa1FFFro   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   r/   c              3   L   >#    U  H  nTU   [        TTUT5      -  v   M     g 7fr  r  r  r%  r4   r5   r3   r|   s     rX   r   _naive_eval_2.<locals>.<genexpr>  s%     =Hqqthq!Q**H   !$)r   r  r   )r|   r3   r4   r5   rU   rV   s   ````  rX   r   r     sr    	
acA!8O8771:??Q41!=E!H===ro   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$ )Nr/   r   r>   r:   Fr   )rZ  r   r   r
   r   rL   
nan_to_num)r|   r3   r4   r5   rV   sr%  rW   s           rX   r   r     s    A!A#A!8O8771:??
A1X!!!ac!e*%@C	qTBMM!$$$  Hro   c                     [         R                  " U 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:   r/   c                     gNr>   r9  r|   s    rX   <lambda>B_012.<locals>.<lambda>  s    bro   c                     U $ r  r9  r  s    rX   r  r    s    Aro   c                     SU -
  $ Nr?   r9  r  s    rX   r  r    s    Aro   )rL   
atleast_1d	piecewiserR   )r|   rU   results      rX   rz   rz     sp    
aA\\!1uQ/!VA.!VQ/1 )+~FHF ::fro   c                     [         R                  " U 5      n U S:  U S:  U S:  -  U S:  /nUS:X  a	  S S S /nOUS:X  a	  S S S	 /nO[        S
U 35      e[         R                  " XU5      nU$ )z0A quadratic B-spline function B(x | 0, 1, 2, 3).r/   r:   r   c                     X -  S-  $ r  r9  r  s    rX   r  B_0123.<locals>.<lambda>  s
    13r6ro   c                     SU S-
  S-  -
  $ )Ng      ?r  r:   r9  r  s    rX   r  r    s    41T6A+-ro   c                     SU -
  S-  S-  $ )Nr@   r:   r9  r  s    rX   r  r    s    BqD19q=ro   c                     gNr1   r9  r  s    rX   r  r        2ro   c                     g)Ng       r9  r  s    rX   r  r    s    3ro   c                     gr#  r9  r  s    rX   r  r    r$  ro   znever be here: der=)rL   r  rJ   r  )r|   r   condsfuncspiecess        rX   r   r     s    
aAUQUq1u%q1u-E
ax!-(* 
 .se455\\!E*FMro   #   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{   r/   )rL   rS   r   r   rR   r
   construct_fast)rV   r5   rU   r   r3   r4   s         rX   ra   ra     sj    
))


$C


13q5!"A

1A::a="**Q-q!!!**ro   c              #   v  #    U R                   U R                  p!U R                  R                  5       nUS   USS& US   US'   [	        X1U5      v   U R                  R                  5       nUS   USUS-   & [	        X1U5      v   U R                  R                  5       nUS   X2* S-
  S& [	        X1U5      v   g7f)	zIncrease knot multiplicity.         r   r   Nr/   r8   )r4   r5   r3   copyr
   )rW   r4   r5   t1s       rX   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   rA   r  r1  )rL   ri   r  r  r   r3   r4   r5   rb   rk   r   rW   xnewc_dstackr   r
   b2)rT   rk   r   rW   r   s        rX   setup_methodTestInterop.setup_method  s    [[BruuHb)VVBZr&CCacc?#%1 $&KK2bee8R0	UU133QSS=!))RH%!##tww,ro   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matchr/   r   )r7  rW   r:  r   r   rb   rL   rR   rH   rJ   rE  r   r4   r2  	transposer3   r5   )rT   r7  rW   r:  r|   rF  r  rb   s           rX   
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\   ry   r/   r:   T)full_output)rk   r   r   r$  r   r   r
   )rT   r|   r   rb   r3   r4   r5   tck_fr   r   rW   s              rX   test_splrepTestInterop.test_splrep  s    ww1Ql,,q$aA.A.1v{{  $7q!Qa!%0a!%0Qx1}} 1]E* SM1Q4e,ro   c                 >   U R                   U R                  p![        R                  X"4   n[	        [
        5         [        X5        S S S 5        [	        [
        5         [        R                  " X5        S S S 5        [	        [        SS9   [        US S US S 5        S S S 5        [	        [        SS9   [        R                  " US S US S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N}= f! , (       d  f       Ne= f! , (       d  f       g = f)Nm > k must holdr>  r<   )	rk   r   rL   r8  rH   rJ   r   r$  rI   )rT   r|   r   y2s       rX   test_splrep_errorsTestInterop.test_splrep_errors/  s     ww1UU14[:&1M ':&LL ' 9,=>1Ra5!BQ%  ?9,=>LL2A"1& ?> '&&& ?>>>s/   CC,C=4D
C),
C:=
D
Dc                    [         R                  " S[         R                  S9R                  S5      n[	        U5      u  p#[
        R                  " U5      u  pE[        X5SS9  [        [         R                  " [        X25      5      USS9  [        [         R                  " [        X45      5      USS9  [	        USSS9u  u  pg    n[        X7SS9  [        [         R                  " [        Xv5      5      USS9  g )	Nr   rF   r<   r   r\   ry   r   T)r  rE  )	rL   rP   rQ   r   r   r$  r   rR   r   )	rT   r|   rW   urb   u1b_fu_fr   s	            rX   test_splprepTestInterop.test_splprep?  s    IIb

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

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

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

5?3QUCro   c                    [         R                  " S5      R                  S5      n[        [        SS9   [        U5        S S S 5        [        [        SS9   [        R
                  " U5        S S S 5        [         R                  " SSSS9n[        [        S	S9   [        U/5        S S S 5        [        [        S	S9   [        R
                  " U/5        S S S 5        / S
Qn[        [        SS9   [        U/5        S S S 5        [        [        SS9   [        R
                  " U/5        S S S 5        / SQn/ SQn[        [        SS9   [        U/S U/6   S S S 5        g ! , (       d  f       GN$= f! , (       d  f       GN	= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)N<   r   ztoo many values to unpackr>  r   rU  r<   )numrJ  ) >IrY   >KrZ  zInvalid inputs)r/   r<   r:   r=   )r   g333333?g?r/   )	rL   rP   r   rH   rJ   r   r$  ri   rI   )rT   r|   rP  s      rX   test_splprep_errorsTestInterop.test_splprep_errorsN  sC   IIe$$Y/:-HIAJ J:-HIMM! J KK21%9,=>QCL ?9,=>MM1# ?
 E:-=>QCL ?:-=>MM1# ? :-=>qc4^$ ?>/ JIII
 ?>>> ?>>> ?>sS   EE/F<F.F#F4G
E,/
E>
F
F #
F14
G
Gc                    U R                   U R                  p![        R                  " / SQ5      [        R                  -  n[        [        U5      USSS9  [        [        UR                  UR                  UR                  45      USSS9  [        [        SS9   [        USS9  S S S 5        UR                  R                  SS	S
5      n[        R                  " [        UR                  XBR                  4SS95      nUR                  S:X  d   e[        XS-
  [        R                  " U5      SS9  g ! , (       d  f       N= f)N)r   r  rC   r  r   r]   zCalling sproot.. with BSpliner>  rv   )mestr/   r:   r   )r<   r:   r=   r   ry   )rW   r:  rL   rl  r  r   r   r3   r4   r5   rH   rJ   rA  rR   r   r   )rT   rW   r:  rootsc2rrrs         rX   test_sprootTestInterop.test_sprootk  s    2-.ruu4q	5t$?QSS!##/TM :-LM2B N ddnnQ1%ZZc440r:;xx9$$$
BMM"$5EB NMs   D22
E c           	      <   U R                   U R                  p![        [        SSU5      [        SSUR                  5      SSS9  [        [        SSU5      UR                  SS5      SSS9  [        [        SS9   [        SSU5        S S S 5        UR                  R                  SSS5      n[        R                  " [        SSUR                  X2R                  45      5      nUR                  S	:X  d   e[        U[        SSU5      SSS
9  g ! , (       d  f       N= f)Nr   r/   rx   F)r^   check_0dzCalling splint.. with BSpliner>  r:   )r<   r:   )r^   check_shape)rW   r:  r   r   rb   r#  rH   rJ   r4   rA  rL   rR   r3   r5   r   )rT   rW   r:  r`  integrs        rX   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   r/   r/   r:   r<   r\   ry   r:   )rW   r:  rZ  r3   r4   r2  rL   r   zerosr   r   r$  r5   r   r0  r
   rE  rT   rW   ctb_crV   bdtck_ds          rX   test_splderTestInterop.test_splder  s   &&$''"AQSSCH$B##((*CAveeC2%#))AB-*?!@@AAYacchhj#ss%;<eAhU;eAhU;ttuQx'''!"g....!%////  #ro   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 rk  )rW   r:  rZ  r3   r4   r2  rL   r   rm  r   r   r$  r5   r   r0  r
   rE  rn  s          rX   test_splantiderTestInterop.test_splantider  s   &&$''"AQSSCH$B##((*CAveeC2%#))AB-*?!@@A]((!##((*c33)?@eAhU;eAhU;ttuQx'''!"g....!%////  #ro   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   r/   r\   ry   r@  r   )rW   r:  rk   r3   r   r   r4   r5   r   r   r0  r
   rE  r   r2  rA  rL   rR   )rT   rW   r:  rk   r  tnbntck_nrF  r8  tck_n2bn2s               rX   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''''&%((((ro   )rW   r:  r   rb   r7  rk   r   N)r:  r;  r<  r=  r;  rB  rG  rL  rT  r[  rb  rh  rs  rv  r  r>  r9  ro   rX   r5  r5    s=    -H6-0' D%:C"H(0"0")ro   r5  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>   r?   c                 n    UR                  U R                  5      UR                  U R                  5      4$ r  )rR   rk   r   )rT   rU   s     rX   _get_xyTestInterp._get_xy  s'    zz$''"BJJtww$777ro   c                     [        [        5         [        U R                  U R                  SS9  S S S 5        g ! , (       d  f       g = f)NrC   rs  )rH   rI   r   rk   r   rT   s    rX   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   rs  rx   r]   r8   r5   r  r  r   r   rT   rU   rk   r   rW   s        rX   test_order_0TestInterp.test_order_0  P    b!r+"rE:r4"rE:ro   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/   rs  rx   r]   r8   r  r  r  s        rX   test_linearTestInterp.test_linear  r  ro   r5   r   c                 x    / SQn/ SQn[        [        SS9   [        X#US9  S S S 5        g ! , (       d  f       g = f)Nr   r/   r:   r<   r=   r   )r   r/   r:   r<   r=   r   r   r   zShapes of xr>  rs  rH   rJ   r   rT   r5   r|   r   s       rX   test_incompatible_x_y TestInterp.test_incompatible_x_y  s,    $:];qq) <;;s   +
9c                    / SQn/ SQn[        [        SS9   [        X#US9  S S S 5        / SQn[        [        SS9   [        X#US9  S S S 5        / SQn[        R                  " U5      R                  S5      n[        [        SS9   [        X#US9  S S S 5        g ! , (       d  f       N~= f! , (       d  f       Nj= f! , (       d  f       g = f)	N)r   r/   r/   r:   r<   r=   r  zx to not have duplicatesr>  rs  )r   r:   r/   r<   r=   r   zExpect x to be a 1D strictly)r/   r8   )rH   rJ   r   rL   rR   r   r  s       rX   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   rx   r]   r  )rT   rU   rk   r   r5   rW   s         rX   test_not_a_knotTestInterp.test_not_a_knot  s:    b!#A"21-AAbE2E> $ro   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   rV  rx   r]   r/   r   r   r8   dy=ry   r5   rW  r  )r  r   r   r   )rT   rU   rk   r   rW   r%  s         rX   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 ro   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   rh   r   r8   r   r   rV  rx   ry   )rL   rS   r   r   rX  rR   r   r   )rT   r5   rU   rV   r   r|   r   rW   s           rX   test_periodic_randomTestInterp.test_periodic_random  s     ii##D)GGC%%a(2-.a 3&u!zz!}bjjm1qq*=!ae,ro   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>   r8   r/   r   r   r  rx   ry   )rk   r   rL   rS   r   rX  r  r   rm  r  r  rR   r   r   r   )rT   rU   rV   r   r|   r   rW   r%  s           rX   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6ro   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   r8   r/   r   r   rV  )rL   rS   r   r   rX  rH   rJ   r   )rT   r   r5   rV   r|   r   s         rX   test_periodic_points_exception)TestInterp.test_periodic_points_exception5  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   )	rL   rS   r   r   rX  rm  rH   rJ   r   )rT   r   r5   rV   r|   r   r3   s          rX   test_periodic_knots_exception(TestInterp.test_periodic_knots_exception@  s    ii##D)GGC%%a()a HHQQY:&qQ:6 '&&s   B
B*r  c           	      d   [        U R                  U R                  USS9n[        U R                  U R                  SUS9n[	        U R                  U5      n[        XB" U R                  5      SS9  [        SU5       H0  n[	        U R                  X5S9n[        XB" U R                  US	9S
S9  M2     g )Nr   rV  T)r  r5   rx   ry   r/   r   r   r   )r   rk   r   r   r   r   r   )rT   r5   rW   rb   rN  r%  s         rX   test_periodic_splevTestInterp.test_periodic_splevK  s     tww1jITWWdgg415DGGS!QtwwZe4 q!A,CC477q!1> ro   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   rV  r  rx   ry   r   rh   r   r8   r   )
r   rk   r   r   r   rL   rS   r   r   rX  )rT   rW   cubr   rV   r|   r   s          rX   test_periodic_cubicTestInterp.test_periodic_cubicX  s    tww1jI$''477J?$''
CLu= ii##D)GGC%%a(2-.a 3&u!qq*=!
3!c!f51ro   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   rV  c                 &   > [        U TTT[        S9$ )Nrw   )r   rL   )r|   r4   r5   r3   s    rX   r  6TestInterp.test_periodic_full_matrix.<locals>.<lambda>o  s    K1ar$Bro   rx   ry   )r   rk   r   r   r   rL   	vectorizer   )rT   rW   rI  r4   r5   r3   s      @@@rX   test_periodic_full_matrix$TestInterp.test_periodic_full_matrixh  su     tww1jIDGGQ'&twwA>\\BC$''
BtwwKe<ro   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r/   g       @r:   rV  rx   r]   r8   r/   r   rF   F)r^   r_   re  r  r   r   rR   rQ   )rT   rU   rk   r   r   rW   s         rX   test_quadratic_derivTestInterp.test_quadratic_derivr  s    b!i rT3K@"rE:bfaLJJs1vay

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

J3UU	
ro   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<   r/   r@   )r/   rA   r  rx   r]   r   r/   rF   r8   r:   r   r  )rT   rU   rk   r   r5   der_lder_rrW   s           rX   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:ro   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   rF   )r/   g      ()r:   r/   r  )r:   r@   rV  rx   r]   r   r/   r:   r8   )rP   rQ   r  r   r   r   rR   )rT   rU   r5   rV   r|   r   r  r  rW   r   vals              rX   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:   rA   r  rx   r]   )r   rk   r   r   r   )rT   r5   r3   r  rW   s        rX   test_cubic_deriv_unstable$TestInterp.test_cubic_deriv_unstable  sY     DGGQ'"twwt}M$''
DGG%eDro   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:   r/   r   r8   r?   r  r  rx   r]   r>   r  )r  r   r  r   r   r!  r"  )rT   rU   r5   rk   r   r3   rW   s          rX   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===ro   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>   r1   r/   r>   r  r  r1  rF   rx   r]   )rR   r   ri   rQ   r   )rT   rU   r5   r|   r   rW   rk   r   s           rX   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:ro   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)r1   r:   r<   r=   r   r   r  r  *   )r  r  r  )rT   r|   r   lrs        rX   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   r/   r   zBad boundary conditions at 0.r>  r  )ir   zBad boundary conditions at 6.)rP   rH   rJ   r   )rT   rU   r|   r   r  r  s         rX   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<   r0   )r/   y              @)r/   y      @       @r  rx   r]   r   r/   r  r8   r   r/   rs  )r  r   r   cmathr"  )rT   rU   r5   rk   r   r  r  rW   s           rX   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> ro   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 )Nrh   rF   r   rs  )rP   int32r   )rT   rU   r|   r   r5   rW   s         rX   test_int_xyTestInterp.test_int_xy  sM    IIbI)IIbI) A"11-AaD ro   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 )Nr8   r/   r   r   r   rs  )ri   r   )rT   rU   rk   r|   r   r5   s         rX   test_sliced_inputTestInterp.test_sliced_input  sB    [[Q$ssGssGAqq) ro   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 )Nrh   rF   r:   r8   )
rP   rQ   rN   rO   xpxatsetrH   rJ   r   )rT   rU   r|   r   zs        rX   test_check_finiteTestInterp.test_check_finite"  sg    IIb

I+qD&&"&&266'*Aq"!!!$A*&8!? +ro   )r/   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 )Nrh   r:   rs  )listr   r   )rT   r5   r|   ar   s        rX   test_list_inputTestInterp.test_list_input+  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 )Nr/   r  r1   r?   r@   rA   r<   rV  rx   r]   r   rF   r8   )r  r   r   r   rR   rQ   )rT   rU   rk   r   r  r  rW   s          rX   test_multiple_rhsTestInterp.test_multiple_rhs2  s    b!XXrhQX'b"Xb"XrUNC"rE:beQKJJuQx{"**J5E	
 	bfaLJJuQx{"**J5E	
ro   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   r/   r   r   r   r  )rL   rS   r   r   r   r4   r   )	rT   r   r5   rV   r|   r   rW   d_ld_rs	            rX   test_shapesTestInterp.test_shapesC  s    ii##D)GGCJJAJ&'JJQ1aLJ)qQ'ssyyQ1aL((( 3::i()*3::i()*qQc
;ssyyQUQY1a0000ro   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<   rc  rV  r  r\   ry   )rc  rb  r  r:   )Nrb  r  rd  typor/   r  r>   ra  r   r  r   r   r   r   r  r  rb  )r  r  r   r   r4   rH   rJ   r   r  rL   rS   r   r   rR   rm  )rT   rU   rk   r   rI  r:  r  r  r   r5   rV   r|   r   r  r   s                  rX   test_string_aliasesTestInterp.test_string_aliasesR  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   rx   r]   )rL   rS   r   r   r   make_interp_full_matrrR   r{   r   r   r4   )rT   rU   r   r5   rV   r}   y_npr~   r  r|   r   r3   rW   s                rX   test_full_matrixTestInterp.test_full_matrix  s    ii##D)wwszzqz)*zzqz!4#"4t7ZZ^bjj4t"45aqQ*Re%8ro   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:   r/   Nr8   r   )offsetrx   ry   )rL   rS   r   r   intdiagflatrm  r  diagonalr   r   linalgsolve)rT   r   rV   r5   r  r  r%  urlldr  rW   s               rX   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?# !ro   r9  N)0r:  r;  r<  r=  rL   ri   r  rk   r  r   r  r  r  r  rc   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  r>  r9  ro   rX   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?ro   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).
r/   rF   )
r   rL   rm  rQ   r   r  r*   evaluate_all_bsplslr  )r|   r   r3   r5   rV   Ar  r  leftbbr4   s              rX   r  r    s     66QVV66QVVaZ!^###	A
!rzz*A1XtQ4<D??1+a/D ''d9 !!VDF]
  	AHro   c                 :   [        [        R                  XU45      u  pnU R                  nUR                  U-
  S-
  n[        R                  " XE4[        R
                  S9n[        U5       HO  nX   nXU   :X  a  Un	O[        R                  " X(5      S-
  n	[        R                  " X#X5      n
XXyU-
  U	S-   24'   MQ     [        R                  " UR                  U5      n[        R                  " UR                  U5      n[        R                  " X5      nXU44$ )z,Make the least-square spline, full matrices.r/   rF   )r{   rL   rR   r   rm  rQ   r   r  r*   r  dotTr  r  )r|   r   r3   r5   r  rV   r  r  r  r  r  r?  Yr4   s                 rX   make_lsq_full_matrixr$    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ro   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   r8   r   c                    U R                   U R                  U R                  U R                  4u  p#pE[	        X#XE5      u  pg[        X#XEUS9n[        UR                  U5        UR                  R                  UR                  U-
  S-
  4:X  d   eUu  p[        R                  R                  XSS9u  n    n[        UR                  U5        g )Nr%  r/   r8   )rcond)r|   r   r3   r5   r$  r   r   r4   r   r   rL   r  lstsq)rT   r%  r|   r   r3   r5   c0AYrW   aar   r  r   s                rX   
test_lstsqTestLSQ.test_lstsq  s     VVTVVTVVTVV3
a%aA1A!v6R ssyyQVVaZ!^---- iioob2o6Aq!R ro   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 )Nr+  wr%  rx   ry   )
r{   rR   r|   r   r3   r5   rr   r   r   r4   )
rT   r%  rU   r|   r   r3   r5   r5  rW   b_ws
             rX   test_weightsTestLSQ.test_weights  s     Hc"**tvvtvvtvv&>?GG
aLLOA!v6aAA=SUU/SUU/sscee||ro   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   r&  r4  r'  r+  rx   ry   )r{   rR   r|   r   r3   r5   rL   rS   r  r  r   r   r   r4   r   abs)
rT   rU   r|   r   r3   r5   r5  b_neb_qrb_no_ws
             rX   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;<<<<<ro   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   r+  r   r/   )r{   rR   r|   r3   r5   rV   rL   rS   r   r   r4   r   )
rT   r%  rU   r|   r3   r5   rV   r   r   rW   s
             rX   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9ro   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   r+  r\   ry   )r{   rR   r|   r3   r5   rV   rL   rS   r   r   r   r   r4   r"  r   )rT   r%  rU   r|   r3   r5   rV   nrhsr   r   rW   r%  r  coefss                 rX   test_multiple_rhs_2TestLSQ.test_multiple_rhs_2+  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   r'  r+  r&  r\   ry   )r{   rR   r|   r3   r5   rV   rL   rS   r   r   r4   )
rT   rU   r|   r3   r5   rV   rC  r   r<  b_neqs
             rX   test_multiple_rhs_3TestLSQ.test_multiple_rhs_3:  s    Gc"**tvvtvv&67GGG
aII1),JJqMqQ$7a9=e4ro   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      ?       @r+  r0   r\   r]   )
r{   rR   r|   r3   r5   r   r   r  r  r   )
rT   r%  rU   r|   r3   r5   ru  rW   r  r  s
             rX   r  TestLSQ.test_complexC  s     =3rzzDFFDFF#34<dff<aZZ(+,A17q''"+qFCq''"+qFC!d1gDG3%eLro   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 )NrL  r/   r  r0   r\   r]   )r{   rR   r|   r3   r5   r   r   r   r  r  r   )	rT   rU   r|   r3   r5   ru  rW   r  r  s	            rX   test_complex_2TestLSQ.test_complex_2O  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Lro   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 )Nrh   r/   rs  r5   r%  )rL   rP   astyper  r   r   rT   r%  r|   r   r3   s        rX   r  TestLSQ.test_int_xye  sK    IIbM  %IIbM  %AOa1V4ro   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 )
Nrh   rF   r/   rs  rR  r8   r?   r\   ry   )rL   rP   float32r   r   rS  floatr   )rT   r%  r|   r   r3   spl_f32spl_f64x2s           rX   test_f32_xyTestLSQ.test_f32_xym  s    IIb

+IIb

+AO!!Qv>!HHUOQXXe_ahhuo6
 eafn#WR[u=ro   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 )Nr8   r/   r   r<   rR  )rL   ri   r   r   )rT   r%  rk   r|   r   r3   s         rX   r  TestLSQ.test_sliced_inputz  sI     [[Q$ssGssGAqMa1V4ro   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<   r8   r+  )
rL   rP   rS  rX  r   rN   rO   rH   rJ   r   )rT   r%  r|   r   r3   r  s         rX   test_checkfiniteTestLSQ.test_checkfinite  sd     IIbM  'qDAqM&&"&&266'*AbE*oqQN +ro   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   r3   r%  )r|   r   r3   r  r   rT  s        rX   r  TestLSQ.test_read_only  sO     &&$&&$&&a	


	


	


!A5ro   r5   r/   c                     U R                   U R                  p2[        [        R                  " US   US   S5      U5      n[        X#XASS9n[        X#XASS9nUSS  US S -   S-  n[        U" U5      U" U5      S	S
9  g )Nr   r8   r   r&  rR  r'  r/   r?   r\   ry   )r|   r   r   rL   ri   r   r   )rT   r5   r|   r   r3   spl_norm_eqspl_qrrk   s           rX   test_qr_vs_norm_eqTestLSQ.test_qr_vs_norm_eq  s~     vvtvv1BKK!aeQ/3%aA9E qd;eafn#B%@ro   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<   r'  rR  r/   r8   r?   r\   ry   )rL   repeatr|   r   r   r3   r   )rT   r|   r   r  spl_2rk   s         rX   test_duplicatesTestLSQ.test_duplicates  s    IIdffa IIdffa !DIdff$?eafn#b	5959ro   r9  N)&r:  r;  r<  r=  rL   rS   r   r   rV   r5   r   r|   r   r   ri   r3   parametrize_lsq_methodsr1  r7  r>  r  rE  rI  r  rO  r  r\  r  rb  r  rc   r  r  r  r   ri  rn  r>  r9  ro   rX   r)  r)    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:ro   r)  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:   r/   r   )r  r  ncr2  r   )rT   r  r  rt  s       rX   __init__PackedMatrix.__init__  sQ    vv{{{{awwqzV\\!_,,,ro   c                 L    U R                   R                  S   U R                  4$ Nr   )r  r   rt  r  s    rX   r   PackedMatrix.shape  s    vv||A''ro   c                 n   [         R                  " U R                  5      nU R                  R                  S   n[	        UR                  S   5       H_  n[        U R                  U R                  U   -
  U5      nU R                  US U24   XU R                  U   U R                  U   U-   24'   Ma     U$ )Nr/   r   )rL   rm  r   r  r   minrt  r  )rT   outnelemr%  nels        rX   todensePackedMatrix.todense  s    hhtzz"Qsyy|$AdggA.6C:>&&DSD/C4;;q>$++a.3"6667 % 
ro   )r  rt  r  N)
r:  r;  r<  r=  __doc__ru  propertyr   r  r>  r9  ro   rX   rr  rr    s%    - ( (ro   rr  c                     SSK Jn  U R                  nU R                  nU R                  nUR
                  u  pxUR
                  S   U:X  d   eUR                  5       n	UR                  5       n
[        X'5       H  nX[   n[        X5       H  nU[        X5      :  a    M'  U" XS4   XS4   5      u  pnUXS4'   [        SU5       H&  n[        XXU4   XU4   5      u  XU4'   XUS-
  4'   M(     SXS4'   [        U
R
                  S   5       H#  n[        XXU4   XU4   5      u  XU4'   XU4'   M%     M     M     [        [        U	R
                  S   5      5      n[        U	[        R                  " U[        R                  S9U5      nUU
4$ )zbThis is a python counterpart of the `_qr_reduce` routine,
declared in interpolate/src/__fitpack.h
r   )dlartgr/   r>   r8   rF   )scipy.linalg.lapackr  r  r  rt  r   r2  r   r{  fprotar  rr  rL   rl  int64)a_pr   startrowr  r  r  rt  r  nzRr  r%  oir  r4   r  r  r  offsR_ps                       rX   _qr_reduce_pyr    s    + 	AZZF	BGGEA771:??	A	
B8YrACJ Q!tWa1g.GA! AdG1b\%+A!qD'1T7%C"Q$ac6 "AeH 288A;'%+A"T(B!tH%E"a4"T( (   * aggaj!"D
q"((4rxx8"
=C7Nro   c                 0    X-  X-  -   nU* U-  X-  -   nXE4$ )z@Givens rotate [a, b].

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

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

`R` is in the "packed" format: `R[i, :]` is `a[i, i:i+k+1]`
r   Nr/   .r:   r8   r  )r  r   rt  rL   r   r   r{  r  )
r  r   r  r   r  rt  r4   r%  r~  summs
             rX   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&		 !
 Hro   c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
TestGivensQRi  c                 r    Sn[         R                  " U[        S9nUS-  SSU-   -  -   n[        X25      nX4XR4$ )Nr<   rF   r/   )rL   rP   rX  r   )rT   rV   r5   r|   r   r3   s         rX   _get_xytTestGivensQR._get_xyt  s@    IIau%qD1ac7NQzro   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 )	Nrh   r   r/   rF   r\   ry   gvIh%L=-a=)r  r
   r[  r  r'  r  r"  r   indicesrL   ascontiguousarrayr  datar   rr  r*   	qr_reducer   minimumr   r:  r  r  r  rt  rr   )rT   rV   r|   r   r3   r5   a_csrqr  qTyr  rt  r  r  r  y_c_fullc_bandedr   s                      rX   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;ro   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 )	Nrh   r   r/   rF   r\   ry   F)check_dtype)r  r
   r[  r   r  rL   r  r  r  r   rr  r  r*   r  r   r  r   r  rt  )rT   rV   r|   r   r3   r5   r  r  rt  r  r  r  r  RRr   s                  rX   test_py_vs_compiled TestGivensQR.test_py_vs_compiledF  s   ]]1%
a %%aA.WWQZ!^a''''w!A#w'%%fBHH=JJqA#&B'q$wZq%1b.acc.		188?uu}}U+ro   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 )Nrh   r/   rF   r   r\   ry   )r  rL   rP   rX  r*   data_matrixr   r
   r[  tocsrr  r   r  rS  r  r   r   )rT   rV   r|   r   r3   r5   r5  r  r  rt  r  r  a_wA_offset_s                  rX   test_data_matrixTestGivensQR.test_data_matrixa  s    ]]1%
aIIa1E* ,,Q182GGAJ%%aA.Dz!((*XXqA#h'++g1g&--bhh7E*(WWQZ!^a''''ro   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 )Nrh   r:   rx   ry   )
r  rL   r8  r*   r  rr   rr  r  r  r   )rT   rV   r|   r   r3   r5   r  r  rt  r  r4   r  r   s                rX   test_fpbackTestGivensQR.test_fpbackr  s    ]]1%
aEE!T'N ,,Q1bll1oF2B'1b,1L??1!bll1oqIAqE*ro   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 )Nrh   r/   rF   r:   )r  rL   rm  rX  r   r*   r  )rT   rV   r|   r   r3   r5   
zero_arrayr  s           rX   test_evaluate_all_bspl#TestGivensQR.test_evaluate_all_bspl  s{    ]]1%
aXXq1uhe4
D**1!a%@*N**1!A#>
L ro   r9  N)r:  r;  r<  r=  r  r  r  r  r  r  r>  r9  ro   rX   r  r    s"    !<F,6("+Lro   r  c                     [         R                  R                  [         R                  R                  [         R                  R	                  [
        5      5      SU 5      $ )Nr  )ospathr  abspathdirname__file__)basenames    rX   	data_filer    s8    77<<(AB* *ro   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>   r  r/   r8   r   z)``x`` and ``y`` length must be at least 5r>  )rL   rS   r   r   rX  r  normalrH   rJ   r   r   r2  rP   r  rc   r	   )rT   r   rV   r|   r   x_duplexception_messages          rX   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^   r_   r  )rL   loadr  r   r   )rT   r  r|   r   r  y_comprs         rX   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>   r  )lamrc  r  r   r8   r\   ry   N)rL   rS   r   r   rX  r  r  rR   r   r   ri   r   )	rT   rU   r   rV   r|   r   
spline_GCVspline_interpgrids	            rX   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+"	$ro   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>   r  rh   r   g      >@zJSpline with weights should be closer to the points than the original one: z.4z < )rL   rS   r   r   rX  r  r  r{   rR   r   choicer   r  r  r  r  r  r:  rJ   )rT   rU   r   rV   r|   r   rN  indr5  spl_worigweighteds               rX   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 3ro   r9  N)r:  r;  r<  r=  r  r  r  rc   r  	fail_slowr  r>  r9  ro   rX   r  r    s6    
(>6Tp$* [[13 3ro   r  c           	        ^^^^^^	^
 U u  m	m
Uu  mm[        T5      T-
  S-
  nUTS-   :  d   e[        T5      T-
  S-
  mTTS-   :  d   e[        UUUUUU	U
4S j[        U5       5       5      n[        R                  " U5      $ )z-A naive 2D tensort product spline evaluation.r/   c           	   3      >#    U  H<  n[        T5        H)  nTX4   [        TTUT5      -  [        T	TUT5      -  v   M+     M>     g 7fr  )r   r?  )
r  ixiyr4   r5   nytxtyr|   r   s
      rX   r  bspline2.<locals>.<genexpr>'	  sL      7!"E"Ib i!Aq"b/)AaBO;,5 <!s   AA)rZ  r  r   rL   rR   )r   r3   r4   r5   nxr3  r  r  r  r|   r   s     ``  @@@@@rX   bspline2r  	  s    DAqFB	R1qB!A#II	R1qB!A#II
 7 7b	7 7C::c?ro   c                 J   US:X  a  X2   U s=::  a  X2S-      :  a  S$   S$ X2U-      X2   :X  a  SnO$XU   -
  X2U-      X2   -
  -  [        XS-
  X#5      -  nX2U-   S-      X2S-      :X  a  SnXE-   $ X2U-   S-      U -
  X2U-   S-      X2S-      -
  -  [        XS-
  US-   U5      -  nXE-   $ )Nr   r/   r1   r>   r?  r  s         rX   r?  r?  ,	  s    Avda(!aC&(s1(c11v~A$hQ3!$'!AsA/91Qx1qS6 7N !AhlQs1uXA#./!AsAaC2CC7Nro   c                    ^ ^^^ [        T5      T-
  S-
  nUTS-   :  a  [        T5      U:  d   e[        UUUU 4S j[        U5       5       5      $ )Nr/   c              3   L   >#    U  H  nTU   [        TTUT5      -  v   M     g 7fr  r  r  s     rX   r  bspline.<locals>.<genexpr>=	  s$     6Xqta1am#Xr  )rZ  r  r   )r|   r3   r4   r5   rV   s   ```` rX   ro  ro  :	  sD    A
QA1H3q6Q;''6U1X666ro   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     rX   r  &NdBSpline0.__init__.<locals>.<genexpr>Y	  s     6Abx~~b))As   #%c              3   T   #    U  H  n[         R                  " U[        S 9v   M      g7f)rF   N)rL   rR   rX  )r  tis     rX   r  r  Z	  s     ?Qrrzz"E2Qs   &(N)rZ  r   rI   rE  r5   r3   r4   )rT   r3   r4   r5   r2  s        rX   ru  NdBSpline0.__init__A	  sv     1vs177|###	F
 6A66?Q??  	T	A	s   A( (A;:A;c                 l   [        U R                  5      n[        U5      U:X  d   eS/U-  n[        U5       H  nU R                  U   X   peU R                  U   nXeU   :X  a  XsU'   O[        R
                  " XV5      S-
  X4'   XSU      Us=::  a  XSU   S-      ::  d   e   eX4   U:  a  X4   [        U5      U-
  :  a  M   e   [        U5      nSn[        U5       Vs/ s H&  n[        X4   U R                  U   -
  X4   S-   5      PM(     n	n[        R                  " U	6  Hq  n
U R                  U
   [        R                  " [        U5       Vs/ s H/  n[        X   U R                  U   X   U R                  U   5      PM1     sn5      -  nX-  nMs     [        R                  " U5      $ s  snf s  snf )Nnoner/   r   )rZ  r3   r   r5   rL   r  rE  	itertoolsproductr4   prodr?  rR   )rT   r|   r2  r%  r  tdxdr5   r  itersidxterms               rX   __call__NdBSpline0.__call__]	  s   466{1v~~ JtOtAVVAYq	A U{!r.2d8r/R!QZ/////419B!!333  !H
 <A$KHKqqtdffQi'2KH$$e,C66#;38;*@3>a +,AD$&&)SVTVVAY*O3>*@ "A ADNF - zz&!! I*@s   -F,6F1)r4   r5   r3   Nr<   )r:  r;  r<  r=  ru  r  r>  r9  ro   rX   r  r  @	  s    8"ro   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  rD   r   r/   r   r1  rx   ry   r   )
rL   rS   r  r   r  rR   r
   r   r   r   )rT   rU   r   rV   r5   n_trr3   r4   rW   nbxis              rX   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Aro   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<   rs  r:   rP   r   r3   r4   	rT   rU   r|   r   rN  y_1r  t2r   s	            rX   make_2d_caseTestNdBSpline.make_2d_case	  s    IIaLqD +dQqSj"1Q/eeUWWUU1d7^eggdAg..qyro   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<   rs  r   rF   r  r:   )rP   r   rQ   r3   r4   r5   r  s	            rX   make_2d_mixedTestNdBSpline.make_2d_mixed	  s    IIaLqD +IIarzzI*S0dQqSj"1Q/eeUWWUU1d7^eggdAg..suuegg%%ro   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r  rC   )rC   r/   )r   r  rw   r<   r:   rF   Frx   rf  r^   rs  ry   r  )TFFr  )r=   r<   r:   r   r   )r=   r<   )r8   r:   )r   .)r/   .)r  r  rL   rR   rQ   r   r   r   rZ  rN   r   r   rS   r  r  r   r"  r   )rT   rU   r  r  r   r5   r|   r   targetr   r   r:  bspl2r   r  rrrs                   rX   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<   rw   r  r  rs  r=   r=   rx   ry   r8   rF   FgvIh%,=r  r   r   r:   r:   )r:   r:   )r  r   r   r   r   rL   r4   rR   rQ   r   r  )rT   rU   r2  r  r|   r   r   r  r   r5   c2_4r   bspl2_4r  
val_singlec2_22bspl2_22
target2_22s                     rX   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               @rw   rL  r  r  rs  r&  r=   rx   ry   )r  r   r   r   r   )rT   rU   r  r|   r   r   r3   r  r   r5   r(  r   r)  r  r*  s                  rX   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=   r/   rs  )r1   r1   rx   ry   r/   r  r:   皙?g? @)rL   rS   r  r   r   r  r   r   r   r  r8  )	rT   r   r5   r  r  r4   rN  r  r   s	            rX   test_2D_randomTestNdBSpline.test_2D_random
  s9   ii##E*UU1aArwws{{{':;a?Aq!KLUU1aArwws{{{':;a?Aq!KLKKbggaik27719Q;7K8!)B "Xq45	B UU;"# $B@BC""2h5C"	$Cs   &E
c                    U R                  5       u  pp4/ SQnU VVs/ s H  u  pgUS-  US-  SU-  -   -  PM     nnn[        XX44S9n	U	" U5      R                  [        U5      4:X  d   e[	        U	" U5      USS9  g s  snnf )N)ffffff?r  )rC   g333333@)r  r  r<   r:   rs  rx   ry   )r  r   r   rZ  r   )
rT   r  r   kxkyr  r|   r   r   r!  s
             rX   test_2D_mixedTestNdBSpline.test_2D_mixed0
  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)Nrw   r;  rs  r  c                 *    SU S-  -  US-  SU-  -   -  $ Nr<   r:   r9  r|   r   s     rX   r  2TestNdBSpline.test_2D_derivative.<locals>.<lambda>@
  s    QTQTAaCZ!8ro   r/   r/   c                 $    SU S-  -  SU-  S-   -  $ rC  r9  rD  s     rX   r  rE  A
  s    QTQqS1W!5ro   )r   r   c                 $    U S-  US-  SU-  -   -  $ rC  r9  rD  s     rX   r  rE  B
  s    AA!!4ro   r:   r/   c                     grx  r9  rD  s     rX   r  rE  C
      Aro   r   c                     grx  r9  rD  s     rX   r  rE  D
  rJ  ro   r<   c                     grx  r9  rD  s     rX   r  rE  E
  rJ  ro   c                     grx  r9  rD  s     rX   r  rE  F
  rJ  ro   c                     grx  r9  rD  s     rX   r  rE  G
  s    qro   rF   r   rx   ry   ))r8   r   r8   r   r/   )	r  r   itemsrR   rQ   r   r  rH   rJ   )rT   rU   r  r   r=  r>  r  r!  
test_casesr   expected_fnr|   r   expected_valsdirect
via_methodbad_nus                    rX   test_2D_derivative TestNdBSpline.test_2D_derivative9
  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=   r/   r4  r5  rs  rx   ry   )rL   rS   r  r   r   r  r   r8  r   r  r   rT   r   r=  r>  r  r  r4   r  r!  bspl2_0rU   s              rX   test_2D_mixed_random"TestNdBSpline.test_2D_mixed_random_
  s(   ii##E*UU1aArwws{{{':;a?Aq!KLUU1aArwws{{{':;a?Aq!KLKKbgglQ."q0@AKBUU;"# $ 2(Ab2bXqH5b	/12rr2	@2s   D0
c                    [         R                  " S5      n[         R                  " S5      S-   n[        XS-  SS9n[        X"S-  SU-  -   SS9nUR                  S S 2S 4   UR                  S S S 24   -  n[	        UR
                  UR
                  4XSR                  UR                  45      nUS-  S S 2S 4   US-  SU-  -   S S S 24   -  n[        X4U5      n[        R                  " X5       V	V
s/ s H  u  pX4PM
     nn	n
U" U5      n[         R                  " U5      R                  5       (       a   e[        X" U5      SS9  [        UR                  UR                  5      USS9  g s  sn
n	f )	Nr   r   r  r<   rs  r:   rx   ry   )rL   rP   r   r4   r   r3   r5   r   r  r   r   anyr   r   r   )rT   r|   r   spl_xspl_yr  r   valuesrgir  rW   r  bxis                rX   test_tx_neq_tyTestNdBSpline.test_tx_neq_tyo
  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<   rs  r:   r/   r  )rT   rU   r|   r   rN  r  r  y_2rm  r  r   s              rX   make_3d_caseTestNdBSpline.make_3d_case
  s    IIaLqD +dQqSj"1Q/dQqSj1n"1Q/eeUWWegg&eeAtTM"ggdAtm$%ggdD!m$% qyro   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<   rE   r   r   r<   r:   r/   rs  rE   rx   ry   )	rL   rS   r  r  ri  r   zipr   r   )rT   r   r|   r   r  r   t3c3r5   bspl3r   r  r  s                rX   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 )Nrw   r<   rs  r  rl  r   r   c                 H    SU S-  -  US-  SU-  -   -  US-  SU-  -   S-   -  $ )Nr<   r:   r/   r9  r|   r   r  s      rX   r  2TestNdBSpline.test_3D_derivative.<locals>.<lambda>
  s2    q1a4x1a4!A#:'>!Q$1*q.'Qro   c                 B    SU -  US-  SU-  -   -  US-  SU-  -   S-   -  $ Nr   r<   r:   r/   r9  rv  s      rX   r  rw  
  s.    q1u1qs
';q!taczA~'Nro   c                 B    SU -  SUS-  -  S-   -  US-  SU-  -   S-   -  $ ry  r9  rv  s      rX   r  rw  
  s.    q1u!Q$
';q!taczA~'Nro   c                 *    SU -  SUS-  -  S-   -  S-  $ )Nr   r<   r:   r9  rv  s      rX   r  rw  
  s    q1u!Q$
';a'?ro   c                     gr  r9  rv  s      rX   r  rw  
  s    sro   ))r/   r   r   )r:   r   r   )r:   r/   r   )r:   r/   r<   )r:   r/   r=   rF   r   rx   ry   )ri  r   rL   rS   r  r  rn  rR   rP  rQ   r   r  )rT   rU   ro  rp  r5   rq  r   r|   r   r  r   xi_npr  rQ  r   rR  xi_yi_zi_rS  s                       rX   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=   r/   rs  )r1   r1   r/   rx   ry   r4  r5  g?r<  gffffff?)rL   rS   r  r   r   r  r   r   r  r   r8  )rT   r   r5   r  r  tzr4   rN  spl_0r  rU   s              rX   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=   r/   r0   rs  r4  r5  r  rx   ry   )rL   rS   r  r   r   r  r   r   r  r  r8  r   )rT   r   r5   r  r  r  r4   rN  r  r  r  s              rX   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	@ro   
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<   )r5   r   )r8   r   )rM  r  r  )r8   g            @r:   r/   r   rx   ry   ri  r   r{   rL   rR   rn  r   )rT   r  r  ro  rp  r5   rq  r|   r   r  r   r  r   r  s                 rX   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  )rT   r   ro  rp  r5   r  r  rq  r|   r   r  r   r  r   r  s                  rX   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<   rs  )r  r/   r   )rM  r   r  )r8   r  r  r:   r/   Fr   r   r8   rx   ry   )ri  r   r{   rL   rR   rn  r   r   )rT   ro  rp  r5   rq  r|   r   r  r   r  r   r  s               rX   #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<   rs  r  r/   r:   r   rM  r  r  r8   r  rx   ry   )	ri  r   rL   rR   rN   rn  r   r   r   )rT   ro  rp  r5   rq  r|   r   r  r   r  r   r   r  s                rX   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  r8   r:   r/   r   r4  r5  rs  rx   ry   )rL   rS   r  r   r  r   flagsc_contiguousr   r"  r8  r   r  r   rZ  s              rX   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<   rs  Frl  )ri  r   r   r  	writeable)rT   ro  rp  r5   rq  r%  bspl3_s          rX   test_readonlyTestNdBSpline.test_readonly=  sl    %%'	"A&qA$)BEKK! "2Q'Y6)#4444ro   c                 v   U R                  5       u  pn[        R                  " / SQ/ SQ/5      n[        XU5      R	                  XAU5      n[        R                  " XAX3U/5      nUR
                  S   UR
                  S   :X  d   e[        UR                  5       UR                  5       SS9  [        [        5         [        R                  " / SQX/S-  5        S S S 5        [        [        SS9   [        R                  " S	S
//X/S-  5        S S S 5        g ! , (       d  f       ND= f! , (       d  f       g = f)Nrl  )r=   r   r   r   gؗҜ<ry   r<   zData and knots*r>  r/   r:   )
ri  rL   rR   r   r[  r   r   r  rH   rJ   )rT   ro  rp  r5   r  dmdm1s          rX   test_design_matrix TestNdBSpline.test_design_matrixI  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=   r/   rs  c                 L    [         R                  / SQ/ SQ/ SQ4   nU" U5        g )Nr4  r5  r  )rL   r8  )r   rN  r  s      rX   r  1TestNdBSpline.test_concurrency.<locals>.worker_fnb  s&    {&&' (B Gro   rh   )	rL   rS   r  r   r   r  r   r   r&   )	rT   r   r5   r  r  r  r4   rN  r  s	            rX   r  TestNdBSpline.test_concurrencyX  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3ro   r9  )!r:  r;  r<  r=  r  rL   r  r  r#  r.  r1  r8  r?  rW  r\  re  ri  rr  r  r  r  rc   r  r  r  r  r  r  r  r  r  r  r>  r9  ro   rX   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4ro   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)
TestMakeNDik  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:   r/   rs  r\   ry   r  r   r]   )r   linearr+  rx   )rL   rP   r  r   r'   r   ravelr   r4   scipy.interpolater   )rT   r|   r   rb  r  rW   r  r   r`  ra  r  RGIrc  s                rX   test_2D_separable_simple#TestMakeND.test_2D_separable_simplel  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:   r5   solver)$   r=   r=   rx   ry   r'  )r  r:   r:   )rL   rP   r  r   r9  r'   sslspsolverS  rX  r   r   r   )rT   r|   r   r  rW   r  rb  values4r   r  r   values22s               rX   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>r5   )r  rF  )r<   r/   )r/   r<   rO  c                 t   [         R                  " S5      n[         R                  " S5      S-   n[        R                  " X#5       VVs/ s H  u  pEXE4PM
     nnnUS-  S S 2S 4   US-  SU-  -   S S S 24   -  n[	        X#4Xq[
        R                  S9n[        U" U5      UR                  5       SS9  g s  snnf )	Nr   r   r  r<   r:   r  r\   ry   )	rL   rP   r  r   r'   r  r  r   r  )	rT   r5   r|   r   r  rW   r  rb  r   s	            rX   r?  TestMakeND.test_2D_mixed  s     IIaLIIaL3!*!2!21!89!8qf!89Q$4AqD1Q3Ja#88A66s{{CR&,,.u=	 :s   	B4c                 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   r8   r<   r:   r/   rs  )rL   rP   rN   rH   rJ   r'   )rT   r|   r   rb  s       rX   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   r?   r@   rA   r  r  )r/   r:   r/   r:   r/   r/   )r/   r:   r<   r:   r/   r/   )r/   r:   r:   r:   r/   r/   )rL   rl  )rT   r|   r   r  s       rX   _get_sample_2d_dataTestMakeND._get_sample_2d_data  sP    HH./HH./HH""""""	
 Qwro   c                     U R                  5       u  pn[        X4USS9n[        X4USS9n[        R                  " / SQ/ SQ/5      R
                  n[        U" U5      U" U5      SS9  g )	Nr/   rs  r  r+  r/   gffffff@g333333@r   ffffff
@333333?r<   r/   r  r  rA   r}  r1   r<   rx   ry   r  r'   r   rL   rl  r"  r   rT   r|   r   r  r   rc  r  s          rX   test_2D_vs_RGI_linear TestMakeND.test_2D_vs_RGI_linear  sk    **,aA61*%qfaAXX668 99: 	 	R#b'6ro   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_legacyr+  r  r  rx   ry   	r  r'   r  r  r   rL   rl  r"  r   r  s          rX   test_2D_vs_RGI_cubicTestMakeND.test_2D_vs_RGI_cubic  sq    **,aA61#++>%qfaGXX668 99: 	 	R#b'6ro   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<   ư>)r5   r  r_   r  r+  r  r  rx   r   r]   r  )rT   r  r|   r   r  r   rc  r  s           rX   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Aro   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_legacyr+  r  r  rx   ry   r  r  s          rX   test_2D_vs_RGI_quintic!TestMakeND.test_2D_vs_RGI_quintic  sr    **,aA61#++>%qfa8HIXX668 99: 	 	R#b'6ro   zk, meth))r/   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   rD  r  r+  gffffff?r7  rD   r  rx   ry   )
rL   rS   r  cumsumr  r'   r  r  r   r   )rT   r5   methrndmr|   r   r  rb  r   rc  r  s              rX   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'6ro   c                 <   U R                  5       u  pnSS0n[        [        SS9   [        X4U4SS0UD6  S S S 5        [        [        SS9   [        X4[        R
                  " X345      4SS0UD6  S S S 5        g ! , (       d  f       NK= f! , (       d  f       g = f)Nmaxiterr/   r  r>  r5   r<   )r  rH   rJ   r'   rL   r9  )rT   r|   r   r  solver_argss        rX   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r9  N)r:  r;  r<  r=  r  r  rc   r  r  r?  r  r  r  r  r  gmresgcrotmkr  r  r  r  r>  r9  ro   rX   r  r  k  s    7(B4 [[S"JK> L>- 77 [[X		3;;'?@B AB7 [[N77Gro   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)Nr/   ra  r:   r   z1D sequencer>  )rL   rP   r   rc   r	   rJ   _bfpcheckrT   r5   r3   r|   s       rX   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:   r/   rE   rh   z	Need k+1*r>  )	rL   rP   dfitpackfpchecrc   r	   rJ   r  r  )rT   r5   rV   r  r3   r|   s         rX   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   r/   r:   r   )r/   r:   r<   r=   r  r8   r   zLast k knots*r>  zFirst k knots*r  r  r  r  r2  rc   r	   rJ   )rT   r5   r3   r|   tts        rX   test_condition_2TestFpchec.test_condition_2(  s    C1IOqc1Q3i'qQ'1,,,zz!"***VVXA2qa(B...]]:_=JJqa  > VVX21qa(B...]]:-=>JJqa  ?> >= ?>s   #D2E2
E 
Ec                    SnS/US-   -  SS/-   S/US-   -  -   n/ SQn[         R                  " X2U5      S:X  d   e[        R                  " X2U5      b   eS/US-   -  SS/-   S/US-   -  -   n[         R                  " X2U5      S:X  d   e[        R
                  " [        SS	9   [        R                  " X2U5        S S S 5        g ! , (       d  f       g = f)
Nr<   r   r/   r:   r   r/   r:   r<   r  r=   r     zInternal knots*r>  )r  r  r  r  rc   r	   rJ   r  s       rX   test_condition_3TestFpchec.test_condition_3>  s    C1IA!ac*"qQ'1,,,zz!"***C1IA!ac*qQ'2---]]:->?JJqQ @??s   $C
Cc                 J   SnS/US-   -  S/US-   -  -   n/ SQn[         R                  " X2U5      S:X  d   e[        R                  " X2U5      b   eUR	                  5       nUS   US'   [         R                  " XBU5      S:X  d   e[        R                  " X2U5      b   eUR	                  5       nUS   S-
  US'   [         R                  " XBU5      S:X  d   e[
        R                  " [        SS9   [        R                  " XBU5        S S S 5        UR	                  5       nUS	   S-   US	'   [         R                  " XBU5      S:X  d   e[
        R                  " [        SS9   [        R                  " XBU5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)
Nr<   r   r/   r   r  rU  zOut of bounds*r>  r8   r  )rT   r5   r3   r|   rk   s        rX   test_condition_4TestFpchec.test_condition_4K  si    C1IQqS	!"qQ'1,,,zz!"***VVX!1ra(A---zz!"***VVX!q1ra(B...]]:-=>JJra  ? VVX22ra(B...]]:-=>JJra  ?> ?> ?>s   1F"F
F
F"c                    Sn/ SQn/ SQn[         R                  " X2U5      S:X  d   e[        R                  " [        SS9   [
        R                  " X2U5        S S S 5        / SQn[         R                  " X2U5      S:X  d   e[        R                  " [        SS9   [
        R                  " X2U5        S S S 5        g ! , (       d  f       Ni= f! , (       d  f       g = f)Nr/   )r   r   r/   r:   r:   )r6  r6  r6  rv   Schoenberg-Whitney*r>  )r   r   r   r  r  rc   r	   rJ   r  r  r  s       rX   test_condition_5_x1xm TestFpchec.test_condition_5_x1xmj  s    qQ'2---]]:-BCJJqQ D qQ'2---]]:-BCJJqQ DC DC
 DCs   B<C<
C

Cc                     Sn/ SQnSS/n[         R                  " X2U5      S:X  d   e[        R                  " X2U5      b   eg )Nr/   )r   r   r/   r/   r   g333333?r   )r  r  r  r  r  s       rX   test_condition_5_k1TestFpchec.test_condition_5_k1x  sE    #JqQ'1,,,zz!"***ro   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   r/   r:   r   rv   r  r>  r  r  s       rX   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   r/   r:   r   r6  r=   rv   r  r>  r  r  s       rX   test_condition_5_2TestFpchec.test_condition_5_2  s    C1IA!ac*E!GqcMqQ'2---]]:-BCJJqQ D E!Gq!fqQ'1,,,zz!"*** DCs   B>>
Cc                     Sn/ SQn/ SQn[         R                  " X2U5      S:X  d   e[        R                  " [        SS9   [
        R                  " X2U5        S S S 5        g ! , (       d  f       g = f)Nr/   )	r   r   r:   r<   r=   r   r   r   r   )r/   r/   r/   @r  r  r  rv   r  r>  r  r  s       rX   test_condition_5_3TestFpchec.test_condition_5_3  sT    ')qQ'2---]]:-BCJJqQ DCCs   A""
A0r9  N)r:  r;  r<  r=  r  r  r  r  r	  r  r  r  r  r  r>  r9  ro   rX   r  r    s4    	  *!, !> + + ro   r  c                    [         R                  " XX"*  5      n[        [        U5      S-
  5       Vs/ s H  oSXE   XES-       R	                  5       PM     nnX4SS    n[        [        U5      5       H%  nXu   S-  nXe==   U-  ss'   XeS-   ==   U-  ss'   M'     US==   US   -  ss'   [        [	        U5      [	        U5      SS9  Xd4$ s  snf )z)Split the knot interval into "runs".
    r/   r8   r:   r\   ry   )rL   r  r   rZ  r  r   )	r|   r3   r5   	residualsr  r%  fpartscarriescarrys	            rX   _splitr"    s     
aG	$B6;CGAI6FG6Fb1g&**,6FFG1R!G3w< 
Q	U	su !
 2J)B-JCKYe<: Hs   #Cc                 T   [        XX#5      u  pESnSn[        [        U5      5       H%  nXXS-      XX   -
  S:  d  M  XH   U:  d  M  UnXH   nM'     US:X  a  [        S5      eXV   XVS-      -   S-   S-  n	X	   n
[        R
                  " X5      n[        R                  USU XUS 4   nU$ )z Insert a new knot given reduals.ig}Ô%Ir/   z5Internal error, please report it to SciPy developers.r:   N)r"  r   rZ  rJ   rL   r  r   )r|   r3   r5   r  r  r  idx_max	fpart_maxr%  idx_newknotnew_knotidx_tt_news                rX   	_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Lro   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   rF   r<   r1   r/   r>   r  )r5   r3   r:   r   _fitpack_repror\   ry   )
rL   rP   rX  rl  r   r  r/  add_knotr*  r   )rT   r|   r   r5   r3   rN  r  _frnew_tnew_t_pyspl2
residuals2new_t2	new_t2_pys                 rX   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	6ro   r5   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   rF   r   r5   r  r8   r\   ry   )	rP   rQ   r  r  r  r"   r   rR   r   )rT   r5   rU   r|   r   r3   r   s          rX   test_s0TestGenerateKnots.test_s0  sy    IIarzzI*FF1UU719Q/04AA#A&ZZ**Z-E*ro   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 )	Nrh   rF   r<   r   r;  r8   r\   ry   )rP   rQ   r  r"   rR   r   rL   r   rT   rU   rV   r|   r   knotsrl   s          rX   	test_s0_1TestGenerateKnots.test_s0_1  sd    IIazzI*qD^AA34::k"**Q-;<b	8%8ro   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   r;  r8   r\   ry   )rP   r  r"   rR   r   rL   r   r?  s          rX   test_s0_n20TestGenerateKnots.test_s0_n20  s]    IIaLqD^AA34::k"**Q-;<b	8%8ro   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)Nrh   r<   r   r5   r  nest)rL   rP   rH   rJ   r  r"   rT   r|   r   s      rX   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   rF   r<   r   r;  )r>   r>   r>   r>   r  r  r  r  )	r>   r>   r>   r>   rA   r  r  r  r  
r>   r>   r>   r>   r?   rA   r  r  r  r  )r>   r>   r>   r>   r?   rA   r  r  r  r  r  )r>   r>   r>   r>   r?   r@   rA   r}  r   r  r  r  r\   ry   r8   N)rP   rQ   r  rL   r  r  r"   rR   rZ  rn  r   r   )rT   rU   r|   r   r5   r@  wantedwantr3   r   r   s              rX   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  r/   )r  r5   )r  r   r"   next)rT   r|   gens      rX   r  !TestGenerateKnots.test_list_input>  s$    qNQSA.S	ro   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   rF   r   r<   rh   rG  r8   rM  r\   ry   r=   )r5   rH  )
rP   rQ   r  r  r  r"   r   rR   rH   rJ   )rT   rU   r|   r   r  r@  s         rX   	test_nestTestGenerateKnots.test_nestD  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   rE   r5  )	rL   rP   r  r  rH   rJ   r  r"   r  rI  s      rX   r7  TestGenerateKnots.test_weightsU  s    IIaLFF1RUU719:&		"67 ' :&45 '& '& '&s   (C)C
C
C npts)r  rv   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  rh   r   r   r:   r<   r;  r   r8   r\   ry   )rL   rS   r   r   r  r  r  expr   r  r"   r   )	rT   r  r\  r  r|   r   r5   r3   r   s	            rX   test_vs_splrep TestGenerateKnots.test_vs_splrep_  s     yy$$U+rwwt|||.//FF1RUU72:!A#	!2211"1%.01"5E*ro   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<   Jz5r;  r/   r8   r   )
rL   rP   r  r"   rc   warnsRuntimeWarningr   rZ  r   )rT   rV   r|   r   r@  r  rb   s          rX   test_s_too_small"TestGenerateKnots.test_s_too_smallr  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>   r1   r?   r@   )rA   r}  r  r  )r>   r>   r>   r>   r/   )r5  r  zweights are zeror>  )r"   rc   r	   rJ   r  )rT   rT  s     rX   test_zero_weights#TestGenerateKnots.test_zero_weights  s5    ]M]aP]]:-?@I A@@s   A
Ar9  N)r:  r;  r<  r=  r8  rc   r  r  r<  rA  rD  rJ  rP  r  rW  r7  r`  rg  rj  r>  r9  ro   rX   r,  r,    s    70 [[S/2+ 3+99:*>X4"6 [[V]3[[S.1+ 2 4+"+ro   r,  c                 F   U R                   S   nXU-
  S-
     X   -
  nUSU-  -
  S-
  nXS-   X!-
  S-
   n[        R                  " US5      nUSSS2==   S-  ss'   USSS2==   S-  ss'   [        U [        R                  " X!-
  S-
  5      U5      " XaS9n[        R
                  " US-
  UR                   S   4[        S9n[        SUR                   S   S5       H   n	XySS24   XyS-   SS24   -
  XS-  SS24'   M"     XU-  U-  [        R                  " U5      -  -  nU$ )zStraitforward way to compute the discontinuity matrix. For testing ONLY.

This routine returns a dense matrix, while `_fitpack_repro.disc` returns
a packed one.
r   r/   r:   Nr   r   rF   )
r   rL   rl  r
   rY  emptyrX  r   r!  	factorial)
r3   r5   rV   deltanrintr  tiir  matrr%  s
             rX   
disc_naivers    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Kro   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 )NrF   r/   r   r   r.  )r|   r   r3   r5   rL   rr   rX  r5  r   r2  r
   rY  r   a_denser  r/  rr  discr  b_denser   rm  r   r  )rT   r|   r   r3   r5   r  r5  r   rw  r1  r   s              rX   ru  F_dense.__init__  s    12au-&vv{{a !RVVAGGAJNQ$67TUVW40;#SXXa^4<<> vv{{Z%%BHHT\\%7%7%:;;<ro   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   )r'  r  economic)r  r/   r   r:   )rL   vstackrw  ry  scipy.linalgr'  r  r"  r   r   r
   r3   r5   r   r  r5  r|   r   rN  r  )rT   r,  abr'  r  r  r  qyrt  r4   rN  fps               rX   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{ro   )rw  ry  r   r5   r  rN  r3   r5  r|   r   r   )NT)r:  r;  r<  r=  r  ru  r  r>  r9  ro   rX   ru  ru    s    .ro   ru  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:   rh   gq@H&?r   rE   gQ	@)rW  ri   rL   r  r  )rT   rU   r|   r   r  s        rX   	_get_xykt_TestMakeSplrepBase._get_xykt  s~    <<:%Aqw+AAA7NAq"%A$
#Q&AA7Nro   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   rh   rE   ra  r  r/   r:   r  r  rW  r<   )r5  r  rW  r8   rC   r5   r  rW  )r5   rH  r  rW  )r  rH  rW  r   	   )rL   ri   rH   rJ   r#   rW  r  r   r   rI   rP   rT   r|   r   r5  s       rX   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  r8   )r3   r5   r  rW  r\   ry   )r  r"   rW  r#   r   r3   r4   r5   )rT   r|   r   r5   r  r3   spl_autospl_ts           rX   _test_with_knots$_TestMakeSplrepBase._test_with_knots  s    EFrJqqt||DAAaF

EGG%8

EGG%8zzUWW$$$ro   r5   r/   r:   r<   r=   r   r   c                 N    U R                  5       u  p#nU R                  X#X5        g r  )r  r  )rT   r5   r|   r   r  s        rX   test_with_knots#_TestMakeSplrepBase.test_with_knots!  s"    .."aaA)ro   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 )NrV  r8   r\   ry   )r#   rW  r   r  r"   r   r4   r3   )rT   r|   r   r5   rN  spl_ir3   s          rX   _test_default_s#_TestMakeSplrepBase._test_default_s'  sp    !!\\:"11llC<<@A"EuwwU3qu-/ro   c                 N    U R                  5       u  p#nU R                  X#U5        g r  )r  r  )rT   r5   r|   r   r   s        rX   test_default_s"_TestMakeSplrepBase.test_default_s0  s"    .."aQ1%ro   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:   rc  r<   r6   r5   r  r  r  r/   r  ry   )rW  rL   ri   r  r  rP   warningscatch_warningssimplefilterrf  r   r#   r   r3   r   r4   r5   )rT   r  r|   r   rb   rN  s         rX   rg  $_TestMakeSplrepBase.test_s_too_small5  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rl  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 )
Nrh   r   r   r:   r<   rV  h㈵>r  r/   )	rW  rL   ri   r  r  rP   r#   r4   r2  )rT   r5   rV   r|   r   rN  r  rm  s           rX   
test_shape_TestMakeSplrepBase.test_shapeR  s     <<:%Aqw*Aq	A		!A1A!!\\:AAt||DuuzzQww||q    A1ac7{a4Nww||q   ro   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)Nrh   r   r:   r/   :0yE>nonsenser  )rL   r  ri   r_  rH   rJ   r#   rT   Nr  rW   r|   r   s         rX   test_error_on_invalid_bc_type1_TestMakeSplrepBase.test_error_on_invalid_bc_typeg  sW    !BEE'1KKa!e$FF1I:&j9 '&&s   A++
A9rW  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:   rh   r/   r   r  r   r5  r5   r  r  r5  r  r5   rW  ry   )rL   ri   r  r  rZ  r   r#   r   r3   r   r4   r5   )rT   rW  r5   r|   r   r5  rb   rN  s           rX   %test_make_splrep_with_unequal_weights9_TestMakeSplrepBase.test_make_splrep_with_unequal_weightsp  s     KK1RUU7B'FF1IKK1c!f%QQt'Z2GI!!tqBs1v&ceeaS#%%']23AT	+ro   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   r/   r  ry   )r   r3   rL   r   r4   r5   )rN  rb   s     rX   checkO_TestMakeSplrepBase.test_make_splrep_with_non_c_contiguous_input.<locals>.check  sG    CEE3q6*BEE#%%!ceeAg"67F/ro   r   r:   rh   Fr/   r   r<   r  r   r  r  )rL   ri   r  r  r8  r"  r  r  rZ  r   r#   )rT   rW  r  r|   r   r   r  r5  w1r   rb   rN  s               rX   ,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ro   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   r/   rh   r:   r8   r<   r  )xbxer5   r  r3   rH  rW  )rL   ri   r  r  rl  r#   r0  r
   r3   r   r5   r   rR   )
rT   rW  r5   r|   r   r  r  r  r3   rN  s
             rX   %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Cro   rV   )r   3   r   rE   r  )rh   r   r   r/   r]  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  rE   r/   r\   ry   )rL   rS   r  r   r   r  r  r  r  r   rW  r#   r   r3   r4   
rT   rV   r  r   r|   r   r3   r4   r5   rN  s
             rX   (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ro   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  rW  r3   r/   r\   ry   )rL   rS   r  r   r   r  r  r  r  r   rW  r#   r   r4   r  s
             rX   "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6ro   r9  )r:  r;  r<  r=  rW  rL   r  r  r  rc   r  r  r  r  r  thread_unsaferg  r  r  r  r  r  r  r  r>  r9  ro   rX   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7ro   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  r5   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   Fr/   rC   rA   r   r/   rh   r   r\   ry   ) scipy.interpolate._fitpack_repror  r  rL   rl  ru  r   )
rT   r5   r  r|   r   r  r3   ff_dr,  s
             rX   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 ro   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  r/   rC   rA   r   rF   rZ  r  r\   ry   )r  r  r  rL   rl  rP   r   rX  ru  r   r   )rT   r5   r  r|   r   r  r3   r5  fwfw_dr  r,  s               rX   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???? ro   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\   ry   )r  interpolater/  rL   rS   r  r   r   r  rZ  rr  rx  r  rs  r   r   )rT   r1  r   r3   rV   r5   DD_denses           rX   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[(((/ro   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   r/   rC   rA   r   r;  r\   ry   )r  rR   r   r   r#   r   r4   r   )
rT   rU   r5   r|   r   r  r   r3   r4   rN  s
             rX   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>ro   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<   r;  r8   )r3   r5   r  r\   ry   )r  r  r"   r#   r   r3   r4   r5   )rT   r5   r|   r   r  r3   r  r  s           rX   r  TestMakeSplrep.test_with_knots  s    .."a/04qq.AAa0

EGG%8

EGG%8zzUWW$$$ro   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 )Nrh   rF   r<   r/   r;  r   r:   )rP   rQ   r#   r3   r   )rT   rU   rV   r|   r   r5   rN  s          rX   test_no_internal_knots%TestMakeSplrep.test_no_internal_knots*  sY    IIazzI*qD!!q)uu{{1~AaC(((ro   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 )Nrh   rF   r<   rs  r\   ry   )rP   rQ   r#   r   r   r4   )rT   rU   rV   r|   r   rN  r  s          rX   r  TestMakeSplrep.test_default_s3  sP    IIazzI*qD!!$"11-uwwU3ro   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)
Nrc  r<   rd  r;  r   r/   r  ry   r:   )rL   rP   rc   re  rf  r   r#   r   r3   r   r   r4   r5   rZ  )rT   rV   r|   r   r  rb   rN  s          rX   rg  TestMakeSplrep.test_s_too_small<  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@rF   )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:   ra  )r5  r5   r  )rL   rR   rQ   r   rH   rJ   r#   r  s       rX   test_issue_22704TestMakeSplrep.test_issue_22704J  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rh   r<   rF   r<   rs  r  r;  r/   )rP   rQ   r#   r4   r2  )	rT   rU   rV   r5   r|   r   rN  r  rm  s	            rX   r  TestMakeSplrep.test_shapeX  s    IIazzI*qD!!$AA.uuzzQww||q    A1ac7{a48ww||q   ro   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  rF   r<   r   r;  r/   r:   )rP   rQ   r#   r4   r2  r3   r   )rT   rU   rV   r5   r|   r   r  r  s           rX   test_s0_vs_notTestMakeSplrep.test_s0_vs_noth  s    IIazzI*qDAA+AA+ww||q   ww||q   ww}}Q1519,,,ww}}Q1A;...ro   r9  N)r:  r;  r<  r=  rc   r  r  r  r  r  r  r  r  r  rg  r  r  r  r>  r9  ro   rX   r  r    s}     [[S"45	6 6	6 [[S"45@ 6@ 0?%)4.! /ro   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)TestMakeSplrepPeriodicix  r   r5   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   rh   rE   rm  r/   r  r:   )ri   r  r#   rW  r3   r   )rT   r5   rU   r|   r   rN  s         rX   r  -TestMakeSplrepPeriodic.test_no_internal_knots}  sY     KK2r"GGEN!!q$,,?uu{{1~AaC(((ro   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 )Nrh   r   r:   r  r/   )rL   ri   r  r  r  r#   rW  r4   r2  r3   r   )rT   r5   rV   r|   r   r  r  s          rX   r  %TestMakeSplrepPeriodic.test_s0_vs_not  s     KK1RUU7A&FF1Iq	!AADLLAAADLLAww||q   ww||q   ww}}Q1q1u9,,,ro   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 )Nrh   r   r:   r/   rF   r  r  r  r  r]   r   r  r   r<   )	r  ri   rQ   r  r#   rW  r   r   r  )rT   rU   r  r  rW   r|   r   rN  s           rX    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$?ro   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)Nrh   r   r:   r/   r  r  )rL   r  ri   r_  rH   rJ   r#   rW  r  s         rX   $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   rd  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>   r1   r}  r   r/   r   )r5  r5   rW  r  )r5  r5   r  r  )	rL   rl  r#   r   r   r3   r   r4   r5   )rT   r  r|   r   r5  rN  rb   s          rX   '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	 ro   k_fp))r/   -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)Nrh   r   r/   r:   r  r  r;  r6   r?   MbP?r>   r1   )rL   ri   r  r  r   r    r  r  r  rf  r!   rO   rN  rl  r   )rT   r  r  rV   r|   r   r5   r  rb   fp0spliner   bsx_checky_checks                  rX   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r9  N)r:  r;  r<  r=  rW  rc   r  r  r  r  r  r  r  r  r>  r9  ro   rX   r  r  x  s     G[[S"45) 6) [[S"45- 6-@"< [[S1e*-  .  [[V%QR[[S4&)0 * S0ro   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  rh   r<   c                     UR                  XR                  S9UR                  -  U-  nUR                  U5      UR	                  U5      /nXEU4$ )NrF   )rP   rQ   r  r  r  )rT   r  r5   rU   r|   r   s         rX   _get_xykTestMakeSplprep._get_xyk  sG    IIazzI*RUU2Q6VVAYq	"Qwro   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  rc  r   r  rh   r  r  r\   ry   r/   r  )rL   rP   r  r  r  r   r$   r   r3   rZ  rR   r"  r4   r
   )rT   r  r  r5   r|   r   	num_knotsr3   r4   u_rN  rP  r  s                rX   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ro   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  ry   r\   r/   )r  r0  r  rL   r   r   rR   r   rZ  r   r$   r3   r4   r"  r5   rH   rJ   )	rT   r  r   r   rb   rP  tck_au_arN  s	            rX   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 )Nrh   r  rU   r\   ry   r  r$   r   r   rT   rU   r|   r   r5   rN  rP  s          rX   test_default_s_is_zero&TestMakeSplprep.test_default_s_is_zero  s;    --"-,aaA%8ro   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 )Nrh   r#  r   r  r\   ry   r   )r  r$   r   r   r  r4   r   )	rT   rU   r|   r   r5   r  u_ispl_nu_ns	            rX   test_s_zero_vs_near_zero(TestMakeSplprep.test_s_zero_vs_near_zero%  s    --"-,a!!q)
!!u-
u-c
BHHQKe<c
BHHQKd;zzUZZ'''ww}}---ro   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   rF   r   r  r  r  r/   r   r\   ry   )	rL   rP   rX  rH   rJ   r   r$   r   r   )rT   r|   rb   r  rN  rP  s         rX   r  TestMakeSplprep.test_1D2  s    IIau%:&AJ ' :&a  ' :&c" ' 1#&qcT*1v||v%%%A%0 '& '& '&s#   CC.C(
C
C%(
C6r9  Nr:  r;  r<  r=  rL   r  rc   r  r  r  r   r&  r,  r  r>  r9  ro   rX   r  r    sl    qR 
 [[S"67A 8A: [[S"67/ 8/B9.1ro   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)TestMakeSplprepPeriodiciD  rh   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:   rF   )ri   r  rQ   r  r  )rT   rV   r5   rU   r|   r   s         rX   r   TestMakeSplprepPeriodic._get_xykG  sE    KK1RUU7AZZK8VVAYq	"Qwro   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 )Nrh   r   r:   rc  r  r6  r/   r  r   r  r\   ry   r  r  r]   )rL   ri   r  r  r  r   r$   r   rZ  r3   r
   )rT   r  rV   r|   r   r  r3   r4   r5   r  rN  rP  s               rX   r  .TestMakeSplprepPeriodic.test_simple_vs_splprepL  s     KK1RUU7A&VVAYq	" "Bb9	  A.	qaj9 	E* 355zY\))) 	Aaa 8 ;"	0ro   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:   r/   r  ry   r\   r   r  )r  r0  r  rL   r   r   rR   r   rZ  rn  r   r$   r5   rH   rJ   r"  )rT   r  r   r   rb   rP  r  r  r  r   rN  s              rX   r   +TestMakeSplprepPeriodic.test_array_not_liste  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 )Nrh   rV   rU   r   r  r\   ry   r$  r%  s          rX   r&  .TestMakeSplprepPeriodic.test_default_s_is_zero  s>    --"-,aa4A%8ro   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 )Nrh   r<  r   r   r  r   r\   ry   r   r  r]   )r  r$   r   r   r  )
rT   rU   r|   r   r5   r  r)  r*  r+  y_arrs
             rX   r,  0TestMakeSplprepPeriodic.test_s_zero_vs_near_zero  s    --"-,a!!q*=
!!ujA
u-c
E6c
E4@zzUZZ'''ro   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   r/   r  r   r  r  r\   r/  ry   )
rL   ri   r  r  rH   rJ   r   r$   r   r   )rT   r|   rN  rP  s       rX   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r9  Nr1  r9  ro   rX   r3  r3  D  sm     qR 
 [[S"780 900 [[S"78C 9C<9(1ro   r3  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 Nr8   )rL   moveaxisr   _batch_shaper   _splines_axis)rT   r|   r   r  r  kwargsyis          rX   ru  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 rF  )rI  rL   r   rH  r   rG  rJ  )rT   r|   r  r   s       rX   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  )rI  r#  rL   r   rH  )rT   r  rW   r   r  r   s         rX   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  )r2  deepcopyrI  r  rT   r   r3  r  s       rX   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  )r2  rS  rI  r  rT  s       rX   r  BatchSpline.antiderivative  s>    mmD!@CMf--b1M
 NrV  )rJ  rH  rI  r  )
r:  r;  r<  r=  ru  r  r#  r  r  r>  r9  ro   rX   rD  rD    s    @
0
ro   rD  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  r1   r%  r&  r'  
eval_shape)r9  r/   r	  r  rO  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{ rh   r:   r<   r=   )r   rh   r8   r   r/   )r3   r5   r  )r  r  r   )rL   rS   r  ri   rG  r   rK   rD  r  testingassert_allcloser  r  r#  )rT   make_splinerK  r  r[  r   rV   r   domainr|   r   r5   r3   r3  refs                  rX   
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Rro   r9  N)r:  r;  r<  r=  rc   r  r  r   r   r   rc  r>  r9  ro   rX   rZ  rZ    s    [[2
b	!
	$
%	.
Hi0	1
Hd+	,		 [[\+;<[[VZ0S 1 =Sro   rZ  r@  r	  r\  )zr  r  r  r!  r  r  r2  r  r  numpyrL   scipy._lib._array_apir   r   r   r   r   r   scipy._lib.array_api_extra_libarray_api_extrar  rc   r	   rH   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   rz   r   ra   r  r5  r  r  r$  r  rp  r)  rr  r  r  r  r  r  r  r  r?  ro  r  r  r  r  r"  r*  r,  rs  ru  r  r  r  r  r3  rD  rZ  r9  ro   rX   <module>rr     s1   	        
   ) ( *     
  ! !E E B G G / / & 9 5 3 - &;;//  7_
) _
) _
)D 7S$ S$ S$l6,$G>  $ b +$_) _)D %&`? `? '`?F88 !++11(Y<MN  ?#~: ~: $~:B >)X	(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ro   