|  |  |  | @ -51,14 +51,21 @@ def savitzky_golay(y, window_size, order, deriv=0): | 
		
	
		
			
				|  |  |  |  |     Examples | 
		
	
		
			
				|  |  |  |  |     -------- | 
		
	
		
			
				|  |  |  |  |     >>> t = np.linspace(-4, 4, 500) | 
		
	
		
			
				|  |  |  |  |     >>> y = np.exp( -t**2 ) + np.random.normal(0, 0.05, t.shape) | 
		
	
		
			
				|  |  |  |  |     >>> noise = np.random.normal(0, 0.05, t.shape) | 
		
	
		
			
				|  |  |  |  |     >>> noise = 0.4*np.sin(100*t) | 
		
	
		
			
				|  |  |  |  |     >>> y = np.exp( -t**2 ) + noise | 
		
	
		
			
				|  |  |  |  |     >>> ysg = savitzky_golay(y, window_size=31, order=4) | 
		
	
		
			
				|  |  |  |  |     >>> import matplotlib.pyplot as plt | 
		
	
		
			
				|  |  |  |  |     >>> h=plt.plot(t, y, label='Noisy signal') | 
		
	
		
			
				|  |  |  |  |     >>> h=plt.plot(t, np.exp(-t**2), 'k', lw=1.5, label='Original signal') | 
		
	
		
			
				|  |  |  |  |     >>> h=plt.plot(t, ysg, 'r', label='Filtered signal') | 
		
	
		
			
				|  |  |  |  |     >>> h=plt.legend() | 
		
	
		
			
				|  |  |  |  |     >>> plt.show() | 
		
	
		
			
				|  |  |  |  |     >>> np.allclose(ysg[:10], | 
		
	
		
			
				|  |  |  |  |     ... [-0.00127789, -0.02390299, -0.04444364, -0.01738837,  0.00585856, | 
		
	
		
			
				|  |  |  |  |     ...  -0.01675704, -0.03140276,  0.00010455,  0.02099063, -0.00380031]) | 
		
	
		
			
				|  |  |  |  |     True | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     import matplotlib.pyplot as plt | 
		
	
		
			
				|  |  |  |  |     h=plt.plot(t, y, label='Noisy signal') | 
		
	
		
			
				|  |  |  |  |     h=plt.plot(t, np.exp(-t**2), 'k', lw=1.5, label='Original signal') | 
		
	
		
			
				|  |  |  |  |     h=plt.plot(t, ysg, 'r', label='Filtered signal') | 
		
	
		
			
				|  |  |  |  |     h=plt.legend() | 
		
	
		
			
				|  |  |  |  |     plt.show() | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     References | 
		
	
		
			
				|  |  |  |  |     ---------- | 
		
	
	
		
			
				
					|  |  |  | @ -114,10 +121,16 @@ def savitzky_golay_piecewise(xvals, data, kernel=11, order=4): | 
		
	
		
			
				|  |  |  |  |     # As an example, this figure shows the effect of an additive noise with a | 
		
	
		
			
				|  |  |  |  |     # variance of 0.2 (original signal (black), noisy signal (red) and filtered | 
		
	
		
			
				|  |  |  |  |     # signal (blue dots)). | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     >>> yn = y + np.sqrt(0.2)*np.random.randn(*x.shape) | 
		
	
		
			
				|  |  |  |  |     >>> noise = np.sqrt(0.2)*np.random.randn(*x.shape) | 
		
	
		
			
				|  |  |  |  |     >>> noise = np.sqrt(0.2)*np.sin(1000*x) | 
		
	
		
			
				|  |  |  |  |     >>> yn = y + noise | 
		
	
		
			
				|  |  |  |  |     >>> yr = savitzky_golay_piecewise(x, yn, kernel=11, order=4) | 
		
	
		
			
				|  |  |  |  |     >>> h=plt.plot(x, yn, 'r', x, y, 'k', x, yr, 'b.') | 
		
	
		
			
				|  |  |  |  |     >>> np.allclose(yr[:10], | 
		
	
		
			
				|  |  |  |  |     ...    [-0.02708216, -0.04295155, -0.08522043, -0.13995016, -0.1908162 , | 
		
	
		
			
				|  |  |  |  |     ...     -0.22938387, -0.26932722, -0.30614865, -0.33942134, -0.3687596 ]) | 
		
	
		
			
				|  |  |  |  |     True | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     h=plt.plot(x, yn, 'r', x, y, 'k', x, yr, 'b.') | 
		
	
		
			
				|  |  |  |  |     ''' | 
		
	
		
			
				|  |  |  |  |     turnpoint = 0 | 
		
	
		
			
				|  |  |  |  |     last = len(xvals) | 
		
	
	
		
			
				
					|  |  |  | @ -171,16 +184,23 @@ def sgolay2d(z, window_size, order, derivative=None): | 
		
	
		
			
				|  |  |  |  |     >>> Z = np.exp( -(X**2+Y**2)) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     # add noise | 
		
	
		
			
				|  |  |  |  |     >>> Zn = Z + np.random.normal( 0, 0.2, Z.shape ) | 
		
	
		
			
				|  |  |  |  |     >>> noise = np.random.normal( 0, 0.2, Z.shape ) | 
		
	
		
			
				|  |  |  |  |     >>> noise = np.sqrt(0.2) * np.sin(100*X)*np.sin(100*Y) | 
		
	
		
			
				|  |  |  |  |     >>> Zn = Z + noise | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     # filter it | 
		
	
		
			
				|  |  |  |  |     >>> Zf = sgolay2d( Zn, window_size=29, order=4) | 
		
	
		
			
				|  |  |  |  |     >>> np.allclose(Zf[:3,:5], | 
		
	
		
			
				|  |  |  |  |     ...  [[ 0.29304073,  0.29749652,  0.29007645,  0.2695685 ,  0.23541966], | 
		
	
		
			
				|  |  |  |  |     ...    [ 0.29749652,  0.29819304,  0.28766723,  0.26524542,  0.23081572], | 
		
	
		
			
				|  |  |  |  |     ...    [ 0.29007645,  0.28766723,  0.27483445,  0.25141198,  0.21769662]]) | 
		
	
		
			
				|  |  |  |  |     True | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     # do some plotting | 
		
	
		
			
				|  |  |  |  |     >>> import matplotlib.pyplot as plt | 
		
	
		
			
				|  |  |  |  |     >>> h=plt.matshow(Z) | 
		
	
		
			
				|  |  |  |  |     >>> h=plt.matshow(Zn) | 
		
	
		
			
				|  |  |  |  |     >>> h=plt.matshow(Zf) | 
		
	
		
			
				|  |  |  |  |     import matplotlib.pyplot as plt | 
		
	
		
			
				|  |  |  |  |     h=plt.matshow(Z) | 
		
	
		
			
				|  |  |  |  |     h=plt.matshow(Zn) | 
		
	
		
			
				|  |  |  |  |     h=plt.matshow(Zf) | 
		
	
		
			
				|  |  |  |  |     """ | 
		
	
		
			
				|  |  |  |  |     # number of terms in the polynomial expression | 
		
	
		
			
				|  |  |  |  |     n_terms = (order + 1) * (order + 2) / 2.0 | 
		
	
	
		
			
				
					|  |  |  | @ -290,8 +310,14 @@ class PPform(object): | 
		
	
		
			
				|  |  |  |  |     >>> coef = np.array([[1,1],[1,1],[0,2]]) # linear from 0 to 2 | 
		
	
		
			
				|  |  |  |  |     >>> breaks = [0,1,2] | 
		
	
		
			
				|  |  |  |  |     >>> self = PPform(coef, breaks) | 
		
	
		
			
				|  |  |  |  |     >>> x = linspace(-1,3) | 
		
	
		
			
				|  |  |  |  |     >>> h=plt.plot(x,self(x)) | 
		
	
		
			
				|  |  |  |  |     >>> x = linspace(-1, 3, 21) | 
		
	
		
			
				|  |  |  |  |     >>> y = self(x) | 
		
	
		
			
				|  |  |  |  |     >>> np.allclose(y, [ 0.  ,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ,  0.24,  0.56, | 
		
	
		
			
				|  |  |  |  |     ...    0.96, 1.44,  2.  ,  2.24,  2.56,  2.96,  3.44,  4.  ,  0.  ,  0.  , | 
		
	
		
			
				|  |  |  |  |     ...     0.  ,  0.  ,  0.  ]) | 
		
	
		
			
				|  |  |  |  |     True | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     h=plt.plot(x, y) | 
		
	
		
			
				|  |  |  |  |     """ | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     def __init__(self, coeffs, breaks, fill=0.0, sort=False, a=None, b=None): | 
		
	
	
		
			
				
					|  |  |  | @ -468,11 +494,37 @@ class SmoothSpline(PPform): | 
		
	
		
			
				|  |  |  |  |     ------- | 
		
	
		
			
				|  |  |  |  |     >>> import numpy as np | 
		
	
		
			
				|  |  |  |  |     >>> import matplotlib.pyplot as plt | 
		
	
		
			
				|  |  |  |  |     >>> x = np.linspace(0,1) | 
		
	
		
			
				|  |  |  |  |     >>> y = np.exp(x)+1e-1*np.random.randn(x.size) | 
		
	
		
			
				|  |  |  |  |     >>> x = np.linspace(0, 1, 21) | 
		
	
		
			
				|  |  |  |  |     >>> noise = 1e-1*np.random.randn(x.size) | 
		
	
		
			
				|  |  |  |  |     >>> noise = np.array( | 
		
	
		
			
				|  |  |  |  |     ...    [-0.03298601, -0.08164429, -0.06845745, -0.20718593,  0.08666282, | 
		
	
		
			
				|  |  |  |  |     ...     0.04702094,  0.08208645, -0.1017021 , -0.03031708,  0.22871709, | 
		
	
		
			
				|  |  |  |  |     ...    -0.10302486, -0.17724316, -0.05885157, -0.03875947, -0.1102984 , | 
		
	
		
			
				|  |  |  |  |     ...    -0.05542001, -0.12717549,  0.14337697, -0.02637848, -0.10353976, | 
		
	
		
			
				|  |  |  |  |     ...    -0.0618834 ]) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     >>> y = np.exp(x) + noise | 
		
	
		
			
				|  |  |  |  |     >>> pp9 = SmoothSpline(x, y, p=.9) | 
		
	
		
			
				|  |  |  |  |     >>> pp99 = SmoothSpline(x, y, p=.99, var=0.01) | 
		
	
		
			
				|  |  |  |  |     >>> h=plt.plot(x,y, x,pp99(x),'g', x,pp9(x),'k', x,np.exp(x),'r') | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     >>> y99 = pp99(x); y9 = pp9(x) | 
		
	
		
			
				|  |  |  |  |     >>> np.allclose(y9, | 
		
	
		
			
				|  |  |  |  |     ...    [ 0.8754795 ,  0.95285289,  1.03033239,  1.10803792,  1.18606854, | 
		
	
		
			
				|  |  |  |  |     ...     1.26443234,  1.34321265,  1.42258227,  1.5027733 ,  1.58394785, | 
		
	
		
			
				|  |  |  |  |     ...     1.66625727,  1.74998243,  1.8353173 ,  1.92227431,  2.01076693, | 
		
	
		
			
				|  |  |  |  |     ...     2.10064087,  2.19164551,  2.28346334,  2.37573696,  2.46825194, | 
		
	
		
			
				|  |  |  |  |     ...     2.56087699]) | 
		
	
		
			
				|  |  |  |  |     True | 
		
	
		
			
				|  |  |  |  |     >>> np.allclose(y99, | 
		
	
		
			
				|  |  |  |  |     ...     [ 0.95227461,  0.97317995,  1.01159244,  1.08726908,  1.21260587, | 
		
	
		
			
				|  |  |  |  |     ...     1.31545644,  1.37829108,  1.42719649,  1.51308685,  1.59669367, | 
		
	
		
			
				|  |  |  |  |     ...     1.61486217,  1.64481078,  1.72970022,  1.83208819,  1.93312796, | 
		
	
		
			
				|  |  |  |  |     ...     2.05164767,  2.19326122,  2.34608425,  2.45023567,  2.5357288 , | 
		
	
		
			
				|  |  |  |  |     ...     2.6357401 ]) | 
		
	
		
			
				|  |  |  |  |     True | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     h=plt.plot(x,y, x,pp99(x),'g', x,pp9(x),'k', x,np.exp(x),'r') | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     See also | 
		
	
		
			
				|  |  |  |  |     -------- | 
		
	
	
		
			
				
					|  |  |  | @ -882,14 +934,19 @@ class StinemanInterp(object): | 
		
	
		
			
				|  |  |  |  |     >>> y = np.sin(x); yp = np.cos(x) | 
		
	
		
			
				|  |  |  |  |     >>> xi = np.linspace(0,2*pi,40); | 
		
	
		
			
				|  |  |  |  |     >>> yi = wi.StinemanInterp(x,y)(xi) | 
		
	
		
			
				|  |  |  |  |     >>> np.allclose(yi[:10], | 
		
	
		
			
				|  |  |  |  |     ...    [ 0.,  0.16258231,  0.31681338,  0.46390886,  0.60091421, | 
		
	
		
			
				|  |  |  |  |     ...      0.7206556 ,  0.82314953,  0.90304148,  0.96059538,  0.99241945]) | 
		
	
		
			
				|  |  |  |  |     True | 
		
	
		
			
				|  |  |  |  |     >>> yi1 = wi.CubicHermiteSpline(x,y, yp)(xi) | 
		
	
		
			
				|  |  |  |  |     >>> yi2 = wi.Pchip(x,y, method='parabola')(xi) | 
		
	
		
			
				|  |  |  |  |     >>> h=plt.subplot(211) | 
		
	
		
			
				|  |  |  |  |     >>> h=plt.plot(x,y,'o',xi,yi,'r', xi,yi1, 'g', xi,yi1, 'b') | 
		
	
		
			
				|  |  |  |  |     >>> h=plt.subplot(212) | 
		
	
		
			
				|  |  |  |  |     >>> h=plt.plot(xi,np.abs(sin(xi)-yi), 'r', | 
		
	
		
			
				|  |  |  |  |     ...            xi,  np.abs(sin(xi)-yi1), 'g', | 
		
	
		
			
				|  |  |  |  |     ...            xi, np.abs(sin(xi)-yi2), 'b') | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     h=plt.subplot(211) | 
		
	
		
			
				|  |  |  |  |     h=plt.plot(x,y,'o',xi,yi,'r', xi,yi1, 'g', xi,yi1, 'b') | 
		
	
		
			
				|  |  |  |  |     h=plt.subplot(212) | 
		
	
		
			
				|  |  |  |  |     h=plt.plot(xi,np.abs(sin(xi)-yi), 'r', | 
		
	
		
			
				|  |  |  |  |                xi,  np.abs(sin(xi)-yi1), 'g', | 
		
	
		
			
				|  |  |  |  |                xi, np.abs(sin(xi)-yi2), 'b') | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     References | 
		
	
		
			
				|  |  |  |  |     ---------- | 
		
	
	
		
			
				
					|  |  |  | @ -1012,36 +1069,58 @@ class Pchip(PiecewisePolynomial): | 
		
	
		
			
				|  |  |  |  |     >>> y = np.array([-1.0, -1,-1,0,1,1,1]) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     # Interpolate using monotonic piecewise Hermite cubic spline | 
		
	
		
			
				|  |  |  |  |     >>> xvec = np.arange(599.)/100. - 3.0 | 
		
	
		
			
				|  |  |  |  |     >>> n = 20. | 
		
	
		
			
				|  |  |  |  |     >>> xvec = np.arange(n)/10. - 1.0 | 
		
	
		
			
				|  |  |  |  |     >>> yvec = wi.Pchip(x, y)(xvec) | 
		
	
		
			
				|  |  |  |  |     >>> np.allclose(yvec, [-1.   , -0.981, -0.928, -0.847, -0.744, -0.625, | 
		
	
		
			
				|  |  |  |  |     ...    -0.496, -0.363, -0.232, -0.109,  0.   ,  0.109,  0.232,  0.363, | 
		
	
		
			
				|  |  |  |  |     ...    0.496,  0.625, 0.744,  0.847,  0.928,  0.981]) | 
		
	
		
			
				|  |  |  |  |     True | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     # Call the Scipy cubic spline interpolator | 
		
	
		
			
				|  |  |  |  |     >>> from scipy.interpolate import interpolate | 
		
	
		
			
				|  |  |  |  |     >>> function = interpolate.interp1d(x, y, kind='cubic') | 
		
	
		
			
				|  |  |  |  |     >>> yvec1 = function(xvec) | 
		
	
		
			
				|  |  |  |  |     >>> np.allclose(yvec1, [-1.00000000e+00, -9.41911765e-01, -8.70588235e-01, | 
		
	
		
			
				|  |  |  |  |     ...        -7.87500000e-01,  -6.94117647e-01,  -5.91911765e-01, | 
		
	
		
			
				|  |  |  |  |     ...        -4.82352941e-01,  -3.66911765e-01,  -2.47058824e-01, | 
		
	
		
			
				|  |  |  |  |     ...        -1.24264706e-01,   2.49800181e-16,   1.24264706e-01, | 
		
	
		
			
				|  |  |  |  |     ...         2.47058824e-01,   3.66911765e-01,   4.82352941e-01, | 
		
	
		
			
				|  |  |  |  |     ...         5.91911765e-01,   6.94117647e-01,   7.87500000e-01, | 
		
	
		
			
				|  |  |  |  |     ...         8.70588235e-01,   9.41911765e-01]) | 
		
	
		
			
				|  |  |  |  |     True | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     # Non-montonic cubic Hermite spline interpolator using | 
		
	
		
			
				|  |  |  |  |     # Catmul-Rom method for computing slopes... | 
		
	
		
			
				|  |  |  |  |     >>> yvec2 = wi.CubicHermiteSpline(x,y)(xvec) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     >>> yvec3 = wi.StinemanInterp(x, y)(xvec) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     >>> np.allclose(yvec2, [-1., -0.9405, -0.864 , -0.7735, -0.672 , -0.5625, | 
		
	
		
			
				|  |  |  |  |     ...    -0.448 , -0.3315, -0.216 , -0.1045,  0.    ,  0.1045,  0.216 , | 
		
	
		
			
				|  |  |  |  |     ...    0.3315, 0.448 ,  0.5625,  0.672 ,  0.7735,  0.864 ,  0.9405]) | 
		
	
		
			
				|  |  |  |  |     True | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     >>> np.allclose(yvec3, [-1. , -0.9, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, | 
		
	
		
			
				|  |  |  |  |     ... -0.2, -0.1,  0. , 0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9]) | 
		
	
		
			
				|  |  |  |  |     True | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     # Plot the results | 
		
	
		
			
				|  |  |  |  |     >>> import matplotlib.pyplot as plt | 
		
	
		
			
				|  |  |  |  |     >>> h=plt.plot(x,    y,     'ro') | 
		
	
		
			
				|  |  |  |  |     >>> h=plt.plot(xvec, yvec,  'b') | 
		
	
		
			
				|  |  |  |  |     >>> h=plt.plot(xvec, yvec1, 'k') | 
		
	
		
			
				|  |  |  |  |     >>> h=plt.plot(xvec, yvec2, 'g') | 
		
	
		
			
				|  |  |  |  |     >>> h=plt.plot(xvec, yvec3, 'm') | 
		
	
		
			
				|  |  |  |  |     >>> h=plt.title("pchip() step function test") | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     >>> h=plt.xlabel("X") | 
		
	
		
			
				|  |  |  |  |     >>> h=plt.ylabel("Y") | 
		
	
		
			
				|  |  |  |  |     >>> txt = "Comparing pypchip() vs. Scipy interp1d() vs. non-monotonic CHS" | 
		
	
		
			
				|  |  |  |  |     >>> h=plt.title(txt) | 
		
	
		
			
				|  |  |  |  |     >>> legends = ["Data", "pypchip()", "interp1d","CHS", 'SI'] | 
		
	
		
			
				|  |  |  |  |     >>> h=plt.legend(legends, loc="upper left") | 
		
	
		
			
				|  |  |  |  |     >>> plt.show() | 
		
	
		
			
				|  |  |  |  |     import matplotlib.pyplot as plt | 
		
	
		
			
				|  |  |  |  |     h=plt.plot(x,    y,     'ro') | 
		
	
		
			
				|  |  |  |  |     h=plt.plot(xvec, yvec,  'b') | 
		
	
		
			
				|  |  |  |  |     h=plt.plot(xvec, yvec1, 'k') | 
		
	
		
			
				|  |  |  |  |     h=plt.plot(xvec, yvec2, 'g') | 
		
	
		
			
				|  |  |  |  |     h=plt.plot(xvec, yvec3, 'm') | 
		
	
		
			
				|  |  |  |  |     h=plt.title("pchip() step function test") | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     h=plt.xlabel("X") | 
		
	
		
			
				|  |  |  |  |     h=plt.ylabel("Y") | 
		
	
		
			
				|  |  |  |  |     txt = "Comparing pypchip() vs. Scipy interp1d() vs. non-monotonic CHS" | 
		
	
		
			
				|  |  |  |  |     h=plt.title(txt) | 
		
	
		
			
				|  |  |  |  |     legends = ["Data", "pypchip()", "interp1d","CHS", 'SI'] | 
		
	
		
			
				|  |  |  |  |     h=plt.legend(legends, loc="upper left") | 
		
	
		
			
				|  |  |  |  |     plt.show() | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     """ | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | @ -1264,8 +1343,8 @@ def test_docstrings(): | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | if __name__ == '__main__': | 
		
	
		
			
				|  |  |  |  |     # test_func() | 
		
	
		
			
				|  |  |  |  |     # test_doctstrings() | 
		
	
		
			
				|  |  |  |  |     test_smoothing_spline() | 
		
	
		
			
				|  |  |  |  |     test_docstrings() | 
		
	
		
			
				|  |  |  |  |     # test_smoothing_spline() | 
		
	
		
			
				|  |  |  |  |     # compare_methods() | 
		
	
		
			
				|  |  |  |  |     # demo_monoticity() | 
		
	
		
			
				|  |  |  |  |     # test_interp3() | 
		
	
	
		
			
				
					|  |  |  | 
 |