
    bifW                    0   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 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l.m/c m,Z0 d dl1m2Z2m3Z3m4Z4m5Z5m6Z6 d dl7m8Z8m9Z9 d dlm:Z:m;Z;m<Z< d dl=m>c m?Z@ d dlAmBZB d d	lCmDZD d d
lEmFZF d dlmGZH d dlmIZJ d dlmKZK ej                  j                  ZM ee       G d d             ZN ee       G d d             ZOd ZPd ZQd ZRd ZSd ZTe
fdZUdRdZVdde
fdZWd ZX G d d      ZY ee       G d d              ZZd! Z[dSd"Z\ej                  j                  d#d$d%g      Z^ ee       G d& d'             Z_ G d( d)      Z`dTd*Zad+ Zbd, Zc G d- d.      Zdd/ Ze ee)       G d0 d1             Zfd2 Zgd3 Zhd4 Zi G d5 d6      Zj ee(       G d7 d8             Zk G d9 d:      Zl G d; d<      Zmd= Znd> Zo ee:       G d? d@             ZpdA Zq G dB dC      Zr G dD dE      Zs ee;       G dF dGes             Zt ee;       G dH dIes             Zu ee<       G dJ dK             Zv ee<       G dL dM             Zw G dN dO      Zx G dP dQ      Zyy)U    N)xp_assert_equalxp_assert_closexp_default_dtype	concat_1dmake_xp_test_casexp_ravel)raises)BSplineBPolyPPolymake_interp_splinemake_lsq_splinesplevsplrepsplprepsplder
splantidersprootsplintinsertCubicSpline	NdBSplinemake_smoothing_splineRegularGridInterpolator)_not_a_knot_augknt_woodbury_algorithm_periodic_knots_make_interp_per_full_matr)	Fperiodic	root_rati)generate_knotsmake_splrepmake_splprep)	AxisError)_run_concurrent_barrier)make_ndbspl)	_dfitpack)	_bsplines)_dierckxc                      e 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d Zd Zd Zd Zd  Zd! Zd" Zd# Zd$ Z d% Z!e"jF                  jI                  d& e%d'd(            d)        Z&d* Z'd+ Z(e"jF                  jI                  d,g d-      e"jF                  jI                  d. e%d/            d0               Z)d1 Z*d2 Z+d3 Z,e"jF                  jI                  d4g d5      d6        Z-e"jF                  jI                  d4g d5      d7        Z.d8 Z/d9 Z0d: Z1e"jF                  je                  e3jh                  d;k(  d<e5=      d>        Z6y?)@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   r.      r   r.   r9         r9   )        r=   r0          @      @      @)r0   r0   r0   cubic      @)r=   r   r.   r.   r9   r;   )r0   r.   r.      r;   dtype)assert_raises	TypeError
ValueErrorr
   dictnperrstatenaninfarangefloat64asarrayrandomr   r2   r3   r4   )selfxpnr4   r2   r3   bs          `/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/scipy/interpolate/tests/test_bsplines.py	test_ctorzTestBSpline.test_ctor4   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rtolr.   r9   foo)	_make_random_splinetckr   r2   r3   r4   pytestr	   AttributeError)rS   rV   r`   s      rW   test_tckzTestBSpline.test_tckW   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   r0   r9   r?   r<   r   r1   r9   
   r0   rE   r@   )r
   rQ   linspacewhererP   r   )rS   rT   rV   xxexpecteds        rW   test_call_namespacezTestBSpline.test_call_namespacec   so     bjj,

B70CqI[[Ar"88BGRZZ"**Z%EsK"x(    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   r.   re   r?   r1   )r   ffffff?r.   r;   r<   rm   r@   )rK   rf   r
   r   	ones_likerg   )rS   rh   rV   s      rW   test_degree_0zTestBSpline.test_degree_0l   su    [[Ar"q!f*"r||B/#56lq!f2"rxxT	3<=rk   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        j                   |||f      \  }}}	t        |||	|f      }
t	         ||      |j                  |
      d       y )Nr:   )r0   r9   r;   r.   r0   r?   2   rE   r   rT   r9   +=r\   )	rQ   r
   rf   rP   r   B_012maprK   r   )rS   rT   r2   r3   r4   rV   xx_npt_npc_npsplev_results              rW   test_degree_1zTestBSpline.test_degree_1u   s    JJ'JJ{#Aq!KKS"BJJK7aDaDqR 1Q4acb(9#99AaDqsrAR<RR	

 rzzAq!95dDTD$?3!bjj6UCrk   c                 H   d}|j                  dg|dz   z  dg|dz   z  z         }|j                  g d      }t        |j                  |d      |j                  ddg            }t        |||      }|j	                  ddd      }t         ||d	
       ||d	
      d       y )Nr;   r   r.   r0   r>   r?   r@   )r7   r.   g      r>   re   Textrapolaters   rt   )rQ   r   reshaper
   rf   r   )rS   rT   r4   r2   r3   bpbsplrh   s           rW   test_bernsteinzTestBSpline.test_bernstein   s    JJsAaCyA3!9,-JJ'(2::a)2::q!f+=>q!Q[[b"%240RT2	@rk   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 )Nrr   r.   rq   rs   rt   )r_   r`   rf   stack_naive_evalr   _naive_eval_2)rS   rT   rV   r2   r3   r4   rh   y_brw   y_ny_n2s              rW   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 )Nr.   rq   rs   rt   )r_   r`   rK   rf   r   r   rS   rV   r2   r3   r4   rh   s         rW   test_rndm_splevzTestBSpline.test_rndm_splev   sV    !%%1a[[1q!Aw+"uR!Q3%@rk   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     r.   P   rs   rt   )rK   rR   RandomStatesortr   r
   r2   r4   rf   r   r   )	rS   rngrw   yr`   rV   r2   r4   rh   s	            rW   test_rndm_splrepzTestBSpline.test_rndm_splrep   s    ii##D)GGCJJrN#JJrNQlSMssACC1[[1q!Aw+"uR~E:rk   c                 @   t        |      }|j                  |j                        |_        |j                  |j                  |j
                     |j                  |j
                   dz
     d|j                        }t         ||      |j                  |             y )Nrr   r.   d   rE   )r_   rn   r3   rf   r2   r4   rP   r   )rS   rT   rV   rh   s       rW   test_rndm_unityzTestBSpline.test_rndm_unity   so    2&ll133[[QSS133tAv;2::[F"r||B/0rk   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;         sizer.   r;   r<      )r;   r<   r   r   r   )rK   rR   r   r   rv   rQ   r
   shape)rS   rT   r   rU   r4   r2   r3   rV   tmtprh   s              rW   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---rk   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;   r.   r7   r   rq   rs   rt   )	rK   rR   r   r   r_r
   rf   r   r   )rS   r   rU   r4   r2   r3   c_padrV   b_paddtrh   s              rW   
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Drk   c           	          t               }|j                  \  }}}||   || dz
     }}dD ])  }t         |||g|       ||dz   |dz
  g|      dd       + y )Nr.   TF绽|=&.>Hz>r[   r_   r`   r   )	rS   num_parallel_threadsrV   r2   _r4   r   r   extraps	            rW   test_endpointszTestBSpline.test_endpoints   ss    !%%1a1q!AwB# 	WFAr2h/rEz2:6?dQUW	Wrk   c           	          t               }|j                  \  }}}t         |||dz   | dz
   dz
         |||dz   | dz
   dz         d       y )Nr.   r   r   rt   r   )rS   r   rV   r2   r   r4   s         rW   test_continuityzTestBSpline.test_continuity   s\    !%%1a!AaC1+-.!AaC1+2E0F	rk   c                    t        |      }|j                  \  }}}|d   |d   z
  }|j                  ||   |z
  || dz
     |z   d      }||   |k  ||| dz
     k  z  }t         |||   d       |||   d             t	        t
        j                  |||f      \  }	}
}|j                  t        |	|
||fd	            }t         ||d      |       y )
Nrr   r7   r   r.   rq   Tr   F)ext)r_   r`   rf   r   rv   rK   rQ   r   )rS   rT   rV   r2   r3   r4   r   rh   maskxx_npry   rz   r{   s                rW   test_extrapzTestBSpline.test_extrap   s    2&%%1arUQqT\[[1AqbdGbL"5!r	b1aRT7l+ 	"T(5"T(6	8  

RAJ7tTzz%dAA"FG"$/>rk   c                     t               }|j                  \  }}}|d   dz
  |d   dz   g} ||      }t        j                  t        j                  |            rJ y )Nr   r.   r7   )r_   r`   rK   allisnan)rS   rV   r2   r   r4   rh   yys          rW   test_default_extrapzTestBSpline.test_default_extrap   sY    !%%1adQh"	"rU66"((2,''''rk   c                 f   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         j
                  |
||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   r.   r7   rq   -q=gH׊>rt   )r7   r         ?r.   Trs   gƠ>)rK   rR   r   r   rv   rQ   r
   r   rf   r   rP   r   r   )rS   rT   r   r2   r3   r4   rV   rU   r   rh   xyxy_npry   rz   r\   s                  rW   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$;//

RAJ7tT(,

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

 ZZ(qTR!A$Y1Q4!A$;//bj)bd#*2."**<	
 CG	
rk   c                     t               }|j                  \  }}}t        j                  |||f      }t	        j
                  ||   ||    d      }t         ||       ||      dd       y )Nr   rs   r[   )r_   r`   r   from_splinerK   rf   r   )rS   rV   r2   r3   r4   pprh   s          rW   
test_ppolyzTestBSpline.test_ppoly  sa    !%%1a1ay)[[1q!uc*"r"vE>rk   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   r7   rq   r.   dernurs   rt   )	r_   r`   rK   rf   r   ranger   r   
zeros_like)rS   rV   r2   r3   r4   rh   r   yds           rW   test_derivative_rndmz TestBSpline.test_derivative_rndm#  s    !%%1a[[1qub)UU2q5\AaC= 	;CrAq!9#.BB"E:	;
 	"1r}}R'8uErk   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 )Nr9   )r7   r7   r   r.   r.   r;   r<   r   r   r   r   r   r   r   r   )r.   r;   r<   r   r   r   g2H@gη   @r;   r<   r.   r   )rK   rR   r   r   r
   rQ   r   allclose)	rS   r4   r2   r   r3   rV   rw   x0x1s	            rW   test_derivative_jumpsz!TestBSpline.test_derivative_jumps0  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Frk   c           	         |j                  ddd      }t        j                  |j                  g d            }t	        t
        j                  ||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 )Nr7   r<   r   r   r.   r9   r;   )r2   rs   rt   r   rE   r   r.   r.   r9   r   r9   re   r.   r>   )rf   r
   basis_elementrQ   rv   rK   r2   r3   r   r4   r   r   rP   B_0123rg   )	rS   rT   rh   rV   r   ry   rz   r{   r\   s	            rW   test_basis_element_quadraticz(TestBSpline.test_basis_element_quadraticJ  s"   [[Q#!!BJJ|$<=

RaccN;tTzz%dACC/@"AB"|%8&r*bjj8Ud"rzz&*BJJzGdS!!BJJ|$<=[[Ar[4"aBB
3%	Ark   c           	          t               }|j                  \  }}}t        j                  ||   || dz
     d      }t	         ||      t        ||||      d       y )Nr.   r   rs   rt   )r_   r`   rK   rf   r   _sum_basis_elementsr   s         rW   test_basis_element_rndmz#TestBSpline.test_basis_element_rndmZ  sU    !%%1a[[1q!Aw+"22q!Q?eLrk   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      ?      @r.   r   rs   rt   )	r_   r`   r
   r3   realimagrK   rf   r   )	rS   rV   r2   r3   r4   ccb_reb_imrh   s	            rW   
test_cmplxzTestBSpline.test_cmplx`  s    !%%1a(^Ar1q!##((A&q!##((A&[[1q!Aw+"

DH59"

DH59rk   c                     t        j                  |j                  g d            }|j                   ||j                              sJ y )Nr   )r
   r   rQ   r   rM   )rS   rT   rV   s      rW   test_nanzTestBSpline.test_nanm  s5    !!"**\":;xx"&&	"""rk   c                    t        d|      }|j                  \  }}}t        |||      }|j                  ||   || dz
     d      }t	        d|      D ].  }|j                         }t         |||       ||      dd       0 y )Nr   )r4   rT   r.   r   r   r[   )r_   r`   r
   rf   r   
derivativer   )	rS   rT   rV   r2   r3   r4   b0rh   js	            rW   test_derivative_methodz"TestBSpline.test_derivative_methodr  s    !+%%1aQ1[[1q!Aw+q! 	FAABr1Iqu5uE	Frk   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 )Nrr   r.   r   rs   r[   axisr9   )r_   r`   rf   r   antiderivativer   r   r
   )rS   rT   rV   r2   r3   r4   rh   s          rW   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	7rk   c           	      	   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|j                        d      sJ 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 )Nr8   r   r.   r   rs   abs_tol      r7   r=   Tr   Fr   r9   rE   iii      ?r;   g      +@   r   ir<   )r
   r   rQ   mathisclose	integrate_implr   r`   r   r   rP   r   )rS   rT   rV   i
period_ints        rW   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6G 	G G #ZZ!qt2::Z>
||AKK1-z:::||AKK1-rJ???||AKKB/<<<||AKKB/Z@@@C-

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

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

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

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

1Q4!A$;Z#?@	Brk   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  )rS   rw   rV   pr   r   s         rW   test_integrate_ppolyz TestBSpline.test_integrate_ppoly  s`    q!$"a 5 	1FBAKKB/KKB/1	1rk   c                     t        j                  g d      }dD ]C  }|j                  dd|      }t        |t        j
                        sJ |j                  dk(  rCJ  y )Nr8   r   r   r.   r   )r
   r   r  
isinstancerK   ndarrayndim)rS   rV   r   ress       rW   test_integrate_0D_alwaysz$TestBSpline.test_integrate_0D_always  sY    !!),( 	!K++a+<Cc2::...88q= =	!rk   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__ rk   rW   Br    s    rk   r  )r   r.   r9   r9   )r
   r   	__class__r   r   )rS   r  rV   s      rW   test_subclassingzTestBSpline.test_subclassing  sg    	 	 OOL){{a||~''1,,,!++q000rk   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   r.   r   r   r   r<   r   r   r   r   )r2   r3   r4   r   r9   )rf   r   tuplerK   rR   r   rQ   r
   r3   r   r  rG   r%   rJ   r   r   r   )rS   r   rT   rU   r4   r2   shpos_axisr   r3   rV   axb1s                rW   	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$$$		%rk   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 )
Nr9   )r   r.   r9   r;   r<   r   r   )r7   r9   r   r7   )r9   r   r.   r7   r   r   r.   rB   )rQ   r
   r   r   )rS   rT   r4   r2   r3   splspl0spl1s           rW   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Crk   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   r7   r   r4   bc_typer.   rs   rt   N)rK   rR   r   r   random_sampler   eyelenr2   r
   design_matrixtoarrayr   r3   )
rU   r4   r4  r   rw   r   r   r3   des_matr_defdes_matr_csrs
             rW   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Crk   rD   r;   clampednaturalr   r9   
not-a-knotr   r   r   N)r   )rS   r<  rU   r4   bcs        rW   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	6rk   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   re   r.   r9   r  N)rK   rR   r   r5  aminamaxr   rf   r6  r7  r
   r   r8  r9  arrayra   r	   rI   )rS   r   rC  r   rw   xminxmaxr4   r2   r3   bsplines              rW   '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   re   r;   r2  r   r4   r.   r<   rs   rt   )rK   rR   r   r   r5  r   r   r
   r8  r2   r9  r   r3   )rS   r   rU   r4   rw   r   r   r
  xcycr;  s              rW   test_design_matrix_x_shapesz'TestBSpline.test_design_matrix_x_shapesA  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rk   c                 x    g d}t        j                  d|d      j                         }t        |g dgd       y )N)r0   r0   r0   r>   r?   r@   r@   r@   r>   r;   )g      ?gmਪ?gK}\UU?r=   rs   rt   )r
   r8  r9  r   )rS   r2   des_matrs      rW   test_design_matrix_t_shapesz'TestBSpline.test_design_matrix_t_shapesR  s7    ,((Q2::<;<"	$rk   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   re   r;   r2  r   rM  r7   r9   )r=   r0   r>   r?   r@         @r~   )rK   rR   r   r   r5  r   rG   rI   r
   r8  r2   )rS   r   rU   r4   rw   r   r   r2   s           rW   test_design_matrix_assertsz&TestBSpline.test_design_matrix_assertsZ  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r4  )r?  r>  r   r@  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   r7   r4  r.   rZ   rt   )rK   rR   r   r   r   r
   from_power_basisrf   r   r   r3   )	rS   r4  r   rw   r   cbr   rh   bspl_news	            rW   test_from_power_basisz!TestBSpline.test_from_power_basisl  s     ii##D)GGCJJrN#JJrNj aDAbEAw/''G<[[Ar"2Ru5%aG<

7rk   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   r/   r   r   r7   rX  rZ   rt   )rK   rR   r   r   r   r
   rY  r   r   r   r   r3   )	rS   r4  r   rw   r   rZ  r   bspl_new_realbspl_new_imags	            rW   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Srk   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:   )r.   r.   r.   r.   r.   r?  rX  )r0   r.   r.   r.   r.   r.   r.   rZ   rt   N)rK   rG  r
   rY  r   r   r3   )rS   rw   r   r   s       rW   test_from_power_basis_exmpz&TestBSpline.test_from_power_basis_exmp  sO     HH_%HH_%''Aq)(L09; 7eDrk   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   r.   r?   Fwritere   r1   )rK   rG  setflagsrf   r
   r   rn   )rS   r2   r3   rh   rV   s        rW   test_read_onlyzTestBSpline.test_read_only  s    HHaVHHcUO	


	


[[Ar"
% a1""r||B/#56rk   c                 B    t              }fd}t        d||       y )Nrr   c                 p    |j                   \  }} }j                  ||   || dz
     d      } ||       y )Nr.   i'  )r`   rf   )r   rV   r2   r4   rh   rT   s        rW   	worker_fnz/TestBSpline.test_concurrency.<locals>.worker_fn  s9    eeGAq!QqT1aRT7E2BbErk   re   )r_   r&   )rS   rT   rV   rj  s    `  rW   test_concurrencyzTestBSpline.test_concurrency  s     2&	
 	 Iq1rk   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   r.   re   r2   z.datzw+)moderF   r   r3   )r_   rK   rf   	threadingget_native_idmemmapstrjoinr2   rF   r   r3   r   )rS   tmpdirrV   rh   ri   tidt_mmc_mms           rW   test_memmapzTestBSpline.test_memmap  s      ![[Ar"R5%%'yyV[[1SE78t ssyy		;##QyyV[[1SE78t ssyy		;##Q"x(rk   N)7r  r  r  rX   rc   rj   ro   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  r  r!  ra   markparametrizer   r)  r/  rB  rK  rP  rS  rV  r\  r`  rb  rg  rk  xfailsysplatformrb   rx  r  rk   rW   r,   r,   1   s   !F
)>D 
@ l+OPk*KLgk2/ 3 M Q/A
;1	.E&W? (
6?FG4A M:#
F7+BZ	1!1 [[VU2q\2% 3%:D(6T [[],EF[[XuQx0 1 G4C"$+$ [[Y )C D8D8 [[Y )C DTDTE&7	2 [[ 8  
)
)rk   r,   c                   >   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=   r0   rB   r<         @      @c           	         |j                  d|j                        }|j                  |      dz  }t        ||d      }|j                  |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   rE   r;   rM  rZ   rt   r.   r7   r   r   )rO   rP   sinr   _t_cr4   r
   r   insert_knotr   r2   rQ   r3   concatcosr   )rS   r  rT   rw   r   r,  r`   spl_1fspl_1rh   y1spl_y1spl_yyspl_yy1s                 rW   test_insertzTestInsert.test_insert  s    IIarzzI*FF1IqL A+vvsvvsuu%&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<rk   zxval, m))r=   r9   )r0   r;   )r  r   )r<   r9   )r  r9   c           	         |j                  d|j                        }|j                  |      dz  }t        ||d      }t	        t        ||j                  |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   rE   r;   rM  mrZ   rt   r.   r7   r   )rO   rP   r  r   r
   r   r  r  r4   r  r   r2   rQ   r3   r  )
rS   r  r  rT   rw   r   r,  r  r  rh   s
             rW   test_insert_multizTestInsert.test_insert_multi  s    IIarzzI*FF1IqL A+&'>!DEa(FHH!5EBFHHYsuufQh,?!@uM!B%-QQsVYYC123B012Br7rk   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  rC   r.   r   r;   r9   )lowhighr   r  r  r   rZ   rt   )	rK   rR   default_rngrQ   r   uniformr
   r  r   )rS   rT   r   rU   r4   r2   r3   r,  xvr  rh   s              rW   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7rk   r  )	r   皙?r>   r@         @      @      @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   rE   r;   rM  r   r   TperrZ   rt   r.   r   r   r   )   r  )rO   rP   r  r   rv   rQ   r
   r  r   r`   r   r2   r3   rK   rR   r  r  r   )rS   r  rT   rw   r   r2   r3   r4   r,  r  tfcfr   rh   s                 rW   test_insert_periodiczTestInsert.test_insert_periodic  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Urk   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   rE   r9   r/   r;   rM        @rZ   rt   )rO   rP   rK   pir  r  r   r   r  r   r2   r3   )rS   r   rT   rw   y_rey_imr,  spl_respl_imr  r  spl_1respl_1ims                rW   test_complexzTestInsert.test_complex0  s   IIarzzI*Q.6VVAYq	d D2d7Na8%#Atq1(#Atq1(#$$R($$R(77R		\!9Frk   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   r.   r9   r;   r<   r   r   r   r   Tr  )	rK   rG  onesr7  r
   rG   rI   r   r  )rS   r  r4   r2   r3   r,  s         rW   +test_insert_periodic_too_few_internal_knotsz6TestInsert.test_insert_periodic_too_few_internal_knotsG  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   r.   r  r   r7   r   r  )rK   rG  r  r7  r
   rG   rI   r  )rS   r4   r2   r3   r,  s        rW   test_insert_no_extrapz TestInsert.test_insert_no_extrap[  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  ra   rz  r{  r  r  r  r  r  r  r  r  rk   rW   r  r    s     [[V%AB!= C!=H [[C888 [[T $8 VV" [[]T:,>?G @G, ($rk   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   r.   r7   zder = z  k = )r\   r]   err_msg)r`   rK   uniquer   r   r   r4   )	rV   r   r   r\   r]   r2   r3   r4   rw   s	            rW   check_splevz,test_knots_multiplicity.<locals>.check_splevo  s    %%1aIIaLEE!A$s(C122A/2s:;a!QC0!As)se6!##.G	Irk   r.   r9   r;   r<   r   rM  r.   r   )r   rs   rs   )r_   	enumerate_make_multiplesr   )r  r4   rV   r   r(  r   s         rW   test_knots_multiplicityr  k  ss    I  6!$q12 	6EArAQ!} 6B3u56	66rk   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   r.   r0   r=   _naive_Brw   r4   r
  r2   c1c2s         rW   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rk   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!
    r.   r   c              3   R   K   | ]  }|z
     t        |z
        z     y wNr  ).0r   r3   r
  r4   r2   rw   s     rW   	<genexpr>z_naive_eval.<locals>.<genexpr>  s-     F1q1vAqsA..Fs   $')searchsortedr   sumr   )rw   r2   r3   r4   rT   r
  s   ```` @rW   r   r     s     	AaDyOOAq!A%Q41!A#6a!''!*q.(((Fa1FFFrk   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   r.   c              3   F   K   | ]  }|   t        |      z    y wr  r  r  r
  r3   r4   r2   rw   s     rW   r  z _naive_eval_2.<locals>.<genexpr>  s%     =qqthq!Q**=   !)r   r  r   )rw   r2   r3   r4   rT   rU   s   ````  rW   r   r     sr    	
acA!8O8771:??Q41!=E!H===rk   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 )Nr.   r   r=   r9   Fr   )r7  r   r   r
   r   rK   
nan_to_num)rw   r2   r3   r4   rU   sr
  rV   s           rW   r   r     s    A!A#A!8O8771:??
A1X %@G!!!Aac!e*%@C	QqTBMM!$$$% Hrk   c                     t        j                  |       } 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   r9   r.   c                      yNr=   r  rw   s    rW   <lambda>zB_012.<locals>.<lambda>      rk   c                     | S r  r  r  s    rW   r  zB_012.<locals>.<lambda>  s    A rk   c                     d| z
  S Nr>   r  r  s    rW   r  zB_012.<locals>.<lambda>  s
    A rk   )rK   
atleast_1d	piecewiserQ   )rw   rT   results      rW   ru   ru     sr    
aA\\!q1uQ/!VA.!VQ/1 )+~FHF ::frk   c                     t        j                  |       } | 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).r.   r9   r   c                     | | z  dz  S r  r  r  s    rW   r  zB_0123.<locals>.<lambda>  s    1Q3r6 rk   c                     d| dz
  dz  z
  S )Ng      ?r  r9   r  r  s    rW   r  zB_0123.<locals>.<lambda>  s    41T6A+- rk   c                     d| z
  dz  dz  S )Nr?   r9   r  r  s    rW   r  zB_0123.<locals>.<lambda>  s    BqD19q= rk   c                      yNr0   r  r  s    rW   r  zB_0123.<locals>.<lambda>  r  rk   c                      y)Ng       r  r  s    rW   r  zB_0123.<locals>.<lambda>  r  rk   c                      yr  r  r  s    rW   r  zB_0123.<locals>.<lambda>  r  rk   znever be here: der=)rK   r  rI   r  )rw   r   condsfuncspiecess        rW   r   r     s    
aAUQUq1u%q1u-E
ax!-(* 
 .se455\\!UE*FMrk   #   r;   c                 (   t         j                  j                  d      }t        j                  |j                  | |z   dz               }|j                  |       }|j	                  |      |j	                  |      }}t        j                  |||      S )N{   r.   )rK   rR   r   r   rQ   r
   construct_fast)rU   r4   rT   r   r2   r3   s         rW   r_   r_     sp    
))


$C


1Q3q5!"A

1A::a="**Q-qA!!!Q**rk   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   Nr.   r7   )r3   r4   r2   copyr
   )rV   r3   r4   t1s       rW   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   r@   r  r  )rK   rf   r  r  r   r2   r3   r4   r`   rh   r   rV   xnewc_dstackr  r
   b2)rS   rh   r   rV   r  s        rW   setup_methodzTestInterop.setup_method  s    [[BruuHb)VVBZr2&CCacc?#%r1 $&KK2bee8R0	UU133QSS=!))RH%!##tww,rk   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)NrZ   r[   zCalling splev.. with BSplinematchr.   r   )r  rV   r  r   r   r`   rK   rQ   rG   rI   r$  r   r3   r  	transposer2   r4   )rS   r  rV   r  rw   r%  r   r`   s           rW   
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   rZ   rt   r.   r9   T)full_output)rh   r   r   r	  r   r   r
   )rS   rw   r   r`   r2   r3   r4   tck_fr   r   rV   s              rW   test_splrepzTestInterop.test_splrep  s    ww1Ql,,q!$1aA.A.1v{{  1$7q!Qa!%0a!%0Qx1}} 1c]2E* SM1Q4e,rk   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;   )	rh   r   rK   r  rG   rI   r   r	  rH   )rS   rw   r   y2s       rW   test_splrep_errorszTestInterop.test_splrep_errors/  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  rE   r;   r   rZ   rt   r   T)r  r  )	rK   rO   rP   r   r   r	  r   rQ   r   )	rS   rw   rV   ur`   u1b_fu_fr   s	            rW   test_splprepzTestInterop.test_splprep?  s    IIb

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

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

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

5c?3QUCrk   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   r2  r;   )numr  ) >Ir   >Kr  zInvalid inputs)r.   r;   r9   r<   )r   g333333?g?r.   )	rK   rO   r   rG   rI   r   r	  rf   rH   )rS   rw   r  s      rW   test_splprep_errorszTestInterop.test_splprep_errorsN  sy   IIe$$Y/:-HI 	AJ	:-HI 	MM!	 KK21%9,=> 	QCL	9,=> 	MM1#	
 E:-=> 	QCL	:-=> 	MM1#	 :-=> 	%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  rB   r  r   r[   zCalling sproot.. with BSpliner  rq   )mestr.   r9   r   )r;   r9   r<   r   rt   )rV   r  rK   rG  r  r   r   r2   r3   r4   rG   rI   r  rQ   r   r   )rS   rV   r  rootsc2rrrs         rW   test_sprootzTestInterop.test_sprootk  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   r.   rs   F)r\   check_0dzCalling splint.. with BSpliner  r9   )r;   r9   )r\   check_shape)rV   r  r   r   r`   r  rG   rI   r3   r  rK   rQ   r2   r4   r   )rS   rV   r  r  integrs        rW   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   r.   r.   r9   r;   rZ   rt   r9   )rV   r  r7  r2   r3   r  rK   r   zerosr   r   r	  r4   r   r  r
   r$  rS   rV   ctb_crU   bdtck_ds          rW   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	0rk   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 r'  )rV   r  r7  r2   r3   r  rK   r   r)  r   r   r	  r4   r   r  r
   r$  r*  s          rW   test_splantiderzTestInterop.test_splantider  s   &&$''" 	0AQSSCH$B##((*CAveeC2%#))AB-*?!@@A 0]((!##((*c133)?@eAhU;eAhU;ttuQx'''!"g...!%///0	0rk   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 )Nr9   r   r.   rZ   rt   r  r   )rV   r  rh   r2   r   r   r3   r4   r   r   r  r
   r$  r   r  r  rK   rQ   )rS   rV   r  rh   r   tnbntck_nr%  r  tck_n2bn2s               rW   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'''&%(((rk   N)r  r  r  r  r  r	  r  r  r  r   r%  r/  r1  r  r  rk   rW   r  r    s=    -H6-0' D%:C"H(0"0")rk   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  )rQ   rh   r   )rS   rT   s     rW   _get_xyzTestInterp._get_xy  s'    zz$''"BJJtww$777rk   c                     t        t              5  t        | j                  | j                  d       d d d        y # 1 sw Y   y xY w)NrB   rM  )rG   rH   r   rh   r   rS   s    rW   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   rM  rs   r[   r7   r4   r   r;  r   r   rS   rT   rh   r   rV   s        rW   test_order_0zTestInterp.test_order_0  V    b!Br2+"rE:r24"rE:rk   c                     | j                  |      \  }}t        ||d      }t         ||      |dd       t        ||dd      }t         ||      |dd       y )Nr.   rM  rs   r[   r7   r@  rA  rB  s        rW   test_linearzTestInterp.test_linear  rD  rk   r4   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   r.   r9   r;   r<   r   )r   r.   r9   r;   r<   r   r   r   zShapes of xr  rM  rG   rI   r   rS   r4   rw   r   s       rW   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   r.   r.   r9   r;   r<   rH  zx to not have duplicatesr  rM  )r   r9   r.   r;   r<   r   zExpect x to be a 1D strictly)r.   r7   )rG   rI   r   rK   rQ   r   rJ  s       rW   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r9   r;   r<   r   r   r   rs   r[   rA  )rS   rT   rh   r   r4   rV   s         rW   test_not_a_knotzTestInterp.test_not_a_knot  sC    b!B# 	?A"2r1-AAbE2E>	?rk   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   r3  rs   r[   r.   r   r   r7   dy=rt   r4   r4  r   )r;  r   r   r   )rS   rT   rh   r   rV   r
  s         rW   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rk   rO  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   re   r   r7   r   r   r3  rs   rt   )rK   rR   r   r   r5  rQ   r   r   )rS   r4   rT   rU   r   rw   r   rV   s           rW   test_periodic_randomzTestInterp.test_periodic_random  s     ii##D)GGC%%a(2-.a 3&u!zz!}bjjm1q!q*=!ae,rk   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   r9   r=   r7   r.   r   r   rS  rs   rt   )rh   r   rK   rR   r   r5  r  r   r)  r  r  rQ   r   r   r   )rS   rT   rU   r   rw   r   rV   r
  s           rW   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6rk   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   r7   r.   r   r   r3  )rK   rR   r   r   r5  rG   rI   r   )rS   r   r4   rU   rw   r   s         rW   test_periodic_points_exceptionz)TestInterp.test_periodic_points_exception5  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   r9   r   )	rK   rR   r   r   r5  r)  rG   rI   r   )rS   r   r4   rU   rw   r   r2   s          rW   test_periodic_knots_exceptionz(TestInterp.test_periodic_knots_exception@  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   r3  T)r  r4   rs   rt   r.   r   r   r   )r   rh   r   r   r   r   r   )rS   r4   rV   r`   r,  r
  s         rW   test_periodic_splevzTestInterp.test_periodic_splevK  s     tww1jITWWdgg415DGGS!QtwwZe4 q! 	?A!,CC477q!1>	?rk   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   r3  rX  rs   rt   r   re   r   r7   r   )
r   rh   r   r   r   rK   rR   r   r   r5  )rS   rV   cubr   rU   rw   r   s          rW   test_periodic_cubiczTestInterp.test_periodic_cubicX  s    tww1jI$''477J?$''
CLu= ii##D)GGC%%a(2-.a 3&u!q!q*=!Q
3!c!f51rk   c                 T   dt        | j                  | j                  d      }t        | j                        t	        | j                  | j                        t        j                  fd      }t         || j                         || j                        d       y )Nr;   r   r3  c                 ,    t        | t              S )Nrr   )r   rK   )rw   r3   r4   r2   s    rW   r  z6TestInterp.test_periodic_full_matrix.<locals>.<lambda>o  s    K1ar$B rk   rs   rt   )r   rh   r   r   r   rK   	vectorizer   )rS   rV   r(  r3   r4   r2   s      @@@rW   test_periodic_full_matrixz$TestInterp.test_periodic_full_matrixh  su     tww1jIDGGQ'&twwA>\\BC$''
BtwwKe<rk   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r.   g       @r9   r3  rs   r[   r7   r.   r   rE   F)r\   r]   r"  r;  r   r   rQ   rP   )rS   rT   rh   r   r   rV   s         rW   test_quadratic_derivzTestInterp.test_quadratic_derivr  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	
rk   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;   r.   r?   )r.   r@   rX  rs   r[   r   r.   rE   r7   r9   r   rh  )rS   rT   rh   r   r4   der_lder_rrV   s           rW   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:rk   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   rE   )r.   g      ()r9   r.   rg  )r9   r?   r3  rs   r[   r   r.   r9   r7   )rO   rP   r  r   r   r   rQ   )rS   rT   r4   rU   rw   r   rm  rn  rV   r   vals              rW   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;   rk  )r9   r@   rX  rs   r[   )r   rh   r   r   r   )rS   r4   r2   rm  rV   s        rW   test_cubic_deriv_unstablez$TestInterp.test_cubic_deriv_unstable  s[     DGGQ'"twwAt}M$''
DGG%eDrk   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 )Nr9   r.   r   r7   r>   rl  rX  rs   r[   r=   r   )r;  r   r  r   r   r  r  )rS   rT   r4   rh   r   r2   rV   s          rW   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===rk   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=   r0   r.   r=   rk  rX  r  rE   rs   r[   )rQ   r   rf   rP   r   )rS   rT   r4   rw   r   rV   rh   r   s           rW   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:rk   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)r0   r9   r;   r<   r   r   ry  rX  *   )ry  ry  rI  )rS   rw   r   lrs        rW   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   r9   )r   r   r.   r   zBad boundary conditions at 0.r  rX  )ir   zBad boundary conditions at 6.)rO   rG   rI   r   )rS   rT   rw   r   r}  r~  s         rW   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;   r/   )r.   y              @)r.   y      @       @rX  rs   r[   r   r.   r   r7   r   r.   rM  )r;  r   r   cmathr  )rS   rT   r4   rh   r   rm  rn  rV   s           rW   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>	?rk   c                     |j                  d|j                        }|j                  d|j                        }dD ]  }t        |||      } ||        y )Nre   rE   r   rM  )rO   int32r   )rS   rT   rw   r   r4   rV   s         rW   test_int_xyzTestInterp.test_int_xy  sT    IIbI)IIbI)  	A"1a1-AaD	rk   c                 t    |j                  ddd      }|d d d   }|d d d   }dD ]  }t        |||        y )Nr7   r.   r   r   r   rM  )rf   r   )rS   rT   rh   rw   r   r4   s         rW   test_sliced_inputzTestInterp.test_sliced_input  sI    [[Q$ssGssG 	*Aq!q)	*rk   c                    |j                  d|j                        }|dz  }|j                  |j                  |j                   fD ]=  }t	        j
                  |d      j                  |      }t        t        t        ||       ? y )Nre   rE   r9   r7   )
rO   rP   rM   rN   xpxatsetrG   rI   r   )rS   rT   rw   r   zs        rW   test_check_finitezTestInterp.test_check_finite"  sp    IIb

I+qD&&"&&266'* 	@Aq"!!!$A*&8!Q?	@rk   )r.   r9   r;   r   c                 v    t        t        d            }|D cg c]  }|dz  	 }}t        |||       y c c}w )Nre   r9   rM  )listr   r   )rS   r4   rw   ar   s        rW   test_list_inputzTestInterp.test_list_input+  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 )Nr.   r   r0   r>   r?   r@   r;   r3  rs   r[   r   rE   r7   )r;  r   r   r   rQ   rP   )rS   rT   rh   r   rm  rn  rV   s          rW   test_multiple_rhszTestInterp.test_multiple_rhs2  s    b!BXXr2hQX'b"Xb"Xr2UENC"rE:beQKJJuQx{"**J5E	
 	bfaLJJuQx{"**J5E	
rk   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   r.   r   r   r   rX  )rK   rR   r   r   r   r3   r   )	rS   r   r4   rU   rw   r   rV   d_ld_rs	            rW   test_shapeszTestInterp.test_shapesC  s    ii##D)1GGCJJAJ&'JJQ1aLJ)q!Q'ssyyQ1aL((( 3::i()*3::i()*q!Qc
;ssyyQUQY1a0000rk   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;   r?  r3  rl  rZ   rt   )r?  r>  r  r9   )Nr>  ry  r@  typor.   r   r=   r=  r   r  r   r   r   r   r  rX  r>  )r;  r  r   r   r3   rG   rI   r   r  rK   rR   r   r   rQ   r)  )rS   rT   rh   r   r(  r  rm  rn  r   r4   rU   rw   r   r  r  s                  rW   test_string_aliaseszTestInterp.test_string_aliasesR  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   rs   r[   )rK   rR   r   r   r   make_interp_full_matrrQ   rv   r   r   r3   )rS   rT   r   r4   rU   rx   y_npry   r  rw   r   r2   rV   s                rW   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%8rk   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;       r9   r.   Nr7   r   )offsetrs   rt   )rK   rR   r   r   intdiagflatr)  r  diagonalr   r   linalgsolve)rS   r   rU   r4   r  r  r
  urlldr   rV   s               rW   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?#	?rk   N).r  r  r  rK   rf   r  rh   r  r   r;  r>  rC  rF  ra   rz  r{  rK  rM  rP  rT  rV  rX  rZ  r\  r^  ra  re  ri  ro  rr  r|  ru  rw  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  rk   rW   r9  r9    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?rk   r9  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).
    r.   rE   )
r   rK   r)  rP   r   r  r*   evaluate_all_bsplslr  )rw   r   r2   r4   rU   Ar   r  leftbbr3   s              rW   r  r    s     66QVV66QVVaZ!^###	A
!Qrzz*A1X 	!t1Q4<D??1d+a/D ''1dD9 !T!VDF]
	! 	AAHrk   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.r.   rE   )rv   rK   rQ   r   r)  rP   r   r  r*   r  dotTr  r  )rw   r   r2   r4   r  rU   r  r   r  r  r  r  Yr3   s                 rW   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rk   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   r7   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  r.   r7   )rcond)rw   r   r2   r4   r  r   r   r3   r   r   rK   r  lstsq)rS   r  rw   r   r2   r4   c0AYrV   aar   r  r   s                rW   
test_lstsqzTestLSQ.test_lstsq  s     VVTVVTVVTVV3
1a%aAq1BAq!Qv6R ssyyQVVaZ!^---- Biioob!2o6Aq!R rk   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  rs   rt   )
rv   rQ   rw   r   r2   r4   rn   r   r   r3   )
rS   r  rT   rw   r   r2   r4   r  rV   b_ws
             rW   test_weightszTestLSQ.test_weights  s     Hc"**tvvtvvtvv&>?GG
1aLLOAq!Qv6aAqAf=SUU/SUU/sscee||rk   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  rs   rt   )rv   rQ   rw   r   r2   r4   rK   rR   r  r  r   r   r   r3   r   abs)
rS   rT   rw   r   r2   r4   r  b_neb_qrb_no_ws
             rW   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;<<<<rk   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   r.   )rv   rQ   rw   r2   r4   rU   rK   rR   r   r   r3   r   )
rS   r  rT   rw   r2   r4   rU   r   r   rV   s
             rW   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9rk   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  rZ   rt   )rv   rQ   rw   r2   r4   rU   rK   rR   r   r   r   r   r3   r  r   )rS   r  rT   rw   r2   r4   rU   nrhsr   r   rV   r
  r  coefss                 rW   test_multiple_rhs_2zTestLSQ.test_multiple_rhs_2+  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  rZ   rt   )rv   rQ   rw   r2   r4   rU   rK   rR   r   r   r3   )
rS   rT   rw   r2   r4   rU   r  r   r  b_neqs
             rW   test_multiple_rhs_3zTestLSQ.test_multiple_rhs_3:  s    Gc"**tvvtvv&67GGG
1aII1d),JJqMq!Q$71a9=e4rk   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  r/   rZ   r[   )
rv   rQ   rw   r2   r4   r   r   r   r   r   )
rS   r  rT   rw   r2   r4   rO  rV   r   r   s
             rW   r  zTestLSQ.test_complexC  s     =3rzzDFFDFF#34<dff<1aZZ(+,Ar1a7q"''"+q!FCq"''"+q!FC!d1gDG3%eLrk   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  r.   r   r/   rZ   r[   )rv   rQ   rw   r2   r4   r   r   r   r   r   r   )	rS   rT   rw   r2   r4   rO  rV   r   r   s	            rW   test_complex_2zTestLSQ.test_complex_2O  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Lrk   c                     t        j                  d      j                  t              }t        j                  d      j                  t              }t	        |d      }t        |||d|       y )Nre   r.   rM  r4   r  )rK   rO   astyper  r   r   rS   r  rw   r   r2   s        rW   r  zTestLSQ.test_int_xye  sM    IIbM  %IIbM  %AO1a1V4rk   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 )
Nre   rE   r.   rM  r  r7   r>   rZ   rt   )rK   rO   float32r   r   r  floatr   )rS   r  rw   r   r2   spl_f32spl_f64x2s           rW   test_f32_xyzTestLSQ.test_f32_xym  s    IIb

+IIb

+AO!!QQv>!HHUOQXXe_ahhuo6
 eafn#WR[u=rk   c                     t        j                  ddd      }|d d d   }|d d d   }t        |d      }t        |||d|       y )Nr7   r.   r   r;   r  )rK   rf   r   r   )rS   r  rh   rw   r   r2   s         rW   r  zTestLSQ.test_sliced_inputz  sK     [[Q$ssGssGAqM1a1V4rk   c           	         t        j                  d      j                  t              }|dz  }t	        |d      }t         j
                  t         j                  t         j                   fD ]   }||d<   t        t        t        ||||       " y )N   r9   r;   r7   r  )
rK   rO   r  r  r   rM   rN   rG   rI   r   )rS   r  rw   r   r2   r  s         rW   test_checkfinitezTestLSQ.test_checkfinite  sq     IIbM  'qDAqM&&"&&266'* 	OAAbE*oq!QvN	Ork   c                     | j                   | j                  | j                  }}}|j                  d       |j                  d       |j                  d       t	        ||||       y )NFrd  )rw   r   r2   r  )rw   r   r2   rf  r   r  s        rW   rg  zTestLSQ.test_read_only  sU     &&$&&$&&a1	


	


	


!qAf5rk   r4   r.   c                    | j                   | j                  }}t        t        j                  |d   |d   d      |      }t        ||||d      }t        ||||d      }|dd  |d d z   dz  }t         ||       ||      d	
       y )Nr   r7   r   r  r  r  r.   r>   rZ   rt   )rw   r   r   rK   rf   r   r   )rS   r4   rw   r   r2   spl_norm_eqspl_qrrh   s           rW   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%@rk   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 )
Nr9   r;   r  r  r.   r7   r>   rZ   rt   )rK   repeatrw   r   r   r2   r   )rS   rw   r   r  spl_2rh   s         rW   test_duplicateszTestLSQ.test_duplicates  s    IIdffa IIdffa !DI1dff$?eafn#b	5959rk   N)$r  r  r  rK   rR   r   r   rU   r4   r   rw   r   r   rf   r2   parametrize_lsq_methodsr  r  r  r  r  r  r  r  r  r  r  r  rg  ra   rz  r{  r  r   r  r  r  rk   rW   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:rk   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 )Nr9   r.   r   )r  r  ncr  r   )rS   r  r  r  s       rW   __init__zPackedMatrix.__init__  sW    vv{{{{awwqzV\\!_,,,rk   c                 L    | j                   j                  d   | j                  fS Nr   )r  r   r  r=  s    rW   r   zPackedMatrix.shape  s    vv||A''rk   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 )Nr.   r   )rK   r)  r   r  r   minr  r  )rS   outnelemr
  nels        rW   todensezPackedMatrix.todense  s    hhtzz"Qsyy|$ 	JAdggA.6C:>&&DSD/C4;;q>$++a.3"6667	J 
rk   N)r  r  r  __doc__r  propertyr   r  r  rk   rW   r  r    s%    - ( (rk   r  c                 6   ddl m} | 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   )dlartgr.   r=   r7   rE   )scipy.linalg.lapackr	  r  r  r  r   r  r   r  fprotar  r  rK   rG  int64)a_pr   startrowr	  r  r  r  r  nzRr  r
  oir   r3   r  r~  r}  offsR_ps                       rW   _qr_reduce_pyr    s    + 	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7Nrk   c                 8    | |z  ||z  z   }| |z  | |z  z   }||fS )zLGivens rotate [a, b].

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

    r  )r3   r  r  rV   r  r  s         rW   r  r    s1     A#!)B
A!Br6Mrk   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   Nr.   .r9   r7   r   )r  r   r  rK   r   r   r  r  )
r  r   r  r   r  r  r3   r
  r  summs
             rW   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&		.
 Hrk   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;   rE   r.   )rK   rO   r  r   )rS   rU   r4   rw   r   r2   s         rW   _get_xytzTestGivensQR._get_xyt  sF    IIau%qD1ac7N1!Qzrk   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 )	Nre   r   r.   rE   rZ   rt   gvIh%L=-a=)r  r
   r8  r  r  r  r  r   indicesrK   ascontiguousarrayr  datar   r  r*   	qr_reducer   minimumr   r  r  r  r  r  rn   )rS   rU   rw   r   r2   r4   a_csrqr~  qTyr  r  r  r  r  y_c_fullc_bandedr   s                      rW   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;rk   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 )	Nre   r   r.   rE   rZ   rt   F)check_dtype)r  r
   r8  r   r  rK   r   r  r!  r   r  r  r*   r"  r   r  r   r  r  )rS   rU   rw   r   r2   r4   r$  r  r  r  r  r  r'  RRr   s                  rW   test_py_vs_compiledz TestGivensQR.test_py_vs_compiledF  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+rk   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 )Nre   r.   rE   r   rZ   rt   )r  rK   rO   r  r*   data_matrixr   r
   r8  tocsrr!  r   r  r  r  r   r   )rS   rU   rw   r   r2   r4   r  r  r  r  r  r$  a_wA_offset_s                  rW   test_data_matrixzTestGivensQR.test_data_matrixa  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''''rk   c                    d}| j                  |      \  }}}}t        j                  ||dz  f   }t        j                  |||t        j
                  |            \  }}}t        |||      }	t        j                  ||||       t        |	|      }
t        j                  ||||||t        j
                  |      |      \  }}}t        ||
d       y )Nre   r9   rs   rt   )
r  rK   r  r*   r0  rn   r  r"  r  r   )rS   rU   rw   r   r2   r4   r  r  r  r  r3   r   r   s                rW   test_fpbackzTestGivensQR.test_fpbackr  s    ]]1%
1aEE!QT'N ,,Q1bll1oF62FB'1fb!,1aL??1b!Q1bll1oqIAqAE*rk   c                    d}| j                  |      \  }}}}t        j                  |dz   ft              }|D ]N  }t	        t        j                  |||||dz         |       t	        t        j                  ||||d|z        |       P y )Nre   r.   rE   r9   )r  rK   r)  r  r   r*   r  )rS   rU   rw   r   r2   r4   
zero_arrayr  s           rW   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rk   N)	r  r  r  r  r*  r.  r5  r7  r:  r  rk   rW   r  r    s"    !<F,6("+Lrk   r  c                     t         j                  j                  t         j                  j                  t         j                  j	                  t
                    d|       S )Nr!  )ospathrs  abspathdirname__file__)basenames    rW   	data_filerB    s8    77<<(AB* *rk   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<   r9   r;   r=   r  r.   r7   r   z)``x`` and ``y`` length must be at least 5r  )rK   rR   r   r   r5  r  normalrG   rI   r   r   r  rO   r  ra   r	   )rS   r   rU   rw   r   x_duplexception_messages          rW   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.npzrw   r   y_GCVSPLN-C6?F)r\   r]   r,  )rK   loadrB  r   r   )rS   r!  rw   r   rK  y_comprs         rW   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<   r9   r;   r=   r  )lamr?  rX  r   r7   rZ   rt   N)rK   rR   r   r   r5  r  rF  rQ   r   r   rf   r   )	rS   rT   r   rU   rw   r   
spline_GCVspline_interpgrids	            rW   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+"	$rk   r9   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<   r9   r;   r=   r  re   r   g      >@zJSpline with weights should be closer to the points than the original one: z.4z < )rK   rR   r   r   r5  r  rF  rv   rQ   r   choicer   r  r  r  r  r  r  rI   )rS   rT   r   rU   rw   r   r,  indr  spl_worigweighteds               rW   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	3rk   N)
r  r  r  rI  rO  rU  ra   rz  	fail_slowr\  r  rk   rW   rD  rD    s6    
(>6Tp$* [[13 3rk   rD  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.r.   c           	   3      K   | ]9  }t              D ])  }||f   t        |      z  t        	|      z   + ; y wr  )r   r  )
r  ixiyr3   r4   nytxtyrw   r   s
      rW   r  zbspline2.<locals>.<genexpr>'	  sU      7E"I7&( Bi!Aq"b/)AaBO; 7; 7s   ?A)r7  r  r   rK   rQ   )r   r2   r3   r4   nxr  rb  rc  rd  rw   r   s     ``  @@@@@rW   bspline2rf  	  s    DAqFB	R1qB!A#II	R1qB!A#II
 7 7b	7 7C::c?rk   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   r.   r0   r=   r  r  s         rW   r  r  ,	  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7Nrk   c                      t              z
  dz
  }|dz   k\  rt              |k\  sJ t         fdt        |      D              S )Nr.   c              3   F   K   | ]  }|   t        |      z    y wr  rh  r  s     rW   r  zbspline.<locals>.<genexpr>=	  s$     6qta1am#6r  )r7  r  r   )rw   r2   r3   r4   rU   s   ```` rW   rJ  rJ  :	  sD    A
QA1H3q6Q;''6U1X666rk   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     rW   r  z&NdBSpline0.__init__.<locals>.<genexpr>Y	  s     6bx~~b)6s   !c              3   R   K   | ]  }t        j                  |t                ! yw)rE   N)rK   rQ   r  )r  tis     rW   r  z&NdBSpline0.__init__.<locals>.<genexpr>Z	  s     ?rrzz"E22?s   %'N)r7  r   rH   r$  r4   r2   r3   )rS   r2   r3   r4   r  s        rW   r  zNdBSpline0.__init__A	  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noner.   r   )r7  r2   r   r4   rK   r  r$  	itertoolsproductr3   prodr  rQ   )rS   rw   r  r
  r  tdxdr4   r  itersidxterms               rW   __call__zNdBSpline0.__call__]	  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  rk   rW   rl  rl  @	  s    8"rk   rl  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  rC   r   r.   r   r  rs   rt   r   )
rK   rR   r  r   r  rQ   r
   r   r   r   )rS   rT   r   rU   r4   n_trr2   r3   rV   nbxis              rW   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Ark   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;   rM  r9   rO   r   r2   r3   	rS   rT   rw   r   r,  y_1r  t2r  s	            rW   make_2d_casezTestNdBSpline.make_2d_case	  s    IIaLqD A+dQqSj"1cQ/eeUWWUU1d7^eggdAg..2qyrk   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;   rM  r   rE   r  r9   )rO   r   rP   r2   r3   r4   r  s	            rW   make_2d_mixedzTestNdBSpline.make_2d_mixed	  s    IIaLqD A+IIarzzI*S0dQqSj"1cQ/eeUWWUU1d7^eggdAg..2suuegg%%rk   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  rB   )rB   r.   )r   r  rr   r;   r9   rE   Frs   r#  r\   rM  rt   r  )TFFr  )r<   r;   r9   r   r   )r<   r;   )r7   r9   )r   .)r.   .)r  rf  rK   rQ   rP   r   r   r   r7  rM   r   r   rR   r  r  r   r  r   )rS   rT   r  r  r  r4   rw   r   targetr   r   r  bspl2r   r  rrrs                   rW   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 )Nr9   r  r;   rr   r   r  rM  r<   r<   rs   rt   r7   rE   FgvIh%,=r  r   r   r9   r9   )r9   r9   )r  r   r   r   r   rK   r3   rQ   rP   r   r  )rS   rT   r  r  rw   r   r  r  r  r4   c2_4r   bspl2_4r  
val_singlec2_22bspl2_22
target2_22s                     rW   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;   r9   y               @rr   r  r   r  rM  r  r<   rs   rt   )r  r   r   r   r   )rS   rT   r  rw   r   r  r2   r  r  r4   r  r   r  r  r  s                  rW   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<   r.   rM  )r0   r0   rs   rt   r.   r  r9   皙?g? @)rK   rR   r  r   r   r  r   r   r   rf  r  )	rS   r   r4   rc  rd  r3   r,  r  r   s	            rW   test_2D_randomzTestNdBSpline.test_2D_random
  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  )rB   g333333@)r  r  r;   r9   rM  rs   rt   )r  r   r   r7  r   )
rS   r  r  kxkyr  rw   r   r  r  s
             rW   test_2D_mixedzTestNdBSpline.test_2D_mixed0
  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)Nrr   r  rM  r  c                 *    d| dz  z  |dz  d|z  z   z  S Nr;   r9   r  rw   r   s     rW   r  z2TestNdBSpline.test_2D_derivative.<locals>.<lambda>@
  s    QTQTAaCZ!8 rk   r.   r.   c                 $    d| dz  z  d|z  dz   z  S r  r  r  s     rW   r  z2TestNdBSpline.test_2D_derivative.<locals>.<lambda>A
  s    QTQqS1W!5 rk   )r   r   c                 $    | dz  |dz  d|z  z   z  S r  r  r  s     rW   r  z2TestNdBSpline.test_2D_derivative.<locals>.<lambda>B
  s    AA!!4 rk   r9   r.   c                      yr  r  r  s     rW   r  z2TestNdBSpline.test_2D_derivative.<locals>.<lambda>C
  r  rk   r   c                      yr  r  r  s     rW   r  z2TestNdBSpline.test_2D_derivative.<locals>.<lambda>D
  r  rk   r;   c                      yr  r  r  s     rW   r  z2TestNdBSpline.test_2D_derivative.<locals>.<lambda>E
  r  rk   c                      yr  r  r  s     rW   r  z2TestNdBSpline.test_2D_derivative.<locals>.<lambda>F
  r  rk   c                      yr  r  r  s     rW   r  z2TestNdBSpline.test_2D_derivative.<locals>.<lambda>G
  r  rk   rE   r   rs   rt   ))r7   r   r7   r   r.   )	r  r   itemsrQ   rP   r   r   rG   rI   )rS   rT   r  r  r  r  r  r  
test_casesr   expected_fnrw   r   expected_valsdirect
via_methodbad_nus                    rW   test_2D_derivativez TestNdBSpline.test_2D_derivative9
  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  )r9   r;   r   r   r   r;   r   r<   r.   r  r  rM  rs   rt   )rK   rR   r  r   r   r  r   r  r   rl  r   rS   r   r  r  rc  rd  r3   r  r  bspl2_0rT   s              rW   test_2D_mixed_randomz"TestNdBSpline.test_2D_mixed_random_
  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;   rM  r9   rs   rt   )rK   rO   r   r3   r   r2   r4   r   rv  rw  r   anyr   r   r   )rS   rw   r   spl_xspl_yr   r   valuesrgir  rV   r  bxis                rW   test_tx_neq_tyzTestNdBSpline.test_tx_neq_tyo
  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;   rM  r9   r.   r  )rS   rT   rw   r   r,  r  r  y_2r  r  r  s              rW   make_3d_casezTestNdBSpline.make_3d_case
  s    IIaLqD A+dQqSj"1cQ/dQqSj1n"1cQ/eeUWWegg&eeAtTM"ggdAtm$%ggdD!m$% 2qyrk   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;   rD   r   r   r;   r9   r.   rM  rD   rs   rt   )	rK   rR   r  r  r  r   zipr   r   )rS   r   rw   r   r  r  t3c3r4   bspl3r   r  r  s                rW   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 )Nrr   r;   rM  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;   r9   r.   r  rw   r   r  s      rW   r  z2TestNdBSpline.test_3D_derivative.<locals>.<lambda>
  s4    q1a4x1a4!A#:'>!Q$1*q.'Q rk   c                 B    d| z  |dz  d|z  z   z  |dz  d|z  z   dz   z  S Nr   r;   r9   r.   r  r  s      rW   r  z2TestNdBSpline.test_3D_derivative.<locals>.<lambda>
  s0    q1u1qs
';q!taczA~'N rk   c                 B    d| z  d|dz  z  dz   z  |dz  d|z  z   dz   z  S r  r  r  s      rW   r  z2TestNdBSpline.test_3D_derivative.<locals>.<lambda>
  s0    q1u!Q$
';q!taczA~'N rk   c                 *    d| z  d|dz  z  dz   z  dz  S )Nr   r;   r9   r  r  s      rW   r  z2TestNdBSpline.test_3D_derivative.<locals>.<lambda>
  s     q1u!Q$
';a'? rk   c                      yr  r  r  s      rW   r  z2TestNdBSpline.test_3D_derivative.<locals>.<lambda>
  r  rk   ))r.   r   r   )r9   r   r   )r9   r.   r   )r9   r.   r;   )r9   r.   r<   rE   r   rs   rt   )r  r   rK   rR   r  r  r  rQ   r  rP   r   r   )rS   rT   r  r  r4   r  r   rw   r   r  r   xi_npr  r  r   r  xi_yi_zi_r  s                       rW   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<   r.   rM  )r0   r0   r.   rs   rt   r  r  g?r  gffffff?)rK   rR   r  r   r   r  r   r   rl  r   r  )rS   r   r4   rc  rd  tzr3   r,  spl_0r  rT   s              rW   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<   r.   r/   rM  r  r  r  rs   rt   )rK   rR   r  r   r   r  r   r   r   r   r  r   )rS   r   r4   rc  rd  r  r3   r,  r  r  r  s              rW   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	@rk   
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;   )r4   r   )r7   r   )r+  r  r  )r7   g            @r9   r.   r   rs   rt   r  r   rv   rK   rQ   r  r   )rS   r  r  r  r  r4   r  rw   r   r  r   r  r  r  s                 rW   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  )rS   r   r  r  r4   r  r  r  rw   r   r  r   r  r  r  s                  rW   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;   rM  )r  r.   r   )r+  r   r  )r7   r  r  r9   r.   Fr   r   r7   rs   rt   )r  r   rv   rK   rQ   r  r   r   )rS   r  r  r4   r  rw   r   r  r   r  r  r  s               rW   #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;   rM  r  r.   r9   r   r+  r  r  r7   r  rs   rt   )	r  r   rK   rQ   rM   r  r   r   r   )rS   r  r  r4   r  rw   r   r  r   r  r  r   r  s                rW   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  r7   r9   r.   r   r  r  rM  rs   rt   )rK   rR   r  r   r  r   flagsc_contiguousr   r  r  r   rl  r   r  s              rW   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;   rM  Fr(  )r  r   r   r   	writeable)rS   r  r  r4   r  r
  bspl3_s          rW   test_readonlyzTestNdBSpline.test_readonly=  sy    %%'	B"bA&q 	*A$)BqEKK!	*"2rQ'Y6)#4444rk   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)Nr(  )r<   r   r   r   gؗҜ<rt   r;   zData and knots*r  r.   r9   )
r  rK   rQ   r   r8  r   r   r  rG   rI   )rS   r  r  r4   r  dmdm1s          rW   test_design_matrixz TestNdBSpline.test_design_matrixI  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<   r.   rM  c                 L    t         j                  g dg dg df   } ||       y )Nr  r  r  )rK   r  )r   r,  r  s      rW   rj  z1TestNdBSpline.test_concurrency.<locals>.worker_fnb  s&    {&&' (B Grk   re   )	rK   rR   r  r   r   r  r   r   r&   )	rS   r   r4   rc  rd  r  r3   r,  rj  s	            rW   rk  zTestNdBSpline.test_concurrencyX  s+   ii##E*UU1aArwws{{{':;a?Aq!KLUU1aArwws{{{':;a?Aq!KLUU1aArwws{{{':;a?Aq!KLKKbggaik27719Q;	!DKERa1-	 	 Is3rk   )r  r  r  r  rK   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  ra   rz  r{  r  r  r  r  r  r  r
  rk  r  rk   rW   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4rk   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;   r9   r.   rM  rZ   rt   rR  r   r[   )r   linearr  rs   )rK   rO   rv  rw  r'   r   ravelr   r3   scipy.interpolater   )rS   rw   r   r  r  rV   r  r   r  r  r   RGIr  s                rW   test_2D_separable_simplez#TestMakeND.test_2D_separable_simplel  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;   r9   r4   solver)$   r<   r<   rs   rt   r  )r  r9   r9   )rK   rO   rv  rw  r  r'   sslspsolver  r  r   r   r   )rS   rw   r   r  rV   r  r  values4r   r  r  values22s               rW   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	r4   )r  r  )r;   r.   )r.   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;   r9   r  rZ   rt   )	rK   rO   rv  rw  r'   r  r  r   r  )	rS   r4   rw   r   r  rV   r  r  r   s	            rW   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   r7   r;   r9   r.   rM  )rK   rO   rM   rG   rI   r'   )rS   rw   r   r  s       rW   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>   r?   r@   r  r  )r.   r9   r.   r9   r.   r.   )r.   r9   r;   r9   r.   r.   )r.   r9   r9   r9   r.   r.   )rK   rG  )rS   rw   r   r  s       rW   _get_sample_2d_datazTestMakeND._get_sample_2d_data  sR    HH./HH./HH""""""	
 !Qwrk   c                     | j                         \  }}}t        ||f|d      }t        ||f|d      }t        j                  g dg dg      j
                  }t         ||       ||      d       y )	Nr.   rM  r  r  r.   gffffff@g333333@r   ffffff
@333333?r;   r.   r%  r&  r@   rU  r0   r;   rs   rt   r"  r'   r   rK   rG  r  r   rS   rw   r   r  r   r  r  s          rW   test_2D_vs_RGI_linearz TestMakeND.test_2D_vs_RGI_linear  sq    **,1aAq61*%q!faAXX668 99: 	 	R#b'6rk   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  r$  r'  rs   rt   	r"  r'   r  r  r   rK   rG  r  r   r)  s          rW   test_2D_vs_RGI_cubiczTestMakeND.test_2D_vs_RGI_cubic  sw    **,1aAq61#++>%q!faGXX668 99: 	 	R#b'6rk   r  c                     | j                         \  }}}t        ||f|d|d      }t        ||f|d      }t        j                  g dg dg      j
                  }t         ||       ||      dd	
       y )Nr;   ư>)r4   r  r]   r,  r  r$  r'  rs   r   r[   r(  )rS   r  rw   r   r  r   r  r  s           rW   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Ark   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  r$  r'  rs   rt   r-  r)  s          rW   test_2D_vs_RGI_quinticz!TestMakeND.test_2D_vs_RGI_quintic  sx    **,1aAq61#++>%q!fa8HIXX668 99: 	 	R#b'6rk   zk, meth))r.   r  )r;   r,  )r   r3  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   r#  r  r  gffffff?r  rC   r  rs   rt   )
rK   rR   r  cumsumr  r'   r  r  r   r   )rS   r4   methrndmrw   r   r  r  r   r  r  s              rW   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'6rk   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maxiterr.   r  r  r4   r;   )r"  rG   rI   r'   rK   r  )rS   rw   r   r  solver_argss        rW   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  ra   rz  r{  r  r   r"  r*  r.  r  gmresgcrotmkr1  r4  r9  r=  r  rk   rW   r  r  k  s    7(B4 [[S"JK> L>- 77 [[X		3;;'?@B AB7 [[N77Grk   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)Nr.   r  r9   r   z1D sequencer  )rK   rO   r   ra   r	   rI   _bfpcheckrS   r4   r2   rw   s       rW   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;   r9   r.   rD   re   z	Need k+1*r  )	rK   rO   dfitpackfpchecra   r	   rI   rC  rD  )rS   r4   rU   r  r2   rw   s         rW   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   r.   r9   r   )r.   r9   r;   r<   r  r7   r   zLast k knots*r  zFirst k knots*rH  rI  rC  rD  r  ra   r	   rI   )rS   r4   r2   rw   tts        rW   test_condition_2zTestFpchec.test_condition_2(  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   r.   r9   r   r.   r9   r;   r  r<   r     zInternal knots*r  )rH  rI  rC  rD  ra   r	   rI   rE  s       rW   test_condition_3zTestFpchec.test_condition_3>  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   r.   r   rP  r2  zOut of bounds*r  r7   rL  )rS   r4   r2   rw   rh   s        rW   test_condition_4zTestFpchec.test_condition_4K  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)Nr.   )r   r   r.   r9   r9   )r  r  r  rq   Schoenberg-Whitney*r  )r   r   r   rH  rI  ra   r	   rI   rC  rD  rE  s       rW   test_condition_5_x1xmz TestFpchec.test_condition_5_x1xmj  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 )Nr.   )r   r   r.   r.   r   g333333?r   )rH  rI  rC  rD  rE  s       rW   test_condition_5_k1zTestFpchec.test_condition_5_k1x  sI    #Jq!Q'1,,,zz!Q"***rk   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   r.   r9   r   rq   rV  r  rW  rE  s       rW   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   r.   r9   r   r  r<   rq   rV  r  rW  rE  s       rW   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)Nr.   )	r   r   r9   r;   r<   r   r   r   r   )r.   r.   r.   @r`  r`  r  rq   rV  r  rW  rE  s       rW   test_condition_5_3zTestFpchec.test_condition_5_3  s`    ')q!Q'2---]]:-BC 	 JJq!Q	  	  	 s   A##A,N)r  r  r  rF  rJ  rN  rR  rT  rX  rZ  r\  r^  ra  r  rk   rW   rA  rA    s4    	  *!, !> + + rk   rA  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".
    r.   r7   r9   rZ   rt   )rK   r  r   r7  r  r   )	rw   r2   r4   	residualsr`  r
  fpartscarriescarrys	            rW   _splitrg    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}Ô%Ir.   z5Internal error, please report it to SciPy developers.r9   N)rg  r   r7  rI   rK   r  r   )rw   r2   r4   rc  rd  r`  idx_max	fpart_maxr
  idx_newknotnew_knotidx_tt_news                rW   	_add_knotro    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Lrk   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   rE   r;   r0   r.   r=   r  )r4   r2   r9   r   _fitpack_reprorZ   rt   )
rK   rO   r  rG  r   r  rt  add_knotro  r   )rS   rw   r   r4   r2   r,  rc  _frnew_tnew_t_pyspl2
residuals2new_t2	new_t2_pys                 rW   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		6rk   r4   r  c                 0   |j                  d|j                        }|j                  ||j                  z  dz        }t	        t        |||d            d   }t        |||d      d   }|j                  ||j                        }t        ||d       y )Nr   rE   r   r4   r  r7   rZ   rt   )	rO   rP   r  r  r  r"   r   rQ   r   )rS   r4   rT   rw   r   r2   rM  s          rW   test_s0zTestGenerateKnots.test_s0  s    IIarzzI*FF1RUU7191Q/04AqA#A&ZZ"**Z-2E*rk   c                     d}|j                  ||j                        }|dz  }t        t        ||dd            }|j	                  t        t        j                  |      d            }t        |d   |d       y )	Nre   rE   r;   r   r  r7   rZ   rt   )rO   rP   r  r"   rQ   r   rK   r   rS   rT   rU   rw   r   knotsri   s          rW   	test_s0_1zTestGenerateKnots.test_s0_1  sh    IIarzzI*qD^AqA34::k"**Q-;<b	8%8rk   c                     d}|j                  |      }|dz  }t        t        ||dd            }|j                  t	        t        j                  |      d            }t        |d   |d       y )Nr   r;   r   r  r7   rZ   rt   )rO   r  r"   rQ   r   rK   r   r  s          rW   test_s0_n20zTestGenerateKnots.test_s0_n20  s_    IIaLqD^AqA34::k"**Q-;<b	8%8rk   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)Nre   r;   r   r4   r  nest)rK   rO   rG   rI   r  r"   rS   rw   r   s      rW   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   rE   r;   r   r  )r=   r=   r=   r=   r  r  r  r  )	r=   r=   r=   r=   r@   r  r  r  r  
r=   r=   r=   r=   r>   r@   r  r  r  r  )r=   r=   r=   r=   r>   r@   r  r  r  r  r  )r=   r=   r=   r=   r>   r?   r@   rU  r   r  r  r  rZ   rt   r7   N)rO   rP   r  rK   r  r  r"   rQ   r7  r  r   r   )rS   rT   rw   r   r4   r  wantedwantr2   rM  r   s              rW   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  r.   )r  r4   )r  r   r"   next)rS   rw   gens      rW   r  z!TestGenerateKnots.test_list_input>  s&    qNQSA.S	rk   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   rE   r   r;   re   r  r7   r  rZ   rt   r<   )r4   r  )
rO   rP   r  r  r  r"   r   rQ   rG   rI   )rS   rT   rw   r   r  r  s         rW   	test_nestzTestGenerateKnots.test_nestD  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   rD   r  )	rK   rO   r  r  rG   rI   r  r"   r  r  s      rW   r  zTestGenerateKnots.test_weightsU  s    IIaLFF1RUU719:& 	81		"67	8 :& 	6145	6 	6	8 	8	6 	6s   +C,CCCnpts)rQ  rq   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  re   r   r   r9   r;   r  r   r7   rZ   rt   )rK   rR   r   r   r  r  r  expr   r  r"   r   )	rS   r  r  r8  rw   r   r4   r2   rM  s	            rW   test_vs_splrepz TestGenerateKnots.test_vs_splrep_  s     yy$$U+rwwt|||.//FF1RUU72:!A#	!221a1"1%.Aa01"5AE*rk   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  r.   r7   r   )
rK   rO   r  r"   ra   warnsRuntimeWarningr   r7  r   )rS   rU   rw   r   r  r~  r`   s          rW   test_s_too_smallz"TestGenerateKnots.test_s_too_smallr  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=   r0   r>   r?   )r@   rU  r  r  )r=   r=   r=   r=   r.   )r  r  zweights are zeror  )r"   ra   r	   rI   r  )rS   r  s     rW   test_zero_weightsz#TestGenerateKnots.test_zero_weights  s=    ]M]aP]]:-?@ 	I	 	 	s   AAN)r  r  r  r}  ra   rz  r{  r  r  r  r  r  r  r  r  r  r  r  r  rk   rW   rq  rq    s    70 [[S/2+ 3+99:*>X4"6 [[V]3[[S.1+ 2 4+"+rk   rq  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   r.   r9   Nr   r   rE   )
r   rK   r  r
   r6  emptyr  r   r  	factorial)
r2   r4   rU   deltanrintrs  tiir  matrr
  s
             rW   
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Krk   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 )NrE   r.   r   r   rs  )rw   r   r2   r4   rK   rn   r  r  r   r  r
   r6  r   a_denser  rt  r  discr  b_denser   r)  r   r  )rS   rw   r   r2   r4   r  r  r   r  rv  r   s              rW   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%:;;<rk   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)rn  r.   r   r9   )rK   vstackr  r  scipy.linalgr  r  r  r   r   r
   r2   r4   r   r  r  rw   r   r,  r  )rS   r  abr  r  r%  r~  qyr  r3   r,  fps               rW   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{rk   )NT)r  r  r  r  r  r~  r  rk   rW   r  r    s    .rk   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   r9   re   gq@H&?r   rD   gQ	@)r4  rf   rK   r  r  )rS   rT   rw   r   r  s        rW   	_get_xyktz_TestMakeSplrepBase._get_xykt  s    <<:%Aqw+AAAa7NAq"%A$
#Q&AAa7Nrk   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   re   rD   r  rX  r.   r9   r  r  r4  r;   )r  r  r4  r7   rB   r4   r  r4  )r4   r  r  r4  )r  r  r4  r   	   )rK   rf   rG   rI   r#   r4  r  r   r   rH   rO   rS   rw   r   r  s       rW   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  r7   )r2   r4   r  r4  rZ   rt   )r  r"   r4  r#   r   r2   r3   r4   )rS   rw   r   r4   r  r2   spl_autospl_ts           rW   _test_with_knotsz$_TestMakeSplrepBase._test_with_knots  s    1QEFrJq!qAt||DAqAaF

EGG%8

EGG%8zzUWW$$$rk   r4   r.   r9   r;   r<   r   r   c                 T    | j                         \  }}}| j                  ||||       y r  )r  r  )rS   r4   rw   r   r  s        rW   test_with_knotsz#_TestMakeSplrepBase.test_with_knots!  s(    .."1aaAq)rk   c                 V   t        |||| j                        }t        |||| j                        }t        t	        |||| j                              d   }t        |j                  |j                  d       t        |j                  |d       t        |j                  |d       y )Nr3  r7   rZ   rt   )r#   r4  r   r  r"   r   r3   r2   )rS   rw   r   r4   r,  spl_ir2   s          rW   _test_default_sz#_TestMakeSplrepBase._test_default_s'  s|    !Q!T\\:"1a1dllC14<<@A"EuwwU3qu-/rk   c                 R    | j                         \  }}}| j                  |||       y r  )r  r  )rS   r4   rw   r   r   s        rW   test_default_sz"_TestMakeSplrepBase.test_default_s0  s&    .."1aQ1%rk   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   r9   r  r;   r5   r4   r  r  r  r.   r  rt   )r4  rK   rf   r  r  rO   warningscatch_warningssimplefilterr  r   r#   r   r2   r   r3   r4   )rS   r  rw   r   r`   r,  s         rW   r  z$_TestMakeSplrepBase.test_s_too_small5  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=r(  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 )
Nre   r   r   r9   r;   r3  h㈵>r  r.   )	r4  rK   rf   r  r  rO   r#   r3   r  )rS   r4   rU   rw   r   r,  r  r  s           rW   
test_shapez_TestMakeSplrepBase.test_shapeR  s     <<:%Aqw*Aq	A		!A1A!Q!T\\:AqAt||DuuzzQww||q    Aq1ac7{a4Nww||q   rk   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)Nre   r   r9   r.   :0yE>nonsenser  )rK   r  rf   r  rG   rI   r#   rS   Nr  rV   rw   r   s         rW   test_error_on_invalid_bc_typez1_TestMakeSplrepBase.test_error_on_invalid_bc_typeg  sf    !BEE'1KK1a!e$FF1I:& 	:1j9	: 	: 	:s   A//A8r4  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   r9   re   r.   r   r  r   r  r4   r  r  r  r  r4   r4  rt   )rK   rf   r  r  r7  r   r#   r   r2   r   r3   r4   )rS   r4  r4   rw   r   r  r`   r,  s           rW   %test_make_splrep_with_unequal_weightsz9_TestMakeSplrepBase.test_make_splrep_with_unequal_weightsp  s     KK1RUU7B'FF1IKK1c!f%QQ!t'Z2GI!Q!tq'Bs1v&ceeaS#%%']23AT	+rk   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   r.   r  rt   )r   r2   rK   r   r3   r4   )r,  r`   s     rW   checkzO_TestMakeSplrepBase.test_make_splrep_with_non_c_contiguous_input.<locals>.check  sG    CEE3q6*BEE#%%!ceeAg"67F/rk   r   r9   re   Fr.   r   r;   r  r   r  r  )rK   rf   r  r  r  r  r   r  r7  r   r#   )rS   r4  r  rw   r   r   r  r  w1r   r`   r,  s               rW   ,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rk   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   r.   re   r9   r7   r;   r  )xbxer4   r  r2   r  r4  )rK   rf   r  r  rG  r#   r  r
   r2   r   r4   r   rQ   )
rS   r4  r4   rw   r   r  r  r  r2   r,  s
             rW   %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Crk   rU   )r   3   r  rD   r  )re   r   r   r.   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   r9   r   r   r  r  r  rD   r.   rZ   rt   )rK   rR   r  r   r   r  r  r  r  r   r4  r#   r   r2   r3   
rS   rU   r  r   rw   r   r2   r3   r4   r,  s
             rW   (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rk   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   r9   r   r   r  )r  r4  r2   r.   rZ   rt   )rK   rR   r  r   r   r  r  r  r  r   r4  r#   r   r3   r  s
             rW   "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6rk   )r  r  r  r4  rK   r  r  r  ra   rz  r{  r  r  r  thread_unsafer  r  r  r  r  r  r  r  r  rk   rW   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7rk   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)TestMakeSplrepr4   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   Fr.   rB   r@   r   r.   re   r   rZ   rt   ) scipy.interpolate._fitpack_repror  r  rK   rG  r  r   )
rS   r4   r  rw   r   r  r2   ff_dr  s
             rW   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	6rk   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  r.   rB   r@   r   rE   r  r  rZ   rt   )r  r  r  rK   rG  rO   r   r  r  r   r   )rS   r4   r  rw   r   r  r2   r  fwfw_dr  r  s               rW   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???	@rk   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;   r9   rZ   rt   )r  interpolatert  rK   rR   r  r   r   r  r7  r  r  r  r  r   r   )rS   rv  r   r2   rU   r4   DD_denses           rW   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/rk   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   r.   rB   r@   r   r  rZ   rt   )r  rQ   r   r   r#   r   r3   r   )
rS   rT   r4   rw   r   r  rM  r2   r3   r,  s
             rW   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>rk   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  r7   )r2   r4   r  rZ   rt   )r  r  r"   r#   r   r2   r3   r4   )rS   r4   rw   r   r  r2   r  r  s           rW   r  zTestMakeSplrep.test_with_knots  s    .."1a1Q/04q!qA.AqAa0

EGG%8

EGG%8zzUWW$$$rk   c                     d}|j                  ||j                        }|dz  }d}t        |||d      }|j                  j                  d   d|dz   z  k(  sJ y )Nre   rE   r;   r.   r  r   r9   )rO   rP   r#   r2   r   )rS   rT   rU   rw   r   r4   r,  s          rW   test_no_internal_knotsz%TestMakeSplrep.test_no_internal_knots*  s]    IIarzzI*qD!Q!q)uu{{1~AaC(((rk   c                     d}|j                  ||j                        }|dz  }t        ||d      }t        ||d      }t	        |j
                  |j
                  d       y )Nre   rE   r;   rM  rZ   rt   )rO   rP   r#   r   r   r3   )rS   rT   rU   rw   r   r,  r  s          rW   r  zTestMakeSplrep.test_default_s3  sV    IIarzzI*qD!Q!$"1a1-uwwU3rk   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   r.   r  rt   r9   )rK   rO   ra   r  r  r   r#   r   r2   r   r   r3   r4   r7  )rS   rU   rw   r   r~  r`   r,  s          rW   r  zTestMakeSplrep.test_s_too_small<  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@rE   )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   r9   r  )r  r4   r  )rK   rQ   rP   r   rG   rI   r#   r  s       rW   test_issue_22704zTestMakeSplrep.test_issue_22704J  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re   r;   rE   r;   rM  r  r  r.   )rO   rP   r#   r3   r  )	rS   rT   rU   r4   rw   r   r,  r  r  s	            rW   r  zTestMakeSplrep.test_shapeX  s    1IIarzzI*qD!Q!$AqA.uuzzQww||q    Aq1ac7{a48ww||q   rk   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  rE   r;   r   r  r.   r9   )rO   rP   r#   r3   r  r2   r   )rS   rT   rU   r4   rw   r   r  r  s           rW   test_s0_vs_notzTestMakeSplrep.test_s0_vs_noth  s    1IIarzzI*qDAqA+AqA+ww||q   ww||q   ww}}Q1q519,,,ww}}Q1A;...rk   N)r  r  r  ra   rz  r{  r  r   r  r  r  r
  r  r  r  r  r  r  rk   rW   r  r    s}     [[S"45	6 6	6 [[S"45@ 6@ 0?%)4.! /rk   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   r4   r  c                     |j                  ddd      }|j                  d      }t        |||d| j                        }|j                  j
                  d   d|dz   z  k(  sJ y )Nr   re   rD   r  r.   r  r9   )rf   r  r#   r4  r2   r   )rS   r4   rT   rw   r   r,  s         rW   r
  z-TestMakeSplrepPeriodic.test_no_internal_knots}  s[     KK2r"GGEN!Q!q$,,?uu{{1~AaC(((rk   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 )Nre   r   r9   r  r.   )rK   rf   r  r  r  r#   r4  r3   r  r2   r   )rS   r4   rU   rw   r   r  r  s          rW   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,,,rk   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 )Nre   r   r9   r.   rE   r  r  r  rL  r[   r   r0  r   r;   )	r  rf   rP   r  r#   r4  r   r   r  )rS   rT   r  r  rV   rw   r   r,  s           rW    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$?rk   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)Nre   r   r9   r.   r  r  )rK   r  rf   r  rG   rI   r#   r4  r  s         rW   $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=   r0   rU  r   r.   r   )r  r4   r4  r  )r  r4   r  r  )	rK   rG  r#   r   r   r2   r   r3   r4   )rS   r  rw   r   r  r,  r`   s          rW   '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	 rk   k_fp))r.   -C6)r9   r  )r;   gAȘrL  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)Nre   r   r.   r9   r  r  r  r5   r>   MbP?r=   r0   )rK   rf   r  r  r   r    r  r  r  r  r!   rN   r,  rG  r   )rS   r  r  rU   rw   r   r4   r  r`   fp0spliner   bsx_checky_checks                  rW   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  r4  ra   rz  r{  r
  r  r  r  r  r'  r  rk   rW   r  r  x  s     G[[S"45) 6) [[S"45- 6-@"< [[S1e*-  .  [[V%QR[[S4&)0 * S0rk   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)TestMakeSplprepre   r;   c                     |j                  ||j                        |j                  z  |z  }|j                  |      |j	                  |      g}|||fS )NrE   )rO   rP   r  r  r  )rS   r  r4   rT   rw   r   s         rW   _get_xykzTestMakeSplprep._get_xyk  sK    IIarzzI*RUU2Q6VVAYq	"!Qwrk   r  r   r  r!  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  re   r,  r  rZ   rt   r.   r   )rK   rO   r  r  r  r   r$   r   r2   r7  rQ   r  r3   r
   )rS   r  r  r4   rw   r   	num_knotsr2   r3   u_r,  r  r   s                rW   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rk   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   r9   r.  rt   rZ   r.   )r+  r  r  rK   r   r   rQ   r   r7  r   r$   r2   r3   r  r4   rG   rI   )	rS   r  r   r   r`   r  tck_au_ar,  s	            rW   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 )Nre   r  rT   rZ   rt   r+  r$   r   r   rS   rT   rw   r   r4   r,  r  s          rW   test_default_s_is_zeroz&TestMakeSplprep.test_default_s_is_zero  s?    --"-,1aaQA%8rk   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 )Nre   r7  r   r.  rZ   rt   r   )r+  r$   r   r   r   r3   r   )	rS   rT   rw   r   r4   r  u_ispl_nu_ns	            rW   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}}---rk   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   rE   r   r.  r  r  r.   r   rZ   rt   )	rK   rO   r  rG   rI   r   r$   r   r   )rS   rw   r`   r0  r,  r  s         rW   r  zTestMakeSplprep.test_1D2  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  rK   r+  ra   rz  r{  r1  r5  r:  r?  r  r  rk   rW   r)  r)    sl    qR 
 [[S"67A 8A: [[S"67/ 8/B9.1rk   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)TestMakeSplprepPeriodicre   r;   c                     |j                  dd|j                  z  ||j                        }|j                  |      |j	                  |      g}|||fS )Nr   r9   rE   )rf   r  rP   r  r  )rS   rU   r4   rT   rw   r   s         rW   r+  z TestMakeSplprepPeriodic._get_xykG  sI    KK1RUU7ARZZK8VVAYq	"!Qwrk   r  r   rL  r  r0  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 )Nre   r   r9   r  r  rF  r.   r  r   r  rZ   rt   r   r0  r[   )rK   rf   r  r  r  r   r$   r   r7  r2   r
   )rS   r  rU   rw   r   r/  r2   r3   r4   r0  r,  r  s               rW   r1  z.TestMakeSplprepPeriodic.test_simple_vs_splprepL  s     KK1RUU7A&VVAYq	" "Bb9	  QA.	Aq2a1j9Q 	2E* 355zYq\))) 	A 81aa 8 ;"	0rk   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   r9   r.   r  rt   rZ   r   r  )r+  r  r  rK   r   r   rQ   r   r7  r  r   r$   r4   rG   rI   r  )rS   r  r   r   r`   r  r3  r4  r  r  r,  s              rW   r5  z+TestMakeSplprepPeriodic.test_array_not_liste  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 )Nre   rU   rT   r   rX  rZ   rt   r8  r9  s          rW   r:  z.TestMakeSplprepPeriodic.test_default_s_is_zero  sB    --"-,1aa4QA%8rk   c                 <   | j                  d|      \  }}}t        |dd      \  }}t        |dd      \  }}t        ||d       |j                  |      }	t         ||      |	d       t         ||      |	d	d
       |j                  |j                  k(  sJ y )Nre   rJ  r   r   r  r   rZ   rt   r   r0  r[   )r+  r$   r   r   r   )
rS   rT   rw   r   r4   r  r<  r=  r>  y_arrs
             rW   r?  z0TestMakeSplprepPeriodic.test_s_zero_vs_near_zero  s    --"-,1a!!q*=
s!!ujA
sSu-c
E6c
E4@zzUZZ'''rk   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   r9   r   r.   r  r   r  r  rZ   rA  rt   )
rK   rf   r  r  rG   rI   r   r$   r   r   )rS   rw   r,  r  s       rW   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NrB  r  rk   rW   rD  rD  D  sm     qR 
 [[S"780 900 [[S"78C 9C<9(1rk   rD  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 Nr7   )rK   moveaxisr   _batch_shaper   _splines_axis)rS   rw   r   r   r#  kwargsyis          rW   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 rQ  )rT  rK   r   rS  r   rR  rU  )rS   rw   r#  r   s       rW   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  )rT  r  rK   r   rS  )rS   r  rV   r   r#  r   s         rW   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  deepcopyrT  r   rS   r   r  r#  s       rW   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  r[  rT  r   r\  s       rW   r   zBatchSpline.antiderivative  s<    mmD!@CMf--b1M
 Nr]  r  )r  r  r  r  r~  r  r   r   r  rk   rW   rO  rO    s    @
0
rk   rO  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, kwargsrQ  r0   r  r  r  
eval_shape)r  r.   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{ re   r9   r;   r<   )r   re   r7   r   r.   )r2   r4   r   )r   r#  r   )rK   rR   r  rf   rR  r   rJ   rO  r  testingassert_allcloser   r   r  )rS   make_splinerV  r   ra  r   rU   r   domainrw   r   r4   r2   r  refs                  rW   
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Rrk   N)
r  r  r  ra   rz  r{  r   r   r   ri  r  rk   rW   r`  r`    s    [[2
b	!
	$
%	.
Hi0	1
Hd+	,		 [[\+;<[[VZ0S 1 =Srk   r`  r  r  rb  )zr<  ro  rv  r  r  ro  r  r  r}  numpyrK   scipy._lib._array_apir   r   r   r   r   r   scipy._lib.array_api_extra_libarray_api_extrar  ra   r	   rG   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(   rH  r)   rC  r*   rz  ry  r,   r  r  r  r   r   r   ru   r   r_   r  r  r9  r  r  r{  r  r  r  r  r  r  r  rB  rD  rf  r  rJ  rl  r  r  rA  rg  ro  rq  r  r  r  r  r  r)  rD  rO  r`  r  rk   rW   <module>rw     s1   	        
   ) ( *     
  ! !E E B G G / / & 9 5 3 - &;;//  7_
) _
) _
)D 7S$ S$ S$l6,$G>  $ b +$_) _)D %&`? `? '`?F88 !++11(Y<MN  ?#~: ~: $~:B >)X	(nL nLb*
 ()J3 J3 *J3^
7:" :"z 9j4 j4 j4ZWG WGta  a L(. >"l l #l^2, ,^Q7 Q7h ;R/( R/  R/j ;\00 \0  \0~ < h1 h1 !h1V < b1 b1 !b1J 8$S $Srk   