diff options
-rw-r--r-- | numpy/__init__.pyi | 11 | ||||
-rw-r--r-- | numpy/typing/tests/data/fail/ndarray_misc.py | 21 | ||||
-rw-r--r-- | numpy/typing/tests/data/pass/ndarray_misc.py | 158 | ||||
-rw-r--r-- | numpy/typing/tests/data/reveal/ndarray_misc.py | 150 |
4 files changed, 336 insertions, 4 deletions
diff --git a/numpy/__init__.pyi b/numpy/__init__.pyi index fd7731133..633aa0ca3 100644 --- a/numpy/__init__.pyi +++ b/numpy/__init__.pyi @@ -521,20 +521,20 @@ class _ArrayOrScalarCommon( ) -> _NdArraySubClass: ... @overload def clip( - self: _ArraySelf, + self, min: ArrayLike = ..., max: Optional[ArrayLike] = ..., out: None = ..., **kwargs: Any, - ) -> Union[_ArraySelf, number]: ... + ) -> Union[number, ndarray]: ... @overload def clip( - self: _ArraySelf, + self, min: None = ..., max: ArrayLike = ..., out: None = ..., **kwargs: Any, - ) -> Union[_ArraySelf, number]: ... + ) -> Union[number, ndarray]: ... @overload def clip( self, @@ -1088,6 +1088,9 @@ class void(flexible): def real(self: _ArraySelf) -> _ArraySelf: ... @property def imag(self: _ArraySelf) -> _ArraySelf: ... + def setfield( + self, val: ArrayLike, dtype: DtypeLike, offset: int = ... + ) -> None: ... class character(flexible): ... # type: ignore diff --git a/numpy/typing/tests/data/fail/ndarray_misc.py b/numpy/typing/tests/data/fail/ndarray_misc.py new file mode 100644 index 000000000..1e1496bfe --- /dev/null +++ b/numpy/typing/tests/data/fail/ndarray_misc.py @@ -0,0 +1,21 @@ +""" +Tests for miscellaneous (non-magic) ``np.ndarray``/``np.generic`` methods. + +More extensive tests are performed for the methods' +function-based counterpart in `../from_numeric.py`. + +""" + +import numpy as np + +f8: np.float64 + +f8.argpartition(0) # E: has no attribute +f8.diagonal() # E: has no attribute +f8.dot(1) # E: has no attribute +f8.nonzero() # E: has no attribute +f8.partition(0) # E: has no attribute +f8.put(0, 2) # E: has no attribute +f8.setfield(2, np.float64) # E: has no attribute +f8.sort() # E: has no attribute +f8.trace() # E: has no attribute diff --git a/numpy/typing/tests/data/pass/ndarray_misc.py b/numpy/typing/tests/data/pass/ndarray_misc.py new file mode 100644 index 000000000..1871aebba --- /dev/null +++ b/numpy/typing/tests/data/pass/ndarray_misc.py @@ -0,0 +1,158 @@ +""" +Tests for miscellaneous (non-magic) ``np.ndarray``/``np.generic`` methods. + +More extensive tests are performed for the methods' +function-based counterpart in `../from_numeric.py`. + +""" + +from typing import cast +import numpy as np + +class SubClass(np.ndarray): ... + +i8 = np.int64(1) +A = np.array([[1]], dtype=np.int64) +B0 = np.empty((), dtype=np.int64).view(SubClass) +B1 = np.empty((1,), dtype=np.int64).view(SubClass) +B2 = np.empty((1, 1), dtype=np.int64).view(SubClass) +C = np.array([0, 1, 2], dtype=np.int64) +D = np.empty(3).view(SubClass) + +i8.all() +A.all() +A.all(axis=0) +A.all(keepdims=True) +A.all(out=B0) + +i8.any() +A.any() +A.any(axis=0) +A.any(keepdims=True) +A.any(out=B0) + +i8.argmax() +A.argmax() +A.argmax(axis=0) +A.argmax(out=B0) + +i8.argmin() +A.argmin() +A.argmin(axis=0) +A.argmin(out=B0) + +i8.argsort() +A.argsort() + +i8.choose([()]) +C.choose([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) +C.choose([[0, 1, 2], [3, 4, 5], [6, 7, 8]], out=D) + +i8.clip(1) +A.clip(1) +A.clip(None, 1) +A.clip(1, out=B2) +A.clip(None, 1, out=B2) + +i8.compress([1]) +A.compress([1]) +A.compress([1], out=B1) + +i8.conj() +A.conj() +B0.conj() + +i8.conjugate() +A.conjugate() +B0.conjugate() + +i8.cumprod() +A.cumprod() +A.cumprod(out=B1) + +i8.cumsum() +A.cumsum() +A.cumsum(out=B1) + +i8.max() +A.max() +A.max(axis=0) +A.max(keepdims=True) +A.max(out=B0) + +i8.mean() +A.mean() +A.mean(axis=0) +A.mean(keepdims=True) +A.mean(out=B0) + +i8.min() +A.min() +A.min(axis=0) +A.min(keepdims=True) +A.min(out=B0) + +i8.newbyteorder() +A.newbyteorder() +B0.newbyteorder('|') + +i8.prod() +A.prod() +A.prod(axis=0) +A.prod(keepdims=True) +A.prod(out=B0) + +i8.ptp() +A.ptp() +A.ptp(axis=0) +A.ptp(keepdims=True) +A.astype(int).ptp(out=B0) + +i8.round() +A.round() +A.round(out=B2) + +i8.repeat(1) +A.repeat(1) +B0.repeat(1) + +i8.std() +A.std() +A.std(axis=0) +A.std(keepdims=True) +A.std(out=B0.astype(np.float64)) + +i8.sum() +A.sum() +A.sum(axis=0) +A.sum(keepdims=True) +A.sum(out=B0) + +i8.take(0) +A.take(0) +A.take([0]) +A.take(0, out=B0) +A.take([0], out=B1) + +i8.var() +A.var() +A.var(axis=0) +A.var(keepdims=True) +A.var(out=B0) + +A.argpartition([0]) + +A.diagonal() + +A.dot(1) +A.dot(1, out=B0) + +A.nonzero() + +C.searchsorted(1) + +A.trace() +A.trace(out=B0) + +void = cast(np.void, np.array(1, dtype=[("f", np.float64)]).take(0)) +void.setfield(10, np.float64) diff --git a/numpy/typing/tests/data/reveal/ndarray_misc.py b/numpy/typing/tests/data/reveal/ndarray_misc.py new file mode 100644 index 000000000..22a4564df --- /dev/null +++ b/numpy/typing/tests/data/reveal/ndarray_misc.py @@ -0,0 +1,150 @@ +""" +Tests for miscellaneous (non-magic) ``np.ndarray``/``np.generic`` methods. + +More extensive tests are performed for the methods' +function-based counterpart in `../from_numeric.py`. + +""" + +import numpy as np + +class SubClass(np.ndarray): ... + +f8: np.float64 +A: np.ndarray +B: SubClass + +reveal_type(f8.all()) # E: numpy.bool_ +reveal_type(A.all()) # E: numpy.bool_ +reveal_type(A.all(axis=0)) # E: Union[numpy.bool_, numpy.ndarray] +reveal_type(A.all(keepdims=True)) # E: Union[numpy.bool_, numpy.ndarray] +reveal_type(A.all(out=B)) # E: SubClass + +reveal_type(f8.any()) # E: numpy.bool_ +reveal_type(A.any()) # E: numpy.bool_ +reveal_type(A.any(axis=0)) # E: Union[numpy.bool_, numpy.ndarray] +reveal_type(A.any(keepdims=True)) # E: Union[numpy.bool_, numpy.ndarray] +reveal_type(A.any(out=B)) # E: SubClass + +reveal_type(f8.argmax()) # E: numpy.signedinteger +reveal_type(A.argmax()) # E: numpy.signedinteger +reveal_type(A.argmax(axis=0)) # E: Union[numpy.signedinteger, numpy.ndarray] +reveal_type(A.argmax(out=B)) # E: SubClass + +reveal_type(f8.argmin()) # E: numpy.signedinteger +reveal_type(A.argmin()) # E: numpy.signedinteger +reveal_type(A.argmin(axis=0)) # E: Union[numpy.signedinteger, numpy.ndarray] +reveal_type(A.argmin(out=B)) # E: SubClass + +reveal_type(f8.argsort()) # E: numpy.ndarray +reveal_type(A.argsort()) # E: numpy.ndarray + +reveal_type(f8.astype(np.int64).choose([()])) # E: numpy.ndarray +reveal_type(A.choose([0])) # E: numpy.ndarray +reveal_type(A.choose([0], out=B)) # E: SubClass + +reveal_type(f8.clip(1)) # E: Union[numpy.number, numpy.ndarray] +reveal_type(A.clip(1)) # E: Union[numpy.number, numpy.ndarray] +reveal_type(A.clip(None, 1)) # E: Union[numpy.number, numpy.ndarray] +reveal_type(A.clip(1, out=B)) # E: SubClass +reveal_type(A.clip(None, 1, out=B)) # E: SubClass + +reveal_type(f8.compress([0])) # E: numpy.ndarray +reveal_type(A.compress([0])) # E: numpy.ndarray +reveal_type(A.compress([0], out=B)) # E: SubClass + +reveal_type(f8.conj()) # E: numpy.float64 +reveal_type(A.conj()) # E: numpy.ndarray +reveal_type(B.conj()) # E: SubClass + +reveal_type(f8.conjugate()) # E: numpy.float64 +reveal_type(A.conjugate()) # E: numpy.ndarray +reveal_type(B.conjugate()) # E: SubClass + +reveal_type(f8.cumprod()) # E: numpy.ndarray +reveal_type(A.cumprod()) # E: numpy.ndarray +reveal_type(A.cumprod(out=B)) # E: SubClass + +reveal_type(f8.cumsum()) # E: numpy.ndarray +reveal_type(A.cumsum()) # E: numpy.ndarray +reveal_type(A.cumsum(out=B)) # E: SubClass + +reveal_type(f8.max()) # E: numpy.number +reveal_type(A.max()) # E: numpy.number +reveal_type(A.max(axis=0)) # E: Union[numpy.number, numpy.ndarray] +reveal_type(A.max(keepdims=True)) # E: Union[numpy.number, numpy.ndarray] +reveal_type(A.max(out=B)) # E: SubClass + +reveal_type(f8.mean()) # E: numpy.number +reveal_type(A.mean()) # E: numpy.number +reveal_type(A.mean(axis=0)) # E: Union[numpy.number, numpy.ndarray] +reveal_type(A.mean(keepdims=True)) # E: Union[numpy.number, numpy.ndarray] +reveal_type(A.mean(out=B)) # E: SubClass + +reveal_type(f8.min()) # E: numpy.number +reveal_type(A.min()) # E: numpy.number +reveal_type(A.min(axis=0)) # E: Union[numpy.number, numpy.ndarray] +reveal_type(A.min(keepdims=True)) # E: Union[numpy.number, numpy.ndarray] +reveal_type(A.min(out=B)) # E: SubClass + +reveal_type(f8.newbyteorder()) # E: numpy.float64 +reveal_type(A.newbyteorder()) # E: numpy.ndarray +reveal_type(B.newbyteorder('|')) # E: SubClass + +reveal_type(f8.prod()) # E: numpy.number +reveal_type(A.prod()) # E: numpy.number +reveal_type(A.prod(axis=0)) # E: Union[numpy.number, numpy.ndarray] +reveal_type(A.prod(keepdims=True)) # E: Union[numpy.number, numpy.ndarray] +reveal_type(A.prod(out=B)) # E: SubClass + +reveal_type(f8.ptp()) # E: numpy.number +reveal_type(A.ptp()) # E: numpy.number +reveal_type(A.ptp(axis=0)) # E: Union[numpy.number, numpy.ndarray] +reveal_type(A.ptp(keepdims=True)) # E: Union[numpy.number, numpy.ndarray] +reveal_type(A.ptp(out=B)) # E: SubClass + +reveal_type(f8.round()) # E: numpy.float64 +reveal_type(A.round()) # E: numpy.ndarray +reveal_type(A.round(out=B)) # E: SubClass + +reveal_type(f8.repeat(1)) # E: numpy.ndarray +reveal_type(A.repeat(1)) # E: numpy.ndarray +reveal_type(B.repeat(1)) # E: numpy.ndarray + +reveal_type(f8.std()) # E: numpy.number +reveal_type(A.std()) # E: numpy.number +reveal_type(A.std(axis=0)) # E: Union[numpy.number, numpy.ndarray] +reveal_type(A.std(keepdims=True)) # E: Union[numpy.number, numpy.ndarray] +reveal_type(A.std(out=B)) # E: SubClass + +reveal_type(f8.sum()) # E: numpy.number +reveal_type(A.sum()) # E: numpy.number +reveal_type(A.sum(axis=0)) # E: Union[numpy.number, numpy.ndarray] +reveal_type(A.sum(keepdims=True)) # E: Union[numpy.number, numpy.ndarray] +reveal_type(A.sum(out=B)) # E: SubClass + +reveal_type(f8.take(0)) # E: numpy.generic +reveal_type(A.take(0)) # E: numpy.generic +reveal_type(A.take([0])) # E: numpy.ndarray +reveal_type(A.take(0, out=B)) # E: SubClass +reveal_type(A.take([0], out=B)) # E: SubClass + +reveal_type(f8.var()) # E: numpy.number +reveal_type(A.var()) # E: numpy.number +reveal_type(A.var(axis=0)) # E: Union[numpy.number, numpy.ndarray] +reveal_type(A.var(keepdims=True)) # E: Union[numpy.number, numpy.ndarray] +reveal_type(A.var(out=B)) # E: SubClass + +reveal_type(A.argpartition([0])) # E: numpy.ndarray + +reveal_type(A.diagonal()) # E: numpy.ndarray + +reveal_type(A.dot(1)) # E: Union[numpy.number, numpy.ndarray] +reveal_type(A.dot(1, out=B)) # E: SubClass + +reveal_type(A.nonzero()) # E: tuple[numpy.ndarray] + +reveal_type(A.searchsorted([1])) # E: numpy.ndarray + +reveal_type(A.trace()) # E: Union[numpy.number, numpy.ndarray] +reveal_type(A.trace(out=B)) # E: SubClass |