def vectorize(ftylist_or_function=(), **kws): """vectorize(ftylist_or_function=(), target='cpu', identity=None, **kws) A decorator that creates a Numpy ufunc object using Numba compiled code. When no arguments or only keyword arguments are given, vectorize will return a Numba dynamic ufunc (DUFunc) object, where compilation/specialization may occur at call-time. Args ----- ftylist_or_function: function or iterable When the first argument is a function, signatures are dealt with at call-time. When the first argument is an iterable of type signatures, which are either function type object or a string describing the function type, signatures are finalized at decoration time. Keyword Args ------------ target: str A string for code generation target. Default to "cpu". identity: int, str, or None The identity (or unit) value for the element-wise function being implemented. Allowed values are None (the default), 0, 1, and "reorderable". cache: bool Turns on caching. Returns -------- A NumPy universal function Examples ------- @vectorize(['float32(float32, float32)', 'float64(float64, float64)'], identity=1) def sum(a, b): return a + b @vectorize def sum(a, b): return a + b @vectorize(identity=1) def mul(a, b): return a * b """ if isinstance(ftylist_or_function, str): # Common user mistake ftylist = [ftylist_or_function] elif inspect.isfunction(ftylist_or_function): return dufunc.DUFunc(ftylist_or_function, **kws) elif ftylist_or_function is not None: ftylist = ftylist_or_function def wrap(func): vec = Vectorize(func, **kws) for sig in ftylist: vec.add(sig) if len(ftylist) > 0: vec.disable_compile() return vec.build_ufunc() return wrap
def nopython_dufunc(self, pyfunc): return dufunc.DUFunc(pyfunc, targetoptions=dict(nopython=True))