Source code for pysit.util.util

import itertools

import numpy as np

__all__ = ['bspline',
           'quadratic',
           'ConstructableDict',
           'Bunch',
           'PositiveEvenIntegers']

[docs]def bspline(x): x = np.array(x*1.0) # Note that x must be a numpy array and also must be real. As implemented, this performs a copy. If there is slowness, this should be conditional. Also, perhaps should be conditional so no copying large domains. if (x.shape == () ): # Non-array argument must go to non-dimensionless array x.shape = (1,) retvec = np.zeros_like(x) loc = np.where(x < 0.5) retvec[loc] = 1.5 * (8./6.) * x[loc]**3 loc = np.where(x >= 0.5) retvec[loc] = 1.5 * ((-4.0*x[loc]**3 + 8.0*x[loc]**2 - 4.0*x[loc] + 2.0/3.0)) return retvec
[docs]def quadratic(x): return x**2
[docs]class Bunch(dict): """ An implementation of the Bunch pattern. See also: http://code.activestate.com/recipes/52308/ http://stackoverflow.com/questions/2641484/class-dict-self-init-args This will likely change into something more parametersific later, so that changes in the subparameters will properly handle side effects. For now, this functions as a struct-on-the-fly. """ def __init__(self, **kwargs): dict.__init__(self, **kwargs) self.__dict__ = self
[docs]class ConstructableDict(dict): """ A ConstructableDict returns the value mapped to a key. If that key does not exist, a function which creates the desired value at the key is called with the key as the argument. Examples -------- >>> def buildfun(key): ... def myprint(x): print key*x ... return myprint >>> a = ConstructableDict() >>> a {} >>> a[5] <function myprint> >>> a[6](7) 42 """ def __init__(self, func): self.func = func dict.__init__(self) def __getitem__(self, key): if key not in self: dict.__setitem__(self, key, self.func(key)) return dict.__getitem__(self, key) def __setitem__(self, key, arg): raise NotImplementedError('__setitem__ should not be called for ConstructableDict instances')
class _PositiveEvenIntegers(object): def __contains__(self, needle): return needle > 0 and not needle % 2 PositiveEvenIntegers = _PositiveEvenIntegers()