summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--numpy/__init__.pyi11
-rw-r--r--numpy/typing/tests/data/fail/ndarray_misc.py21
-rw-r--r--numpy/typing/tests/data/pass/ndarray_misc.py158
-rw-r--r--numpy/typing/tests/data/reveal/ndarray_misc.py150
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