def __init__(self, knots, name=NN): '''New L{HeightCubic} interpolator. @arg knots: The points with known height (C{LatLon}s). @kwarg name: Optional name for this height interpolator (C{str}). @raise HeightError: Insufficient number of B{C{knots}} or invalid B{C{knot}}. @raise ImportError: Package C{numpy} or C{scipy} not found or not installed. @raise SciPyError: A C{scipy.interpolate.interp2d} issue. @raise SciPyWarning: A C{scipy.interpolate.interp2d} warning as exception. ''' _, spi = self._NumSciPy() xs, ys, hs = self._xyhs3(knots) try: # SciPy.interpolate.interp2d kind 'linear' or 'cubic' self._interp2d = spi.interp2d(xs, ys, hs, kind=self._kind) except Exception as x: raise _SciPyIssue(x) if name: self.name = name
def __init__(self, knots, s=4, name=NN): '''New L{HeightSmoothBiSpline} interpolator. @arg knots: The points with known height (C{LatLon}s). @kwarg s: The spline smoothing factor (C{4}). @kwarg name: Optional name for this height interpolator (C{str}). @raise HeightError: Insufficient number of B{C{knots}} or an invalid B{C{knot}} or B{C{s}}. @raise ImportError: Package C{numpy} or C{scipy} not found or not installed. @raise SciPyError: A C{SmoothSphereBivariateSpline} issue. @raise SciPyWarning: A C{SmoothSphereBivariateSpline} warning as exception. ''' _, spi = self._NumSciPy() s = Int_(s, name='smoothing', Error=HeightError, low=4) xs, ys, hs = self._xyhs3(knots) try: self._ev = spi.SmoothSphereBivariateSpline(ys, xs, hs, eps=EPS, s=s).ev except Exception as x: raise _SciPyIssue(x) if name: self.name = name
def __init__(self, knots, weight=None, name=NN): '''New L{HeightLSQBiSpline} interpolator. @arg knots: The points with known height (C{LatLon}s). @kwarg weight: Optional weight or weights for each B{C{knot}} (C{scalar} or C{scalar}s). @kwarg name: Optional name for this height interpolator (C{str}). @raise HeightError: Insufficient number of B{C{knots}} or an invalid B{C{knot}} or B{C{weight}}. @raise LenError: Number of B{C{knots}} and B{C{weight}}s don't match. @raise ImportError: Package C{numpy} or C{scipy} not found or not installed. @raise SciPyError: A C{LSQSphereBivariateSpline} issue. @raise SciPyWarning: A C{LSQSphereBivariateSpline} warning as exception. ''' np, spi = self._NumSciPy() xs, ys, hs = self._xyhs3(knots) n = len(hs) w = weight if isscalar(w): w = float(w) if w <= 0: raise HeightError(weight=w) w = [w] * n elif w is not None: m, w = len2(w) if m != n: raise LenError(HeightLSQBiSpline, weight=m, knots=n) w = map2(float, w) m = min(w) if m <= 0: raise HeightError(_item_sq(weight=w.find(m)), m) try: T = 1.0e-4 # like SciPy example ps = np.array(_ordedup(xs, T, PI2 - T)) ts = np.array(_ordedup(ys, T, PI - T)) self._ev = spi.LSQSphereBivariateSpline(ys, xs, hs, ts, ps, eps=EPS, w=w).ev except Exception as x: raise _SciPyIssue(x) if name: self.name = name
def _eval(self, llis): # XXX single arg, not *args _as, xis, yis, _ = self._axyllis4(llis) try: # SciPy .ev signature: y first, then x! return _as(self._ev(yis, xis)) except Exception as x: raise _SciPyIssue(x)