diff options
author | Matti Picus <matti.picus@gmail.com> | 2023-03-27 09:36:25 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-27 09:36:25 +0300 |
commit | ed1732410f51293e4c5f63dcf162d9f1d417335a (patch) | |
tree | f0acf4850a47de8209c47131e4cec1b33853bf81 /numpy/lib/function_base.py | |
parent | 7761175e3df8ef30b09e2d71113251cd2de8f6f9 (diff) | |
download | numpy-ed1732410f51293e4c5f63dcf162d9f1d417335a.tar.gz |
Revert "ENH: Enabled the use of numpy.vectorize as a decorator"
Diffstat (limited to 'numpy/lib/function_base.py')
-rw-r--r-- | numpy/lib/function_base.py | 65 |
1 files changed, 11 insertions, 54 deletions
diff --git a/numpy/lib/function_base.py b/numpy/lib/function_base.py index 5e1309dfd..f0f374f97 100644 --- a/numpy/lib/function_base.py +++ b/numpy/lib/function_base.py @@ -2117,10 +2117,10 @@ def _create_arrays(broadcast_shape, dim_sizes, list_of_core_dims, dtypes, @set_module('numpy') class vectorize: """ - vectorize(pyfunc=np._NoValue, otypes=None, doc=None, excluded=None, - cache=False, signature=None) + vectorize(pyfunc, otypes=None, doc=None, excluded=None, cache=False, + signature=None) - Returns an object that acts like pyfunc, but takes arrays as input. + Generalized function class. Define a vectorized function which takes a nested sequence of objects or numpy arrays as inputs and returns a single numpy array or a tuple of numpy @@ -2134,9 +2134,8 @@ class vectorize: Parameters ---------- - pyfunc : callable, optional + pyfunc : callable A python function or method. - Can be omitted to produce a decorator with keyword arguments. otypes : str or list of dtypes, optional The output data type. It must be specified as either a string of typecode characters or a list of data type specifiers. There should @@ -2168,9 +2167,8 @@ class vectorize: Returns ------- - out : callable - A vectorized function if ``pyfunc`` was provided, - a decorator otherwise. + vectorized : callable + Vectorized function. See Also -------- @@ -2267,44 +2265,18 @@ class vectorize: [0., 0., 1., 2., 1., 0.], [0., 0., 0., 1., 2., 1.]]) - Decorator syntax is supported. The decorator can be called as - a function to provide keyword arguments. - >>>@np.vectorize - ...def identity(x): - ... return x - ... - >>>identity([0, 1, 2]) - array([0, 1, 2]) - >>>@np.vectorize(otypes=[float]) - ...def as_float(x): - ... return x - ... - >>>as_float([0, 1, 2]) - array([0., 1., 2.]) """ - def __init__(self, pyfunc=np._NoValue, otypes=None, doc=None, - excluded=None, cache=False, signature=None): - - if (pyfunc != np._NoValue) and (not callable(pyfunc)): - #Splitting the error message to keep - #the length below 79 characters. - part1 = "When used as a decorator, " - part2 = "only accepts keyword arguments." - raise TypeError(part1 + part2) - + def __init__(self, pyfunc, otypes=None, doc=None, excluded=None, + cache=False, signature=None): self.pyfunc = pyfunc self.cache = cache self.signature = signature - if pyfunc != np._NoValue: - self.__name__ = pyfunc.__name__ - self._ufunc = {} # Caching to improve default performance - self._doc = None - self.__doc__ = doc + if doc is None: self.__doc__ = pyfunc.__doc__ else: - self._doc = doc + self.__doc__ = doc if isinstance(otypes, str): for char in otypes: @@ -2326,15 +2298,7 @@ class vectorize: else: self._in_and_out_core_dims = None - def _init_stage_2(self, pyfunc, *args, **kwargs): - self.__name__ = pyfunc.__name__ - self.pyfunc = pyfunc - if self._doc is None: - self.__doc__ = pyfunc.__doc__ - else: - self.__doc__ = self._doc - - def _call_as_normal(self, *args, **kwargs): + def __call__(self, *args, **kwargs): """ Return arrays with the results of `pyfunc` broadcast (vectorized) over `args` and `kwargs` not in `excluded`. @@ -2364,13 +2328,6 @@ class vectorize: return self._vectorize_call(func=func, args=vargs) - def __call__(self, *args, **kwargs): - if self.pyfunc is np._NoValue: - self._init_stage_2(*args, **kwargs) - return self - - return self._call_as_normal(*args, **kwargs) - def _get_ufunc_and_otypes(self, func, args): """Return (ufunc, otypes).""" # frompyfunc will fail if args is empty |