
    _Mh-                       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 d dl	m
Z
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"Z& d dl'm(Z(m)Z)m*Z*m+Z+m,Z, d dlm-Z-m.Z.m/Z/ d dl0m1c m2Z3 d dl4m5Z5 d d	l6m7Z7 d d
l8m9Z9 d dlm:Z; d dlm<Z= d dlm>Z>  G d d          Z? G d d          Z@d ZAd ZBd ZCd ZDd ZEd ZFdIdZGdJdZHd ZI G d d          ZJ G d d           ZKd! ZLdKd"ZMejN        O                    d#d$d%g          ZP G d& d'          ZQ G d( d)          ZRdLd+ZSd, ZTd- ZU G d. d/          ZVd0 ZW G d1 d2          ZXd3 ZYd4 ZZd5 Z[ G d6 d7          Z\ G d8 d9          Z] G d: d;          Z^ G d< d=          Z_d> Z`d? Za G d@ dA          ZbdB Zc G dC dD          Zd G dE dF          Ze G dG dH          ZfdS )M    N)suppress_warnings)xp_assert_equalxp_assert_close)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)generate_knotsmake_splrepmake_splprep)	AxisError)_run_concurrent_barrier)make_ndbspl)	_dfitpack)	_bsplines)_dierckxc                      e Zd Zd Zd Zd Zd Zd Zd Z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%e j!        j&        d#             Z'e j!        "                    d$g d%          e j!        "                    d& e#d'                    d(                         Z(d) Z)d* Z*d+ Z+e j!        "                    d,g d-          d.             Z,e j!        "                    d,g d-          d/             Z-d0 Z.d1 Z/e j!        j&        d2             Z0d3 Z1d4S )5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\  }}t          j	        ||z   dz   t
          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)   r4         r4   )        r8   r+          @      @      @)r+   r+   r+   cubic      @)r8   r   r)   r)   r4   r6   )r+   r)   r)      r6   dtype)assert_raises	TypeError
ValueErrorr   dictnperrstatenaninfarangefloat64randomr   r-   r.   r/   )selfnr/   r-   r.   bs         e/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/interpolate/tests/test_bsplines.py	test_ctorzTestBSpline.test_ctor)   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Iac!e2:...IQ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)   r4   foo)	_make_random_splinetckr   r-   r.   r/   pytestr   AttributeError)rM   rO   rY   s      rP   test_tckzTestBSpline.test_tckL   s    !!eSV%e<<<<SV%e<<<<sc!f}}}} ]>** 	 	AE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   >BBB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)   
   r:   r,   )r   ffffff?r)   r6   r7   r_   r;   )rF   linspacer   r   	ones_likewhererM   xxrO   s      rP   test_degree_0zTestBSpline.test_degree_0X   s    [Ar""q!f***"r|B//#5666lllq!f222"rxT	3<<=====    c                    g d}g d}d}t          |||          }t          j        ddd          }t          |d         t	          |          z  |d         t	          |dz
            z  z   |d         t	          |dz
            z  z    ||          d	           t          t          ||||f           ||          d	           d S )
Nr5   r)   r4   r6   r)   r6   2   r   r4   +=rU   )r   rF   r`   r   B_012r   )rM   r-   r.   r/   rO   xs         rP   test_degree_1zTestBSpline.test_degree_1a   s    OOIIAq!K1b!!!U1XX!U1Q3ZZ7!A$uQqSzz/I!5	* 	* 	* 	*a!Q++QQqTT>>>>>>rf   c                    d}t          j        dg|dz   z  dg|dz   z  z             }t          j        g d          }t          |                    dd          ddg          }t	          |||          }t          j        ddd          }t           ||d	
           ||d	
          d           t          t          ||||f           ||          d           d S )Nr6   r   r)   r+   r9   r:   r;   r2   g      r9   r^   Textrapolaterj   rk   )rF   asarrayr   reshaper   r`   r   r   )rM   r/   r-   r.   bpbsplrd   s          rP   test_bernsteinzTestBSpline.test_bernsteinl   s
   JsAaCyA3!9,--J'''((199R##aV,,q!Q[b"%%24000RT222	@ 	@ 	@ 	@b1a),,Ru	. 	. 	. 	. 	. 	.rf   c                 (   t                      }|j        \  t          j                  dz
           d          } ||          }fd|D             }t	          ||d           fd|D             }t	          ||d           d S )Nr)   ri   c                 4    g | ]}t          |          S  _naive_eval.0rm   r.   r/   r-   s     rP   
<listcomp>z4TestBSpline.test_rndm_naive_eval.<locals>.<listcomp>   s'    3331{1aA&&333rf   rj   rk   c                 4    g | ]}t          |          S rz   )_naive_eval_2r}   s     rP   r   z4TestBSpline.test_rndm_naive_eval.<locals>.<listcomp>   s'    666aaAq))666rf   )rX   rY   rF   r`   r   )	rM   rO   rd   y_by_ny_n2r.   r/   r-   s	         @@@rP   test_rndm_naive_evalz TestBSpline.test_rndm_naive_evalz   s      !!%1a[1q!Aw++aee333333333Su----6666662666T......rf   c           	          t                      }|j        \  }}}t          j        ||         || dz
           d          }t	           ||          t          ||||f          d           d S )Nr)   ri   rj   rk   rX   rY   rF   r`   r   r   rM   rO   r-   r.   r/   rd   s         rP   test_rndm_splevzTestBSpline.test_rndm_splev   sn    !!%1a[1q!Aw++"uR!Q33%@@@@@@rf   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   rj   rk   )rF   rL   RandomStatesortr   r   r-   r/   r`   r   r   )	rM   rngrm   yrY   rO   r-   r/   rd   s	            rP   test_rndm_splrepzTestBSpline.test_rndm_splrep   s    i##D))GCJJrNN##JJrNNQllSMsAC1[1q!Aw++"uR~~E::::::rf   c                 (   t                      }t          j        |j                  |_        t          j        |j        |j                 |j        |j         dz
           d          }t           ||          t          j        |                     d S )Nr)   d   )rX   rF   ra   r.   r`   r-   r/   r   )rM   rO   rd   s      rP   test_rndm_unityzTestBSpline.test_rndm_unity   sq    !!l13[QS13tAv;44"r|B//00000rf   c                    t           j                            d          }d\  }}t          j        |                    |                    }|                    |ddf          }t	          |||          }||         || dz
           }}|||z
  |                    d          z  z   }	 ||	          j        dk    sJ d S )	Nr      r6         sizer)   r6   r7      )r6   r7   r   r   r   )rF   rL   r   r   r   shape)
rM   r   rN   r/   r-   r.   rO   tmtprd   s
             rP   test_vectorizationzTestBSpline.test_vectorization   s    i##D))1GCJJqMM""JJQ1IJ&&Aq!1q!AwB27cjj3333quu{o------rf   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   )!   r6   r)   r2   r   ri   rj   rk   )	rF   rL   r   r   r_r   r`   r   r   )rM   r   rN   r/   r-   r.   c_padrO   b_paddtrd   s              rP   
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Drf   c           	          t                      }|j        \  }}}||         || dz
           }}dD ]3}t           |||g|           ||dz   |dz
  g|          dd           4d S )Nr)   TF绽|=&.>Hz>rT   rX   rY   r   )	rM   num_parallel_threadsrO   r-   _r/   r   r   extraps	            rP   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rf   c           	          t                      }|j        \  }}}t           |||dz   | dz
           dz
             |||dz   | dz
           dz             d           d S )Nr)   r   r   rk   r   )rM   r   rO   r-   r   r/   s         rP   test_continuityzTestBSpline.test_continuity   s    !!%1a!AaC1H+-..!AaC1H+2E0F0F	 	 	 	 	 	rf   c           	         t                      }|j        \  }}}|d         |d         z
  }t          j        ||         |z
  || dz
           |z   d          }||         |k     ||| dz
           k     z  }t	           |||         d           |||         d                     t	           ||d          t          ||||fd                     d S )	Nr2   r   r)   ri   Trq   F)extr   )rM   rO   r-   r.   r/   r   rd   masks           rP   test_extrapzTestBSpline.test_extrap   s    !!%1arUQqT\[1AqbdGbL"55!r	b1aRT7l+ 	"T(555"T(666	8 	8 	8 	"$///b1a)+++	- 	- 	- 	- 	-rf   c                     t                      }|j        \  }}}|d         dz
  |d         dz   g} ||          }t          j        t          j        |                    rJ d S )Nr   r)   r2   )rX   rY   rF   allisnan)rM   rO   r-   r   r/   rd   yys          rP   test_default_extrapzTestBSpline.test_default_extrap   se    !!%1adQh"	"QrUU6"(2,,'''''''rf   c           	         t           j                            d          }t          j        |                    d                    }|                    d          }d}t	          |||d          }|j        |dz   z
  }|d         |d	         z
  }t          j        ||         |z
  ||         |z   d
          }||         |||         z
  ||         ||         z
  z  z   }	t           ||          t          |	|||f                     g d}||         |||         z
  ||         ||         z
  z  z   }	t           ||d           ||	d                     d S )Nr      r7   r6   periodicrq   r)   r2   r   ri   )r2   r         ?r)   T)
rF   rL   r   r   r   r   r`   r   r   r   )
rM   r   r-   r.   r/   rO   rN   r   rd   xys
             rP   test_periodic_extrapz TestBSpline.test_periodic_extrap   sS   i##D))GCJJqMM""JJqMMAq!444Fa!erUQqT\[1AaD2Ir22qTR!A$Y1Q4!A$;//"uR!Q33444 __qTR!A$Y1Q4!A$;//"*555qq7N7N7NOOOOOrf   c                     t                      }|j        \  }}}t          j        |||f          }t	          j        ||         ||          d          }t           ||           ||          dd           d S )Nr   rj   rT   )rX   rY   r	   from_splinerF   r`   r   )rM   rO   r-   r.   r/   pprd   s          rP   
test_ppolyzTestBSpline.test_ppoly   sz    !!%1a1ay))[1q!uc**"rr"vvE>>>>>>rf   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   r2   ri   r)   dernurj   rk   )	rX   rY   rF   r`   r   ranger   r   
zeros_like)rM   rO   r-   r.   r/   rd   r   yds           rP   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Erf   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 )Nr4   )r2   r2   r   r)   r)   r6   r7   r   r   r   r   r   r   r   r   )r)   r6   r7   r   r   r   g2H@gη   @r6   r7   r)   r   )rF   rL   r   r   r   rs   r   allclose)	rM   r/   r-   r   r.   rO   rm   x0x1s	            rP   test_derivative_jumpsz!TestBSpline.test_derivative_jumps  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Frf   c           	         t          j        ddd          }t          j        g d          }t	           ||          t          ||j        |j        |j        f          d           t	           ||          t          |          d           t          j        g d          }t          j        d	d
d          }t	           ||          t          j
        |dk     ||z  d|z
  d
z            d           d S )Nr2   r7   r   r   r)   r4   r6   )r-   rj   rk   r   r)   r)   r4   r   r4   r^   r)   r9   )rF   r`   r   basis_elementr   r   r-   r.   r/   B_0123rb   rc   s      rP   test_basis_element_quadraticz(TestBSpline.test_basis_element_quadratic&  s   [Q##!LLL111"b13QS/22	@ 	@ 	@ 	@"r

	0 	0 	0 	0 !LLL111[Ar"""aBB
33%	A 	A 	A 	A 	A 	Arf   c           	          t                      }|j        \  }}}t          j        ||         || dz
           d          }t	           ||          t          ||||          d           d S )Nr)   r   rj   rk   )rX   rY   rF   r`   r   _sum_basis_elementsr   s         rP   test_basis_element_rndmz#TestBSpline.test_basis_element_rndm3  sm    !!%1a[1q!Aw++"22q!Q??eLLLLLLrf   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   rj   rk   )	rX   rY   r   r.   realimagrF   r`   r   )	rM   rO   r-   r.   r/   ccb_reb_imrd   s	            rP   
test_cmplxzTestBSpline.test_cmplx9  s    !!%1a(^Ar1q!#(A&&q!#(A&&[1q!Aw++"
DDHH59999"
DDHH5999999rf   c                     t          j        g d          }t          j         |t          j                            sJ d S )Nr   )r   r   rF   r   rH   rM   rO   s     rP   test_nanzTestBSpline.test_nanF  s<    !,,,//x"&		"""""""rf   c                 D   t          d          }|j        \  }}}t          |||          }t          j        ||         || dz
           d          }t          d|          D ]<}|                                }t           |||           ||          dd           =d S )Nr   r/   r)   r   -q=rT   )rX   rY   r   rF   r`   r   
derivativer   )rM   rO   r-   r.   r/   b0rd   js           rP   test_derivative_methodz"TestBSpline.test_derivative_methodK  s    !$$$%1aQ1[1q!Aw++q! 	F 	FAABBr1IIqquu5uEEEEE	F 	Frf   c                     t                      }|j        \  }}}t          j        ||         || dz
           d          }t	           |                                                                |           ||          dd           t          j        |||f         }t          j        ||f          }t          |||          }t	           |                                                                |           ||          dd           d S )Nr)   r   rj   rT   )
rX   rY   rF   r`   r   antiderivativer   c_dstackr   r   s         rP   test_antiderivative_methodz&TestBSpline.test_antiderivative_methodT  s   !!%1a[1q!Aw++7((**5577;;"E	7 	7 	7 	7 E!Q'NIq!fAq!7((**5577;;"E	7 	7 	7 	7 	7 	7rf   c           
      
   t          j        g d          }t          |                    dd          t	          j        d                     t          |                    dd          t	          j        d                     t          |                    dd          t	          j        d                     t          |                    dd          t	          j        d                     t          |                    ddd	          t	          j        d                     t          |                    ddd
	          t	          j        d                     t          |                    ddd
	          t	          j        d                     t          |                    ddd
	          t	          j        t          j        dd|j                                       d|_	        |
                                }t	          j         |d           |d          z
            }t          |                    dd          |           t          |                    dd          t	          j        d|z                       t          |                    dd          |           t          |                    dd          t	          j        d|z                       t          |                    dd          t	          j         |d           |d          z
                       t          |                    dd          t	          j         |d           |d          z
   |d          z    |d          z
                       t          |                    dd          t	          j         |d           |d          z
   |d          z    |d          z
                       t          |                    dd          t	          j         |d           |d          z
   |d          z    |d          z
  d|z  z                        t          |                    dd          t	          j         |d           |d          z
                       t          |                    dd          t	          j         |d           |d          z
                       t          |                    dd          t	          j         |d           |d          z
  d|z  z
                       d S )Nr3   r   r)   r         r2   r8   Trq   Fr   r4   iii      ?r6   g      +@   r   ir7   )r   r   r   	integraterF   rs   _implr   rY   rr   r   )rM   rO   i
period_ints       rP   test_integralzTestBSpline.test_integralb  s   !))),,Aq))2:c??;;;Aq))2:h+?+?@@@Aq))2:d+;+;<<< 	B**BJsOO<<<Bt<<bjooNNNBu==rz#OOOAru==rz(?S?STTT 	Aru==
5<2qu#=#=>>	@ 	@ 	@ #Z!qqtt,,
Aq)):666Aq))2:b:o+F+FGGGB++Z888B++RZJ-G-GHHH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**BJqqttaadd{,C,CDDDB,,bj1!.E.EFFFAr**
11Q44!!A$$;Z#?@@	B 	B 	B 	B 	Brf   c                     g d}t          ||          }d|_        t          j        |          }dD ]=\  }}t	          |                    ||          |                    ||                     >d S )Nr5   r   ))r   )r   r   )r      )r
   rr   r	   r   r   r   )rM   rm   rO   pr   r   s         rP   test_integrate_ppolyz TestBSpline.test_integrate_ppoly  s    OOq!$$"a  5 	1 	1FBAKKB//KKB//1 1 1 1	1 	1rf   c                     t          j        g d          }dD ]C}|                    dd|          }t          |t          j                  sJ |j        dk    sJ Dd S )Nr3   r   r   r)   rq   )r   r   r   
isinstancerF   ndarrayndim)rM   rO   rr   ress       rP   test_integrate_0D_alwaysz$TestBSpline.test_integrate_0D_always  so    !))),,( 	! 	!K++a+<<Cc2:.....8q=====	! 	!rf   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__rz   rf   rP   Br    s        Drf   r  )r   r)   r4   r4   )r   r   	__class__r   r   )rM   r  rO   s      rP   test_subclassingzTestBSpline.test_subclassing  s    	 	 	 	 	 	 	 	 OOLLL)){a||~~'1,,,,!!+q000000rf   axisr   r7   c                    d\  }}t          j        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   r7   r   r   r  r   )r-   r.   r/   r  r4   )rF   r`   r   tuplerL   r   r   r.   r   r  rB   r    rE   r   r   r  )rM   r  rN   r/   r-   shpos_axisr   r.   rO   xpaxb1s                rP   	test_axiszTestBSpline.test_axis  s1   1K1a!eai((YY !8
		(A2YYi##D))JJBJ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$$$$$		% 	%rf   c                 "   d}g d}t          j        g dg dg          }t          |||d          }t          ||d         |          }t          ||d         |          }t           |d	           |d	           |d	          g           d S )
Nr4   )r   r)   r4   r6   r7   r   r   )r2   r4   r   r2   )r4   r   r)   r2   r  r   r)   r=   )rF   arrayr   r   )rM   r/   r-   r.   splspl0spl1s          rP   test_neg_axiszTestBSpline.test_neg_axis  s    !!!Hnnnmmm455aAB'''q!A$""q!A$""C4499dd3ii"899999rf   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   r2   r   r/   bc_typer)   rj   rk   N)rF   rL   r   r   random_sampler
   eyelenr-   r   design_matrixtoarrayr   r.   )
rN   r/   r*  r   rm   r   rv   r.   des_matr_defdes_matr_csrs
             rP   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Crf   r?   r6   clampednaturalr   r4   
not-a-knotr   r   r   N)r   )rM   r2  rN   r/   bcs        rP   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 	6rf   rr   )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   r^   r)   r4   r   N)rF   rL   r   r+  aminamaxr   r`   r,  r-  r   r   r.  r/  r!  rZ   r   rD   )rM   rr   r9  r   rm   xminxmaxr/   r-   r.   bsplines              rP   '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   r^   r6   r(  r   r   r)   r7   rj   rk   )rF   rL   r   r   r+  r
   r   r   r.  r-   r/  r   r.   )rM   r   rN   r/   rm   r   rv   r   xcycr1  s              rP   test_design_matrix_x_shapesz'TestBSpline.test_design_matrix_x_shapes  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rf   c                     g d}t          j        d|d                                          }t          |g dgd           d S )N)r+   r+   r+   r9   r:   r;   r;   r;   r9   r6   )g      ?gmਪ?gK}\UU?r8   rj   rk   )r   r.  r/  r   )rM   r-   des_matrs      rP   test_design_matrix_t_shapesz'TestBSpline.test_design_matrix_t_shapes'  s_    ,,,(Q22::<<;;;<"	$ 	$ 	$ 	$ 	$ 	$rf   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   r^   r6   r(  r   r   r2   r4   )r8   r+   r9   r:   r;         @rp   )rF   rL   r   r   r+  r
   rB   rD   r   r.  r-   )rM   r   rN   r/   rm   r   rv   r-   s           rP   test_design_matrix_assertsz&TestBSpline.test_design_matrix_asserts/  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*  )r5  r4  r   r6  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   r2   r*  r)   rS   rk   )rF   rL   r   r   r   r   from_power_basisr`   r   r
   r.   )	rM   r*  r   rm   r   cbrv   rd   bspl_news	            rP   test_from_power_basisz!TestBSpline.test_from_power_basisA  s     i##D))GCJJrNN##JJrNNj  aDAbEAw///'G<<<[Ar""2Ru5555%aG<<<
777777rf   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   r2   rL  rS   rk   )rF   rL   r   r   r   r   rM  r
   r   r   r   r.   )	rM   r*  r   rm   r   rN  rv   bspl_new_realbspl_new_imags	            rP   test_from_power_basis_complexz)TestBSpline.test_from_power_basis_complexP  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Srf   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]
        r5   )r)   r)   r)   r)   r)   r5  rL  )r+   r)   r)   r)   r)   r)   r)   rS   rk   N)rF   r!  r   rM  r   r   r.   )rM   rm   r   rv   s       rP   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Drf   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writer^   r,   )rF   r!  setflagsr`   r   r   ra   )rM   r-   r.   rd   rO   s        rP   test_read_onlyzTestBSpline.test_read_onlyq  s    HaVHcUOO	


	


[Ar""
%   a1""""r|B//#566666rf   c                 J    t                      }d }t          d||           d S )Nc                 ~    |j         \  }} }t          j        ||         || dz
           d          } ||           d S )Nr)   i'  )rY   rF   r`   )r   rO   r-   r/   rd   s        rP   	worker_fnz/TestBSpline.test_concurrency.<locals>.worker_fn  sA    eGAq!QqT1aRT7E22BAbEEEEErf   r^   )rX   r!   )rM   rO   r^  s      rP   test_concurrencyzTestBSpline.test_concurrency~  s8      !!	 	 	
 	 Iq11111rf   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)   r^   r-   z.datzw+)moderA   r   r.   )rX   rF   r`   	threadingget_native_idmemmapstrjoinr-   rA   r   r.   r   )rM   tmpdirrO   rd   expectedtidt_mmc_mms           rP   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(((((rf   N)2r  r  r  rQ   r\   re   rn   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  rZ   markparametrizer   r  r%  thread_unsafer8  r@  rD  rG  rJ  rP  rT  rV  r[  r_  rl  rz   rf   rP   r'   r'   '   s       ! ! !F
 
 
> > >	? 	? 	?. . ./ / /A A A
; 
; 
;1 1 1. . .E E E&W W W  - - -( ( (P P P$? ? ?F F FG G G4A A AM M M: : :# # #
F F F7 7 7&B &B &BP	1 	1 	1! ! !1 1 1 [VUU2q\\22% % 32%:: : : [(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) ) ) ) )rf   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)r8   r+   r=   r7         @      @c                    t          j        d          }t          j        |          dz  }t          ||d          }t	          ||          }|                    |          }t          |j        |j        d           t          |j        |j        d |j	         dz
           d           ||d         k    r|n	|d d         }t           j
        |d|dd          |d d         z   z  f         }t           ||           ||          d           t          j        |          dz  }t          ||d          }	t          |t           j        ||f         d          }
|
                    |          }t          |j        |j        d           t          |j        t           j        |                    |          j        |	                    |          j        f         d           ||d         k    r|n	|d d         }t           j
        |d|dd          |d d         z   z  f         }t           |
|           ||          d           d S )	Nr   r6   r   rS   rk   r)   r2   r   )rF   rJ   sinr
   r   insert_knotr   r-   r.   r/   r   cosr   )rM   rr  rm   r   r"  spl_1fspl_1rd   y1spl_y1spl_yyspl_yy1s               rP   test_insertzTestInsert.test_insert  sC    IaLLF1IIqL A+++c""%%6666)CE6!8)!45AAAA !B%--QQQssVU2sAabbEAcrcFN++,Br7777 VAYY\#ArQ///#AruQU|q999$$T**	577777	25)>)>)@)/););D)A)A)C*D $EKP	R 	R 	R 	R !B%--QQQssVU2sAabbEAcrcFN++,r

GGBKKe<<<<<<rf   zxval, m))r8   r4   )r+   r6   )r   r   )r7   r4   )rt  r4   c                 .   t          j        d          }t          j        |          dz  }t          ||d          }t	          |||          }|                    ||          }t          |j        |j        d           t          |j        |j        d |j	         dz
           d           ||d         k    r|n	|d d         }t           j
        |d	|dd          |d d         z   z  f         }t           ||           ||          d           d S )
Nr   r6   r   mrS   rk   r)   r2   r   )rF   rJ   rv  r
   r   rw  r   r-   r.   r/   r   )	rM   rr  r  rm   r   r"  ry  rz  rd   s	            rP   test_insert_multizTestInsert.test_insert_multi  s    IaLLF1IIqL A+++cQ'''a((6666)CE6!8)!45AAAA!B%--QQQssVU2sAabbEAcrcFN++,Br777777rf   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  r>   r)   r   r6   r4   )lowhighr   r  r  r   rS   rk   )rF   rL   default_rngr   uniformr   rw  r   )
rM   r   rN   r/   r-   r.   r"  xvrz  rd   s
             rP   test_insert_randomzTestInsert.test_insert_random  s    i##E**1GCKKQqSUK++,,KKaAYK''aA[[QqsV!QBqD'[22##[[QqsV!QBqD'[;;Br777777rf   r  )	r   皙?r9   r;         @      @      @gffffff@rt  c           	      F   t          j        d          }t          j        |          dz  }t          ||d          }t	          |ddi}|                    |          }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   r6   r   rr   r   TperrS   rk   r)   r   r   r   )   r  )rF   rJ   rv  r   r   rw  r   rY   r   r-   r.   rL   r  r  r   )rM   r  rm   r   rY   r"  rz  tfcfr/   rd   s              rP   test_insert_periodiczTestInsert.test_insert_periodic  s    IaLLF1IIqLQQs3
33##2swD111	B%0000!A5QBqD5	>>>>Y""4((00QQR0HHb		5b"a[#9#9FFFFFFrf   rr   Nr   c                    t          j        d          dz  t           j        z  }t          j        |          t          j        |          }}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   r4   r*   r6   r         @rS   rk   )rF   rJ   pirv  rx  r
   rr   rw  r   r-   r.   )rM   rr   rm   y_rey_imr"  spl_respl_imr  rz  spl_1respl_1ims               rP   test_complexzTestInsert.test_complex  s&   IaLLN25 VAYY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Frf   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  r6   r   r)   r4   r6   r7   r   r   r   rq   Tr  )	rF   r!  onesr-  r   rB   rD   r   rw  )rM   r  r/   r-   r.   r"  s         rP   +test_insert_periodic_too_few_internal_knotsz6TestInsert.test_insert_periodic_too_few_internal_knots  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 )	Nr6   r   r)   r  r   r2   r   r  )rF   r!  r  r-  r   rB   rD   rw  )rM   r/   r-   r.   r"  s        rP   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  rZ   rm  rn  r  r  r  r  r  r  r  rz   rf   rP   rq  rq    s-       [V%A%A%ABB= = CB=@ [CCC 8 8 88 8 8 [T $8 $8 $8  G G G []T:,>??G G @?G,     ($ $ $ $ $rf   rq  c            
          dd} dD ]e}t          |          }t          t          |                    D ]6\  }} | ||           t          d|dz             D ]} | |||dd           7fd S )	Nr   rj   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)   r2   zder = z  k = )rU   rV   err_msg)rY   rF   uniquer   r   r   r/   )	rO   r   r   rU   rV   r-   r.   r/   rm   s	            rP   check_splevz,test_knots_multiplicity.<locals>.check_splev6  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rf   r)   r4   r6   r7   r   r   r)   r   )r   rj   rj   )rX   	enumerate_make_multiplesr   )r  r/   rO   r   r  r   s         rP   test_knots_multiplicityr  2  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 6rf   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)   r+   r8   _naive_Brm   r/   r   r-   c1c2s         rP   r  r  I  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rf   c                 6              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           fdt	          ddz             D                       S )z=
    Naive B-spline evaluation. Useful only for testing!
    r)   c              3   Z   K   | ]%}|z
           t          |z
            z  V  &d S Nr  )r~   r   r.   r   r/   r-   rm   s     rP   	<genexpr>z_naive_eval.<locals>.<genexpr>f  sB      FF1q1vAqsA...FFFFFFrf   r   )rF   searchsortedr-  sumr   )rm   r-   r.   r/   r   s   ````@rP   r|   r|   \  s     	AaDyyOAq!!A%Q41!A#66a#a&&1*nnnnFFFFFFFFa1FFFFFFrf   c                     t                    dz   z
  }|dz   k    sJ t                    |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)   c              3   N   K   | ]}|         t          |          z  V   d S r  r  r~   r   r.   r/   r-   rm   s     rP   r  z _naive_eval_2.<locals>.<genexpr>o  s:      ==qqthq!Q***======rf   r-  r  r   rm   r-   r.   r/   rN   s   ```` rP   r   r   i  s    A!A#A!8888q66Q;;;;Q41!=======E!HH======rf   c                 2   t          |          |dz   z
  }||dz   k    sJ t          |          |k    sJ d}t          |          D ]O} t          j        ||||z   dz            d          |           }|||         t	          j        |          z  z  }P|S )Nr)   r8   r4   Frq   )r-  r   r   r   rF   
nan_to_num)rm   r-   r.   r/   rN   sr   rO   s           rP   r   r   r  s    A!A#A!8888q66Q;;;;
A1XX % %@G!!Aac!eG*%@@@CC	QqTBM!$$$$Hrf   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   r4   r)   c                     dS )Nr8   rz   rm   s    rP   <lambda>zB_012.<locals>.<lambda>  s    b rf   c                     | S r  rz   r  s    rP   r  zB_012.<locals>.<lambda>  s    A rf   c                     d| z
  S Nr9   rz   r  s    rP   r  zB_012.<locals>.<lambda>  s
    A rf   )rF   
atleast_1d	piecewiser  s    rP   rl   rl   }  sp    
aA<QUq1u-!VA.!VQ/1 )L++~~FH H Hrf   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)   r4   r   c                     | | z  dz  S r  rz   r  s    rP   r  zB_0123.<locals>.<lambda>  s    1Q3r6 rf   c                     d| dz
  dz  z
  S )Ng      ?r   r4   rz   r  s    rP   r  zB_0123.<locals>.<lambda>  s    41T6A+- rf   c                     d| z
  dz  dz  S )Nr:   r4   rz   r  s    rP   r  zB_0123.<locals>.<lambda>  s    BqD19q= rf   c                     dS Nr+   rz   r  s    rP   r  zB_0123.<locals>.<lambda>      2 rf   c                     dS )Ng       rz   r  s    rP   r  zB_0123.<locals>.<lambda>  s    3 rf   c                     dS r  rz   r  s    rP   r  zB_0123.<locals>.<lambda>  r  rf   znever be here: der=)rF   r  rD   r  )rm   r   condsfuncspiecess        rP   r   r     s    
aAUQUq1u%q1u-E
axx!!--((* 
 4s44555\!UE**FMrf   #   r6   c                     t           j                            d          }t          j        |                    | |z   dz                       }|                    |           }t	          j        |||          S )N{   r)   )rF   rL   r   r   r   construct_fast)rN   r/   r   r-   r.   s        rP   rX   rX     s^    
)


$
$C


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

1A!!Q***rf   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)   r2   )r.   r/   r-   copyr   )rO   r.   r/   t1s       rP   r  r    s      3qA	
B2Br"uIVBrF
"a

	
B!uBt!tH
"a

	
B2Br!tuuI
"a

rf   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  )rF   r`   r  rx  r
   r-   r.   r/   rY   rd   r   rO   xnewr   r   r  r   b2)rM   rd   r   rO   r  s        rP   setup_methodzTestInterop.setup_method  s    [BruHb))VBZZr2&&Cac?#%r1 $&K2be8R00	U13QS=!)RH%%!#tw,,rf   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 )NrS   rT   c                 0    g | ]}t          |          S rz   )r   )r~   rm   rO   s     rP   r   z*TestInterop.test_splev.<locals>.<listcomp>  s!    #>#>#>AE!QKK#>#>#>rf   zCalling splev.. with BSplinematchr)   r   )r  rO   r  r   r   rY   rF   rs   rB   rD   r  r   r.   r  	transposer-   r/   )rM   r  r  r  r   rY   rO   s         @rP   
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   rS   rk   r)   r4   T)full_output)rd   r   r   r   r   r   r   )rM   rm   r   rY   r-   r.   r/   tck_fr   r   rO   s              rP   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,,,,,,rf   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  r6   )	rd   r   rF   r   rB   rD   r   r   rC   )rM   rm   r   y2s       rP   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   r@   r6   r   rS   rk   r   T)r  r  )	rF   rJ   rK   rt   r   r   r   rs   r   )	rM   rm   rO   urY   u1b_fu_fr   s	            rP   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Crf   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   r(  r6   )numr  ) >Ir   >Kr  zInvalid inputs)r)   r6   r4   r7   )r   g333333?g?r)   )	rF   rJ   rt   rB   rD   r   r   r`   rC   )rM   rm   r  s      rP   test_splprep_errorszTestInterop.test_splprep_errors  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   r=   r  r   rT   zCalling sproot.. with BSpliner  ri   )mestr)   r4   r   )r6   r4   r7   r   rk   )rO   r  rF   r!  r  r   r   r-   r.   r/   rB   rD   r  rs   r   r   )rM   rO   r  rootsc2rrrs         rP   test_sprootzTestInterop.test_sproot1  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)   rj   F)rU   check_0dzCalling splint.. with BSpliner  r4   r6   r4   )rU   check_shape)rO   r  r   r   rY   r   rB   rD   r.   r  rF   rs   r-   r/   r   )rM   rO   r  r	  integrs        rP   test_splintzTestInterop.test_splintB  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)   rh   rS   rk   r4   )rO   r  r-  r-   r.   r  rF   r   zerosr   r   r   r/   r   r  r   r  rM   rO   ctb_crN   bdtck_ds          rP   test_splderzTestInterop.test_splderV  s?   &$'" 	0 	0AQSCHH$B#((**CAvveC2%#)ABB-*?!@!@@A 0 0AYYachhjj#qs%;<<eAhU;;;;eAhU;;;;tuQx''''!"g.....!%//////0	0 	0rf   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  )rO   r  r-  r-   r.   r  rF   r   r  r   r   r   r/   r   r  r   r  r  s          rP   test_splantiderzTestInterop.test_splantiderg  s@   &$'" 	0 	0AQSCHH$B#((**CAvveC2%#)ABB-*?!@!@@A 0 0]](!#((**c13)?@@eAhU;;;;eAhU;;;;tuQx''''!"g.....!%//////0	0 	0rf   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 )Nr4   r   r)   rS   rk   r  r   )rO   r  rd   r-   r   r   r.   r/   r   r   r  r   r  r   r  r  rF   rs   )rM   rO   r  rd   r   tnbntck_nr  r   tck_n2bn2s               rP   r  zTestInterop.test_insertx  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'''''&%(((((((rf   N)r  r  r  r  r  r  r  r  r  r  r  r  r  r  rz   rf   rP   r  r    s        - - -H H H6- - -0' ' ' D D D% % %:C C C"H H H(0 0 0"0 0 0") ) ) ) )rf   r  c                      e Zd Z ej        ddej        z            Z ej        e          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 )+
TestInterpr8   r9   c                     t          t                    5  t          | j        | j        d           d d d            d S # 1 swxY w Y   d S )Nr=   r   )rB   rC   r
   rd   r   rM   s    rP   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          | j        | j        d          }t           || j                  | j        dd           t          | j        | j        dd          }t           || j                  | j        dd           d S )Nr   r   rj   rT   r2   r/   r  r
   rd   r   r   r   s     rP   test_order_0zTestInterp.test_order_0      tw1555$'

DG%eDDDDtw12>>>$'

DG%eDDDDDDrf   c                    t          | j        | j        d          }t           || j                  | j        dd           t          | j        | j        dd          }t           || j                  | j        dd           d S )Nr)   r   rj   rT   r2   r)  r*  r   s     rP   test_linearzTestInterp.test_linear  r,  rf   r/   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)   r4   r6   r7   r   )r   r)   r4   r6   r7   r   r   r   zShapes of xr  r   rB   rD   r
   rM   r/   rm   r   s       rP   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)   r4   r6   r7   r0  zx to not have duplicatesr  r   )r   r4   r)   r6   r7   r   zExpect x to be a 1D strictly)r)   r2   )rB   rD   r
   rF   rs   rt   r2  s       rP   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 ]C}t          | j        | j        |          }t           || j                  | j        dd           Dd S )Nr4   r6   r7   r   r   r   rj   rT   r*  )rM   r/   rO   s      rP   test_not_a_knotzTestInterp.test_not_a_knot  sZ    # 	I 	IA"47DGQ77AAAdgJJe%HHHHH	I 	Irf   c                 X   t          | j        | j        dd          }t           || j                  | j        dd           t	          dd          D ]@}t           || j        d         |           || j        d	         |          d
           At          | j        | j        ddd	          }t           || j                  | j        dd           t	          dd          D ]@}t           || j        d         |           || j        d	         |          d
           Ad S )Nr   r   r)  rj   rT   r)   r   r   r2   dy=rk   r/   r*  r  )r
   rd   r   r   r   )rM   rO   r   s      rP   test_periodiczTestInterp.test_periodic  sB   tw1jIII$'

DG%eDDDD q! 	S 	SAAAdgajQ///472;11E1E1EERRRRRtw1jrRRR$'

DG%eDDDDq! 	S 	SAAAdgajQ///472;11E1E1EERRRRR	S 	Srf   r7  c                 >   d}t           j                            d          }t          j        |                    |          dz            }|                    |          dz  }|d         |d<   t          |||d          }t           ||          |d	
           d S )Nr   r   r^   r   r2   r   r   r)  rj   rk   )rF   rL   r   r   r+  r
   r   )rM   r/   rN   r   rm   r   rO   s          rP   test_periodic_randomzTestInterp.test_periodic_random  s     i##D))GC%%a((2-..a  3&u!q!q*===!ae,,,,,,rf   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   r4   r8   r2   r)   r   r   r;  rj   rk   )rd   r   rF   rL   r   r+  r  r   r  rv  rx  r
   r   r   )rM   rN   r   rm   r   rO   r   s          rP   test_periodic_axiszTestInterp.test_periodic_axis  s.   GM!i##D))a  1$ru,GAJJ!BE	"HaVvayy!vayy!q!q*1EEEq 	: 	:AAAadGGQqqq!tW599999!A$1R5666666rf   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   r2   r)   r   r   r)  )rF   rL   r   r   r+  rB   rD   r
   )rM   r   r/   rN   rm   r   s         rP   test_periodic_points_exceptionz)TestInterp.test_periodic_points_exception  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   r6   r   r4   r   )	rF   rL   r   r   r+  r  rB   rD   r
   )rM   r   r/   rN   rm   r   r-   s          rP   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   r)  T)r  r/   rj   rk   r)   r   r   r   )r
   rd   r   r   r   r   r   )rM   r/   rO   rY   r"  r   s         rP   test_periodic_splevzTestInterp.test_periodic_splev  s     tw1jIIITWdg41555DGS!!QQtwZZe4444 q! 	? 	?A!,,,CC47q!1!1!1>>>>>	? 	?rf   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 )Nr6   r   r)  rL  rj   rk   r   r^   r   r2   r   )
r
   rd   r   r   r   rF   rL   r   r   r+  )rM   rO   cubr   rN   rm   r   s          rP   test_periodic_cubiczTestInterp.test_periodic_cubic  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1rf   c                 :   dt          | j        | j        d          }t          | j                  t	          | j        | j                  t          j        fd          }t           || j                   || j                  d           d S )Nr6   r   r)  c                 (    t          |           S r  r{   )rm   r.   r/   r-   s    rP   r  z6TestInterp.test_periodic_full_matrix.<locals>.<lambda>(  s    K1a$;$; rf   rj   rk   )r
   rd   r   r   r   rF   	vectorizer   )rM   rO   r  r.   r/   r-   s      @@@rP   test_periodic_full_matrixz$TestInterp.test_periodic_full_matrix!  s     tw1jIIIDGQ''&twA>>\;;;;;;<<$'

BBtwKKe<<<<<<rf   c                    dg}t          | j        | j        dd |f          }t           || j                  | j        dd           t           || j        d         d          |d         d         ddd	
           t          | j        | j        d|d f          }t           || j                  | j        dd           t           || j        d         d          |d         d         ddd	
           d S )Nr)   g       @r4   r)  rj   rT   r2   r)   r   FrU   rV   r  r*  )rM   r   rO   s      rP   test_quadratic_derivzTestInterp.test_quadratic_deriv+  s   i tw1tSkJJJ$'

DG%eDDDDAdgbk1s1vayu55	
 	
 	
 	

 tw1sDkJJJ$'

DG%eDDDDAdgaj!c!fQie%%	
 	
 	
 	
 	
 	
rf   c           	      0   d}dgdg}}t          | j        | j        |||f          }t           || j                  | j        dd           t          t	          j         || j        d         d           || j        d	         d          g          t	          j        |d         d         |d         d         g          dd           d
gd
g}}t          | j        | j        |||f          }t           || j                  | j        dd           d S )Nr6   r)   r:   )r)   r;   rL  rj   rT   r   r)   r2   r4   r   )r
   rd   r   r   rF   rs   )rM   r/   der_lder_rrO   s        rP   test_cubic_derivzTestInterp.test_cubic_deriv<  s$     y7)utwUENKKK$'

DG%eDDDD
AAdgaj!$4$4aaQ6G6G#HII
E!HQKq!#=>>UQV	X 	X 	X 	X x&utwUENKKK$'

DG%eDDDDDDrf   c           	         d\  }}t          j        |                              t           j                  }t          j        |          }ddg}ddg}t          |||||f          }t           ||          |dd           t          t          j         ||d	         d
           ||d	         d          g          t          j        d |D                                  t          t          j         ||d         d
           ||d         d          g          t          j        d |D                                  d S )N)r   r   )r)   g      ()r4   r)   rO  )r4   r:   r)  rj   rT   r   r)   r4   c                     g | ]\  }}|S rz   rz   r~   r   vals      rP   r   z2TestInterp.test_quintic_derivs.<locals>.<listcomp>T      #?#?#?IRC#?#?#?rf   r2   c                     g | ]\  }}|S rz   rz   rZ  s      rP   r   z2TestInterp.test_quintic_derivs.<locals>.<listcomp>V  r\  rf   )rF   rJ   astyperK   rv  r
   r   rs   )rM   r/   rN   rm   r   rU  rV  rO   s           rP   test_quintic_derivszTestInterp.test_quintic_derivsK  sJ   1IaLL
++F1IIF#'"q!q5%.AAA!ae%8888
AAadAJJ!A$

#;<<
#?#?#?#?#?@@	B 	B 	B
AAaeQKK1R5!#=>>
#?#?#?#?#?@@	B 	B 	B 	B 	Brf   unstable)reasonc                     d}t          | j        |          }ddg}t          | j        | j        |||d f          }t	           || j                  | j        dd           d S )Nr6   rS  )r4   r;   rL  rj   rT   )r   rd   r
   r   r   )rM   r/   r-   rU  rO   s        rP   test_cubic_deriv_unstablez$TestInterp.test_cubic_deriv_unstableX  sm     DGQ'"twAt}MMM$'

DG%eDDDDDDrf   c                 0   d}t           j        | j        d         f|dz   z  | j        dd          | j        d d         z   dz  | j        d         f|dz   z  f         }t          | j        | j        ||dgdgf          }t           || j                  | j        dd	           t           || j        d         d          t          j        d
          d           t           || j        d         d          t          j        d
          d           d S )Nr4   r   r)   r2   r9   rT  rL  rj   rT   r8   rk   )rF   r   rd   r
   r   r   rs   )rM   r/   r-   rO   s       rP   test_knots_not_data_sitesz$TestInterp.test_knots_not_data_sitesg  s    E471:-1%7122;"-372;.!A#&' ( twA)/6(';= = = 	$'

DG%eDDDD$'!*a(("*S//FFFF$'"+q))2:c??GGGGGGrf   c                     d}ddg}ddg}t          |||dgdgf          }t          j        dd          }|dz  }t           ||          |dd           d S )	Nr6   r8   r+   r)   r8   rS  rL  rj   rT   )r
   rF   r`   r   )rM   r/   rm   r   rO   rd   r   s          rP   test_minimum_points_and_derivz(TestInterp.test_minimum_points_and_derivv  sy     HHq!Q'WI0FGGG[R  U"rE::::::rf   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)r+   r4   r6   r7   r   r   rg  rL  *   )rg  rg  r1  rM   rm   r   lrs        rP   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                 Z   t          j        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   r4   )r   r   r)   r   zBad boundary conditions at 0.r  rL  )ir   zBad boundary conditions at 6.)rF   rJ   rB   rD   r
   rk  s        rP   test_deriv_order_too_largez%TestInterp.test_deriv_order_too_large  sG   IaLL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}| j         }| j        d| j        z  z   }dgdg}}t          |||||f          }t           ||          |dd           t           ||d         d	          |d         d	         ddd
           t           ||d         d	          |d         d	         ddd
           dD ]0}t          |||          }t           ||          |dd           1d S )Nr6   r*   )r)   y              @)r)   y      @       @rL  rj   rT   r   r)   FrP  r2   )r   r)   r   )rd   r   r
   r   )rM   r/   rd   r   rU  rV  rO   s          rP   r  zTestInterp.test_complex  s+   WWs47{" !zK=ur2q5%.AAA"rE::::AbeQKKq!5uu	
 	
 	
 	
 	AbfaLL%(1+E	
 	
 	
 	

  	? 	?A"2rQ///AAAbEE2E>>>>>	? 	?rf   c                     t          j        d                              t                    }t          j        d                              t                    }dD ]}t	          |||          } ||            d S )Nr^   r   r   )rF   rJ   r^  intr
   )rM   rm   r   r/   rO   s        rP   test_int_xyzTestInterp.test_int_xy  sv    IbMM  %%IbMM  %%  	 	A"1a1---AAaDDDD	 	rf   c                     t          j        ddd          }|d d d         }|d d d         }dD ]}t          |||           d S )Nr2   r)   r   r   r   r   )rF   r`   r
   )rM   rd   rm   r   r/   s        rP   test_sliced_inputzTestInterp.test_sliced_input  sd    [Q$$sssGsssG 	* 	*Aq!q)))))	* 	*rf   c                     t          j        d                              t                    }|dz  }t           j        t           j        t           j         fD ]#}||d<   t          t          t          ||           $d S )Nr^   r4   r2   )	rF   rJ   r^  floatrH   rI   rB   rD   r
   rM   rm   r   zs       rP   test_check_finitezTestInterp.test_check_finite  ss    IbMM  ''qD&"&26'* 	@ 	@AAbE*&8!Q????	@ 	@rf   )r)   r4   r6   r   c                 z    t          t          d                    }d |D             }t          |||           d S )Nr^   c                     g | ]}|d z  S )r4   rz   )r~   as     rP   r   z.TestInterp.test_list_input.<locals>.<listcomp>  s    aQTrf   r   )listr   r
   r2  s       rP   test_list_inputzTestInterp.test_list_input  sC     rOO11a1%%%%%%rf   c                    t           j        t          j        | j                  t          j        | j                  f         }dddgfg}dddgfg}t          | j        |d||f          }t           || j                  |dd	           t           || j        d
         d          |d
         d         dd	           t           || j        d         d          |d
         d         dd	           d S )Nr)   r+   r9   r:   r;   r6   r)  rj   rT   r   r2   )rF   r   rv  rd   rx  r
   r   )rM   r   rU  rV  rO   s        rP   test_multiple_rhszTestInterp.test_multiple_rhs  s    U26$'??BF47OO34b"Xb"Xtwa%HHH$'

BU????$'!*a((%(1+ENNNN$'"+q))58A;UOOOOOOrf   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   r6   r   r   r   r   r   r)   r   r   r   rL  )rF   rL   r   r   r
   r.   r   )	rM   r   r/   rN   rm   r   rO   d_ld_rs	            rP   test_shapeszTestInterp.test_shapes  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0rf   c                 "   t          j        | j                  }t          | j        |dd          }t          | j        |ddgdgf          }t	          |j        |j        d           t          | j        |dd          }t          | j        |ddgdgf          }t	          |j        |j        d           t          | j        |d	d
          }t          | j        |d	d dgf          }t	          |j        |j        d           t          | j        |dd          }t          | j        |dd           }t	          |j        |j        d           t          t                    5  t          | j        |dd           d d d            n# 1 swxY w Y   t           j        t          j        | j                  t          j	        | j                  f         }dddgfg}d	ddgfg}t          | j        |d||f          }t          | j        |dd          }t	          |j        |j        d           t           j
                            d          }d\  }}t          j        |
                    |                    }	|
                    |dddf          }
dt          j        d          fg}dt          j        d          fg}t          |	|
|||f          }t          |	|
|d          }t	          |j        |j        d           d S )Nr6   r5  r)  rT  rS   rk   )r5  r4  rp  r4   )Nr4  rg  r6  typor)   r8   r3  r   r  r   r   r   r   r  rL  r4  )rF   rv  rd   r
   r   r.   rB   rD   r   rx  rL   r   r   r  )rM   r   r  r  rU  rV  r   r/   rN   rm   r   r  r  s                rP   test_string_aliaseszTestInterp.test_string_aliases  sj   VDG__  q)DDDqF8fX:NOOObd////  q(>@ @ @q*0F8(<> > >bd////  q:KLLLq4(:LMMMbd////  q,GGGq$???bd//// :&& 	A 	Atwa@@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A U26$'??BF47OO34b"Xb"Xq5%.IIIq(>@ @ @bd//// i##D))1GCJJAJ&&''JJQ1aLJ)) 28I&&'(28I&&'(1a#s<<<1a;;;bd//////s   )FFFc                 b   t           j                            d          }d\  }}t          j        |                    |                    }|                    |          }t	          ||          }t          ||||          }t          ||||          }t          |j        |dd           d S )Nr   )r6   r   r   rj   rT   )	rF   rL   r   r   r   r
   make_interp_full_matrr   r.   )	rM   r   r/   rN   rm   r   r-   rO   r  s	            rP   test_full_matrixzTestInterp.test_full_matrix+  s    i##D))1GCJJAJ&&''JJAJ1q!Q**"1aA..Re%888888rf   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      r6       r4   r)   Nr2   r   )offsetrj   rk   )rF   rL   r   r   rt  diagflatr  r  diagonalr   r   linalgsolve)rM   r   rN   r/   r  r  r   urlldr   rO   s               rP   test_woodburyzTestInterp.test_woodbury6  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? ? ? ? ?#	? 	?rf   N)-r  r  r  rF   r`   r  rd   rv  r   r'  r+  r.  rZ   rm  rn  r3  r5  r8  r<  r>  r@  rB  rD  rF  rI  rM  rQ  rW  r_  xfailrc  re  rh  rn  rq  r  ru  rw  r|  r  r  r  r  r  r  rz   rf   rP   r$  r$    s        
RBE	"	"B	B8 8 8E E EE E E [S,,,//* * 0/* [S,,,//* * 0/*I I I
S S S [S"4"4"455- - 65-7 7 7	> 	> 	>	7 	7 	7 [S,,,//
? 
? 0/
?2 2 2 = = =
 
 
"E E EB B B [j))E E *)EH H H
; 
; 
;5 5 5.5 5 5? ? ?*  * * *@ @ @ [S,,,//& & 0/&P P P1 1 110 10 10f	9 	9 	9? ? ? ? ?rf   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)   r@   )
r   rF   r  rK   r   r  r%   evaluate_all_bsplslr  )rm   r   r-   r/   rN   Ar   rr  leftbbr.   s              rP   r  r  S  s     6QV6QVaZ!^####	A
!Qrz***A1XX 	! 	!t1Q4<<DD?1d++a/D '1dD99 !T!VDF]

AAHrf   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)   r@   )maprF   rs   r   r  rK   r   r  r%   r  dotTr  r  )rm   r   r-   r/   r  rN   r  r   rr  r  r  r  Yr.   s                 rP   make_lsq_full_matrixr  o  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rf   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  r6   r   r2   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)   r2   )rcond)rm   r   r-   r/   r  r   r   r.   r   r   rF   r  lstsq)rM   r  rm   r   r-   r/   c0AYrO   aar   r  r   s                rP   
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     rf   c                 R   | j         | j        | j        | j        f\  }}}}t	          j        |          }t          |||||          }t          ||||||          }t          |j        |j        d           t          |j        |j        d           |j        |j        k    sJ d S )Nr  wr  rj   rk   )	rm   r   r-   r/   rF   ra   r   r   r.   )	rM   r  rm   r   r-   r/   r  rO   b_ws	            rP   test_weightszTestLSQ.test_weights  s     VTVTVTV3
1aLOOAq!Qv666aAqAf===SU////SU////sce||||||rf   c                    | j         | j        | j        | j        f\  }}}}t          j                            d                              |j        d                   }t          |||||d          }t          |||||d          }t          ||||d          }t          |j        |j        d	           t	          j        |j        |j        d	          rJ d S )
Nr   r   r   r  r  r  r  rj   rk   )rm   r   r-   r/   rF   rL   r  r  r   r   r   r.   r   )	rM   rm   r   r-   r/   r  b_neb_qrb_no_ws	            rP   test_weights_samezTestLSQ.test_weights_same  s    VTVTVTV3
1aI!!$''//QWQZ/@@q!QQyAAAq!QQt<<< Aq!D999U3333;vxe<<<<<<<<rf   c                     | j         | j        | j        | j        f\  }}}}t          j                            d          }|                    |dddf          }t          |||||          }|j        j	        |j
        |z
  dz
  dddfk    sJ d S )Nr   r   r   r   r   r  r)   )rm   r-   r/   rN   rF   rL   r   r   r.   r   r   )	rM   r  rm   r-   r/   rN   r   r   rO   s	            rP   r  zTestLSQ.test_multiple_rhs  s    VTVTVTV3
1ai##D))JJQ1aLJ))Aq!Qv666syQVAXaZAq1111111rf   c                   	
 | j         | j        | j        | j        f\  
	}d}t          j                            d          }|                    ||f          t          
	          }	
fdt          |          D             t	          j	        fdt          |          D                       j
        }t          ||j        d           d S )	Nr6   r   r   r  c           	      L    g | ] }t          d d |f                   !S )Nr  )r   )r~   r   r/   r  r-   rm   r   s     rP   r   z/TestLSQ.test_multiple_rhs_2.<locals>.<listcomp>  sH     $ $ $ a111a4!Qv>>> $ $ $rf   c                 *    g | ]}|         j         S rz   )r.   )r~   r   r  s     rP   r   z/TestLSQ.test_multiple_rhs_2.<locals>.<listcomp>  s    888q2a57888rf   rS   rk   )rm   r-   r/   rN   rF   rL   r   r   r   vstackr  r   r.   )rM   r  rN   nrhsr   rO   coefsr  r/   r-   rm   r   s    `     @@@@@rP   test_multiple_rhs_2zTestLSQ.test_multiple_rhs_2  s    VTVTVTV3
1ai##D))JJQIJ&&Aq!Qv666$ $ $ $ $ $ $ $T{{$ $ $	8888E$KK88899;qs//////rf   c                    | j         | j        | j        | j        f\  }}}}d}t          j                            ||f          }t          ||||d          }t          ||||d          }t          |j        |j        d           d S )Nr6   r   r  r  r  rS   rk   )	rm   r-   r/   rN   rF   rL   r   r   r.   )	rM   rm   r-   r/   rN   r  r   r  b_neqs	            rP   test_multiple_rhs_3zTestLSQ.test_multiple_rhs_3  s    VTVTVTV3
1aI1d),,q!Q$7771a9===e444444rf   c                 8   | j         | j        | j        }}}| j        dz  }t	          |||||          }t	          ||j        |||          }t	          ||j        |||          }t           ||           ||          d ||          z  z   dd           d S )N      ?       @r  r*   rS   rT   )rm   r-   r/   r   r   r   r   r   )	rM   r  rm   r-   r/   rC  rO   r   r   s	            rP   r  zTestLSQ.test_complex  s     &$&$&a1Vx Ar1a777q"'1a???q"'1a???!dd1ggDDGG3%eLLLLLLrf   c                 t   | j         | j        | j        }}}| j        dz  }t	          j        ||fd          }t          ||||          }t          ||j        ||          }t          ||j        ||          }t           ||           ||          d ||          z  z   dd           t	          j        ||fd          }t          ||||          }t          ||j        ||          }t          ||j        ||          }t           ||           ||          d ||          z  z   dd           d S )Nr  r)   r  r*   rS   rT   )
rm   r-   r/   r   rF   stackr   r   r   r   )rM   rm   r-   r/   rC  rO   r   r   s           rP   test_complex_2zTestLSQ.test_complex_2  sE    &$&$&a1Vx Xr2hQ'''Ar1a((q"'1a00q"'1a00!dd1ggDDGG3%eLLLL Xr2hQ'''Ar1a((q"'1a00q"'1a00!dd1ggDDGG3%eLLLLLLrf   c                     t          j        d                              t                    }t          j        d                              t                    }t	          |d          }t          |||d|           d S )Nr^   r)   r   r/   r  )rF   rJ   r^  rt  r   r   rM   r  rm   r   r-   s        rP   ru  zTestLSQ.test_int_xy   sf    IbMM  %%IbMM  %%AOOO1a1V444444rf   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 )
Nr^   r@   r)   r   r  r2   r9   rS   rk   )rF   rJ   float32r   r   r^  ry  r   )rM   r  rm   r   r-   spl_f32spl_f64x2s           rP   test_f32_xyzTestLSQ.test_f32_xy  s    Ib
+++Ib
+++AOOO!!QQv>>>!HHUOOQXXe__ahhuoo6
 
 
 eafn#WWR[[u======rf   c                     t          j        ddd          }|d d d         }|d d d         }t          |d          }t          |||d|           d S )Nr2   r)   r   r6   r  )rF   r`   r   r   )rM   r  rd   rm   r   r-   s         rP   rw  zTestLSQ.test_sliced_input  sa     [Q$$sssGsssGAqMM1a1V444444rf   c           	         t          j        d                              t                    }|dz  }t	          |d          }t           j        t           j        t           j         fD ]&}||d<   t          t          t          ||||           'd S )N   r4   r6   r2   r  )
rF   rJ   r^  ry  r   rH   rI   rB   rD   r   )rM   r  rm   r   r-   r{  s         rP   test_checkfinitezTestLSQ.test_checkfinite  s     IbMM  ''qDAqMM&"&26'* 	O 	OAAbE*oq!QvNNNNN	O 	Orf   c                     | j         | j        | j        }}}|                    d           |                    d           |                    d           t	          ||||           d S )NFrX  )rm   r   r-   r  )rm   r   r-   rZ  r   r  s        rP   r[  zTestLSQ.test_read_only*  sp     &$&$&a1	


	


	


!qAf555555rf   r/   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   r2   r   r  r  r  r)   r9   rS   rk   )rm   r   r   rF   r`   r   r   )rM   r/   rm   r   r-   spl_norm_eqspl_qrrd   s           rP   test_qr_vs_norm_eqzTestLSQ.test_qr_vs_norm_eq3  s     vtv1BK!aeQ//33%aA9EEE AqAd;;;eafn#B%@@@@@@rf   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 )
Nr4   r6   r  r  r)   r2   r9   rS   rk   )rF   repeatrm   r   r   r-   r   )rM   rm   r   rz  spl_2rd   s         rP   test_duplicateszTestLSQ.test_duplicates>  s    Idfa  Idfa  !DIII1df$???eafn#b		55995999999rf   N)$r  r  r  rF   rL   r   r   rN   r/   r   rm   r   r   r`   r-   parametrize_lsq_methodsr  r  r  r  r  r  r  r  ru  r  rw  r  r[  rZ   rm  rn  r  r   r  r  rz   rf   rP   r  r    s'        )


%
%CDAq

1A

1AAaD!B%++Q//A! ! ! 
 
 

= 
= 
= 2 2 2 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: : : : :rf   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 )Nr4   r)   r   )r  r  ncr  r   )rM   r  r  r  s       rP   __init__zPackedMatrix.__init__R  s\    v{{{{{awqzV\!_,,,,,,rf   c                 4    | j         j        d         | j        fS )Nr   )r  r   r  r&  s    rP   r   zPackedMatrix.shape[  s    v|A''rf   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   )rF   r  r   r  r   minr  r  )rM   outnelemr   nels        rP   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
rf   N)r  r  r  __doc__r  propertyr   r  rz   rf   rP   r  r  I  sW         - - - ( ( X(    rf   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)   r8   r2   r@   )scipy.linalg.lapackr  r  r  r  r   r  r   r  fprotar  r  rF   r!  int64)a_pr   startrowr  r  r  r  r  nzRr{  r   oir   r.   r  rm  rl  offsR_ps                       rP   _qr_reduce_pyr  h  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7Nrf   c                 8    | |z  ||z  z   }| |z  | |z  z   }||fS )zLGivens rotate [a, b].

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

    rz   )r.   r  r  rO   r  r  s         rP   r  r    s1     A#!)B
A!Br6Mrf   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)   .r4   r2   r  )r  r   r  rF   r   r   r  r  )
r   r   r  r   r  r  r.   r   r  summs
             rP   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&		Hrf   c                   ,    e 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 )Nr6   r@   r)   )rF   rJ   ry  r   )rM   rN   r/   rm   r   r-   s         rP   _get_xytzTestGivensQR._get_xyt  sM    Iau%%%qD1ac7N1!Qzrf   c                 Z   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#          ||d d df         d           d S )	Nr^   r   r)   r@   rS   rk   gvIh%L=-a=)r	  r   r.  r  r  r  r  r   indicesrF   ascontiguousarrayr  datart   r  r%   	qr_reducer   minimumr   absr  r  r  r  )rM   rN   rm   r   r-   r/   a_csrqrm  qTyr  r  r  r  r  y_c_fullc_bandeds                     rP   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!!?13b11AU;;;;;;rf   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 )	Nr^   r   r)   r@   rS   rk   F)check_dtype)r	  r   r.  r   r  rF   r  r  r  rt   r  r  r%   r  r   r  r   r  r  )rM   rN   rm   r   r-   r/   r  r  r  r  r  r  r  RRr   s                  rP   test_py_vs_compiledz TestGivensQR.test_py_vs_compiled  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++++++rf   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 )Nr^   r)   r@   r   rS   rk   )r	  rF   rJ   ry  r%   data_matrixr   r   r.  tocsrr  rt   r  r^  r  r   r   )rM   rN   rm   r   r-   r/   r  r  r  r  r  r  a_wA_offset_s                  rP   test_data_matrixzTestGivensQR.test_data_matrix  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'''''''rf   c                    d}|                      |          \  }}}}t          j        ||dz  f         }t          j        |||t          j        |                    \  }}}t          |||          }	t          j        ||||           t          |	|          }
t          j        |||          }t          ||
d           d S )Nr^   r4   rj   rk   )
r	  rF   r   r%   r  ra   r  r  r  r   )rM   rN   rm   r   r-   r/   r  r  r  r  r.   r   s               rP   test_fpbackzTestGivensQR.test_fpback  s    ]]1%%
1aE!QT'N ,Q1bl1ooFF62FB''1fb!,,,1aLL_QA&&AE******rf   N)r  r  r  r	  r  r  r#  r%  rz   rf   rP   r  r    s`          !< !< !<F, , ,6( ( ("+ + + + +rf   r  c                     t           j                            t           j                            t           j                            t
                              d|           S )Nr  )ospathrf  abspathdirname__file__)basenames    rP   	data_filer-    s=    7<<(A(ABB* * *rf   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   r7   r4   r6   r8   r   r)   r2   r   z)``x`` and ``y`` length must be at least 5r  )rF   rL   r   r   r+  rv  normalrB   rD   r   rt   r  rJ   r  rZ   r   )rM   r   rN   rm   r   x_duplexception_messages          rP   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.npzrm   r   y_GCVSPLNg-C6?F)rU   rV   r  )rF   loadr-  r   r   )rM   r  rm   r   r6  y_comprs         rP   test_compare_with_GCVSPLz,TestSmoothingSpline.test_compare_with_GCVSPLC  s    R WY|,,-- 	(S	AS	AJ'H	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( .'1--a00 	4USSSSSSs   AAAc                    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	
          }t          j	        |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   r7   r4   r6   r8   r   )lamr5  rL  r   r2   rS   rk   N)rF   rL   r   r   r+  rv  r1  r   r
   r`   r   )rM   r   rN   rm   r   
spline_GCVspline_interpgrids           rP   test_non_regularized_casez-TestSmoothingSpline.test_non_regularized_case{  s    i##D))GC%%a((1,q011qD26!a%== 1a4'#**Ra*@*@@*1aR888
*1aIFFF{1Q42A..

4((%d++"	$ 	$ 	$ 	$ 	$ 	$rf   r4   c                    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          d          d	          D ]}t          j
        |          }d
||<   t          |||          }t           |||                   ||         z
            }	t           |||                   ||         z
            }
|	|
k     rt          d|	dd|
d          d S )Nr   r   r7   r4   r6   r8   r   r^   r   g      >@zJSpline with weights should be closer to the points than the original one: z.4z < )rF   rL   r   r   r+  rv  r1  r   choicer   r  r  rD   )rM   r   rN   rm   r   r"  indr  spl_worigweighteds              rP   test_weighted_smoothing_splinez2TestSmoothingSpline.test_weighted_smoothing_spline  so    i##D))GC%%a((1,q011qD26!a%== 1a4'#**Ra*@*@@#Aq)) ::eCjjr:22 	3 	3C

AAcF)!Q22E ss1S6{{QsV+,,D553==1S6122Hh  "2CG!O"2 "2$,!1"2 "2 3 3 3 	3 	3rf   N)
r  r  r  r4  r9  r?  rZ   rm  	fail_slowrF  rz   rf   rP   r/  r/     sq        ( ( (>6T 6T 6Tp$ $ $& [13 3 3 3 3rf   r/  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iyr.   r/   nytxtyrm   r   s
      rP   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 7rf   )r-  r  r   rF   rs   )r   r-   r.   r/   nxr	  rL  rM  rN  rm   r   s     ``  @@@@@rP   bspline2rP    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??rf   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)   r+   r8   r  r  s         rP   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7Nrf   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  rR  r  s     rP   r  zbspline.<locals>.<genexpr>  s8      66qta1amm#666666rf   r  r  s   ```` rP   r?  r?    sj    A
QA1HH3q66Q;;;;6666666U1XX666666rf   c                       e Zd ZddZd ZdS )
NdBSpline0r6   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     rP   r  z&NdBSpline0.__init__.<locals>.<genexpr>  s,      66bx~b))666666rf   c              3   L   K   | ]}t          j        |t                     V   dS )r@   N)rF   rs   ry  )r~   tis     rP   r  z&NdBSpline0.__init__.<locals>.<genexpr>  s1      ??rrz"E222??????rf   N)r-  r   rC   r  r/   r-   r.   )rM   r-   r.   r/   r  s        rP   r  zNdBSpline0.__init__  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   r/   )r~   r  r   rM   s     rP   r   z'NdBSpline0.__call__.<locals>.<listcomp>	  s:    HHHqqtdfQi'122HHHrf   c           	      x    g | ]6}t          |         j        |         |         j        |                   7S rz   )r  r/   r-   )r~   r  idxrM   rm   s     rP   r   z'NdBSpline0.__call__.<locals>.<listcomp>	  sQ     *@ *@ *@./ +,AaD$&)SVTVAY*O*O *@ *@ *@rf   )r-  r-   r   r/   rF   r  r  	itertoolsproductr.   prodrs   )rM   rm   r  r  tdxdr/   resultiterstermr   rc  s   ``        @@rP   __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&!!!rf   Nr6   )r  r  r  r  rl  rz   rf   rP   rV  rV    s7           8" " " " "rf   rV  c                      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 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ej        j        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  r>   r   r)   r   r  rj   rk   r   )	rF   rL   r  r   r  r   r   r   r   )
rM   r   rN   r/   n_trr-   r.   rO   nbxis
             rP   test_1DzTestNdBSpline.test_1D	  s   i##E**1GCKKQUQYK//00KKaYK''Aq!tQ""[[b[!!2aaag;"E	+ 	+ 	+ 	+r"QQQW+$!agaj(AAAAAAArf   c                     t          j        d          }|dz  }t          ||d          }|dz  d|z  z   }t          ||d          }|j        |j        f}|j        d d d f         |j        d d d f         z  }||dfS )Nr   r6   r   r4   rF   rJ   r
   r-   r.   rM   rm   r   r"  y_1rz  t2r  s           rP   make_2d_casezTestNdBSpline.make_2d_case	  s    IaLLqD A+++dQqSj"1cQ///eUWU111d7^egdAAAg..2qyrf   c                 B   t          j        d          }|dz  }t          ||d          }t          j        d          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   r6   r   r   r   r4   )rF   rJ   r
   r-   r.   r/   rw  s           rP   make_2d_mixedzTestNdBSpline.make_2d_mixed*	  s    IaLLqD A+++IaLL3dQqSj"1cQ///eUWU111d7^egdAAAg..2sueg%%rf   c                   	
 g d}|                                  \  
	d |D             }t          t          j        	
fd|D                       t          j        |          dd           t	          
d          } ||          j        t          |          fk    sJ t           ||          |d	           t          j                            d
          }|	                    d          dz  } ||          }|j        dk    sJ |
                    d          j        \  }}t          |                                |dz  |dz  d|z  z   z  d	           d S )Nr   r=   )r=   r)   )r   r   c                 6    g | ]\  }}|d z  |d z  d|z  z   z  S r  rz   r~   rm   r   s      rP   r   z3TestNdBSpline.test_2D_separable.<locals>.<listcomp><	  1    777&1a!Q$!Q$1*%777rf   c                 4    g | ]}t          |          S rz   rP  )r~   r   r  r/   ry  s     rP   r   z3TestNdBSpline.test_2D_separable.<locals>.<listcomp>?	  s'    #I#I#IHRR$;$;#I#I#Irf   Frj   r  rU   r6   r   rk   r  )r7   r6   r4   r   r   )r7   r6   )r2   r4   r4   )rz  r   rF   rs   r   r   r-  rL   r  r  rt   r  ravel)rM   rs  targetbspl2r   ri  rm   r   r  r/   ry  s           @@@rP   test_2D_separablezTestNdBSpline.test_2D_separable9	  s   ///%%''	B77B777 	
#I#I#I#I#I#Ib#I#I#IJJ
6**$)"	$ 	$ 	$ 	$ "bA&&&uRyy3r77+----b		U	, 	, 	, 	, i##E**[[i[((1,r|v%%%% zz'""$111qs
+%	9 	9 	9 	9 	9 	9rf   c                    d}g d}d |D             }|                                  \  }}}t          j        ||||f          }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           |	|          t          j        |          d d d f         dd           |                    d          }t          ||d          } ||          }
|
j        dk    sJ t          |
||g||ggd	
            ||          j        t          j        |          d d         |j        j        |d          z   k    sJ t           ||          t          j        |          d d d d f         dd           d S )Nr4   r~  c                 6    g | ]\  }}|d z  |d z  d|z  z   z  S r  rz   r  s      rP   r   z5TestNdBSpline.test_2D_separable_2.<locals>.<listcomp>Y	  r  rf   r  r6   r   r7   r7   rj   rk   r2   FgvIh%,=r  r   r   r4   r4   )r4   r4   )	rz  rF   r   r   r   r   r.   rs   rt   )rM   r  rs  r  ry  r  r/   c2_4r   bspl2_4ri  
val_singlec2_22bspl2_22s                 rP   test_2D_separable_2z!TestNdBSpline.test_2D_separable_2U	  sa   ///77B777%%''	By"b"b)**B***)Yr2q))"--
|t#####q(u	6 	6 	6 	6
 wr{{ BHRLL"$5	8N$NNNNNbj&8&8D&A$)"	$ 	$ 	$ 	$
 \**R!,,,"|v%%%%$j1$j139>	@ 	@ 	@ 	@ "SbS!HJ$4TUU$;;< < < <bj&8&8D$&G$)"	$ 	$ 	$ 	$ 	$ 	$rf   c                 `   g d}d |D             }d |D             }|                                  \  }}}|dz  }t          j        ||||f          }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  rz   r  s      rP   r   z=TestNdBSpline.test_2D_separable_2_complex.<locals>.<listcomp>	  r  rf   c                     g | ]
}|d |z  z   S )y               @rz   )r~   r-   s     rP   r   z=TestNdBSpline.test_2D_separable_2_complex.<locals>.<listcomp>	  s     +++q!bd(+++rf   r  r  r6   r   r  r7   rj   rk   )rz  rF   r   r   r   r   )rM   rs  r  ry  r  r/   r  r   r  ri  r  s              rP   test_2D_separable_2_complexz)TestNdBSpline.test_2D_separable_2_complex	  s    ///77B777++F+++%%''	B6]y"b"b)**B***)Yr2q))"--
|t#####q(u	6 	6 	6 	6 	6 	6rf   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  r6   r   r   r   r   r7   r)   r   )r+   r+   rj   rk   r)   r   r4   皙?g? @c                 8    g | ]}t          |f          S rz   r  )r~   r   r.   r/   rM  rN  s     rP   r   z0TestNdBSpline.test_2D_random.<locals>.<listcomp>	  s+    CCC""r2h155CCCrf   )rF   rL   r  r   r   r  r   r   r   rP  r   )rM   r   r"  rs  r.   r/   rM  rN  s       @@@@rP   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"	$ 	$ 	$ 	$ 	$ 	$rf   c                     |                                  \  }}}}g d}d |D             }t          ||||f          } ||          j        t          |          fk    sJ t	           ||          |d           d S )N)ffffff?r  )r=   g333333@)r  r  c                 6    g | ]\  }}|d z  |dz  d|z  z   z  S r  rz   r  s      rP   r   z/TestNdBSpline.test_2D_mixed.<locals>.<listcomp>	  r  rf   r   rj   rk   )r|  r   r   r-  r   )rM   ry  r  kxkyrs  r  r  s           rP   test_2D_mixedzTestNdBSpline.test_2D_mixed	  s    ++--BB11177B777"bRH---uRyy3r77+----b		U	, 	, 	, 	, 	, 	,rf   c                 D   |                                  \  }}}}g d}t          ||||f          } ||d          }t          |d |D             d            ||d          }t          |d	 |D             d            ||d
          }t          |d |D             d           t          t                    5   ||d          }d d d            n# 1 swxY w Y   t          t                    5   ||d          }d d d            d S # 1 swxY w Y   d S )Nr  r   rp  r   c                 <    g | ]\  }}d |dz  z  |dz  d|z  z   z  S r  rz   r  s      rP   r   z4TestNdBSpline.test_2D_derivative.<locals>.<listcomp>	  s5    >>>41a1a41a4!A#:.>>>rf   rj   rk   r)   r)   c                 6    g | ]\  }}d |dz  z  d|z  dz   z  S r  rz   r  s      rP   r   z4TestNdBSpline.test_2D_derivative.<locals>.<listcomp>	  s1    ;;;11a41Q37+;;;rf   )r   r   c                 6    g | ]\  }}|d z  |dz  d|z  z   z  S r  rz   r  s      rP   r   z4TestNdBSpline.test_2D_derivative.<locals>.<listcomp>	  s1    <<<AAA!,<<<rf   )r2   r   )r2   r   r)   )r|  r   r   rB   rD   )rM   ry  r  r  r  rs  r  r   s           rP   test_2D_derivativez TestNdBSpline.test_2D_derivative	  s   ++--BB111"bRH---eB6""">>2>>>U	L 	L 	L 	L eB6""";;;;;%	I 	I 	I 	I eB6"""<<<<<5	J 	J 	J 	J :&& 	( 	(%w'''C	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( :&& 	+ 	+%z***C	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s$   CC"C:DDD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  )r4   r6   r   r   r   r6   r   r7   r)   r  r  r   c                 &    g | ]} |          S rz   rz   r~   r  bspl2_0s     rP   r   z6TestNdBSpline.test_2D_mixed_random.<locals>.<listcomp>	  !    222222rf   rj   rk   )rF   rL   r  r   r   r  r   r   r   rV  r   
rM   r   r  r  rM  rN  r.   rs  r  r  s
            @rP   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	@ 	@ 	@ 	@ 	@ 	@rf   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   r6   r   r4   c                     g | ]	\  }}||f
S rz   rz   r~   r  rO   s      rP   r   z0TestNdBSpline.test_tx_neq_ty.<locals>.<listcomp>	       999Aq!f999rf   rj   rk   )rF   rJ   r
   r.   r   r-   r/   r   rd  re  r   anyr   rt   r   )rM   rm   r   spl_xspl_yr   rv   valuesrgirs  bxis              rP   test_tx_neq_tyzTestNdBSpline.test_tx_neq_ty	  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Frf   c                 t   t          j        d          }|dz  }t          ||d          }|dz  d|z  z   }t          ||d          }|dz  d|z  z   dz   }t          ||d          }|j        |j        |j        f}|j        d d d d f         |j        d d d d f         z  |j        d d d d f         z  }	||	dfS )Nr   r6   r   r4   r)   rv  )
rM   rm   r   r"  rx  rz  y_2r  ry  r  s
             rP   make_3d_casezTestNdBSpline.make_3d_case	  s    IaLLqD A+++dQqSj"1cQ///dQqSj1n"1cQ///eUWeg&eAAAtTM"gdAAAtm$%gdD!!!m$% 2qyrf   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  r6   r?   r   r   r6   r4   r)   r   c                     g | ]}|S rz   rz   r~   r   s     rP   r   z3TestNdBSpline.test_3D_separable.<locals>.<listcomp>
      &&&Aa&&&rf   )r?   rj   rk   )	rF   rL   r  r  r  r   zipr   r   )rM   r   rm   r   r{  r  t3c3r/   bspl3rs  ri  s               rP   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3rf   c                 F   |                                  \  }}}t          ||d          }t          j                            d          }|                    d          dz  \  }}}d t          |||          D             }	t           ||	d	          d|d
z  z  |dz  d
|z  z   z  |dz  d|z  z   dz   z  d           t           ||	d	          d|z  |dz  d
|z  z   z  |dz  d|z  z   dz   z  d           t           ||	d	          d|z  d|d
z  z  d
z   z  |dz  d|z  z   dz   z  d           t           ||	d	          d|z  d|d
z  z  d
z   z  dz  d           t           ||	d	          t          j        t          |	                    d           d S )Nr6   r   r  r  r   r   c                     g | ]}|S rz   rz   r  s     rP   r   z4TestNdBSpline.test_3D_derivative.<locals>.<listcomp>
  r  rf   )r)   r   r   r   r4   r)   rj   rk   )r4   r   r   r   )r4   r)   r   )r4   r)   r6   )r4   r)   r7   )
r  r   rF   rL   r  r  r  r   r  r-  )
rM   r  r  r/   r  r   rm   r   r{  rs  s
             rP   test_3D_derivativez TestNdBSpline.test_3D_derivative
  s(   %%''	B"bA&&&i##E**++7+++a/1a&&Q1&&&bY///!Q$!Q$1*-A!a@u	N 	N 	N 	N 	bY///!q!tacz*adQqSj1n=E	K 	K 	K 	K 	bY///!qAvz*adQqSj1n=E	K 	K 	K 	K 	bY///!qAvz*a0u	> 	> 	> 	> 	bY///R))	7 	7 	7 	7 	7 	7rf   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  r6   r   r   r   r   r7   r)   r   )r+   r+   r)   rj   rk   r  r  g?r  gffffff?c                 &    g | ]} |          S rz   rz   )r~   r  spl_0s     rP   r   z0TestNdBSpline.test_3D_random.<locals>.<listcomp>3
  s!    !9!9!9%%))!9!9!9rf   )rF   rL   r  r   r   r  r   r   rV  r   r   )
rM   r   r/   rM  rN  tzr.   r"  rs  r  s
            @rP   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Frf   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  r6   r   r   r   r   r7   r)   r*   r   r  r  r  rj   rk   )rF   rL   r  r   r   r  r   r   r   r   r   r   )rM   r   r/   rM  rN  r  r.   r"  r  r  rs  s              rP   test_3D_random_complexz$TestNdBSpline.test_3D_random_complex5
  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	@ 	@ 	@ 	@ 	@ 	@rf   
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 )Nr6   r/   rr   r2   r   r   r   rs  r2   g            @c                     g | ]}|S rz   rz   r  s     rP   r   z?TestNdBSpline.test_extrapolate_3D_separable.<locals>.<listcomp>R
  r  rf   r4   r)   rq   rj   rk   r  r   r  rF   rs   r  r   )rM   r  r  r  r  r/   r  rm   r   r{  rs  r  ri  s                rP   test_extrapolate_3D_separablez+TestNdBSpline.test_extrapolate_3D_separableH
  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3rf   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 )Nr6   r  r  r  r  c                     g | ]}|S rz   rz   r  s     rP   r   zATestNdBSpline.test_extrapolate_3D_separable_2.<locals>.<listcomp>c
  r  rf   r4   r)   rq   rj   rk   r  )rM   r   r  r  r/   r  r  r  rm   r   r{  rs  r  ri  s                 rP   test_extrapolate_3D_separable_2z-TestNdBSpline.test_extrapolate_3D_separable_2X
  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3rf   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 )Nr6   r   )r  r)   r   )r   r   rs  )r2   r   r  c                     g | ]}|S rz   rz   r  s     rP   r   zETestNdBSpline.test_extrapolate_false_3D_separable.<locals>.<listcomp>q
  r  rf   r4   r)   Frq   r   r2   rj   rk   )r  r   r  rF   rs   r  r   r   )rM   r  r  r/   r  rm   r   r{  rs  r  ri  s              rP   #test_extrapolate_false_3D_separablez1TestNdBSpline.test_extrapolate_false_3D_separablei
  s$   %%''	B"bA&&& **nnnnnna1bj1a),,1a&&Q1&&&AA!$1qs
Q7ru---xq	"""""xr
#####qtfQrTl??????rf   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 )Nr6   r   r  r)   r4   r   r   r  rs  r2   r  c                     g | ]}|S rz   rz   r  s     rP   r   z/TestNdBSpline.test_x_nan_3D.<locals>.<listcomp>
  r  rf   rj   rk   )	r  r   rF   rs   rH   r  r   r   r   )rM   r  r  r/   r  rm   r   r{  rs  r  r   ri  s               rP   test_x_nan_3DzTestNdBSpline.test_x_nan_3Dy
  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3rf   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  r6   r6   r   r7      r  r2   r4   r)   r   r  r  r   c                 &    g | ]} |          S rz   rz   r  s     rP   r   z7TestNdBSpline.test_non_c_contiguous.<locals>.<listcomp>
  r  rf   rj   rk   )rF   rL   r  r   r  r   flagsc_contiguousr   r  r   r   rV  r   r  s
            @rP   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	@ 	@ 	@ 	@ 	@ 	@rf   c                    |                                  \  }}}t          ||d          }t          d          D ]}d||         j        _        d|j        _        t          ||d          } |d           |d          k    sJ d S )Nr6   r   Frh   )r  r   r   r  	writeable)rM   r  r  r/   r  r   bspl3_s          rP   test_readonlyzTestNdBSpline.test_readonly
  s    %%''	B"bA&&&q 	* 	*A$)BqEK!!"2rQ'''uY66)#4#4444444rf   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 )Nrh   )r7   r   r   r   gؗҜ<rk   r6   zData and knots*r  r)   r4   )
r  rF   rs   r   r.  r   r   r  rB   rD   )rM   r  r  r/   rs  dmdm1s          rP   test_design_matrixz TestNdBSpline.test_design_matrix
  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  r6   r   r   r   r   r7   r)   r   c                 R    t           j        g dg dg df         } ||           d S )Nr  r  r  )rF   r   )r   r"  rs  s      rP   r^  z1TestNdBSpline.test_concurrency.<locals>.worker_fn
  s:    {{{&&' (B CGGGGGrf   r^   )	rF   rL   r  r   r   r  r   r   r!   )	rM   r   r/   rM  rN  r  r.   r"  r^  s	            rP   r_  zTestNdBSpline.test_concurrency
  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3rf   )r  r  r  rt  rz  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  rZ   rm  rn  r  r  r  r  r  r  r  ro  r_  rz   rf   rP   ro  ro  		  s       B B B"  & & &9 9 98($ ($ ($V6 6 6&$ $ $&, , ,+ + +2@ @ @ G G G(  &4 4 47 7 7,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 4rf   ro  c                   0   e Zd Zd Zd Zej                            dg d          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   r6   r4   c                     g | ]	\  }}||f
S rz   rz   r  s      rP   r   z7TestMakeND.test_2D_separable_simple.<locals>.<listcomp>
  r  rf   r)   r   rS   rk   r:  r   rT   )r   linearr  rj   )rF   rJ   rd  re  r"   r   r  r
   r.   scipy.interpolater   )rM   rm   r   r  rs  rv   r  r  r   RGIr  s              rP   test_2D_separable_simplez#TestMakeND.test_2D_separable_simple
  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6rf   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 rz   rz   r  s      rP   r   z>TestMakeND.test_2D_separable_trailing_dims.<locals>.<listcomp>
  r  rf   r6   r4   r/   solver)$   r7   r7   rj   rk   r  )r  r4   r4   )rF   rJ   rd  re  r   r"   sslspsolver^  ry  r   r   rt   )
rM   rm   r   rs  r  values4rv   ri  r  values22s
             rP   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rf   r/   )r  r  )r6   r)   )r)   r6   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 rz   rz   r  s      rP   r   z,TestMakeND.test_2D_mixed.<locals>.<listcomp>  r  rf   r6   r4   r  rS   rk   )	rF   rJ   rd  re  r"   r	  r
  r   r  )rM   r/   rm   r   rs  r  rv   s          rP   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======rf   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   r9   r:   r;   r  r  )r)   r4   r)   r4   r)   r)   )r)   r4   r6   r4   r)   r)   )r)   r4   r4   r4   r)   r)   )rF   r!  rz  s       rP   _get_sample_2d_datazTestMakeND._get_sample_2d_data  s    H...//H...//H""""""""""""""""""	
 	
 !Qwrf   c                    |                                  \  }}}t          ||f|d          }t          ||f|d          }t          j        g dg dg          j        }t           ||           ||          d           d S )	Nr)   r   r   r  r)   gffffff@g333333@r   ffffff
@333333?r6   r)   r  r  r;   rI  r+   r6   rj   rk   r  r"   r   rF   r!  r  r   rM   rm   r   r{  rv   r  rs  s          rP   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6rf   c                 "   |                                  \  }}}t          ||f|dt          j                  }t	          ||f|d          }t          j        g dg dg          j        }t           ||           ||          d           d S )	Nr6   r  cubic_legacyr  r  r  rj   rk   	r  r"   r	  r
  r   rF   r!  r  r   r  s          rP   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6rf   r  c                    |                                  \  }}}t          ||f|d|d          }t          ||f|d          }t          j        g dg dg          j        }t           ||           ||          dd	
           d S )Nr6   gư>)r/   r  rV   r  r  r  r  rj   r   rT   r  )rM   r  rm   r   r{  rv   r  rs  s           rP   test_2D_vs_RGI_cubic_iterativez)TestMakeND.test_2D_vs_RGI_cubic_iterative1  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Arf   c                 "   |                                  \  }}}t          ||f|dt          j                  }t	          ||f|d          }t          j        g dg dg          j        }t           ||           ||          d           d S )	Nr   r  quintic_legacyr  r  r  rj   rk   r  r  s          rP   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6rf   zk, meth))r)   r   )r6   r  )r   r!  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  r  r  gffffff?r  r>   r  rj   rk   )
rF   rL   r  cumsumr  r"   r	  r
  r   r   )rM   r/   methrndmrm   r   r{  r  rv   r  rs  s              rP   test_3D_random_vs_RGIz TestMakeND.test_3D_random_vs_RGIJ  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6rf   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)   r  r  r/   r6   )r  rB   rD   r"   rF   r   )rM   rm   r   r{  solver_argss        rP   test_solver_err_not_convergedz(TestMakeND.test_solver_err_not_convergedZ  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  r  r  rZ   rm  rn  r  r  r  r  r	  gmresgcrotmkr  r"  r'  r+  rz   rf   rP   r  r  
  s2       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rf   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  r4   r   z1D sequencer  )rF   rJ   rt   rZ   r   rD   _bfpcheckrM   r/   r-   rm   s       rP   test_1D_x_tzTestFpchec.test_1D_x_tg  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 )Nr6   r4   r)   r?   r^   z	Need k+1*r  )	rF   rJ   dfitpackfpchecrZ   r   rD   r1  r2  )rM   r/   rN   r  r-   rm   s         rP   test_condition_1zTestFpchec.test_condition_1r  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 )Nr6   r   r)   r4   r   )r)   r4   r6   r7   r  r2   r   zLast k knots*r  zFirst k knots*r6  r7  r1  r2  r  rZ   r   rD   )rM   r/   r-   rm   tts        rP   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 )
Nr6   r   r)   r4   r   r)   r4   r6   r  r7   r     zInternal knots*r  )r6  r7  r1  r2  rZ   r   rD   r3  s       rP   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 )
Nr6   r   r)   r   r>  r(  zOut of bounds*r  r2   r:  )rM   r/   r-   rm   rd   s        rP   test_condition_4zTestFpchec.test_condition_4  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)   r4   r4   )r  r  r  ri   Schoenberg-Whitney*r  )r   r   r   r6  r7  rZ   r   rD   r1  r2  r3  s       rP   test_condition_5_x1xmz TestFpchec.test_condition_5_x1xm  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   )r6  r7  r1  r2  r3  s       rP   test_condition_5_k1zTestFpchec.test_condition_5_k1  sX    LL#Jq!Q''1,,,,z!Q""*****rf   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 )	Nr6   r   r)   r4   r   ri   rD  r  rE  r3  s       rP   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 )Nr6   r   r)   r4   r   r  r7   ri   rD  r  rE  r3  s       rP   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   r4   r6   r7   r   r   r   r   )r)   r)   r)   @rN  rN  rs  ri   rD  r  rE  r3  s       rP   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  r4  r8  r<  r@  rB  rF  rH  rJ  rL  rO  rz   rf   rP   r/  r/  d  s        	  	  	      *! ! !,     ! ! !>     + + +     + + +         rf   r/  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 ra  )r  )r~   r   rJ  	residualss     rP   r   z_split.<locals>.<listcomp>  s:    GGGi1b1g&**,,GGGrf   r)   r2   r4   rS   rk   )rF   r  r   r-  r   r  )	rm   r-   r/   rR  fpartscarriesr   carryrJ  s	      `    @rP   _splitrV  
  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:rf   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.r4   N)rV  r   r-  rD   rF   r  r   )rm   r-   r/   rR  rS  rJ  idx_max	fpart_maxr   idx_newknotnew_knotidx_tt_news                rP   	_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Lrf   c                   F   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ej        j        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   r@   r6   r+   r)   r8   rt  )r/   r-   r4   r   _fitpack_reprorS   rk   )
rF   rJ   ry  r!  r   r  rc  add_knotr^  r   )rM   rm   r   r/   r-   r"  rR  _frnew_tnew_t_pyspl2
residuals2new_t2	new_t2_pys                 rP   test_split_add_knotz%TestGenerateKnots.test_split_add_knot6  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6rf   r/   r  c                 0   t          j        dt           j                  }t          j        |t           j        z  dz            }t          t          |||d                    d         }t          |||d          d         }t          ||d           d S )Nr   r@   r   r/   r  r2   rS   rk   )	rF   rJ   rK   rv  r  r  r   r   r   )rM   r/   rm   r   r-   r;  s         rP   test_s0zTestGenerateKnots.test_s0N  s    Iarz***F1RU7191Q///004AqA###A&2E******rf   c                     d}t          j        |          }|dz  }t          t          ||dd                    }t	          |d         t          |d          d           d S )Nr^   r6   r   rn  r2   rS   rk   rF   rJ   r  r   r   r   rM   rN   rm   r   knotss        rP   	test_s0_1zTestGenerateKnots.test_s0_1W  sd    IaLLqD^AqA33344b	;q!#4#45AAAAAArf   c                     d}t          j        |          }|dz  }t          t          ||dd                    }t	          |d         t          |d          d           d S )Nr   r6   r   rn  r2   rS   rk   rq  rr  s        rP   test_s0_n20zTestGenerateKnots.test_s0_n20_  sd    IaLLqD^AqA33344b	;q!#4#45AAAAAArf   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 )Nr^   r6   r   r/   r  nest)rF   rJ   rB   rD   r  r   rM   rm   r   s      rP   test_s0_nestzTestGenerateKnots.test_s0_nestf  s    IbMMqD:&& 	: 	:1QR888999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   "AA!$A!c                    t          j        d          }t          j        |t           j        z  dz            }d}t	          t          |||d                    }g dg dg dg dg d	g}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   r6   r   rn  )r8   r8   r8   r8   rt  rt  rt  rt  )	r8   r8   r8   r8   r;   rt  rt  rt  rt  
r8   r8   r8   r8   r9   r;   rt  rt  rt  rt  )r8   r8   r8   r8   r9   r;   r  rt  rt  rt  rt  )r8   r8   r8   r8   r9   r:   r;   rI  r   rt  rt  rt  rS   rk   r2   N)
rF   rJ   rv  r  r  r   r-  r  r   r   )	rM   rm   r   r/   rs  wantedr-   r;  r   s	            rP   test_s_switchzTestGenerateKnots.test_s_switchm  s   . IaLLF1RU719^AqA66677222666:::>>>AAA	
 5zzS[[(((('' 	/ 	/EArAr..... Ad+++1ab	15111111rf   c                     t          t          d                    }t          ||dd          }t          |           d S )Nr   r  r)   )r  r/   )r  r   r   next)rM   rm   gens      rP   r  z!TestGenerateKnots.test_list_input  s8    qNNQSA...S					rf   c           	         t          j        d          }t          j        |t           j        z  dz            }d}t	          t          ||d|d                    }t          |d         g dd	           t          t                    5  t	          t          ||dd
                     d d d            d S # 1 swxY w Y   d S )Nr   r   r6   r^   rx  r2   r}  rS   rk   r7   )r/   ry  )	rF   rJ   rv  r  r  r   r   rB   rD   )rM   rm   r   r  rs  s        rP   	test_nestzTestGenerateKnots.test_nest  s   IaLLF1RU719^AqA<<<==b	@@@u	N 	N 	N 	N :&& 	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   
!B88B<?B<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   r?   r  )	rF   rJ   rv  r  rB   rD   r  r   r  rz  s      rP   r  zTestGenerateKnots.test_weights  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?  ri   r   r  )r  g{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  r^   r   r   r4   r6   rn  r   r2   rS   rk   )rF   rL   r   r   r  rv  r  expr   r  r   r   )	rM   r  r  r&  rm   r   r/   r-   r;  s	            rP   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******rf   c                    d}t          j        |          }|dz  }t          t          ||dd                    }t	                      5 }|                    t                    }t          ||dd          }t          |          dk    sJ 	 d d d            n# 1 swxY w Y   t          |d         |d                    d S )N   r6   Jz5rn  r)   r2   r   )
rF   rJ   r  r   r   recordRuntimeWarningr   r-  r   )rM   rN   rm   r   rs  suprm  rY   s           rP   test_s_too_smallz"TestGenerateKnots.test_s_too_small  s    IaLLqD ^AqA77788   	C

>**AAe,,,Cq66Q;;;;;	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	b	3q6*****s   
ABB!BN)r  r  r  rl  rZ   rm  rn  ro  rt  rv  r{  r  r  r  r  r  ro  r  rz   rf   rP   r`  r`  5  s9       7 7 70 [S///22+ + 32+B B BB B B: : :)2 )2 )2V  4 4 46 6 6 [V]]]33[S...11+ + 21 43+" [+ + + + +rf   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)   r4   Nr   r   r@   )
r   rF   r  r   r,  emptyry  r   math	factorial)
r-   r/   rN   deltanrintr]  tiir  matrr   s
             rP   
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Krf   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.
    Nc                 |   || _         || _        || _        || _        |t	          j        |t                    n|| _        | j        j        dk    sJ  t          |t	          j
        |j        d         |z
  dz
            |          |          }|| j        d d d f         z  | _        ddlm} t          |                    ||                                           | _        |j        dk    sJ || j        z  }	t          j        |	t	          j        | j        j        d                   f         | _        || _        d S )Nr@   r)   r   rb  )rm   r   r-   r/   rF   ra   ry  r  r  r   r,  r   a_denser  rc  r  discr  b_denser   r  r   r  )
rM   rm   r   r-   r/   r  r  r  re  r   s
             rP   r  zF_dense.__init__  s&   12au----v{a <'!RVAGAJNQ$677;;A>>40;;;;;;#SXXa^^4<<>> v{{{{Z%BHT\%7%:;;;<rf   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                  }
t          j        | j        dz   |
| j                  | j        z
  dz  z            }|
| _        || j        z
  S )Nr   )r  r  economic)ra  r)   r4   )rF   r  r  r  scipy.linalgr  r  r  r   r   r   r-   r/   r  r  rm   r   r"  r  )rM   r  abr  r  r  rm  qyr  r.   r"  fps               rP   rl  zF_dense.__call__  s    YdlQ&6788 	+*******r":&&&1S47]WQZE!CRC"H+r#2#w''dfa((VDFAITVtv!5 99::DF{rf   r  )r  r  r  r  r  rl  rz   rf   rP   r  r    sA            ,    rf   r  c                   z    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zej        j        d
             Zd Zd ZdS )TestMakeSplrepc                    t          j        ddd          }t          j        ddd          }t          t                    5  t	          ||           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          t                    5  t          j        |j        dddf          }t	          ||d           d d d            n# 1 swxY w Y   t          j        d          }t          t                    5  t	          ||d	z  |d
           d d d            n# 1 swxY w Y   t          j        d           }t          t                    5  t	          ||d	z  |d
           d d d            n# 1 swxY w Y   t          j        |j        d         df          }t          t                    5  t	          ||d	z  |d
           d d d            n# 1 swxY w Y   t          t                    5  t	          |d d d         |d	z  d           d d d            n# 1 swxY w Y   t          t                    5  t	          ||d	z  dd           d d d            n# 1 swxY w Y   t          t                    5  t	          ||d	z  d           d d d            n# 1 swxY w Y   t          t                    5  t	          ||d	z  d	dd           d d d            n# 1 swxY w Y   t          t                    5  t	          ||d	z  dd           d d d            n# 1 swxY w Y   t          t                    5  t	          t          j	        d          t          j	        d          d           d d d            d S # 1 swxY w Y   d S )Nr   r^   r?   r  r)   r4   r  r  r6   )r  r  r2   r=   rn  )r/   ry  r  )r  ry  r   	   )
rF   r`   rB   rD   r   r  r   r   rC   rJ   )rM   rm   r   r  s       rP   test_input_errorsz TestMakeSplrep.test_input_errors!  s   K2r""K2r"":&& 	 	1	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 :&& 	% 	%1$$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% :&& 	% 	%Aq)**A1$$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%
 GBKK:&& 	- 	-1a41,,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- WR[[L:&& 	- 	-1a41,,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- GQWQZO$$:&& 	- 	-1a41,,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- :&& 	. 	.$$B$A----	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 9%% 	/ 	/1a43#....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ :&& 	' 	'1a42&&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' :&& 	5 	51a4114444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 :&& 	/ 	/1a412....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ :&& 	; 	;	!billc::::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s   AA"%A"=BB #B ;0C77C;>C;*EEEF$$F(+F($HHH&III0JJJ2KKK3LLL6MM M87N<<O O c                     t          j        ddd          }t          j        |dz  dz            dz  }d}d}t          j        dg|dz   z  d	d
gz   dg|dz   z  z             }|||||fS )Nr   r   r?   gQ	@r4   r6   gq@H&?r)   r=   r;   )rF   r`   rv  r!  )rM   rm   r   r/   r  r;  s         rP   	_get_xyktzTestMakeSplrep._get_xyktX  s|    K1b!!VAdFQJ"Xqc1Q3i3*,sAaCy899!Q2~rf   c                     ddl m} |                                 \  }}}}} |||d d d f         |||          }t          |||||          }dD ]&}	t	           ||	           ||	          d           'd S )Nr   Fr)   r^   r   rS   rk   ) scipy.interpolate._fitpack_repror  r  r  r   )
rM   r  rm   r   r/   r  r-   ff_dr  s
             rP   test_fitpack_FzTestMakeSplrep.test_fitpack_Fa  s    666666((1aAAa111d7Q1%%aAq!$$ 	6 	6AAAaDD##a&&u55555	6 	6rf   c                    ddl m} |                                 \  }}}}}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@   r  r  rS   rk   )
r  r  r  rF   rJ   r   ry  r  r   r   )rM   r  rm   r   r/   r  r-   r  fwfw_dr  r  s               rP   test_fitpack_F_with_weightsz*TestMakeSplrep.test_fitpack_F_with_weightsk  s   666666((1aAIagaj...Qq!AAAtG*aA+++q!Q1***aAq!$$ 	@ 	@ABBqEE44777777{33q664477???????	@ 	@rf   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   r6   r4   rS   rk   )r  interpolaterc  rF   rL   r  r   r   r  r-  r  r  r  r  r   r   )rM   re  r   r-   rN   r/   DD_denses           rP   test_disc_matrixzTestMakeSplrep.test_disc_matrixz  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//////rf   c                 ^   |                                  \  }}}}}t          j        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                 |j        d           d S )	Nr   r)   r=   r;   r   rn  rS   rk   )	r  rF   r!  r   r   r   r   r.   r   )	rM   rm   r   r/   r  r;  r-   r.   r"  s	            rP   test_simple_vs_splrepz$TestMakeSplrep.test_simple_vs_splrep  s    ))1aBXqc1Q3i3*,sAaCy899q!qA&&&!A17||!Q!q)))+35:+E::::::rf   c                 h   |                                  \  }}}}}t          t          ||||                    d         }t          ||||          }t          |||||          }t	          |j        |j        d           t	          |j        |j        d           |j        |j        k    sJ d S )Nrn  r2   )r-   r/   r  rS   rk   )r  r  r   r   r   r-   r.   r/   )	rM   rm   r   r/   r  r   r-   spl_autospl_ts	            rP   test_with_knotszTestMakeSplrep.test_with_knots  s    ((1aA1Q///004q!qA...AqAa000
EG%8888
EG%8888zUW$$$$$$rf   c                     d}t          j        |          }|dz  }d}t          |||d          }|j        j        d         d|dz   z  k    sJ d S )Nr^   r6   r)   rn  r   r4   )rF   rJ   r   r-   r   )rM   rN   rm   r   r/   r"  s         rP   test_no_internal_knotsz%TestMakeSplrep.test_no_internal_knots  s_    IaLLqD!Q!q)))u{1~AaC((((((rf   c                     d}t          j        |          }|dz  }t          ||d          }t          ||d          }t	          |j        |j        d           d S )Nr^   r6   r   rS   rk   )rF   rJ   r   r
   r   r.   )rM   rN   rm   r   r"  spl_is         rP   test_default_szTestMakeSplrep.test_default_s  sd    IaLLqD!Q!$$$"1a1---uwU333333rf   c                    d}t          j        |          }|dz  }t                      5 }|                    t                    }t          ||dd          }t          ||dd          }t          |          dk    sJ t          |j	        |d                    t          t           j        |j        dg|j        dz   z  f         |d         d	           d d d            d S # 1 swxY w Y   d S )
Nr  r6   r  rn  r4   r   r)   r  rk   )rF   rJ   r   r  r  r   r   r-  r   r-   r   r   r.   r/   )rM   rN   rm   r   r  rm  rY   r"  s           rP   r  zTestMakeSplrep.test_s_too_small  s.    IaLLqD   	0C

>**AAe,,,Caa5111Cq66Q;;;;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 	0 	0 	0s   B,C##C'*C'c                 0   d\  }}t          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r^   r6   r6   r   h㈵>rn  r)   )rF   rJ   r   r.   r  )rM   rN   r/   rm   r   r"  rz  r  s           rP   
test_shapezTestMakeSplrep.test_shape  s    1IaLLqD!Q!$$$AqA...uzQw|q     Aq1ac7{a4888w|q      rf   c                 N   d\  }}t          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 )Nr  r6   r   rn  r)   r4   )rF   rJ   r   r.   r  r-   r   )rM   rN   r/   rm   r   r  rz  s          rP   test_s0_vs_notzTestMakeSplrep.test_s0_vs_not  s    1IaLLqDAqA+++AqA+++w|q    w|q    w}Q1q519,,,,w}Q1A;......rf   N)r  r  r  r  r  r  r  r  r  r  r  r  rZ   rm  ro  r  r  r  rz   rf   rP   r  r     s        5; 5; 5;n  6 6 6@ @ @0 0 0; ; ;
% 
% 
%) ) )4 4 4 [0 0 0! ! ! / / / / /rf   r  c                       e Zd ZddZej                            dg d          d             Zej                            dg d          d             Zd Z	d	 Z
d
 ZdS )TestMakeSplprepr^   r6   c                     t          j        |          t           j        z  |z  }t          j        |          t          j        |          g}|||fS r  )rF   rJ   r  rv  rx  )rM   r  r/   rm   r   s        rP   _get_xykzTestMakeSplprep._get_xyk  s@    IaLL25 1$VAYYq		"!Qwrf   r  r   r  gMbP?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 )Nr  r  r   r  r^   r  r  rS   rk   r)   r  )rF   rJ   r  rv  rx  r   r   r   r-   r-  rs   r  r.   r   )rM   r  r  r/   rm   r   	num_knotsr-   r.   u_r"  r  r   s                rP   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rf   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 ]\  }}	t          ||	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   r4   r  rk   rS   r)   )r  r  r  rF   r   r   rs   r   r-  r  r   r   r-   r.   r  r/   rB   rD   )rM   r  r   r   rY   r  tck_au_ar  r  r"  s              rP   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&%(++ 	0 	0FBB/////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   )LL
L
c                     |                      d          \  }}}t          |          \  }}t           ||          |d           d S )Nr^   r  rS   rk   )r  r   r   )rM   rm   r   r/   r"  r  s         rP   test_default_s_is_zeroz&TestMakeSplprep.test_default_s_is_zero'  sM    --"-%%1aaQA......rf   c                 v   |                      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 )Nr^   r  r   r  rS   rk   r   )r  r   r   r  r.   r   )rM   rm   r   r/   r  u_ispl_nu_ns           rP   test_s_zero_vs_near_zeroz(TestMakeSplprep.test_s_zero_vs_near_zero-  s    --"-%%1a!!q)))
s!!u---
sSu----c

AE2222c

AD1111zUZ''''w}------rf   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   r@   r   r  r  r  )r)   r   rS   rk   )	rF   rJ   ry  rB   rD   r   r   r   r   )rM   rm   rY   r  r"  r  s         rP   rt  zTestMakeSplprep.test_1D:  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
Nr  )r  r  r  r  rZ   rm  rn  r  r  r  r  rt  rz   rf   rP   r  r    s           
 [S"6"6"677A A 87A: [S"6"6"677 /  / 87 /D/ / /. . .1 1 1 1 1rf   r  r  )r  r6   rm  ra  )gr'  rY  rd  r  rb  numpyrF   numpy.testingr   scipy._lib._array_apir   r   rZ   r   rB   r  r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  scipy.sparse.linalgsparser	  scipy.interpolate._bsplinesr   r   r   r   r   r   r   r   scipy.interpolate._fitpack_implr  _fitpack_implr   scipy._lib._utilr    scipy._lib._testutilsr!   scipy.interpolate._ndbspliner"   r#   r6  r$   r1  r%   r'   rq  r  r  r|   r   r   rl   r   rX   r  r  r$  r  r  rm  rn  r  r  r  r  r  r  r  r-  r/  rP  r  r?  rV  ro  r  r/  rV  r^  r`  r  r  r  r  rz   rf   rP   <module>r     s   				               + + + + + + B B B B B B B B * * * * * *                                      
       ! ! ! ! ! ! ! ! !E E E E E E E E E E E E E E H 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 - - - - - - & & & & & &y	) y	) y	) y	) y	) y	) y	) y	)vM$ M$ M$ M$ M$ M$ M$ M$`6 6 6.  &
G 
G 
G> > >  H H H   $+ + + +  $_) _) _) _) _) _) _) _)D}? }? }? }? }? }? }? }?@  8   8 !+11(Y<MNN y: y: y: y: y: y: y: y:x       >) ) ) )X	 	 	  (d+ d+ d+ d+ d+ d+ d+ d+N* * *
F3 F3 F3 F3 F3 F3 F3 F3V
 
 
  7 7 7:" :" :" :" :" :" :" :"zG4 G4 G4 G4 G4 G4 G4 G4TNG NG NG NG NG NG NG NGba  a  a  a  a  a  a  a L  (  .a+ a+ a+ a+ a+ a+ a+ a+H  2+ + + + + + + +\}/ }/ }/ }/ }/ }/ }/ }/@i1 i1 i1 i1 i1 i1 i1 i1 i1 i1rf   