
    xf                     p   d dl Zd dlmZ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 d dlmZ d dlmZmZm Z m!Z!m"Z" d dl#m$c m%Z& d dl'Z' G d d      Z(d Z)d	 Z*d
 Z+d Z,d Z-d Z.ddZ/ddZ0d Z1 G d d      Z2 G d d      Z3d Z4ddZ5 G d d      Z6d Z7 G d d      Z8y)    N)assert_equalassert_allcloseassert_)raises)BSplineBPolyPPolymake_interp_splinemake_lsq_spline_bsplsplevsplrepsplprepsplder
splantidersprootsplintinsertCubicSplinemake_smoothing_spline)_not_a_knot_augknt_woodbury_algorithm_periodic_knots_make_interp_per_full_matrc                   R   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ej@                  jC                  d e"dd            d         Z#d! Z$d" Z%ej@                  jC                  d#g d$      ej@                  jC                  d% e"d&            d'               Z&d( Z'd) Z(d* Z)ej@                  jC                  d+g d,      d-        Z*ej@                  jC                  d+g d,      d.        Z+d/ Z,d0 Z-y1)2TestBSplinec           
         t        t        t        ft        fi t	        ddgdgd       t        j                  d      5  t        t        t        fi t	        dt
        j                  gdgd       d d d        t        t        t        fi t	        dt
        j                  gdgd       t        t        t        fi t	        ddgdgd       t        t        t        fi t	        dgdggdgd       t        t        t        fi t	        g d	dgd       t        t        t        fi t	        g d
ddgd       t        t        t        fi t	        g dg dd       t        t        t        fi t	        g dg dd       t        t        t        fi t	        g dg dd       d\  }}t        j                  ||z   dz         }t
        j                  j                  |      }t        |||      }t        ||j                         t        ||j                         t        ||j                         y # 1 sw Y   xY w)N                 ?      ?r   tckignore)invalidr   r      r   r   r*         r*   )        r.   r!          @      @      @)r!   r!   r!   cubic      @)r.   r   r   r   r*   r,   )r!   r   r   )   r,   )assert_raises	TypeError
ValueErrorr   dictnperrstatenaninfarangerandomr   r#   r$   r   r%   )selfnr%   r#   r$   bs         G/usr/lib/python3/dist-packages/scipy/interpolate/tests/test_bsplines.py	test_ctorzTestBSpline.test_ctor   s   y*-w 	1!SbTQ/	1[[* 	S*gRBFFtq1QR	Sj'NTQKB41-MNj'JTQGtq-IJj'MTaS1#J2$!-LM 	j'KTI!-JKj' 	<RH:	< 	i 	O1\WM	Oi 	K1\SI	K 	j' 	B,
a@	B 1IIac!eIIQAq!133133Q;	S 	Ss   3H??I	c                 <   t               }|j                  }t        |j                  |d   dd       t        |j                  |d   dd       t        |j                  |d          t        j                  t              5  d|_        d d d        y # 1 sw Y   y xY w)Nr   V瞯<atolrtolr   r*   foo)
_make_random_splinetckr   r#   r$   r   r%   pytestr   AttributeError)r?   rA   rK   s      rB   test_tckzTestBSpline.test_tck8   s{    !eeSV%e<SV%e<QSS#a&! ]]>* 	AE	 	 	s   BBc                     t        j                  ddd      }t        ddgdgd      }t         ||      d       t        g dddgd      }t         ||      t        j                  |d	k  dd             y )
Nr   r   
   r0   r"   r,   )r   ffffff?r   r-   rQ   )r9   linspacer   r   wherer?   xxrA   s      rB   test_degree_0zTestBSpline.test_degree_0D   sg    [[Ar"q!f*"q!lq!f2"rxxT	1a89    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	       y )
Nr+   r   r*   r,   r   r,   2   r   r*   +=rG   )r   r9   rR   r   B_012r   )r?   r#   r$   r%   rA   xs         rB   test_degree_1zTestBSpline.test_degree_1M   s    Aq!KK1b!!U1X!U1Q3Z7!A$uQqSz/I!5	*a!Q+QqT>rW   c                    d}t        j                  dg|dz   z  dg|dz   z  z         }t        j                  g d      }t        |j                  dd      ddg      }t	        |||      }t        j
                  ddd      }t         ||d	
       ||d	
      d       t        t        ||||f       ||      d       y )Nr,   r   r   r!   r/   r0   r1   r(   g      r/   rP   Textrapolater[   r\   )r9   asarrayr   reshaper   rR   r   r   )r?   r%   r#   r$   bpbsplrU   s          rB   test_bernsteinzTestBSpline.test_bernsteinX   s    JJsAaCyA3!9,-JJ'(199R#aV,q!Q[[b"%240RT2	@b1a),Ru	.rW   c           	      B   t               }|j                  \  }}}t        j                  ||   || dz
     d      } ||      }|D cg c]  }t	        ||||       }}t        ||d       |D cg c]  }t        ||||       }	}t        ||	d       y c c}w c c}w Nr   rZ   r[   r\   )rJ   rK   r9   rR   _naive_evalr   _naive_eval_2)
r?   rA   r#   r$   r%   rU   y_br^   y_ny_n2s
             rB   test_rndm_naive_evalz TestBSpline.test_rndm_naive_evalf   s      !%%1a[[1q!Aw+e0231{1aA&33Su-356aaAq)66T.	 4 7s   B1Bc           	          t               }|j                  \  }}}t        j                  ||   || dz
     d      }t	         ||      t        ||||f      d       y rj   rJ   rK   r9   rR   r   r   r?   rA   r#   r$   r%   rU   s         rB   test_rndm_splevzTestBSpline.test_rndm_splevt   sV    !%%1a[[1q!Aw+"uR!Q3%@rW   c                    t         j                  j                  d       t        j                  t         j                  j                  d            }t         j                  j                  d      }t	        ||      }t        | }|j                  |j                  }}t        j                  ||   || dz
     d      }t         ||      t        ||      d       y )N     r   P   r[   r\   )r9   r>   seedsortr   r   r#   r%   rR   r   r   )r?   r^   yrK   rA   r#   r%   rU   s           rB   test_rndm_splrepzTestBSpline.test_rndm_splrepz   s    
		tGGBII$$R()IIR QlSMssACC1[[1q!Aw+"uR~E:rW   c                    t               }t        j                  |j                        |_        t        j                  |j
                  |j                     |j
                  |j                   dz
     d      }t         ||      d       y )Nr   d   r!   )rJ   r9   	ones_liker$   rR   r#   r%   r   )r?   rA   rU   s      rB   test_rndm_unityzTestBSpline.test_rndm_unity   s\    !ll133[[QSS133tAv;4"r"rW   c                 v   d\  }}t        j                  t         j                  j                  |            }t         j                  j                  |ddf      }t        |||      }||   || dz
     }}|||z
  t         j                  j                  d      z  z   }t	         ||      j
                  d       y )N   r,         sizer   r,   r-      )r,   r-   r   r   r   )r9   rz   r>   r   r   shape)	r?   r@   r%   r#   r$   rA   tmtprU   s	            rB   test_vectorizationzTestBSpline.test_vectorization   s    1GGBII$$Q'(II1a),Aq!1q!AwB27bii..y999QrU[[/2rW   c           	      n   d\  }}t        j                  t         j                  j                  ||z   dz               }t         j                  j                  |      }t         j                  |t         j                  j                  |dz         f   }t	        |||      t	        |||      }}|d   |d   z
  }t        j
                  |d   |z
  |d   |z   d      }	t         ||	       ||	      d       t         ||	      t        |	|||f      d       t         ||	      t        |	|||f      d       y )N)!   r,   r   r(   r   rZ   r[   r\   )r9   rz   r>   r_r   rR   r   r   )
r?   r@   r%   r#   r$   c_padrA   b_paddtrU   s
             rB   
test_len_czTestBSpline.test_len_c   s
    1GGBII$$QqSU+,IIQ a))!A#../1a#WQq%95rUQqT\[[1AbEBJ3"uRyu5"uR!Q3%@"uR!UA7eDrW   c           	          t               }|j                  \  }}}||   || dz
     }}dD ](  }t         |||g|       ||dz   |dz
  g|      d       * y )Nr   )TF绽|=&.>r\   rJ   rK   r   )r?   rA   r#   _r%   r   r   extraps           rB   test_endpointszTestBSpline.test_endpoints   sp    !%%1a1q!AwB# 	LFAr2h/rEz2:6?dL	LrW   c           	          t               }|j                  \  }}}t         |||dz   | dz
   dz
         |||dz   | dz
   dz         d       y )Nr   r   r   r\   r   )r?   rA   r#   r   r%   s        rB   test_continuityzTestBSpline.test_continuity   s\    !%%1a!AaC1+-.!AaC1+2E0F	rW   c           	      P   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             y )	Nr(   r   r   rZ   Trb   F)extrr   )r?   rA   r#   r$   r%   r   rU   masks           rB   test_extrapzTestBSpline.test_extrap   s    !%%1arUQqT\[[1AqbdGbL"5!r	b1aRT7l+ 	"T(5"T(6	8 	"$/b1a)+	-rW   c                     t               }|j                  \  }}}|d   dz
  |d   dz   g} ||      }t        t        j                  t        j
                  |                    y )Nr   r   r(   )rJ   rK   r   r9   allisnan)r?   rA   r#   r   r%   rU   yys          rB   test_default_extrapzTestBSpline.test_default_extrap   sX    !%%1adQh"	"rUBFF288B<(()rW   c           	      l   t         j                  j                  d       t        j                  t         j                  j                  d            }t         j                  j                  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             y )Nrv      r-   r,   periodicrb   r   r(   r   rZ   )r(   r         ?r   T)
r9   r>   ry   rz   r   r   rR   r   r   r   )	r?   r#   r$   r%   rA   r@   r   rU   xys	            rB   test_periodic_extrapz TestBSpline.test_periodic_extrap   s%   
		tGGBII$$Q'(IIQAq!4FFa!erUQqT\[[1AaD2Ir2qTR!A$Y1Q4!A$;//"uR!Q34 qTR!A$Y1Q4!A$;//Qrz2Abd4KLrW   c                     t               }|j                  \  }}}t        j                  |||f      }t	        j
                  ||   ||    d      }t         ||       ||      dd       y )Nr~   r[   rF   )rJ   rK   r	   from_spliner9   rR   r   )r?   rA   r#   r$   r%   pprU   s          rB   
test_ppolyzTestBSpline.test_ppoly   sa    !%%1a1ay)[[1q!uc*"r"vE>rW   c                 D   t               }|j                  \  }}}t        j                  |d   |d   d      }t        j                  ||f   }t        d|dz         D ])  }t        ||||f|      }t        | |||      d       + t         |||dz         dd       y )	Nr   r(   rZ   r   dernur[   r\   )rJ   rK   r9   rR   r   ranger   r   )r?   rA   r#   r$   r%   rU   r   yds           rB   test_derivative_rndmz TestBSpline.test_derivative_rndm   s    !%%1a[[1qub)UU2q5\AaC= 	;CrAq!9#.BB"E:	;
 	"1qu5rW   c                 p   d}g d}t         j                  j                  d       t         j                  ddt         j                  j                  d      ddf   }t	        |||      }t        j
                  g d      }t         |||dk7     dz
         |||dk7     dz                t        t        j                   |d	       |d
                    t        j
                  ddg      }t         ||dz
  d       ||dz   d             t        j
                  ddg      }t        t        j                  t        j                   ||dz
  d       ||dz   d                          t        t        j                  t        j                   ||dz
  d       ||dz   d                          y )Nr*   )r(   r(   r   r   r   r,   r-   r   r   r   r   r   rv   r   r   )r   r,   r-   r   r   r   g2H@gη   @r,   r-   r   r   )
r9   r>   ry   r   r   rd   r   r   allcloser   )r?   r%   r#   r$   rA   r^   x0x1s           rB   test_derivative_jumpsz!TestBSpline.test_derivative_jumps   sz    2
		tEE!Q		((+Q12Aq! JJ|$!AF)e+,!AF)e+,	.BKK(QwZ889 ZZA"u*+"u*+	-ZZABFF2;;qe':'(e':< = = 	> 	BFF2;;qUq'9'(Uq'9; < < 	=rW   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       y )Nr(   r-   rw   r   r   r*   r,   )r#   r[   r\   r   r   r   r*   r   r*   rP   r   r/   )r9   rR   r   basis_elementr   r   r#   r$   r%   B_0123rS   rT   s      rB   test_basis_element_quadraticz(TestBSpline.test_basis_element_quadratic  s    [[Q#!!L1"b133QSS/2	@"r
	0 !!L1[[Ar""aBB
3%	ArW   c           	          t               }|j                  \  }}}t        j                  ||   || dz
     d      }t	         ||      t        ||||      d       y )Nr   rw   r[   r\   )rJ   rK   r9   rR   r   _sum_basis_elementsrs   s         rB   test_basis_element_rndmz#TestBSpline.test_basis_element_rndm  sU    !%%1a[[1q!Aw+"22q!Q?eLrW   c                    t               }|j                  \  }}}|dz  }t        |||      }t        ||j                  j                  |      }t        ||j                  j
                  |      }t        j                  ||   || dz
     d      }t         ||      j                   ||      d       t         ||      j
                   ||      d       y )Ny      ?      @r   rw   r[   r\   )	rJ   rK   r   r$   realimagr9   rR   r   )	r?   rA   r#   r$   r%   ccb_reb_imrU   s	            rB   
test_cmplxzTestBSpline.test_cmplx$  s    !%%1a(^Ar1q!##((A&q!##((A&[[1q!Aw+"

DH59"

DH59rW   c                     t        j                  g d      }t        t        j                   |t        j
                                     y )Nr   )r   r   r   r9   r   r;   r?   rA   s     rB   test_nanzTestBSpline.test_nan1  s+    !!,/266#$rW   c                    t        d      }|j                  \  }}}t        |||      }t        j                  ||   || dz
     d      }t        d|      D ].  }|j                         }t         |||       ||      dd       0 y )Nr   r%   r   rw   -q=rF   )rJ   rK   r   r9   rR   r   
derivativer   )r?   rA   r#   r$   r%   b0rU   js           rB   test_derivative_methodz"TestBSpline.test_derivative_method6  s    !$%%1aQ1[[1q!Aw+q! 	FAABr1Iqu5uE	FrW   c                    t               }|j                  \  }}}t        j                  ||   || dz
     d      }t	         |j                         j                         |       ||      dd       t        j                  |||f   }t        j                  ||f      }t        |||      }t	         |j                         j                         |       ||      dd       y )Nr   rw   r[   rF   )
rJ   rK   r9   rR   r   antiderivativer   c_dstackr   rs   s         rB   test_antiderivative_methodz&TestBSpline.test_antiderivative_method?  s    !%%1a[[1q!Aw+7((*557;"E	7 EE!Q'NIIq!fAq!7((*557;"E	7rW   c                 Z   t        j                  g d      }t        |j                  dd      d       t        |j                  dd      d       t        |j                  dd      d       t        |j                  dd      d       t        |j                  ddd      d       t        |j                  ddd	      d       t        |j                  ddd	      d       t        |j                  ddd	      t	        j
                  dd|j                               d
|_        |j                         } |d       |d      z
  }t        |j                  dd      |       t        |j                  dd      d|z         t        |j                  dd      |       t        |j                  dd      d|z         t        |j                  dd       |d       |d      z
         t        |j                  dd       |d       |d      z
   |d      z    |d      z
         t        |j                  dd       |d       |d      z
   |d      z    |d      z
         t        |j                  dd       |d       |d      z
   |d      z    |d      z
  d|z  z          t        |j                  dd       |d       |d      z
         t        |j                  dd       |d       |d      z
         t        |j                  dd       |d       |d      z
  d|z  z
         y )Nr)   r   r   r   g      r(   Trb   Fr   r*   iii      ?r,   g      +@   r   ir-   )	r   r   r   	integrate_implr   rK   rc   r   )r?   rA   i
period_ints       rB   test_integralzTestBSpline.test_integralM  s   !!),Aq)3/Aq)84Aq)40 	B*A.Bt<a@Bu=sCAru=xH 	Aru=QAEE2	4 #qTAaD[
Aq):6Aq)2
?;B+Z8B+Q^<C-qv#?C+QqTAaD[1Q4-?!C&-HIHf5!qtad*QsV3	5C0!qtad*QsV3a*nD	F 	Ar*AaD1Q4K8B,adQqTk:Ar*AaD1Q4K!j.,HIrW   c                     g d}t        ||      }d|_        t        j                  |      }dD ]1  \  }}t	        |j                  ||      |j                  ||             3 y )Nr+   r   ))r   )r   r   )r      )r
   rc   r	   r   r   r   )r?   r^   rA   pr   r   s         rB   test_integrate_ppolyz TestBSpline.test_integrate_ppolyr  s`    q!$"a 5 	1FBAKKB/KKB/1	1rW   c                     G d dt               }|j                  g d      }t        |j                  |       t        |j	                         j                  |       t        |j                         j                  |       y )Nc                       e Zd Zy)'TestBSpline.test_subclassing.<locals>.BN)__name__
__module____qualname__ rW   rB   Br     s    rW   r   )r   r   r*   r*   )r   r   r   	__class__r   r   )r?   r   rA   s      rB   test_subclassingzTestBSpline.test_subclassing}  s[    	 	 OOL)Q[[!$Q\\^--q1Q%%'1115rW   axisr   r-   c                    d\  }}t        j                  dd||z   dz         }g d}|dz  }|j                  ||       t         j                  j                  |      }t	        ||||      }t        |j                  j                  ||   g|d | z   ||dz   d  z          t         j                  j                  d      }	t         ||	      j                  |d | t        |	j                        z   ||dz   d  z          |j                   dz
  |j                  fD ].  }
t        t         j                  t        fi t        ||||
	       0 t	        ||||      j                         t	        ||||      j                  d
      t	        ||||      j                         t	        ||||      j                  d
      fD ]"  }t        |j                  |j                         $ y )Nr   r   r   )r   r   r   r-   r   r   r   )r#   r$   r%   r   r*   )r9   rR   r   r>   r   r   r$   r   listndimr5   	AxisErrorr8   r   r   r   )r?   r   r@   r%   r#   shpos_axisr$   rA   xpaxb1s               rB   	test_axiszTestBSpline.test_axis  s   1KK1a!eai( !8
		(AII"%Aq!$'QSSYYl_r)8}4r(1*+F	H YYi(QrU[[	]T"((^3b!oE	G FF7Q;' 	:B",, : 1QR8:	:
 1a.99;1a.99!<1a.==?1a.==a@B 	*B !&&)		*rW   c                     d}g d}t        j                  g dg dg      }t        |||d      }t        ||d   |      }t        ||d   |      }t         |d	       |d	       |d	      g       y )
Nr*   )r   r   r*   r,   r-   r   r   )r(   r*   r   r(   )r*   r   r   r(   r   r   r   r3   )r9   arrayr   r   )r?   r%   r#   r$   splspl0spl1s          rB   test_neg_axiszTestBSpline.test_neg_axis  sn    !HHnm45aAB'q!A$"q!A$"SXS	4956rW   c                     d }d}d}dD ]  } ||||        t        ddd      D ]  } |||d        d}t        dd	      D ]  } |||d
        y)a7  
        Splines with different boundary conditions are built on different
        types of vectors of knots. As far as design matrix depends only on
        vector of knots, `k` and `x` it is useful to make tests for different
        boundary conditions (and as following different vectors of knots).
        c                 z   t         j                  j                  d       t        j                  t         j                  j	                  |       dz  dz
        }t         j                  j	                  |       dz  dz
  }|dk(  r|d   |d<   t        ||||      }t        j                  t        |j                        |z
  dz
        } t        |j                  ||      |      }t        j                  ||j                  |      j                         }t        ||j                  z  |d	
       t        ||d	
       y)zY
            To avoid repetition of code the following function is provided.
            rv   (   rw   r   r(   r   r%   bc_typer   r[   r\   N)r9   r>   ry   rz   random_sampler
   eyelenr#   r   design_matrixtoarrayr   r$   )	r@   r%   r  r^   r{   rg   r$   des_matr_defdes_matr_csrs	            rB   run_design_matrix_testszHTestBSpline.test_design_matrix_bc_types.<locals>.run_design_matrix_tests  s     IINN4 		//2R7"<=A		''*R/"4A*$u!%aaADs466{Q*+A074661a03L"00151244;GI  L466115AL,UCrW   r4   r,   clampednaturalr   r*   
not-a-knotr   r   r   N)r   )r?   r  r@   r%   bcs        rB   test_design_matrix_bc_typesz'TestBSpline.test_design_matrix_bc_types  s|    	D* ( 	.B#Aq"-	. q!Q 	8A#Aq,7	8 q! 	6A#Aq*5	6rW   rc   )FTr   degreer   c           	         t         j                  j                  d       t         j                  j                  d|dz   z        }t        j                  |      t        j
                  |      }}|}t         j                  t        j                  |dz
  |dz
  |      t        j                  ||d|dz   z        t        j                  |dz   |dz   |      f   }t        j                  t        |      |z
  dz
        }t        ||||      }	t         |	|      t        j                  ||||      j                                t        j                  |dz
  |dz
  |dz   |dz   g      }|s;t        j                   t"              5  t        j                  ||||       ddd       yt         |	|      t        j                  ||||      j                                y# 1 sw Y   yxY w)z;Test that design_matrix(x) is equivalent to BSpline(..)(x).rv   rP   r   r*   r   N)r9   r>   ry   r  aminamaxr   rR   r  r  r   r   r  r  r  rL   r   r7   )
r?   rc   r  r^   xminxmaxr%   r#   r$   bsplines
             rB   'test_design_matrix_same_as_BSpline_callz3TestBSpline.test_design_matrix_same_as_BSpline_call  s    			tII##B&1*$56WWQZdEE"++dQhq&9++dD!vz*:;++dQhq&9: ; FF3q6A:>"!Q;/AJ--aA{CKKM	

 HHdRi4#:tbyABz* <%%aA{;< < 
%%aA{;CCE< <s    GG"c                    t         j                  j                  d       d}d}t        j                  t         j                  j	                  |      dz  dz
        }t         j                  j	                  |      dz  dz
  }t        |||      }t        dd      D ]V  }|d | }|d | }t        j                  ||j                  |      j                         }	t        |	|j                  z  |d	
       X y )Nrv   rP   r,   r
  rw   r   r   r-   r[   r\   )r9   r>   ry   rz   r  r
   r   r   r  r#   r  r   r$   )
r?   r@   r%   r^   r{   rg   r   xcycr  s
             rB   test_design_matrix_x_shapesz'TestBSpline.test_design_matrix_x_shapes  s    
		tGGBII++A.3b89II##A&+b0!!Q!,q! 	CA2AB2AB"00151244;GI  L46612EB	CrW   c                 x    g d}t        j                  d|d      j                         }t        |g dgd       y )N)r!   r!   r!   r/   r0   r1   r1   r1   r/   r,   )g      ?gmਪ?gK}\UU?r.   r[   r\   )r   r  r  r   )r?   r#   des_matrs      rB   test_design_matrix_t_shapesz'TestBSpline.test_design_matrix_t_shapes  s7    ,((Q2::<;<"	$rW   c                 @   t         j                  j                  d       d}d}t        j                  t         j                  j	                  |      dz  dz
        }t         j                  j	                  |      dz  dz
  }t        |||      }t        t              5  t        j                  ||j                  d d d   |       d d d        d}g d	}g d
}t        t              5  t        j                  |||       d d d        y # 1 sw Y   CxY w# 1 sw Y   y xY w)Nrv   rP   r,   r
  rw   r   r(   r*   )r.   r!   r/   r0   r1   g      @ra   )r9   r>   ry   rz   r  r
   r5   r7   r   r  r#   )r?   r@   r%   r^   r{   rg   r#   s          rB   test_design_matrix_assertsz&TestBSpline.test_design_matrix_asserts  s    
		tGGBII++A.3b89II##A&+b0!!Q!, :& 	6!!!TVVDbD\15	6$:& 	+!!!Q*	+ 	+	6 	6	+ 	+s   (D'DDDr  )r  r  r   r  c                 
   t         j                  j                  d       t        j                  t         j                  j                  d            }t         j                  j                  d      }|dk(  r|d   |d<   t	        |||      }t        j                  ||      }t        j                  ddd      }t         ||       ||      d	       t        |||      }t        |j                  |j                  d	       y )
Nrv   rw   r   r   r(   r  r   rE   r\   )r9   r>   ry   rz   r   r   from_power_basisrR   r   r
   r$   )r?   r  r^   r{   cbrg   rU   bspl_news           rB   test_from_power_basisz!TestBSpline.test_from_power_basis   s     			tGGBII$$R()IIR j aDAbEAw/''G<[[Ar"2Ru5%aG<

7rW   c                    t         j                  j                  d       t        j                  t         j                  j                  d            }t         j                  j                  d      t         j                  j                  d      dz  z   }|dk(  r|d   |d<   t	        |||      }t        j                  ||      }t        ||j                  |      }t        ||j                  |      }t        |j                  j                  |j                  d|j                  z  z   j                         t        |j                  |j                  d|j                  z  z   d	       y )
Nrv   rw   r    r   r   r(   r-  rE   r\   )r9   r>   ry   rz   r   r   r.  r
   r   r   r   r$   dtyper   )r?   r  r^   r{   r/  rg   bspl_new_realbspl_new_imags           rB   test_from_power_basis_complexz)TestBSpline.test_from_power_basis_complex/  s    			tGGBII$$R()IIR 299#3#3B#7"#<<j aDAbEAw/''G<*1affgF*1affgFTVV\\MOO&(=??&:%;<AE	C}.!/5:	<rW   c                     t        j                  g d      }t        j                  g d      }t        j                  t	        ||d      d      }t        |j                  g dd       y)	a}  
        For x = [0, 1, 2, 3, 4] and y = [1, 1, 1, 1, 1]
        the coefficients of Cubic Spline in the power basis:

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

        It could be shown explicitly that coefficients of the interpolating
        function in B-spline basis are c = [1, 1, 1, 1, 1, 1, 1]
        r+   )r   r   r   r   r   r  r-  )r   r   r   r   r   r   r   rE   r\   N)r9   r  r   r.  r   r   r$   )r?   r^   r{   rg   s       rB   test_from_power_basis_exmpz&TestBSpline.test_from_power_basis_exmp@  sO     HH_%HH_%''Aq)(L09; 5EBrW   c                 8   t        j                  ddg      }t        j                  dg      }|j                  d       |j                  d       t        j                  ddd      }|j                  d       t	        ||d      }t         ||      d       y )	Nr   r   r0   FwriterP   r"   r,   )r9   r  setflagsrR   r   r   )r?   r#   r$   rU   rA   s        rB   test_read_onlyzTestBSpline.test_read_onlyS  s{    HHaVHHcUO	


	


[[Ar"
% a1""q!rW   N).r   r   r   rC   rN   rV   r_   rh   rp   rt   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rL   markparametrizer   r   r  r  r"  r&  r)  r+  r1  r6  r8  r=  r   rW   rB   r   r      s   !F
:	?./A
;#3E$L-*M$?6=8AM:%
F7#JJ	16 [[VU2q\2* 3*:7(6T [[],EF[[XuQx0 1 G4C"$+$ [[Y )C D8D8 [[Y )C D<D<C&"rW   r   c            
          dd} dD ]S  }t        |      }t        t        |            D ].  \  }} | ||       t        d|dz         D ]  } | |||dd        0 U y )Nc           
         | j                   \  }}}t        j                  |      }t        j                  |d   dz
  d|dd  |d d z   z  |d   dz   f   }t	        t        ||||f|       | ||      ||d| d| j                          y )	Nr   g?r   r   r(   zder = z  k = )rG   rH   err_msg)rK   r9   uniquer   r   r   r%   )	rA   r   r   rG   rH   r#   r$   r%   r^   s	            rB   check_splevz,test_knots_multiplicity.<locals>.check_spleve  s    %%1aIIaLEE!A$s(C122A/2s:;a!QC0!As)se6!##.G	IrW   )r   r*   r,   r-   r   r   r   r   )r   r[   r[   )rJ   	enumerate_make_multiplesr   )rD  r%   rA   r   r   r   s         rB   test_knots_multiplicityrG  a  ss    I  6!$q12 	6EArAQ!} 6B3u56	66rW   c                 b   |dk(  r||   | cxk  r||dz      k  rdS  dS |||z      ||   k(  rd}n)| ||   z
  |||z      ||   z
  z  t        | |dz
  ||      z  }|||z   dz      ||dz      k(  rd}||z   S |||z   dz      | z
  |||z   dz      ||dz      z
  z  t        | |dz
  |dz   |      z  }||z   S )zw
    Naive way to compute B-spline basis functions. Useful only for testing!
    computes B(x; t[i],..., t[i+k+1])
    r   r   r!   r.   _naive_B)r^   r%   r   r#   c1c2s         rB   rJ  rJ  x  s   
 	Avda(!AaC&(s1(c11v1~!A$h1Q3!A$'(1ac1a*@@1Qx1QqS6 G !AhlQqs1uX!A#./(1ac1Q32JJGrW   c                          k(  rnt        j                         dz
      cxk  rdz      k  sJ  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   R   K   | ]  }|z
     t        |z
        z     y wNrI  ).0r   r$   r   r%   r#   r^   s     rB   	<genexpr>z_naive_eval.<locals>.<genexpr>  s-     F1q1vAqsA..Fs   $'r   )r9   searchsortedr  sumr   )r^   r#   r$   r%   r   s   ````@rB   rk   rk     s     	AaDyOOAq!A%Q41!A#6a#a&1*n$$Fa1FFFrW   c                      t              dz   z
  }|dz   k\  sJ t              |k\  sJ     cxk  r	|   k  sJ  J t         fdt        |      D              S )z'Naive B-spline evaluation, another way.r   c              3   F   K   | ]  }|   t        |      z    y wrO  rI  )rP  r   r$   r%   r#   r^   s     rB   rQ  z _naive_eval_2.<locals>.<genexpr>  s%     =qqthq!Q**=s   !)r  rS  r   )r^   r#   r$   r%   r@   s   ```` rB   rl   rl     si    A!A#A!8O8q6Q;;Q41!=E!H===rW   c                    t        |      |dz   z
  }||dz   k\  sJ t        |      |k\  sJ d}t        |      D ]F  } t        j                  ||||z   dz    d      |       }|||   t	        j
                  |      z  z  }H |S )Nr   r.   r*   Frb   )r  r   r   r   r9   
nan_to_num)r^   r#   r$   r%   r@   sr   rA   s           rB   r   r     s    A!A#A!8O8q6Q;;
A1X %@G!!!Aac!e*%@C	QqTBMM!$$$% HrW   c                     t        j                  |       } t        j                  | | dk  | dkD  z  | dk\  | dk  z  | dk\  | dk  z  gd d d g      S )z+ A linear B-spline function B(x | 0, 1, 2).r   r*   r   c                      y)Nr.   r   r^   s    rB   <lambda>zB_012.<locals>.<lambda>      rW   c                     | S rO  r   r[  s    rB   r\  zB_012.<locals>.<lambda>  s    A rW   c                     d| z
  S Nr/   r   r[  s    rB   r\  zB_012.<locals>.<lambda>  s
    A rW   )r9   
atleast_1d	piecewiser[  s    rB   r]   r]     se    
aA<<QUq1u-!VA.!VQ/1 )+~FH HrW   c                     t        j                  |       } | dk  | dkD  | dk  z  | dkD  g}|dk(  r	d d d g}n|dk(  r	d d d	 g}nt        d
|z        t        j                  | ||      }|S )z0A quadratic B-spline function B(x | 0, 1, 2, 3).r   r*   r   c                     | | z  dz  S r`  r   r[  s    rB   r\  zB_0123.<locals>.<lambda>  s    1Q3r6 rW   c                     d| dz
  dz  z
  S )Ng      ?r   r*   r   r[  s    rB   r\  zB_0123.<locals>.<lambda>  s    41T6A+- rW   c                     d| z
  dz  dz  S )Nr0   r*   r   r[  s    rB   r\  zB_0123.<locals>.<lambda>  s    BqD19q= rW   c                      yNr!   r   r[  s    rB   r\  zB_0123.<locals>.<lambda>  r]  rW   c                      y)Ng       r   r[  s    rB   r\  zB_0123.<locals>.<lambda>  r]  rW   c                      yrh  r   r[  s    rB   r\  zB_0123.<locals>.<lambda>  r]  rW   znever be here: der=%s)r9   ra  r7   rb  )r^   r   condsfuncspiecess        rB   r   r     s    
aAUQUq1u%q1u-E
ax!-(* 
 03677\\!UE*FMrW   c                    t         j                  j                  d       t        j                  t         j                  j                  | |z   dz               }t         j                  j                  |       }t	        j
                  |||      S )N{   r   )r9   r>   ry   rz   r   construct_fast)r@   r%   r#   r$   s       rB   rJ   rJ     s`    IINN3
		  1Q'(A
		A!!!Q**rW   c              #     K   | j                   | j                  }}| j                  j                         }|d   |dd |d   |d<   t	        |||       | j                  j                         }|d   |d|dz    t	        |||       | j                  j                         }|d   || dz
  d t	        |||       yw)	zIncrease knot multiplicity.         r   r   Nr   r(   )r$   r%   r#   copyr   )rA   r$   r%   t1s       rB   rF  rF    s     33qA	
B2Br"IVBrF
"a
	
B!uBt!H
"a
	
B2Br!tuI
"a
s   B<B>c                   N    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zy)TestInteropc                 l   t        j                  ddt         j                  z  d      }t        j                  |      }t	        ||      }|j
                  |j                  |j                  f| _        |||c| _	        | _
        | _        t        j                  ddt         j                  z  d      | _        t         j                  |j                  |j                  |j                  f   }t        j                  ||f      | _        t!        |j
                  | j                  |j                        | _        y )Nr   r1   )   rt  )r9   rR   picosr
   r#   r$   r%   rK   rU   r   rA   xnewr   r   rL  r   b2)r?   rU   r   rA   rL  s        rB   setup_methodzTestInterop.setup_method  s    [[BruuHb)VVBZr2&CCacc?#%r1 $&KK2bee8R0	UU133QSS=!))RH%!##tww,rW   c           	         | j                   | j                  | j                  }}}t        t	        ||       ||      dd       t        t	        ||j
                         ||      dd       t        |D cg c]  }t	        ||       c} ||      dd       t        t        d      5  t	        ||       d d d        t        t        d|j                  j                              dz   }|j                  j                  |      }|j                  ||j                  f}t        t	        ||       ||      j                  |      dd       y c c}w # 1 sw Y   xY w)NrE   rF   zCalling splev.. with BSplinematchr   r   )r}  rA   r~  r   r   rK   r5   r7   tupler   r$   r   	transposer#   r%   )r?   r}  rA   r~  r^   r   r   rK   s           rB   
test_splevzTestInterop.test_splev  s   iia 	dA$e%	9dAEE*$e%	9d3q!3$e%	9
 :-KL 	$O	 5BDDII&'$.TT^^BttRdC(4**2.U	H 4
	 	s   6E+EEc                    | j                   | j                  }}t        ||      }t        j                  ||      \  }}}t	        |d   |d       t	        |d   |d       t        |d   |       t        ||d      \  }}}}t	        |d   |d       t	        |d   |d       t        |d   |       t        ||      }	t	        ||	d       t        | }
t	        | |
|      d       y )Nr   rE   r\   r   r*   T)full_output)rU   r   r   r   r   r   r   r   )r?   r^   r{   rK   r#   r$   r%   tck_fr   r   rA   s              rB   test_splrepzTestInterop.test_splrep  s    ww1Ql,,q!$1aA.A.SVQ  1$7q!Qa!%0a!%0U1Xq! 1c]2E* SM1Q4e,rW   c                 &   | j                   | j                  }}t        j                  ||f   }t	        t
              5  t        ||       d d d        t	        t
              5  t        j                  ||       d d d        t	        t        d      5  t        |d d |d d        d d d        t	        t        d      5  t        j                  |d d |d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xxY w# 1 sw Y   XxY w# 1 sw Y   y xY w)Nm > k must holdr  r,   )	rU   r   r9   r   r5   r7   r   r   r6   )r?   r^   r{   y2s       rB   test_splrep_errorszTestInterop.test_splrep_errors$  s     ww1UU1a4[:& 	1bM	:& 	 LLB	  9,=> 	!1Ra5!BQ% 	!9,=> 	'LL2A"1&	' 	'	 		  	 	! 	!	' 	's/   C#!C/C;=D#C,/C8;DDc                    t        j                  d      j                  d      }t        |      \  }}t	        j                  |      \  }}t        ||d       t        t        ||      |d       t        t        ||      |d       t        |dd      \  \  }}}}}t        ||d       t        t        ||      |d       y )Nr   r,   r   rE   r\   r   T)rX  r  )r9   r=   re   r   r   r   r   )	r?   r^   rA   urK   u1b_fu_fr   s	            rB   test_splprepzTestInterop.test_splprep4  s    IIbM!!&)qz1--"R 	2E*aQU3aqu5 &a1$?
cAq!3U+c37rW   c                    t        j                  d      j                  d      }t        t        d      5  t        |       d d d        t        t        d      5  t        j
                  |       d d d        t        j                  ddd      }t        t        d	      5  t        |g       d d d        t        t        d	      5  t        j
                  |g       d d d        g d
}t        t        d      5  t        |g       d d d        t        t        d      5  t        j
                  |g       d d d        g d}g d}t        t        d      5  t        |gd |g  d d d        y # 1 sw Y   0xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   vxY w# 1 sw Y   y xY w)N<   r   ztoo many values to unpackr  r   r
  r,   )numr  ) >Ir   >Kr  zInvalid inputs)r   r,   r*   r-   )r   g333333?g?r   )	r9   r=   re   r5   r7   r   r   rR   r6   )r?   r^   r  s      rB   test_splprep_errorszTestInterop.test_splprep_errorsC  sy   IIe$$Y/:-HI 	AJ	:-HI 	MM!	 KK21%9,=> 	QCL	9,=> 	MM1#	
 E:-=> 	QCL	:-=> 	MM1#	 :-=> 	%qc4^$	% 	%/	 		 	
	 		 		 		 		% 	%sS   E0E="F
F<F""F.F:0E:=F
FF"F+.F7:Gc                    | j                   | j                  }}t        j                  g d      t        j                  z  }t        t        |      |dd       t        t        |j                  |j                  |j                  f      |dd       t        t        d      5  t        |d       d d d        |j                  j                  dd	d
      }t        j                  t        |j                  ||j                  fd            }t        |j                  d       t        ||z
  d
d       y # 1 sw Y   xY w)N)r   r   r3   g      @gHz>rF   zCalling sproot.. with BSpliner  rZ   )mestr   r*   r   )r,   r*   r-   r   r\   )rA   r~  r9   r  r{  r   r   r#   r$   r%   r5   r7   r  rd   r   r   )r?   rA   r~  rootsc2rrrs         rB   test_sprootzTestInterop.test_sproot`  s    2-.ruu4q	5t$?QSS!##/TM :-LM 	 2B	  ddnnQ1%ZZc2440r:;RXXy)U
AE2	  	 s   #D55D>c           	      N   | j                   | j                  }}t        t        dd|      t        dd|j                        d       t        t        dd|      |j                  dd      d       t        t        d      5  t        dd|       d d d        |j                  j                  ddd      }t        j                  t        dd|j                  ||j                  f            }t        |j                  d       t        |t        dd|      d       y # 1 sw Y   xY w)	Nr   r   r[   r\   zCalling splint.. with BSpliner  r*   )r,   r*   )rA   r~  r   r   rK   r   r5   r7   r$   r  r9   rd   r#   r%   r   r   )r?   rA   r~  r  integrs        rB   test_splintzTestInterop.test_splintq  s    2q!Qq!QUU+%	9q!QAq)	7 :-LM 	1a	 ddnnQ1%F1a"$$RTT):;<V\\6*q!Qe	5	 	s   DD$c           	         | j                   | j                  fD ]N  }t        |j                        t        |j                        z
  }|dkD  rRt
        j                  |j                  t        j                  |f|j                  j                  dd  z         f   |_        dD ]  }t        |      }t        j                  |j                  |j                  |j                  f      }t        |j                  |d   d       t        |j                  |d   d       t        |j                  |d          t        t        |t                      t        t        |t"                      Q y Nr   r   rY   rE   r\   r*   )rA   r~  r  r#   r$   r9   r   zerosr   r   r   r%   r   r   r   
isinstancer   r  r?   rA   ctr@   bdtck_ds         rB   test_splderzTestInterop.test_splder  s   &&$''" 	2AQSSCH$BAveeACC2%!##))AB-*?!@@A 2AYacc133_5eAhU;eAhU;RTT58,
2w/0
5%012	2rW   c           	         | j                   | j                  fD ]N  }t        |j                        t        |j                        z
  }|dkD  rRt
        j                  |j                  t        j                  |f|j                  j                  dd  z         f   |_        dD ]  }t        |      }t        j                  |j                  |j                  |j                  f      }t        |j                  |d   d       t        |j                  |d   d       t        |j                  |d          t        t        |t                      t        t        |t"                      Q y r  )rA   r~  r  r#   r$   r9   r   r  r   r   r   r%   r   r   r   r  r   r  r  s         rB   test_splantiderzTestInterop.test_splantider  s   &&$''" 	2AQSSCH$BAveeACC2%!##))AB-*?!@@A 2]((!##qssACC9eAhU;eAhU;RTT58,
2w/0
5%012	2rW   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        |t                     t        t        |t                     t        t        |j                  j                              }|j                  j!                  |dd  dz         }	t        ||j                  |	|j                  f      }
t        ||      }t        t#        j$                  t        ||
            j!                  ddd       ||      d       t        t        |t                     t        t        |
t                     y )Nr*   r   r   rE   r\   r  r   )rA   r~  rU   r#   r   r   r$   r%   r   r   r   r  r   r  r   r   r  r9   rd   )r?   rA   r~  rU   r   tnbntck_nr   r   tck_n2bn2s               rB   test_insertzTestInterop.test_insert  s^   FFDGGTWWr2CCHHM!##a&133qs8#$2qM6"qssACCo#>Eb"b%(u	6
2w'(
5%() 5#$TT^^BqrFTM*RTT2rtt,-Rn 	

5V#45??1aHBe	-
3()
65)*rW   N)r   r   r   r  r  r  r  r  r  r  r  r  r  r  r   rW   rB   rx  rx    s:    -H6-0' 8%:3"5&2 2 +rW   rx  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                  j                  dg d      d        Zej                  j                  dg d      d	        Zd
 Zd Zej                  j                  dg d      d        Zd Zd Zd Zej                  j                  dg d      d        Zd Zd Zd Zd Zd Zej                  j;                  d      d        Zd Zd Z d Z!d Z"d Z#d  Z$d! Z%ej                  j                  dg d"      d#        Z&d$ Z'd% Z(d& Z)d' Z*d( Z+y))*
TestInterpr.   r/   c                     t        t              5  t        | j                  | j                  d       d d d        y # 1 sw Y   y xY w)Nr3   r   )r5   r6   r
   rU   r   )r?   s    rB   test_non_int_orderzTestInterp.test_non_int_order  s3    9% 	8tww37	8 	8 	8s	   #<Ac                 2   t        | j                  | j                  d      }t         || j                        | j                  dd       t        | j                  | j                  dd      }t         || j                        | j                  dd       y )Nr   r   r[   rF   r(   r%   r   r
   rU   r   r   r   s     rB   test_order_0zTestInterp.test_order_0  d    tww15$''
DGG%eDtww12>$''
DGG%eDrW   c                 2   t        | j                  | j                  d      }t         || j                        | j                  dd       t        | j                  | j                  dd      }t         || j                        | j                  dd       y )Nr   r   r[   rF   r(   r  r  r   s     rB   test_linearzTestInterp.test_linear  r  rW   r%   r   c                 |    g d}g d}t        t        d      5  t        |||       d d d        y # 1 sw Y   y xY w)Nr   r   r*   r,   r-   r   )r   r   r*   r,   r-   r   r   r   zShapes of xr  r   r5   r7   r
   r?   r%   r^   r{   s       rB   test_incompatible_x_yz TestInterp.test_incompatible_x_y  s7    $:]; 	*q!q)	* 	* 	*s   2;c                    g d}g d}t        t        d      5  t        |||       d d d        g d}t        t        d      5  t        |||       d d d        g d}t        j                  |      j                  d      }t        t        d      5  t        |||       d d d        y # 1 sw Y   xY w# 1 sw Y   fxY w# 1 sw Y   y xY w)	N)r   r   r   r*   r,   r-   r  zx to not have duplicatesr  r   )r   r*   r   r,   r-   r   zExpect x to be a 1D strictly)r   r(   )r5   r7   r
   r9   rd   re   r  s       rB   test_broken_xzTestInterp.test_broken_x  s    :-GH 	*q!q)	* :-KL 	*q!q)	* JJqM!!'*:-KL 	*q!q)	* 	*	* 	*	* 	*
	* 	*s#   B.B:C.B7:CCc                     dD ]L  }t        | j                  | j                  |      }t         || j                        | j                  dd       N y )Nr  r[   rF   r  )r?   r%   rA   s      rB   test_not_a_knotzTestInterp.test_not_a_knot  sC     	IA"477DGGQ7AAdggJe%H	IrW   c                 Z   t        | j                  | j                  dd      }t         || j                        | j                  dd       t	        dd      D ]:  }t         || j                  d   |       || j                  d	   |      d
       < t        | j                  | j                  ddd	      }t         || j                        | j                  dd       t	        dd      D ]:  }t         || j                  d   |       || j                  d	   |      d
       < y )Nr   r   r  r[   rF   r   r   r   r(   gdy=r\   r%   r  r   )r
   rU   r   r   r   )r?   rA   r   s      rB   test_periodiczTestInterp.test_periodic  s    tww1jI$''
DGG%eD q! 	SAAdggajQ/4772;11EER	S tww1jrR$''
DGG%eDq! 	SAAdggajQ/4772;11EER	SrW   )r*   r,   r-   r   r   r   c                 J   d}t         j                  j                  d       t        j                  t         j                  j	                  |      dz        }t         j                  j	                  |      dz  }|d   |d<   t        |||d      }t         ||      |d	
       y )Nr   rv   rP   r~   r(   r   r   r  r[   r\   )r9   r>   ry   rz   r  r
   r   )r?   r%   r@   r^   r{   rA   s         rB   test_periodic_randomzTestInterp.test_periodic_random   s     
		tGGBII++A.34II##A&,u!q!q*=!ae,rW   c                    | j                   j                  d   }t        j                  j	                  d       t        j                  j                  |      dz  t        j                  z  }t        j                  |      }d|d<   dt        j                  z  |d<   t        j                  d|f      }t        j                  |      |d<   t        j                  |      |d<   t        ||ddd	      }t        |      D ]   }t         |||         |d d |f   d
       " t         ||d          ||d         d
       y )Nr   rv   r*   r.   r(   r   r   r   r  r[   r\   )rU   r   r9   r>   ry   r  r{  rz   r  sinr|  r
   r   r   )r?   r@   r^   r{   rA   r   s         rB   test_periodic_axiszTestInterp.test_periodic_axis  s    GGMM!
		tII##A&*RUU2GGAJ!BEE	"HHaVvvay!vvay!q!q*1Eq 	:AAadGQq!tW59	:!A$1R56rW   c                 h   t         j                  j                  d       d}d}t        j                  t         j                  j	                  |            }t         j                  j	                  |      }|d   dz
  |d<   t        t              5  t        |||d       d d d        y # 1 sw Y   y xY w)	Nrv   r   r   r(   r   r   r   r  )r9   r>   ry   rz   r  r5   r7   r
   )r?   r%   r@   r^   r{   s        rB   test_periodic_points_exceptionz)TestInterp.test_periodic_points_exception  s    
		tGGBII++A./II##A&uqy!:& 	>q!q*=	> 	> 	>s   B((B1c                    t         j                  j                  d       d}d}t        j                  t         j                  j	                  |            }t         j                  j	                  |      }t        j
                  |d|z  z         }t        t              5  t        ||||d       d d d        y # 1 sw Y   y xY w)Nrv   r,   r   r*   r   )	r9   r>   ry   rz   r  r  r5   r7   r
   )r?   r%   r@   r^   r{   r#   s         rB   test_periodic_knots_exceptionz(TestInterp.test_periodic_knots_exception%  s    
		tGGBII++A./II##A&HHQQY:& 	7q!Q:6	7 	7 	7s   B88C)r*   r,   r-   r   c                    t        | j                  | j                  |d      }t        | j                  | j                  d|      }t	        | j                  |      }t        | || j                        d       t        d|      D ]:  }t	        | j                  ||      }t        | || j                  |	      d
       < y )Nr   r  T)perr%   r[   r\   r   r   r   r   )r
   rU   r   r   r   r   r   )r?   r%   rA   rK   r  r   s         rB   test_periodic_splevzTestInterp.test_periodic_splev0  s     tww1jITWWdgg415DGGS!QtwwZe4 q! 	?A!,CC477q!1>	?rW   c                    t        | j                  | j                  dd      }t        | j                  | j                  d      }t	         || j                         || j                        d       d}t        j                  t
        j                  j                  |      dz        }t
        j                  j                  |      dz  }|d	   |d
<   t        ||dd      }t        ||d      }t	         ||       ||      d       y )Nr,   r   r  r-  r[   r\   rP   r~   r(   r   )	r
   rU   r   r   r   r9   rz   r>   r  )r?   rA   cubr@   r^   r{   s         rB   test_periodic_cubiczTestInterp.test_periodic_cubic=  s    tww1jI$''477J?$''
CLu= GGBII++A.34II##A&,u!q!q*=!Q
3!c!f51rW   c                 T   dt        | j                  | j                  d      }t        | j                        t	        | j                  | j                        t        j                  fd      }t         || j                         || j                        d       y )Nr,   r   r  c                      t        |       S rO  )rk   )r^   r$   r%   r#   s    rB   r\  z6TestInterp.test_periodic_full_matrix.<locals>.<lambda>S  s    K1a$; rW   r[   r\   )r
   rU   r   r   r   r9   	vectorizer   )r?   rA   r   r$   r%   r#   s      @@@rB   test_periodic_full_matrixz$TestInterp.test_periodic_full_matrixL  su     tww1jIDGGQ'&twwA>\\;<$''
BtwwKe<rW   c                    dg}t        | j                  | j                  dd |f      }t         || j                        | j                  dd       t         || j                  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       y )	Nr   g       @r*   r  r[   rF   r(   r   r   r  )r?   r   rA   s      rB   test_quadratic_derivzTestInterp.test_quadratic_derivV  s    i tww1tSkJ$''
DGG%eD$''"+q)3q6!95uM tww1sDkJ$''
DGG%eD$''!*a(#a&)%eLrW   c                    d}dgdg}}t        | j                  | j                  |||f      }t         || j                        | j                  dd       t         || j                  d   d       || j                  d	   d      g|d   d   |d   d   gdd       d
gd
g}}t        | j                  | j                  |||f      }t         || j                        | j                  dd       y )Nr,   r   r0   )r   r1   r-  r[   rF   r   r   r(   r*   r   r  )r?   r%   der_lder_rrA   s        rB   test_cubic_derivzTestInterp.test_cubic_derivc  s      y7)utwwUENK$''
DGG%eD4771:q)1TWWR[!+<=q!eAhqk2U	L x&utwwUENK$''
DGG%eDrW   c           	         d\  }}t        j                  |      j                  t         j                        }t        j                  |      }ddg}ddg}t        |||||f      }t         ||      |dd       t         ||d	   d
       ||d	   d      g|D 	cg c]  \  }}	|		 c}	}       t         ||d   d
       ||d   d      g|D 	cg c]  \  }}	|		 c}	}       y c c}	}w c c}	}w )N)r   r   )r   g      ()r*   r   r  )r*   r0   r  r[   rF   r   r   r*   r(   )r9   r=   astypefloat_r  r
   r   )
r?   r%   r@   r^   r{   r  r  rA   r   vals
             rB   test_quintic_derivszTestInterp.test_quintic_derivsr  s    1IIaL		*FF1IF#'"q!q5%.A!ae%81Q4QqtQZ0.34"c4	61R5!a"qk2.34"c4	6 54s   C&C,unstable)reasonc                     d}t        | j                  |      }ddg}t        | j                  | j                  |||d f      }t	         || j                        | j                  dd       y )Nr,   r  )r*   r1   r-  r[   rF   )r   rU   r
   r   r   )r?   r%   r#   r  rA   s        rB   test_cubic_deriv_unstablez$TestInterp.test_cubic_deriv_unstable  s[     DGGQ'"twwAt}M$''
DGG%eDrW   c                    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       || j                  d   d      gd
d
gd       y )Nr*   r   r   r(   r/   r  r-  r[   rF   r.   r\   )r9   r   rU   r
   r   r   )r?   r%   r#   rA   s       rB   test_knots_not_data_sitesz$TestInterp.test_knots_not_data_sites  s     EE4771:-1%7712;"-3772;.!A#&' ( twwA)/6(';= 	$''
DGG%eD4771:q)1TWWR[!+<=Bx	rW   c                     d}ddg}ddg}t        |||dgdgf      }t        j                  dd      }|dz  }t         ||      |dd       y )	Nr,   r.   r!   r   r.   r  r-  r[   rF   )r
   r9   rR   r   )r?   r%   r^   r{   rA   rU   r   s          rB   test_minimum_points_and_derivz(TestInterp.test_minimum_points_and_deriv  s_     HHq!Q'WI0FG[[R U"rE:rW   c                    g dx}}t        t              5  t        ||dgd f       d d d        t        t              5  t        ||d       d d d        t        t              5  t        ||dg       d d d        t        t              5  t        ||d       d d d        d\  }}t        t              5  t        ||||f       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   uxY w# 1 sw Y   [xY w# 1 sw Y   y xY w)N)r!   r*   r,   r-   r   r   r  r-  *   )r  r  r  )r?   r^   r{   lrs        rB   test_deriv_speczTestInterp.test_deriv_spec  s    %$A:& 	@q!wi->?	@ :& 	6q!W5	6 :& 	8q!gY7	8 :& 	1q!R0	1
 "1:& 	5q!aV4	5 	5	@ 	@	6 	6	8 	8	1 	1	5 	5s:   CC%C)C57DCC&)C25C>D
c                 j   d}| j                   }| j                  d| j                  z  z   }dgdg}}t        |||||f      }t         ||      |dd       t         ||d   d	       ||d
   d	      g|d   d	   |d   d	   gdd       dD ]%  }t        |||      }t         ||      |dd       ' y )Nr,   r    )r   y              @)r   y      @       @r-  r[   rF   r   r   r(   )r   r   r   )rU   r   r
   r   )r?   r%   rU   r   r  r  rA   s          rB   test_complexzTestInterp.test_complex  s    WWWWs477{" !zK=ur2q5%.A"rE:2a5!a2l3q!eAhqk2U	L  	?A"2rQ/AAbE2E>	?rW   c                    t        j                  d      j                  t         j                        }t        j                  d      j                  t         j                        }dD ]  }t	        |||      } ||        y )NrP   r   r   )r9   r=   r  int_r
   )r?   r^   r{   r%   rA   s        rB   test_int_xyzTestInterp.test_int_xy  s`    IIbM  )IIbM  )  	A"1a1-AaD	rW   c                 |    t        j                  ddd      }|d d d   }|d d d   }dD ]  }t        |||        y )Nr(   r   r~   r   r   r   )r9   rR   r
   )r?   rU   r^   r{   r%   s        rB   test_sliced_inputzTestInterp.test_sliced_input  sI    [[Q$ssGssG 	*Aq!q)	*rW   c                     t        j                  d      j                  t              }|dz  }t         j                  t         j
                  t         j
                   fD ]  }||d<   t        t        t        ||        y )NrP   r*   r(   )	r9   r=   r  floatr;   r<   r5   r7   r
   )r?   r^   r{   zs       rB   test_check_finitezTestInterp.test_check_finite  sa    IIbM  'qD&&"&&266'* 	@AAbE*&8!Q?	@rW   )r   r*   r,   r   c                 v    t        t        d            }|D cg c]  }|dz  	 }}t        |||       y c c}w )NrP   r*   r   )r   r   r
   )r?   r%   r^   ar{   s        rB   test_list_inputzTestInterp.test_list_input  s9     rOaQT1a1% s   6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	       y )Nr   r!   r/   r0   r1   r,   r  r[   rF   r   r(   )r9   r   r  rU   r|  r
   r   )r?   r   r  r  rA   s        rB   test_multiple_rhszTestInterp.test_multiple_rhs  s    UU266$''?BFF477O34b"Xb"Xtwwa%H$''
BU?$''!*a(%(1+EN$''"+q)58A;UOrW   c                 Z   t         j                  j                  d       d\  }}t        j                  t         j                  j                  |            }t         j                  j                  |dddf      }t	        |||      }t        |j                  j                  |dddf       dt         j                  j                  d      fg}dt         j                  j                  d      fg}t	        |||||f	      }t        |j                  j                  ||z   dz
  dddf       y )
Nrv   r,   r   r   r   r   r   r   r   r   r   r-  )r9   r>   ry   rz   r
   r   r$   r   )r?   r%   r@   r^   r{   rA   d_ld_rs           rB   test_shapeszTestInterp.test_shapes  s    
		t1GGBII$$!$,-II1aA,/q!Q'QSSYYAq!- 299##I./0299##I./0q!Qc
;QSSYYQAq! 45rW   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        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                  j                  d       d\  }}t        j                  t         j                  j                  |            }t         j                  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       y # 1 sw Y   xY w)Nr,   r  r  r  rE   r\   )r  r  )r   r   r*   )Nr  r  r  typor   r.   r  rv   r  r   r   r   r   r  r-  r  )r9   r  rU   r
   r   r$   r5   r7   r   r|  r>   ry   rz   r  )r?   r   r   r~  r  r  r%   r@   r^   r{   r  r  s               rB   test_string_aliaseszTestInterp.test_string_aliases  s   VVDGG_  q)DqF8fX:NObdd/  q(>@q*0F8(<>bdd/  q:KLq4(:LMbdd/  q,Gq$?bdd/ :& 	Atwwa@	A UU266$''?BFF477O34b"Xb"Xq5%.Iq(>@bdd/ 			t1GGBII$$!$,-II1aA,/ 288I&'(288I&'(1a#s<1a;bdd//	A 	As   
MMc                 t   t         j                  j                  d       d\  }}t        j                  t         j                  j                  |            }t         j                  j                  |      }t	        ||      }t        ||||      }t        ||||      }t        |j                  |dd       y )Nrv   )r,   r   r   r[   rF   )	r9   r>   ry   rz   r   r
   make_interp_full_matrr   r$   )r?   r%   r@   r^   r{   r#   rA   cfs           rB   test_full_matrixzTestInterp.test_full_matrixA  s    
		t1GGBII$$!$,-II!$1q!Q*"1aA.Re%8rW   c                    t         j                  j                  d       d}t        ddd      D ]  }t	        |dz
  dz        }t        j
                  t         j                  j                  d|f            }t        d|dz         D ]  }|d| |dfxx   t        j
                  t         j                  j                  d||z
  f            z  cc<   ||dd| fxx   t        j
                  t         j                  j                  d||z
  f            z  cc<    t         j                  j                  ||f      }||d|| df<   t         j                  j                  ||f      }||| dd|f<   t        j                  ||f      }t        t        || dz
  d            D ]G  \  }}	|	d	k  rt        j                  ||	
      ||d|	f<   *t        j                  ||	
      |||	df<   I t         j                  j                  |      }
t        t        ||||
|      t         j                  j                  ||
      d        y)z
        Random elements in diagonal matrix with blocks in the
        left lower and right upper corners checking the
        implementation of Woodbury algorithm.
        rv      r,       r*   r   Nr(   r   )offsetr[   r\   )r9   r>   ry   r   intdiagflatr  rE  diagonalr   r   linalgsolve)r?   r@   r%   r  r	  r   urlldr   rA   s              rB   test_woodburyzTestInterp.test_woodburyL  s    			tq"a 	?A!a%1%FBII,,aV45A1fqj) H#A2#qr'
bkk"))*:*:Aq1u:*FGG
!"crc'
bkk"))*:*:Aq1u:*FGG
H !!66"23B#%Agvgwx !!66"23B#%Avgh !Q A!%!R"@A 81q5!{{1Q7Aa!eH!{{1Q7AaeH	8
 		  #A/2r1a@IIOOAq1?#	?rW   N),r   r   r   r9   rR   r{  rU   r  r   r  r  r  rL   r>  r?  r  r  r  r  r  r  r  r  r  r  r  r  r  r  xfailr  r  r  r  r  r  r  r  r
  r  r  r  r  r&  r   rW   rB   r  r    s    
RBEE	"B	B8EE [[S,/* 0* [[S,/* 0*I
S [[S"45- 6-7	>	7 [[S,/
? 0
?2=ME6 [[j)E *E
;5.?"*@ [[S,/& 0&P610f	9?rW   r  c                    | j                   |j                   k(  sJ |j                   | j                   |z   dz   k(  sJ | j                   }t        j                  ||ft        j                        }t	        |      D ]R  }| |   }|||   k(  r|}nt        j
                  ||      dz
  }t        j                  ||||      }	|	||||z
  |dz   f<   T t        j                  ||      }
|
S )zAssemble an spline order k with knots t to interpolate
    y(x) using full matrices.
    Not-a-knot BC only.

    This routine is here for testing only (even though it's functional).
    r   r3  )
r   r9   r  r  r   rR  r   evaluate_all_bsplslr"  )r^   r{   r#   r%   r@   Ar   xvalleftbbr$   s              rB   r  r  i  s     66QVV66QVVaZ!^###	A
!Qryy)A1X 	!t1Q4<D??1d+a/D $$Q46 !T!VDF]
	! 	AAHrW   c                 F   t        t        j                  | ||f      \  } }}| j                  }|j                  |z
  dz
  }t        j                  ||ft        j
                        }t        |      D ]R  }| |   }|||   k(  r|}	nt        j                  ||      dz
  }	t        j                  ||||	      }
|
|||	|z
  |	dz   f<   T t        j                  |j                  |      }t        j                  |j                  |      }t        j                  ||      }|||ffS )z,Make the least-square spline, full matrices.r   r)  )mapr9   rd   r   r  r  r   rR  r   r*  dotTr+  r"  )r^   r{   r#   r%   mr@   r,  r   r-  r.  r/  r   Yr$   s                 rB   make_lsq_full_matrixr6    s	   "**q!Qi(GAq!	A	
QA
!Qryy)A1X 
!t1Q4<D??1d+a/D $$Q46 !T!VDF]

! 	qssAA
qssAA
AAq!f9rW   c                   J   e Zd Zej                  j                  d       d\  ZZ ej                  ej                  j	                  e            Z	ej                  j	                  e      Z
 e ej                  e	d   e	d   d      e      Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zy)TestLSQrv   )r   r,   r   r(   r   c                    | j                   | j                  | j                  | j                  f\  }}}}t	        ||||      \  }}t        ||||      }t        |j                  |       t        |j                  j                  |j                  |z
  dz
  f       |\  }}	t        j                  j                  ||d      \  }
}}}t        |j                  |
       y )Nr   r(   )rcond)r^   r{   r#   r%   r6  r   r   r$   r   r   r   r9   r!  lstsq)r?   r^   r{   r#   r%   c0AYrA   aar   rK  r   s               rB   
test_lstsqzTestLSQ.test_lstsq  s    VVTVVTVVTVV3
1a%aAq1BAq!Q'R QSSYY!a 12 Biioob!2o6Aq!R rW   c                    | j                   | j                  | j                  | j                  f\  }}}}t	        j
                  |      }t        ||||      }t        |||||      }t        |j                  |j                  d       t        |j                  |j                  d       t        |j                  |j                         y )N)wr[   r\   )
r^   r{   r#   r%   r9   r   r   r   r$   r   )r?   r^   r{   r#   r%   rA  rA   b_ws           rB   test_weightszTestLSQ.test_weights  s    VVTVVTVVTVV3
1aLLOAq!Q'aAqA.SUU/SUU/QSS#%% rW   c                 6   | j                   | j                  | j                  | j                  f\  }}}}t        j
                  j                  |dddf      }t        ||||      }t        |j                  j                  |j                  |z
  dz
  dddf       y )Nr   r   r   r   r   )r^   r#   r%   r@   r9   r>   r   r   r$   r   r   )r?   r^   r#   r%   r@   r{   rA   s          rB   r  zTestLSQ.test_multiple_rhs  s~    VVTVVTVVTVV3
1aII1aA,/Aq!Q'QSSYY!Q1 56rW   c                 4   | j                   | j                  | j                  }}}| j                  dz  }t	        ||||      }t	        ||j
                  ||      }t	        ||j                  ||      }t         ||       ||      d ||      z  z   dd       y )Ny      ?       @r    rE   rF   )r^   r#   r%   r{   r   r   r   r   )r?   r^   r#   r%   r%  rA   r   r   s           rB   r  zTestLSQ.test_complex  s    &&$&&$&&a1VVx Ar1a(q"''1a0q"''1a0!d1gDG3%eLrW   c                    t        j                  d      j                  t         j                        }t        j                  d      j                  t         j                        }t	        |d      }t        |||d       y )NrP   r   r   )r9   r=   r  r   r   r   r?   r^   r{   r#   s       rB   r  zTestLSQ.test_int_xy  sS    IIbM  )IIbM  )AO1a1%rW   c                     t        j                  ddd      }|d d d   }|d d d   }t        |d      }t        |||d       y )Nr(   r   r~   r,   r   )r9   rR   r   r   )r?   rU   r^   r{   r#   s        rB   r  zTestLSQ.test_sliced_input  sG    [[Q$ssGssGAqM1a1%rW   c                    t        j                  d      j                  t              }|dz  }t	        |d      }t         j
                  t         j                  t         j                   fD ]  }||d<   t        t        t        |||         y )N   r*   r,   r(   )
r9   r=   r  r  r   r;   r<   r5   r7   r   )r?   r^   r{   r#   r  s        rB   test_checkfinitezTestLSQ.test_checkfinite  sm    IIbM  'qDAqM&&"&&266'* 	@AAbE*oq!Q?	@rW   c                     | j                   | j                  | j                  }}}|j                  d       |j                  d       |j                  d       t	        |||       y )NFr:  )r^   r{   r#   )r^   r{   r#   r<  r   rG  s       rB   r=  zTestLSQ.test_read_only  sQ    &&$&&$&&a1	


	


	


!qA&rW   N)r   r   r   r9   r>   ry   r@   r%   rz   r^   r{   r   rR   r#   r?  rC  r  r  r  r  rK  r=  r   rW   rB   r8  r8    s     IINN4DAq		  #$A
		AAaD!B%+Q/A!
!7	M&&@'rW   r8  c                     t         j                  j                  t         j                  j                  t         j                  j	                  t
                    d|       S )Ndata)ospathjoinabspathdirname__file__)basenames    rB   	data_filerV    s8    77<<(AB* *rW   c                   $    e Zd Zd Zd Zd Zd Zy)TestSmoothingSplinec                 h   t         j                  j                  d       d}t        j                  t         j                  j	                  |      dz  dz
        }|dz  t        j
                  d|z        z  |dz  z   t         j                  j                  dd|      z   }t        t              5  t        ||dd         d d d        t        t              5  t        |dd  |       d d d        t        t              5  t        |j                  d|      |       d d d        t        t              5  t        |d d d	   |       d d d        t        j                  |      }|d   |d
<   t        t              5  t        ||       d d d        t        j                  d      }t        j                  d      }d}t        j                  t        |      5  t        ||       d d d        y # 1 sw Y   -xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nrv   r~   r-   r*   r,   r.   r   r   r(   r   z,``x`` and ``y`` length must be larger than 5r  )r9   r>   ry   rz   r  r  normalr5   r7   r   re   ru  r=   onesrL   r   )r?   r@   r^   r{   x_duplexception_messages         rB   test_invalid_inputz&TestSmoothingSpline.test_invalid_input  s   
		tGGBII++A.2Q67qD266!a%= 1a4'"))*:*:2sA*FF :& 	,!!QqrU+	,:& 	,!!AB%+	,:& 	6!!))Aq/15	6 :& 	.!!DbD'1-	. 1Iq	:& 	-!&!,	- IIaLGGAJJ]]:->? 	(!!Q'	( 	(+	, 	,	, 	,	6 	6	. 	.	- 	-	( 	(sH   /G*G7=H1H8HH(*G47HHHH%(H1c                     t        j                  t        d            }|d   }|d   }|d   } t        ||      |      }t	        ||dd       y)ae  
        Data is generated in the following way:
        >>> np.random.seed(1234)
        >>> n = 100
        >>> x = np.sort(np.random.random_sample(n) * 4 - 2)
        >>> y = np.sin(x) + np.random.normal(scale=.5, size=n)
        >>> np.savetxt('x.csv', x)
        >>> np.savetxt('y.csv', y)

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

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

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

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

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

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

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

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

        z
gcvspl.npzr^   r{   y_GCVSPLg-C6?rF   N)r9   loadrV  r   r   )r?   rN  r^   r{   r`  y_comprs         rB   test_compare_with_GCVSPLz,TestSmoothingSpline.test_compare_with_GCVSPL"  sX    R wwy./II
#-'1-a0
 	4@rW   c                    t         j                  j                  d       d}t        j                  t         j                  j	                  |      dz  dz
        }|dz  t        j
                  d|z        z  |dz  z   t         j                  j                  dd|      z   }t        ||d      }t        ||dd	
      }t        j                  |d   |d   d|z        }t         ||       ||      d       y)z
        In case the regularization parameter is 0, the resulting spline
        is an interpolation spline with natural boundary conditions.
        rv   r~   r-   r*   r,   r.   r   )lamr  r-  r   r(   rE   r\   N)r9   r>   ry   rz   r  r  rZ  r   r
   rR   r   )r?   r@   r^   r{   
spline_GCVspline_interpgrids          rB   test_non_regularized_casez-TestSmoothingSpline.test_non_regularized_caseX  s     			tGGBII++A.2Q67qD266!a%= 1a4'"))*:*:2sA*FF*1aR8
*1aIF{{1Q42A.
4(%d+"	$rW   c                    t         j                  j                  d       d}t        j                  t         j                  j	                  |      dz  dz
        }|dz  t        j
                  d|z        z  |dz  z   t         j                  j                  dd|      z   }t        ||      }t         j                  j                  t        d      d	      D ]u  }t        j                  |      }d
||<   t        |||      }t         |||         ||   z
        }t         |||         ||   z
        }	||	k  sdt        d|dd|	d       y )Nrv   r~   r-   r*   r,   r.   r   rP   r   g      >@zJSpline with weights should be closer to the points than the original one: z.4z < )r9   r>   ry   rz   r  r  rZ  r   choicer   r[  absr7   )
r?   r@   r^   r{   r  indrA  spl_worigweighteds
             rB   test_weighted_smoothing_splinez2TestSmoothingSpline.test_weighted_smoothing_splinek  s9   
		tGGBII++A.2Q67qD266!a%= 1a4'"))*:*:2sA*FF#Aq) 99##E#JR#8 	3C
AAcF)!Q2E s1S6{QsV+,D53=1S612Hh  $CCG)3$,R="2 3 3	3rW   N)r   r   r   r^  rc  ri  rq  r   rW   rB   rX  rX    s    (>4Al$&3rW   rX  r  )#   r,   )r,   )9numpyr9   numpy.testingr   r   r   rL   r   r5   scipy.interpolater   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   scipy.linalgr!  r+  scipy.interpolate._bsplinesr   r   r   r   r   scipy.interpolate._fitpack_implinterpolate_fitpack_implr   rO  r   rG  rJ  rk   rl   r   r]   r   rJ   rF  rx  r  r  r6  r8  rV  rX  r   rW   rB   <module>r{     s     @ @ * C C C C C E E 0 / 	K	" K	"\6.&
G>H$+$\+ \+~g? g?T88W' W'r*
C3 C3rW   