
    >qj\                    h   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z
d dlmZmZmZmZmZmZmZmZ d dlmc mZ d dlmZ d dlZd dlmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, d dl-m.Z/ d dl0m1c m.Z2 d dl3m4Z4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z:m;Z; d dlm<Z<m=Z=m>Z> d dl?m@c mAZB d dlCmDZD d d	lEmFZF d d
lGmHZH d dlmIZJ d dlmKZL d dlmMZM ej                  j                  ZOej                  j                  ZP ee       G d d             ZQ eedf       G d d             ZRd ZSd ZTd ZUd ZVd ZWe
fdZXdSdZYdde
fdZZd Z[ G d d      Z\ ee       G d  d!             Z]d" Z^dTd#Z_ej                  j                  d$d%d&g      Za ee        G d' d(             Zb G d) d*      ZcdUd+Zdd, Zed- Zf G d. d/      Zgd0 Zh ee+       G d1 d2             Zid3 Zjd4 Zkd5 Zl G d6 d7      Zm ee*       G d8 d9             Zn G d: d;      Zo G d< d=      Zpd> Zqd? Zr ee<       G d@ dA             ZsdB Zt G dC dD      Zu G dE dF      Zv ee=       G dG dHev             Zw ee=       G dI dJev             Zx ee>       G dK dL             Zy ee>       G dM dN             Zz G dO dP      Z{ G dQ dR      Z|y)V    N)xp_assert_equalxp_assert_closexp_default_dtype	concat_1dmake_xp_test_casexp_ravel_xp_copy_to_numpyarray_namespace)raises)BSplineBPolyPPolymake_interp_splinemake_lsq_splinesplevsplrepsplprepsplder
splantidersprootsplintinsertCubicSpline	NdBSplinemake_smoothing_splineRegularGridInterpolator)_not_a_knot_augknt_woodbury_algorithm_periodic_knots_make_interp_per_full_matr)	Fperiodic	root_rati)generate_knotsmake_splrepmake_splprep)	AxisError)_run_concurrent_barrier)make_ndbspl)_fitpack)	_bsplines)_dierckxc                   Z   e Zd Zd Zd Zd Zd Zd Zd Zd Z	 e
dd	
       e
dd
       e
dd
      d                      Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z e
dd
      d        Zd  Zd! Zd" Zd# Zd$ Zd% Zd& Z  e!dd'
      d(        Z"d) Z#d* Z$d+ Z%e&jN                  jQ                  d, e)d-d.            d/        Z*d0 Z+d1 Z,e&jN                  jQ                  d2g d3      e&jN                  jQ                  d4 e)d5            d6               Z-d7 Z.d8 Z/d9 Z0e&jN                  jQ                  d:g d;      d<        Z1e&jN                  jQ                  d:g d;      d=        Z2d> Z3d? Z4d@ Z5e&jN                  jm                  e7jp                  dAk(  dBe9C      dD        Z:yE)FTestBSplinec           
         t        t        t        ft        fi t	        ddgdgd       t        j                  d      5  t        t        t        fi t	        dt
        j                  gdgd       d d d        t        t        t        fi t	        dt
        j                  gdgd       t        t        t        fi t	        ddgdgd       t        t        t        fi t	        dgdggdgd       t        t        t        fi t	        g d	dgd       t        t        t        fi t	        g d
ddgd       t        t        t        fi t	        g dg dd       t        t        t        fi t	        g dg dd       t        t        t        fi t	        g dg dd       d\  }}|j                  ||z   dz   |j                        }|j                  t
        j                  j                  |            }t        |||      }t        ||j                         t        ||j                         ||j                   k(  sJ y # 1 sw Y   xY w)N                 ?      ?r   tckignore)invalidr   r0      r   r0   r;         r;   )        r?   r2          @      @      @)r2   r2   r2   cubic      @)r?   r   r0   r0   r;   r=   )r2   r0   r0      r=   dtype)assert_raises	TypeError
ValueErrorr   dictnperrstatenaninfarangefloat64asarrayrandomr   r4   r5   r6   )selfxpnr6   r4   r5   bs          d/opt/rentech/trading_bot/.venv/lib/python3.12/site-packages/scipy/interpolate/tests/test_bsplines.py	test_ctorzTestBSpline.test_ctor5   s   y*-w 	1!SbTQ/	1[[* 	S*gRBFFtq1QR	S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 1IIac!e2::I.JJryy''*+Aq!133133ACCxx;	S 	Ss   3IIc                 2   t               }|j                  }t        |j                  |d   dd       t        |j                  |d   dd       |j
                  |d   k(  sJ t        j                  t              5  d|_        d d d        y # 1 sw Y   y xY w)Nr   V瞯<atolrtolr0   r;   foo)	_make_random_splinetckr   r4   r5   r6   pytestr   AttributeError)rU   rX   rb   s      rY   test_tckzTestBSpline.test_tckX   s}    !eeSV%e<SV%e<ssc!f}} ]]>* 	AE	 	 	s   <BBc                    t        |j                  g d      |j                  ddg      d      }|j                  ddd      }|j                  |dk  |j                  d|j                  	      d
      }t         ||      |       y )Nr   r2   r;   rA   r>   r   r3   r;   
   r2   rG   rB   )r   rS   linspacewhererR   r   )rU   rV   rX   xxexpecteds        rY   test_call_namespacezTestBSpline.test_call_namespaced   so     bjj,

B70CqI[[Ar"88BGRZZ"**Z%EsK"x(    c                     t        |j                  g d      |j                  ddg      d      }t        |j                        |u sJ t        |j                        |u sJ y )Nrg   rA   r>   r   r3   )r   rS   r
   r4   r5   rU   rV   rX   s      rY   &test_attributes_have_correct_namespacez2TestBSpline.test_attributes_have_correct_namespacem   sT    bjj,

B70CqIqss#r)))qss#r)))rn   c                    t        j                  ddd      }t        ddgdgd      }t         ||      t        j                  |      dz         t        g dddgd      }t         ||      t        j
                  |d	k  dd
             y )Nr   r0   rh   rA   r3   )r   ffffff?r0   r=   r>   rs   rB   )rM   ri   r   r   	ones_likerj   )rU   rk   rX   s      rY   test_degree_0zTestBSpline.test_degree_0r   su    [[Ar"q!f*"r||B/#56lq!f2"rxxT	3<=rn   c           	         |j                  g d      }|j                  g d      }d}t        |||      }|j                  ddd|j                        }t	         ||      |d   t        ||	      z  |d   t        |dz
  |	      z  z   |d
   t        |d
z
  |	      z  z   d       t        t        |||f      \  }}}	t        |||	|f      }
t	         ||      |j                  |
      d       y )Nr<   )r2   r;   r=   r0   r2   rA   2   rG   r   rV   r;   +=r^   )	rS   r   ri   rR   r   B_012mapr	   r   )rU   rV   r4   r5   r6   rX   xx_npt_npc_npsplev_results              rY   test_degree_1zTestBSpline.test_degree_1{   s    JJ'JJ{#Aq!KKS"BJJK7aDaDqR 1Q4acb(9#99AaDqsrAR<RR	

 01a)<dDTD$?3!bjj6UCrn   c           
         d}|j                  dg|dz   z  dg|dz   z  z         }|j                  g d      }t        t        |j                  |d            t        |j                  ddg                  }t	        |||      }|j                  ddd      }t         ||d	
      |j                   |t        |      d	
            d       y )Nr=   r   r0   r2   r@   rA   rB   )r9   r0   g      r@   rh   Textrapolatery   rz   )rS   r   r	   reshaper   ri   r   )rU   rV   r6   r4   r5   bpbsplrk   s           rY   test_bernsteinzTestBSpline.test_bernstein   s    JJsAaCyA3!9,-JJ'(bjjG45bjj!Q01
 q!Q[[b"%&JJr+B/TBC	
rn   z
dask.arrayz"_naive_eval is not dask-compatiblereasonz	jax.numpyztoo slow; XXX a slow-if marker?torchz	OOB on CIc                    t        |      }|j                  \  }}}|j                  ||   || dz
     d      } ||      }|j                  |D cg c]  }t	        |||||       c}      }	t        ||	d       |j                  |D cg c]  }t        |||||       c}      }
t        ||
d       y c c}w c c}w )Nrx   r0   rw   ry   rz   )ra   rb   ri   stack_naive_evalr   _naive_eval_2)rU   rV   rX   r4   r5   r6   rk   y_br}   y_ny_n2s              rY   test_rndm_naive_evalz TestBSpline.test_rndm_naive_eval   s      2&%%1a[[1q!Aw+ehhC1Aq!Q26CDSu-xx2Faq!Qb9FGT.	 D Gs   B9B>c           	          t               }|j                  \  }}}t        j                  ||   || dz
     d      }t	         ||      t        ||||f      d       y )Nr0   rw   ry   rz   )ra   rb   rM   ri   r   r   rU   rX   r4   r5   r6   rk   s         rY   test_rndm_splevzTestBSpline.test_rndm_splev   sV    !%%1a[[1q!Aw+"uR!Q3%@rn   c                    t         j                  j                  d      }t        j                  |j                  d            }|j                  d      }t	        ||      }t        | }|j                  |j                  }}t        j                  ||   || dz
     d      }t         ||      t        ||      d       y )N     r0   P   ry   rz   )rM   rT   RandomStatesortr   r   r4   r6   ri   r   r   )	rU   rngr}   yrb   rX   r4   r6   rk   s	            rY   test_rndm_splrepzTestBSpline.test_rndm_splrep   s    ii##D)GGCJJrN#JJrNQlSMssACC1[[1q!Aw+"uR~E:rn   c                 @   t        |      }|j                  |j                        |_        |j                  |j                  |j
                     |j                  |j
                   dz
     d|j                        }t         ||      |j                  |             y )Nrx   r0   d   rG   )ra   rt   r5   ri   r4   r6   rR   r   )rU   rV   rX   rk   s       rY   test_rndm_unityzTestBSpline.test_rndm_unity   so    2&ll133[[QSS133tAv;2::[F"r||B/0rn   c                    t         j                  j                  d      }d\  }}t        j                  |j                  |            }|j                  |ddf      }t	        |j
                  ||f      \  }}t        |||      }||   || dz
     }	}||	|z
  |j                  |j                  d            z  z   }
 ||
      j                  dk(  sJ y )	Nr      r=         sizer0   r=   r>      )r=   r>   r   r   r   )rM   rT   r   r   r|   rS   r   shape)rU   rV   r   rW   r6   r4   r5   rX   tmtprk   s              rY   test_vectorizationzTestBSpline.test_vectorization   s    ii##D)1GGCJJqM"JJQ1IJ&2::1v&1Aq!1q!AwB27bjjI)>???u{{o---rn   c           	      X   t         j                  j                  d      }d\  }}t        j                  |j                  ||z   dz               }|j                  |      }t         j                  ||j                  |dz         f   }t        |||      t        |||      }}|d   |d   z
  }	t        j                  |d   |	z
  |d   |	z   d      }
t         ||
       ||
      d       t         ||
      t        |
|||f      d       t         ||
      t        |
|||f      d       y )	Nr   )!   r=   r0   r9   r   rw   ry   rz   )	rM   rT   r   r   r_r   ri   r   r   )rU   r   rW   r6   r4   r5   c_padrX   b_paddtrk   s              rY   
test_len_czTestBSpline.test_len_c   s
    ii##D)1GGCJJqs1u%&JJqM aAaC()1a#WQq%95rUQqT\[[1AbEBJ3"uRyu5"uR!Q3%@"uR!UA7eDrn   c           	          t               }|j                  \  }}}||   || dz
     }}dD ])  }t         |||g|       ||dz   |dz
  g|      dd       + y )Nr0   TF绽|=&.>Hz>r]   ra   rb   r   )	rU   num_parallel_threadsrX   r4   _r6   r   r   extraps	            rY   test_endpointszTestBSpline.test_endpoints   ss    !%%1a1q!AwB# 	WFAr2h/rEz2:6?dQUW	Wrn   c           	          t               }|j                  \  }}}t         |||dz   | dz
   dz
         |||dz   | dz
   dz         d       y )Nr0   r   r   rz   r   )rU   r   rX   r4   r   r6   s         rY   test_continuityzTestBSpline.test_continuity   s\    !%%1a!AaC1+-.!AaC1+2E0F	rn   c                    t        |      }|j                  \  }}}|d   |d   z
  }|j                  ||   |z
  || dz
     |z   d      }||   |k  ||| dz
     k  z  }t         |||   d       |||   d             t	        t
        |||f      \  }	}
}|j                  t        |	|
||fd	            }t         ||d      |       y )
Nrx   r9   r   r0   rw   Tr   F)ext)ra   rb   ri   r   r|   r	   rS   r   )rU   rV   rX   r4   r5   r6   r   rk   maskxx_npr   r   r   s                rY   test_extrapzTestBSpline.test_extrap   s    2&%%1arUQqT\[[1AqbdGbL"5!r	b1aRT7l+ 	"T(5"T(6	8   1B1:>tTzz%dAA"FG"$/>rn   c                     t               }|j                  \  }}}|d   dz
  |d   dz   g} ||      }t        j                  t        j                  |            rJ y )Nr   r0   r9   )ra   rb   rM   allisnan)rU   rX   r4   r   r6   rk   yys          rY   test_default_extrapzTestBSpline.test_default_extrap  sY    !%%1adQh"	"rU66"((2,''''rn   c                 R   t         j                  j                  d      }t        j                  |j                  d            }|j                  d      }t	        |j
                  ||f      \  }}d}t        |||d      }|j                  d   |dz   z
  }|d	   |d   z
  }|j                  ||   |z
  ||   |z   d
      }	||   |	||   z
  ||   ||   z
  z  z   }
t	        t        |
||f      \  }}}t        |      |j                  k(  rdnd}t         ||	      |j                  t        ||||f            |       |j                  g d      }	||   |	||   z
  ||   ||   z
  z  z   }
t         ||	d       ||
d      t        |      |j                  k(  rd       y d       y )Nr      r>   r=   periodicr   r   r0   r9   rw   -q=gH׊>rz   )r9   r         ?r0   Try   gƠ>)rM   rT   r   r   r|   rS   r   r   ri   r	   r   rR   r   r   )rU   rV   r   r4   r5   r6   rX   rW   r   rk   xyxy_npr   r   r^   s                  rY   test_periodic_extrapz TestBSpline.test_periodic_extrap  s   ii##D)GGCJJqM"JJqM2::1v&1Aq!4GGAJ!a% rUQqT\[[1AaD2Ir2qTR!A$Y1Q4!A$;// 1B1:>tT(,

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

 ZZ(qTR!A$Y1Q4!A$;//bj)bd#*2."**<	
 CG	
rn   c                     t               }|j                  \  }}}t        j                  |||f      }t	        j
                  ||   ||    d      }t         ||       ||      dd       y )Nr   ry   r]   )ra   rb   r   from_splinerM   ri   r   )rU   rX   r4   r5   r6   pprk   s          rY   
test_ppolyzTestBSpline.test_ppoly'  sa    !%%1a1ay)[[1q!uc*"r"vE>rn   c                 j   t               }|j                  \  }}}t        j                  |d   |d   d      }t        j                  ||f   }t        d|dz         D ])  }t        ||||f|      }t        | |||      d       + t         |||dz         t        j                  |      d       y )	Nr   r9   rw   r0   dernury   rz   )	ra   rb   rM   ri   r   ranger   r   
zeros_like)rU   rX   r4   r5   r6   rk   r   yds           rY   test_derivative_rndmz TestBSpline.test_derivative_rndm/  s    !%%1a[[1qub)UU2q5\AaC= 	;CrAq!9#.BB"E:	;
 	"1r}}R'8uErn   c                    d}g d}t         j                  j                  d      }t         j                  dd|j                  d      ddf   }t	        |||      }t        j
                  g d      }t         |||dk7     dz
         |||dk7     dz                t        j                   |d	       |d
            rJ t        j
                  ddg      }t         ||dz
  d       ||dz   d             t        j
                  ddg      }t        j                   ||dz
  d       ||dz   d            rJ t        j                   ||dz
  d       ||dz   d            rJ y )Nr;   )r9   r9   r   r0   r0   r=   r>   r   r   r   r   r   r   r   r   )r0   r=   r>   r   r   r   g2H@gη   @r=   r>   r0   r   )rM   rT   r   r   r   rS   r   allclose)	rU   r6   r4   r   r5   rX   r}   x0x1s	            rY   test_derivative_jumpsz!TestBSpline.test_derivative_jumps<  sP    2ii##D)EE!Q

1q!+,Aq! JJ|$!AF)e+,!AF)e+,	.;;q{AgJ777 ZZA"u*+"u*+	-ZZA;;qe2Ab5jQ4GHHH ;;qUq11QY13EFFFFrn   cupyzCuPy doesn't raisec           	          t        t        t        j                  fi t	        |j                  dg             t        t        t        j                  fi t	        |j                  g              y )Nr   r4   )rI   rK   r   basis_elementrL   rS   rU   rV   s     rY   $test_basis_element_invalid_too_shortz0TestBSpline.test_basis_element_invalid_too_shortV  sJ     	j'"7"7S4"**aS/;RSj'"7"7R4"**R.;QRrn   c           	         |j                  ddd      }t        j                  |j                  g d            }t	        t
        ||j                  |j                  f      \  }}}|j                  t        ||||j                  f            }t         ||      |d       t        |      |j                  k(  rdnd}t         ||      |j                  t        |      |j                  	      |       t        j                  |j                  g d
            }|j                  ddd|j                  	      }t         ||      |j                  |dk  ||z  d|z
  dz        d       y )Nr9   r>   r   r   r0   r;   r=   r   ry   rz   r   rG   r   r0   r0   r;   r   r;   rh   r0   r@   )ri   r   r   rS   r|   r	   r4   r5   r   r6   r   r   rR   B_0123rj   )	rU   rV   rk   rX   r   r   r   r   r^   s	            rY   test_basis_element_quadraticz(TestBSpline.test_basis_element_quadratic\  s   [[Q#!!BJJ|$<= 1BQSS>BtTzz%dACC/@"AB"|%8&r*bjj8Ud"rzz&*BJJzGdS!!BJJ|$<=[[Ar[4"aBB
3%	Arn   c           	          t               }|j                  \  }}}t        j                  ||   || dz
     d      }t	         ||      t        ||||      d       y )Nr0   r   ry   rz   )ra   rb   rM   ri   r   _sum_basis_elementsr   s         rY   test_basis_element_rndmz#TestBSpline.test_basis_element_rndml  sU    !%%1a[[1q!Aw+"22q!Q?eLrn   c                    t               }|j                  \  }}}|dz  }t        |||      }t        ||j                  j                  |      }t        ||j                  j
                  |      }t        j                  ||   || dz
     d      }t         ||      j                   ||      d       t         ||      j
                   ||      d       y )Ny      ?      @r0   r   ry   rz   )	ra   rb   r   r5   realimagrM   ri   r   )	rU   rX   r4   r5   r6   ccb_reb_imrk   s	            rY   
test_cmplxzTestBSpline.test_cmplxr  s    !%%1a(^Ar1q!##((A&q!##((A&[[1q!Aw+"

DH59"

DH59rn   c                     t        j                  |j                  g d            }|j                   ||j                              sJ y )Nr   )r   r   rS   r   rO   rp   s      rY   test_nanzTestBSpline.test_nan  s5    !!"**\":;xx"&&	"""rn   c                    t        d|      }|j                  \  }}}t        |||      }|j                  ||   || dz
     d      }t	        d|      D ].  }|j                         }t         |||       ||      dd       0 y )Nr   )r6   rV   r0   r   r   r]   )ra   rb   r   ri   r   
derivativer   )	rU   rV   rX   r4   r5   r6   b0rk   js	            rY   test_derivative_methodz"TestBSpline.test_derivative_method  s    !+%%1aQ1[[1q!Aw+q! 	FAABr1Iqu5uE	Frn   c                    t        |      }|j                  \  }}}|j                  ||   || dz
     d      }t         |j	                         j                         |       ||      dd       |j                  |||fd      }|j                  ||fd      }t        |||      }t         |j	                         j                         |       ||      dd       y )Nrx   r0   r   ry   r]   axisr;   )ra   rb   ri   r   antiderivativer  r   r   )rU   rV   rX   r4   r5   r6   rk   s          rY   test_antiderivative_methodz&TestBSpline.test_antiderivative_method  s    2&%%1a[[1q!Aw+7((*557;"E	7 HHaAYQH'HHaV!H$Aq!7((*557;"E	7rn   c                 V   t        j                  |j                  g d            }t        j                  |j                  dd      dd      sJ t        j                  |j                  dd      dd      sJ t        j                  |j                  dd      dd      sJ t        j                  |j                  dd      dd      sJ t        j                  |j                  dd      dd      sJ t        j                  |j                  dd      dd      sJ t        j                  |j                  dd      d	d      sJ t        j                  |j                  ddd
      d	d      sJ t        j                  |j                  ddd      dd      sJ t        j                  |j                  ddd      dd      sJ t        j                  |j                  ddd      t        j                  ddt        t        |j                              d      sJ y )Nr:   r   r0   r   ry   abs_tol      r9   r?   Tr   F)r   r   rS   mathisclose	integrate_implr   r|   r	   rb   rp   s      rY   test_integralzTestBSpline.test_integral  s   !!"**Y"78||AKK1-sEBBB||AKK1-xGGG||AKK1-tUCCC ||AKK1-sEBBB||AKK1-xGGG||AKK1-tUCCC ||AKKA.UCCC||AKKA4K@#uUUU||AKKA5KA3PUVVV||AKK25KA4QVWWW ||AKK25KA!LLB4Equu0MN$)+ 	+ +rn   z(CuPy periodic extrapolation seems brokenc           	         t        j                  |j                  g d            }d|_        |j	                         }|j                   |d       |d      z
  |j
                        }t        j                  |j                  dd      |      sJ t        j                  |j                  dd      d|z        sJ t        j                  |j                  dd      |      sJ t        j                  |j                  d	d
      d|z        sJ t        |j                  dd      |j                   |d       |d      z
               t        |j                  dd      |j                   |d       |d      z
   |d      z    |d      z
               t        |j                  dd      |j                   |d       |d      z
   |d      z    |d      z
               t        |j                  dd      |j                   |d       |d      z
   |d      z    |d      z
  d|z  z                t        |j                  dd      |j                   |d       |d      z
               t        |j                  dd      |j                   |d       |d      z
               t        |j                  dd      |j                   |d       |d      z
  d|z  z
               y )Nr:   r   r;   r   rG   r9   iiir         ?r=   r0   g      +@   r   ir>   )
r   r   rS   r   r  rR   r  r  r  r   )rU   rV   rX   i
period_ints        rY   test_integral_periodicz"TestBSpline.test_integral_periodic  s[    !!"**Y"78"ZZ!qt2::Z>
||AKK1-z:::||AKK1-rJ???||AKKB/<<<||AKKB/Z@@@C-

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

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

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

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

1Q4!A$;Z#?@	Brn   c                     g d}t        ||      }d|_        t        j                  |      }dD ]1  \  }}t	        |j                  ||      |j                  ||             3 y )Nr<   r   ))r   )r   r   )r     )r   r   r   r   r   r  )rU   r}   rX   pr   r   s         rY   test_integrate_ppolyz TestBSpline.test_integrate_ppoly  s`    q!$"a 5 	1FBAKKB/KKB/1	1rn   c                     t        j                  g d      }dD ]C  }|j                  dd|      }t        |t        j
                        sJ |j                  dk(  rCJ  y )Nr:   r   r   r0   r   )r   r   r  
isinstancerM   ndarrayndim)rU   rX   r   ress       rY   test_integrate_0D_alwaysz$TestBSpline.test_integrate_0D_always  sY    !!),( 	!K++a+<Cc2::...88q= =	!rn   c                      G d dt               }|j                  g d      }|j                  |k(  sJ |j                         j                  |k(  sJ |j	                         j                  |k(  sJ y )Nc                       e Zd Zy)'TestBSpline.test_subclassing.<locals>.BN)__name__
__module____qualname__ rn   rY   Br'    s    rn   r,  )r   r0   r;   r;   )r   r   	__class__r  r  )rU   r,  rX   s      rY   test_subclassingzTestBSpline.test_subclassing  sg    	 	 OOL){{a||~''1,,,!++q000rn   r  r  r>   c                    d\  }}|j                  dd||z   dz         }g d}|dz  }|j                  ||       t        |      }t        j                  j                  d      }|j                  |j	                  |            }	t        ||	||      }
|
j                  j                  ||   f|d | z   ||dz   d  z   k(  sJ |j	                  d	      } |
|      j                  |d | |j                  z   ||dz   d  z   k(  sJ |	j                   dz
  |	j                  fD ]$  }t        t        t        fi t        ||	||
       & t        ||	||      j                         t        ||	||      j                  d      t        ||	||      j                         t        ||	||      j                  d      fD ]  }|j                   |
j                   k(  rJ  y )Nr   r   r0   r   r   r   r>   r   r   r  r   )r4   r5   r6   r  r;   )ri   r   tuplerM   rT   r   rS   r   r5   r   r"  rI   r'   rL   r  r  r  )rU   r  rV   rW   r6   r4   shpos_axisr   r5   rX   axb1s                rY   	test_axiszTestBSpline.test_axis  s   1KK1a!eai( !8
		(A2Yii##D)JJszzrz*+Aq!$'ssyyR\Ob(m;b!oMMMMZZ	"u{{b(mbhh6HQJKHHHH FF7Q;' 	:B)W : 1QR8:	:
 1a.99;1a.99!<1a.==?1a.==a@B 	%B 77aff$$$		%rn   c           	      (   d}|j                  g d      }|j                  g dg dg      }t        |||d      }t        ||dd d f   |      }t        ||dd d f   |      }t         |d	      |j                   |d	       |d	      g             y )
Nr;   )r   r0   r;   r=   r>   r   r   )r9   r;   r   r9   )r;   r   r0   r9   r  r   r0   rD   )rS   r   r   r   )rU   rV   r6   r4   r5   splspl0spl1s           rY   test_neg_axiszTestBSpline.test_neg_axis  s    JJ,-JJ67aAB'q!AqD'1%q!AqD'1%C"((DItCy+A"BCrn   c                     d }d}d}dD ]  } ||||        t        ddd      D ]  } |||d        d}t        dd	      D ]  } |||d
        y)a7  
        Splines with different boundary conditions are built on different
        types of vectors of knots. As far as design matrix depends only on
        vector of knots, `k` and `x` it is useful to make tests for different
        boundary conditions (and as following different vectors of knots).
        c                 B   t         j                  j                  d      }t        j                  |j	                  |       dz  dz
        }|j	                  |       dz  dz
  }|dk(  r|d   |d<   t        ||||      }t        j                  t        |j                        |z
  dz
        } t        |j                  ||      |      }t        j                  ||j                  |      j                         }	t        |	|j                  z  |d	
       t        ||	d	
       y)zY
            To avoid repetition of code the following function is provided.
            r   (   r   r   r9   r   r6   bc_typer0   ry   rz   N)rM   rT   r   r   random_sampler   eyelenr4   r   design_matrixtoarrayr   r5   )
rW   r6   rA  r   r}   r   r   r5   des_matr_defdes_matr_csrs
             rY   run_design_matrix_testszHTestBSpline.test_design_matrix_bc_types.<locals>.run_design_matrix_tests  s     ))''-C))!,r1B67A!!!$r)B.A*$u!%aaADs466{Q*+A074661a03L"00151244;GI  L466115AL,UCrn   rF   r=   clampednaturalr   r;   
not-a-knotr   r   r   N)r   )rU   rI  rW   r6   bcs        rY   test_design_matrix_bc_typesz'TestBSpline.test_design_matrix_bc_types  s|    	D* ( 	.B#Aq"-	. q!Q 	8A#Aq,7	8 q! 	6A#Aq*5	6rn   r   )FTr   degreer   c           	         t         j                  j                  d      }|j                  d|dz   z        }t        j                  |      t        j
                  |      }}|}t         j                  t        j                  |dz
  |dz
  |      t        j                  ||d|dz   z        t        j                  |dz   |dz   |      f   }t        j                  t        |      |z
  dz
        }	t        ||	||      }
t         |
|      t        j                  ||||      j                                t        j                  |dz
  |dz
  |dz   |dz   g      }|s;t        j                   t"              5  t        j                  ||||       ddd       yt         |
|      t        j                  ||||      j                                y# 1 sw Y   yxY w)z;Test that design_matrix(x) is equivalent to BSpline(..)(x).r   rh   r0   r;   r  N)rM   rT   r   rB  aminamaxr   ri   rC  rD  r   r   rE  rF  arrayrc   r   rK   )rU   r   rP  r   r}   xminxmaxr6   r4   r5   bsplines              rY   'test_design_matrix_same_as_BSpline_callz3TestBSpline.test_design_matrix_same_as_BSpline_call;  s    ii##D)bFQJ/0WWQZdEE"++dQhq&9++dD!vz*:;++dQhq&9: ; FF3q6A:>"!Q;/AJ--aA{CKKM	

 HHdRi4#:tbyABz* <%%aA{;< < 
%%aA{;CCE< <s   2GGc                    t         j                  j                  d      }d}d}t        j                  |j	                  |      dz  dz
        }|j	                  |      dz  dz
  }t        |||      }t        dd      D ]V  }|d | }|d | }	t        j                  ||j                  |      j                         }
t        |
|j                  z  |	d	
       X y )Nr   rh   r=   r?  r   r6   r0   r>   ry   rz   )rM   rT   r   r   rB  r   r   r   rE  r4   rF  r   r5   )rU   r   rW   r6   r}   r   r   r  xcycrH  s              rY   test_design_matrix_x_shapesz'TestBSpline.test_design_matrix_x_shapesW  s    ii##D)GGC%%a(2-23a 2%*!!Q!,q! 	CA2AB2AB"00151244;GI  L46612EB	Crn   c                 x    g d}t        j                  d|d      j                         }t        |g dgd       y )N)r2   r2   r2   r@   rA   rB   rB   rB   r@   r=   )g      ?gmਪ?gK}\UU?r?   ry   rz   )r   rE  rF  r   )rU   r4   des_matrs      rY   test_design_matrix_t_shapesz'TestBSpline.test_design_matrix_t_shapesh  s7    ,((Q2::<;<"	$rn   c                    t         j                  j                  d      }d}d}t        j                  |j	                  |      dz  dz
        }|j	                  |      dz  dz
  }t        |||      }t        t              5  t        j                  ||j                  d d d   |       d d d        d}g d	}g d
}t        t              5  t        j                  |||       d d d        y # 1 sw Y   CxY w# 1 sw Y   y xY w)Nr   rh   r=   r?  r   rZ  r9   r;   )r?   r2   r@   rA   rB         @r   )rM   rT   r   r   rB  r   rI   rK   r   rE  r4   )rU   r   rW   r6   r}   r   r   r4   s           rY   test_design_matrix_assertsz&TestBSpline.test_design_matrix_assertsp  s    ii##D)GGC%%a(2-23a 2%*!!Q!, :& 	6!!!TVVDbD\15	6$:& 	+!!!Q*	+ 	+	6 	6	+ 	+s   (C,C8,C58DrA  )rL  rK  r   rM  c                    t         j                  j                  d      }t        j                  |j                  d            }|j                  d      }|dk(  r|d   |d<   t	        |||      }t        j                  ||      }t        j                  ddd      }t         ||       ||      d	       t        |||      }t        |j                  |j                  d	       y )
Nr   r   r   r   r9   rA  r0   r\   rz   )rM   rT   r   r   r   r   from_power_basisri   r   r   r5   )	rU   rA  r   r}   r   cbr   rk   bspl_news	            rY   test_from_power_basisz!TestBSpline.test_from_power_basis  s     ii##D)GGCJJrN#JJrNj aDAbEAw/''G<[[Ar"2Ru5%aG<

7rn   c                    t         j                  j                  d      }t        j                  |j                  d            }|j                  d      |j                  d      dz  z   }|dk(  r|d   |d<   t	        |||      }t        j                  ||      }t        ||j                  |      }t        ||j                  |      }t        |j                  |j                  d|j                  z  z   d	       y )
Nr   r   r1   r   r   r9   re  r\   rz   )rM   rT   r   r   r   r   rf  r   r   r   r   r5   )	rU   rA  r   r}   r   rg  r   bspl_new_realbspl_new_imags	            rY   test_from_power_basis_complexz)TestBSpline.test_from_power_basis_complex  s     ii##D)GGCJJrN#JJrNSZZ^b00j aDAbEAw/''G<*1affgF*1affgF"}2F FUSrn   c                     t        j                  g d      }t        j                  g d      }t        j                  t	        ||d      d      }t        |j                  g dd       y)	a}  
        For x = [0, 1, 2, 3, 4] and y = [1, 1, 1, 1, 1]
        the coefficients of Cubic Spline in the power basis:

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

        It could be shown explicitly that coefficients of the interpolating
        function in B-spline basis are c = [1, 1, 1, 1, 1, 1, 1]
        r<   )r0   r0   r0   r0   r0   rL  re  )r2   r0   r0   r0   r0   r0   r0   r\   rz   N)rM   rT  r   rf  r   r   r5   )rU   r}   r   r   s       rY   test_from_power_basis_exmpz&TestBSpline.test_from_power_basis_exmp  sO     HH_%HH_%''Aq)(L09; 7eDrn   c                 d   t        j                  ddg      }t        j                  dg      }|j                  d       |j                  d       t        j                  ddd      }|j                  d       t	        ||d      }t         ||      t        j                  |      dz         y )Nr   r0   rA   Fwriterh   r3   )rM   rT  setflagsri   r   r   rt   )rU   r4   r5   rk   rX   s        rY   test_read_onlyzTestBSpline.test_read_only  s    HHaVHHcUO	


	


[[Ar"
% a1""r||B/#56rn   c                 B    t              }fd}t        d||       y )Nrx   c                 p    |j                   \  }} }j                  ||   || dz
     d      } ||       y )Nr0   i'  )rb   ri   )r   rX   r4   r6   rk   rV   s        rY   	worker_fnz/TestBSpline.test_concurrency.<locals>.worker_fn  s9    eeGAq!QqT1aRT7E2BbErn   rh   )ra   r(   )rU   rV   rX   rw  s    `  rY   test_concurrencyzTestBSpline.test_concurrency  s     2&	
 	 Iq1rn   cygwinz'threading.get_native_id not implemented)r   r   c           	      n   t               }t        j                  ddd      } ||      }t        j                         }t        j
                  t        |j                  d| d            d|j                  j                  |j                  j                        }|j                  |d d  t        j
                  t        |j                  d| d            d|j                  j                  |j                  j                        }|j                  |d d  ||_        ||_        t         ||      |       y )	Nr   r0   rh   r4   z.datzw+)moderH   r   r5   )ra   rM   ri   	threadingget_native_idmemmapstrjoinr4   rH   r   r5   r   )rU   tmpdirrX   rk   rl   tidt_mmc_mms           rY   test_memmapzTestBSpline.test_memmap  s      ![[Ar"R5%%'yyV[[1SE78t ssyy		;##QyyV[[1SE78t ssyy		;##Q"x(rn   N);r(  r)  r*  rZ   re   rm   rq   ru   r   r   skip_xp_backendsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  xfail_xp_backendsr  r  r$  r.  rc   markparametrizer   r6  r<  rO  rX  r]  r`  rc  ri  rm  ro  rt  rx  xfailsysplatformrd   r  r+  rn   rY   r.   r.   2   sM   !F
)*
>D 
$ l+OPk*KLgk2/ 3 M Q/A
;1	.E&W? (
6?FG4 f%9:S ;S
A M:#
F7+, v&PQB RB4	1!1 [[VU2q\2% 3%:D(6T [[],EF[[XuQx0 1 G4C"$+$ [[Y )C D8D8 [[Y )C DTDTE&7	2 [[ 8  
)
)rn   r.   insert_knotc                   >   e Zd Zej                  j                  dg d      d        Zej                  j                  dg d      d        Zd Zej                  j                  dg d	      d
        Z	ej                  j                  dddg      d        Z
d Zd Zy)
TestInsertxval)r?   r2   rD   r>         @      @c           	         |j                  d|j                        }|j                  |      dz  }t        ||d      }t	        |j
                        t	        |j                        |j                  f}t        t        ||       }|j                  |      }t        |j
                  |j                  |j
                        d       t        |j                  |j                  |j                  d |j                   dz
         d       ||d   k7  r|n|d d }	|j                  |	d	|dd  |d d z   z  f      }	t         ||	       ||	      d       |j                  |      dz  }
t        ||
d      }t        ||j                  ||
fd
      d      }|j                  |      }t        |j
                  |j
                  d       t        |j                  |j                  |j                  |      j                  |j                  |      j                  fd
      d       ||d   k7  r|n|d d }	|j                  |	d	|dd  |d d z   z  f      }	t         ||	       ||	      d       y )Nr   rG   r=   rZ  r\   rz   r0   r9   r   r  )rQ   rR   sinr   r	   r4   r5   r6   r   r   r  r   rS   concatcosr   )rU   r  rV   r}   r   r9  rb   spl_1fspl_1rk   y1spl_y1spl_yyspl_yy1s                 rY   test_insertzTestInsert.test_insert  s    IIarzzI*FF1IqL A+ '):355)A355I&s+,%FHH!5EBFHHYsuufQh,?!@uM !B%-QQsVYYC123B012Br7 VVAY\#ArQ/#ArxxB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<rn   zxval, m))r?   r;   )r2   r=   )r  r   )r>   r;   )r  r;   c           	         |j                  d|j                        }|j                  |      dz  }t        ||d      }t	        t        |t        |j                        t        |j                        |j                  f|       }|j                  ||      }t        |j                  |j                  |j                        d       t        |j                  |j                  |j                  d |j                   dz
         d       ||d	   k7  r|n|d d	 }	|j                  |	d
|dd  |d d	 z   z  f      }	t         ||	       ||	      d       y )Nr   rG   r=   rZ  mr\   rz   r0   r9   r   )rQ   rR   r  r   r   r   r	   r4   r5   r6   r  r   rS   r  )
rU   r  r  rV   r}   r   r9  r  r  rk   s
             rY   test_insert_multizTestInsert.test_insert_multi  s"    IIarzzI*FF1IqL A+(/1B3551I355QUV

 a(FHH!5EBFHHYsuufQh,?!@uM!B%-QQsVYYC123B012Br7rn   c                 6   t         j                  j                  d      }d\  }}|j                  t        j                  |j                  ||z   dz                     }|j                  |j                  |ddf            }t        |||      }|j                  |j                  ||dz      || dz
                 }|j                  |      }	|j                  |j                  ||dz      || dz
     d	            }
t         ||
       |	|
      d
       y )N90  rE   r0   r   r=   r;   )lowhighr   r  r  r   r\   rz   )	rM   rT   default_rngrS   r   uniformr   r  r   )rU   rV   r   rW   r6   r4   r5   r9  xvr  rk   s              rY   test_insert_randomzTestInsert.test_insert_random(  s    ii##E*1JJrwws{{!A{678JJs{{Aq	{23aAZZ!A#Qr!tW=>#ZZ!A#Qr!tW2FGBr7rn   r  )	r   皙?r@   rB         @      @      @gffffff@r  c                    |j                  d|j                        }|j                  |      dz  }t        ||d      \  }}}t	        |j
                  ||f      \  }}t        |||d      }|j                  |      }	t        ||j                  d      \  }
}}t        |	j                  |j                  |
      d	
       t        |	j                  d | dz
   |j                  |d | dz
         d	
       t        j                  j                  d      j!                  ddd      }|j                  |      }t         |	|      |j                  t#        ||
||f            d	
       y )Nr   rG   r=   rZ  r   r   Tperr\   rz   r0   r   r   r   )   r  )rQ   rR   r  r   r|   rS   r   r  r   rb   r   r4   r5   rM   rT   r  r  r   )rU   r  rV   r}   r   r4   r5   r6   r9  r  tfcfr   rk   s                 rY   test_insert_periodiczTestInsert.test_insert_periodic6  s0    IIarzzI*FF1IqLA#1a2::1v&1aA:6#2swwD1	BBe<!A

2er!t9(=EJ		%%d+333KZZb	2::eEBA;.G#HuUrn   r   Nr   c                    |j                  d|j                        dz  t        j                  z  }|j	                  |      |j                  |      }}t        ||d|z  z   d      }||_        t        ||d      }||_        t        ||d      }||_        d}	|j                  |	      }
|j                  |	      }|j                  |	      }t        |
j                  |j                  d	       t        |
j                  |j                  d	       t        |
j                  |j                  d|j                  z  z   d	       y )
Nr   rG   r;   r1   r=   rZ        @r\   rz   )rQ   rR   rM   pir  r  r   r   r  r   r4   r5   )rU   r   rV   r}   y_rey_imr9  spl_respl_imr  r  spl_1respl_1ims                rY   test_complexzTestInsert.test_complexJ  s   IIarzzI*Q.6VVAYq	d D2d7Na8%#Atq1(#Atq1(#$$R($$R(77R		\!9Frn   c                    d}d}t        j                  dg|dz   z  g dz   dg|dz   z  z         }t        j                  t        |      |z
  dz
        }t	        |||d      }t        t              5  t        ||||fd	
       d d d        t        t              5  |j                  |       d d d        y # 1 sw Y   3xY w# 1 sw Y   y xY w)Nr  r=   r   r0   r;   r=   r>   r   r   r   r   Tr  )	rM   rT  onesrD  r   rI   rK   r   r  )rU   r  r6   r4   r5   r9  s         rY   +test_insert_periodic_too_few_internal_knotsz6TestInsert.test_insert_periodic_too_few_internal_knotsa  s     HHaS!A#Y-QqS	9:GGCFQJN#aA:6:& 	,21ayd+	, :& 	 OOB	  	 	, 	,	  	 s   2B6C6B?Cc                    d}t        j                  dg|dz   z  g dz   dg|dz   z  z         }t        j                  t        |      |z
  dz
        }t	        |||      }t        t              5  |j                  d       d d d        t        t              5  |j                  d       d d d        t        t              5  |j                  dd       d d d        y # 1 sw Y   ^xY w# 1 sw Y   AxY w# 1 sw Y   y xY w)	Nr=   r   r0   r  r   r9   r   r  )rM   rT  r  rD  r   rI   rK   r  )rU   r6   r4   r5   r9  s        rY   test_insert_no_extrapz TestInsert.test_insert_no_extrapu  s    HHaS!A#Y-QqS	9:GGCFQJN#aA:& 	 OOB	  :& 	OOA	 :& 	$OOAO#	$ 	$	  	 	 		$ 	$s$   .CC) C5C&)C25C>)r(  r)  r*  rc   r  r  r  r  r  r  r  r  r  r+  rn   rY   r  r    s     [[V%AB!= C!=H [[C88&8 [[T $8 VV" [[]T:,>?G @G, ($rn   r  c            
          dd} dD ]S  }t        |      }t        t        |            D ].  \  }} | ||       t        d|dz         D ]  } | |||dd        0 U y )Nc           
         | j                   \  }}}t        j                  |      }t        j                  |d   dz
  d|dd  |d d z   z  |d   dz   f   }t	        t        ||||f|       | ||      ||d| d| j                          y )	Nr   r  r   r0   r9   zder = z  k = )r^   r_   err_msg)rb   rM   uniquer   r   r   r6   )	rX   r  r   r^   r_   r4   r5   r6   r}   s	            rY   check_splevz,test_knots_multiplicity.<locals>.check_splev  s    %%1aIIaLEE!A$s(C122A/2s:;a!QC0!As)se6!##.G	Irn   r0   r;   r=   r>   r   rZ  r0   r   )r   ry   ry   )ra   	enumerate_make_multiplesr   )r  r6   rX   r  r5  r   s         rY   test_knots_multiplicityr    ss    I  6!$q12 	6EArAQ!} 6B3u56	66rn   c                 b   |dk(  r||   | cxk  r||dz      k  rdS  dS |||z      ||   k(  rd}n)| ||   z
  |||z      ||   z
  z  t        | |dz
  ||      z  }|||z   dz      ||dz      k(  rd}||z   S |||z   dz      | z
  |||z   dz      ||dz      z
  z  t        | |dz
  |dz   |      z  }||z   S )zw
    Naive way to compute B-spline basis functions. Useful only for testing!
    computes B(x; t[i],..., t[i+k+1])
    r   r0   r2   r?   _naive_Br}   r6   r  r4   c1c2s         rY   r  r    s   
 	Avda(!AaC&(s1(c11v1~!A$h1Q3!A$'(1ac1a*@@1Qx1QqS6 G !AhlQqs1uX!A#./(1ac1Q32JJGrn   c                         k(  rn|j                         dz
      cxk  rdz      k  sJ  J k\  rj                  d   z
  k  sJ t         fdt        ddz         D              S )z=
    Naive B-spline evaluation. Useful only for testing!
    r0   r   c              3   R   K   | ]  }|z
     t        |z
        z     y wNr  ).0r  r5   r  r6   r4   r}   s     rY   	<genexpr>z_naive_eval.<locals>.<genexpr>  s-     F1q1vAqsA..Fs   $')searchsortedr   sumr   )r}   r4   r5   r6   rV   r  s   ```` @rY   r   r     s     	AaDyOOAq!A%Q41!A#6a!''!*q.(((Fa1FFFrn   c                     j                   d   dz   z
  }|dz   k\  sJ j                   d   |k\  sJ     cxk  r	|   k  sJ  J t         fdt        |      D              S )z'Naive B-spline evaluation, another way.r   r0   c              3   F   K   | ]  }|   t        |      z    y wr  r  r  r  r5   r6   r4   r}   s     rY   r  z _naive_eval_2.<locals>.<genexpr>  s%     =qqthq!Q**=   !)r   r  r   )r}   r4   r5   r6   rV   rW   s   ````  rY   r   r     sr    	
acA!8O8771:??Q41!=E!H===rn   c                    t        |      |dz   z
  }||dz   k\  sJ |j                  d   |k\  sJ d}t        |      D ]F  } t        j                  ||||z   dz    d      |       }|||   t        j                  |      z  z  }H |S )Nr0   r   r?   r;   Fr   )rD  r   r   r   r   rM   
nan_to_num)r}   r4   r5   r6   rW   sr  rX   s           rY   r   r     s    A!A#A!8O8771:??
A1X %@G!!!Aac!e*%@C	QqTBMM!$$$% Hrn   c                     t        j                  t        |             } t        j                  | | dk  | dkD  z  | dk\  | dk  z  | dk\  | dk  z  gd d d g      }|j	                  |      S )z+ A linear B-spline function B(x | 0, 1, 2).r   r;   r0   c                      yNr?   r+  r}   s    rY   <lambda>zB_012.<locals>.<lambda>      rn   c                     | S r  r+  r  s    rY   r  zB_012.<locals>.<lambda>  s    A rn   c                     d| z
  S Nr@   r+  r  s    rY   r  zB_012.<locals>.<lambda>  s
    A rn   )rM   
atleast_1dr	   	piecewiserS   )r}   rV   results      rY   r{   r{     sx    
'*+A\\!q1uQ/!VA.!VQ/1 )+~FHF ::frn   c                     t        j                  t        |             } | dk  | dkD  | dk  z  | dkD  g}|dk(  r	d d d g}n|dk(  r	d d d	 g}nt        d
|       t        j                  | ||      }|S )z0A quadratic B-spline function B(x | 0, 1, 2, 3).r0   r;   r   c                     | | z  dz  S r  r+  r  s    rY   r  zB_0123.<locals>.<lambda>  s    1Q3r6 rn   c                     d| dz
  dz  z
  S )Ng      ?r  r;   r+  r  s    rY   r  zB_0123.<locals>.<lambda>  s    41T6A+- rn   c                     d| z
  dz  dz  S )NrA   r;   r+  r  s    rY   r  zB_0123.<locals>.<lambda>  s    BqD19q= rn   c                      yNr2   r+  r  s    rY   r  zB_0123.<locals>.<lambda>  r  rn   c                      y)Ng       r+  r  s    rY   r  zB_0123.<locals>.<lambda>  r  rn   c                      yr  r+  r  s    rY   r  zB_0123.<locals>.<lambda>  r  rn   znever be here: der=)rM   r  r	   rK   r  )r}   r   condsfuncspiecess        rY   r   r     s    
'*+AUQUq1u%q1u-E
ax!-(* 
 .se455\\!UE*FMrn   #   r=   c                 (   t         j                  j                  d      }t        j                  |j                  | |z   dz               }|j                  |       }|j	                  |      |j	                  |      }}t        j                  |||      S )N{   r0   )rM   rT   r   r   rS   r   construct_fast)rW   r6   rV   r   r4   r5   s         rY   ra   ra     sp    
))


$C


1Q3q5!"A

1A::a="**Q-qA!!!Q**rn   c              #     K   | j                   | j                  }}| j                  j                         }|d   |dd |d   |d<   t	        |||       | j                  j                         }|d   |d|dz    t	        |||       | j                  j                         }|d   || dz
  d t	        |||       yw)	zIncrease knot multiplicity.         r   r   Nr0   r9   )r5   r6   r4   copyr   )rX   r5   r6   t1s       rY   r  r    s     33qA	
B2Br"IVBrF
"a
	
B!uBt!H
"a
	
B2Br!tuI
"a
s   B<B>c                   N    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zy)TestInteropc                 l   t        j                  ddt         j                  z  d      }t        j                  |      }t	        ||      }|j
                  |j                  |j                  f| _        |||c| _	        | _
        | _        t        j                  ddt         j                  z  d      | _        t         j                  |j                  |j                  |j                  f   }t        j                  ||f      | _        t!        |j
                  | j                  |j                        | _        y )Nr   rB   r  r  )rM   ri   r  r  r   r4   r5   r6   rb   rk   r   rX   xnewc_dstackr  r   b2)rU   rk   r   rX   r  s        rY   setup_methodzTestInterop.setup_method	  s    [[BruuHb)VVBZr2&CCacc?#%r1 $&KK2bee8R0	UU133QSS=!))RH%!##tww,rn   c                    | j                   | j                  | j                  }}}t        t	        ||       ||      dd       t        t	        ||j
                         ||      dd       t        t        j                  |D cg c]  }t	        ||       c}       ||      dd       t        t        d      5  t	        ||       d d d        t        t        d|j                  j                              dz   }|j                  j                  |      }|j                  ||j                   f}t        t        j                  t	        ||             ||      j                  |      dd       y c c}w # 1 sw Y   xY w)Nr\   r]   zCalling splev.. with BSplinematchr0   r   )r  rX   r
  r   r   rb   rM   rS   rI   rK   r1  r   r5   r"  	transposer4   r6   )rU   r  rX   r
  r}   r2  r   rb   s           rY   
test_splevzTestInterop.test_splev  s.   iia 	dA$e%	9dAEE*$e%	9

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

5s#344**2.U	H $?
	 	s   E5>E::Fc                    | j                   | j                  }}t        ||      }t        j                  ||      \  }}}t	        |d   |d       t	        |d   |d       |d   |k(  sJ t        ||d      \  }}}}t	        |d   |d       t	        |d   |d       |d   |k(  sJ t        ||      }	t	        ||	d       t        | }
t	        | |
|      d       y )Nr   r\   rz   r0   r;   T)full_output)rk   r   r   r  r   r   r   )rU   r}   r   rb   r4   r5   r6   tck_fr   r   rX   s              rY   test_splrepzTestInterop.test_splrep1  s    ww1Ql,,q!$1aA.A.1v{{  1$7q!Qa!%0a!%0Qx1}} 1c]2E* SM1Q4e,rn   c                 &   | j                   | j                  }}t        j                  ||f   }t	        t
              5  t        ||       d d d        t	        t
              5  t        j                  ||       d d d        t	        t        d      5  t        |d d |d d        d d d        t	        t        d      5  t        j                  |d d |d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xxY w# 1 sw Y   XxY w# 1 sw Y   y xY w)Nm > k must holdr  r=   )	rk   r   rM   r  rI   rK   r   r  rJ   )rU   r}   r   y2s       rY   test_splrep_errorszTestInterop.test_splrep_errorsI  s     ww1UU1a4[:& 	1bM	:& 	 LLB	  9,=> 	!1Ra5!BQ% 	!9,=> 	'LL2A"1&	' 	'	 		  	 	! 	!	' 	's/   C#!C/C;=D#C,/C8;DDc                    t        j                  dt         j                        j                  d      }t	        |      \  }}t        j                  |      \  }}t        ||d       t        t        j                  t        ||            |d       t        t        j                  t        ||            |d       t	        |dd      \  \  }}}}}t        ||d       t        t        j                  t        ||            |d       y )	Nr  rG   r=   r   r\   rz   r   T)r  r  )	rM   rQ   rR   r   r   r  r   rS   r   )	rU   r}   rX   urb   u1b_fu_fr   s	            rY   test_splprepzTestInterop.test_splprepY  s    IIb

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

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

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

5c?3QUCrn   c                    t        j                  d      j                  d      }t        t        d      5  t        |       d d d        t        t        d      5  t        j
                  |       d d d        t        j                  ddd      }t        t        d	      5  t        |g       d d d        t        t        d	      5  t        j
                  |g       d d d        g d
}t        t        d      5  t        |g       d d d        t        t        d      5  t        j
                  |g       d d d        g d}g d}t        t        d      5  t        |gd |g  d d d        y # 1 sw Y   0xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   vxY w# 1 sw Y   y xY w)N<   r   ztoo many values to unpackr  r   r?  r=   )numr  ) >Ir$   >Kr%  zError on input data)r0   r=   r;   r>   )r   g333333?g?r0   )	rM   rQ   r   rI   rK   r   r  ri   rJ   )rU   r}   r  s      rY   test_splprep_errorszTestInterop.test_splprep_errorsh  sy   IIe$$Y/:-HI 	AJ	:-HI 	MM!	 KK21%9,=> 	QCL	9,=> 	MM1#	
 E:-BC 	QCL	:-BC 	MM1#	 :-BC 	%qc4^$	% 	%/	 		 	
	 		 		 		 		% 	%sS   E0E="F
F<F""F.F:0E:=F
FF"F+.F7:Gc                    | j                   | j                  }}t        j                  g d      t        j                  z  }t        t        |      |dd       t        t        |j                  |j                  |j                  f      |dd       t        t        d      5  t        |d       d d d        |j                  j                  dd	d
      }t        j                  t        |j                  ||j                  fd            }|j                  dk(  sJ t        ||z
  t        j                  |      d       y # 1 sw Y   xY w)N)r   r  rD   r  r   r]   zCalling sproot.. with BSpliner  rw   )mestr0   r;   r   )r=   r;   r>   r   rz   )rX   r
  rM   rT  r  r   r   r4   r5   r6   rI   rK   r  rS   r   r   )rU   rX   r
  rootsc2rrrs         rY   test_sprootzTestInterop.test_sproot  s    2-.ruu4q	5t$?QSS!##/TM :-LM 	 2B	  ddnnQ1%ZZc2440r:;xx9$$$U
BMM"$5EB	  	 s   #EEc           	      J   | j                   | j                  }}t        t        dd|      t        dd|j                        dd       t        t        dd|      |j                  dd      dd       t        t        d      5  t        dd|       d d d        |j                  j                  ddd      }t        j                  t        dd|j                  ||j                  f            }|j                  d	k(  sJ t        |t        dd|      dd
       y # 1 sw Y   xY w)Nr   r0   ry   F)r^   check_0dzCalling splint.. with BSpliner  r;   )r=   r;   )r^   check_shape)rX   r
  r   r   rb   r  rI   rK   r5   r  rM   rS   r4   r6   r   )rU   rX   r
  r*  integrs        rY   test_splintzTestInterop.test_splint  s    2q!Qq!QUU+%%	Iq!QAq)	G :-LM 	1a	 ddnnQ1%F1a"$$RTT):;<||v%%%q!Qe	H	 	s   DD"c           	         | j                   | j                  fD ]@  }t        |j                        t        |j                        z
  }|j                  j                         }|dkD  r9t        j                  |t        j                  |f|j                  dd  z         f   }dD ]  }t        |      }t        j                  |j                  j                         ||j                  f      }t        |j                  |d   d       t        |j                  |d   d       |j                  |d   k(  sJ t        |t              sJ t        |t               rJ  C y Nr   r0   r0   r;   r=   r\   rz   r;   )rX   r
  rD  r4   r5   r  rM   r   zerosr   r   r  r6   r   r   r   r1  rU   rX   ctb_crW   bdtck_ds          rY   test_splderzTestInterop.test_splder  s   &&$''" 	0AQSSCH$B##((*CAveeC2%#))AB-*?!@@A 0AYacchhj#qss%;<eAhU;eAhU;ttuQx'''!"g...!%///0	0rn   c           	         | j                   | j                  fD ]@  }t        |j                        t        |j                        z
  }|j                  j                         }|dkD  r9t        j                  |t        j                  |f|j                  dd  z         f   }dD ]  }t        |      }t        j                  |j                  j                         ||j                  f      }t        |j                  |d   d       t        |j                  |d   d       |j                  |d   k(  sJ t        |t              sJ t        |t               rJ  C y r3  )rX   r
  rD  r4   r5   r  rM   r   r5  r   r   r  r6   r   r   r   r1  r6  s          rY   test_splantiderzTestInterop.test_splantider  s   &&$''" 	0AQSSCH$B##((*CAveeC2%#))AB-*?!@@A 0]((!##((*c133)?@eAhU;eAhU;ttuQx'''!"g...!%///0	0rn   c                    | j                   | j                  | j                  }}}|j                  j                  dz  }d|j                  |   |j                  |dz      z   z  }t        ||      t        ||j                  |j                  |j                  f      }}t        t        ||      t        ||      d       t        |t              sJ t        |t              sJ t        t        |j                  j                              }|j                  j                  |dd  dz         }	t        ||j                  |	|j                  f      }
t        ||      }t        t!        j"                  t        ||
            j                  ddd       ||      d       t        |t              sJ t        |
t              sJ y )Nr;   r   r0   r\   rz   r  r   )rX   r
  rk   r4   r   r   r5   r6   r   r   r   r   r1  r   r"  r  rM   rS   )rU   rX   r
  rk   r  tnbntck_nr2  r  tck_n2bn2s               rY   r  zTestInterop.test_insert  sb   FFDGGTWWr2CCHHM!##a&133qs8#$2qM6"qssACCo#>Eb"b%(u	6"g&&&%''' 5#$TT^^BqrFTM*RTT2rtt,-Rn 	

5V#45??1aHBe	-#w'''&%(((rn   N)r(  r)  r*  r  r  r  r  r   r&  r,  r1  r;  r=  r  r+  rn   rY   r  r    s=    -H6-0' D%:C"H(0"0")rn   r  c                      e Zd Z ej                  ddej
                  z        Z ej                  e      Zd Z	d Z
d Zd Zej                  j                  dg d      d	        Zej                  j                  dg d      d
        Zd Zd Zej                  j                  dg d      d        Zd Zd Zd Zej                  j                  dg d      d        Zd Zd Zd Zd Zd Zej                  j=                  d      d        Zd Z d Z!d Z"d Z#d  Z$d! Z%d" Z&d# Z'ej                  j                  dg d$      d%        Z(d& Z)d' Z*d( Z+d) Z,d* Z-y+),
TestInterpr?   r@   c                 n    |j                  | j                        |j                  | j                        fS r  )rS   rk   r   r   s     rY   _get_xyzTestInterp._get_xy  s'    zz$''"BJJtww$777rn   c                     t        t              5  t        | j                  | j                  d       d d d        y # 1 sw Y   y xY w)NrD   rZ  )rI   rJ   r   rk   r   rU   s    rY   test_non_int_orderzTestInterp.test_non_int_order  s3    9% 	8tww37	8 	8 	8s	   #<Ac                     | j                  |      \  }}t        ||d      }t         ||      |dd       t        ||dd      }t         ||      |dd       y )Nr   rZ  ry   r]   r9   r6   r  rG  r   r   rU   rV   rk   r   rX   s        rY   test_order_0zTestInterp.test_order_0  V    b!Br2+"rE:r24"rE:rn   c                     | j                  |      \  }}t        ||d      }t         ||      |dd       t        ||dd      }t         ||      |dd       y )Nr0   rZ  ry   r]   r9   rL  rM  rN  s        rY   test_linearzTestInterp.test_linear  rP  rn   r6   r   c                 |    g d}g d}t        t        d      5  t        |||       d d d        y # 1 sw Y   y xY w)Nr   r0   r;   r=   r>   r   )r   r0   r;   r=   r>   r   r   r   zShapes of xr  rZ  rI   rK   r   rU   r6   r}   r   s       rY   test_incompatible_x_yz TestInterp.test_incompatible_x_y  s7    $:]; 	*q!q)	* 	* 	*s   2;c                    g d}g d}t        t        d      5  t        |||       d d d        g d}t        t        d      5  t        |||       d d d        g d}t        j                  |      j                  d      }t        t        d      5  t        |||       d d d        y # 1 sw Y   xY w# 1 sw Y   fxY w# 1 sw Y   y xY w)	N)r   r0   r0   r;   r=   r>   rT  zx to not have duplicatesr  rZ  )r   r;   r0   r=   r>   r   zExpect x to be a 1D strictly)r0   r9   )rI   rK   r   rM   rS   r   rV  s       rY   test_broken_xzTestInterp.test_broken_x  s    :-GH 	*q!q)	* :-KL 	*q!q)	* JJqM!!'*:-KL 	*q!q)	* 	*	* 	*	* 	*
	* 	*s#   B.B:C.B7:CCc                 ~    | j                  |      \  }}dD ]$  }t        |||      }t         ||      |dd       & y )Nr;   r=   r>   r   r   r   ry   r]   rM  )rU   rV   rk   r   r6   rX   s         rY   test_not_a_knotzTestInterp.test_not_a_knot  sC    b!B# 	?A"2r1-AAbE2E>	?rn   c                    | j                  |      \  }}t        ||dd      }t         ||      |dd       t        dd      D ]&  }t         ||d   |       ||d	   |      d
       ( t        ||ddd	      }t         ||      |dd       t        dd      D ]&  }t         ||d   |       ||d	   |      d
       ( y )Nr   r   r@  ry   r]   r0   r   r   r9   dy=rz   r6   rA  r  )rG  r   r   r   )rU   rV   rk   r   rX   r  s         rY   test_periodiczTestInterp.test_periodic!  s    b!B r2J?"rE: q! 	IAAbeNAbfO%H	I r2JRH"rE:q! 	IAAbeNAbfO%H	Irn   r[  c                 V   d}t         j                  j                  d      }t        j                  |j	                  |      dz        }|j	                  |      dz  }|d   |d<   |j                  |      |j                  |      }}t        |||d      }t         ||      |d	
       y )Nr   r   rh   r   r9   r   r   r@  ry   rz   )rM   rT   r   r   rB  rS   r   r   )rU   r6   rV   rW   r   r}   r   rX   s           rY   test_periodic_randomzTestInterp.test_periodic_random1  s     ii##D)GGC%%a(2-.a 3&u!zz!}bjjm1q!q*=!ae,rn   c                    | j                   j                  d   }t        j                  j	                  d      }|j                  |      dz  t        j                  z  }t        j                  |      }d|d<   dt        j                  z  |d<   t        j                  d|f      }t        j                  |      |d<   t        j                  |      |d<   |j                  |      |j                  |      }}t        ||ddd	      }t        |      D ]   }t         |||         |d d |f   d
       " t         ||d          ||d         d
       y )Nr   r   r;   r?   r9   r0   r   r   r_  ry   rz   )rk   r   rM   rT   r   rB  r  r   r5  r  r  rS   r   r   r   )rU   rV   rW   r   r}   r   rX   r  s           rY   test_periodic_axiszTestInterp.test_periodic_axis>  s   GGMM!ii##D)a 1$ruu,GGAJ!BEE	"HHaVvvay!vvay!zz!}bjjm1q!q*1Eq 	:AAadGQq!tW59	:!A$1R56rn   c                 0   t         j                  j                  d      }d}d}t        j                  |j	                  |            }|j	                  |      }|d   dz
  |d<   t        t              5  t        |||d       d d d        y # 1 sw Y   y xY w)	Nr   r   r   r9   r0   r   r   r@  )rM   rT   r   r   rB  rI   rK   r   )rU   r   r6   rW   r}   r   s         rY   test_periodic_points_exceptionz)TestInterp.test_periodic_points_exceptionO  s    ii##D)GGC%%a()a uqy!:& 	>q!q*=	> 	> 	>s   3BBc                 P   t         j                  j                  d      }d}d}t        j                  |j	                  |            }|j	                  |      }t        j
                  |d|z  z         }t        t              5  t        ||||d       d d d        y # 1 sw Y   y xY w)Nr   r=   r   r;   r   )	rM   rT   r   r   rB  r5  rI   rK   r   )rU   r   r6   rW   r}   r   r4   s          rY   test_periodic_knots_exceptionz(TestInterp.test_periodic_knots_exceptionZ  s    ii##D)GGC%%a()a HHQQY:& 	7q!Q:6	7 	7 	7s   BB%r  c                    t        | j                  | j                  |d      }t        | j                  | j                  d|      }t	        | j                  |      }t        | || j                        d       t        d|      D ]:  }t	        | j                  ||      }t        | || j                  |	      d
       < y )Nr   r@  T)r  r6   ry   rz   r0   r   r   r   )r   rk   r   r   r   r   r   )rU   r6   rX   rb   r9  r  s         rY   test_periodic_splevzTestInterp.test_periodic_spleve  s     tww1jITWWdgg415DGGS!QtwwZe4 q! 	?A!,CC477q!1>	?rn   c                     t        | j                  | j                  dd      }t        | j                  | j                  d      }t	         || j                         || j                        d       t
        j                  j                  d      }d}t        j                  |j                  |      dz        }|j                  |      d	z  }|d
   |d<   t        ||dd      }t        ||d      }t	         ||       ||      d       y )Nr=   r   r@  re  ry   rz   r   rh   r   r9   r   )
r   rk   r   r   r   rM   rT   r   r   rB  )rU   rX   cubr   rW   r}   r   s          rY   test_periodic_cubiczTestInterp.test_periodic_cubicr  s    tww1jI$''477J?$''
CLu= ii##D)GGC%%a(2-.a 3&u!q!q*=!Q
3!c!f51rn   c                 T   dt        | j                  | j                  d      }t        | j                        t	        | j                  | j                        t        j                  fd      }t         || j                         || j                        d       y )Nr=   r   r@  c                 ,    t        | t              S )Nrx   )r   rM   )r}   r5   r6   r4   s    rY   r  z6TestInterp.test_periodic_full_matrix.<locals>.<lambda>  s    K1ar$B rn   ry   rz   )r   rk   r   r    r!   rM   	vectorizer   )rU   rX   r5  r5   r6   r4   s      @@@rY   test_periodic_full_matrixz$TestInterp.test_periodic_full_matrix  su     tww1jIDGGQ'&twwA>\\BC$''
BtwwKe<rn   c                    | j                  |      \  }}dg}t        ||dd |f      }t         ||      |dd       t         ||d   d      |j                  |d   d   |j                  	      ddd
       t        ||d|d f      }t         ||      |dd       t         ||d   d      |j                  |d   d   |j                  	      ddd
       y )Nr0   g       @r;   r@  ry   r]   r9   r0   r   rG   F)r^   r_   r.  rG  r   r   rS   rR   )rU   rV   rk   r   r   rX   s         rY   test_quadratic_derivzTestInterp.test_quadratic_deriv  s    b!Bi r2T3K@"rE:bfaLJJs1vay

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

J3UU	
rn   c                    | j                  |      \  }}d}dgdg}}t        |||||f      }t         ||      |dd       t         ||d   d      |j                  |d   d   |j                  	      dd       t         ||d
   d      |j                  |d   d   |j                  	      dd       dgdg}}t        |||||f      }t         ||      |dd       y )Nr=   r0   rA   )r0   rB   re  ry   r]   r   r0   rG   r9   r;   r   rt  )rU   rV   rk   r   r6   der_lder_rrX   s           rY   test_cubic_derivzTestInterp.test_cubic_deriv  s    b!B  y7)ur2q5%.A"rE:beQKJJuQx{"**J5E	
 	bfaLJJuQx{"**J5E	
 x&ur2q5%.A"rE:rn   c                 Z   d\  }}|j                  ||j                        }|j                  |      }ddg}ddg}t        |||||f      }t	         ||      |dd	       t	        |j                   ||d
   d       ||d
   d      g      |j                  |D 	
cg c]  \  }	}
|
	 c}
}	|j                               t	        |j                   ||d   d       ||d   d      g      |j                  |D 	
cg c]  \  }	}
|
	 c}
}	|j                               y c c}
}	w c c}
}	w )N)r   r   rG   )r0   g      ()r;   r0   rs  )r;   rA   r@  ry   r]   r   r0   r;   r9   )rQ   rR   r  r   r   r   rS   )rU   rV   r6   rW   r}   r   ry  rz  rX   r   vals              rY   test_quintic_derivszTestInterp.test_quintic_derivs  s   1IIarzzI*FF1IF#'"q!q5%.A!ae%8!AaD!*a!aj!9:

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

#?IRC#?rzz
R	T $@#?s   D!<D'unstabler   c                     d}t        | j                  |      }ddg}t        | j                  | j                  |||d f      }t	         || j                        | j                  dd       y )Nr=   rw  )r;   rB   re  ry   r]   )r   rk   r   r   r   )rU   r6   r4   ry  rX   s        rY   test_cubic_deriv_unstablez$TestInterp.test_cubic_deriv_unstable  s[     DGGQ'"twwAt}M$''
DGG%eDrn   c           	         d}| j                  |      \  }}t        ||j                  |dz         |d   z  |dd  |d d z   dz  |j                  |dz         |d   z        }t        ||||dgdgf      }t	         ||      |dd	       t        j                   ||d   d      d
d      sJ t        j                   ||d   d      d
d      sJ y )Nr;   r0   r   r9   r@   rx  re  ry   r]   r?   r  )rG  r   r  r   r   r  r  )rU   rV   r6   rk   r   r4   rX   s          rY   test_knots_not_data_sitesz$TestInterp.test_knots_not_data_sites  s     b!Bb!r!u$AB"Sb'!R'!r"v%

 r2q!)/6(';= 	"rE:||AbeQKe<<<||AbfaL#u===rn   c                     d}|j                  ddg      }|j                  ddg      }t        |||dgdgf      }|j                  ddd|j                        }|dz  }t	         ||      |d	d	
       y )Nr=   r?   r2   r0   r?   rw  re  r  rG   ry   r]   )rS   r   ri   rR   r   )rU   rV   r6   r}   r   rX   rk   r   s           rY   test_minimum_points_and_derivz(TestInterp.test_minimum_points_and_deriv  s{     JJBx JJBx q!Q'WI0FG[[R2::[6U"rE:rn   c                    g dx}}t        t              5  t        ||dgd f       d d d        t        t              5  t        ||d       d d d        t        t              5  t        ||dg       d d d        t        t              5  t        ||d       d d d        d\  }}t        t              5  t        ||||f       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   uxY w# 1 sw Y   [xY w# 1 sw Y   y xY w)N)r2   r;   r=   r>   r   r   r  re  *   )r  r  rU  )rU   r}   r   lrs        rY   test_deriv_speczTestInterp.test_deriv_spec  s    %$A:& 	@q!wi->?	@ :& 	6q!W5	6 :& 	8q!gY7	8 :& 	1q!R0	1
 "1:& 	5q!aV4	5 	5	@ 	@	6 	6	8 	8	1 	1	5 	5s:   CC%C)C57DCC&)C25C>D
c                     |j                  d      }|dz  }dgdg}}t        t        d      5  t        ||||f       d d d        dgdg}}t        t        d	      5  t        ||||f       d d d        y # 1 sw Y   :xY w# 1 sw Y   y xY w)
Nr   r;   )r   r   r0   r   zBad boundary conditions at 0.r  re  )ir   zBad boundary conditions at 6.)rQ   rI   rK   r   )rU   rV   r}   r   r  r  s         rY   test_deriv_order_too_largez%TestInterp.test_deriv_order_too_large
  s    IIaLqDx&1:-LM 	5q!aV4	5 x'1:-LM 	5q!aV4	5 	5	5 	5
	5 	5s   A8B8BBc                    d}| j                  |      \  }}|d|z  z   }dgdg}}t        |||||f      }t         ||      |dd       t        j                   ||d   d	      |d   d	   d
      sJ t        j                   ||d   d	      |d   d	   d
      sJ dD ]%  }t        |||      }t         ||      |dd       ' y )Nr=   r1   )r0   y              @)r0   y      @       @re  ry   r]   r   r0   r  r9   r   r0   rZ  )rG  r   r   cmathr  )rU   rV   r6   rk   r   ry  rz  rX   s           rY   r  zTestInterp.test_complex  s    b!B#b&[ !zK=ur2q5%.A"rE:}}Qr!ua[%(1+uEEE}}Qr"vq\58A;FFF  	?A"2rQ/AAbE2E>	?rn   c                     |j                  d|j                        }|j                  d|j                        }dD ]  }t        |||      } ||        y )Nrh   rG   r   rZ  )rQ   int32r   )rU   rV   r}   r   r6   rX   s         rY   test_int_xyzTestInterp.test_int_xy(  sT    IIbI)IIbI)  	A"1a1-AaD	rn   c                 t    |j                  ddd      }|d d d   }|d d d   }dD ]  }t        |||        y )Nr9   r0   r   r   r   rZ  )ri   r   )rU   rV   rk   r}   r   r6   s         rY   test_sliced_inputzTestInterp.test_sliced_input2  sI    [[Q$ssGssG 	*Aq!q)	*rn   c                    |j                  d|j                        }|dz  }|j                  |j                  |j                   fD ]=  }t	        j
                  |d      j                  |      }t        t        t        ||       ? y )Nrh   rG   r;   r9   )
rQ   rR   rO   rP   xpxatsetrI   rK   r   )rU   rV   r}   r   zs        rY   test_check_finitezTestInterp.test_check_finite<  sp    IIb

I+qD&&"&&266'* 	@Aq"!!!$A*&8!Q?	@rn   )r0   r;   r=   r   c                 v    t        t        d            }|D cg c]  }|dz  	 }}t        |||       y c c}w )Nrh   r;   rZ  )listr   r   )rU   r6   r}   ar   s        rY   test_list_inputzTestInterp.test_list_inputE  s9     rOaQT1a1% s   6c                    | j                  |      \  }}|j                  ||fd      }dddgfg}dddgfg}t        ||d||f      }t         ||      |d	d	
       t         ||d   d      |j	                  |d   d   |j
                        d	d	
       t         ||d   d      |j	                  |d   d   |j
                        d	d	
       y )Nr0   r  r2   r@   rA   rB   r=   r@  ry   r]   r   rG   r9   )rG  r   r   r   rS   rR   )rU   rV   rk   r   ry  rz  rX   s          rY   test_multiple_rhszTestInterp.test_multiple_rhsL  s    b!BXXr2hQX'b"Xb"Xr2UENC"rE:beQKJJuQx{"**J5E	
 	bfaLJJuQx{"**J5E	
rn   c                    t         j                  j                  d      }d\  }}t        j                  |j                  |            }|j                  |dddf      }t	        |||      }|j
                  j                  |dddfk(  sJ d|j                  d      fg}d|j                  d      fg}t	        |||||f	      }|j
                  j                  ||z   dz
  dddfk(  sJ y )
Nr   r=   r   r   r   r   r   r0   r   r   r   re  )rM   rT   r   r   r   r5   r   )	rU   r   r6   rW   r}   r   rX   d_ld_rs	            rY   test_shapeszTestInterp.test_shapes]  s    ii##D)1GGCJJAJ&'JJQ1aLJ)q!Q'ssyyQ1aL((( 3::i()*3::i()*q!Qc
;ssyyQUQY1a0000rn   c                    | j                  |      \  }}|j                  |      }t        ||dd      }t        ||ddgdgf      }t        |j                  |j                  d       t        ||dd      }t        ||ddgdgf      }t        |j                  |j                  d       t        ||d	d
      }t        ||d	d dgf      }t        |j                  |j                  d       t        ||dd      }t        ||dd       }t        |j                  |j                  d       t        t              5  t        ||dd       d d d        |j                  |j                  |      |j                  |      fd      }dddgfg}d	ddgfg}t        ||d||f      }t        ||dd      }t        |j                  |j                  d       t        j                  j                  d      }d\  }	}
t        j                  |j                  |
            }|j                  |
dddf      }|j                  |      |j                  |      }}d|j                  d      fg}d|j                  d      fg}t        |||	||f      }t        |||	d      }t        |j                  |j                  d       y # 1 sw Y   yxY w)Nr=   rL  r@  rx  r\   rz   )rL  rK  r  r;   )NrK  r  rM  typor0   r  r?   rJ  r   r  r   r   r   r   r  re  rK  )rG  r  r   r   r5   rI   rK   r   r  rM   rT   r   r   rS   r5  )rU   rV   rk   r   r5  r
  ry  rz  r   r6   rW   r}   r   r  r  s                  rY   test_string_aliaseszTestInterp.test_string_aliasesl  s   b!BVVBZ  B!Y?B!vh5IJbdd/  B!(>@B!*0F8(<>bdd/  B!5FGB!dXJ5GHbdd/  B!\BB!T:bdd/ :& 	<r2F;	< XXrvvbz266":.QX7b"Xb"XB!eU^DB!(>@bdd/ ii##D)1GGCJJAJ&'JJQ1aLJ)zz!}bjjm1 288I&'(288I&'(1a#s<1a;bdd/1	< 	<s    KKc                    t         j                  j                  d      }d\  }}t        j                  |j                  |            }|j                  |      }t	        ||      }t        ||||      }|j                  |      }t        |j                  |||f      \  }	}
}t        |	|
||      }t        |j                  |dd       y )Nr   )r=   r   r   ry   r]   )rM   rT   r   r   r   make_interp_full_matrrS   r|   r   r   r5   )rU   rV   r   r6   rW   r~   y_npr   r  r}   r   r4   rX   s                rY   test_full_matrixzTestInterp.test_full_matrix  s    ii##D)1wwszzqz)*zzqz!4#"4tQ7ZZ^bjj4t"451aq!Q*Re%8rn   c                    t         j                  j                  d      }d}t        ddd      D ]  }t	        |dz
  dz        }t        j
                  |j                  d|f            }t        d|dz         D ]x  }|d| |dfxx   t        j
                  |j                  d||z
  f            z  cc<   ||dd| fxx   t        j
                  |j                  d||z
  f            z  cc<   z |j                  ||f      }||d|| df<   |j                  ||f      }||| dd|f<   t        j                  ||f      }	t        t        || dz
  d            D ]G  \  }}
|
d	k  rt        j                  ||

      |	|d|
f<   *t        j                  ||

      |	||
df<   I |j                  |      }t        t        |	||||      t         j                  j                  ||      d        y)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;   r0   Nr9   r   )offsetry   rz   )rM   rT   r   r   intdiagflatr5  r  diagonalr   r   linalgsolve)rU   r   rW   r6   r  r  r  urlldr  rX   s               rY   test_woodburyzTestInterp.test_woodbury  s    ii##D)q"a 	?A!a%1%FCJJ1v./A1fqj) B#A2#qr'
bkk#**aQZ*@AA
!"crc'
bkk#**aQZ*@AA
B VV,-B#%Agvgwx VV,-B#%Avgh !Q A!%!R"@A 81q5!{{1Q7Aa!eH!{{1Q7AaeH	8
 

1A/2r1a@IIOOAq1?#	?rn   N).r(  r)  r*  rM   ri   r  rk   r  r   rG  rJ  rO  rR  rc   r  r  rW  rY  r\  r`  rb  rd  rf  rh  rj  rm  rq  ru  r{  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r+  rn   rY   rE  rE    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?rn   rE  c                    | j                   |j                   k(  sJ |j                   | j                   |z   dz   k(  sJ | j                   }t        j                  ||ft        j                        }t	        |      D ]R  }| |   }|||   k(  r|}nt        j
                  ||      dz
  }t        j                  ||||      }	|	||||z
  |dz   f<   T t        j                  ||      }
|
S )zAssemble an spline order k with knots t to interpolate
    y(x) using full matrices.
    Not-a-knot BC only.

    This routine is here for testing only (even though it's functional).
    r0   rG   )
r   rM   r5  rR   r   r  r,   evaluate_all_bsplslr  )r}   r   r4   r6   rW   Ar  r  leftbbr5   s              rY   r  r    s     66QVV66QVVaZ!^###	A
!Qrzz*A1X 	!t1Q4<D??1d+a/D ''1dD9 !T!VDF]
	! 	AAHrn   c                 F   t        t        j                  | ||f      \  } }}| j                  }|j                  |z
  dz
  }t        j                  ||ft        j
                        }t        |      D ]R  }| |   }|||   k(  r|}	nt        j                  ||      dz
  }	t        j                  ||||	      }
|
|||	|z
  |	dz   f<   T t        j                  |j                  |      }t        j                  |j                  |      }t        j                  ||      }|||ffS )z,Make the least-square spline, full matrices.r0   rG   )r|   rM   rS   r   r5  rR   r   r  r,   r  dotTr  r  )r}   r   r4   r6   r  rW   r  r  r  r  r  r,  Yr5   s                 rY   make_lsq_full_matrixr    s	   "**q!Qi(GAq!	A	
QA
!Qrzz*A1X 
!t1Q4<D??1d+a/D ''1dD9 !T!VDF]

! 	qssAA
qssAA
AAq!f9rn   methodnorm-eqqrc            	          e Zd Zej                  j                  d      Zd\  ZZ ej                  ej	                  e            Z
ej	                  e      Z e ej                  e
d   e
d   d      e      Zed        Zed        Zd Zed	        Zed
        Zd Zed        Zd Zed        Zed        Zed        Zed        Zed        Zej<                  j?                  d e  e!dd                  d        Z"d Z#y)TestLSQr   )r  r=   r   r9   r   c                    | j                   | j                  | j                  | j                  f\  }}}}t	        ||||      \  }}t        |||||      }t        |j                  |       |j                  j                  |j                  |z
  dz
  fk(  sJ |\  }	}
t        j                  j                  |	|d      \  }}}}t        |j                  |       y )Nr  r0   r9   )rcond)r}   r   r4   r6   r  r   r   r5   r   r   rM   r  lstsq)rU   r  r}   r   r4   r6   c0AYrX   aar   r  r   s                rY   
test_lstsqzTestLSQ.test_lstsq  s     VVTVVTVVTVV3
1a%aAq1BAq!Qv6R ssyyQVVaZ!^---- Biioob!2o6Aq!R rn   c                    g t        |j                  | j                  | j                  | j                  f      | j
                  \  }}}}|j                  |      }t        |||||      }t        ||||||      }	t        |j                  |	j                  d       t        |j                  |	j                  d       |j
                  |	j
                  k(  sJ y )Nr  wr  ry   rz   )
r|   rS   r}   r   r4   r6   rt   r   r   r5   )
rU   r  rV   r}   r   r4   r6   r  rX   b_ws
             rY   test_weightszTestLSQ.test_weights!  s     Hc"**tvvtvvtvv&>?GG
1aLLOAq!Qv6aAqAf=SUU/SUU/sscee||rn   c                 T   g t        |j                  | j                  | j                  | j                  f      | j
                  \  }}}}t        j                  j                  d      j                  |j                  d         }|j                  |      }t        |||||d      }t        |||||d      }t        ||||d      }	t        |j                  |j                  d	       |j                  |j                  |	j                  |j                  z
        dk        rJ y )
Nr   r   r   r  r  r  r  ry   rz   )r|   rS   r}   r   r4   r6   rM   rT   r  r  r   r   r   r5   r   abs)
rU   rV   r}   r   r4   r6   r  b_neb_qrb_no_ws
             rY   test_weights_samezTestLSQ.test_weights_same.  s    Gc"**tvvtvvtvv&>?GG
1aII!!$'//QWWQZ/@JJqMq!QQyAq!QQt< Aq!D9U366"&&DFF!23e;<<<<rn   c                    g t        |j                  | j                  | j                  f      | j                  | j
                  \  }}}}t        j                  j                  d      }|j                  |dddf      }|j                  |      }t        |||||      }	|	j                  j                  |j                  d   |z
  dz
  dddfk(  sJ y )	Nr   r   r   r   r   r  r   r0   )r|   rS   r}   r4   r6   rW   rM   rT   r   r   r5   r   )
rU   r  rV   r}   r4   r6   rW   r   r   rX   s
             rY   r  zTestLSQ.test_multiple_rhs;  s    Gc"**tvvtvv&67GGG
1aii##D)JJQ1aLJ)JJqMAq!Qv6ssyyQWWQZ!^a/Aq9999rn   c           
      d   g t        |j                  | j                  | j                  f      | j                  | j
                  \  }}}}d}t        j                  j                  d      }|j                  ||f      }	|j                  |	      }	t        ||	|||      }
t        |      D cg c]  }t        ||	d d |f   |||       }}|j                  t        |      D cg c]  }||   j                   c}      j                  }t        ||
j                  d       y c c}w c c}w )Nr=   r   r   r  r\   rz   )r|   rS   r}   r4   r6   rW   rM   rT   r   r   r   r   r5   r  r   )rU   r  rV   r}   r4   r6   rW   nrhsr   r   rX   r  r  coefss                 rY   test_multiple_rhs_2zTestLSQ.test_multiple_rhs_2E  s   Gc"**tvvtvv&67GGG
1aii##D)JJQIJ&JJqMAq!Qv6 T{$ a1a4!Qv> $ $5;7a"Q%''78::qss/	$7s   0D((D-c                    g t        |j                  | j                  | j                  f      | j                  | j
                  \  }}}}d}t        j                  j                  ||f      }|j                  |      }t        ||||d      }t        ||||d      }	t        |j                  |	j                  d       y )Nr=   r   r  r  r  r\   rz   )r|   rS   r}   r4   r6   rW   rM   rT   r   r   r5   )
rU   rV   r}   r4   r6   rW   r  r   r  b_neqs
             rY   test_multiple_rhs_3zTestLSQ.test_multiple_rhs_3T  s    Gc"**tvvtvv&67GGG
1aII1d),JJqMq!Q$71a9=e4rn   c                    g t        |j                  | j                  | j                  f      | j                  \  }}}|j                  | j
                  dz        }t        |||||      }t        ||j                  |      |||      }t        ||j                  |      |||      }	t         ||       ||      d |	|      z  z   dd       y )N      ?       @r  r1   r\   r]   )
r|   rS   r}   r4   r6   r   r   r   r   r   )
rU   r  rV   r}   r4   r6   r\  rX   r   r   s
             rY   r  zTestLSQ.test_complex]  s     =3rzzDFFDFF#34<dff<1aZZ(+,Ar1a7q"''"+q!FCq"''"+q!FC!d1gDG3%eLrn   c                    g t        |j                  | j                  | j                  f      | j                  \  }}}|j                  | j
                  dz        }|j                  ||fd      }t        ||||      }t        ||j                  |      ||      }t        ||j                  |      ||      }t         ||       ||      d ||      z  z   dd       |j                  ||fd      }t        ||||      }t        ||j                  |      ||      }t        ||j                  |      ||      }t         ||       ||      d ||      z  z   dd       y )Nr  r0   r  r1   r\   r]   )r|   rS   r}   r4   r6   r   r   r   r   r   r   )	rU   rV   r}   r4   r6   r\  rX   r   r   s	            rY   test_complex_2zTestLSQ.test_complex_2i  s@    =3rzzDFFDFF#34<dff<1aZZ(+,XXr2hQX'Ar1a(q"''"+q!4q"''"+q!4!d1gDG3%eL XXr2hQX'Ar1a(q"''"+q!4q"''"+q!4!d1gDG3%eLrn   c                     t        j                  d      j                  t              }t        j                  d      j                  t              }t	        |d      }t        |||d|       y )Nrh   r0   rZ  r6   r  )rM   rQ   astyper  r   r   rU   r  r}   r   r4   s        rY   r  zTestLSQ.test_int_xy  sM    IIbM  %IIbM  %AO1a1V4rn   c                    t        j                  dt         j                        }t        j                  dt         j                        }t        |d      }t	        |||d|      }t	        |j                  t              |j                  t              |j                  t              d|      }|dd  |d d z   dz  }t         ||       ||      d	       y )
Nrh   rG   r0   rZ  r  r9   r@   r\   rz   )rM   rQ   float32r   r   r  floatr   )rU   r  r}   r   r4   spl_f32spl_f64x2s           rY   test_f32_xyzTestLSQ.test_f32_xy  s    IIb

+IIb

+AO!!QQv>!HHUOQXXe_ahhuo6
 eafn#WR[u=rn   c                     t        j                  ddd      }|d d d   }|d d d   }t        |d      }t        |||d|       y )Nr9   r0   r   r=   r  )rM   ri   r   r   )rU   r  rk   r}   r   r4   s         rY   r  zTestLSQ.test_sliced_input  sK     [[Q$ssGssGAqM1a1V4rn   c           	         t        j                  d      j                  t              }|dz  }t	        |d      }t         j
                  t         j                  t         j                   fD ]   }||d<   t        t        t        ||||       " y )N   r;   r=   r9   r  )
rM   rQ   r  r  r   rO   rP   rI   rK   r   )rU   r  r}   r   r4   r  s         rY   test_checkfinitezTestLSQ.test_checkfinite  sq     IIbM  'qDAqM&&"&&266'* 	OAAbE*oq!QvN	Orn   c                     | j                   | j                  | j                  }}}|j                  d       |j                  d       |j                  d       t	        ||||       y )NFrq  )r}   r   r4   r  )r}   r   r4   rs  r   r  s        rY   rt  zTestLSQ.test_read_only  sU     &&$&&$&&a1	


	


	


!qAf5rn   r6   r0   c                    | j                   | j                  }}t        t        j                  |d   |d   d      |      }t        ||||d      }t        ||||d      }|dd  |d d z   dz  }t         ||       ||      d	
       y )Nr   r9   r   r  r  r  r0   r@   r\   rz   )r}   r   r   rM   ri   r   r   )rU   r6   r}   r   r4   spl_norm_eqspl_qrrk   s           rY   test_qr_vs_norm_eqzTestLSQ.test_qr_vs_norm_eq  s     vvtvv1BKK!aeQ/3%aA9E AqAd;eafn#B%@rn   c                 d   t        j                  | j                  d      }t        j                  | j                  d      }t	        | j                  | j                  | j
                  dd      }t	        ||| j
                  dd      }|dd  |d d z   dz  }t         ||       ||      d	       y )
Nr;   r=   r  r  r0   r9   r@   r\   rz   )rM   repeatr}   r   r   r4   r   )rU   r}   r   r  spl_2rk   s         rY   test_duplicateszTestLSQ.test_duplicates  s    IIdffa IIdffa !DI1dff$?eafn#b	5959rn   N)$r(  r)  r*  rM   rT   r   r   rW   r6   r   r}   r   r   ri   r4   parametrize_lsq_methodsr  r  r  r  r  r  r  r  r  r  r  r  rt  rc   r  r  r  r   r  r  r+  rn   rY   r  r    sz   
 ))


%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:rn   r  c                   ,    e Zd ZdZd Zed        Zd Zy)PackedMatrixas  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                     || _         || _        || _        |j                  dk(  sJ |j                  dk(  sJ |j                  d   |j                  d   k(  sJ y )Nr;   r0   r   )r  r  ncr"  r   )rU   r  r  r  s       rY   __init__zPackedMatrix.__init__  sW    vv{{{{awwqzV\\!_,,,rn   c                 L    | j                   j                  d   | j                  fS Nr   )r  r   r  rI  s    rY   r   zPackedMatrix.shape  s    vv||A''rn   c                 j   t        j                  | j                        }| j                  j                  d   }t	        |j                  d         D ]_  }t        | j                  | j                  |   z
  |      }| j                  |d |f   ||| j                  |   | j                  |   |z   f<   a |S )Nr0   r   )rM   r5  r   r  r   minr  r  )rU   outnelemr  nels        rY   todensezPackedMatrix.todense  s    hhtzz"Qsyy|$ 	JAdggA.6C:>&&DSD/C4;;q>$++a.3"6667	J 
rn   N)r(  r)  r*  __doc__r	  propertyr   r  r+  rn   rY   r  r    s%    - ( (rn   r  c                 h   ddl m}  |dt        j                  d      }| j                  }| j
                  }| j                  }|j                  \  }}	|j                  d   |k(  sJ |j                         }
|j                         }t        ||      D ]  }||   }t        ||      D ]  }|t        ||      k\  r ( ||
|df   |
|df         \  }}}||
|df<   t        d|	      D ]*  }t        |||
||f   |
||f         \  |
||f<   |
||dz
  f<   , d|
|df<   t        |j                  d         D ]'  }t        |||||f   |||f         \  |||f<   |||f<   )   t        t        |
j                  d               }t        |
t        j                  |t        j                  	      |      }||fS )
zjThis is a python counterpart of the `_qr_reduce` routine,
    declared in interpolate/src/__fitpack.h
    r   )get_lapack_funcslartg	preferred)rH   ilp64r0   r?   r9   rG   )scipy.linalg.lapackr  rM   rR   r  r  r  r   r  r   r  fprotar  r  rT  int64)a_pr   startrowr  dlartgr  r  r  r  nzRr  r  oir  r5   r  r  r  offsR_ps                        rY   _qr_reduce_pyr$    s    5gRZZ{KF 	AZZF	BGGEAr771:??	A	
B8Q FAYr2 	FAC2J Qq!tWa1g.GAq! AadG1b\ D%+Aq!AqD'1QT7%C"!Q$1ac6DAaeH 288A;' F%+Aq"QT(Bq!tH%E"1a4"QT(F	FF* aggaj!"D
q"((4rxx8"
=C7Nrn   c                 8    | |z  ||z  z   }| |z  | |z  z   }||fS )zLGivens rotate [a, b].

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

    r+  )r5   r  r  rX   r  r  s         rY   r  r    s1     A#!)B
A!Br6Mrn   c                    | j                   }|j                  \  }}| j                  }|j                  d   |j                  d   k(  sJ t        j                  |d|       }||dz
     ||dz
  df   z  ||dz
  df<   t        |dz
  dd      D ]P  }t        |||z
        }||d|df   ||dz   ||z   df   z  j                  d      }	||   |	z
  ||df   z  ||df<   R |S )zBacksubsitution solve upper triangular banded `R @ c = y.`

    `R` is in the "packed" format: `R[i, :]` is `a[i, i:i+k+1]`
    r   Nr0   .r;   r9   r  )r  r   r  rM   r   r   r  r  )
r#  r   r   r   r  r  r5   r  r  summs
             rY   fpbackr(     s   
 	AGGEAr	B771:###
afART7Qr!tQwZ'AbdCiL2a4R  ."bdm!QsUD.!Aac!C%in$55:::BdTka1g-!S&		.
 Hrn   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestGivensQRc                 |    d}t        j                  |t              }|dz  dd|z   z  z   }t        ||      }||||fS )Nr=   rG   r0   )rM   rQ   r  r   )rU   rW   r6   r}   r   r4   s         rY   _get_xytzTestGivensQR._get_xyt7  sF    IIau%qD1ac7N1!Qzrn   c                 t   d}| j                  |      \  }}}}t        j                  |||      }t        j                  |j                               \  }}|j                  |z  }	|j                  \  }
}||j                  d   |z
  dz
  k(  sJ |j                  d d |dz      }t        j                  |t        j                        }|j                  j                  |
|dz         }t        |||      }|d d d f   }t        j                   ||||       t#        t        j$                  |j                         |z   |j                         |z
        t        j&                  |      d       t#        t        j$                  t)        |	|d d df   z
        t)        |	|d d df   z               t        j&                  |	      d       t        j*                  ||	      }t        j,                  |j.                  |j0                  ||||t        j2                  |      |      \  }}}t#        ||d d df   d       y )	Nrh   r   r0   rG   r\   rz   gvIh%L=-a=)r,  r   rE  r  r  r  r  r   indicesrM   ascontiguousarrayr  datar   r  r,   	qr_reducer   minimumr   r  r  r(  r  r  rt   )rU   rW   r}   r   r4   r6   a_csrqr  qTyr  r  r  r  r   y_c_fullc_bandedr   s                      rY   test_vs_fullzTestGivensQR.test_vs_full>  s   ]]1%
1a %%aA. uuU]]_%1ccAg 2QWWQZ!^a''''w!A#w'%%fBHH=JJq!A#&FB'q$wZ1fb"- 	

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

3sR1X~#6#&sR1X~#689;s9KRW	Y !S!!addAr1aaRTU!QAU;rn   c                    d}| j                  |      \  }}}}t        j                  |||      }|j                  \  }}||j                  d   |z
  dz
  k(  sJ |j                  d d |dz      }	t        j                  |	t
        j                        }	|j                  j                  ||dz         }
t        |
|	|      }|d d d f   }t        ||      \  }}t        j                  |
|	||       t        |j                  |j                  d       t!        |j"                  |j"                  d       |j$                  |j$                  k(  sJ t        ||d       y )	Nrh   r   r0   rG   r\   rz   F)check_dtype)r,  r   rE  r   r/  rM   r0  r  r1  r   r  r$  r,   r2  r   r  r   r  r  )rU   rW   r}   r   r4   r6   r4  r  r  r  r  r   r7  RRr   s                  rY   test_py_vs_compiledz TestGivensQR.test_py_vs_compileda  s,   ]]1%
1a %%aA.2QWWQZ!^a''''w!A#w'%%fBHH=JJq!A#&FB'q$wZq"%B1fb2.acc.		188?uu}}BU+rn   c                 6   d}| j                  |      \  }}}}t        j                  d|dz   t              }t	        j
                  ||||      \  }}}	|j                  d   }
t        j                  |||      }||d d d f   z  j                         }|j                  j                  |
|dz   f      }|j                  d d |dz      j                  t        j                        }t        ||d       t!        ||       |	|j                  d   |z
  dz
  k(  sJ y )Nrh   r0   rG   r   r\   rz   )r,  rM   rQ   r  r,   data_matrixr   r   rE  tocsrr1  r   r/  r  r  r   r   )rU   rW   r}   r   r4   r6   r  r  r  r  r  r4  a_wA_offset_s                  rY   test_data_matrixzTestGivensQR.test_data_matrix|  s   ]]1%
1aIIa1E* ,,Q1a862GGAJ%%aA.qDz!((*XXq!A#h'++g1g&--bhh72E*(QWWQZ!^a''''rn   c                    d}| j                  |      \  }}}}t        j                  ||dz  f   }t        j                  |||t        j
                  |            \  }}}t        |||      }	t        j                  ||||       t        |	|      }
t        j                  ||||||t        j
                  |      |      \  }}}t        ||
d       y )Nrh   r;   ry   rz   )
r,  rM   r  r,   r@  rt   r  r2  r(  r   )rU   rW   r}   r   r4   r6   r  r  r  r   r5   r   r   s                rY   test_fpbackzTestGivensQR.test_fpback  s    ]]1%
1aEE!QT'N ,,Q1bll1oF62FB'1fb!,1aL??1b!Q1bll1oqIAqAE*rn   c                    d}| j                  |      \  }}}}t        j                  |dz   ft              }|D ]N  }t	        t        j                  |||||dz         |       t	        t        j                  ||||d|z        |       P y )Nrh   r0   rG   r;   )r,  rM   r5  r  r   r,   r  )rU   rW   r}   r   r4   r6   
zero_arrayr  s           rY   test_evaluate_all_bsplz#TestGivensQR.test_evaluate_all_bspl  s    ]]1%
1aXXq1uhe4
 	LD**1aq!a%@*N**1aq!A#>
L	Lrn   N)	r(  r)  r*  r,  r:  r>  rE  rG  rJ  r+  rn   rY   r*  r*  4  s"    !<F,6("+Lrn   r*  c                     t         j                  j                  t         j                  j                  t         j                  j	                  t
                    d|       S )Nr1  )ospathr  abspathdirname__file__)basenames    rY   	data_filerR    s8    77<<(AB* *rn   c                   `    e Zd Zd Zd Zd Zej                  j                  d      d        Z	y)TestSmoothingSplinec                 0   t         j                  j                  d      }d}t        j                  |j	                  |      dz  dz
        }|dz  t        j
                  d|z        z  |dz  z   |j                  dd|      z   }t        t              5  t        ||dd         d d d        t        t              5  t        |dd  |       d d d        t        t              5  t        |j                  d|      |       d d d        t        t              5  t        |d d d	   |       d d d        t        j                  |      }|d   |d
<   t        t              5  t        ||       d d d        t        j                  d      }t        j                  d      }d}t        j                  t        |      5  t        ||       d d d        y # 1 sw Y   -xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r   r>   r;   r=   r?   r  r0   r9   r   z)``x`` and ``y`` length must be at least 5r  )rM   rT   r   r   rB  r  normalrI   rK   r   r   r  rQ   r  rc   r   )rU   r   rW   r}   r   x_duplexception_messages          rY   test_invalid_inputz&TestSmoothingSpline.test_invalid_input  s   ii##D)GGC%%a(1,q01qD266!a%= 1a4'#**Ra*@@ :& 	,!!QqrU+	,:& 	,!!AB%+	,:& 	6!!))Aq/15	6 :& 	.!!DbD'1-	. 1Iq	:& 	-!&!,	- IIaLGGAJG]]:->? 	(!!Q'	( 	(+	, 	,	, 	,	6 	6	. 	.	- 	-	( 	(sH   G:G!G(G4H 8HGG%(G14G= H	Hc                     t        j                  t        d            5 }|d   }|d   }|d   }ddd        t              |      }t	        |ddd       y# 1 sw Y   ,xY w)	ae  
        Data is generated in the following way:
        >>> np.random.seed(1234)
        >>> n = 100
        >>> x = np.sort(np.random.random_sample(n) * 4 - 2)
        >>> y = np.sin(x) + np.random.normal(scale=.5, size=n)
        >>> np.savetxt('x.csv', x)
        >>> np.savetxt('y.csv', y)

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

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

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

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

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

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

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

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

        z
gcvspl.npzr}   r   y_GCVSPLN-C6?F)r^   r_   r<  )rM   loadrR  r   r   )rU   r1  r}   r   r[  y_comprs         rY   test_compare_with_GCVSPLz,TestSmoothingSpline.test_compare_with_GCVSPL  sq    R WWY|,- 	(S	AS	AJ'H	( .'1-a0 	4US	( 	(s   AA#c                    t         j                  j                  d      }d}t        j                  |j	                  |      dz  dz
        }|dz  t        j
                  d|z        z  |dz  z   |j                  dd|      z   }|j                  |      |j                  |      }}t        ||d      }t        ||dd	
      }|j                  |d   |d   d|z        }t         ||       ||      d       y)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  )lamrL  re  r   r9   r\   rz   N)rM   rT   r   r   rB  r  rV  rS   r   r   ri   r   )	rU   rV   r   rW   r}   r   
spline_GCVspline_interpgrids	            rY   test_non_regularized_casez-TestSmoothingSpline.test_non_regularized_case	  s     ii##D)GGC%%a(1,q01qD266!a%= 1a4'#**Ra*@@zz!}bjjm1*1aR8
*1aIF{{1Q42A.
4(%d+"	$rn   r;   c                    t         j                  j                  d      }d}t        j                  |j	                  |      dz  dz
        }|dz  t        j
                  d|z        z  |dz  z   |j                  dd|      z   }t        |j                  ||f      \  }}t        ||      }|j                  t        d      d	      D ]  }|j                  |      }t        j                  |t        |            j!                  d
       t        |||      }	t#         |||         ||   z
        }
t#         |	||         ||   z
        }|
|k  st%        d|
dd|d       y )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 < )rM   rT   r   r   rB  r  rV  r|   rS   r   choicer   r  r  r  r  r  r  rK   )rU   rV   r   rW   r}   r   r9  indr  spl_worigweighteds               rY   test_weighted_smoothing_splinez2TestSmoothingSpline.test_weighted_smoothing_spline	  sZ    ii##D)GGC%%a(1,q01qD266!a%= 1a4'#**Ra*@@2::1v&1#Aq) ::eCjr:2 	3C
AFF1c#h##C()!Q2E s1S6{QsV+,D53=1S612Hh  $CCG)3$,R="2 3 3	3rn   N)
r(  r)  r*  rY  r_  re  rc   r  	fail_slowrl  r+  rn   rY   rT  rT    s6    
(>6Tp$* [[13 3rn   rT  c           	         	
 | \  	
|\  t              z
  dz
  }|dz   k\  sJ t              z
  dz
  dz   k\  sJ t        	
fdt        |      D              }t        j                  |      S )z-A naive 2D tensort product spline evaluation.r0   c           	   3      K   | ]9  }t              D ])  }||f   t        |      z  t        	|      z   + ; y wr  )r   r,  )
r  ixiyr5   r6   nytxtyr}   r   s
      rY   r  zbspline2.<locals>.<genexpr>B	  sU      7E"I7&( Bi!Aq"b/)AaBO; 7; 7s   ?A)rD  r  r   rM   rS   )r   r4   r5   r6   nxr#  rr  rs  rt  r}   r   s     ``  @@@@@rY   bspline2rv  :	  s    DAqFB	R1qB!A#II	R1qB!A#II
 7 7b	7 7C::c?rn   c                 b   |dk(  r||   | cxk  r||dz      k  rdS  dS |||z      ||   k(  rd}n)| ||   z
  |||z      ||   z
  z  t        | |dz
  ||      z  }|||z   dz      ||dz      k(  rd}||z   S |||z   dz      | z
  |||z   dz      ||dz      z
  z  t        | |dz
  |dz   |      z  }||z   S )Nr   r0   r2   r?   r,  r  s         rY   r,  r,  G	  s    Avda(!AaC&(s1(c11v1~!A$h1Q3!A$'!AqsAq/91Qx1QqS6 7N !AhlQqs1uX!A#./!AqsAaC2CC7Nrn   c                      t              z
  dz
  }|dz   k\  rt              |k\  sJ t         fdt        |      D              S )Nr0   c              3   F   K   | ]  }|   t        |      z    y wr  rx  r  s     rY   r  zbspline.<locals>.<genexpr>X	  s$     6qta1am#6r  )rD  r  r   )r}   r4   r5   r6   rW   s   ```` rY   rW  rW  U	  sD    A
QA1H3q6Q;''6U1X666rn   c                       e Zd ZddZd Zy)
NdBSpline0c                     t        |      }|t        |j                        k  sJ 	 t        |       t        d |D              | _        t        d |D              | _        || _        y# t        $ r	 |f|z  }Y Gw xY w)a  Tensor product spline object.

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

        Parameters
        ----------
        c : ndarray, shape (n1, n2, ..., nd, ...)
            b-spline coefficients
        t : tuple of 1D ndarrays
            knot vectors in directions 1, 2, ... d
            ``len(t[i]) == n[i] + k + 1``
        k : int or length-d tuple of integers
            spline degrees.
        c              3   F   K   | ]  }t        j                  |        y wr  )operatorindex)r  kis     rY   r  z&NdBSpline0.__init__.<locals>.<genexpr>t	  s     6bx~~b)6s   !c              3   R   K   | ]  }t        j                  |t                ! yw)rG   N)rM   rS   r  )r  tis     rY   r  z&NdBSpline0.__init__.<locals>.<genexpr>u	  s     ?rrzz"E22?s   %'N)rD  r   rJ   r1  r6   r4   r5   )rU   r4   r5   r6   r"  s        rY   r	  zNdBSpline0.__init__\	  sx     1vs177|###	F
 6A66?Q??  	T	A	s   A( (A:9A:c                 b   t        | j                        }t        |      |k(  sJ dg|z  }t        |      D ]  }| j                  |   ||   }}| j                  |   }|||   k(  r|||<   nt	        j
                  ||      dz
  ||<   |||      |cxk  r|||   dz      k  sJ  J ||   |k\  r||   t        |      |z
  k  rJ  t        |      }d}t        |      D cg c]'  }t        ||   | j                  |   z
  ||   dz         ) }	}t        j                  |	 D ]o  }
| j                  |
   t	        j                  t        |      D cg c]0  }t        ||   | j                  |   |
|   | j                  |         2 c}      z  }||z  }q t	        j                  |      S c c}w c c}w )Nnoner0   r   )rD  r4   r   r6   rM   r  r1  	itertoolsproductr5   prodr,  rS   )rU   r}   r"  r  r  tdxdr6   r  itersidxterms               rY   __call__zNdBSpline0.__call__x	  s   466{1v~~ JtOt 
	4AVVAY!Bq	A RU{!r2.2!ad8r/R!QZ/////Q4191B!!333
	4 !H
 <A$KHqqtdffQi'12HH$$e, 	C66#;38;*@./ +,AaD$&&)SVTVVAY*O *@ "A ADdNF	 zz&!! I*@s    ,F'5F,Nr=   )r(  r)  r*  r	  r  r+  rn   rY   r|  r|  [	  s    8"rn   r|  c                   n   e Zd Zd ZefdZefdZd Zd Zd Z	d Z
d Zd	 Zd
 Zd ZefdZd Zd Zd Zd Zej*                  j-                  dddg      ej*                  j-                  dddg      d               Zej*                  j-                  dddg      d        Zd Zd Zd Zd Zd Zd Zy) TestNdBSplinec                 D   t         j                  j                  d      }d\  }}d}t        j                  |j	                  ||z   dz               }|j	                  ||f      }|j                  |      }|j                  |      }t        |||      }t        |f||      }	|j	                  d      }
|j                  |
      }
t         |	|
d d d f          ||
      d        |	|
d d d f         j                  |
j                  d	   |j                  d   fk(  sJ y )
Nr  rE   r   r0   r   r  ry   rz   r   )
rM   rT   r  r   r  rS   r   r   r   r   )rU   rV   r   rW   r6   n_trr4   r5   rX   nbxis              rY   test_1DzTestNdBSpline.test_1D	  s   ii##E*1GGCKKQUQYK/0KKaYK'JJqMJJqMAq!tQ"[[b[!ZZ^ 	2ag;"E	+"QW+$$!aggaj(AAAArn   c                    |j                  d      }|dz  }t        ||d      }|dz  d|z  z   }t        ||d      }|j                  |j                  f}|j                  d d d f   |j                  d d d f   z  }||dfS )Nr   r=   rZ  r;   rQ   r   r4   r5   	rU   rV   r}   r   r9  y_1r  t2r  s	            rY   make_2d_casezTestNdBSpline.make_2d_case	  s    IIaLqD A+dQqSj"1cQ/eeUWWUU1d7^eggdAg..2qyrn   c                 n   |j                  d      }|dz  }t        ||d      }|j                  d|j                        dz   }|dz  d|z  z   }t        ||d      }|j                  |j                  f}|j                  d d d f   |j                  d d d f   z  }|||j
                  |j
                  fS )Nr   r=   rZ  r   rG   r  r;   )rQ   r   rR   r4   r5   r6   r  s	            rY   make_2d_mixedzTestNdBSpline.make_2d_mixed	  s    IIaLqD A+IIarzzI*S0dQqSj"1cQ/eeUWWUU1d7^eggdAg..2suuegg%%rn   c                    g d}| j                  |      \  }}}|D cg c]  \  }}|dz  |dz  d|z  z   z   }}}|D 	
cg c]D  }	t        |	|D 
cg c]  }
t        j                  |
       c}
t        j                  |      |      F }}	}
t        j                  |t        j                        }t        |j                  |      |j                  ||j                        dd       t        ||d	      } ||      j                  t        |      fk(  sJ t         ||      |j                  ||j                        d
       t        j                  |      }t        j                  |d<   |j                  |      }t        |j                   ||            |j                  g d             t        j                  j                  d      }|j                  d      dz  }|j                  |      } ||      }|j                  dk(  sJ |j                  |d      j                   }|d   |d   }}t        t#        ||      |dz  |dz  d|z  z   z  d
       y c c}}w c c}
w c c}
}	w )Nr  rD   )rD   r0   )r   r  rx   r=   r;   rG   Fry   r/  r^   rZ  rz   r  )TFFr  )r>   r=   r;   r   r   )r>   r=   )r9   r;   )r   .)r0   .)r  rv  rM   rS   rR   r   r   r   rD  rO   r   r   rT   r  r  r   r  r   )rU   rV   r  r  r  r6   r}   r   targetr   r   r
  bspl2r   r  rrrs                   rY   test_2D_separablezTestNdBSpline.test_2D_separable	  s-   /%%%,	B467&1a!Q$!Q$1*%77 

  (*+1A+

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

2

6
<$)"	$ "bA&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B/11qs
+%	9M 8
 ,
s   I#I.I).I.)I.c                 >   d}g d}|D cg c]  \  }}|dz  |dz  d|z  z   z   }}}| j                  |      \  }}}	|j                  ||||fd      }
d}t        ||
d      } ||      } t        |||	      |      }|j                  dk(  sJ t	        ||j                  |gd	z        d
        ||      j                  t        j                  |      d d |j                  j                  |d  z   k(  sJ t	         ||      |j                  ||j                        d d d f   dd       |j                  |
d      }t        ||d      } ||      }|j                  dk(  sJ |j                  d|j                        |z  }t	        ||d
        ||      j                  t        j                  |      d d |j                  j                  |d  z   k(  sJ t	         ||      |j                  ||j                        d d d d f   dd       y c c}}w )Nr;   r  r=   rx   r  r  rZ  r>   r>   ry   rz   r9   rG   FgvIh%,=r  r   r   r;   r;   )r;   r;   )r  r   r   r   r   rM   r5   rS   rR   r   r  )rU   rV   r"  r  r}   r   r  r  r  r6   c2_4r   bspl2_4r  
val_singlec2_22bspl2_22
target2_22s                     rY   test_2D_separable_2z!TestNdBSpline.test_2D_separable_2	  s   /467&1a!Q$!Q$1*%77%%%,	BxxRR(qx1B*)Yr2q)"-
||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   Hc                    g d}|D cg c]  \  }}|dz  |dz  d|z  z   z   }}}|D cg c]
  }|d|z  z    }}| j                  |      \  }}}	|dz  }|j                  ||||fd      }
d}t        ||
d	      } ||      } t        |||	      |      }|j                  d
k(  sJ t	        ||j                  |gdz        d       y c c}}w c c}w )Nr  r=   r;   y               @rx   r  r  r  rZ  r  r>   ry   rz   )r  r   r   r   r   )rU   rV   r  r}   r   r  r4   r  r  r6   r  r   r  r  r  s                  rY   test_2D_separable_2_complexz)TestNdBSpline.test_2D_separable_2_complex%
  s    /467&1a!Q$!Q$1*%77$*+q!bd(++%%%,	B6]xxRR(qx1B*)Yr2q)"-
||t###*a0u	> 8+s
   CCc                    t         j                  j                  d      }d}t         j                  ddddt        j                  |j                  d            dz  ddddf	   }t         j                  ddddt        j                  |j                  d            dz  ddddf	   }|j                  |j                  |z
  dz
  |j                  |z
  dz
  f      }t        ||f||	      }d
}t         ||      t        |||f||      d       t         j                  g dg df   }t         ||      |D cg c]  }t        |||f||       c}d       y c c}w )Nr  r=   r   r   r   r   r>   r0   rZ  )r2   r2   ry   rz   r0   r  r;   皙?g? @)rM   rT   r  r   r   r  r   r   r   rv  r  )	rU   r   r6   rs  rt  r5   r9  r  r   s	            rY   test_2D_randomzTestNdBSpline.test_2D_random8
  sA   ii##E*UU1aArwws{{{':;a?Aq!KLUU1aArwws{{{':;a?Aq!KLKKbggaik27719Q;7K8R!q)B b"Xq!45	B UU;"# $B@BC""r2h15C"	$Cs   7E
c                    | j                         \  }}}}g d}|D cg c]  \  }}|dz  |dz  d|z  z   z   }}}t        ||||f      }	 |	|      j                  t        |      fk(  sJ t	         |	|      |d       y c c}}w )N)ffffff?r  )rD   g333333@)r  r  r=   r;   rZ  ry   rz   )r  r   r   rD  r   )
rU   r  r  kxkyr  r}   r   r  r  s
             rY   test_2D_mixedzTestNdBSpline.test_2D_mixedK
  s    ++-BB1467&1a!Q$!Q$1*%77"bRH-Ry3r7+---b	U	, 8s   Bc                    | j                  |      \  }}}}g d}t        ||||f      }dd dd dd	 d
|z  dfd d
|z  dfd dd|z  fd dd|z  fd d|z  d
|z  fd i}|j                         D ]y  \  }	}
|j                  |D cg c]  \  }} |
||       c}}|j                        } |||	      }t        ||d        |j                  |	      |      }t        ||d       { dD ]M  }t        t              5   |||       d d d        t        t              5  |j                  |       d d d        O y c c}}w # 1 sw Y   ;xY w# 1 sw Y   lxY w)Nrx   r  rZ  r  c                 *    d| dz  z  |dz  d|z  z   z  S Nr=   r;   r+  r}   r   s     rY   r  z2TestNdBSpline.test_2D_derivative.<locals>.<lambda>[
  s    QTQTAaCZ!8 rn   r0   r0   c                 $    d| dz  z  d|z  dz   z  S r  r+  r  s     rY   r  z2TestNdBSpline.test_2D_derivative.<locals>.<lambda>\
  s    QTQqS1W!5 rn   )r   r   c                 $    | dz  |dz  d|z  z   z  S r  r+  r  s     rY   r  z2TestNdBSpline.test_2D_derivative.<locals>.<lambda>]
  s    AA!!4 rn   r;   r0   c                      yr  r+  r  s     rY   r  z2TestNdBSpline.test_2D_derivative.<locals>.<lambda>^
  r  rn   r   c                      yr  r+  r  s     rY   r  z2TestNdBSpline.test_2D_derivative.<locals>.<lambda>_
  r  rn   r=   c                      yr  r+  r  s     rY   r  z2TestNdBSpline.test_2D_derivative.<locals>.<lambda>`
  r  rn   c                      yr  r+  r  s     rY   r  z2TestNdBSpline.test_2D_derivative.<locals>.<lambda>a
  r  rn   c                      yr  r+  r  s     rY   r  z2TestNdBSpline.test_2D_derivative.<locals>.<lambda>b
  r  rn   rG   r   ry   rz   ))r9   r   r9   r   r0   )	r  r   itemsrS   rR   r   r  rI   rK   )rU   rV   r  r  r  r  r  r  
test_casesr   expected_fnr}   r   expected_valsdirect
via_methodbad_nus                    rY   test_2D_derivativez TestNdBSpline.test_2D_derivativeT
  s   ++r+2BB1"bRH- 854rT1I~rT1I~"I~"I~rT1R4L.	

  *//1 	COBJJ/12tq!Q"2"** ' M
 2"%FFM> .))"-b1JJEB	C# 	)Fz* %bV$%z* )  () )		) 3% %) )s   EE$EE	E	c           
         t         j                  j                  d      }d\  }}t         j                  ddddt        j                  |j                  d            dz  ddddf	   }t         j                  ddddt        j                  |j                  d            dz  ddddf	   }|j                  |j                  |z
  d	z
  |j                  |z
  d	z
  f      }t         j                  g d
g df   }t        ||f|||f      }t        ||f|||f      }	t         ||      |D 
cg c]
  }
 |	|
       c}
d       y c c}
w )Nr  )r;   r=   r   r   r   r=   r   r>   r0   r  r  rZ  ry   rz   )rM   rT   r  r   r   r  r   r  r   r|  r   rU   r   r  r  rs  rt  r5   r  r  bspl2_0rV   s              rY   test_2D_mixed_randomz"TestNdBSpline.test_2D_mixed_randomz
  s.   ii##E*BUU1aArwws{{{':;a?Aq!KLUU1aArwws{{{':;a?Aq!KLKKbgglQ."q0@AKBUU;"# $ 2r(A"b2b"XqRH5b	/122	@2s   *E
c                    t        j                  d      }t        j                  d      dz   }t        ||dz  d      }t        ||dz  d|z  z   d      }|j                  d d d f   |j                  d d d f   z  }t	        |j
                  |j
                  f||j                  |j                  f      }|dz  d d d f   |dz  d|z  z   d d d f   z  }t        ||f|      }t        j                  ||      D 	
cg c]	  \  }	}
|	|
f }}	}
 ||      }t        j                  |      j                         rJ t        | ||      d       t        |j                  |j                        |d       y c c}
}	w )	Nr   r   r  r=   rZ  r;   ry   rz   )rM   rQ   r   r5   r   r4   r6   r   r  r  r   anyr   r   r   )rU   r}   r   spl_xspl_yr   r   valuesrgir  rX   r  bxis                rY   test_tx_neq_tyzTestNdBSpline.test_tx_neq_ty
  sM   IIaLIIaL3"1ada0"1adQqSjA6WWQWa 00%''577+R%''5771CDQ$4AqD1Q3Ja#88%q!ff5!*!2!21a!89Aq!f992h88C=$$&&&SW51FLL16F :s   <E6c                    |j                  d      }|dz  }t        ||d      }|dz  d|z  z   }t        ||d      }|dz  d|z  z   dz   }t        ||d      }|j                  |j                  |j                  f}	|j                  d d d d f   |j                  d d d d f   z  |j                  d d d d f   z  }
|	|
dfS )Nr   r=   rZ  r;   r0   r  )rU   rV   r}   r   r9  r  r  y_2r  r  r  s              rY   make_3d_casezTestNdBSpline.make_3d_case
  s    IIaLqD A+dQqSj"1cQ/dQqSj1n"1cQ/eeUWWegg&eeAtTM"ggdAtm$%ggdD!m$% 2qyrn   c                    t         j                  j                  d      }|j                  d      dz  \  }}}|dz  |dz  d|z  z   z  |dz  d|z  z   dz   z  }| j	                         \  }}}t        ||d      }	t        |||      D 
cg c]  }
|
 }}
 |	|      }|j                  d	k(  sJ t        ||d
       y c c}
w )Nr  r=   rF   r   r   r=   r;   r0   rZ  rF   ry   rz   )	rM   rT   r  r  r  r   zipr   r   )rU   r   r}   r   r  r  t3c3r6   bspl3r   r  r  s                rY   test_3D_separablezTestNdBSpline.test_3D_separable
  s    ii##E*++7++a/1aAA!$1qs
Q7%%'	B"bA&Q1&Aa&&r||u$$$U3 's   
	B=c                 ^   | j                  |      \  }}}t        ||d      }t        j                  j	                  d      }|j                  d      dz  \  }}}	t        |||	      D 
cg c]  }
|
 }}
|j                  |      }d d	 d
 d d d}|j                         D ]z  \  }}|D cg c]  \  }}} ||||       }}}}|j                  ||j                        }t         |||      |d       t         |j                  |      |      |d       | y c c}
w c c}}}w )Nrx   r=   rZ  r  r  r   r   c                 H    d| dz  z  |dz  d|z  z   z  |dz  d|z  z   dz   z  S )Nr=   r;   r0   r+  r}   r   r  s      rY   r  z2TestNdBSpline.test_3D_derivative.<locals>.<lambda>
  s4    q1a4x1a4!A#:'>!Q$1*q.'Q rn   c                 B    d| z  |dz  d|z  z   z  |dz  d|z  z   dz   z  S Nr   r=   r;   r0   r+  r  s      rY   r  z2TestNdBSpline.test_3D_derivative.<locals>.<lambda>
  s0    q1u1qs
';q!taczA~'N rn   c                 B    d| z  d|dz  z  dz   z  |dz  d|z  z   dz   z  S r  r+  r  s      rY   r  z2TestNdBSpline.test_3D_derivative.<locals>.<lambda>
  s0    q1u!Q$
';q!taczA~'N rn   c                 *    d| z  d|dz  z  dz   z  dz  S )Nr   r=   r;   r+  r  s      rY   r  z2TestNdBSpline.test_3D_derivative.<locals>.<lambda>
  s     q1u!Q$
';a'? rn   c                      yr  r+  r  s      rY   r  z2TestNdBSpline.test_3D_derivative.<locals>.<lambda>
  r  rn   ))r0   r   r   )r;   r   r   )r;   r0   r   )r;   r0   r=   )r;   r0   r>   rG   r   ry   rz   )r  r   rM   rT   r  r  r  rS   r  rR   r   r  )rU   rV   r  r  r6   r  r   r}   r   r  r   xi_npr  r  r   r  xi_yi_zi_r  s                       rY   test_3D_derivativez TestNdBSpline.test_3D_derivative
  s2   %%%,	B"bA&ii##E*++7++a/1a1aL)q))ZZ RNN?*

  *//1 	QOBMRSSMCc[c37SMSJJ}BJJJGME",m%H0E,,R04m%P		Q * Ts   ,	D#1D(
c           
      j   t         j                  j                  d      }d}t         j                  ddddt        j                  |j                  d            dz  ddddf	   }t         j                  ddddt        j                  |j                  d            dz  ddddf	   }t         j                  ddddt        j                  |j                  d            dz  ddddf	   }|j                  |j                  |z
  dz
  |j                  |z
  dz
  |j                  |z
  dz
  f      }t        |||f||	      }t        |||f||	      }d
}	t         ||	       ||	      d       t         j                  g dg dg df   }	t         ||	      |	D 
cg c]
  }
 ||
       c}
d       y c c}
w )Nr  r=   r   r   r   r   r>   r0   rZ  )r2   r2   r0   ry   rz   r  r  g?r  gffffff?)rM   rT   r  r   r   r  r   r   r|  r   r  )rU   r   r6   rs  rt  tzr5   r9  spl_0r  rV   s              rY   test_3D_randomz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Ra1-BB<a0Br7UU;""# $ 	Bb!9%)!9F!9s   F0
c           
          t         j                  j                  d      }d}t         j                  ddddt        j                  |j                  d            dz  ddddf	   }t         j                  ddddt        j                  |j                  d            dz  ddddf	   }t         j                  ddddt        j                  |j                  d            dz  ddddf	   }|j                  |j                  |z
  dz
  |j                  |z
  dz
  |j                  |z
  dz
  f      |j                  |j                  |z
  dz
  |j                  |z
  dz
  |j                  |z
  dz
  f      d	z  z   }t        |||f||
      }t        |||f|j                  |
      }t        |||f|j                  |
      }	t         j                  g dg dg df   }
t         ||
       ||
      d	 |	|
      z  z   d       y )Nr  r=   r   r   r   r   r>   r0   r1   rZ  r  r  r  ry   rz   )rM   rT   r  r   r   r  r   r   r   r   r  r   )rU   r   r6   rs  rt  r  r5   r9  r  r  r  s              rY   test_3D_random_complexz$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 Ra1-BB<15BB<15UU;""# $ 	Br
Rr
]2	@rn   
cls_extrapNTcall_extrapc                 R   | j                         \  }}}t        ||d|      }g dg dg d}	}}t        t        j                  |||	f      \  }}}	t        |||	      D 
cg c]  }
|
 }}
|dz  |dz  d|z  z   z  |	dz  d|	z  z   dz   z  } |||      }t        ||d	
       y c c}
w Nr=   )r6   r   )r9   r   )r8  r  r  )r9   g            @r;   r0   r   ry   rz   r  r   r|   rM   rS   r  r   )rU   r  r   r  r  r6   r  r}   r   r  r   r  r  r  s                 rY   test_extrapolate_3D_separablez+TestNdBSpline.test_extrapolate_3D_separable
  s     %%'	B"bA:> a1bjj1a),1aQ1&Aa&&AA!$1qs
Q7r{3U3	 's    	B$r   )FT)TNc                 \   | j                         \  }}}|\  }}t        ||d|      }g dg dg d}
}	}t        t        j                  ||	|
f      \  }}	}
t        ||	|
      D cg c]  }| }}|dz  |	dz  d|	z  z   z  |
dz  d|
z  z   dz   z  } |||      }t        ||d	
       y c c}w r  r  )rU   r   r  r  r6   r  r   r  r}   r   r  r   r  r  r  s                  rY   test_extrapolate_3D_separable_2z-TestNdBSpline.test_extrapolate_3D_separable_2  s     %%'	B"(
K"bA:> a1bjj1a),1aQ1&Aa&&AA!$1qs
Q7r{3U3	 's   %	B)c                    | j                         \  }}}t        ||d      }g dg dg d}}}t        t        j                  |||f      \  }}}t        |||      D cg c]  }| }	}|dz  |dz  d|z  z   z  |dz  d|z  z   dz   z  }
 ||	d	      }t        j                  |d
         sJ t        j                  |d         sJ t        |dd |
dd d       y c c}w )Nr=   rZ  )r  r0   r   )r8  r   r  )r9   r  r  r;   r0   Fr   r   r9   ry   rz   )r  r   r|   rM   rS   r  r   r   )rU   r  r  r6   r  r}   r   r  r   r  r  r  s               rY   #test_extrapolate_false_3D_separablez1TestNdBSpline.test_extrapolate_false_3D_separable  s    %%'	B"bA& nna1bjj1a),1aQ1&Aa&&AA!$1qs
Q7ru-xxq	"""xxr
###qfQrl? 's   	Cc           	         | j                         \  }}}t        ||d      }t        j                  ddt        j                  dddt        j                  g      }t        j                  dddt        j                  dd	d	g      }t        j                  d
dddt        j                  ddg      }t        |||      D cg c]  }| }	}|dz  |dz  d|z  z   z  |dz  d|z  z   dz   z  }
t        j                  |      t        j                  |      z  t        j                  |      z  }t        j                  |
|<    ||	      }t        j                  ||         j                         sJ t        ||
d       y c c}w )Nr=   rZ  r  r0   r;   r   r8  r  r  r9   r  ry   rz   )	r  r   rM   rS   rO   r  r   r   r   )rU   r  r  r6   r  r}   r   r  r   r  r  r   r  s                rY   test_x_nan_3DzTestNdBSpline.test_x_nan_3D-  sD   %%'	B"bA& JJArvvq!Q78JJCBFFAsC89JJCArvvsC89Q1&Aa&&AA!$1qs
Q7xx{RXXa[(288A;6vvtrxxt%))+++U3 's   >	E<c           	         t         j                  j                  d      }d\  }}t        j                  |j	                  ddd            }t         j
                  |d   f|z  ||d   f|z  f   }t        j                  |j	                  ddd            }t         j
                  |d   f|z  ||d   f|z  f   }|d d d   j                  j                  rJ |d d d   j                  j                  rJ |j	                  |j                  dz  |z
  d	z
  |j                  dz  |z
  d	z
  f
      }|j                  }|j                  j                  rJ t         j                  g dg df   }t        |d d d   |d d d   f|||f      }t        |d d d   |d d d   f|||f      }	t         ||      |D 
cg c]
  }
 |	|
       c}
d       y c c}
w )Nr  r=   r=   r   r>      r  r9   r;   r0   r   r  r  rZ  ry   rz   )rM   rT   r  r   r  r   flagsc_contiguousr   r  r  r   r|  r   r  s              rY   test_non_c_contiguousz#TestNdBSpline.test_non_c_contiguous?  s   ii##E*BWWS[[QQR[89UUBqE8B;RVIbL01WWS[[QQR[89UUBqE8B;RVIbL01cc7==----cc7==----KKbggqj2o1277A:?Q3FGKHCC77''''UU;"# $ 2cc7BssG,aB8<b1gr#A#w/r2h?b	/122	@2s   :G
c                     | j                         \  }}}t        ||d      }t        d      D ]  }d||   j                  _         d|j                  _        t        ||d      } |d       |d      k(  sJ y )Nr=   rZ  Fr4  )r  r   r   r  	writeable)rU   r  r  r6   r  r  bspl3_s          rY   test_readonlyzTestNdBSpline.test_readonlyX  sy    %%'	B"bA&q 	*A$)BqEKK!	*"2rQ'Y6)#4444rn   c                 r   | j                         \  }}}t        j                  g dg dg      }t        |||      j	                  |||      }t        j                  |||||g      }|j
                  d   |j
                  d   k(  sJ t        |j                         |j                         d       t        t              5  t        j                  g d||gdz         d d d        t        t        d      5  t        j                  d	d
gg||gdz         d d d        y # 1 sw Y   BxY w# 1 sw Y   y xY w)Nr4  )r>   r   r   r   gؗҜ<rz   r=   zData and knots*r  r0   r;   )
r  rM   rS   r   rE  r   r   r  rI   rK   )rU   r  r  r6   r  dmdm1s          rY   test_design_matrixz TestNdBSpline.test_design_matrixd  s   %%'	BZZI./r2q!//B:%%b"q!Qi8xx{bhhqk)))

ckkm%@:& 	:##IrA3q59	: :->? 	9##aVHb1#a%8	9 	9	: 	:	9 	9s   D!9D-!D*-D6c           
         t         j                  j                  d      }d}t         j                  ddddt        j                  |j                  d            dz  ddddf	   }t         j                  ddddt        j                  |j                  d            dz  ddddf	   }t         j                  ddddt        j                  |j                  d            dz  ddddf	   }|j                  |j                  |z
  dz
  |j                  |z
  dz
  |j                  |z
  dz
  f      }t        |||f||	      }d
 }t        d||       y )Nr  r=   r   r   r   r   r>   r0   rZ  c                 L    t         j                  g dg dg df   } ||       y )Nr  r  r  )rM   r  )r   r9  r  s      rY   rw  z1TestNdBSpline.test_concurrency.<locals>.worker_fn}  s&    {&&' (B Grn   rh   )	rM   rT   r  r   r   r  r   r   r(   )	rU   r   r6   rs  rt  r  r5   r9  rw  s	            rY   rx  zTestNdBSpline.test_concurrencys  s+   ii##E*UU1aArwws{{{':;a?Aq!KLUU1aArwws{{{':;a?Aq!KLUU1aArwws{{{':;a?Aq!KLKKbggaik27719Q;	!DKERa1-	 	 Is3rn   )r(  r)  r*  r  rM   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rc   r  r  r  r  r
  r  r  r  r  rx  r+  rn   rY   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4rn   r  c                   <   e Zd Zd Zd Zej                  j                  dg d      d        Zd Z	d Z
d Zd	 Zej                  j                  d
ej                  ej                  g      d        Zd Zej                  j                  dg d      d        Zd Zy)
TestMakeNDc                    t        j                  d      }t        j                  d      dz   }|d d d f   dz  |dz  d|z  z   d d d f   z  }t        j                  ||      D cg c]	  \  }}||f }}}t	        ||f|d      }t         ||      |j                         d       t        ||dz  d      }t        ||dz  d|z  z   d      }	|j                  d d d f   |	j                  d d d f   z  }
t        |
|j                  d	d
       d
dl	m
}  |||f|d      }t         ||       ||      d       y c c}}w )Nr   r   r=   r;   r0   rZ  r\   rz   r^  r   r]   )r   linearr  ry   )rM   rQ   r  r  r)   r   ravelr   r5   scipy.interpolater   )rU   r}   r   r  r  rX   r  r   r  r  r   RGIr  s                rY   test_2D_separable_simplez#TestMakeND.test_2D_separable_simple  s1   IIaLIIaL31d7Q!Q$1*dAg!66!*!2!21a!89Aq!f99Aq66Q/R&,,.u= #1ada0"1adQqSjA6WWQWa 00DFFQ7 	E1a&&2Bb6 :s   &D?c                    t        j                  d      }t        j                  d      }t        j                  ||      D cg c]	  \  }}||f }}}|d d d f   dz  |dz  d|z  z   d d d f   z  }t        j                  ||||f      }t        ||f|dt        j                        } ||      }	t        j                  ||||f      j                  t              }
|	j                  dk(  sJ t        |	j                  ddd      |
d       |j                  d	      }t        ||f|dt        j                        } ||      }	|	j                  d
k(  sJ t        |	j                  dddd      |
j                  d	      d       y c c}}w )Nr   r=   r;   r6   solver)$   r>   r>   ry   rz   r  )r(  r;   r;   )rM   rQ   r  r  r	  r)   sslspsolver  r  r   r   r   )rU   r}   r   r  rX   r  r  values4r   r  r  values22s               rY   test_2D_separable_trailing_dimsz*TestMakeND.test_2D_separable_trailing_dims  si   IIaLIIaL!*!2!21a!89Aq!f99 1d7Q!Q$1*dAg!66))VVVV<=Aq67aDbFFFF;<CCEJ||w&&&q!Q/U	, ??<0Aq68qEb||z)))q!Q2|45	B' :s   F	r6   )r  r  )r=   r0   )r0   r=   r  c                 ~   t        j                  d      }t        j                  d      dz   }t        j                  ||      D cg c]	  \  }}||f }}}|dz  d d d f   |dz  d|z  z   d d d f   z  }t	        ||f||t
        j                        }t         ||      |j                         d       y c c}}w )	Nr   r   r  r=   r;   r&  r\   rz   )	rM   rQ   r  r  r)   r)  r*  r   r!  )	rU   r6   r}   r   r  rX   r  r  r   s	            rY   r  zTestMakeND.test_2D_mixed  s     IIaLIIaL3!*!2!21a!89Aq!f99Q$4AqD1Q3Ja#88Aq66Qs{{CR&,,.u=	 :s   B9c                 *   t        j                  d      }t        j                  d      dz   }t         j                  |d<   |d d d f   dz  |dz  d|z  z   d d d f   z  }t        t              5  t        ||f|d       d d d        y # 1 sw Y   y xY w)Nr   r   r9   r=   r;   r0   rZ  )rM   rQ   rO   rI   rK   r)   )rU   r}   r   r  s       rY   test_2D_nanszTestMakeND.test_2D_nans  s    IIaLIIaL3"1d7Q!Q$1*dAg!66:& 	-A!,	- 	- 	-s   /B		Bc           	          t        j                  g d      }t        j                  g d      }t        j                  g dg dg dg dg dg dg      }|||fS )N)r   r@   rA   rB   r  r  )r0   r;   r0   r;   r0   r0   )r0   r;   r=   r;   r0   r0   )r0   r;   r;   r;   r0   r0   )rM   rT  )rU   r}   r   r  s       rY   _get_sample_2d_datazTestMakeND._get_sample_2d_data  sR    HH./HH./HH""""""	
 !Qwrn   c                     | j                         \  }}}t        ||f|d      }t        ||f|d      }t        j                  g dg dg      j
                  }t         ||       ||      d       y )	Nr0   rZ  r   r  r0   gffffff@g333333@r   ffffff
@333333?r=   r0   r5  r6  rB   rb  r2   r=   ry   rz   r2  r)   r   rM   rT  r  r   rU   r}   r   r  r   r  r  s          rY   test_2D_vs_RGI_linearz TestMakeND.test_2D_vs_RGI_linear  sq    **,1aAq61*%q!faAXX668 99: 	 	R#b'6rn   c                    | j                         \  }}}t        ||f|dt        j                        }t	        ||f|d      }t        j                  g dg dg      j                  }t         ||       ||      d       y )	Nr=   r&  cubic_legacyr  r4  r7  ry   rz   	r2  r)   r)  r*  r   rM   rT  r  r   r9  s          rY   test_2D_vs_RGI_cubiczTestMakeND.test_2D_vs_RGI_cubic  sw    **,1aAq61#++>%q!faGXX668 99: 	 	R#b'6rn   r'  c                     | j                         \  }}}t        ||f|d|d      }t        ||f|d      }t        j                  g dg dg      j
                  }t         ||       ||      dd	
       y )Nr=   ư>)r6   r'  r_   r<  r  r4  r7  ry   r   r]   r8  )rU   r'  r}   r   r  r   r  r  s           rY   test_2D_vs_RGI_cubic_iterativez)TestMakeND.test_2D_vs_RGI_cubic_iterative  sy     **,1aAq61&tD%q!faGXX668 99: 	 	R#b'DArn   c                    | j                         \  }}}t        ||f|dt        j                        }t	        ||f|d      }t        j                  g dg dg      j                  }t         ||       ||      d       y )	Nr   r&  quintic_legacyr  r4  r7  ry   rz   r=  r9  s          rY   test_2D_vs_RGI_quinticz!TestMakeND.test_2D_vs_RGI_quintic  sx    **,1aAq61#++>%q!fa8HIXX668 99: 	 	R#b'6rn   zk, meth))r0   r   )r=   r<  )r   rC  c                    t         j                  j                  d      }t        j                  |j	                  d            }t        j                  |j	                  d            }t        j                  |j	                  d            }|j	                  d      }t        |||f||t        j                        }t        |||f||      }	t         j                  j	                  d	d
d      }
t         ||
       |	|
      d       y )Ni@ r   r   r   r   r0  r&  r  gffffff?r  rE   r  ry   rz   )
rM   rT   r  cumsumr  r)   r)  r*  r   r   )rU   r6   methrndmr}   r   r  r  r   r  r  s              rY   test_3D_random_vs_RGIz TestMakeND.test_3D_random_vs_RGI  s     yy$$V,IIdlll*+IIdlll*+IIdlll*+9-Aq!9f#++F%q!QiEYY3Sw?R#b'6rn   c                 :   | j                         \  }}}ddi}t        t        d      5  t        ||f|fddi| d d d        t        t        d      5  t        ||ft	        j
                  ||f      fddi| d d d        y # 1 sw Y   JxY w# 1 sw Y   y xY w)Nmaxiterr0   r'  r  r6   r=   )r2  rI   rK   r)   rM   r	  )rU   r}   r   r  solver_argss        rY   test_solver_err_not_convergedz(TestMakeND.test_solver_err_not_converged  s    **,1a !n:X6 	7A6Q6+6	7 :X6 	GA		1a& 1FQF+F	G 	G	7 	7	G 	Gs   B'BBBN)r(  r)  r*  r$  r-  rc   r  r  r  r0  r2  r:  r>  r)  gmresgcrotmkrA  rD  rI  rM  r+  rn   rY   r  r    s    7(B4 [[S"JK> L>- 77 [[X		3;;'?@B AB7 [[N77Grn   r  c                   H    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)
TestFpchecc                    d}t        j                  d      j                  dd      }t        j                  d      }t        j                  t
        d      5  t        j                  |||       d d d        t        j                  t
        d      5  t        j                  |||       d d d        y # 1 sw Y   ExY w# 1 sw Y   y xY w)Nr0   r  r;   r   z1D sequencer  )rM   rQ   r   rc   r   rK   _bfpcheckrU   r6   r4   r}   s       rY   test_1D_x_tzTestFpchec.test_1D_x_t#  s    IIbM!!!Q'IIbM]]:]; 	 JJq!Q	  ]]:]; 	 JJq!Q	  	 	  	 	  	 s   B4C 4B= C	c                    d}d|dz   z  dz
  }|dz   }t        j                  |      }t        j                  |      }t        j                  |||      dk(  sJ t	        j
                  t        d      5  t        j                  |||       d d d        d|dz   z  dz   }||z
  dz
  }t        j                  |      }t        j                  |      }t        j                  |||      dk(  sJ t	        j
                  t        d      5  t        j                  |||       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr=   r;   r0   rF   rh   z	Need k+1*r  )	rM   rQ   dfitpackfpchecrc   r   rK   rS  rT  )rU   r6   rW   r  r4   r}   s         rY   test_condition_1zTestFpchec.test_condition_1.  s   AY]FIIaLIIaLq!Q'2---]]:[9 	 JJq!Q	  qsGaKEAIIIaLIIaLq!Q'2---]]:[9 	 JJq!Q	  	 	  	 	  	 s   4D)D5)D25D>c                    d}dg|dz   z  dgz   dg|dz   z  z   }g d}t        j                  |||      dk(  sJ t        j                  |||      J |j	                         }|d   |d<   t        j                  |||      dk(  sJ t        j                  t        d	
      5  t        j                  |||       d d d        |j	                         }|d   |d<   t        j                  |||      dk(  sJ t        j                  t        d
      5  t        j                  |||       d d d        y # 1 sw Y   yxY w# 1 sw Y   y xY w)Nr=   r   r0   r;   r   )r0   r;   r=   r>   r  r9   r   zLast k knots*r  zFirst k knots*rX  rY  rS  rT  r  rc   r   rK   )rU   r6   r4   r}   tts        rY   test_condition_2zTestFpchec.test_condition_2C  s:    C1IOqc1Q3i'q!Q'1,,,zz!Q"***VVXA2q"a(B...]]:_= 	!JJq"a 	! VVX21q"a(B...]]:-=> 	!JJq"a 	! 	!	! 	!	! 	!s   "D2D>2D;>Ec                    d}dg|dz   z  ddgz   dg|dz   z  z   }g d}t        j                  |||      dk(  sJ t        j                  |||      J dg|dz   z  ddgz   dg|dz   z  z   }t        j                  |||      dk(  sJ t	        j
                  t        d	      5  t        j                  |||       d d d        y # 1 sw Y   y xY w)
Nr=   r   r0   r;   r   r0   r;   r=   r  r>   r     zInternal knots*r  )rX  rY  rS  rT  rc   r   rK   rU  s       rY   test_condition_3zTestFpchec.test_condition_3Y  s    C1IA!ac*"q!Q'1,,,zz!Q"***C1IA!ac*q!Q'2---]]:->? 	 JJq!Q	  	  	 s   #CCc                 2   d}dg|dz   z  dg|dz   z  z   }g d}t        j                  |||      dk(  sJ t        j                  |||      J |j	                         }|d   |d<   t        j                  |||      dk(  sJ t        j                  |||      J |j	                         }|d   dz
  |d<   t        j                  |||      dk(  sJ t        j                  t        d      5  t        j                  |||       d d d        |j	                         }|d	   dz   |d	<   t        j                  |||      dk(  sJ t        j                  t        d      5  t        j                  |||       d d d        y # 1 sw Y   |xY w# 1 sw Y   y xY w)
Nr=   r   r0   r   r`  r?  zOut of bounds*r  r9   r\  )rU   r6   r4   r}   rk   s        rY   test_condition_4zTestFpchec.test_condition_4f  s    C1IQqS	!"q!Q'1,,,zz!Q"***VVX!1r1a(A---zz!Q"***VVX!q1r1a(B...]]:-=> 	!JJr1a 	! VVX22r1a(B...]]:-=> 	!JJr1a 	! 	!	! 	!	! 	!s   .F FF
Fc                    d}g d}g d}t        j                  |||      dk(  sJ t        j                  t        d      5  t        j                  |||       d d d        g d}t        j                  |||      dk(  sJ t        j                  t        d      5  t        j                  |||       d d d        y # 1 sw Y   exY w# 1 sw Y   y xY w)Nr0   )r   r   r0   r;   r;   )r  r  r  rw   Schoenberg-Whitney*r  )r   r   r   rX  rY  rc   r   rK   rS  rT  rU  s       rY   test_condition_5_x1xmz TestFpchec.test_condition_5_x1xm  s    q!Q'2---]]:-BC 	 JJq!Q	  q!Q'2---]]:-BC 	 JJq!Q	  	 	  	 
	  	 s   B>C
>C
Cc                     d}g d}ddg}t        j                  |||      dk(  sJ t        j                  |||      J y )Nr0   )r   r   r0   r0   r   g333333?r   )rX  rY  rS  rT  rU  s       rY   test_condition_5_k1zTestFpchec.test_condition_5_k1  sI    #Jq!Q'1,,,zz!Q"***rn   c                    d}dg|dz   z  dgz   dg|dz   z  z   }dgdz  }t        j                  |||      dk(  sJ t        j                  t        d      5  t        j                  |||       d d d        dg|dz   z  dgz   dg|dz   z  z   }dgdz  }t        j                  |||      dk(  sJ t        j                  t        d      5  t        j                  |||       d d d        y # 1 sw Y   ~xY w# 1 sw Y   y xY w)	Nr=   r   r0   r;   r   rw   rf  r  rg  rU  s       rY   test_condition_5_1zTestFpchec.test_condition_5_1  s
   C1IOqc1Q3i'CEq!Q'2---]]:-BC 	 JJq!Q	  C1IOqc1Q3i'CEq!Q'2---]]:-BC 	 JJq!Q	  	 	  	 	  	 s   C,C8,C58Dc                    d}dg|dz   z  ddgz   dg|dz   z  z   }dgdz  dgz   }t        j                  |||      dk(  sJ t        j                  t        d	
      5  t        j                  |||       d d d        dgdz  ddgz   }t        j                  |||      dk(  sJ t        j                  |||      J y # 1 sw Y   JxY w)Nr=   r   r0   r;   r   r  r>   rw   rf  r  rg  rU  s       rY   test_condition_5_2zTestFpchec.test_condition_5_2  s    C1IA!ac*E!GqcMq!Q'2---]]:-BC 	 JJq!Q	  E!Gq!fq!Q'1,,,zz!Q"***	  	 s   B==Cc                     d}g d}g d}t        j                  |||      dk(  sJ t        j                  t        d      5  t        j                  |||       d d d        y # 1 sw Y   y xY w)Nr0   )	r   r   r;   r=   r>   r   r   r   r   )r0   r0   r0   @rp  rp  r  rw   rf  r  rg  rU  s       rY   test_condition_5_3zTestFpchec.test_condition_5_3  s`    ')q!Q'2---]]:-BC 	 JJq!Q	  	  	 s   A##A,N)r(  r)  r*  rV  rZ  r^  rb  rd  rh  rj  rl  rn  rq  r+  rn   rY   rQ  rQ     s4    	  *!, !> + + rn   rQ  c                    t        j                  | |||        }t        t        |      dz
        D cg c]  }|||   ||dz       j	                           }}||dd    }t        t        |            D ]'  }||   dz  }||xx   |z  cc<   ||dz   xx   |z  cc<   ) |dxx   |d   z  cc<   t        t	        |      t	        |      d       ||fS c c}w )z)Split the knot interval into "runs".
    r0   r9   r;   r\   rz   )rM   r  r   rD  r  r   )	r}   r4   r6   	residualsrp  r  fpartscarriescarrys	            rY   _splitrw    s     
AaG	$B6;CGAI6FGi1b1g&**,GFG1R!G3w<  
Qq	U	qsu
 2J)B-JCKYe<2: Hs   #Cc                 \   t        | |||      \  }}d}d}t        t        |            D ]$  }||dz      ||   z
  dkD  s||   |kD  s|}||   }& |dk(  rt        d      ||   ||dz      z   dz   dz  }	| |	   }
t	        j
                  ||
      }t        j                  |d| |
||d f   }|S )z Insert a new knot given reduals.ig}Ô%Ir0   z5Internal error, please report it to SciPy developers.r;   N)rw  r   rD  rK   rM   r  r   )r}   r4   r6   rs  rt  rp  idx_max	fpart_maxr  idx_newknotnew_knotidx_tt_news                rY   	_add_knotr    s    1a+JFB GI3v; "ac7RU?Q6!9y#8Gq	I"
 $PQQ g;GAI.2q8K~HOOAx(EEE!FU)Xqy01ELrn   c                      e Zd Zd Zej
                  j                  dg d      d        Zd Zd Z	d Z
d Zd	 Zd
 Zd Zej
                  j                  dg d      ej
                  j                  dg d      d               Zd Zd Zy)TestGenerateKnotsc                    t        j                  dt              }|dz  dd|z   z  z   }d}t        j                  dg|dz   z  dg|dz   z  z         }t	        ||||      } ||      |z
  d	z  }d
dlm} |j                  ||||      }t        ||||      }	t        ||	d       t	        ||||      }
 |
|      |z
  d	z  }|j                  ||||      }t        ||||      }t        ||d       y )Nr   rG   r=   r2   r0   r?   r  )r6   r4   r;   r   _fitpack_repror\   rz   )
rM   rQ   r  rT  r   r"  r  add_knotr  r   )rU   r}   r   r6   r4   r9  rs  _frnew_tnew_t_pyspl2
residuals2new_t2	new_t2_pys                 rY   test_split_add_knotz%TestGenerateKnots.test_split_add_knot  s    IIau%qD2q1u:HHbT1Q3Z2$!*,-aa1-VaZ!O	;Q1i0Q1i0xe4 q!qE21gkA%
a:6a:6		6rn   r6   r  c                 0   |j                  d|j                        }|j                  ||j                  z  dz        }t	        t        |||d            d   }t        |||d      d   }|j                  ||j                        }t        ||d       y )Nr   rG   r   r6   r  r9   r\   rz   )	rQ   rR   r  r  r  r$   r   rS   r   )rU   r6   rV   r}   r   r4   r]  s          rY   test_s0zTestGenerateKnots.test_s0  s    IIarzzI*FF1RUU7191Q/04AqA#A&ZZ"**Z-2E*rn   c                     d}|j                  ||j                        }|dz  }t        t        ||dd            }|j	                  t        t        j                  |      d            }t        |d   |d       y )	Nrh   rG   r=   r   r  r9   r\   rz   )rQ   rR   r  r$   rS   r   rM   r   rU   rV   rW   r}   r   knotsrl   s          rY   	test_s0_1zTestGenerateKnots.test_s0_1  sh    IIarzzI*qD^AqA34::k"**Q-;<b	8%8rn   c                     d}|j                  |      }|dz  }t        t        ||dd            }|j                  t	        t        j                  |      d            }t        |d   |d       y )Nr   r=   r   r  r9   r\   rz   )rQ   r  r$   rS   r   rM   r   r  s          rY   test_s0_n20zTestGenerateKnots.test_s0_n20  s_    IIaLqD^AqA34::k"**Q-;<b	8%8rn   c           
          t        j                  d      }|dz  }t        t              5  t	        t        ||ddd             d d d        y # 1 sw Y   y xY w)Nrh   r=   r   r6   r  nest)rM   rQ   rI   rK   r  r$   rU   r}   r   s      rY   test_s0_nestzTestGenerateKnots.test_s0_nest&  sJ    IIbMqD:& 	:1QR89	: 	: 	:s   AAc                    |j                  d|j                        }|j                  |t        j                  z  dz        }d}t        t        |||d            }g dg dg dg d	g d
g}|D cg c]  }|j                  ||j                        ! }}t        |      t        |      k(  sJ t        ||      D ]  \  }}	t        ||	d        t        |||d      \  }}
}
t        |d   |j                  |      d       yc c}w )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   rG   r=   r   r  )r?   r?   r?   r?   r  r  r  r  )	r?   r?   r?   r?   rB   r  r  r  r  
r?   r?   r?   r?   r@   rB   r  r  r  r  )r?   r?   r?   r?   r@   rB   r  r  r  r  r  )r?   r?   r?   r?   r@   rA   rB   rb  r   r  r  r  r\   rz   r9   N)rQ   rR   r  rM   r  r  r$   rS   rD  r  r   r   )rU   rV   r}   r   r6   r  wantedwantr4   r]  r   s              rY   test_s_switchzTestGenerateKnots.test_s_switch-  s    . IIarzzI*FF1RUU719^AqA6726:>A	
 BHH"**T*4HH5zS[(((' 	/EArAr.	/ Ad+1ab	2::a=u= Is   2$Dc                 `    t        t        d            }t        ||dd      }t        |       y )Nr   r  r0   )r  r6   )r  r   r$   next)rU   r}   gens      rY   r  z!TestGenerateKnots.test_list_inputY  s&    qNQSA.S	rn   c           	         |j                  d|j                        }|j                  ||j                  z  dz        }d}t	        t        ||d|d            }t        |d   |j                  g d|j                        d	
       t        t              5  t	        t        ||dd             d d d        y # 1 sw Y   y xY w)Nr   rG   r   r=   rh   r  r9   r  r\   rz   r>   )r6   r  )
rQ   rR   r  r  r  r$   r   rS   rI   rK   )rU   rV   r}   r   r  r  s         rY   	test_nestzTestGenerateKnots.test_nest_  s    IIarzzI*FF1RUU719^AqA<="IJJ?rzzJR	
 :& 	4123	4 	4 	4s   B99Cc           
         t        j                  d      }t        j                  |t         j                  z  dz        }t	        t
              5  t        t        ||t        j                  d                   d d d        t	        t
              5  t        t        ||t        j                  d                    d d d        y # 1 sw Y   MxY w# 1 sw Y   y xY w)Nr   rF   r  )	rM   rQ   r  r  rI   rK   r  r$   r  r  s      rY   r  zTestGenerateKnots.test_weightsp  s    IIaLFF1RUU719:& 	81		"67	8 :& 	6145	6 	6	8 	8	6 	6s   +C,CCCnpts)ra  rw   r   r  )r  {Gz?r   c                    t         j                  j                  d      }dt        j                  |j	                  |            z  }t        j
                  |t         j                  z  dz        t        j                  |dz
  dz         z   }d}t        ||||      d   }t        t        ||||            d	   }t        ||d
       y )Nr  rh   r   r   r;   r=   r  r   r9   r\   rz   )rM   rT   r   r   r  r  r  expr   r  r$   r   )	rU   r  r  rH  r}   r   r6   r4   r]  s	            rY   test_vs_splrepz TestGenerateKnots.test_vs_splrepz  s     yy$$U+rwwt|||.//FF1RUU72:!A#	!221a1"1%.Aa01"5AE*rn   c                 *   d}t        j                  |      }|dz  }t        t        ||dd            }t	        j
                  t              5 }t        ||dd      }d d d        t              dk(  sJ t        |d   d          y # 1 sw Y   ,xY w)N   r=   Jz5r  r0   r9   r   )
rM   rQ   r  r$   rc   warnsRuntimeWarningr   rD  r   )rU   rW   r}   r   r  r  rb   s          rY   test_s_too_smallz"TestGenerateKnots.test_s_too_small  s    IIaLqD ^AqA78\\.) 	-QAe,C	-1v{{b	3q6*	- 	-s   B		Bc                     t        g dg dg dd      }t        j                  t        d      5  t	        |       d d d        y # 1 sw Y   y xY w)N)r?   r2   r@   rA   )rB   rb  r  r  )r?   r?   r?   r?   r0   )r  r  zweights are zeror  )r$   rc   r   rK   r  )rU   r  s     rY   test_zero_weightsz#TestGenerateKnots.test_zero_weights  s=    ]M]aP]]:-?@ 	I	 	 	s   AAN)r(  r)  r*  r  rc   r  r  r  r  r  r  r  r  r  r  r  r  r  r+  rn   rY   r  r    s    70 [[S/2+ 3+99:*>X4"6 [[V]3[[S.1+ 2 4+"+rn   r  c                 Z   | j                   d   }| ||z
  dz
     | |   z
  }|d|z  z
  dz
  }| |dz   ||z
  dz
   }t        j                  |d      }|dddxx   dz  cc<   |dddxx   dz  cc<    t        | t        j                  ||z
  dz
        |      ||      }t        j
                  |dz
  |j                   d   ft              }t        d|j                   d   d      D ]"  }	||	ddf   ||	dz   ddf   z
  ||	dz  ddf<   $ |||z  |z  t        j                  |      z  z  }|S )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   r0   r;   Nr   r   rG   )
r   rM   r  r   rC  emptyr  r   r  	factorial)
r4   r6   rW   deltanrintr  tiir  matrr  s
             rY   
disc_naiver    sD    	

Aa!eaiL1Q4E!GaKE	
1Q3qs1uB
))B
C!HH1II(266!a%!)$a(3A88U1Waggaj)7D1aggaj!$ ,!Q$!AaCF)+QT1W, 	U5[1t~~a000DKrn   c                       e Zd ZdZddZd Zy)F_densezm The r.h.s. of ``f(p) = s``, an analog of _fitpack_repro.F
    Uses full matrices, so is for tests only.
    Nc                    || _         || _        || _        || _        |t	        j
                  |t              n|| _        || _        | j                  j                  dk(  sJ  t        |t	        j                  |j                  d   |z
  dz
        ||      |      }|| j                  d d d f   z  | _        ddlm}	 t!        |	j#                  ||       j%                         | _        |j                  dk(  sJ || j                  z  }
t        j(                  |
t	        j*                  | j&                  j                  d         f   | _        || _        y )NrG   r0   r   r   r  )r}   r   r4   r6   rM   rt   r  r  r   r"  r   rC  r   a_denser"  r  r  discr  b_denser   r5  r   r  )rU   r}   r   r4   r6   r  r  r   r  r  r   s              rY   r	  zF_dense.__init__  s   12au-&vv{{a U'!RVVAGGAJNQ$67TUVW40;#SXXa^4<<> vv{{Z%%BHHT\\%7%7%:;;<rn   c                    t        j                  | j                  | j                  |z  f      }ddlm}m}  ||d      \  }}|j                  | j                  z  }|j                  d   } ||d |d |f   |d |       }	t        | j                  |	| j                  | j                        }
t        j                  | j                  dz   |
| j                         | j"                  z
  dz  z        }|
| _        || j&                  z
  S )Nr   )r  r  economic)r{  r0   r   r;   )rM   vstackr  r  scipy.linalgr  r  r  r   r   r   r4   r6   r   r  r  r}   r   r9  r  )rU   r  abr  r  r5  r  qyr  r5   r9  fps               rY   r  zF_dense.__call__  s    YYdllQ&678 	+":&1SS477]WWQZ!CRC"H+r#2w'dffaT5E5EFVVDFFAITVVtvv!5 99:DFF{rn   )NT)r(  r)  r*  r  r	  r  r+  rn   rY   r  r    s    .rn   r  c                      e Zd ZdZefdZd Zd Zej                  j                  dg d      d        Zd Zej                  j                  dg d      d	        Zej                  j                  d
        Zej                  j                  dg d      d        Zd Zej                  j                  dddg      ej                  j                  dg d      d               Zej                  j                  dddg      d        Zej                  j                  dddg      ej                  j                  dg d      d               Zej                  j                  dg d      ej                  j                  dg d      d               Zej                  j                  dg d      ej                  j                  dg d      d               Zy)_TestMakeSplrepBaseNc                     | j                   dk(  r<|j                  ddt        j                  z  d      }|j	                  |      }d}|||fS |j                  ddd      }|j	                  |dz  dz        dz  }d}|||fS )	Nr   r   r;   rh   gq@H&?r   rF   gQ	@)rA  ri   rM   r  r  )rU   rV   r}   r   r  s        rY   	_get_xyktz_TestMakeSplrepBase._get_xykt  s    <<:%Aqw+AAAa7NAq"%A$
#Q&AAa7Nrn   c           	         t        j                  ddd      }t        j                  ddd      }t        t              5  t	        ||| j
                         d d d        t        t              5  t	        ddd| j
                  	       d d d        t        t              5  t        j                  |j                  dddf      }t	        ||d| j
                  	       d d d        t        j                  d      }t        t              5  t	        ||d
z  |d| j
                         d d d        t        j                  d       }t        t              5  t	        ||d
z  |d| j
                         d d d        t        j                  |j                  d   df      }t        t              5  t	        ||d
z  |d| j
                         d d d        t        t              5  t	        |d d d   |d
z  d| j
                  	       d d d        t        t              5  t	        ||d
z  dd| j
                         d d d        t        t              5  t	        ||d
z  d| j
                  	       d d d        t        t              5  t	        ||d
z  d
dd| j
                         d d d        t        t              5  t	        ||d
z  dd| j
                         d d d        t        t              5  t	        t        j                  d      t        j                  d      d| j
                  	       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xxY w# 1 sw Y   ;xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   \xY w# 1 sw Y   5xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   rh   rF   r  re  r0   r;   r  r  rA  r=   )r  r  rA  r9   rD   r6   r  rA  )r6   r  r  rA  )r  r  rA  r   	   )rM   ri   rI   rK   r%   rA  r  r   r   rJ   rQ   rU   r}   r   r  s       rY   test_input_errorsz%_TestMakeSplrepBase.test_input_errors  s,   KK2r"KK2r":& 	41dll3	4 :& 	;1T\\:	; :& 	;Aq)*A1T\\:	;
 GGBK:& 	C1a41T\\B	C WWR[L:& 	C1a41T\\B	C GGQWWQZO$:& 	C1a41T\\B	C :& 	D$B$AdllC	D 9% 	E1a43#t||D	E :& 	=1a42t||<	= :& 	K1a411T\\J	K :& 	E1a412t||D	E :& 	Q		!biilc4<<P	Q 	Qa	4 	4	; 	;	; 	;	C 	C
	C 	C
	C 	C	D 	D	E 	E	= 	=	K 	K	E 	E	Q 	Qs   L8.M=MMM,,M9!#NNN N-:N:/A O8MMMM),M69NNN N*-N7:OOc           	      x   t        t        ||||| j                              d   }t        ||||| j                        }t        |||||| j                        }t	        |j
                  |j
                  d       t	        |j                  |j                  d       |j                  |j                  k(  sJ y )Nr  r9   )r4   r6   r  rA  r\   rz   )r  r$   rA  r%   r   r4   r5   r6   )rU   r}   r   r6   r  r4   spl_autospl_ts           rY   _test_with_knotsz$_TestMakeSplrepBase._test_with_knots2  s    1QEFrJq!qAt||DAqAaF

EGG%8

EGG%8zzUWW$$$rn   r6   r0   r;   r=   r>   r   r   c                 T    | j                         \  }}}| j                  ||||       y r  )r  r  )rU   r6   r}   r   r  s        rY   test_with_knotsz#_TestMakeSplrepBase.test_with_knots<  s(    .."1aaAq)rn   c                 V   t        |||| j                        }t        |||| j                        }t        t	        |||| j                              d   }t        |j                  |j                  d       t        |j                  |d       t        |j                  |d       y )Nr@  r9   r\   rz   )r%   rA  r   r  r$   r   r5   r4   )rU   r}   r   r6   r9  spl_ir4   s          rY   _test_default_sz#_TestMakeSplrepBase._test_default_sB  s|    !Q!T\\:"1a1dllC14<<@A"EuwwU3qu-/rn   c                 R    | j                         \  }}}| j                  |||       y r  )r  r  )rU   r6   r}   r   r   s        rY   test_default_sz"_TestMakeSplrepBase.test_default_sK  s&    .."1aQ1%rn   c           	          d}| j                   dk(  r>t        j                  ddt        j                  z  d      }t        j                  |      }nt        j
                  d      }|dz  }t        j                         5  t        j                  dt               t        ||d|| j                   dk(        }d d d        t        j                         5  t        j                  dt               t        ||d|| j                   	      }d d d        t        j                  d          t        t        j                  |j                  dg|j                   d
z   z  f   |d
   d       y # 1 sw Y   xY w# 1 sw Y   nxY w)NgKH9r   r   r;   r  r=   r7   r6   r  r  r  r0   r.  rz   )rA  rM   ri   r  r  rQ   warningscatch_warningssimplefilterr  r   r%   r   r4   r   r5   r6   )rU   r  r}   r   rb   r9  s         rY   r  z$_TestMakeSplrepBase.test_s_too_smallP  sB    <<:%Aqw+Aq	A		"A1A$$& 	K!! Aadllj.HJC	K $$& 	D!! aa1dllCC	D 	s1v&ceeaS#%%']23AU	,	K 	K	D 	Ds   >8E(5E4(E14E=r4  c                 $   d}| j                   dk(  r>t        j                  ddt        j                  z  |      }t        j                  |      }nt        j
                  |      }|dz  }t        |||| j                         }t        |||d| j                         }|j                  j                  d	k(  sJ |j                  j                  d	k(  sJ t        ||d	d	|z   z  z   |d| j                         }|j                  j                  d	k(  sJ y )
Nrh   r   r   r;   r=   r@  h㈵>r  r0   )	rA  rM   ri   r  r  rQ   r%   r5   r"  )rU   r6   rW   r}   r   r9  r  r  s           rY   
test_shapez_TestMakeSplrepBase.test_shapem  s     <<:%Aqw*Aq	A		!A1A!Q!T\\:AqAt||DuuzzQww||q    Aq1ac7{a4Nww||q   rn   c                     d}ddt         j                  z  }}t        j                  |||dz         }t        j                  |      }t	        t
              5  t        ||dd       d d d        y # 1 sw Y   y xY w)Nrh   r   r;   r0   :0yE>nonsenser  )rM   r  ri   r  rI   rK   r%   rU   Nr  rX   r}   r   s         rY   test_error_on_invalid_bc_typez1_TestMakeSplrepBase.test_error_on_invalid_bc_type  sf    !BEE'1KK1a!e$FF1I:& 	:1j9	: 	: 	:s   A//A8rA  r   r  c           	         t        j                  ddt         j                  z  d      }t        j                  |      }t        j                  ddt	        |            }t        ||||d|dk(        }t        |||d||	      }t        |j                  |d          t        t         j                  |j                  dg|j                  dz   z  f   |d   d
       y )Nr   r;   rh   r0   r   r  r   r  r6   r  r  r  r  r6   rA  rz   )rM   ri   r  r  rD  r   r%   r   r4   r   r5   r6   )rU   rA  r6   r}   r   r  rb   r9  s           rY   %test_make_splrep_with_unequal_weightsz9_TestMakeSplrepBase.test_make_splrep_with_unequal_weights  s     KK1RUU7B'FF1IKK1c!f%QQ!t'Z2GI!Q!tq'Bs1v&ceeaS#%%']23AT	+rn   c           	         d }t        j                  ddt         j                  z  d      }t        j                  |      }t         j                  ||f   j
                  \  }}|j                  j                  du sJ |j                  j                  du sJ t        j                  ddt        |            }t         j                  ||f   j
                  \  }}	|j                  j                  du sJ t        |||dd	|d
k(        }
t        |||d	d|      } |||
       t        |||d	d|      } |||
       t        |||d	d|      } |||
       t        |||d	d|      } |||
       y )Nc                     t        | j                  |d          t        t        j                  | j                  dg| j
                  dz   z  f   |d   d       y )Nr   r0   r  rz   )r   r4   rM   r   r5   r6   )r9  rb   s     rY   checkzO_TestMakeSplrepBase.test_make_splrep_with_non_c_contiguous_input.<locals>.check  sG    CEE3q6*BEE#%%!ceeAg"67F/rn   r   r;   rh   Fr0   r   r=   r  r   r  r  )rM   ri   r  r  r  r  r  r  rD  r   r%   )rU   rA  r  r}   r   r   r  r  w1r   rb   r9  s               rY   ,test_make_splrep_with_non_c_contiguous_inputz@_TestMakeSplrepBase.test_make_splrep_with_non_c_contiguous_input  s\   	/ KK1RUU7B'FF1Iq!tB xx$$---xx$$---KK1c!f%adA xx$$---QQ!t'Z2GI "a17Cc3 !R17Cc3 !Q"7Cc3 "bB$!")+c3rn   c                 |   t        j                  ddd      }t        j                  dt         j                  z  |z        }|d   |d   }}d}d}t        j                  |g|dz   z  |g|dz   z  z         }t        |||||||d |	      }	t        |	t              sJ |	j                  j                  d   d|dz   z  k(  sJ |	j                  |k(  sJ t        |	j                  d |dz    t        j                  |g|dz   z               t        |	j                  |dz    d  t        j                  |g|dz   z               y )	Nr   r0   rh   r;   r9   r=   r  )xbxer6   r  r4   r  rA  )rM   ri   r  r  rT  r%   r   r   r4   r   r6   r   rS   )
rU   rA  r6   r}   r   r  r  r  r4   r9  s
             rY   %test_make_splrep_impl_no_optimizationz9_TestMakeSplrepBase.test_make_splrep_impl_no_optimization  s/    KK1b!FF1ruu9q=!1quB HHbTQU^rda!en45 !Q2"qtW> #w'''uu{{1~a!e,,,uuzzdqsRZZA%?@!fg

B41q5>(BCrn   rW   )r   3   r  rF   r  )rh   r   r   r0   r  c           
      l   t         j                  j                  d      }t         j                  dt        j                  |j                  ddt         j                  z  |dz
              dt         j                  z  f   }t        j                  |      t        j                  |      z   }t        |||| j                  dk(        \  }}}t        |||| j                        }	|dk(  r|d	k(  r| j                  dk(  s8t        |	j                  |d
       t        |	j                  |d | d	z
   d
       y y )Nr  r   r;   r   r   r  r  r  rF   r0   r\   rz   )rM   rT   r  r   r   r  r  r  r  r   rA  r%   r   r4   r5   
rU   rW   r  r   r}   r   r4   r5   r6   r9  s
             rY   (test_make_splrep_matches_splrep_periodicz<_TestMakeSplrepBase.test_make_splrep_matches_splrep_periodic  s     ii##C(EE!RWWS[[AIAE[BCQYNOFF1Iq	!A)CE1a!Q!T\\:RAFt||z'ACEE151CEE1Wqb1f:E: (Brn   c           
      
   t         j                  j                  d      }t         j                  dt        j                  |j                  ddt         j                  z  |dz
              dt         j                  z  f   }t        j                  |      t        j                  |      z   }t        |||| j                  dk(        \  }}}t        |||| j                  |      }	t        |	j                  |d | dz
   d	
       y )Nr  r   r;   r   r   r  )r  rA  r4   r0   r\   rz   )rM   rT   r  r   r   r  r  r  r  r   rA  r%   r   r5   r  s
             rY   "test_make_splrep_with_splrep_knotsz6_TestMakeSplrepBase.test_make_splrep_with_splrep_knots  s     ii##C(EE!RWWS[[AIAE[BCQYNOFF1Iq	!A)CE1a!Q!T\\Q?q1"q&z6rn   )r(  r)  r*  rA  rM   r  r  r  rc   r  r  r  r  r  thread_unsafer  r  r  r  r  r  r  r  r+  rn   rY   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7rn   r  c                       e Zd Zej                  j                  dg d      d        Zej                  j                  dg d      d        Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zy)TestMakeSplrepr6   r  c                    ddl m} | j                         \  }}}t        j                  dg|dz   z  ddgz   dg|dz   z  z         } |||d d d f   |||      }t        |||||      }dD ]  }	t         ||	       ||	      d	        y )
Nr   Fr0   rD   rB   r   r0   rh   r   r\   rz   ) scipy.interpolate._fitpack_repror  r  rM   rT  r  r   )
rU   r6   r  r}   r   r  r4   ff_dr  s
             rY   test_fitpack_FzTestMakeSplrep.test_fitpack_F   s     	7.."1aHHaS!A#Y#s+qc1Q3i78a1d7Q1%aAq!$ 	6AAaD#a&u5	6rn   c                    ddl m} | j                         \  }}}t        j                  dg|dz   z  ddgz   dg|dz   z  z         }t        j
                  |j                  d   t              } |||d d d f   ||||      }t        ||||||      }	t        |||||      }
d	D ]B  }t         ||       |	|      d
       t        j                   |
|       |	|      d
      sBJ  y )Nr   r  r0   rD   rB   r   rG   r  r  r\   rz   )r	  r  r  rM   rT  rQ   r   r  r  r   r   )rU   r6   r  r}   r   r  r4   r  fwfw_dr  r  s               rY   test_fitpack_F_with_weightsz*TestMakeSplrep.test_fitpack_F_with_weights  s     	7.."1aHHaS!A#Y#s+qc1Q3i78IIaggaj.q!AtG*aA+q!Q1*aAq!$ 	@ABqE477{{3q647???	@rn   c           
         dd l mc m} t        j                  j                  d      }t        j                  ddddt        j                  |j                  d            dz  ddddf	   }t        |      d}}t        |j                  ||       j                         }t        ||      }|j                  d   |d|z  z
  dz
  k(  sJ t        ||d	       y )
Nr   r  r   r   r   r=   r;   r\   rz   )r	  interpolater  rM   rT   r  r   r   r  rD  r  r  r  r  r   r   )rU   r  r   r4   rW   r6   DD_denses           rY   test_disc_matrixzTestMakeSplrep.test_disc_matrix  s     	76ii##E*EE!Q1bggckkqk&9:1<aAqHI1vq1#((1a.)113Q"wwqzQ1Wq[(((7/rn   c                    d}| j                  |      \  }}}|j                  dg|dz   z  ddgz   dg|dz   z  z         }t        ||||      \  }}}|j                  |      |j                  |      }}t        ||k(        sJ t	        ||||      }	t        |d |	j                  j                  d    |	j                  d	       y )
Nr=   r   r0   rD   rB   r   r  r\   rz   )r  rS   r   r   r%   r   r5   r   )
rU   rV   r6   r}   r   r  r]  r4   r5   r9  s
             rY   test_simple_vs_splrepz$TestMakeSplrep.test_simple_vs_splrep+  s    ..$1aZZQqS	S#J.!ac:;Aa(1azz!}bjjm117||!Q!q)/355;;q>*CEE>rn   c                 b   d}| j                         \  }}}t        t        ||||            d   }t        ||||      }t        |||||      }t	        |j
                  |j
                  d       t	        |j                  |j                  d       |j                  |j                  k(  sJ y )Nr=   r  r9   )r4   r6   r  r\   rz   )r  r  r$   r%   r   r4   r5   r6   )rU   r6   r}   r   r  r4   r  r  s           rY   r  zTestMakeSplrep.test_with_knots8  s    .."1a1Q/04q!qA.AqAa0

EGG%8

EGG%8zzUWW$$$rn   c                     d}|j                  ||j                        }|dz  }d}t        |||d      }|j                  j                  d   d|dz   z  k(  sJ y )Nrh   rG   r=   r0   r  r   r;   )rQ   rR   r%   r4   r   )rU   rV   rW   r}   r   r6   r9  s          rY   test_no_internal_knotsz%TestMakeSplrep.test_no_internal_knotsE  s]    IIarzzI*qD!Q!q)uu{{1~AaC(((rn   c                     d}|j                  ||j                        }|dz  }t        ||d      }t        ||d      }t	        |j
                  |j
                  d       y )Nrh   rG   r=   rZ  r\   rz   )rQ   rR   r%   r   r   r5   )rU   rV   rW   r}   r   r9  r  s          rY   r  zTestMakeSplrep.test_default_sN  sV    IIarzzI*qD!Q!$"1a1-uwwU3rn   c                    d}t        j                  |      }|dz  }t        j                  t              5 }t        ||dd      }t        ||dd      }t        |j                  |d          t        t         j                  |j                  dg|j                  dz   z  f   |d   d       d d d        t              d	k(  sJ y # 1 sw Y   xY w)
Nr  r=   r  r  r   r0   r.  rz   r;   )rM   rQ   rc   r  r  r   r%   r   r4   r   r   r5   r6   rD  )rU   rW   r}   r   r  rb   r9  s          rY   r  zTestMakeSplrep.test_s_too_smallW  s    IIaLqD\\.) 	0QAe,Caa51CCEE3q6*BEE#%%!ceeAg"67F0		0 1v{{	0 	0s   A7CCc                 t   t        j                  g dt         j                        }t        j                  g dt         j                        }t        j                  dg|j                  d   z  t         j                        }t	        t
              5  t        |||dd       d d d        y # 1 sw Y   y xY w)	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@rG   )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;   r  )r  r6   r  )rM   rS   rR   r   rI   rK   r%   r  s       rY   test_issue_22704zTestMakeSplrep.test_issue_22704e  s    JJ % -/JJ8 JJ  &(ZZ1 JJy1771:-RZZ@:& 	.1Q"-	. 	. 	.s   B..B7c                 ^   d\  }}|j                  ||j                        }|dz  }t        |||      }t        |||d      }|j                  j                  dk(  sJ |j                  j                  dk(  sJ t        ||dd|z   z  z   |d      }|j                  j                  dk(  sJ y )Nrh   r=   rG   r=   rZ  r  r  r0   )rQ   rR   r%   r5   r"  )	rU   rV   rW   r6   r}   r   r9  r  r  s	            rY   r  zTestMakeSplrep.test_shapes  s    1IIarzzI*qD!Q!$AqA.uuzzQww||q    Aq1ac7{a48ww||q   rn   c                    d\  }}|j                  ||j                        }|dz  }t        ||dd      }t        ||dd      }|j                  j                  dk(  sJ |j                  j                  dk(  sJ |j
                  j                  d   ||z   dz   k(  sJ |j
                  j                  d   d|dz   z  k(  sJ y )Nr!  rG   r=   r   r  r0   r;   )rQ   rR   r%   r5   r"  r4   r   )rU   rV   rW   r6   r}   r   r  r  s           rY   test_s0_vs_notzTestMakeSplrep.test_s0_vs_not  s    1IIarzzI*qDAqA+AqA+ww||q   ww||q   ww}}Q1q519,,,ww}}Q1A;...rn   N)r(  r)  r*  rc   r  r  r  r  r  r  r  r  r  r  r  r  r#  r+  rn   rY   r  r    s}     [[S"45	6 6	6 [[S"45@ 6@ 0?%)4.! /rn   r  c                   |   e Zd ZdZej
                  j                  dg d      d        Zej
                  j                  dg d      d        Zd Z	d Z
ej
                  j                  dd	d
g      d        Zej
                  j                  dg d      ej
                  j                  ddg      d               Zy)TestMakeSplrepPeriodicr   r6   r  c                     |j                  ddd      }|j                  d      }t        |||d| j                        }|j                  j
                  d   d|dz   z  k(  sJ y )Nr   rh   rF   r  r0   r  r;   )ri   r  r%   rA  r4   r   )rU   r6   rV   r}   r   r9  s         rY   r  z-TestMakeSplrepPeriodic.test_no_internal_knots  s[     KK2r"GGEN!Q!q$,,?uu{{1~AaC(((rn   c                    d}t        j                  ddt         j                  z  |      }t        j                  |      t        j                  |      z   }t        |||d| j                        }t        |||d| j                        }|j                  j                  dk(  sJ |j                  j                  dk(  sJ |j                  j                  d   |d|z  z   k(  sJ y )Nrh   r   r;   r  r0   )rM   ri   r  r  r  r%   rA  r5   r"  r4   r   )rU   r6   rW   r}   r   r  r  s          rY   r#  z%TestMakeSplrepPeriodic.test_s0_vs_not  s     KK1RUU7A&FF1Iq	!AqADLLAAqADLLAww||q   ww||q   ww}}Q1q1u9,,,rn   c                 T   d}dd|j                   z  }}|j                  |||dz   |j                        }|j                  |      }t	        ||d| j
                        }t        t        ||      |dd	
       |j                  |      |j                  |      z   }t	        ||d| j
                        }t        t        ||      |dd
       d|j                  |      z  |j                  |      dz  z   }t	        ||d| j
                        }t        t        ||      |dd	
       y )Nrh   r   r;   r0   rG   r  r  r  r\  r]   r   r@  r   r=   )	r  ri   rR   r  r%   rA  r   r   r  )rU   rV   r  r  rX   r}   r   r9  s           rY    test_periodic_with_periodic_dataz7TestMakeSplrepPeriodic.test_periodic_with_periodic_data  s    !BEE'1KK1a!e2::K6FF1I!Q$=aqt$?FF1Iq	!!Q%>aqt$?bffQiK"&&)A+%!Q$=aqt$?rn   c                 
   d}ddt         j                  z  }}t        j                  |||dz         }t        j                  |      }t	        t
              5  t        ||d| j                         d d d        y # 1 sw Y   y xY w)Nrh   r   r;   r0   r  r  )rM   r  ri   r  rI   rK   r%   rA  r  s         rY   $test_periodic_with_non_periodic_dataz;TestMakeSplrepPeriodic.test_periodic_with_non_periodic_data  sj    !BEE'1KK1a!e$FF1I:& 	<1dll;	< 	< 	<s   A99Br  r   r  c                    t        j                  ddg      }t        j                  ddg      }|dkD  rt        j                  ddg      nd }t        |||dd|      }t        |||dd|      }|dkD  rt	        |j
                  |d          t	        t         j                  |j                  dg|j                  dz   z  f   |d          y )	Nr?   r2   rb  r   r0   r   )r  r6   rA  r  )r  r6   r  r  )	rM   rT  r%   r   r   r4   r   r5   r6   )rU   r  r}   r   r  r9  rb   s          rY   'test_make_splrep_periodic_m_eq_2_k_eq_1z>TestMakeSplrepPeriodic.test_make_splrep_periodic_m_eq_2_k_eq_1  s     HHc3Z HHc3Z $%EBHHc3Z t !Q!q*BQQ!a0q5CEE3q6*ceeaS#%%']23A	 rn   k_fp))r0   -C6)r;   r/  )r=   gAȘr\  c           	      @   d}t        j                  dd|      }t        j                  dt         j                  z  |z        }|\  }}t	        ||||d      }d}	t        ||d d d f   |d   ||      }
t        j                         5  t        j                  dt               t        |
d	d|	|z
  ft         j                  ||z
  ff|d
z        }d d d        |
j                  }t        j                  ddg      } ||      }t        |d   |d          y # 1 sw Y   GxY w)Nrh   r   r0   r;   r  r  r  r7   r@   MbP?r?   r2   )rM   ri   r  r  r   r"   r  r  r  r  r#   rP   r9  rT  r   )rU   r.  r  rW   r}   r   r6   r  rb   fp0spliner   bsx_checky_checks                  rY   test_fperiodic_basic_fitz/TestMakeSplrepPeriodic.test_fperiodic_basic_fit  s    KK1a FF1ruu9q=!2QQ!+1a4j#a&A;$$& 	T!!(N;&#C!GrvvrAv6F'GUSA	T
 ZZ((C:&W+
GAJ/	T 	Ts   ADDN)r(  r)  r*  rA  rc   r  r  r  r#  r)  r+  r-  r7  r+  rn   rY   r%  r%    s     G[[S"45) 6) [[S"45- 6-@"< [[S1e*-  .  [[V%QR[[S4&)0 * S0rn   r%  c                       e Zd ZddefdZej                  j                  dg d      d        Zej                  j                  dg d      d        Z	d Z
d	 Zd
 Zy)TestMakeSplpreprh   r=   c                     |j                  ||j                        |j                  z  |z  }|j                  |      |j	                  |      g}|||fS )NrG   )rQ   rR   r  r  r  )rU   r  r6   rV   r}   r   s         rY   _get_xykzTestMakeSplprep._get_xyk  sK    IIarzzI*RUU2Q6VVAYq	"!Qwrn   r  r   r  r1  r  c           
      8   d\  }}t        j                  |      t         j                  z  |z  }t        j                  |      t        j                  |      g}ddddd}t        ||      \  \  }}}}	t        ||      \  }
}t        ||	d	       t        |
j                  |d	       t        |      ||   k(  sJ t        j                  |      j                  }t        |
j                  |d	       t         |
|       t        |||d
      |      d	       y )Nr!  r  r   r  rh   r<  r  r\   rz   r0   r  )rM   rQ   r  r  r  r   r&   r   r4   rD  rS   r  r5   r   )rU   r  r  r6   r}   r   	num_knotsr4   r5   u_r9  r  r   s                rY   test_simple_vs_splprepz&TestMakeSplprep.test_simple_vs_splprep  s     1IIaL255 1$VVAYq	" %u=	  Q	Aq2a1%Q 	2E* 	qu-1v1%%% ZZ]__r. 	A01aa03%	Arn   c                 T   | j                         \  }}}t        |t              sJ t        j                  |      d   dk(  sJ t        ||      \  }}t        t        j                  |      |      \  }}t        |||       t        |d   |d   d       t        |d         t        |d         k(  sJ t        |d   |d   d       |d   |d   k(  sJ t        j                  t        ||            t        j                  |      k(  sJ t        ||      \  }}t        ||d       t        |j                  |d   d       t        |j                  j                  |d   d       |j                  |d   k(  sJ  ||      j                  t        j                  |      k(  sJ t        t        j                  |      |      \  }}t        ||d       t        |j                  |d   d       t        |j                  j                  |d   d       |j                  |d   k(  sJ  ||      j                  t        j                  |      k(  sJ t        t               5  t        t        j                  |      j                  |       d d d        y # 1 sw Y   y xY w)Nr   r;   r>  rz   r\   r0   )r;  r   r  rM   r   r   rS   r   rD  r   r&   r4   r5   r  r6   rI   rK   )	rU   r  r   r   rb   r  tck_au_ar9  s	            rY   test_array_not_listz#TestMakeSplprep.test_array_not_list  s(    --/1a!T"""xx{1~""" aQRZZ]a0
s3Q'Aau53q6{c%(m+++Aau51vq!!!xxa&"((1+555a1%Q3U+uQxe4q6uua   1v||rxx{***bjjmq1Q3U+uQxe4q6uua   1v||rxx{***:& 	/AA.	/ 	/ 	/s   *+JJ'c                     | j                  d|      \  }}}t        |      \  }}t         ||      |j                  |      d       y )Nrh   r  rV   r\   rz   r;  r&   r   r   rU   rV   r}   r   r6   r9  r  s          rY   test_default_s_is_zeroz&TestMakeSplprep.test_default_s_is_zero:  s?    --"-,1aaQA%8rn   c                    | j                  d|      \  }}}t        |d      \  }}t        |d      \  }}t        ||d       t         ||      |j                  |      d       t         ||      |j                  |      d       |j                  |j                  k(  sJ |j
                  j                  |j
                  j                  k(  sJ y )Nrh   rG  r   r>  r\   rz   r   )r;  r&   r   r   r  r5   r   )	rU   rV   r}   r   r6   r  u_ispl_nu_ns	            rY   test_s_zero_vs_near_zeroz(TestMakeSplprep.test_s_zero_vs_near_zero@  s    --"-,1a!!q)
s!!u-
sSu-c
BHHQKe<c
BHHQKd;zzUZZ'''ww}}---rn   c                    t        j                  dt              }t        t              5  t        |       d d d        t        t              5  t        |d       d d d        t        t              5  t        |d       d d d        t        |gd      \  }}t        |gd      \  }} ||      j                  dk(  sJ t         ||      |gd	       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   pxY w)
Nr   rG   r   r>  r  r  r0   r   r\   rz   )	rM   rQ   r  rI   rK   r   r&   r   r   )rU   r}   rb   r@  r9  r  s         rY   r  zTestMakeSplprep.test_1DM  s    IIau%:& 	AJ	 :& 	!a 	! :& 	#c"	# 1#&RqcT*Q1v||v%%%A%0	 		! 	!	# 	#s#   CC$3C0C!$C-0C9Nr(  r)  r*  rM   r;  rc   r  r  rA  rE  rJ  rO  r  r+  rn   rY   r9  r9    sl    qR 
 [[S"67A 8A: [[S"67/ 8/B9.1rn   r9  c                       e Zd ZddefdZej                  j                  dg d      d        Zej                  j                  dg d      d        Z	d Z
d	 Zd
 Zy)TestMakeSplprepPeriodicrh   r=   c                     |j                  dd|j                  z  ||j                        }|j                  |      |j	                  |      g}|||fS )Nr   r;   rG   )ri   r  rR   r  r  )rU   rW   r6   rV   r}   r   s         rY   r;  z TestMakeSplprepPeriodic._get_xykb  sI    KK1RUU7ARZZK8VVAYq	"!Qwrn   r  r   r\  r  r@  c           
         d}t        j                  ddt         j                  z  |      }t        j                  |      t        j                  |      g}ddddd}t        ||d      \  \  }}}}	t        ||d	
      \  }
}t        ||	d       t        |
j                        ||   k(  sJ t         |
|       t        |||d      |      dd       y )Nrh   r   r;   r  r  rV  r0   r  r   r  r\   rz   r  r@  r]   )rM   ri   r  r  r  r   r&   r   rD  r4   r   )rU   r  rW   r}   r   r?  r4   r5   r6   r@  r9  r  s               rY   rA  z.TestMakeSplprepPeriodic.test_simple_vs_splprepg  s     KK1RUU7A&VVAYq	" "Bb9	  QA.	Aq2a1j9Q 	2E* 355zYq\))) 	A 81aa 8 ;"	0rn   c                    | j                         \  }}}t        |t              sJ t        j                  |      d   dk(  sJ t        ||d      \  }}t        t        j                  |      |d      \  }}t        |||       t        |d   |d   d       t        |d         t        |d         k(  sJ t        |d   |d         D ]  \  }}	t        ||	d        |d   |d   k(  sJ t        j                  t        ||            t        j                  |      k(  sJ t        ||d      \  }
}t        ||d       |
j                  |d   k(  sJ  |
|      j                  t        j                  |      k(  sJ t        t        j                  |      |d      \  }
}t        ||d       |
j                  |d   k(  sJ  |
|      j                  t        j                  |      k(  sJ t        t              5  t        t        j                  |      j                  |d       d d d        y # 1 sw Y   y xY w)	Nr   r;   r0   r  rz   r\   r   r  )r;  r   r  rM   r   r   rS   r   rD  r  r   r&   r6   rI   rK   r  )rU   r  r   r   rb   r  rC  rD  r  r  r9  s              rY   rE  z+TestMakeSplprepPeriodic.test_array_not_list  s    --/1a!T"""xx{1~""" aQ'QRZZ]aQ7
s3Q'Aau53q6{c%(m+++#a&%(+ 	0FBB/	01vq!!!xxa&"((1+555a1j9Q3U+uua   1v||rxx{***bjjmq*EQ3U+uua   1v||rxx{***:& 	CAAzB	C 	C 	Cs   ,H77I c                     | j                  d|      \  }}}t        |d      \  }}t         ||      |j                  |      d       y )Nrh   rW   rV   r   re  r\   rz   rH  rI  s          rY   rJ  z.TestMakeSplprepPeriodic.test_default_s_is_zero  sB    --"-,1aa4QA%8rn   c                 <   | j                  d|      \  }}}t        |dd      \  }}t        |dd      \  }}t        ||d       |j                  |      }	t         ||      |	d       t         ||      |	d	d
       |j                  |j                  k(  sJ y )Nrh   rZ  r   r   r  r   r\   rz   r   r@  r]   )r;  r&   r   r   r  )
rU   rV   r}   r   r6   r  rL  rM  rN  y_arrs
             rY   rO  z0TestMakeSplprepPeriodic.test_s_zero_vs_near_zero  s    --"-,1a!!q*=
s!!ujA
sSu-c
E6c
E4@zzUZZ'''rn   c                 $   t        j                  ddt         j                  z  d      }t        j                  |      }t	        t
              5  t        |d       d d d        t	        t
              5  t        |dd       d d d        t	        t
              5  t        |dd       d d d        t        |gd	d      \  }} ||      j                  d
k(  sJ t         ||      |gd	       y # 1 sw Y   xY w# 1 sw Y   zxY w# 1 sw Y   `xY w)Nr   r;   r   r0   r  r   r  r  r\   rQ  rz   )
rM   ri   r  r  rI   rK   r   r&   r   r   )rU   r}   r9  r  s       rY   r  zTestMakeSplprepPeriodic.test_1D  s    KK1RUU7A&FF1I:& 	A1	 :& 	5a4	5 :& 	7c:6	7 qcUJ?Q1v||v%%%A%0	 		5 	5	7 	7s$   C.2C:D.C7:DDNrR  r+  rn   rY   rT  rT  _  sm     qR 
 [[S"780 900 [[S"78C 9C<9(1rn   rT  c                   ,    e Zd Zd Zd ZddZd Zd Zy)BatchSplinec                    t        j                  ||d      }|j                  d d | _        |j	                  d|j                  d         D cg c]  } |||fi | c}| _        || _        y c c}w Nr9   )rM   moveaxisr   _batch_shaper   _splines_axis)rU   r}   r   r  r3  kwargsyis          rY   r	  zBatchSpline.__init__  se    KK4$GGCRL;<99RQS;UVR200V
 Ws   A.c                    | j                   D cg c]
  } ||       }}t        j                  || j                  |j                  z         }|j                  r!t        j
                  |d| j                        S |S c c}w ra  )rd  rM   r   rc  r   rb  re  )rU   r}   r3  r   s       rY   r  zBatchSpline.__call__  sc    %)]]36VAY33JJq$++agg5612r{{1b$**-?a? 4s   A<Nc                     | j                   D cg c]  }|j                  |||       }}t        j                  || j                        S c c}w r  )rd  r  rM   r   rc  )rU   r  rX   r   r3  r   s         rY   r  zBatchSpline.integrate  sE    ?C}}MVVaK0MMzz!T..// Ns   Ac                     t        j                  |       }|j                  D cg c]  }|j                  |       c}|_        |S c c}w r  )r  deepcopyrd  r  rU   r   r#  r3  s       rY   r  zBatchSpline.derivative  s<    mmD!<?LLI&))"-I
 J   Ac                     t        j                  |       }|j                  D cg c]  }|j                  |       c}|_        |S c c}w r  )r  rk  rd  r  rl  s       rY   r  zBatchSpline.antiderivative  s<    mmD!@CMf--b1M
 Nrm  r  )r(  r)  r*  r	  r  r  r  r  r+  rn   rY   r_  r_    s    @
0
rn   r_  c            
           e Zd Zej                  j                  dei fei feddifeddifeddifg      ej                  j                  dg d      ej                  j                  d	g d
      d                      Z	y)	TestBatchzmake_spline, kwargsra  r2   r  r  r  
eval_shape)r+  r0   r  r  r  c                    t         j                  j                  d      }d}ddd|f}d}t        j                  g || }	t        j                  |j                  |      d|      }
|t
        k(  r+d}|	d   f|d	z   z  |	d   f|d	z   z  z   }|t        ||
      z  } ||	|
fd|i|}t        |	|
f||d|} |j                  |d|i}	t         j                  j                   ||	       ||	             |j                  d	      |j                  d	      }}t         j                  j                   ||	       ||	             |j                  d      |j                  d      }}t         j                  j                   ||	       ||	             t         j                  j                   |j                  |  |j                  |        y )Nl   UU{ rh   r;   r=   r>   )r   rh   r9   r   r0   )r4   r6   r  )r  r3  r   )rM   rT   r  ri   rb  r   rL   r_  r  testingassert_allcloser  r  r  )rU   make_splinerf  r  rq  r   rW   r   domainr}   r   r6   r4   r#  refs                  rY   
test_batchzTestBatch.test_batch  s    ii##$45Aq!KK###KK

5)2t4/)A11q5!QrUHA$66AdQ!n,F!Q4T4V4!QHT+HHCKK1j1


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


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


""3q63q62


""=3==&#9=3==&;QRrn   N)
r(  r)  r*  rc   r  r  r   r   r   ry  r+  rn   rY   rp  rp    s    [[2
b	!
	$
%	.
Hi0	1
Hd+	,		 [[\+;<[[VZ0S 1 =Srn   rp  r  r  rr  )}rL  r  r  r  r  r|  r  r  r  numpyrM   scipy._lib._array_apir   r   r   r   r   r   r	   r
   scipy._external.array_api_extra	_externalarray_api_extrar  rc   r   rI   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*   rX  r+   rS  r,   r  r  r  r.   r  r  r  r   r   r   r{   r   ra   r  r  rE  r  r  r  r  r  r  r$  r  r(  r*  rR  rT  rv  r,  rW  r|  r  r  rQ  rw  r  r  r  r  r  r  r%  r9  rT  r_  rp  r+  rn   rY   <module>r     sK   	        
    . - *     
  ! !E E B G G / / & 9 5 2 - &;;// KK11  7t
) t
) t
)n G]+,W$ W$ -W$t6,$G>  $ b +$_) _)D %&`? `? '`?F88 !++11(Y<MN  ?#~: ~: $~:B >*Z	(nL nLb*
 ()J3 J3 *J3^
7:" :"z 9j4 j4 j4ZWG WGta  a L(. >"l l #l^2, ,^Q7 Q7h ;R/( R/  R/j ;\00 \0  \0~ < h1 h1 !h1V < b1 b1 !b1J 8$S $Srn   