diff options
author | Peter Andreas Entschev <peter@entschev.com> | 2020-11-16 10:19:39 -0800 |
---|---|---|
committer | Peter Andreas Entschev <peter@entschev.com> | 2020-11-16 10:19:39 -0800 |
commit | adc261a50b11310c97ffbcf57d6e20a5980bfed9 (patch) | |
tree | 0ac71fd30678263d9a240a70cba7f30297123a62 /numpy | |
parent | e0c9b265e171e92ee558c00712d1104e68f65c9b (diff) | |
download | numpy-adc261a50b11310c97ffbcf57d6e20a5980bfed9.tar.gz |
MAINT: Make like= in Python functions strict
Only allow objects that implement __array_function__
Diffstat (limited to 'numpy')
-rw-r--r-- | numpy/core/_asarray.py | 20 | ||||
-rw-r--r-- | numpy/core/numeric.py | 30 | ||||
-rw-r--r-- | numpy/lib/npyio.py | 30 | ||||
-rw-r--r-- | numpy/lib/twodim_base.py | 18 |
4 files changed, 71 insertions, 27 deletions
diff --git a/numpy/core/_asarray.py b/numpy/core/_asarray.py index a406308f3..ade53eeaf 100644 --- a/numpy/core/_asarray.py +++ b/numpy/core/_asarray.py @@ -5,6 +5,7 @@ Functions in the ``as*array`` family that promote array-likes into arrays. """ from .overrides import ( array_function_dispatch, + array_function_dispatch_like, set_array_function_like_doc, set_module, ) @@ -97,7 +98,9 @@ def asarray(a, dtype=None, order=None, *, like=None): """ if like is not None: - return _asarray_with_like(a, dtype=dtype, order=order, like=like) + return array_function_dispatch_like( + _asarray_with_like, a, dtype=dtype, order=order, like=like + ) return array(a, dtype, copy=False, order=order) @@ -166,7 +169,9 @@ def asanyarray(a, dtype=None, order=None, *, like=None): """ if like is not None: - return _asanyarray_with_like(a, dtype=dtype, order=order, like=like) + return array_function_dispatch_like( + _asanyarray_with_like, a, dtype=dtype, order=order, like=like + ) return array(a, dtype, copy=False, order=order, subok=True) @@ -223,7 +228,9 @@ def ascontiguousarray(a, dtype=None, *, like=None): """ if like is not None: - return _ascontiguousarray_with_like(a, dtype=dtype, like=like) + return array_function_dispatch_like( + _ascontiguousarray_with_like, a, dtype=dtype, like=like + ) return array(a, dtype, copy=False, order='C', ndmin=1) @@ -276,7 +283,9 @@ def asfortranarray(a, dtype=None, *, like=None): """ if like is not None: - return _asfortranarray_with_like(a, dtype=dtype, like=like) + return array_function_dispatch_like( + _asfortranarray_with_like, a, dtype=dtype, like=like + ) return array(a, dtype, copy=False, order='F', ndmin=1) @@ -363,7 +372,8 @@ def require(a, dtype=None, requirements=None, *, like=None): """ if like is not None: - return _require_with_like( + return array_function_dispatch_like( + _require_with_like, a, dtype=dtype, requirements=requirements, diff --git a/numpy/core/numeric.py b/numpy/core/numeric.py index 25235f738..f0d1f163a 100644 --- a/numpy/core/numeric.py +++ b/numpy/core/numeric.py @@ -21,7 +21,9 @@ from .multiarray import ( from . import overrides from . import umath from . import shape_base -from .overrides import set_array_function_like_doc, set_module +from .overrides import ( + array_function_dispatch_like, set_array_function_like_doc, set_module + ) from .umath import (multiply, invert, sin, PINF, NAN) from . import numerictypes from .numerictypes import longlong, intc, int_, float_, complex_, bool_ @@ -198,7 +200,9 @@ def ones(shape, dtype=None, order='C', *, like=None): """ if like is not None: - return _ones_with_like(shape, dtype=dtype, order=order, like=like) + return array_function_dispatch_like( + _ones_with_like, shape, dtype=dtype, order=order, like=like + ) a = empty(shape, dtype, order) multiarray.copyto(a, 1, casting='unsafe') @@ -334,7 +338,14 @@ def full(shape, fill_value, dtype=None, order='C', *, like=None): """ if like is not None: - return _full_with_like(shape, fill_value, dtype=dtype, order=order, like=like) + return array_function_dispatch_like( + _full_with_like, + shape, + fill_value, + dtype=dtype, + order=order, + like=like, + ) if dtype is None: fill_value = asarray(fill_value) @@ -1847,7 +1858,14 @@ def fromfunction(function, shape, *, dtype=float, like=None, **kwargs): """ if like is not None: - return _fromfunction_with_like(function, shape, dtype=dtype, like=like, **kwargs) + return array_function_dispatch_like( + _fromfunction_with_like, + function, + shape, + dtype=dtype, + like=like, + **kwargs, + ) args = indices(shape, dtype=dtype) return function(*args, **kwargs) @@ -2168,7 +2186,9 @@ def identity(n, dtype=None, *, like=None): """ if like is not None: - return _identity_with_like(n, dtype=dtype, like=like) + return array_function_dispatch_like( + _identity_with_like, n, dtype=dtype, like=like + ) from numpy import eye return eye(n, dtype=dtype, like=like) diff --git a/numpy/lib/npyio.py b/numpy/lib/npyio.py index 805e59bc1..f6b82dbd3 100644 --- a/numpy/lib/npyio.py +++ b/numpy/lib/npyio.py @@ -14,7 +14,9 @@ from . import format from ._datasource import DataSource from numpy.core import overrides from numpy.core.multiarray import packbits, unpackbits -from numpy.core.overrides import set_array_function_like_doc, set_module +from numpy.core.overrides import ( + array_function_dispatch_like, set_array_function_like_doc, set_module + ) from numpy.core._internal import recursive from ._iotools import ( LineSplitter, NameValidator, StringConverter, ConverterError, @@ -899,10 +901,10 @@ def loadtxt(fname, dtype=float, comments='#', delimiter=None, """ if like is not None: - return _loadtxt_with_like( - fname, dtype=dtype, comments=comments, delimiter=delimiter, - converters=converters, skiprows=skiprows, usecols=usecols, - unpack=unpack, ndmin=ndmin, encoding=encoding, + return array_function_dispatch_like( + _loadtxt_with_like, fname, dtype=dtype, comments=comments, + delimiter=delimiter, converters=converters, skiprows=skiprows, + usecols=usecols, unpack=unpack, ndmin=ndmin, encoding=encoding, max_rows=max_rows, like=like ) @@ -1751,15 +1753,15 @@ def genfromtxt(fname, dtype=float, comments='#', delimiter=None, """ if like is not None: - return _genfromtxt_with_like( - fname, dtype=dtype, comments=comments, delimiter=delimiter, - skip_header=skip_header, skip_footer=skip_footer, - converters=converters, missing_values=missing_values, - filling_values=filling_values, usecols=usecols, names=names, - excludelist=excludelist, deletechars=deletechars, - replace_space=replace_space, autostrip=autostrip, - case_sensitive=case_sensitive, defaultfmt=defaultfmt, - unpack=unpack, usemask=usemask, loose=loose, + return array_function_dispatch_like( + _genfromtxt_with_like, fname, dtype=dtype, comments=comments, + delimiter=delimiter, skip_header=skip_header, + skip_footer=skip_footer, converters=converters, + missing_values=missing_values, filling_values=filling_values, + usecols=usecols, names=names, excludelist=excludelist, + deletechars=deletechars, replace_space=replace_space, + autostrip=autostrip, case_sensitive=case_sensitive, + defaultfmt=defaultfmt, unpack=unpack, usemask=usemask, loose=loose, invalid_raise=invalid_raise, max_rows=max_rows, encoding=encoding, like=like ) diff --git a/numpy/lib/twodim_base.py b/numpy/lib/twodim_base.py index 2b4cbdfbb..099fb2960 100644 --- a/numpy/lib/twodim_base.py +++ b/numpy/lib/twodim_base.py @@ -8,7 +8,9 @@ from numpy.core.numeric import ( asarray, where, int8, int16, int32, int64, empty, promote_types, diagonal, nonzero ) -from numpy.core.overrides import set_array_function_like_doc, set_module +from numpy.core.overrides import ( + array_function_dispatch_like, set_array_function_like_doc, set_module + ) from numpy.core import overrides from numpy.core import iinfo @@ -203,7 +205,15 @@ def eye(N, M=None, k=0, dtype=float, order='C', *, like=None): """ if like is not None: - return _eye_with_like(N, M=M, k=k, dtype=dtype, order=order, like=like) + return array_function_dispatch_like( + _eye_with_like, + N, + M=M, + k=k, + dtype=dtype, + order=order, + like=like + ) if M is None: M = N m = zeros((N, M), dtype=dtype, order=order) @@ -405,7 +415,9 @@ def tri(N, M=None, k=0, dtype=float, *, like=None): """ if like is not None: - return _tri_with_like(N, M=M, k=k, dtype=dtype, like=like) + return array_function_dispatch_like( + _tri_with_like, N, M=M, k=k, dtype=dtype, like=like + ) if M is None: M = N |