
    -iifW                       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jL        jM        ZM ee           G d d                      ZN ee           G d d                      ZOd ZPd ZQd ZRd ZSd ZTe
fdZUdSdZVdde
fdZWd ZX G d d          ZY ee           G d d                       ZZd! Z[dTd"Z\ejL        ]                    d#d$d%g          Z^ ee           G d& d'                      Z_ G d( d)          Z`dUd+Zad, Zbd- Zc G d. d/          Zdd0 Ze ee)           G d1 d2                      Zfd3 Zgd4 Zhd5 Zi G d6 d7          Zj ee(           G d8 d9                      Zk G d: d;          Zl G d< d=          Zmd> Znd? Zo ee:           G d@ dA                      ZpdB Zq G dC dD          Zr G dE dF          Zs ee;           G dG dHes                      Zt ee;           G dI dJes                      Zu ee<           G dK dL                      Zv ee<           G dM dN                      Zw G dO dP          Zx G dQ dR          ZydS )V    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                   V   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"j#        $                    d& e%d'd(                    d)             Z&d* Z'd+ Z(e"j#        $                    d,g d-          e"j#        $                    d. e%d/                    d0                         Z)d1 Z*d2 Z+d3 Z,e"j#        $                    d4g d5          d6             Z-e"j#        $                    d4g d5          d7             Z.d8 Z/d9 Z0d: Z1e"j#        2                    e3j4        d;k    d<e5=          d>             Z6d?S )@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            n# 1 swxY w Y   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\  }}|	                    ||z   dz   |j
                  }|                    t
          j                            |                    }t          |||          }t          ||j                   t          ||j                   ||j        k    sJ d S )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          k/var/www/html/bet.cuttalo.com/ml/venv/lib/python3.11/site-packages/scipy/interpolate/tests/test_bsplines.py	test_ctorzTestBSpline.test_ctor4   s:   y*-w 	1 	1!SbTQ///	1 	1 	1[*** 	S 	S*gRRBFtq1Q1Q1QRRR	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	Sj'NNTQKB41-M-M-MNNNj'JJTQGtq-I-I-IJJJj'MMTaS1#J2$!-L-L-LMMM 	j'KKTIII!-J-J-JKKKj' 	< 	<RH:::	< 	< 	< 	i 	O 	O111\\\WMMM	O 	O 	Oi 	K 	K111\\\SIII	K 	K 	K 	j' 	B 	B,,,


a@@@	B 	B 	B 1IIac!e2:I..JJry''**++Aq!1313ACxxxxxxs   6B

BBc                 @   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            d S # 1 swxY w Y   d S )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    !!eSV%e<<<<SV%e<<<<sc!f}}}} ]>** 	 	AE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   >BBBc                 H   t          |                    g d          |                    ddg          d          }|                    ddd          }|                    |dk     |                    d|j        	          d
          }t           ||          |           d S )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   s     bjj,,

B70C0CqIII[[Ar""88BGRZZ"*Z%E%EsKK"x(((((    c                 F   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
                     d S )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   s    [Ar""q!f***"r|B//#5666lllq!f222"rxT	3<<=====rk   c           	      f   |                     g d          }|                     g d          }d}t          |||          }|                    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	           ||          |                     |
          d           d S )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"BJK77AaDDaDqR 1Q4acb(9(9(9#99AaDqsrARARAR<RR	
 	
 	
 	

 rzAq!955dDTD$?33!bjj66UCCCCCCrk   c                    d}|                     dg|dz   z  dg|dz   z  z             }|                     g d          }t          |                    |d          |                     ddg                    }t          |||          }|                    ddd          }t           ||d	
           ||d	
          d           d S )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00RT22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        \  	                    	         	 dz
           d          } ||          }                    	fd|D                       }t	          ||d                               	fd|D                       }t	          ||d           d S )Nrr   r.   rq   c           	      8    g | ]}t          |           S rr   )_naive_eval.0rw   r3   r4   r2   rT   s     rW   
<listcomp>z4TestBSpline.test_rndm_naive_eval.<locals>.<listcomp>   s,    CCC1Aq!Q2666CCCrk   rs   rt   c           	      8    g | ]}t          |           S r   )_naive_eval_2r   s     rW   r   z4TestBSpline.test_rndm_naive_eval.<locals>.<listcomp>   s,    FFFaq!Qb999FFFrk   )r_   r`   rf   stackr   )
rS   rT   rV   rh   y_by_ny_n2r3   r4   r2   s
    `     @@@rW   test_rndm_naive_evalz TestBSpline.test_rndm_naive_eval   s      2&&&%1a[[1q!Aw++aeehhCCCCCCCCCCDDSu----xxFFFFFFF2FFFGGT......rk   c           	          t                      }|j        \  }}}t          j        ||         || dz
           d          }t	           ||          t          ||||f          d           d S )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   sn    !!%1a[1q!Aw++"uR!Q33%@@@@@@rk   c                    t           j                            d          }t          j        |                    d                    }|                    d          }t	          ||          }t          | }|j        |j        }}t          j        ||         || dz
           d          }t           ||          t          ||          d           d S )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    i##D))GCJJrNN##JJrNNQllSMsAC1[1q!Aw++"uR~~E::::::rk   c                 @   t          |          }|                    |j                  |_        |                    |j        |j                 |j        |j         dz
           d|j                  }t           ||          |                    |                     d S )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   s    2&&&ll13[[QS13tAv;2:[FF"r||B//00000rk   c                    t           j                            d          }d\  }}t          j        |                    |                    }|                    |ddf          }t	          |j        ||f          \  }}t          |||          }||         || dz
           }	}||	|z
  |                    |                    d                    z  z   }
 ||
          j        dk    sJ d S )	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    i##D))1GCJJqMM""JJQ1IJ&&2:1v&&1Aq!1q!AwB27bjjI)>)>????quu{o------rk   c           	         t           j                            d          }d\  }}t          j        |                    ||z   dz                       }|                    |          }t           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           d S )	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   sO    i##D))1GCJJqs1u%%&&JJqMM aAaC()1a##WQq%9%95rUQqT\[1AbEBJ33"uuRyyu5555"uR!Q33%@@@@"uR!UA77eDDDDDDrk   c           	          t                      }|j        \  }}}||         || dz
           }}dD ]3}t           |||g|           ||dz   |dz
  g|          dd           4d S )Nr.   TF绽|=&.>Hz>r[   r_   r`   r   )	rS   num_parallel_threadsrV   r2   _r4   r   r   extraps	            rW   test_endpointszTestBSpline.test_endpoints   s    !!%1a1q!AwB# 	W 	WFAAr2h//ArEz2:6??dQUW W W W W	W 	Wrk   c           	          t                      }|j        \  }}}t           |||dz   | dz
           dz
             |||dz   | dz
           dz             d           d S )Nr.   r   r   rt   r   )rS   r   rV   r2   r   r4   s         rW   test_continuityzTestBSpline.test_continuity   s    !!%1a!AaC1H+-..!AaC1H+2E0F0F	 	 	 	 	 	rk   c                    t          |          }|j        \  }}}|d         |d         z
  }|                    ||         |z
  || dz
           |z   d          }||         |k     ||| dz
           k     z  }t           |||         d           |||         d                     t	          t
          j        |||f          \  }	}
}|                    t          |	|
||fd	                    }t           ||d          |           d S )
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5!r	b1aRT7l+ 	"T(555"T(666	8 	8 	8  
RAJ77tTzz%dAA"F"F"FGG"$///>>>>>rk   c                     t                      }|j        \  }}}|d         dz
  |d         dz   g} ||          }t          j        t          j        |                    rJ d S )Nr   r.   r7   )r_   r`   rK   allisnan)rS   rV   r2   r   r4   rh   yys          rW   test_default_extrapzTestBSpline.test_default_extrap   se    !!%1adQh"	"QrUU6"(2,,'''''''rk   c                    t           j                            d          }t          j        |                    d                    }|                    d          }t	          |j        ||f          \  }}d}t          |||d          }|j        d         |dz   z
  }|d	         |d         z
  }|                    ||         |z
  ||         |z   d
          }	||         |	||         z
  ||         ||         z
  z  z   }
t	          t           j        |
||f          \  }}}t          |          |j
        k    rdnd}t           ||	          |                    t          ||||f                    |           |                    g d          }	||         |	||         z
  ||         ||         z
  z  z   }
t           ||	d           ||
d          t          |          |j
        k    rdnd           d S )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   i##D))GCJJqMM""JJqMM2:1v&&1Aq!444GAJ!a% rUQqT\[[1AaD2Ir22qTR!A$Y1Q4!A$;//
RAJ77tT(,,
::uuAbEE2::eED$?;;<<4	
 	
 	
 	

 ZZ((qTR!A$Y1Q4!A$;//Abj)))Abd###*2.."*<<$	
 	
 	
 	
 	
 	
rk   c                     t                      }|j        \  }}}t          j        |||f          }t	          j        ||         ||          d          }t           ||           ||          dd           d S )Nr   rs   r[   )r_   r`   r   from_splinerK   rf   r   )rS   rV   r2   r3   r4   pprh   s          rW   
test_ppolyzTestBSpline.test_ppoly  sz    !!%1a1ay))[1q!uc**"rr"vvE>>>>>>rk   c                    t                      }|j        \  }}}t          j        |d         |d         d          }t          j        ||f         }t          d|dz             D ]4}t          ||||f|          }t          | |||          d           5t           |||dz             t          j        |          d           d S )	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))U2q5\AaC== 	; 	;CrAq!9#...BB"E::::: 	"1r}R'8'8uEEEEEErk   c                 8   d}g d}t           j                            d          }t           j        dd|                    d          ddf         }t	          |||          }t          j        g d          }t           |||dk             dz
             |||dk             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 d S )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  s    222i##D))E!Q

1q!+,Aq! J|||$$!AF)e+,,!AF)e+,,	. 	. 	.;qq{{AAgJJ77777 ZA"u*+++"u*+++	- 	- 	-ZA;qqe222AAb5jQ4G4G4GHHHHH ;qqUq11111QY13E3E3EFFFFFFFrk   c           	      0   |                     ddd          }t          j        |                    g d                    }t	          t
          j        ||j        |j        f          \  }}}|                    t          ||||j	        f                    }t           ||          |d           t          |          |j        k    rdnd}t           ||          |                    t          |          |j        	          |           t          j        |                    g d
                    }|                     ddd|j        	          }t           ||          |                    |dk     ||z  d|z
  dz            d           d S )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acN;;tTzz%dAC/@"A"ABB"|%8888&r**bj88UUd"rzz&**BJzGGdSSSS!BJJ|||$<$<===[[Ar[44"aBB
33%	A 	A 	A 	A 	A 	Ark   c           	          t                      }|j        \  }}}t          j        ||         || dz
           d          }t	           ||          t          ||||          d           d S )Nr.   r   rs   rt   )r_   r`   rK   rf   r   _sum_basis_elementsr   s         rW   test_basis_element_rndmz#TestBSpline.test_basis_element_rndmZ  sm    !!%1a[1q!Aw++"22q!Q??eLLLLLLrk   c                    t                      }|j        \  }}}|dz  }t          |||          }t          ||j        j        |          }t          ||j        j        |          }t          j        ||         || dz
           d          }t           ||          j         ||          d           t           ||          j         ||          d           d S )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++"
DDHH59999"
DDHH5999999rk   c                     t          j        |                    g d                    }|                     ||j                            sJ d S )Nr   )r
   r   rQ   r   rM   )rS   rT   rV   s      rW   test_nanzTestBSpline.test_nanm  sJ    !"**\\\":":;;xx"&		"""""""rk   c                 H   t          d|          }|j        \  }}}t          |||          }|                    ||         || dz
           d          }t	          d|          D ]<}|                                }t           |||           ||          dd           =d S )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 	FAABBr1IIqquu5uEEEEE	F 	Frk   c                 6   t          |          }|j        \  }}}|                    ||         || dz
           d          }t           |                                                                |           ||          dd           |                    |||fd          }|                    ||fd          }t          |||          }t           |                                                                |           ||          dd           d S )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7;;"E	7 	7 	7 	7 HHaAYQH''HHaV!H$$Aq!7((**5577;;"E	7 	7 	7 	7 	7 	7rk   c           	      D   t          j        |                    g d                    }t          j        |                    dd          dd          sJ t          j        |                    dd          dd          sJ t          j        |                    dd          dd          sJ t          j        |                    dd          dd          sJ t          j        |                    dd          dd          sJ t          j        |                    dd          dd          sJ t          j        |                    dd          d	d          sJ t          j        |                    ddd
          d	d          sJ t          j        |                    ddd          dd          sJ t          j        |                    ddd          dd          sJ t          j        |                    ddd          t          j        dd|j                  d          sJ d|_	        |
                                }|                     |d           |d          z
  |j                  }t          j        |                    dd          |          sJ t          j        |                    dd          d|z            sJ t          j        |                    dd          |          sJ t          j        |                    dd          d|z            sJ t          |                    dd          |                     |d           |d          z
                       t          |                    dd          |                     |d           |d          z
   |d          z    |d          z
                       t          |                    dd          |                     |d           |d          z
   |d          z    |d          z
                       t          |                    dd          |                     |d           |d          z
   |d          z    |d          z
  d|z  z                        t          |                    dd          |                     |d           |d          z
                       t          |                    dd          |                     |d           |d          z
                       t          |                    dd          |                     |d           |d          z
  d|z  z
                       d S )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  sj   !"**YYY"7"788|AKK1--sEBBBBBB|AKK1--xGGGGGG|AKK1--tUCCCCCC |AKK1--sEBBBBBB|AKK1--xGGGGGG|AKK1--tUCCCCCC |AKKA..UCCCCCC|AKKA4K@@#uUUUUUU|AKKA5KAA3PUVVVVVV|AKK25KAA4QVWWWWWW |AKK25KAA!LB66G G G 	G 	G 	G #ZZ!qqtt2:Z>>
|AKK1--z:::::|AKK1--rJ?????|AKKB//<<<<<|AKKB//Z@@@@@C--

11S66AAcFF?33	5 	5 	5C++

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

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

11Q44!!A$$;1#5##>Z#OPP	R 	R 	R 	Ar**BJJqqttaadd{,C,CDDDB,,bjj1!.E.EFFFAr**

11Q44!!A$$;Z#?@@	B 	B 	B 	B 	Brk   c                     g d}t          ||          }d|_        t          j        |          }dD ]=\  }}t	          |                    ||          |                    ||                     >d S )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    OOq!$$"a  5 	1 	1FBAKKB//KKB//1 1 1 1	1 	1rk   c                     t          j        g d          }dD ]C}|                    dd|          }t          |t          j                  sJ |j        dk    sJ Dd S )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  so    !))),,( 	! 	!K++a+<<Cc2:.....8q=====	! 	!rk   c                      G d dt                     }|                    g d          }|j        |k    sJ |                                j        |k    sJ |                                j        |k    sJ d S )Nc                       e Zd ZdS )'TestBSpline.test_subclassing.<locals>.BN)__name__
__module____qualname__ rk   rW   Br     s        Drk   r%  )r   r.   r9   r9   )r
   r   	__class__r   r  )rS   r%  rV   s      rW   test_subclassingzTestBSpline.test_subclassing  s    	 	 	 	 	 	 	 	 OOLLL)){a||~~'1,,,,!!+q000000rk   r  r	  r<   c                     d\  }}|                     dd||z   dz             }g d}|dz  }|                    ||           t          |          }t          j                            d          }|                    |                    |                    }	t          ||	||          }
|
j        j	        ||         f|d |         z   ||dz   d          z   k    s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          ||	||                                          t          ||	||                              d          t          ||	||                                          t          ||	||                              d          fD ]}|j        |
j        k    sJ d S )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((YY !8
		(A2YYi##D))JJszzrz**++Aq!$'''syR\Ob(m;b!oMMMMMZZ	""quu{b(mbh6HQJKKHHHHH F7Q;' 	: 	:B)W : : 1QR888: : : : 1a...99;;1a...99!<<1a...==??1a...==a@@B 	% 	%B 7af$$$$$		% 	%rk   c           	         d}|                     g d          }|                     g dg dg          }t          |||d          }t          ||dd d f         |          }t          ||dd d f         |          }t           |d	          |                     |d	           |d	          g                     d S )
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7aAB'''q!AqqqD'1%%q!AqqqD'1%%C"((DDIIttCyy+A"B"BCCCCCrk   c                     d }d}d}dD ]} ||||           t          ddd          D ]} |||d           d}t          dd	          D ]} |||d
           dS )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                 d   t           j                            d          }t          j        |                    |           dz  dz
            }|                    |           dz  dz
  }|dk    r|d         |d<   t          ||||          }t          j        t          |j                  |z
  dz
            } t          |j        ||          |          }t          j
        ||j        |                                          }	t          |	|j        z  |d	
           t          ||	d	
           dS )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   r:  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77A!!!$$r)B.A*$$u!%aaAAADs46{{Q*++A07461a0033L"015124 44;GII  L46115AAAAL,UCCCCCCrk   rD   r;   clampednaturalr   r9   
not-a-knotr   r   r   N)r   )rS   rB  rU   r4   bcs        rW   test_design_matrix_bc_typesz'TestBSpline.test_design_matrix_bc_types  s    	D 	D 	D* ( 	. 	.B##Aq"---- q!Q 	8 	8A##Aq,7777 q! 	6 	6A##Aq*5555	6 	6rk   r   )FTr   degreer   c           	         t           j                            d          }|                    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        ||||                                                     t          j        |dz
  |dz
  |dz   |dz   g          }|sKt          j        t"                    5  t          j        ||||           ddd           dS # 1 swxY w Y   dS t           |
|          t          j        ||||                                                     dS )z;Test that design_matrix(x) is equivalent to BSpline(..)(x).r   re   r.   r9   r
  N)rK   rR   r   r;  aminamaxr   rf   r<  r=  r
   r   r>  r?  arrayra   r	   rI   )rS   r   rI  r   rw   xminxmaxr4   r2   r3   bsplines              rW   'test_design_matrix_same_as_BSpline_callz3TestBSpline.test_design_matrix_same_as_BSpline_call%  s#    i##D))bFQJ/00WQZZdE"+dQhq&99+dD!vz*:;;+dQhq&99: ; F3q66A:>""!Q;//GAJJ-aA{CCKKMM	
 	
 	

 HdRi4#:tbyABB 	z** < <%aA{;;;< < < < < < < < < < < < < < < < < < 

%aA{;;CCEE    s    F%%F),F)c                    t           j                            d          }d}d}t          j        |                    |          dz  dz
            }|                    |          dz  dz
  }t          |||          }t          dd          D ]]}|d |         }|d |         }	t          j        ||j	        |          
                                }
t          |
|j        z  |	d	
           ^d S )Nr   re   r;   r8  r   r4   r.   r<   rs   rt   )rK   rR   r   r   r;  r   r   r
   r>  r2   r?  r   r3   )rS   r   rU   r4   rw   r   r   r  xcycrA  s              rW   test_design_matrix_x_shapesz'TestBSpline.test_design_matrix_x_shapesA  s   i##D))GC%%a((2-233a  2%*!!Q!,,,q! 	C 	CA2A2B2A2B"015124 44;GII  L4612EBBBBB	C 	Crk   c                     g d}t          j        d|d                                          }t          |g dgd           d S )N)r0   r0   r0   r>   r?   r@   r@   r@   r>   r;   )g      ?gmਪ?gK}\UU?r=   rs   rt   )r
   r>  r?  r   )rS   r2   des_matrs      rW   test_design_matrix_t_shapesz'TestBSpline.test_design_matrix_t_shapesR  s_    ,,,(Q22::<<;;;<"	$ 	$ 	$ 	$ 	$ 	$rk   c                 :   t           j                            d          }d}d}t          j        |                    |          dz  dz
            }|                    |          dz  dz
  }t          |||          }t          t                    5  t          j	        ||j
        d d d         |           d d d            n# 1 swxY w Y   d}g d	}g d
}t          t                    5  t          j	        |||           d d d            d S # 1 swxY w Y   d S )Nr   re   r;   r8  r   rS  r7   r9   )r=   r0   r>   r?   r@         @r~   )rK   rR   r   r   r;  r   rG   rI   r
   r>  r2   )rS   r   rU   r4   rw   r   r   r2   s           rW   test_design_matrix_assertsz&TestBSpline.test_design_matrix_assertsZ  s   i##D))GC%%a((2-233a  2%*!!Q!,,, :&& 	6 	6!!TVDDbD\1555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6$$$:&& 	+ 	+!!Q***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s$   %CC
C,DDDr:  )rE  rD  r   rF  c                    t           j                            d          }t          j        |                    d                    }|                    d          }|dk    r|d         |d<   t	          |||          }t          j        ||          }t          j        ddd          }t           ||           ||          d	           t          |||          }t          |j
        |j
        d	           d S )
Nr   r   r   r   r7   r:  r.   rZ   rt   )rK   rR   r   r   r   r
   from_power_basisrf   r   r   r3   )	rS   r:  r   rw   r   cbr   rh   bspl_news	            rW   test_from_power_basisz!TestBSpline.test_from_power_basisl  s     i##D))GCJJrNN##JJrNNj  aDAbEAw///'G<<<[Ar""2Ru5555%aG<<<
777777rk   c                 
   t           j                            d          }t          j        |                    d                    }|                    d          |                    d          dz  z   }|dk    r|d         |d<   t	          |||          }t          j        ||          }t          ||j        |          }t          ||j	        |          }t          |j        |j        d|j        z  z   d	           d S )
Nr   r   r/   r   r   r7   r^  rZ   rt   )rK   rR   r   r   r   r
   r_  r   r   r   r   r3   )	rS   r:  r   rw   r   r`  r   bspl_new_realbspl_new_imags	            rW   test_from_power_basis_complexz)TestBSpline.test_from_power_basis_complex|  s     i##D))GCJJrNN##JJrNNSZZ^^b00j  aDAbEAw///'G<<<*1afgFFF*1afgFFF"}2F FUSSSSSSrk   c                     t          j        g d          }t          j        g d          }t          j        t	          ||d          d          }t          |j        g dd           dS )	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.   rE  r^  )r0   r.   r.   r.   r.   r.   r.   rZ   rt   N)rK   rM  r
   r_  r   r   r3   )rS   rw   r   r   s       rW   test_from_power_basis_exmpz&TestBSpline.test_from_power_basis_exmp  sy     H___%%H___%%'Aq)(L(L(L09; ; ; 7 7 7eDDDDDDrk   c                    t          j        ddg          }t          j        dg          }|                    d           |                    d           t          j        ddd          }|                    d           t	          ||d          }t           ||          t          j        |          dz             d S )Nr   r.   r?   Fwritere   r1   )rK   rM  setflagsrf   r
   r   rn   )rS   r2   r3   rh   rV   s        rW   test_read_onlyzTestBSpline.test_read_only  s    HaVHcUOO	


	


[Ar""
%   a1""""r|B//#566666rk   c                 T    t                    }fd}t          d||           d S )Nrr   c                     |j         \  }} }                    ||         || dz
           d          } ||           d S )Nr.   i'  )r`   rf   )r   rV   r2   r4   rh   rT   s        rW   	worker_fnz/TestBSpline.test_concurrency.<locals>.worker_fn  sD    eGAq!QqT1aRT7E22BAbEEEEErk   re   )r_   r&   )rS   rT   rV   rp  s    `  rW   test_concurrencyzTestBSpline.test_concurrency  sF    2&&&	 	 	 	 	
 	 Iq11111rk   cygwinz'threading.get_native_id not implemented)r   r	   c           	      H   t                      }t          j        ddd          } ||          }t          j                    }t          j        t          |                    d| d                    d|j        j	        |j        j
                  }|j        |d d <   t          j        t          |                    d| d                    d|j        j	        |j        j
                  }|j        |d d <   ||_        ||_        t           ||          |           d S )	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""1R55%''yV[[S7788t sy	; ; ;#QQQyV[[S7788t sy	; ; ;#QQQ"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/  r5  rH  rQ  rV  rY  r\  rb  rf  rh  rm  rq  xfailsysplatformrb   r~  r$  rk   rW   r,   r,   1   s=       ! ! !F
 
 
) ) )> > >D D D 
@ 
@ 
@ l+OPPPk*KLLLgk222/ / 32 ML QP/A A A
; 
; 
;1 1 1	. 	. 	.E E E&W W W  ? ? ? ( ( (
 
 
6? ? ?F F FG G G4A A A M M M: : :# # #
F F F7 7 7+B +B +BZ	1 	1 	1! ! !1 1 1 [VUU2q\\22% % 32%:D D D(6 (6 (6T [],E,E,EFF[XuuQxx00  10 GF4C C C"$ $ $+ + +$ [Y )C )C )C D D8 8D D8 [Y )C )C )C D DT TD DTE E E&7 7 7	2 	2 	2 [ 8   
) ) 
) ) )rk   r,   c                   P   e Zd Zej                            dg d          d             Zej                            dg d          d             Zd Zej                            dg d	          d
             Z	ej                            dddg          d             Z
d Zd ZdS )
TestInsertxval)r=   r0   rB   r<         @      @c           	      X   |                     d|j                  }|                    |          dz  }t          ||d          }|j        |j        |j        f}t          t          ||           }|	                    |          }t          |j        |                    |j                  d           t          |j        |                    |j        d |j         dz
                     d           ||d         k    r|n	|d d         }	|                    |	d	|dd          |d d         z   z  f          }	t           ||	           ||	          d           |                    |          dz  }
t          ||
d          }t          ||                    ||
fd
          d          }|	                    |          }t          |j        |j        d           t          |j        |                    |	                    |          j        |	                    |          j        fd
          d           ||d         k    r|n	|d d         }	|                    |	d	|dd          |d d         z   z  f          }	t           ||	           ||	          d           d S )Nr   rE   r;   rS  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   r2  r`   spl_1fspl_1rh   y1spl_y1spl_yyspl_yy1s                 rW   test_insertzTestInsert.test_insert  s    IIarzI**FF1IIqL A+++vsvsu%&s++,%%FH!5!5EBBBBFHYsufQhY,?!@!@uMMMM !B%--QQQssVYYC1223B30122Br7777 VVAYY\#ArQ///#ArxxBax'@'@AFFF$$T**	577777IHHcood++-v/A/A$/G/G/IJQRHSS	
 	
 	
 	
 !B%--QQQssVYYC1223B30122r

GGBKKe<<<<<<rk   zxval, m))r=   r9   )r0   r;   )r
  r   )r<   r9   )r  r9   c           	         |                     d|j                  }|                    |          dz  }t          ||d          }t	          t          ||j        |j        |j        f|           }|	                    ||          }t          |j        |                    |j                  d           t          |j        |                    |j        d |j         dz
                     d           ||d	         k    r|n	|d d	         }	|                    |	d
|dd          |d d	         z   z  f          }	t           ||	           ||	          d           d S )Nr   rE   r;   rS  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   r2  r  r  rh   s
             rW   test_insert_multizTestInsert.test_insert_multi  sM    IIarzI**FF1IIqL A+++&'>!DDDEa((FH!5!5EBBBBFHYsufQhY,?!@!@uMMMM!B%--QQQssVYYC1223B30122Br777777rk   c                    t           j                            d          }d\  }}|                    t          j        |                    ||z   dz                                 }|                    |                    |ddf                    }t          |||          }|                    |                    ||dz            || dz
                               }|                    |          }	|                    |                    ||dz            || dz
           d	                    }
t           ||
           |	|
          d
           d S )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   r2  xvr  rh   s              rW   test_insert_randomzTestInsert.test_insert_random  s+   i##E**1JJrws{{!A{667788JJs{{Aq	{2233aAZZ!A#Qr!tW==>>##ZZ!A#Qr!tW2FFGGBr777777rk   r  )	r   皙?r>   r@         @      @      @gffffff@r  c                 >   |                     d|j                  }|                    |          dz  }t          ||d          \  }}}t	          |j        ||f          \  }}t          |||d          }|                    |          }	t          ||j	        d          \  }
}}t          |	j        |                    |
          d	
           t          |	j        d | dz
           |                    |d | dz
                     d	
           t          j                            d                              ddd          }|                    |          }t           |	|          |                    t#          ||
||f                    d	
           d S )Nr   rE   r;   rS  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   r2  r  tfcfr   rh   s                 rW   test_insert_periodiczTestInsert.test_insert_periodic  s~    IIarzI**FF1IIqLA###1a2:1v&&1aA:666##2swD111	BBe<<<<!A

2er!te9(=(=EJJJJ	%%d++333KKZZb		2::eEBA;.G.G#H#HuUUUUUUrk   r   Nr   c                    |                     d|j                  dz  t          j        z  }|                    |          |                    |          }}t          ||d|z  z   d          }||_        t          ||d          }||_        t          ||d          }||_        d}	|                    |	          }
|                    |	          }|                    |	          }t          |
j
        |j
        d	           t          |
j
        |j
        d	           t          |
j        |j        d|j        z  z   d	           d S )
Nr   rE   r9   r/   r;   rS        @rZ   rt   )rO   rP   rK   pir  r  r   r   r  r   r2   r3   )rS   r   rT   rw   y_rey_imr2  spl_respl_imr  r  spl_1respl_1ims                rW   test_complexzTestInsert.test_complex0  s5   IIarzI**Q.6VVAYYq		d D2d7Na888%#Atq111(#Atq111(##$$R(($$R((77777777R	\!9FFFFF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            n# 1 swxY w Y   t          t                    5  |                    |           d d d            d S # 1 swxY w Y   d S )Nr  r;   r   r.   r9   r;   r<   r   r   r   r   Tr  )	rK   rM  onesr=  r
   rG   rI   r   r  )rS   r  r4   r2   r3   r2  s         rW   +test_insert_periodic_too_few_internal_knotsz6TestInsert.test_insert_periodic_too_few_internal_knotsG  sv    HaS!A#Y-QqS	9::GCFFQJN##aA:666:&& 	, 	,21ayd++++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, :&& 	  	 OOB	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s$   =BB#&B#>C!!C%(C%c                 Z   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  |                    d           d d d            n# 1 swxY w Y   t          t                    5  |                    d           d d d            n# 1 swxY w Y   t          t                    5  |                    dd           d d d            d S # 1 swxY w Y   d S )	Nr;   r   r.   r  r   r7   r   r  )rK   rM  r  r=  r
   rG   rI   r  )rS   r4   r2   r3   r2  s        rW   test_insert_no_extrapz TestInsert.test_insert_no_extrap[  s   HaS!A#Y-QqS	9::GCFFQJN##aA:&& 	  	 OOB	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  :&& 	 	OOA	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 :&& 	$ 	$OOAO###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s6   9BB"B:CC #C ;D  D$'D$)r!  r"  r#  ra   r  r  r  r  r  r  r  r  r  r$  rk   rW   r  r    s/        [V%A%A%ABB!= != CB!=H [CCC 8 8 88 8 8 [T $8 $8 $8  V V V" []T:,>??G G @?G,     ($ $ $ $ $rk   r  c            
          dd} dD ]e}t          |          }t          t          |                    D ]6\  }} | ||           t          d|dz             D ]} | |||dd           7fd S )	Nr   rs   c           
      4   | 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                    d S )	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IaLLE!A$s(C1222A2/2s:;a!QC00!!As)).Gs.G.G!#.G.G	I 	I 	I 	I 	I 	Irk   r.   r9   r;   r<   r   rS  r.   r   )r   rs   rs   )r_   	enumerate_make_multiplesr   )r  r4   rV   r   r.  r   s         rW   test_knots_multiplicityr  k  s    I I I I  6 6!$$$q1122 	6 	6EArKAQ!}} 6 6B3u55556	66 6rk   c                    |dk    r#||         | cxk    r||dz            k     rn ndndS |||z            ||         k    rd}n6| ||         z
  |||z            ||         z
  z  t          | |dz
  ||          z  }|||z   dz            ||dz            k    rd}nE|||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   
 	Avvda((((!AaC&(((((ssc11v1~~!A$h1Q3!A$'(1ac1a*@*@@1Qx1QqS6!AhlQqs1uX!A#./(1ac1Q32J2JJGrk   c                4              k    rn|                                dz
            cxk    rdz            k    sn 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   Z   K   | ]%}|z
           t          |z
            z  V  &d S Nr  )r   r   r3   r  r4   r2   rw   s     rW   	<genexpr>z_naive_eval.<locals>.<genexpr>  sB      FF1q1vAqsA...FFFFFFrk   )searchsortedr   sumr   )rw   r2   r3   r4   rT   r  s   ```` @rW   r   r     s     	AaDyyOOAq!!A%Q41!A#66a!'!*q.((((FFFFFFFFa1FFF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n J t           fdt          |          D                       S )z'Naive B-spline evaluation, another way.r   r.   c              3   N   K   | ]}|         t          |          z  V   d S r  r  r   r  r3   r4   r2   rw   s     rW   r  z _naive_eval_2.<locals>.<genexpr>  s:      ==qqthq!Q***======rk   )r   r  r   )rw   r2   r3   r4   rT   rU   s   ````  rW   r   r     s    	
acA!888871:????Q41!=======E!HH======rk   c                 .   t          |          |dz   z
  }||dz   k    sJ |j        d         |k    sJ d}t          |          D ]O} t          j        ||||z   dz            d          |           }|||         t          j        |          z  z  }P|S )Nr.   r   r=   r9   Fr   )r=  r   r   r
   r   rK   
nan_to_num)rw   r2   r3   r4   rU   sr  rV   s           rW   r   r     s    A!A#A!888871:????
A1XX % %@G!!Aac!eG*%@@@CC	QqTBM!$$$$Hrk   c                     t          j        |           } t          j        | | dk     | dk    z  | dk    | dk     z  | dk    | dk    z  gd d d g          }|                    |          S )z+ A linear B-spline function B(x | 0, 1, 2).r   r9   r.   c                     dS Nr=   r$  rw   s    rW   <lambda>zB_012.<locals>.<lambda>  s    b 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     s    
aA\!q1uQ/!VA.!VQ/1 )L++~~FH HF ::frk   c                     t          j        |           } | dk     | dk    | dk     z  | dk    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                     dS Nr0   r$  r  s    rW   r  zB_0123.<locals>.<lambda>      2 rk   c                     dS )Ng       r$  r  s    rW   r  zB_0123.<locals>.<lambda>  s    3 rk   c                     dS 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
axx!!--((* 
 4s44555\!UE**FMrk   #   r;   c                 D   t           j                            d          }t          j        |                    | |z   dz                       }|                    |           }|                    |          |                    |          }}t          j        |||          S )N{   r.   )rK   rR   r   r   rQ   r
   construct_fast)rU   r4   rT   r   r2   r3   s         rW   r_   r_     s{    
)


$
$C


1Q3q5!!""A

1A::a=="**Q--qA!!Q***rk   c              #     K   | j         | j        }}| j                                        }|d         |dd<   |d         |d<   t	          |||          V  | j                                        }|d         |d|dz   <   t	          |||          V  | j                                        }|d         || dz
  d<   t	          |||          V  dS )	zIncrease knot multiplicity.         r   r   Nr.   r7   )r3   r4   r2   copyr
   )rV   r3   r4   t1s       rW   r  r    s      3qA	
B2Br"uIVBrF
"a

	
B!uBt!tH
"a

	
B2Br!tuuI
"a

rk   c                   P    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dS )TestInteropc                 
   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                  | _        d S )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    [BruHb))VBZZr2&&Cac?#%r1 $&K2be8R00	U13QS=!)RH%%!#tw,,rk   c                    | j         | j        | j        c}}t          t	          |           |          dd           t          t	          |j                   |          dd           t          t          j        fd|D                        |          dd           t          t          d          5  t	          ||           d d d            n# 1 swxY w Y   t          t          d|j        j                            dz   }|j                            |          }|j        ||j        f}t          t          j        t	          ||                     ||                              |          dd           d S )NrZ   r[   c                 0    g | ]}t          |          S r$  )r   )r   rw   rV   s     rW   r   z*TestInterop.test_splev.<locals>.<listcomp>  s!    #>#>#>AE!QKK#>#>#>rk   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  r  r+  r   r`   rV   s         @rW   
test_splevzTestInterop.test_splev  s   ia 	dA$e%	9 	9 	9 	9dAE**$e%	9 	9 	9 	9
#>#>#>#>#>#>#>??$e%	9 	9 	9 	9
 :-KLLL 	 	$OOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 5BDI&&''$.T^^BtR
5s#3#3444**2..U	H 	H 	H 	H 	H 	Hs   CC"%C"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           d S )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)   w1Qll,q!$$1aA....A....1v{{{{  1$777q!Qa!%0000a!%0000Qx1}}}} 1c]]2E**** SM11Q44e,,,,,,rk   c                    | j         | j        }}t          j        ||f         }t	          t
                    5  t          ||           d d d            n# 1 swxY w Y   t	          t
                    5  t          j        ||           d d d            n# 1 swxY w Y   t	          t          d          5  t          |d d         |d d                    d d d            n# 1 swxY w Y   t	          t          d          5  t          j        |d d         |d d                    d d d            d S # 1 swxY w Y   d S )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*    w1U1a4[:&& 	 	1bMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	:&& 	  	 LB	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  9,=>>> 	! 	!1RaR5!BQB%   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!9,=>>> 	' 	'L2A2"1"&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'sG   AAA3BBB6!C##C'*C'&D77D;>D;c                 f   t          j        dt           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           d S )	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   Ib
+++33F;;qzz1-""R 	2E****
5A;;//????
5C==1115AAAA &a1$???
cAq!3U++++
5c??33QUCCCCCCrk   c                    t          j        d                              d          }t          t          d          5  t          |           d d d            n# 1 swxY w Y   t          t          d          5  t          j        |           d d d            n# 1 swxY w Y   t          j        ddd          }t          t          d	          5  t          |g           d d d            n# 1 swxY w Y   t          t          d	          5  t          j        |g           d d d            n# 1 swxY w Y   g d
}t          t          d          5  t          |g           d d d            n# 1 swxY w Y   t          t          d          5  t          j        |g           d d d            n# 1 swxY w Y   g d}g d}t          t          d          5  t          |gd |g  d d d            d S # 1 swxY w Y   d S )N<   r   ztoo many values to unpackr  r   r8  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  s   Ie$$Y//:-HIII 	 	AJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	:-HIII 	 	M!	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 K21%%%9,=>>> 	 	QCLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	9,=>>> 	 	M1#	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 EDD:-=>>> 	 	QCLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	:-=>>> 	 	M1#	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 LL:-=>>> 	% 	%qc4^$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s}   AA!A;BB #B C11C58C5D44D8;D8E66E:=E:F99F= F="G==HH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            n# 1 swxY w Y   |j                            dd	d
          }t          j        t          |j        ||j	        fd                    }|j        dk    sJ t          ||z
  t          j        |          d           d S )N)r   r
  rB   r  r   r[   zCalling sproot.. with BSpliner  rq   )mestr.   r9   r   )r;   r9   r<   r   rt   )rV   r  rK   rM  r  r   r   r2   r3   r4   rG   rI   r	  rQ   r   r   )rS   rV   r  rootsc2rrrs         rW   test_sprootzTestInterop.test_sprootk  sn   2---..ru4q		5t$????QS!#//TMMMM :-LMMM 	  	 2B	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  dnnQ1%%Zc240r:::;;x9$$$$U
BM"$5$5EBBBBBBs   B88B<?B<c           	      n   | j         | j        }}t          t          dd|          t          dd|j                  dd           t          t          dd|          |                    dd          dd           t          t          d          5  t          dd|           d d d            n# 1 swxY w Y   |j        	                    ddd          }t          j        t          dd|j        ||j        f                    }|j        d	k    sJ t          |t          dd|          dd
           d S )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!QU++%%	I 	I 	I 	Iq!QAq))	G 	G 	G 	G :-LMMM 	 	1a	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dnnQ1%%F1a"$RT):;;<<|v%%%%q!Qe	H 	H 	H 	H 	H 	Hs   B//B36B3c           	         | j         | j        fD ]D}t          |j                  t          |j                  z
  }|j                                        }|dk    r7t          j        |t          j        |f|j	        dd          z             f         }dD ]}t          |          }t          j
        |j                                        ||j        f          }t          |j        |d         d           t          |j        |d         d           |j        |d         k    sJ t          |t                    sJ t          |t                     sJ Fd S Nr   r.   r.   r9   r;   rZ   rt   r9   )rV   r  r=  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?   &$'" 	0 	0AQSCHH$B#((**CAvveC2%#)ABB-*?!@!@@A 0 0AYYachhjj#qs%;<<eAhU;;;;eAhU;;;;tuQx''''!"g.....!%//////0	0 	0rk   c           	         | j         | j        fD ]D}t          |j                  t          |j                  z
  }|j                                        }|dk    r7t          j        |t          j        |f|j	        dd          z             f         }dD ]}t          |          }t          j
        |j                                        ||j        f          }t          |j        |d         d           t          |j        |d         d           |j        |d         k    sJ t          |t                    sJ t          |t                     sJ Fd S r-  )rV   r  r=  r2   r3   r  rK   r   r/  r   r   r  r4   r   r  r
   r*  r0  s          rW   test_splantiderzTestInterop.test_splantider  s@   &$'" 	0 	0AQSCHH$B#((**CAvveC2%#)ABB-*?!@!@@A 0 0]](!#((**c13)?@@eAhU;;;;eAhU;;;;tuQx''''!"g.....!%//////0	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                            |dd          dz             }	t          ||j        |	|j        f          }
t          ||          }t          t!          j        t          ||
                                        ddd           ||          d           t          |t                    sJ t          |
t                    sJ d S )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  s   FDGTWr2CHM!#a&13qs8#$2qMM6"qsACo#>#>Eb"b%((u	6 	6 	6 	6"g&&&&&%''''' 5##$$T^^BqrrFTM**RT2rt,--Rnn 	
5V#4#455??1aHHBe	- 	- 	- 	-#w'''''&%(((((((rk   N)r!  r"  r#  r  r
  r  r  r  r  r%  r+  r5  r7  r  r$  rk   rW   r  r    s        - - -H H H6- - -0' ' ' D D D% % %:C C C"H H H(0 0 0"0 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                            dg d          d	             Zej                            dg d          d
             Zd Zd Zej                            dg d          d             Zd Zd Zd Zej                            dg d          d             Zd Zd Zd Zd Zd Zej                            d          d             Zd Z d Z!d Z"d Z#d  Z$d! Z%d" Z&d# Z'ej                            dg d$          d%             Z(d& Z)d' Z*d( Z+d) Z,d* Z-d+S ),
TestInterpr=   r>   c                 j    |                     | j                  |                     | j                  fS r  )rQ   rh   r   )rS   rT   s     rW   _get_xyzTestInterp._get_xy  s)    zz$'""BJJtw$7$777rk   c                     t          t                    5  t          | j        | j        d           d d d            d S # 1 swxY w Y   d S )NrB   rS  )rG   rH   r   rh   r   rS   s    rW   test_non_int_orderzTestInterp.test_non_int_order  s    9%% 	8 	8tw37777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s   ?AAc                     |                      |          \  }}t          ||d          }t           ||          |dd           t          ||dd          }t           ||          |dd           d S )Nr   rS  rs   r[   r7   r4   r  rA  r   r   rS   rT   rh   r   rV   s        rW   test_order_0zTestInterp.test_order_0      b!!Br2+++"rE::::r2444"rE::::::rk   c                     |                      |          \  }}t          ||d          }t           ||          |dd           t          ||dd          }t           ||          |dd           d S )Nr.   rS  rs   r[   r7   rF  rG  rH  s        rW   test_linearzTestInterp.test_linear  rJ  rk   r4   r   c                     g d}g d}t          t          d          5  t          |||           d d d            d S # 1 swxY w Y   d S )Nr   r.   r9   r;   r<   r   )r   r.   r9   r;   r<   r   r   r   zShapes of xr  rS  rG   rI   r   rS   r4   rw   r   s       rW   test_incompatible_x_yz TestInterp.test_incompatible_x_y  s    $$$:];;; 	* 	*q!q))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   ?AAc                    g d}g d}t          t          d          5  t          |||           d d d            n# 1 swxY w Y   g d}t          t          d          5  t          |||           d d d            n# 1 swxY w Y   g d}t          j        |                              d          }t          t          d          5  t          |||           d d d            d S # 1 swxY w Y   d S )	N)r   r.   r.   r9   r;   r<   rN  zx to not have duplicatesr  rS  )r   r9   r.   r;   r<   r   zExpect x to be a 1D strictly)r.   r7   )rG   rI   r   rK   rQ   r   rP  s       rW   test_broken_xzTestInterp.test_broken_x  s   :-GHHH 	* 	*q!q))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* :-KLLL 	* 	*q!q))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* JqMM!!'**:-KLLL 	* 	*q!q))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s3   >AA#BB	BC..C25C2c                     |                      |          \  }}dD ]/}t          |||          }t           ||          |dd           0d S )Nr9   r;   r<   r   r   r   rs   r[   rG  )rS   rT   rh   r   r4   rV   s         rW   test_not_a_knotzTestInterp.test_not_a_knot  sc    b!!B# 	? 	?A"2r1--AAAbEE2E>>>>>	? 	?rk   c                    |                      |          \  }}t          ||dd          }t           ||          |dd           t          dd          D ]6}t           ||d         |           ||d	         |          d
           7t          ||ddd	          }t           ||          |dd           t          dd          D ]6}t           ||d         |           ||d	         |          d
           7d S )Nr   r   r9  rs   r[   r.   r   r   r7   dy=rt   r4   r:  r  )rA  r   r   r   )rS   rT   rh   r   rV   r  s         rW   test_periodiczTestInterp.test_periodic  s5   b!!B r2J???"rE:::: q! 	I 	IAAAbeNNNAAbfOOO%HHHHHr2JRHHH"rE::::q! 	I 	IAAAbeNNNAAbfOOO%HHHHH	I 	Irk   rU  c                    d}t           j                            d          }t          j        |                    |          dz            }|                    |          dz  }|d         |d<   |                    |          |                    |          }}t          |||d          }t           ||          |d	
           d S )Nr   r   re   r   r7   r   r   r9  rs   rt   )rK   rR   r   r   r;  rQ   r   r   )rS   r4   rT   rU   r   rw   r   rV   s           rW   test_periodic_randomzTestInterp.test_periodic_random  s     i##D))GC%%a((2-..a  3&u!zz!}}bjjmm1q!q*===!ae,,,,,,rk   c                    | j         j        d         }t          j                            d          }|                    |          dz  t          j        z  }t          j        |          }d|d<   dt          j        z  |d<   t          j        d|f          }t          j	        |          |d<   t          j
        |          |d<   |                    |          |                    |          }}t          ||ddd	          }t          |          D ]-}t           |||                   |d d |f         d
           .t           ||d                    ||d                   d
           d S )Nr   r   r9   r=   r7   r.   r   r   rY  rs   rt   )rh   r   rK   rR   r   r;  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$  sK   GM!i##D))a  1$ru,GAJJ!BE	"HaVvayy!vayy!zz!}}bjjmm1q!q*1EEEq 	: 	:AAAadGGQqqq!tW599999!A$1R5666666rk   c                 `   t           j                            d          }d}d}t          j        |                    |                    }|                    |          }|d         dz
  |d<   t          t                    5  t          |||d           d d d            d S # 1 swxY w Y   d S )	Nr   r   r   r7   r.   r   r   r9  )rK   rR   r   r   r;  rG   rI   r   )rS   r   r4   rU   rw   r   s         rW   test_periodic_points_exceptionz)TestInterp.test_periodic_points_exception5  s    i##D))GC%%a(())a  uqy!:&& 	> 	>q!q*====	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s   B##B'*B'c                 x   t           j                            d          }d}d}t          j        |                    |                    }|                    |          }t          j        |d|z  z             }t          t                    5  t          ||||d           d d d            d S # 1 swxY w Y   d S )Nr   r;   r   r9   r   )	rK   rR   r   r   r;  r/  rG   rI   r   )rS   r   r4   rU   rw   r   r2   s          rW   test_periodic_knots_exceptionz(TestInterp.test_periodic_knots_exception@  s    i##D))GC%%a(())a  HQQY:&& 	7 	7q!Q:666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   B//B36B3r  c                 |   t          | j        | j        |d          }t          | j        | j        d|          }t	          | j        |          }t          | || j                  d           t          d|          D ];}t	          | j        ||          }t          | || j        |	          d
           <d S )Nr   r9  T)r  r4   rs   rt   r.   r   r   r   )r   rh   r   r   r   r   r   )rS   r4   rV   r`   r2  r  s         rW   test_periodic_splevzTestInterp.test_periodic_splevK  s     tw1jIIITWdg41555DGS!!QQtwZZe4444 q! 	? 	?A!,,,CC47q!1!1!1>>>>>	? 	?rk   c                 B   t          | j        | j        dd          }t          | j        | j        d          }t	           || j                   || j                  d           t
          j                            d          }d}t          j        |	                    |          dz            }|	                    |          d	z  }|d
         |d<   t          ||dd          }t          ||d          }t	           ||           ||          d           d S )Nr;   r   r9  r^  rs   rt   r   re   r   r7   r   )
r   rh   r   r   r   rK   rR   r   r   r;  )rS   rV   cubr   rU   rw   r   s          rW   test_periodic_cubiczTestInterp.test_periodic_cubicX  s   tw1jIII$'47J???$'

CCLLu==== i##D))GC%%a((2-..a  3&u!q!q*===!Q
333!cc!ff5111111rk   c                 :   dt          | j        | j        d          }t          | j                  t	          | j        | j                  t          j        fd          }t           || j                   || j                  d           d S )Nr;   r   r9  c                 6    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$B$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  s     tw1jIIIDGQ''&twA>>\BBBBBBCC$'

BBtwKKe<<<<<<rk   c                 (   |                      |          \  }}dg}t          ||dd |f          }t           ||          |dd           t           ||d         d          |                    |d         d         |j        	          ddd
           t          ||d|d f          }t           ||          |dd           t           ||d         d          |                    |d         d         |j        	          ddd
           d S )Nr.   g       @r9   r9  rs   r[   r7   r.   r   rE   F)r\   r]   r'  rA  r   r   rQ   rP   )rS   rT   rh   r   r   rV   s         rW   test_quadratic_derivzTestInterp.test_quadratic_derivr  s6   b!!Bi r2T3K@@@"rE::::AbfaLLJJs1vay
J33UU	
 	
 	
 	
 r2S$K@@@"rE::::AbeQKKJJs1vay
J33UU	
 	
 	
 	
 	
 	
rk   c                 :   |                      |          \  }}d}dgdg}}t          |||||f          }t           ||          |dd           t           ||d         d          |                    |d         d         |j        	          dd           t           ||d
         d          |                    |d         d         |j        	          dd           dgdg}}t          |||||f          }t           ||          |dd           d S )Nr;   r.   r?   )r.   r@   r^  rs   r[   r   r.   rE   r7   r9   r   rn  )rS   rT   rh   r   r4   der_lder_rrV   s           rW   test_cubic_derivzTestInterp.test_cubic_deriv  sF   b!!B  y7)ur2q5%.AAA"rE::::AbeQKKJJuQx{"*J55E	
 	
 	
 	
 	AbfaLLJJuQx{"*J55E	
 	
 	
 	
 x&ur2q5%.AAA"rE::::::rk   c           	         d\  }}|                     ||j                  }|                    |          }ddg}ddg}t          |||||f          }t	           ||          |dd	           t	          |                     ||d
         d           ||d
         d          g          |                    d |D             |j                             t	          |                     ||d         d           ||d         d          g          |                    d |D             |j                             d S )N)r   r   rE   )r.   g      ()r9   r.   rm  )r9   r?   r9  rs   r[   r   r.   r9   c                     g | ]\  }}|S r$  r$  r   r   vals      rW   r   z2TestInterp.test_quintic_derivs.<locals>.<listcomp>      #?#?#?IRC#?#?#?rk   r7   c                     g | ]\  }}|S r$  r$  rx  s      rW   r   z2TestInterp.test_quintic_derivs.<locals>.<listcomp>  rz  rk   )rO   rP   r  r   r   r   rQ   )	rS   rT   r4   rU   rw   r   rs  rt  rV   s	            rW   test_quintic_derivszTestInterp.test_quintic_derivs  sZ   1IIarzI**FF1IIF#'"q!q5%.AAA!ae%8888!!AaD!**aa!ajj!9::

#?#?#?#?#?rz
RR	T 	T 	T!!AbE1++qq2{{!;<<

#?#?#?#?#?rz
RR	T 	T 	T 	T 	Trk   unstabler   c                     d}t          | j        |          }ddg}t          | j        | j        |||d f          }t	           || j                  | j        dd           d S )Nr;   rq  )r9   r@   r^  rs   r[   )r   rh   r   r   r   )rS   r4   r2   rs  rV   s        rW   test_cubic_deriv_unstablez$TestInterp.test_cubic_deriv_unstable  sm     DGQ'"twAt}MMM$'

DG%eDDDDDDrk   c           	         d}|                      |          \  }}t          ||                    |dz             |d         z  |dd          |d d         z   dz  |                    |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 d S )Nr9   r.   r   r7   r>   rr  r^  rs   r[   r=   r  )rA  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$ABB"SbS'!R'!r"v%
 

 r2q!)/6(';= = = 	"rE::::|AAbeQKKe<<<<<<|AAbfaLL#u========rk   c                    d}|                     ddg          }|                     ddg          }t          |||dgdgf          }|                    ddd|j                  }|dz  }t	           ||          |d	d	
           d S )Nr;   r=   r0   r.   r=   rq  r^  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GG[[R2:[66U"rE::::::rk   c                    g dx}}t          t                    5  t          ||dgd f           d d d            n# 1 swxY w Y   t          t                    5  t          ||d           d d d            n# 1 swxY w Y   t          t                    5  t          ||dg           d d d            n# 1 swxY w Y   t          t                    5  t          ||d           d d d            n# 1 swxY w Y   d\  }}t          t                    5  t          ||||f           d d d            d S # 1 swxY w Y   d S )N)r0   r9   r;   r<   r   r   r  r^  *   )r  r  rO  )rS   rw   r   lrs        rW   test_deriv_speczTestInterp.test_deriv_spec  s    %$$$A:&& 	@ 	@q!wi->????	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ :&& 	6 	6q!W5555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 :&& 	8 	8q!gY7777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 :&& 	1 	1q!R0000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1
 "1:&& 	5 	5q!aV4444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5sW   =AAA;;A?A?B::B>B>C88C<?C<D>>EEc                 \   |                     d          }|dz  }dgdg}}t          t          d          5  t          ||||f           d d d            n# 1 swxY w Y   dgdg}}t          t          d	          5  t          ||||f           d d d            d S # 1 swxY w Y   d S )
Nr   r9   )r   r   r.   r   zBad boundary conditions at 0.r  r^  )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  sI   IIaLLqDx&1:-LMMM 	5 	5q!aV4444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 x'1:-LMMM 	5 	5q!aV4444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s#   AAA?B!!B%(B%c                    d}|                      |          \  }}|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 ]0}t          |||          }t           ||          |dd           1d S )Nr;   r/   )r.   y              @)r.   y      @       @r^  rs   r[   r   r.   r  r7   r   r.   rS  )rA  r   r   cmathr  )rS   rT   r4   rh   r   rs  rt  rV   s           rW   r  zTestInterp.test_complex  s(   b!!B#b&[ !zK=ur2q5%.AAA"rE::::}QQr!ua[[%(1+uEEEEEE}QQr"vq\\58A;FFFFFF  	? 	?A"2rQ///AAAbEE2E>>>>>	? 	?rk   c                     |                     d|j                  }|                     d|j                  }dD ]}t          |||          } ||            d S )Nre   rE   r   rS  )rO   int32r   )rS   rT   rw   r   r4   rV   s         rW   test_int_xyzTestInterp.test_int_xy  sn    IIbI))IIbI))  	 	A"1a1---AAaDDDD	 	rk   c                     |                     ddd          }|d d d         }|d d d         }dD ]}t          |||           d S )Nr7   r.   r   r   r   rS  )rf   r   )rS   rT   rh   rw   r   r4   s         rW   test_sliced_inputzTestInterp.test_sliced_input  sf    [[Q$$sssGsssG 	* 	*Aq!q)))))	* 	*rk   c                     |                     d|j                  }|dz  }|j        |j        |j         fD ]F}t	          j        |d                              |          }t          t          t          ||           Gd S )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"  s    IIb
I++qD&"&26'* 	@ 	@Aq"!!!$$A*&8!Q????	@ 	@rk   )r.   r9   r;   r   c                 z    t          t          d                    }d |D             }t          |||           d S )Nre   c                     g | ]}|d z  S )r9   r$  )r   as     rW   r   z.TestInterp.test_list_input.<locals>.<listcomp>/  s    aQTrk   rS  )listr   r   rP  s       rW   test_list_inputzTestInterp.test_list_input+  sC     rOO11a1%%%%%%rk   c                 
   |                      |          \  }}|                    ||fd          }dddgfg}dddgfg}t          ||d||f          }t           ||          |d	d	
           t           ||d         d          |                    |d         d         |j                  d	d	
           t           ||d         d          |                    |d         d         |j                  d	d	
           d S )Nr.   r  r0   r>   r?   r@   r;   r9  rs   r[   r   rE   r7   )rA  r   r   r   rQ   rP   )rS   rT   rh   r   rs  rt  rV   s          rW   test_multiple_rhszTestInterp.test_multiple_rhs2  s%   b!!BXXr2hQX''b"Xb"Xr2UENCCC"rE::::AbeQKKJJuQx{"*J55E	
 	
 	
 	
 	AbfaLLJJuQx{"*J55E	
 	
 	
 	
 	
 	
rk   c                    t           j                            d          }d\  }}t          j        |                    |                    }|                    |dddf          }t	          |||          }|j        j        |dddfk    sJ d|                    d          fg}d|                    d          fg}t	          |||||f	          }|j        j        ||z   dz
  dddfk    sJ d S )
Nr   r;   r   r   r   r   r   r.   r   r   r   r^  )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    i##D))1GCJJAJ&&''JJQ1aLJ))q!Q''syQ1aL(((( 3::i(()*3::i(()*q!Qc
;;;syQUQY1a0000000rk   c                 .   |                      |          \  }}|                    |          }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            n# 1 swxY w Y   |                    |                    |          |                    |          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
                            d          }d\  }	}
t          j        |
                    |
                    }|
                    |
dddf          }|                    |          |                    |          }}d|                    d          fg}d|                    d          fg}t          |||	||f          }t          |||	d          }t          |j        |j        d           d S )Nr;   rE  r9  rr  rZ   rt   )rE  rD  r  r9   )NrD  r  rF  typor.   r  r=   rC  r   r  r   r   r   r   r  r^  rD  )rA  r  r   r   r3   rG   rI   r   r  rK   rR   r   r   rQ   r/  )rS   rT   rh   r   r.  r  rs  rt  r   r4   rU   rw   r   r  r  s                  rW   test_string_aliaseszTestInterp.test_string_aliasesR  s   b!!BVVBZZ  B!Y???B!vh5IJJJbd////  B!(>@ @ @B!*0F8(<> > >bd////  B!5FGGGB!dXJ5GHHHbd////  B!\BBBB!T:::bd//// :&& 	< 	<r2F;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< XXrvvbzz266"::.QX77b"Xb"XB!eU^DDDB!(>@ @ @bd//// i##D))1GCJJAJ&&''JJQ1aLJ))zz!}}bjjmm1 288I&&'(288I&&'(1a#s<<<1a;;;bd//////s   E55E9<E9c                    t           j                            d          }d\  }}t          j        |                    |                    }|                    |          }t	          ||          }t          ||||          }|                    |          }t          |j        |||f          \  }	}
}t          |	|
||          }t          |j
        |dd           d S )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    i##D))1wszzqz))**zzqz!!4##"4tQ77ZZ^^bj4t"4551aq!Q**Re%888888rk   c                 V   t           j                            d          }d}t          ddd          D ]}t	          |dz
  dz            }t          j        |                    d|f                    }t          d|dz             D ]}|d| |dfxx         t          j        |                    d||z
  f                    z  cc<   ||dd| fxx         t          j        |                    d||z
  f                    z  cc<   |                    ||f          }||d|| df<   |                    ||f          }||| dd|f<   t          j        ||f          }	t          t          || dz
  d                    D ]F\  }}
|
d	k     rt          j        ||

          |	|d|
f<   )t          j        ||

          |	||
df<   G|                    |          }t          t          |	||||          t           j                            ||          d           dS )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  sX    i##D))q"a 	? 	?A!a%1%%FCJJ1v..//A1fqj)) B B#A2#qrr'


bk#**aQZ*@*@AAA


!""crc'


bk#**aQZ*@*@AAA



VV,--B#%Agvgwxx VV,--B#%Avghh !Q  A!%!R"@"@AA 8 81q55!{1Q777Aa!eHH!{1Q777AaeHH

1A/2r1a@@IOOAq11? ? ? ? ?#	? 	?rk   N).r!  r"  r#  rK   rf   r  rh   r  r   rA  rD  rI  rL  ra   r  r  rQ  rS  rV  rZ  r\  r^  r`  rb  rd  rg  rk  ro  ru  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r$  rk   rW   r?  r?    s       
 
RBE	"	"B	B8 8 88 8 8; ; ;; ; ; [S,,,//* * 0/* [S,,,//* * 0/*? ? ?I I I  [S"4"4"455
- 
- 65
-7 7 7"	> 	> 	>	7 	7 	7 [S,,,//
? 
? 0/
?2 2 2 = = =
 
 
,; ; ;,T T T [j))E E *)E> > >&
; 
; 
;5 5 5.5 5 5? ? ?"  * * *@ @ @ [S,,,//& & 0/&
 
 
"1 1 130 30 30j9 9 9? ? ? ? ?rk   r?  c                    | j         |j         k    sJ |j         | j         |z   dz   k    sJ | j         }t          j        ||ft          j                  }t	          |          D ]W}| |         }|||         k    r|}nt          j        ||          dz
  }t          j        ||||          }	|	||||z
  |dz   f<   Xt          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     6QV6QVaZ!^####	A
!Qrz***A1XX 	! 	!t1Q4<<DD?1d++a/D '1dD99 !T!VDF]

AAHrk   c                    t          t          j        | ||f          \  } }}| j        }|j        |z
  dz
  }t          j        ||ft          j                  }t          |          D ]W}| |         }|||         k    r|}	nt          j        ||          dz
  }	t          j	        ||||	          }
|
|||	|z
  |	dz   f<   Xt          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rz***A1XX 
! 
!t1Q4<<DD?1d++a/D '1dD99 !T!VDF]
 	qsAA
qsAA
AAq!f9rk   methodnorm-eqqrc            	       n   e Zd Zej                            d          Zd\  ZZ ej	        e                    e                    Z
e                    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                            d e  e!dd                              d             Z"d Z#dS )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                            |	|d          \  }}}}t          |j        |           d S )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     VTVTVTV3
1a%aAq11BAq!Qv666R   syQVaZ!^----- Bioob!2o66Aq!R     rk   c                    g t          |j        | j        | j        | j        f          | j        R \  }}}}|                    |          }t          |||||          }t          ||||||          }	t          |j        |	j        d           t          |j	        |	j	        d           |j        |	j        k    sJ d S )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"*tvtvtv&>??GGG
1aLLOOAq!Qv666aAqAf===SU////SU////sce||||||rk   c                 B   g t          |j        | j        | j        | j        f          | j        R \  }}}}t          j                            d          	                    |j
        d                   }|                    |          }t          |||||d          }t          |||||d          }t          ||||d          }	t          |j        |j        d	           |                    |                    |	j        |j        z
            dk               rJ d S )
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"*tvtvtv&>??GGG
1aI!!$''//QWQZ/@@JJqMMq!QQyAAAq!QQt<<< Aq!D999U333366"&&DF!233e;<<<<<<<rk   c                    g t          |j        | j        | j        f          | j        | j        R \  }}}}t          j                            d          }|                    |dddf          }|                    |          }t          |||||          }	|	j
        j        |j        d         |z
  dz
  dddfk    sJ d S )	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"*tvtv&677GGGG
1ai##D))JJQ1aLJ))JJqMMAq!Qv666syQWQZ!^a/Aq9999999rk   c                   	
 g t          |j        | j        | j        f          | j        | j        R \  
	}d}t          j                            d          }|                    ||f          |                              t          
	          }	
fdt          |          D             |                    fdt          |          D                       j        }t          ||j        d           d S )	Nr;   r   r   r  c           	      L    g | ] }t          d d |f                   !S )Nr  )r   )r   r  r4   r  r2   rw   r   s     rW   r   z/TestLSQ.test_multiple_rhs_2.<locals>.<listcomp>4  sH     $ $ $ a111a4!Qv>>> $ $ $rk   c                 *    g | ]}|         j         S r$  )r3   )r   r  r  s     rW   r   z/TestLSQ.test_multiple_rhs_2.<locals>.<listcomp>6  s    777a"Q%'777rk   rZ   rt   )rv   rQ   rw   r2   r4   rU   rK   rR   r   r   r   r   r  r   r3   )rS   r  rT   rU   nrhsr   rV   coefsr  r4   r2   rw   r   s    `      @@@@@rW   test_multiple_rhs_2zTestLSQ.test_multiple_rhs_2+  s&   Gc"*tvtv&677GGGG
1ai##D))JJQIJ&&JJqMMAq!Qv666$ $ $ $ $ $ $ $T{{$ $ $77775;;77788:qs//////rk   c                 n   g t          |j        | j        | j        f          | j        | j        R \  }}}}d}t          j                            ||f          }|                    |          }t          ||||d          }t          ||||d          }	t          |j
        |	j
        d           d S )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"*tvtv&677GGGG
1aI1d),,JJqMMq!Q$7771a9===e444444rk   c                    g t          |j        | j        | j        f          | j        R \  }}}|                    | j        dz            }t          |||||          }t          ||                    |          |||          }t          ||                    |          |||          }	t           ||           ||          d |	|          z  z   dd           d S )N      ?       @r  r/   rZ   r[   )
rv   rQ   rw   r2   r4   r   r   r   r   r   )
rS   r  rT   rw   r2   r4   rU  rV   r   r   s
             rW   r  zTestLSQ.test_complexC  s     =3rzDFDF#344<df<<1aZZ(+,,Ar1a777q"''"++q!FCCCq"''"++q!FCCC!dd1ggDDGG3%eLLLLLLrk   c                 B   g t          |j        | j        | j        f          | j        R \  }}}|                    | j        dz            }|                    ||fd          }t          ||||          }t          ||                    |          ||          }t          ||	                    |          ||          }t           ||           ||          d ||          z  z   dd           |                    ||fd          }t          ||||          }t          ||                    |          ||          }t          ||	                    |          ||          }t           ||           ||          d ||          z  z   dd           d S )Nr  r.   r  r/   rZ   r[   )rv   rQ   rw   r2   r4   r   r   r   r   r   r   )	rS   rT   rw   r2   r4   rU  rV   r   r   s	            rW   test_complex_2zTestLSQ.test_complex_2O  s    =3rzDFDF#344<df<<1aZZ(+,,XXr2hQX''Ar1a((q"''"++q!44q"''"++q!44!dd1ggDDGG3%eLLLL XXr2hQX''Ar1a((q"''"++q!44q"''"++q!44!dd1ggDDGG3%eLLLLLLrk   c                     t          j        d                              t                    }t          j        d                              t                    }t	          |d          }t          |||d|           d S )Nre   r.   rS  r4   r  )rK   rO   astyper  r   r   rS   r  rw   r   r2   s        rW   r  zTestLSQ.test_int_xye  sf    IbMM  %%IbMM  %%AOOO1a1V444444rk   c                     t          j        dt           j                  }t          j        dt           j                  }t          |d          }t	          |||d|          }t	          |                    t                    |                    t                    |                    t                    d|          }|dd          |d d         z   dz  }t           ||           ||          d	           d S )
Nre   rE   r.   rS  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    Ib
+++Ib
+++AOOO!!QQv>>>!HHUOOQXXe__ahhuoo6
 
 
 eafn#WWR[[u======rk   c                     t          j        ddd          }|d d d         }|d d d         }t          |d          }t          |||d|           d S )Nr7   r.   r   r;   r  )rK   rf   r   r   )rS   r  rh   rw   r   r2   s         rW   r  zTestLSQ.test_sliced_inputz  sa     [Q$$sssGsssGAqMM1a1V444444rk   c           	         t          j        d                              t                    }|dz  }t	          |d          }t           j        t           j        t           j         fD ]&}||d<   t          t          t          ||||           'd S )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  s     IbMM  ''qDAqMM&"&26'* 	O 	OAAbE*oq!QvNNNNN	O 	Ork   c                     | j         | j        | j        }}}|                    d           |                    d           |                    d           t	          ||||           d S )NFrj  )rw   r   r2   r  )rw   r   r2   rl  r   r  s        rW   rm  zTestLSQ.test_read_only  sp     &$&$&a1	


	


	


!qAf555555rk   r4   r.   c                 J   | j         | j        }}t          t          j        |d         |d         d          |          }t          ||||d          }t          ||||d          }|dd          |d d         z   dz  }t           ||           ||          d	
           d S )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     vtv1BK!aeQ//33%aA9EEE AqAd;;;eafn#B%@@@@@@rk   c                 ^   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	           d S )
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    Idfa  Idfa  !DIII1df$???eafn#b		5599599999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  rm  ra   r  r  r  r   r   r  r$  rk   rW   r  r    s'       
 )


%
%CDAq

1A

1AAaD!B%++Q//A! ! ! 
 
 
= = = : : : 0 0 05 5 5 	M 	M 	MM M M, 5 5 5 
> 
> 
> 5 5 5 O O O 6 6 6 [S$$uuQ{{"3"344A A 54A: : : : :rk   r  c                   4    e Zd ZdZd Zed             Zd ZdS )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 d S )Nr9   r.   r   )r  r  ncr  r   )rS   r  r  r	  s       rW   __init__zPackedMatrix.__init__  s\    v{{{{{awqzV\!_,,,,,,rk   c                 4    | j         j        d         | j        fS Nr   )r  r   r	  rC  s    rW   r   zPackedMatrix.shape  s    v|A''rk   c                 >   t          j        | j                  }| j        j        d         }t	          |j        d                   D ]V}t          | j        | j        |         z
  |          }| j        |d |f         ||| j        |         | j        |         |z   f<   W|S )Nr.   r   )rK   r/  r   r  r   minr	  r  )rS   outnelemr  nels        rW   todensezPackedMatrix.todense  s    htz""Qsy|$$ 	J 	JAdgA.66C:>&DSD/C4;q>$+a.3"66677
rk   N)r!  r"  r#  __doc__r
  propertyr   r  r$  rk   rW   r  r    sW         - - - ( ( X(    rk   r  r.   c                 |   ddl m} | j        }| j        }| j        }|j        \  }}|j        d         |k    sJ |                                }	|                                }
t          ||          D ]}||         }t          ||          D ]}|t          ||          k    r n ||	|df         |	|df                   \  }}}||	|df<   t          d|          D ]4}t          |||	||f         |	||f                   \  |	||f<   |	||dz
  f<   5d|	|df<   t          |
j        d                   D ]1}t          |||
||f         |
||f                   \  |
||f<   |
||f<   2،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   rM  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ZF	BGEAr71:????	A	
B8Q F FAYr2 	F 	FAC2JJ fQq!tWa1g..GAq! AadG1b\\ D D%+Aq!AqD'1QT7%C%C"!Q$1ac6AaeH 28A;'' F F%+Aq"QT(Bq!tH%E%E"1a4"QT((F agaj!!""D
q"(4rx88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 ]d}t          |||z
            }||d|df         ||dz   ||z   df         z                      d          }	||         |	z
  ||df         z  ||df<   e|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GEAr	B71:####
afART7Qr!tQwZ'AbdCiL2a4R   . ."bdmm!QsUD.!Aac!C%in$55:::BBdTka1g-!S&		Hrk   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )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  sM    Iau%%%qD1ac7N1!Qzrk   c                    d}|                      |          \  }}}}t          j        |||          }t          j        |                                          \  }}|j        |z  }	|j        \  }
}||j        d         |z
  dz
  k    sJ |j        d d |dz            }t          j
        |t          j                  }|j                            |
|dz             }t          |||          }|d d d f         }t          j        ||||           t#          t          j        |                                |z   |                                |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        |j        ||||t          j        |          |          \  }}}t#          ||d d df         d           d S )	Nre   r   r.   rE   rZ   rt   gvIh%L=-a=)r)  r
   r>  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.. uU]]__%%1cAg 2QWQZ!^a'''''ww!A#w'%fBH===Jq!A#&&FB''qqq$wZ1fb"--- 	
199;;?#$99;;?4 457]15E5EE	S 	S 	S 	S
3sR1X~#6#6#&sR1X~#6#68 89;s9K9KRW	Y 	Y 	Y 	Y !S!!!adAr1aaRTUU!QAU;;;;;;rk   c                    d}|                      |          \  }}}}t          j        |||          }|j        \  }}||j        d         |z
  dz
  k    sJ |j        d d |dz            }	t          j        |	t
          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           d S )	Nre   r   r.   rE   rZ   rt   F)check_dtype)r)  r
   r>  r   r,  rK   r-  r  r.  r   r  r!  r*   r/  r   r  r   r  r	  )rS   rU   rw   r   r2   r4   r1  r  r	  r  r  r  r4  RRr   s                  rW   test_py_vs_compiledz TestGivensQR.test_py_vs_compiledF  sS   ]]1%%
1a %aA..2QWQZ!^a'''''ww!A#w'%fBH===Jq!A#&&FB''qqq$wZq"%%B1fb2...ac....	18????u}}}}BU++++++rk   c                 N   d}|                      |          \  }}}}t          j        d|dz   t                    }t	          j        ||||          \  }}}	|j        d         }
t          j        |||          }||d d d f         z  	                                }|j
                            |
|dz   f          }|j        d d |dz                                t          j                  }t          ||d           t!          ||           |	|j        d         |z
  dz
  k    sJ d S )Nre   r.   rE   r   rZ   rt   )r)  rK   rO   r  r*   data_matrixr   r
   r>  tocsrr.  r   r,  r  r  r   r   )rS   rU   rw   r   r2   r4   r  r  r  r	  r  r1  a_wA_offset_s                  rW   test_data_matrixzTestGivensQR.test_data_matrixa  s%   ]]1%%
1aIa1E*** ,Q1a8862GAJ%aA..qDz!((**Xq!A#h''+gg1g&--bh772E****(((QWQZ!^a'''''''rk   c                    d}|                      |          \  }}}}t          j        ||dz  f         }t          j        |||t          j        |                    \  }}}t          |||          }	t          j        ||||           t          |	|          }
t          j        ||||||t          j        |          |          \  }}}t          ||
d           d S )Nre   r9   rs   rt   )
r)  rK   r   r*   r=  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E!QT'N ,Q1bl1ooFF62FB''1fb!,,,1aLL?1b!Q1bl1ooqIIAqAE******rk   c                 *   d}|                      |          \  }}}}t          j        |dz   ft                    }|D ]T}t	          t          j        |||||dz             |           t	          t          j        ||||d|z            |           Ud S )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Xq1uhe444
 	L 	LD*1aq!a%@@*N N N*1aq!A#>>
L L L L	L 	Lrk   N)	r!  r"  r#  r)  r7  r;  rB  rD  rG  r$  rk   rW   r'  r'    st          !< !< !<F, , ,6( ( ("+ + +L L L L Lrk   r'  c                     t           j                            t           j                            t           j                            t
                              d|           S )Nr.  )ospathry  abspathdirname__file__)basenames    rW   	data_filerO    s=    7<<(A(ABB* * *rk   c                   f    e Zd Zd Zd Zd Zej                            d          d             Z	dS )TestSmoothingSplinec                    t           j                            d          }d}t          j        |                    |          dz  dz
            }|dz  t          j        d|z            z  |dz  z   |                    dd|          z   }t          t                    5  t          ||dd                     d d d            n# 1 swxY w Y   t          t                    5  t          |dd          |           d d d            n# 1 swxY w Y   t          t                    5  t          |
                    d|          |           d d d            n# 1 swxY w Y   t          t                    5  t          |d d d	         |           d d d            n# 1 swxY w Y   t          j        |          }|d         |d
<   t          t                    5  t          ||           d d d            n# 1 swxY w Y   t          j        d          }t          j        d          }d}t          j        t          |          5  t          ||           d d d            d S # 1 swxY w Y   d S )Nr   r   r<   r9   r;   r=   r
  r.   r7   r   z)``x`` and ``y`` length must be at least 5r  )rK   rR   r   r   r;  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   i##D))GC%%a((1,q011qD26!a%== 1a4'#**Ra*@*@@ :&& 	, 	,!!QqrrU+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,:&& 	, 	,!!ABB%+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,:&& 	6 	6!!))Aq//1555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 :&& 	. 	.!!DDbD'1---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 1Iq	:&& 	- 	-!&!,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- IaLLGAJJG]:->??? 	( 	(!!Q'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(sl   CC
C"DDD&%EEE6FF #F G77G;>G;I%%I),I)c                    t          j        t          d                    5 }|d         }|d         }|d         }ddd           n# 1 swxY w Y    t          ||          |          }t	          ||ddd           dS )	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]   r9  )rK   loadrO  r   r   )rS   r.  rw   r   rX  y_comprs         rW   test_compare_with_GCVSPLz,TestSmoothingSpline.test_compare_with_GCVSPL  s    R WY|,,-- 	(S	AS	AJ'H	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( .'1--a00 	4USSSSSSs   AAAc                 J   t           j                            d          }d}t          j        |                    |          dz  dz
            }|dz  t          j        d|z            z  |dz  z   |                    dd|          z   }|                    |          |                    |          }}t          ||d          }t          ||dd	
          }|
                    |d         |d         d|z            }t           ||           ||          d           dS )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
  )lamrE  r^  r   r7   rZ   rt   N)rK   rR   r   r   r;  r  rS  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"    i##D))GC%%a((1,q011qD26!a%== 1a4'#**Ra*@*@@zz!}}bjjmm1*1aR888
*1aIFFF{{1Q42A..

4((%d++"	$ 	$ 	$ 	$ 	$ 	$rk   r9   c                 F   t           j                            d          }d}t          j        |                    |          dz  dz
            }|dz  t          j        d|z            z  |dz  z   |                    dd|          z   }t          |j        ||f          \  }}t          ||          }|
                    t          d          d	          D ]}|                    |          }t          j        |t          |                                        d
           t          |||          }	t#           |||                   ||         z
            }
t#           |	||                   ||         z
            }|
|k     rt%          d|
dd|d          d S )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   r;  r  rS  rv   rQ   r   choicer   r  r  r  r  r  r  rI   )rS   rT   r   rU   rw   r   r2  indr  spl_worigweighteds               rW   test_weighted_smoothing_splinez2TestSmoothingSpline.test_weighted_smoothing_spline 	  s    i##D))GC%%a((1,q011qD26!a%== 1a4'#**Ra*@*@@2:1v&&1#Aq)) ::eCjjr:22 	3 	3C

AF1c#hh##C((()!Q22E ss1S6{{QsV+,,D553==1S6122Hh  "2CG!O"2 "2$,!1"2 "2 3 3 3 	3 	3rk   N)
r!  r"  r#  rV  r\  rb  ra   r  	fail_slowri  r$  rk   rW   rQ  rQ    sq        
( ( (>6T 6T 6Tp$ $ $* [13 3 3 3 3rk   rQ  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   | ]F}t                    D ]4}||f         t          |          z  t          	|          z  V  5Gd S r  )r   r%  )
r   ixiyr3   r4   nytxtyrw   r   s
      rW   r  zbspline2.<locals>.<genexpr>'	  s{       7 7E"II7 7&( Bi!Aq"b//)AaBOO; 7 7 7 7 7 7 7rk   )r=  r  r   rK   rQ   )r   r2   r3   r4   nxr  ro  rp  rq  rw   r   s     ``  @@@@@rW   bspline2rs  	  s    DAqFB	R1qB!A#IIII	R1qB!A#IIII
 7 7 7 7 7 7 7 7 7 7b		7 7 7 7 7C:c??rk   c                    |dk    r#||         | cxk    r||dz            k     rn ndndS |||z            ||         k    rd}n6| ||         z
  |||z            ||         z
  z  t          | |dz
  ||          z  }|||z   dz            ||dz            k    rd}nE|||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   Avvda((((!AaC&(((((ssc11v1~~!A$h1Q3!A$'!AqsAq//91Qx1QqS6!AhlQqs1uX!A#./!AqsAaC2C2CC7Nrk   c                      t                    z
  dz
  }|dz   k    rt                    |k    sJ t           fdt          |          D                       S )Nr.   c              3   N   K   | ]}|         t          |          z  V   d S r  ru  r  s     rW   r  zbspline.<locals>.<genexpr>=	  s8      66qta1amm#666666rk   )r=  r  r   )rw   r2   r3   r4   rU   s   ```` rW   rP  rP  :	  sj    A
QA1HH3q66Q;;;;6666666U1XX666666rk   c                       e Zd ZddZd ZdS )
NdBSpline0r;   c                 ,   t          |          }|t          |j                  k    sJ 	 t          |           n# t          $ r	 |f|z  }Y nw xY wt          d |D                       | _        t          d |D                       | _        || _        dS )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   >   K   | ]}t          j        |          V  d S r  )operatorindex)r   kis     rW   r  z&NdBSpline0.__init__.<locals>.<genexpr>Y	  s,      66bx~b))666666rk   c              3   L   K   | ]}t          j        |t                     V   dS )rE   N)rK   rQ   r  )r   tis     rW   r  z&NdBSpline0.__init__.<locals>.<genexpr>Z	  s1      ??rrz"E222??????rk   N)r=  r   rH   r*  r4   r2   r3   )rS   r2   r3   r4   r  s        rW   r
  zNdBSpline0.__init__A	  s     1vvs17||####	FFFF 	 	 	T	AAA	 66A66666??Q?????s   ; AAc                    
 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n J 
|         |k    r
|         t          |          |z
  k     sJ t          
          
d}
 fdt          |          D             }t          j        | D ]D j	                 t	          j
         fdt          |          D                       z  }	||	z  }Et	          j        |          S )Nnoner.   r   c                 j    g | ]/}t          |         j        |         z
  |         d z             0S r.   )r   r4   )r   r  r  rS   s     rW   r   z'NdBSpline0.__call__.<locals>.<listcomp>u	  s:    HHHqqtdfQi'122HHHrk   c           	      x    g | ]6}t          |         j        |         |         j        |                   7S r$  )r%  r4   r2   )r   r  idxrS   rw   s     rW   r   z'NdBSpline0.__call__.<locals>.<listcomp>w	  sQ     *@ *@ *@./ +,AaD$&)SVTVAY*O*O *@ *@ *@rk   )r=  r2   r   r4   rK   r  r*  	itertoolsproductr3   prodrQ   )rS   rw   r  r  tdxdr4   r  iterstermr  r  s   ``        @@rW   __call__zNdBSpline0.__call__]	  s   46{{1vv~~~~ JtOt 
	4 
	4AVAY!Bq	A RU{{!r2..2!ad8r////R!QZ//////Q41991B!!3!3!3!3!3!HH
 HHHHHE$KKHHH$e, 	 	C6#; *@ *@ *@ *@ *@ *@38;;*@ *@ *@ "A "A ADdNFFz&!!!rk   Nr;   )r!  r"  r#  r
  r  r$  rk   rW   ry  ry  @	  s7           8" " " " "rk   ry  c                   |   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                            dddg          ej                            dddg          d                         Zej                            dddg          d             Zd Zd Zd Zd Zd Zd ZdS ) TestNdBSplinec                    t           j                            d          }d\  }}d}t          j        |                    ||z   dz                       }|                    ||f          }|                    |          }|                    |          }t          |||          }t          |f||          }	|                    d          }
|                    |
          }
t           |	|
d d d f                    ||
          d            |	|
d d d f                   j	        |
j	        d	         |j	        d         fk    sJ d S )
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@   i##E**1GCKKQUQYK//00KKaYK''JJqMMJJqMMAq!tQ""[[b[!!ZZ^^ 	2aaag;"E	+ 	+ 	+ 	+r"QQQW+$!agaj(AAAAAAArk   c                     |                     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;   rS  r9   rO   r   r2   r3   	rS   rT   rw   r   r2  y_1r  t2r  s	            rW   make_2d_casezTestNdBSpline.make_2d_case	  s    IIaLLqD A+++dQqSj"1cQ///eUWU111d7^egdAAAg..2qyrk   c                 T   |                     d          }|dz  }t          ||d          }|                     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;   rS  r   rE   r
  r9   )rO   r   rP   r2   r3   r4   r  s	            rW   make_2d_mixedzTestNdBSpline.make_2d_mixed	  s    IIaLLqD A+++IIarzI**S0dQqSj"1cQ///eUWU111d7^egdAAAg..2sueg%%rk   c                    g d}|                      |          \  d |D             }fd|D             }t          j        |t          j                  }t	          |                    |          |                    ||j                  dd           t          d	
          } ||          j        t          |          fk    sJ t	           ||          |                    ||j                  d           t          j        |          }t          j        |d<   |                    |          }t          |
                     ||                    |                    g d                     t          j                            d          }|                    d          dz  }|                    |          } ||          }|j        dk    sJ |                    |d          j        }|d         |d         }
}	t	          t!          ||          |	d	z  |
d	z  d|
z  z   z  d           d S )Nr
  rB   )rB   r.   )r   r
  rr   c                 6    g | ]\  }}|d z  |d z  d|z  z   z  S r(  r$  r   rw   r   s      rW   r   z3TestNdBSpline.test_2D_separable.<locals>.<listcomp>	  1    777&1a!Q$!Q$1*%777rk   c           	      l    g | ]0}t          |d  D             t          j                            1S )c                 6    g | ]}t          j        |          S r$  )rK   rQ   r   r   s     rW   r   z>TestNdBSpline.test_2D_separable.<locals>.<listcomp>.<listcomp>	  s     +++1A+++rk   )rs  rK   rQ   )r   r   r  r4   r  s     rW   r   z3TestNdBSpline.test_2D_separable.<locals>.<listcomp>	  sW     
 
 

  +++++
2	  
 
 
rk   rE   Frs   r)  r\   r;   rS  rt   r  )TFFr  )r<   r;   r9   r   r   )r<   r;   )r7   r9   )r   .)r.   .r9   )r  rK   rQ   rP   r   r   r   r=  rM   r   r   rR   r  r  r   r  r   )rS   rT   r  targetr  bspl2r   r  rrrrw   r   r  r4   r  s              @@@rW   test_2D_separablezTestNdBSpline.test_2D_separable	  so   ///%%%,,	B77B777
 
 
 
 
 

 
 
 
 Z"*---

2

6
<<$)"	$ 	$ 	$ 	$ "bA&&&uRyy3r77+----b		

6
<<5	J 	J 	J 	J Z^^64ZZ^^r++RZZ8L8L8L-M-MNNN i##E**[[i[((1,ZZ^^r|v%%%% jjW%%'6{CK1B///11qs
+%	9 	9 	9 	9 	9 	9rk   c                 j   d}g d}d |D             }|                      |          \  }}}|                    ||||fd          }d}	t          ||d          }
 |
|	          } t          |||          |	          }|j        d	k    sJ t	          ||                    |gd
z            d            |
|          j        t          j        |          d d         |
j        j        |d          z   k    sJ t	           |
|          |                    ||j                  d d d f         dd           |	                    |d          }t          ||d          } ||	          }|j        dk    sJ |
                    d|j                  |z  }t	          ||d            ||          j        t          j        |          d d         |j        j        |d          z   k    sJ t	           ||          |                    ||j                  d d d d f         dd           d S )Nr9   r  c                 6    g | ]\  }}|d z  |d z  d|z  z   z  S r(  r$  r  s      rW   r   z5TestNdBSpline.test_2D_separable_2.<locals>.<listcomp>	  r  rk   rr   r  r  r;   rS  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  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   ///77B777%%%,,	BxxRR(qx11B***)Yr2q))"--
|t####*!122	@ 	@ 	@ 	@
 wr{{ BHRLL"$5	8N$NNNNN

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

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

6
<<QQQd]K$)"	$ 	$ 	$ 	$ 	$ 	$rk   c                    g d}d |D             }d |D             }|                      |          \  }}}|dz  }|                    ||||fd          }d}t          ||d	
          }	 |	|          }
 t          |||          |          }|
j        dk    sJ t	          |
|                    |gdz            d           d S )Nr  c                 6    g | ]\  }}|d z  |d z  d|z  z   z  S r(  r$  r  s      rW   r   z=TestNdBSpline.test_2D_separable_2_complex.<locals>.<listcomp>
  r  rk   c                     g | ]
}|d |z  z   S )y               @r$  )r   r2   s     rW   r   z=TestNdBSpline.test_2D_separable_2_complex.<locals>.<listcomp>
  s     +++q!bd(+++rk   rr   r  r9   r  r  r;   rS  r  r<   rs   rt   )r  r   r   r   r   )rS   rT   r  r  r  r  r4   r  r   r  r  r  s               rW   test_2D_separable_2_complexz)TestNdBSpline.test_2D_separable_2_complex

  s   ///77B777++F+++%%%,,	B6]xxRR(qx11B***)Yr2q))"--
|t####*a00u	> 	> 	> 	> 	> 	>rk   c           
         t           j                            d          }dt           j        ddddt          j        |                    d                    dz  ddddf	         t           j        ddddt          j        |                    d                    dz  ddddf	         |                    j        z
  dz
  j        z
  dz
  f          t          f	          }d
}t           ||          t          |f          d           t           j
        g dg df         }t           ||          fd|D             d           d S )Nr  r;   r   r   r   r   r<   r.   rS  )r0   r0   rs   rt   r.   r
  r9   皙?g? @c                 8    g | ]}t          |f          S r$  )rs  )r   r   r3   r4   rp  rq  s     rW   r   z0TestNdBSpline.test_2D_random.<locals>.<listcomp>-
  s+    CCC""r2h155CCCrk   )rK   rR   r  r   r   r  r   r   r   rs  r   )rS   r   r2  r  r3   r4   rp  rq  s       @@@@rW   test_2D_randomzTestNdBSpline.test_2D_random
  s   i##E**U1aArws{{{':':;;a?Aq!KLU1aArws{{{':':;;a?Aq!KLKKbgaik2719Q;7K88R!q)))B b"Xq!445	B 	B 	B 	B U;;;"??# $BCCCCCCCCCC"	$ 	$ 	$ 	$ 	$ 	$rk   c                     |                                  \  }}}}g d}d |D             }t          ||||f          } ||          j        t          |          fk    sJ t	           ||          |d           d S )N)ffffff?r  )rB   g333333@)r  r  c                 6    g | ]\  }}|d z  |dz  d|z  z   z  S r(  r$  r  s      rW   r   z/TestNdBSpline.test_2D_mixed.<locals>.<listcomp>3
  r  rk   rS  rs   rt   )r  r   r   r=  r   )rS   r  r  kxkyr  r  r  s           rW   test_2D_mixedzTestNdBSpline.test_2D_mixed0
  s    ++--BB11177B777"bRH---uRyy3r77+----b		U	, 	, 	, 	, 	, 	,rk   c                    |                      |          \  }}}}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}|                                D ]|\  }	|                    fd|D             |j                  }
 |||	          }t          ||
d            |                    |	          |          }t          ||
d           }dD ]|}t          t                    5   |||           d d d            n# 1 swxY w Y   t          t                    5  |                    |           d d d            n# 1 swxY w Y   }d S )Nrr   r  rS  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                     dS r  r$  r  s     rW   r  z2TestNdBSpline.test_2D_derivative.<locals>.<lambda>C
      A rk   r   c                     dS r  r$  r  s     rW   r  z2TestNdBSpline.test_2D_derivative.<locals>.<lambda>D
  r  rk   r;   c                     dS r  r$  r  s     rW   r  z2TestNdBSpline.test_2D_derivative.<locals>.<lambda>E
  r  rk   c                     dS r  r$  r  s     rW   r  z2TestNdBSpline.test_2D_derivative.<locals>.<lambda>F
  r  rk   c                     dS r  r$  r  s     rW   r  z2TestNdBSpline.test_2D_derivative.<locals>.<lambda>G
  s    q rk   c                 .    g | ]\  }} ||          S r$  r$  )r   rw   r   expected_fns      rW   r   z4TestNdBSpline.test_2D_derivative.<locals>.<listcomp>L
  s)    222tq!Q""222rk   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_valsdirect
via_methodbad_nur  s                 @rW   test_2D_derivativez TestNdBSpline.test_2D_derivative9
  sz   ++r+22BB111"bRH--- 885544rT1I~~rT1I~~"I~~"I~~rT1R4L..	

  *//11 	C 	COBJJ2222r222"* '  M
 U2"%%%FFM>>>> .))"--b11JJEBBBBB# 	) 	)Fz** % %bV$$$$% % % % % % % % % % % % % % %z** ) )  ((() ) ) ) ) ) ) ) ) ) ) ) ) ) )		) 	)s$   D..D2	5D2	E//E3	6E3	c           
        	 t           j                            d          }d\  }}t           j        ddddt          j        |                    d                    dz  ddddf	         }t           j        ddddt          j        |                    d                    dz  ddddf	         }|                    |j        |z
  d	z
  |j        |z
  d	z
  f          }t           j        g d
g df         }t          ||f|||f          }t          ||f|||f          	t           ||          	fd|D             d           d S )Nr  )r9   r;   r   r   r   r;   r   r<   r.   r  r  rS  c                 &    g | ]} |          S r$  r$  r   rT   bspl2_0s     rW   r   z6TestNdBSpline.test_2D_mixed_random.<locals>.<listcomp>m
  !    222222rk   rs   rt   )rK   rR   r  r   r   r  r   r   r   ry  r   
rS   r   r  r  rp  rq  r3   r  r  r  s
            @rW   test_2D_mixed_randomz"TestNdBSpline.test_2D_mixed_random_
  si   i##E**BU1aArws{{{':':;;a?Aq!KLU1aArws{{{':':;;a?Aq!KLKKbglQ."q0@AKBBU;;;"??# $ 2r(A"b222b"XqRH555b		2222r222	@ 	@ 	@ 	@ 	@ 	@rk   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|          }d t          j	        ||          D             }	 ||	          }
t          j
        |
                                          rJ t          |
 ||	          d	           t          |
                    |j                  |d	           d S )
Nr   r   r
  r;   rS  r9   c                     g | ]	\  }}||f
S r$  r$  r   r  rV   s      rW   r   z0TestNdBSpline.test_tx_neq_ty.<locals>.<listcomp>|
       999Aq!f999rk   rs   rt   )rK   rO   r   r3   r   r2   r4   r   r  r  r   anyr   r   r   )rS   rw   r   spl_xspl_yr   r   valuesrgir  bxis              rW   test_tx_neq_tyzTestNdBSpline.test_tx_neq_tyo
  s}   IaLLIaLL3"1ada000"1adQqSjA666WQQQWaaa 00%'57+R%'571CDDQ$4AqD1Q3Jaaa#88%q!ff5599!21a!8!8999d2hh8C==$$&&&&&SSWW51111FL116FFFFFFrk   c                 v   |                     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;   rS  r9   r.   r  )rS   rT   rw   r   r2  r  r  y_2r  r  r  s              rW   make_3d_casezTestNdBSpline.make_3d_case
  s    IIaLLqD A+++dQqSj"1cQ///dQqSj1n"1cQ///eUWeg&eAAAtTM"gdAAAtm$%gdD!!!m$% 2qyrk   c                    t           j                            d          }|                    d          dz  \  }}}|dz  |dz  d|z  z   z  |dz  d|z  z   dz   z  }|                                 \  }}}t          ||d          }	d	 t          |||          D             }
 |	|
          }|j        d
k    sJ t          ||d           d S )Nr  r;   rD   r   r   r;   r9   r.   rS  c                     g | ]}|S r$  r$  r  s     rW   r   z3TestNdBSpline.test_3D_separable.<locals>.<listcomp>
      &&&Aa&&&rk   rD   rs   rt   )	rK   rR   r  r  r  r   zipr   r   )rS   r   rw   r   r  r  t3c3r4   bspl3r  r  s               rW   test_3D_separablezTestNdBSpline.test_3D_separable
  s    i##E**++7+++a/1aAA!$1qs
Q7%%''	B"bA&&&&&Q1&&&r|u$$$$U333333rk   c                 p   |                      |          \  }}}t          ||d          }t          j                            d          }|                    d          dz  \  }}}	d t          |||	          D             }
|                    |
          }d	 d
 d d d d}|                                D ]z\  }fd|
D             }|                    ||j	                  }t           |||          |d           t           |                    |          |          |d           {d S )Nrr   r;   rS  r  r  r   r   c                     g | ]}|S r$  r$  r  s     rW   r   z4TestNdBSpline.test_3D_derivative.<locals>.<listcomp>
  s    )))q)))rk   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                     dS r  r$  r  s      rW   r  z2TestNdBSpline.test_3D_derivative.<locals>.<lambda>
  s    s rk   ))r.   r   r   )r9   r   r   )r9   r.   r   )r9   r.   r;   )r9   r.   r<   c                 2    g | ]\  }}} |||          S r$  r$  )r   xi_yi_zi_r  s       rW   r   z4TestNdBSpline.test_3D_derivative.<locals>.<listcomp>
  s-    SSSMCc[[c377SSSrk   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  xi_npr  r  r   r  r  s                  @rW   test_3D_derivativez TestNdBSpline.test_3D_derivative
  su   %%%,,	B"bA&&&i##E**++7+++a/1a))C1aLL)))ZZ RQNNNN??**
 

  *//11 	Q 	QOBSSSSUSSSMJJ}BJJGGMEE",,,m%HHHH0E,,R0044m%PPPPP		Q 	Qrk   c           
      z  	 t           j                            d          }d}t           j        ddddt          j        |                    d                    dz  ddddf	         }t           j        ddddt          j        |                    d                    dz  ddddf	         }t           j        ddddt          j        |                    d                    dz  ddddf	         }|                    |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           ||          	fd|D             d           d S )Nr  r;   r   r   r   r   r<   r.   rS  )r0   r0   r.   rs   rt   r  r  g?r  gffffff?c                 &    g | ]} |          S r$  r$  )r   rT   spl_0s     rW   r   z0TestNdBSpline.test_3D_random.<locals>.<listcomp>
  s!    !9!9!9%%))!9!9!9rk   )rK   rR   r  r   r   r  r   r   ry  r   r   )
rS   r   r4   rp  rq  tzr3   r2  r  r  s
            @rW   test_3D_randomzTestNdBSpline.test_3D_random
  s   i##E**U1aArws{{{':':;;a?Aq!KLU1aArws{{{':':;;a?Aq!KLU1aArws{{{':':;;a?Aq!KLKKbgaik2719Q;	!DKEERa1---BB<a000Br7777U;;;"??"??# $ 	B!9!9!9!9b!9!9!9FFFFFFrk   c           
         t           j                            d          }d}t           j        ddddt          j        |                    d                    dz  ddddf	         }t           j        ddddt          j        |                    d                    dz  ddddf	         }t           j        ddddt          j        |                    d                    dz  ddddf	         }|                    |j        |z
  dz
  |j        |z
  dz
  |j        |z
  dz
  f          |                    |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           d S )Nr  r;   r   r   r   r   r<   r.   r/   rS  r  r  r  rs   rt   )rK   rR   r  r   r   r  r   r   r   r   r   r   )rS   r   r4   rp  rq  r  r3   r2  r  r  r  s              rW   test_3D_random_complexz$TestNdBSpline.test_3D_random_complex
  s   i##E**U1aArws{{{':':;;a?Aq!KLU1aArws{{{':':;;a?Aq!KLU1aArws{{{':':;;a?Aq!KL[[rwqy{BGAIaK1E[FF[[rwqy{BGAIaK1E[FFrIJ Ra1---BB<1555BB<1555U;;;"??"??# $ 	Br

Rr

]2	@ 	@ 	@ 	@ 	@ 	@rk   
cls_extrapNTcall_extrapc                 j   |                                  \  }}}t          ||d|          }g dg dg d}	}}t          t          j        |||	f          \  }}}	d t          |||	          D             }
|dz  |dz  d|z  z   z  |	dz  d|	z  z   dz   z  } ||
|	          }t          ||d
           d S )Nr;   r4   r   r7   r   r1  r  r  r7   g            @c                     g | ]}|S r$  r$  r  s     rW   r   z?TestNdBSpline.test_extrapolate_3D_separable.<locals>.<listcomp>
  r  rk   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  s                rW   test_extrapolate_3D_separablez+TestNdBSpline.test_extrapolate_3D_separable
  s     %%''	B"bA:>>> ++a1bj1a),,1a&&Q1&&&AA!$1qs
Q7r{333U333333rk   r   )FT)TNc                 t   |                                  \  }}}|\  }}t          ||d|          }g dg dg d}
}	}t          t          j        ||	|
f          \  }}	}
d t          ||	|
          D             }|dz  |	dz  d|	z  z   z  |
dz  d|
z  z   dz   z  } |||	          }t          ||d
           d S )Nr;   r  r  r  r  c                     g | ]}|S r$  r$  r  s     rW   r   zATestNdBSpline.test_extrapolate_3D_separable_2.<locals>.<listcomp>
  r  rk   r9   r.   r   rs   rt   r!  )rS   r   r  r  r4   r  r  r  rw   r   r  r  r  r  s                 rW   test_extrapolate_3D_separable_2z-TestNdBSpline.test_extrapolate_3D_separable_2
  s     %%''	B"(
K"bA:>>> ++a1bj1a),,1a&&Q1&&&AA!$1qs
Q7r{333U333333rk   c                    |                                  \  }}}t          ||d          }g dg dg d}}}t          t          j        |||f          \  }}}d t          |||          D             }|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           d S )Nr;   rS  )r  r.   r   )r1  r   r  )r7   r
  r  c                     g | ]}|S r$  r$  r  s     rW   r   zETestNdBSpline.test_extrapolate_false_3D_separable.<locals>.<listcomp>
  r  rk   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  s              rW   #test_extrapolate_false_3D_separablez1TestNdBSpline.test_extrapolate_false_3D_separable  s$   %%''	B"bA&&& **nnnnnna1bj1a),,1a&&Q1&&&AA!$1qs
Q7ru---xq	"""""xr
#####qtfQrTl??????rk   c           	         |                                  \  }}}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          }d t          |||          D             }|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        ||
                                                   sJ t          ||	d           d S )Nr;   rS  r  r.   r9   r   r1  r  r  r7   r  c                     g | ]}|S r$  r$  r  s     rW   r   z/TestNdBSpline.test_x_nan_3D.<locals>.<listcomp>  r  rk   rs   rt   )	r  r   rK   rQ   rM   r  r   r   r   )rS   r  r  r4   r  rw   r   r  r  r  r   r  s               rW   test_x_nan_3DzTestNdBSpline.test_x_nan_3D  s]   %%''	B"bA&&& JArvq!Q788JCBFAsC899JCArvsC899&&Q1&&&AA!$1qs
Q7x{{RXa[[(28A;;6vtrxt%%))+++++U333333rk   c                   	 t           j                            d          }d\  }}t          j        |                    ddd                    }t           j        |d         f|z  ||d         f|z  f         }t          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        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           ||          	fd|D             d           d S )Nr  r;   r;   r   r<      r  r7   r9   r.   r   r  r  rS  c                 &    g | ]} |          S r$  r$  r  s     rW   r   z7TestNdBSpline.test_non_c_contiguous.<locals>.<listcomp>;  r  rk   rs   rt   )rK   rR   r  r   r  r   flagsc_contiguousr   r  r   r   ry  r   r  s
            @rW   test_non_c_contiguousz#TestNdBSpline.test_non_c_contiguous$  s   i##E**BWS[[QQR[8899UBqE8B;RVIbL01WS[[QQR[8899UBqE8B;RVIbL01ccc7=----ccc7=----KKbgqj2o127A:?Q3FGKHHC7''''U;;;"??# $ 2ccc7BsssG,aB8<<<b1gr##A#w/r2h???b		2222r222	@ 	@ 	@ 	@ 	@ 	@rk   c                    |                                  \  }}}t          ||d          }t          d          D ]}d||         j        _        d|j        _        t          ||d          } |d           |d          k    sJ d S )Nr;   rS  Fr.  )r  r   r   r0  	writeable)rS   r  r  r4   r  r  bspl3_s          rW   test_readonlyzTestNdBSpline.test_readonly=  s    %%''	B"bA&&&q 	* 	*A$)BqEK!!"2rQ'''uY66)#4#4444444rk   c                    |                                  \  }}}t          j        g dg dg          }t          |||                              |||          }t          j        |||||g          }|j        d         |j        d         k    sJ t          |                                |                                d           t          t                    5  t          j        g d||gdz             d d d            n# 1 swxY w Y   t          t          d          5  t          j        d	d
gg||gdz             d d d            d S # 1 swxY w Y   d S )Nr.  )r<   r   r   r   gؗҜ<rt   r;   zData and knots*r  r.   r9   )
r  rK   rQ   r   r>  r   r   r  rG   rI   )rS   r  r  r4   r  dmdm1s          rW   test_design_matrixz TestNdBSpline.test_design_matrixI  s   %%''	BZIII.//r2q!!//B::%b"q!Qi88x{bhqk))))

ckkmm%@@@@:&& 	: 	:#IIIrA3q5999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: :->??? 	9 	9#aVHb1#a%888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s$   DD
D$EEEc           
         t           j                            d          }d}t           j        ddddt          j        |                    d                    dz  ddddf	         }t           j        ddddt          j        |                    d                    dz  ddddf	         }t           j        ddddt          j        |                    d                    dz  ddddf	         }|                    |j        |z
  dz
  |j        |z
  dz
  |j        |z
  dz
  f          }t          |||f||	          }d
 }t          d||           d S )Nr  r;   r   r   r   r   r<   r.   rS  c                 R    t           j        g dg dg df         } ||           d S )Nr  r  r  )rK   r   )r   r2  r  s      rW   rp  z1TestNdBSpline.test_concurrency.<locals>.worker_fnb  s:    {{{&&' (B CGGGGGrk   re   )	rK   rR   r  r   r   r  r   r   r&   )	rS   r   r4   rp  rq  r  r3   r2  rp  s	            rW   rq  zTestNdBSpline.test_concurrencyX  sK   i##E**U1aArws{{{':':;;a?Aq!KLU1aArws{{{':':;;a?Aq!KLU1aArws{{{':':;;a?Aq!KLKKbgaik2719Q;	!DKEERa1---	 	 	 	 Is33333rk   )r!  r"  r#  r  rK   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  ra   r  r  r"  r%  r(  r+  r2  r6  r:  rq  r$  rk   rW   r  r  }	  s       B B B, !      " & & & &*9 *9 *9X)$ )$ )$V> > >&$ $ $&, , ,$) $) $)L@ @ @ G G G( !    &4 4 4Q Q Q0G G G&@ @ @& [\D$<88[]T4L994 4 :9 984 [X|'DEE4 4 FE4 @ @ @ 4 4 4$@ @ @2
5 
5 
59 9 94 4 4 4 4rk   r  c                   6   e Zd Zd Zd Zej                            dg d          d             Zd Z	d Z
d Zd	 Zej                            d
ej        ej        g          d             Zd Zej                            dg d          d             Zd ZdS )
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  }d t          j        ||          D             }t	          ||f|d          }t           ||          |                                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	           d S )Nr   r   r;   r9   c                     g | ]	\  }}||f
S r$  r$  r  s      rW   r   z7TestMakeND.test_2D_separable_simple.<locals>.<listcomp>p  r  rk   r.   rS  rZ   rt   rX  r   r[   )r   linearr  rs   )rK   rO   r  r  r'   r   ravelr   r3   scipy.interpolater   )rS   rw   r   r  r  r   r  r  r   RGIr  s              rW   test_2D_separable_simplez#TestMakeND.test_2D_separable_simplel  s   IaLLIaLL3111d7Q!Q$1*dAAAg!6699!21a!8!8999Aq66Q///R&,,..u==== #1ada000"1adQqSjA666WQQQWaaa 00DFQ7777 	EDDDDDc1a&&222Bb666666rk   c                 8   t          j        d          }t          j        d          }d t          j        ||          D             }|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                              t                    }|j
        dk    sJ t          |                    ddd          |d	           |                    d
          }	t          ||f|	dt          j                  } ||          }|j
        dk    sJ t          |                    dddd          |                    d
          d	           d S )Nr   c                     g | ]	\  }}||f
S r$  r$  r  s      rW   r   z>TestMakeND.test_2D_separable_trailing_dims.<locals>.<listcomp>  r  rk   r;   r9   r4   solver)$   r<   r<   rs   rt   r  )rJ  r9   r9   )rK   rO   r  r  r  r'   sslspsolver  r  r   r   r   )
rS   rw   r   r  r  values4r   r  r  values22s
             rW   test_2D_separable_trailing_dimsz*TestMakeND.test_2D_separable_trailing_dims  s   IaLLIaLL99!21a!8!8999 111d7Q!Q$1*dAAAg!66)VVVV<==Aq67aDDDbFFFF;<<CCEJJ|w&&&&q!Q//U	, 	, 	, 	, ??<00Aq68qEEEb|z))))q!Q22|445	B 	B 	B 	B 	B 	Brk   r4   )r-  r  )r;   r.   )r.   r;   r  c                 |   t          j        d          }t          j        d          dz   }d t          j        ||          D             }|dz  d d d f         |dz  d|z  z   d d d f         z  }t	          ||f||t
          j                  }t           ||          |                                d	           d S )
Nr   r   r
  c                     g | ]	\  }}||f
S r$  r$  r  s      rW   r   z,TestMakeND.test_2D_mixed.<locals>.<listcomp>  r  rk   r;   r9   rH  rZ   rt   )	rK   rO   r  r  r'   rK  rL  r   rB  )rS   r4   rw   r   r  r  r   s          rW   r  zTestMakeND.test_2D_mixed  s     IaLLIaLL399!21a!8!8999Q$4AqD1Q3Jaaa#88Aq66Qs{CCCR&,,..u======rk   c                 F   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            d S # 1 swxY w Y   d S )Nr   r   r7   r;   r9   r.   rS  )rK   rO   rM   rG   rI   r'   )rS   rw   r   r  s       rW   test_2D_nanszTestMakeND.test_2D_nans  s    IaLLIaLL3"111d7Q!Q$1*dAAAg!66:&& 	- 	-A!,,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s   4B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   rM  )rS   rw   r   r  s       rW   _get_sample_2d_datazTestMakeND._get_sample_2d_data  s    H...//H...//H""""""""""""""""""	
 	
 !Qwrk   c                    |                                  \  }}}t          ||f|d          }t          ||f|d          }t          j        g dg dg          j        }t           ||           ||          d           d S )	Nr.   rS  rA  r  r.   gffffff@g333333@r   ffffff
@333333?r;   r.   rX  rY  r@   r[  r0   r;   rs   rt   rU  r'   r   rK   rM  r  r   rS   rw   r   r  r   r  r  s          rW   test_2D_vs_RGI_linearz TestMakeND.test_2D_vs_RGI_linear  s    **,,1aAq61***%q!faAAAX6666668 9 99: 	 	R##b''666666rk   c                 "   |                                  \  }}}t          ||f|dt          j                  }t	          ||f|d          }t          j        g dg dg          j        }t           ||           ||          d           d S )	Nr;   rH  cubic_legacyr  rW  rZ  rs   rt   	rU  r'   rK  rL  r   rK   rM  r  r   r\  s          rW   test_2D_vs_RGI_cubiczTestMakeND.test_2D_vs_RGI_cubic  s    **,,1aAq61#+>>>%q!faGGGX6666668 9 99: 	 	R##b''666666rk   rI  c                    |                                  \  }}}t          ||f|d|d          }t          ||f|d          }t          j        g dg dg          j        }t           ||           ||          dd	
           d S )Nr;   ư>)r4   rI  r]   r_  r  rW  rZ  rs   r   r[   r[  )rS   rI  rw   r   r  r   r  r  s           rW   test_2D_vs_RGI_cubic_iterativez)TestMakeND.test_2D_vs_RGI_cubic_iterative  s     **,,1aAq61&tDDD%q!faGGGX6666668 9 99: 	 	R##b''DAAAAAArk   c                 "   |                                  \  }}}t          ||f|dt          j                  }t	          ||f|d          }t          j        g dg dg          j        }t           ||           ||          d           d S )	Nr   rH  quintic_legacyr  rW  rZ  rs   rt   r`  r\  s          rW   test_2D_vs_RGI_quinticz!TestMakeND.test_2D_vs_RGI_quintic  s    **,,1aAq61#+>>>%q!fa8HIIIX6666668 9 99: 	 	R##b''666666rk   zk, meth))r.   rA  )r;   r_  )r   rf  c                 V   t           j                            d          }t          j        |                    d                    }t          j        |                    d                    }t          j        |                    d                    }|                    d          }t          |||f||t          j                  }t          |||f||          }	t           j                            d	d
d          }
t           ||
           |	|
          d           d S )Ni@ r   r   r   r   r)  rH  r  gffffff?r  rC   r  rs   rt   )
rK   rR   r  cumsumr  r'   rK  rL  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    y$$V,,Idlll**++Idlll**++Idlll**++9--Aq!9f#+FFF%q!QiEEEY3Sw??R##b''666666rk   c                 h   |                                  \  }}}ddi}t          t          d          5  t          ||f|fddi| d d d            n# 1 swxY w Y   t          t          d          5  t          ||ft	          j        ||f          fddi| d d d            d S # 1 swxY w Y   d S )Nmaxiterr.   rI  r  r4   r;   )rU  rG   rI   r'   rK   r  )rS   rw   r   r  solver_argss        rW   test_solver_err_not_convergedz(TestMakeND.test_solver_err_not_converged  sg   **,,1a !n:X666 	7 	7A66Q6+666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 :X666 	G 	GA	1a& 1 1FFQF+FFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs#   AAA3'B''B+.B+N)r!  r"  r#  rE  rO  ra   r  r  r  rS  rU  r]  ra  rK  gmresgcrotmkrd  rg  rl  rp  r$  rk   rW   r>  r>  k  sA       7 7 7(B B B4 [S"J"J"JKK> > LK>- - -   7 7 77 7 7 [X	3;'?@@B B A@B7 7 7 [NNN 7 7 7G G G G Grk   r>  c                   J    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S )
TestFpchecc                    d}t          j        d                              dd          }t          j        d          }t          j        t
          d          5  t          j        |||           d d d            n# 1 swxY w Y   t          j        t
          d          5  t          j        |||           d d d            d S # 1 swxY w Y   d S )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>   IbMM!!!Q''IbMM]:];;; 	  	 Jq!Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  ]:];;; 	  	 Jq!Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s$   A==BB#CC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            n# 1 swxY w Y   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            d S # 1 swxY w Y   d S )Nr;   r9   r.   rD   re   z	Need k+1*r  )	rK   rO   dfitpackfpchecra   r	   rI   rv  rw  )rS   r4   rU   r  r2   rw   s         rW   test_condition_1zTestFpchec.test_condition_1  s   AY]FIaLLIaLLq!Q''2----]:[999 	  	 Jq!Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  qsGaKEAIIaLLIaLLq!Q''2----]:[999 	  	 Jq!Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s$   2BBBD66D:=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 |                                }|d         |d<   t          j        |||          dk    sJ t          j        t          d	
          5  t          j        |||           d d d            n# 1 swxY w Y   |                                }|d         |d<   t          j        |||          dk    sJ t          j        t          d
          5  t          j        |||           d d d            d S # 1 swxY w Y   d S )Nr;   r   r.   r9   r   )r.   r9   r;   r<   r  r7   r   zLast k knots*r  zFirst k knots*r{  r|  rv  rw  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,,,,z!Q""***VVXXA2q"a((B....]:_=== 	! 	!Jq"a   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! VVXX21q"a((B....]:-=>>> 	! 	!Jq"a   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s$   (CCC,EE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            d S # 1 swxY w Y   d S )
Nr;   r   r.   r9   r   r.   r9   r;   r  r<   r     zInternal knots*r  )r{  r|  rv  rw  ra   r	   rI   rx  s       rW   test_condition_3zTestFpchec.test_condition_3>  sF   C1IA!ac*"""q!Q''1,,,,z!Q""***C1IA!ac*q!Q''2----]:->??? 	  	 Jq!Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   "CC
C
c                 d   d}dg|dz   z  dg|dz   z  z   }g d}t          j        |||          dk    sJ t          j        |||          J |                                }|d         |d<   t          j        |||          dk    sJ t          j        |||          J |                                }|d         dz
  |d<   t          j        |||          dk    sJ t          j        t          d          5  t          j        |||           d d d            n# 1 swxY w Y   |                                }|d	         dz   |d	<   t          j        |||          dk    sJ t          j        t          d          5  t          j        |||           d d d            d S # 1 swxY w Y   d S )
Nr;   r   r.   r   r  r8  zOut of bounds*r  r7   r  )rS   r4   r2   rw   rh   s        rW   test_condition_4zTestFpchec.test_condition_4K  sG    C1IQqS	!"""q!Q''1,,,,z!Q""***VVXX!1r1a((A----z!Q""***VVXX!q1r1a((B....]:-=>>> 	! 	!Jr1a   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! VVXX22r1a((B....]:-=>>> 	! 	!Jr1a   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s$   :DD!$D!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            n# 1 swxY w Y   g d}t          j        |||          dk    sJ t          j        t          d          5  t          j        |||           d d d            d S # 1 swxY w Y   d S )Nr.   )r   r   r.   r9   r9   )r  r  r  rq   Schoenberg-Whitney*r  )r   r   r   r{  r|  ra   r	   rI   rv  rw  rx  s       rW   test_condition_5_x1xmz TestFpchec.test_condition_5_x1xmj  so   OOOOq!Q''2----]:-BCCC 	  	 Jq!Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  OOq!Q''2----]:-BCCC 	  	 Jq!Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s$   A%%A),A)+CCCc                     d}g d}ddg}t          j        |||          dk    sJ t          j        |||          J d S )Nr.   )r   r   r.   r.   r   g333333?r   )r{  r|  rv  rw  rx  s       rW   test_condition_5_k1zTestFpchec.test_condition_5_k1x  sX    LL#Jq!Q''1,,,,z!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            n# 1 swxY w Y   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 S # 1 swxY w Y   d S )	Nr;   r   r.   r9   r   rq   r  r  r  rx  s       rW   test_condition_5_1zTestFpchec.test_condition_5_1  s   C1IOqc1Q3i'CEq!Q''2----]:-BCCC 	  	 Jq!Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  C1IOqc1Q3i'CEq!Q''2----]:-BCCC 	  	 Jq!Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s$   A::A>A>C==D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            n# 1 swxY w Y   dgdz  ddgz   }t          j        |||          dk    sJ t          j        |||          J d S )Nr;   r   r.   r9   r   r  r<   rq   r  r  r  rx  s       rW   test_condition_5_2zTestFpchec.test_condition_5_2  s2   C1IA!ac*E!GqcMq!Q''2----]:-BCCC 	  	 Jq!Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  E!Gq!fq!Q''1,,,,z!Q""*****s   A??BBc                     d}g d}g d}t          j        |||          dk    sJ t          j        t          d          5  t          j        |||           d d d            d S # 1 swxY w Y   d S )Nr.   )	r   r   r9   r;   r<   r   r   r   r   )r.   r.   r.   @r  r  r  rq   r  r  r  rx  s       rW   test_condition_5_3zTestFpchec.test_condition_5_3  s    ''')))q!Q''2----]:-BCCC 	  	 Jq!Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   A&&A*-A*N)r!  r"  r#  ry  r}  r  r  r  r  r  r  r  r  r$  rk   rW   rt  rt    s        	  	  	      *! ! !,     ! ! !>     + + +     + + +         rk   rt  c                    t          j        | |||                    fdt          t                    dz
            D             }dd                  }t          t          |                    D ]0}||         dz  }||xx         |z  cc<   ||dz   xx         |z  cc<   1|dxx         d         z  cc<   t	          t          |          t                    d           |fS )z)Split the knot interval into "runs".
    c                 f    g | ]-}|         |d z                                                      .S r  )r  )r   r  rm  	residualss     rW   r   z_split.<locals>.<listcomp>  s:    GGGi1b1g&**,,GGGrk   r.   r7   r9   rZ   rt   )rK   r  r   r=  r   r  )	rw   r2   r4   r  fpartscarriesr  carryrm  s	      `    @rW   _splitr    s    
AadG	$	$BGGGGGeCGGAI6F6FGGGF1R4!G3w<<    
Qq			U			qsu
2JJJ)B-JJJCKKYe<<<<2:rk   c                    t          | |||          \  }}d}d}t          t          |                    D ]0}||dz            ||         z
  dk    r||         |k    r
|}||         }1|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)r  r   r=  rI   rK   r  r   )rw   r2   r4   r  r  rm  idx_max	fpart_maxr  idx_newknotnew_knotidx_tt_news                rW   	_add_knotr    s    1a++JFB GI3v;; " "ac7RU?Q6!9y#8#8Gq	I$PQQQ g;GAI.2q8K~HOAx((EE!FUF)Xqy01ELrk   c                   (   e Zd Zd Zej                            dg d          d             Zd Zd Z	d Z
d Zd	 Zd
 Zd Zej                            dg d          ej                            dg d          d                         Zd Zd ZdS )TestGenerateKnotsc                 2   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} |                    ||||          }t          ||||          }	t          ||	d           t	          ||||          }
 |
|          |z
  d	z  }|                    ||||          }t          ||||          }t          ||d           d S )Nr   rE   r;   r0   r.   r=   r  )r4   r2   r9   r   _fitpack_reprorZ   rt   )
rK   rO   r  rM  r   rC  r  add_knotr  r   )rS   rw   r   r4   r2   r2  r  _frnew_tnew_t_pyspl2
residuals2new_t2	new_t2_pys                 rW   test_split_add_knotz%TestGenerateKnots.test_split_add_knot  sH   Iau%%%qD2q1u:HbT1Q3Z2$!*,--aa1---SVVaZ!O	;;;;;;Q1i00Q1i00xe4444 q!qE222d1ggkA%
a:66a:66		666666rk   r4   r  c                 X   |                     d|j                  }|                    ||j        z  dz            }t	          t          |||d                    d         }t          |||d          d         }|                    ||j                  }t          ||d           d S )Nr   rE   r   r4   r  r7   rZ   rt   )	rO   rP   r  r  r  r"   r   rQ   r   )rS   r4   rT   rw   r   r2   r  s          rW   test_s0zTestGenerateKnots.test_s0  s    IIarzI**FF1RU7191Q///004AqA###A&ZZ"*Z--2E******rk   c                 &   d}|                     ||j                  }|dz  }t          t          ||dd                    }|                    t          t          j        |          d                    }t          |d         |d           d S )	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  s    IIarzI**qD^AqA33344::k"*Q--;;<<b	8%888888rk   c                    d}|                     |          }|dz  }t          t          ||dd                    }|                    t	          t          j        |          d                    }t          |d         |d           d S )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    IIaLLqD^AqA33344::k"*Q--;;<<b	8%888888rk   c           
          t          j        d          }|dz  }t          t                    5  t	          t          ||ddd                     d d d            d S # 1 swxY w Y   d S )Nre   r;   r   r4   r  nest)rK   rO   rG   rI   r  r"   rS   rw   r   s      rW   test_s0_nestzTestGenerateKnots.test_s0_nest  s    IbMMqD:&& 	: 	:1QR888999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   "AA!$A!c                 $                        dj                  }                    |t          j        z  dz            }d}t          t          |||d                    }g dg dg dg d	g d
g}fd|D             }t          |          t          |          k    sJ t          ||          D ]\  }}t          ||d           t          |||d          \  }}	}	t          |d                             |          d           dS )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@   r[  r   r  r  r  c                 H    g | ]}                     |j                   S )rE   )rQ   rP   )r   wantrT   s     rW   r   z3TestGenerateKnots.test_s_switch.<locals>.<listcomp>4  s+    HHH"**T*44HHHrk   rZ   rt   r7   N)rO   rP   r  rK   r  r  r"   r=  r  r   r   rQ   )
rS   rT   rw   r   r4   r  wantedr2   r  r   s
    `        rW   test_s_switchzTestGenerateKnots.test_s_switch  sC   . IIarzI**FF1RU719^AqA66677222666:::>>>AAA	
 IHHHHHH5zzS[[(((('' 	/ 	/EArAr..... Ad+++1ab	2::a==u======rk   c                     t          t          d                    }t          ||dd          }t          |           d S )Nr   r  r.   )r  r4   )r  r   r"   next)rS   rw   gens      rW   r  z!TestGenerateKnots.test_list_input>  s8    qNNQSA...S					rk   c           	         |                     d|j                  }|                    ||j        z  dz            }d}t	          t          ||d|d                    }t          |d         |                    g d|j                  d	
           t          t                    5  t	          t          ||dd                     d d d            d S # 1 swxY w Y   d S )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)   IIarzI**FF1RU719^AqA<<<=="IJJ???rzJRR	
 	
 	
 	
 :&& 	4 	41222333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   (!CCCc           
         t          j        d          }t          j        |t           j        z  dz            }t	          t
                    5  t          t          ||t          j        d                               d d d            n# 1 swxY w Y   t	          t
                    5  t          t          ||t          j        d                                d d d            d S # 1 swxY w Y   d S )Nr   rD   r  )	rK   rO   r  r  rG   rI   r  r"   r  r  s      rW   r  zTestGenerateKnots.test_weightsU  sK   IaLLF1RU719:&& 	8 	81	"666777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 :&& 	6 	61444555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s$   2BBB*3C**C.1C.npts)r  rq   r   r  )r  {Gz?r   c                    t           j                            d          }dt          j        |                    |                    z  }t          j        |t           j        z  dz            t          j        |dz
  dz             z   }d}t          ||||          d         }t          t          ||||                    d	         }t          ||d
           d S )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  rk  rw   r   r4   r2   r  s	            rW   test_vs_splrepz TestGenerateKnots.test_vs_splrep_  s     y$$U++rwt|||..///F1RU72:!A#	!2!221a1"""1%.Aa00011"5AE******rk   c                 f   d}t          j        |          }|dz  }t          t          ||dd                    }t	          j        t                    5 }t          ||dd          }d d d            n# 1 swxY w Y   t          |          dk    sJ t          |d         |d                    d S )N   r;   Jz5r  r.   r7   r   )
rK   rO   r  r"   ra   warnsRuntimeWarningr   r=  r   )rS   rU   rw   r   r  r  r`   s          rW   test_s_too_smallz"TestGenerateKnots.test_s_too_smallr  s    IaLLqD ^AqA77788\.)) 	-QAe,,,C	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-1vv{{{{b	3q6*****s   A55A9<A9c                     t          g dg dg dd          }t          j        t          d          5  t	          |           d d d            d S # 1 swxY w Y   d S )N)r=   r0   r>   r?   )r@   r[  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    ]]]MMM]]]aPPP]:-?@@@ 	 	III	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAN)r!  r"  r#  r  ra   r  r  r  r  r  r  r  r  r  r  r  r  r  r$  rk   rW   r  r    s0       7 7 70 [S///22+ + 32+9 9 99 9 9: : :*> *> *>X  4 4 4"6 6 6 [V]]]33[S...11+ + 21 43+"+ + +    rk   r  c                    | 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
   r<  emptyr  r   r  	factorial)
r2   r4   rU   deltanrintr  tiir  matrr  s
             rW   
disc_naiver    sq    	

Aa!eaiL1Q4E!GaKE	
1Q3qs1u9B
)B

C!HHHHHH1IIIIII(26!a%!)$$a((333A8U1Wagaj)777D1agaj!$$ , ,!QQQ$!AaCF)+QT111WU5[1t~a0000DKrk   c                        e Zd ZdZddZd ZdS )F_densezm The r.h.s. of ``f(p) = s``, an analog of _fitpack_repro.F
    Uses full matrices, so is for tests only.
    NTc                    || _         || _        || _        || _        |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	        dk    sJ || j        z  }
t          j        |
t	          j        | j        j        d                   f         | _        || _        d S )NrE   r.   r   r   r  )rw   r   r2   r4   rK   rn   r  r  r   r  r
   r<  r   a_denserC  r  r  discr  b_denser   r/  r   r  )rS   rw   r   r2   r4   r  r  r   r  r  r   s              rW   r
  zF_dense.__init__  s5   12au----&v{a U'!RVAGAJNQ$677TTTUVWW40;;;;;;#SXXa^^4<<>> v{{{{Z%BHT\%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)rt  r.   r   r9   )rK   vstackr  r  scipy.linalgr  r  r  r   r   r
   r2   r4   r   r  r  rw   r   r2  r  )rS   r  abr  r  r2  r  qyr	  r3   r2  fps               rW   r  zF_dense.__call__  s    YdlQ&6788 	+*******r":&&&1S47]WQZE!CRC"H+r#2#w''dfaT5EFFFVDFAITVtv!5 99::DF{rk   )NT)r!  r"  r#  r  r
  r  r$  rk   rW   r  r    sA            .    rk   r  c                      e Zd ZdZefdZd Zd Zej	        
                    dg d          d             Zd Zej	        
                    dg d          d	             Zej	        j        d
             Zej	        
                    dg d          d             Zd Zej	        
                    dddg          ej	        
                    dg d          d                         Zej	        
                    dddg          d             Zej	        
                    dddg          ej	        
                    dg d          d                         Zej	        
                    dg d          ej	        
                    dg d          d                         Zej	        
                    dg d          ej	        
                    dg d          d                         ZdS )_TestMakeSplrepBaseNc                    | j         dk    r@|                    ddt          j        z  d          }|                    |          }d}|||fS |                    ddd          }|                    |dz  dz            dz  }d}|||fS )	Nr   r   r9   re   gq@H&?r   rD   gQ	@)r:  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            n# 1 swxY w Y   t          t                    5  t	          ddd| j        	           d d d            n# 1 swxY w Y   t          t                    5  t          j        |j        dddf          }t	          ||d| j        	           d d d            n# 1 swxY w Y   t          j        d          }t          t                    5  t	          ||d
z  |d| j                   d d d            n# 1 swxY w Y   t          j        d           }t          t                    5  t	          ||d
z  |d| j                   d d d            n# 1 swxY w Y   t          j        |j        d         df          }t          t                    5  t	          ||d
z  |d| j                   d d d            n# 1 swxY w Y   t          t                    5  t	          |d d d         |d
z  d| j        	           d d d            n# 1 swxY w Y   t          t                    5  t	          ||d
z  dd| j                   d d d            n# 1 swxY w Y   t          t                    5  t	          ||d
z  d| j        	           d d d            n# 1 swxY w Y   t          t                    5  t	          ||d
z  d
dd| j                   d d d            n# 1 swxY w Y   t          t                    5  t	          ||d
z  dd| j                   d d d            n# 1 swxY w Y   t          t                    5  t	          t          j
        d          t          j
        d          d| j        	           d d d            d S # 1 swxY w Y   d S )Nr   re   rD   r  r^  r.   r9   r  r  r:  r;   )r  r  r:  r7   rB   r4   r  r:  )r4   r  r  r:  )r  r  r:  r   	   )rK   rf   rG   rI   r#   r:  r  r   r   rH   rO   rS   rw   r   r  s       rW   test_input_errorsz%_TestMakeSplrepBase.test_input_errors  s=   K2r""K2r"":&& 	4 	41dl3333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 :&& 	; 	;1T\::::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; :&& 	; 	;Aq)**A1T\::::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;
 GBKK:&& 	C 	C1a41T\BBBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C WR[[L:&& 	C 	C1a41T\BBBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C GQWQZO$$:&& 	C 	C1a41T\BBBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C :&& 	D 	D$$B$AdlCCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 9%% 	E 	E1a43#t|DDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E :&& 	= 	=1a42t|<<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= :&& 	K 	K1a411T\JJJJ	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K :&& 	E 	E1a412t|DDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E :&& 	Q 	Q	!billc4<PPPP	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Qs   A%%A),A)B))B-0B-6D

DD=E&&E*-E*GG
GH,,H03H0%I<<J J KKK#LLL*MMM3NN #N ;=PP	P	c           	      X   t          t          ||||| j                            d         }t          ||||| j                  }t          |||||| j                  }t	          |j        |j        d           t	          |j        |j        d           |j        |j        k    sJ d S )Nr  r7   )r2   r4   r  r:  rZ   rt   )r  r"   r:  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EEFFrJq!qAt|DDDAqAaFFF
EG%8888
EG%8888zUW$$$$$$rk   r4   r.   r9   r;   r<   r   r   c                 f    |                                  \  }}}|                     ||||           d S r  )r  r  )rS   r4   rw   r   r  s        rW   test_with_knotsz#_TestMakeSplrepBase.test_with_knots!  s7    ..""1aaAq)))))rk   c                 P   t          |||| j                  }t          |||| j                  }t          t	          |||| j                            d         }t          |j        |j        d           t          |j        |d           t          |j        |d           d S )Nr9  r7   rZ   rt   )r#   r:  r   r  r"   r   r3   r2   )rS   rw   r   r4   r2  spl_ir2   s          rW   _test_default_sz#_TestMakeSplrepBase._test_default_s'  s    !Q!T\:::"1a1dlCCC14<@@@AA"EuwU3333qu----//////rk   c                 d    |                                  \  }}}|                     |||           d S r  )r  r  )rS   r4   rw   r   r   s        rW   test_default_sz"_TestMakeSplrepBase.test_default_s0  s5    ..""1aQ1%%%%%rk   c           	         d}| j         dk    r8t          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            n# 1 swxY w Y   t          j                    5  t          j        dt                     t          ||d|| j         	          }d d d            n# 1 swxY w Y   t          |j        |d                    t          t          j        |j        dg|j        d
z   z  f         |d
         d           d S )NgKH9r   r   r9   r  r;   r5   r4   r  r  r  r.   r+  rt   )r:  rK   rf   r  r  rO   warningscatch_warningssimplefilterr  r   r#   r   r2   r   r3   r4   )rS   r  rw   r   r`   r2  s         rW   r  z$_TestMakeSplrepBase.test_s_too_small5  s    <:%%Aqw++Aq		AA	"A1A$&& 	K 	K!   Aadlj.HJJJC	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K $&& 	D 	D!   aa1dlCCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	s1v&&&ceaS#%']23AU	, 	, 	, 	, 	, 	,s$   28B66B:=B:4DDDr.  c                    d}| j         dk    r8t          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 d S )
Nre   r   r   r9   r;   r9  h㈵>r  r.   )	r:  rK   rf   r  r  rO   r#   r3   r  )rS   r4   rU   rw   r   r2  r  r  s           rW   
test_shapez_TestMakeSplrepBase.test_shapeR  s     <:%%Aqw**Aq		AA	!A1A!Q!T\:::AqAt|DDDuzQw|q     Aq1ac7{a4NNNw|q      rk   c                    d}ddt           j        z  }}t          j        |||dz             }t          j        |          }t	          t
                    5  t          ||dd           d d d            d S # 1 swxY w Y   d S )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  s    !BE'1K1a!e$$F1II:&& 	: 	:1j9999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   A66A:=A:r:  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
           d S )Nr   r9   re   r.   r   r  r   r  r4   r  r  r  r  r4   r:  rt   )rK   rf   r  r  r=  r   r#   r   r2   r   r3   r4   )rS   r:  r4   rw   r   r  r`   r2  s           rW   %test_make_splrep_with_unequal_weightsz9_TestMakeSplrepBase.test_make_splrep_with_unequal_weightsp  s     K1RU7B''F1IIK1c!ff%%QQ!t'Z2GIII!Q!tq'BBBs1v&&&ceaS#%']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|          } |||
           d S )Nc                     t          | j        |d                    t          t          j        | j        dg| j        dz   z  f         |d         d           d S )Nr   r.   r  rt   )r   r2   rK   r   r3   r4   )r2  r`   s     rW   checkzO_TestMakeSplrepBase.test_make_splrep_with_non_c_contiguous_input.<locals>.check  s^    CE3q6***BE#%!ceAg"67F/ / / / / /rk   r   r9   re   Fr.   r   r;   r  r   r  r  )rK   rf   r  r  r   r  r0  r1  r=  r   r#   )rS   r:  r  rw   r   r   r  r  w1r   r`   r2  s               rW   ,test_make_splrep_with_non_c_contiguous_inputz@_TestMakeSplrepBase.test_make_splrep_with_non_c_contiguous_input  s   	/ 	/ 	/ K1RU7B''F1IIq!tB x$----x$----K1c!ff%%adA x$----QQ!t'Z2GIII "a17CCCc3 !R17CCCc3 !Q"7CC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                       d S )	Nr   r.   re   r9   r7   r;   r  )xbxer4   r  r2   r  r:  )rK   rf   r  r  rM  r#   r  r
   r2   r   r4   r   rQ   )
rS   r:  r4   rw   r   r  r  r  r2   r2  s
             rW   %test_make_splrep_impl_no_optimizationz9_TestMakeSplrepBase.test_make_splrep_impl_no_optimization  sR    K1b!!F1ru9q=!!1quB HbTQU^rda!en455 !Q2"qtW> > > #w'''''u{1~a!e,,,,uzzzzdqsdRZA%?%?@@@!fgg
B41q5>(B(BCCCCCrk   rU   )r   3   r  rD   r  )re   r   r   r.   r  c           
      `   t           j                            d          }t           j        dt          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    s<t          |	j        |d
           t          |	j        |d | d	z
           d
           d S d S )Nr  r   r9   r   r   r  r  r  rD   r.   rZ   rt   )rK   rR   r  r   r   r  r  r  r  r   r:  r#   r   r2   r3   
rS   rU   r  r   rw   r   r2   r3   r4   r2  s
             rW   (test_make_splrep_matches_splrep_periodicz<_TestMakeSplrepBase.test_make_splrep_matches_splrep_periodic  s    i##C((E!RWS[[AIAE[BBCCQYNOF1IIq		!A)CEEE1a!Q!T\:::RAFFt|z'A'ACE151111CE1Wqb1fW:E:::::: (B'Ark   c           
         t           j                            d          }t           j        dt          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	
           d S )Nr  r   r9   r   r   r"  )r  r:  r2   r.   rZ   rt   )rK   rR   r  r   r   r  r  r  r  r   r:  r#   r   r3   r#  s
             rW   "test_make_splrep_with_splrep_knotsz6_TestMakeSplrepBase.test_make_splrep_with_splrep_knots  s     i##C((E!RWS[[AIAE[BBCCQYNOF1IIq		!A)CEEE1a!Q!T\Q???q1"q&z666666rk   )r!  r"  r#  r:  rK   r  r  r  ra   r  r  r  r  r  thread_unsafer  r  r  r  r  r  r$  r&  r$  rk   rW   r  r    s       G    5Q 5Q 5Qn% % % [S"4"4"455* * 65*
0 0 0 [S"4"4"455& & 65& [, , ,8 [S))),,! ! -,!(: : : [YT(:;;[S///22+ + 32 <;+ [YT(:;;+ + <;+\ [YT(:;;[S///22D D 32 <;D, [S"3"3"344[S"5"5"566
; 
; 76 54
; [S"3"3"344[S"5"5"5667 7 76 547 7 7rk   r  c                       e Zd Zej                            dg d          d             Zej                            dg d          d             Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd ZdS )TestMakeSplrepr4   r  c                 @   ddl m} |                                 \  }}}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	           'd S )
Nr   Fr.   rB   r@   r   r.   re   r   rZ   rt   ) scipy.interpolate._fitpack_repror,  r  rK   rM  r  r   )
rS   r4   r,  rw   r   r  r2   ff_dr  s
             rW   test_fitpack_FzTestMakeSplrep.test_fitpack_F  s     	766666..""1aHaS!A#Y#s+qc1Q3i788Aa111d7Q1%%aAq!$$ 	6 	6AAAaDD##a&&u55555	6 	6rk   c                    ddl m} |                                 \  }}}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 ]Q}t           ||           |	|          d
           t          j
         |
|           |	|          d
          rJ Rd S )Nr   r+  r.   rB   r@   r   rE   r  r-  rZ   rt   )r.  r,  r  rK   rM  rO   r   r  r  r   r   )rS   r4   r,  rw   r   r  r2   r  fwfw_dr0  r  s               rW   test_fitpack_F_with_weightsz*TestMakeSplrep.test_fitpack_F_with_weights  s?    	766666..""1aHaS!A#Y#s+qc1Q3i788Iagaj...Qq!AAAtG*aA+++q!Q1***aAq!$$ 	@ 	@ABBqEE44777777{33q664477???????	@ 	@rk   c           
         dd l mc m} t          j                            d          }t          j        ddddt          j        |                    d                    dz  ddddf	         }t          |          d}}t          |                    ||                                           }t          ||          }|j        d         |d|z  z
  dz
  k    sJ t          ||d	           d S )
Nr   r  r   r   r   r;   r9   rZ   rt   )r.  interpolater  rK   rR   r  r   r   r  r=  r  r  r  r  r   r   )rS   r  r   r2   rU   r4   DD_denses           rW   test_disc_matrixzTestMakeSplrep.test_disc_matrix  s     	766666666i##E**E!Q1bgckkqk&9&9::1<aAqHI1vvq1#((1a..)1133Q""wqzQ1Wq[((((7//////rk   c                    d}|                      |          \  }}}|                    dg|dz   z  ddgz   dg|dz   z  z             }t          ||||          \  }}}|                    |          |                    |          }}t          ||k              sJ t	          ||||          }	t          |d |	j        j        d                  |	j        d	           d S )
Nr;   r   r.   rB   r@   r   r  rZ   rt   )r  rQ   r   r   r#   r   r3   r   )
rS   rT   r4   rw   r   r  r  r2   r3   r2  s
             rW   test_simple_vs_splrepz$TestMakeSplrep.test_simple_vs_splrep  s    ..$$1aZZQqS	S#J.!ac:;;Aa(((1azz!}}bjjmm117||!Q!q)))/35;q>/*CE>>>>>>rk   c                 h   d}|                                  \  }}}t          t          ||||                    d         }t          ||||          }t          |||||          }t	          |j        |j        d           t	          |j        |j        d           |j        |j        k    sJ d S )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04q!qA...AqAa000
EG%8888
EG%8888zUW$$$$$$rk   c                     d}|                     ||j                  }|dz  }d}t          |||d          }|j        j        d         d|dz   z  k    sJ d S )Nre   rE   r;   r.   r  r   r9   )rO   rP   r#   r2   r   )rS   rT   rU   rw   r   r4   r2  s          rW   test_no_internal_knotsz%TestMakeSplrep.test_no_internal_knots*  si    IIarzI**qD!Q!q)))u{1~AaC((((((rk   c                     d}|                     ||j                  }|dz  }t          ||d          }t          ||d          }t	          |j        |j        d           d S )Nre   rE   r;   rS  rZ   rt   )rO   rP   r#   r   r   r3   )rS   rT   rU   rw   r   r2  r  s          rW   r  zTestMakeSplrep.test_default_s3  sn    IIarzI**qD!Q!$$$"1a1---uwU33333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            n# 1 swxY w Y   t          |          d	k    sJ d S )
Nr  r;   r  r  r   r.   r+  rt   r9   )rK   rO   ra   r  r  r   r#   r   r2   r   r   r3   r4   r=  )rS   rU   rw   r   r  r`   r2  s          rW   r  zTestMakeSplrep.test_s_too_small<  s   IaLLqD\.)) 	0QAe,,,Caa5111CCE3q6***BE#%!ceAg"67F0 0 0 0		0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 1vv{{{{{{s   A=B>>CCc                 n   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            d S # 1 swxY w Y   d S )	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@rC  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   J % % % -/J8 8 8 J    &(Z1 1 1 Jy171:-RZ@@@:&& 	. 	.1Q"----	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   B**B.1B.c                 @   d\  }}|                     ||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 d S )Nre   r;   rE   r;   rS  r  r  r.   )rO   rP   r#   r3   r  )	rS   rT   rU   r4   rw   r   r2  r  r  s	            rW   r  zTestMakeSplrep.test_shapeX  s    1IIarzI**qD!Q!$$$AqA...uzQw|q     Aq1ac7{a4888w|q      rk   c                 ^   d\  }}|                     ||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 d S )NrF  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IIarzI**qDAqA+++AqA+++w|q    w|q    w}Q1q519,,,,w}Q1A;......rk   N)r!  r"  r#  ra   r  r  r1  r5  r:  r<  r  r?  r  r  rD  r  rH  r$  rk   rW   r)  r)    s        [S"4"4"455	6 	6 65	6 [S"4"4"455@ @ 65@ 0 0 0? ? ?% % %) ) )4 4 4  . . .! ! ! / / / / /rk   r)  c                      e Zd ZdZej                            dg d          d             Zej                            dg d          d             Zd Z	d Z
ej                            dd	d
g          d             Zej                            dg d          ej                            ddg          d                         ZdS )TestMakeSplrepPeriodicr   r4   r  c                     |                     ddd          }|                    d          }t          |||d| j                  }|j        j        d         d|dz   z  k    sJ d S )Nr   re   rD   r  r.   r  r9   )rf   r  r#   r:  r2   r   )rS   r4   rT   rw   r   r2  s         rW   r?  z-TestMakeSplrepPeriodic.test_no_internal_knots}  si     KK2r""GGENN!Q!q$,???u{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 d S )Nre   r   r9   r  r.   )rK   rf   r  r  r  r#   r:  r3   r  r2   r   )rS   r4   rU   rw   r   r  r  s          rW   rH  z%TestMakeSplrepPeriodic.test_s0_vs_not  s     K1RU7A&&F1IIq		!AqADLAAAAqADLAAAw|q    w|q    w}Q1q1u9,,,,,,rk   c                    d}dd|j         z  }}|                    |||dz   |j                  }|                    |          }t	          ||d| j                  }t          t          ||          |dd	
           |                    |          |                    |          z   }t	          ||d| j                  }t          t          ||          |dd
           d|                    |          z  |                    |          dz  z   }t	          ||d| j                  }t          t          ||          |dd	
           d S )Nre   r   r9   r.   rE   r  r  r  rY  r[   r   rc  r   r;   )	r  rf   rP   r  r#   r:  r   r   r  )rS   rT   r  r  rV   rw   r   r2  s           rW    test_periodic_with_periodic_dataz7TestMakeSplrepPeriodic.test_periodic_with_periodic_data  s3   !BE'1KK1a!e2:K66FF1II!Q$===aqt$????FF1IIq		!!Q%>>>aqt$????bffQiiK"&&))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            d S # 1 swxY w Y   d S )Nre   r   r9   r.   r  r  )rK   r  rf   r  rG   rI   r#   r:  r  s         rW   $test_periodic_with_non_periodic_dataz;TestMakeSplrepPeriodic.test_periodic_with_non_periodic_data  s    !BE'1K1a!e$$F1II:&& 	< 	<1dl;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   A;;A?A?r  r   r  c                    t          j        ddg          }t          j        ddg          }|dk    rt          j        ddg          nd }t          |||dd|          }t          |||dd|          }|dk    rt	          |j        |d                    t	          t           j        |j        dg|j        dz   z  f         |d                    d S )	Nr=   r0   r[  r   r.   r   )r  r4   r:  r  )r  r4   r  r  )	rK   rM  r#   r   r   r2   r   r3   r4   )rS   r  rw   r   r  r2  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     Hc3Z  Hc3Z  $%EEBHc3Z   t !Q!q*BBBQQ!a000q55CE3q6***ceaS#%']23A	  	  	  	  	 rk   k_fp))r.   -C6)r9   rT  )r;   gAȘrY  c           	      d   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            n# 1 swxY w Y   |
j        }t          j        ddg          } ||          }t          |d         |d                    d S )Nre   r   r.   r9   r  r  r  r5   r>   MbP?r=   r0   )rK   rf   r  r  r   r    r  r  r	  r  r!   rN   r2  rM  r   )rS   rS  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    K1a  F1ru9q=!!2QQ!+++1a4j#a&A;;;$&& 	T 	T!(N;;;&#C!GrvrAv6F'GUSSA	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T
 Z(C:&&"W++
GAJ/////s   AC!!C%(C%N)r!  r"  r#  r:  ra   r  r  r?  rH  rN  rP  rR  r\  r$  rk   rW   rJ  rJ  x  s+        G[S"4"4"455) ) 65) [S"4"4"455- - 65-@ @ @"< < < [S1e*--    .-  [V%Q%Q%QRR[S4&))0 0 *) SR0 0 0rk   rJ  c                       e Zd ZddefdZej                            dg d          d             Zej                            dg d          d             Z	d Z
d	 Zd
 ZdS )TestMakeSplprepre   r;   c                     |                     ||j                  |j        z  |z  }|                    |          |                    |          g}|||fS )NrE   )rO   rP   r  r  r  )rS   r  r4   rT   rw   r   s         rW   _get_xykzTestMakeSplprep._get_xyk  sN    IIarzI**RU2Q6VVAYYq		"!Qwrk   r  r   r  rV  r  c           
      `   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	           d S )NrF  r  r   r  re   ra  r  rZ   rt   r.   r  )rK   rO   r  r  r  r   r$   r   r2   r=  rQ   r  r3   r
   )rS   r  r  r4   rw   r   	num_knotsr2   r3   u_r2  r  r   s                rW   test_simple_vs_splprepz&TestMakeSplprep.test_simple_vs_splprep  sJ    1IaLL25 1$VAYYq		" %u==	  Q	Aq2a1%%%Q 	2E**** 	qu----1vv1%%%% Z]]_r.... 	A01aa00033%	A 	A 	A 	A 	A 	Ark   c                    |                                  \  }}}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            d S # 1 swxY w Y   d S )Nr   r9   rc  rt   rZ   r.   )r`  r  r  rK   r   r   rQ   r   r=  r   r$   r2   r3   r  r4   rG   rI   )	rS   r  r   r   r`   r  tck_au_ar2  s	            rW   test_array_not_listz#TestMakeSplprep.test_array_not_list  s    --//1a!T"""""x{{1~"""" aQRZ]]a000
s3Q''''Aau55553q6{{c%(mm++++Aau55551vq!!!!xa&&"(1++5555a1%%%Q3U++++uQxe4444q6666ua    s1vv|rx{{****bjmmq111Q3U++++uQxe4444q6666ua    s1vv|rx{{****:&& 	/ 	/AA....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   :)K00K47K4c                     |                      d|          \  }}}t          |          \  }}t           ||          |                    |          d           d S )Nre   r  rT   rZ   rt   r`  r$   r   r   rS   rT   rw   r   r4   r2  r  s          rW   test_default_s_is_zeroz&TestMakeSplprep.test_default_s_is_zero  sY    --"-,,1aaQA%888888rk   c                    |                      d|          \  }}}t          |d          \  }}t          |d          \  }}t          ||d           t           ||          |                    |          d           t           ||          |                    |          d           |j        |j        k    sJ |j        j        |j        j        k    sJ d S )Nre   rl  r   rc  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

BHHQKKe<<<<c

BHHQKKd;;;;zUZ''''w}------rk   c                 ^   t          j        dt                    }t          t                    5  t          |           d d d            n# 1 swxY w Y   t          t                    5  t          |d           d d d            n# 1 swxY w Y   t          t                    5  t          |d           d d d            n# 1 swxY w Y   t          |gd          \  }}t          |gd          \  }} ||          j        dk    sJ t           ||          |gd	           d S )
Nr   rE   r   rc  r  r  r.   r   rZ   rt   )	rK   rO   r  rG   rI   r   r$   r   r   )rS   rw   r`   re  r2  r  s         rW   r  zTestMakeSplprep.test_1D2  s   Iau%%%:&& 	 	AJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 :&& 	! 	!a    	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! :&& 	# 	#c""""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 1#&&&RqcT***Qs1vv|v%%%%A%000000s5   AAA+B		BB(CC
C
Nr!  r"  r#  rK   r`  ra   r  r  rf  rj  ro  rt  r  r$  rk   rW   r^  r^    s        qR    
 [S"6"6"677A A 87A: [S"6"6"677/ / 87/B9 9 9. . .1 1 1 1 1rk   r^  c                       e Zd ZddefdZej                            dg d          d             Zej                            dg d          d             Z	d Z
d	 Zd
 ZdS )TestMakeSplprepPeriodicre   r;   c                     |                     dd|j        z  ||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  sL    KK1RU7ARZK88VVAYYq		"!Qwrk   r  r   rY  r  rc  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           d S )Nre   r   r9   r  r.  r{  r.   r"  r   r  rZ   rt   r  rc  r[   )rK   rf   r  r  r  r   r$   r   r=  r2   r
   )rS   r  rU   rw   r   rd  r2   r3   r4   re  r2  r  s               rW   rf  z.TestMakeSplprepPeriodic.test_simple_vs_splprepL  s    K1RU7A&&VAYYq		" "Bb99	  QA...	Aq2a1j999Q 	2E**** 35zzYq\)))) 	A 81aa 8 8 8 ; ;"	0 	0 	0 	0 	0 	0rk   c                 4   |                                  \  }}}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            d S # 1 swxY w Y   d S )	Nr   r9   r.   r"  rt   rZ   r   r  )r`  r  r  rK   r   r   rQ   r   r=  r  r   r$   r4   rG   rI   r  )rS   r  r   r   r`   r  rh  ri  r  r  r2  s              rW   rj  z+TestMakeSplprepPeriodic.test_array_not_liste  s    --//1a!T"""""x{{1~"""" aQ'''QRZ]]aQ777
s3Q''''Aau55553q6{{c%(mm++++#a&%(++ 	0 	0FBB/////1vq!!!!xa&&"(1++5555a1j999Q3U++++ua    s1vv|rx{{****bjmmq*EEEQ3U++++ua    s1vv|rx{{****:&& 	C 	CAAzBBBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cs   *JJJc                     |                      d|          \  }}}t          |d          \  }}t           ||          |                    |          d           d S )Nre   rU   rT   r   r^  rZ   rt   rm  rn  s          rW   ro  z.TestMakeSplprepPeriodic.test_default_s_is_zero  s`    --"-,,1aa444QA%888888rk   c                 p   |                      d|          \  }}}t          |dd          \  }}t          |dd          \  }}t          ||d           |                    |          }	t           ||          |	d           t           ||          |	d	d
           |j        |j        k    sJ d S )Nre   r  r   r   r  r   rZ   rt   r   rc  r[   )r`  r$   r   r   r  )
rS   rT   rw   r   r4   r  rq  rr  rs  y_arrs
             rW   rt  z0TestMakeSplprepPeriodic.test_s_zero_vs_near_zero  s    --"-,,1a!!q*===
s!!ujAAA
sSu----c

E6666c

E4@@@@zUZ''''''rk   c                 v   t          j        ddt           j        z  d          }t          j        |          }t	          t
                    5  t          |d           d d d            n# 1 swxY w Y   t	          t
                    5  t          |dd           d d d            n# 1 swxY w Y   t	          t
                    5  t          |dd           d d d            n# 1 swxY w Y   t          |gd	d          \  }} ||          j        d
k    sJ t           ||          |gd	           d S )Nr   r9   r   r.   r  r   r  r  rZ   rv  rt   )
rK   rf   r  r  rG   rI   r   r$   r   r   )rS   rw   r2  r  s       rW   r  zTestMakeSplprepPeriodic.test_1D  s   K1RU7A&&F1II:&& 	 	A1	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 :&& 	5 	5a4444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 :&& 	7 	7c:6666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 qcUJ???Qs1vv|v%%%%A%000000s6   A**A.1A.	B((B,/B,C&&C*-C*Nrw  r$  rk   rW   ry  ry  D  s         qR    
 [S"7"7"7880 0 9800 [S"7"7"788C C 98C<9 9 9( ( (1 1 1 1 1rk   ry  c                   .    e Zd Zd Zd ZddZd Zd ZdS )BatchSplinec                    t          j        ||d          }|j        d d         | _        fd|                    d|j        d                   D             | _        || _        d S )Nr7   c                 $    g | ]} |fi S r$  r$  )r   yikwargsrX  rw   s     rW   r   z(BatchSpline.__init__.<locals>.<listcomp>  s-    VVVR20000VVVrk   )rK   moveaxisr   _batch_shaper   _splines_axis)rS   rw   r   r  rX  r  s    `  ``rW   r
  zBatchSpline.__init__  sk    K4$$GCRCLVVVVVV199RQS;U;UVVV


rk   c                     fd| j         D             }t          j        || j        j        z             }j        rt          j        |d| j                  n|S )Nc                 &    g | ]} |          S r$  r$  )r   rX  rw   s     rW   r   z(BatchSpline.__call__.<locals>.<listcomp>  s!    3336VVAYY333rk   r7   )r  rK   r   r  r   r  r  r  s    ` rW   r  zBatchSpline.__call__  s[    3333T]333Jq$+ag56612?r{1b$*---a?rk   Nc                 f    fd| j         D             }t          j        || j                  S )Nc                 >    g | ]}|                               S r$  )r  )r   rX  r  rV   r   s     rW   r   z)BatchSpline.integrate.<locals>.<listcomp>  s+    MMMVVaK00MMMrk   )r  rK   r   r  )rS   r  rV   r   r   s    ``` rW   r  zBatchSpline.integrate  s;    MMMMMMt}MMMz!T.///rk   c                 `    t          j        |           }fd|j        D             |_        |S )Nc                 :    g | ]}|                               S r$  )r   r   rX  r   s     rW   r   z*BatchSpline.derivative.<locals>.<listcomp>  s'    III&))"--IIIrk   r  deepcopyr  rS   r   r  s    ` rW   r   zBatchSpline.derivative  s4    mD!!IIIICLIII
rk   c                 `    t          j        |           }fd|j        D             |_        |S )Nc                 :    g | ]}|                               S r$  )r  r  s     rW   r   z.BatchSpline.antiderivative.<locals>.<listcomp>  s'    MMMf--b11MMMrk   r  r  s    ` rW   r  zBatchSpline.antiderivative  s4    mD!!MMMMMMM
rk   r  )r!  r"  r#  r
  r  r  r   r  r$  rk   rW   r  r    sg          @ @ @
0 0 0 0  
    rk   r  c            
          e Zd Ze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                            dg d          ej                            d	g d
          d                                     Z	dS )	TestBatchzmake_spline, kwargsr^  r0   r  r  r  
eval_shape)r$  r  r  r  r  c                    t           j                            d          }d}ddd|f}d}t          j        g ||R  }	t          j        |                    |          d|          }
|t
          k    r5d}|	d         f|d	z   z  |	d         f|d	z   z  z   }|t          ||
          z  } ||	|
fd|i|}t          |	|
f||d|} |j        |d|i}	t           j	        
                     ||	           ||	                     |                    d	          |                    d	          }}t           j	        
                     ||	           ||	                     |                    d          |                    d          }}t           j	        
                     ||	           ||	                     t           j	        
                     |j        |  |j        |            d S )Nl   UU{ re   r9   r;   r<   )r   re   r7   r   r.   )r2   r4   r  )r  rX  r   )rK   rR   r  rf   r  r   rJ   r  r  testingassert_allcloser  r   r  )rS   make_spliner  r  r  r   rU   r   domainrw   r   r4   r2   r  refs                  rW   
test_batchzTestBatch.test_batch  s    i##$455Aq!K#####K

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

""33q6633q66222%%a((#*<*<Q*?*?S

""33q6633q66222>>!$$cnnQ&7&7S

""33q6633q66222

""=3=&#9=3=&;QRRRRRrk   N)
r!  r"  r#  ra   r  r  r   r   r   r  r$  rk   rW   r  r    s        [2
b	!
	$
%	.
Hi0	1
Hd+	,		  [\+;+;+;<<[VZZZ00S S 10 =< S S Srk   r  r  r  r  )zrI  r|  r  r  r  ru  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   rC  r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  scipy.sparse.linalgsparserK  scipy.interpolate._bsplinesr   r   r   r   r   r.  r    r!   r"   r#   r$   scipy.interpolate._fitpack_implr7  _fitpack_implr  scipy._lib._utilr%   scipy._lib._testutilsr&   scipy.interpolate._ndbspliner'   r(   r{  r)   rv  r*   r  r  r,   r  r  r  r   r   r   ru   r   r_   r  r  r?  r  r  r  r  r  r  r!  r  r%  r'  rO  rQ  rs  r%  rP  ry  r  r>  rt  r  r  r  r  r  r  r)  rJ  r^  ry  r  r  r$  rk   rW   <module>r     s	   				              



                    ) ( ( ( ( ( ( ( ( * * * * * *                                      
       ! ! ! ! ! ! ! ! !E E E E E E E E E E E E E E B A A A A A A A G G G G G G G G G G / / / / / / / / / & & & & & & 9 9 9 9 9 9 5 4 4 4 4 4 3 3 3 3 3 3 - - - - - - & & & & & &;/  7_
) _
) _
) _
) _
) _
) _
) _
)D 7S$ S$ S$ S$ S$ S$ S$ S$l6 6 6,  $G G G> > >          $ b + + + +  $_) _) _) _) _) _) _) _)D %&&`? `? `? `? `? `? `? '&`?F  8   8 !+11(Y<MNN  ?##~: ~: ~: ~: ~: ~: ~: $#~:B       >) ) ) )X	 	 	  (nL nL nL nL nL nL nL nLb* * *
 ())J3 J3 J3 J3 J3 J3 J3 *)J3^
 
 
  7 7 7:" :" :" :" :" :" :" :"z 9j4 j4 j4 j4 j4 j4 j4 j4ZWG WG WG WG WG WG WG WGta  a  a  a  a  a  a  a L  (  . >""l l l l l l l #"l^  2, , , , , , , ,^Q7 Q7 Q7 Q7 Q7 Q7 Q7 Q7h ;R/ R/ R/ R/ R/( R/ R/  R/j ;\0 \0 \0 \0 \00 \0 \0  \0~ <  h1 h1 h1 h1 h1 h1 h1 ! h1V <  b1 b1 b1 b1 b1 b1 b1 ! b1J       8$S $S $S $S $S $S $S $S $S $Srk   