def test_vectorize_callable_class(): # Test vectorization in 1d without data type --> lazy vectorization arr = [[-2, -1, 0, 1, 2]] mg = [[-3, -2, -1, 0, 1]] val_1 = -1 val_2 = 2 # Class with __call__ method class CallableClass(object): def __call__(self, x): return 0 if x < 0 else 1 vectorized_call = vectorize(CallableClass()) true_result_arr = [0, 0, 1, 1, 1] true_result_mg = [0, 0, 0, 1, 1] # Out-of-place out = vectorized_call(arr) assert isinstance(out, np.ndarray) assert is_int_dtype(out.dtype) assert out.shape == (5, ) assert all_equal(out, true_result_arr) out = vectorized_call(mg) assert isinstance(out, np.ndarray) assert out.shape == (5, ) assert is_int_dtype(out.dtype) assert all_equal(out, true_result_mg) assert vectorized_call(val_1) == 0 assert vectorized_call(val_2) == 1
def test_vectorize_callable_class(): # Test vectorization in 1d without data type --> lazy vectorization arr = [[-2, -1, 0, 1, 2]] mg = [[-3, -2, -1, 0, 1]] val_1 = -1 val_2 = 2 # Class with __call__ method class CallableClass(object): def __call__(self, x): return 0 if x < 0 else 1 vectorized_call = vectorize(CallableClass()) true_result_arr = [0, 0, 1, 1, 1] true_result_mg = [0, 0, 0, 1, 1] # Out-of-place out = vectorized_call(arr) assert isinstance(out, np.ndarray) assert is_int_dtype(out.dtype) assert out.shape == (5,) assert all_equal(out, true_result_arr) out = vectorized_call(mg) assert isinstance(out, np.ndarray) assert out.shape == (5,) assert is_int_dtype(out.dtype) assert all_equal(out, true_result_mg) assert vectorized_call(val_1) == 0 assert vectorized_call(val_2) == 1
def element(self, fcall=None, vectorized=True): """Create a `FunctionSet` element. Parameters ---------- fcall : `callable`, optional The actual instruction for out-of-place evaluation. It must return an `range` element or a `numpy.ndarray` of such (vectorized call). vectorized : bool Whether ``fcall`` supports vectorized evaluation. Returns ------- element : `FunctionSetVector` The new element, always supports vectorization See also -------- odl.discr.grid.TensorGrid.meshgrid : efficient grids for function evaluation """ if not callable(fcall): raise TypeError('function {!r} is not callable.'.format(fcall)) if not vectorized: fcall = vectorize(dtype=None)(fcall) return self.element_type(self, fcall)
def element(self, fcall=None, vectorized=True): """Create a `FunctionSet` element. Parameters ---------- fcall : `callable`, optional The actual instruction for out-of-place evaluation. It must return an `FunctionSet.range` element or a `numpy.ndarray` of such (vectorized call). vectorized : bool Whether ``fcall`` supports vectorized evaluation. Returns ------- element : `FunctionSetVector` The new element, always supports vectorization See also -------- odl.discr.grid.TensorGrid.meshgrid : efficient grids for function evaluation """ if not callable(fcall): raise TypeError('`fcall` {!r} is not `callable`'.format(fcall)) elif fcall in self: return fcall else: if not vectorized: fcall = vectorize(fcall) return self.element_type(self, fcall)
def element(self, fcall=None, vectorized=True): """Create a `FunctionSpace` element. Parameters ---------- fcall : `callable`, optional The actual instruction for out-of-place evaluation. It must return an `FunctionSet.range` element or a `numpy.ndarray` of such (vectorized call). If fcall is a `FunctionSetVector`, it is wrapped as a new `FunctionSpaceVector`. vectorized : bool Whether ``fcall`` supports vectorized evaluation. Returns ------- element : `FunctionSpaceVector` The new element, always supports vectorization Notes ----- If you specify ``vectorized=False``, the function is decorated with a vectorizer, which makes two elements created this way from the same function being regarded as *not equal*. """ if fcall is None: return self.zero() elif fcall in self: return fcall else: if not callable(fcall): raise TypeError('`fcall` {!r} is not callable'.format(fcall)) if not vectorized: if self.field == RealNumbers(): dtype = 'float64' else: dtype = 'complex128' fcall = vectorize(otypes=[dtype])(fcall) return self.element_type(self, fcall)