diff options
-rw-r--r-- | numpy/__init__.pyi | 27 | ||||
-rw-r--r-- | numpy/core/_asarray.pyi | 36 | ||||
-rw-r--r-- | numpy/core/multiarray.pyi | 165 | ||||
-rw-r--r-- | numpy/typing/tests/data/fail/constants.py | 1 | ||||
-rw-r--r-- | numpy/typing/tests/data/reveal/array_constructors.py | 64 | ||||
-rw-r--r-- | numpy/typing/tests/data/reveal/constants.py | 16 |
6 files changed, 226 insertions, 83 deletions
diff --git a/numpy/__init__.pyi b/numpy/__init__.pyi index 066ac2451..85ab4e8d8 100644 --- a/numpy/__init__.pyi +++ b/numpy/__init__.pyi @@ -252,10 +252,6 @@ from numpy.core.fromnumeric import ( ) from numpy.core._asarray import ( - asarray as asarray, - asanyarray as asanyarray, - ascontiguousarray as ascontiguousarray, - asfortranarray as asfortranarray, require as require, ) @@ -295,6 +291,15 @@ from numpy.core.einsumfunc import ( ) from numpy.core.multiarray import ( + ALLOW_THREADS as ALLOW_THREADS, + BUFSIZE as BUFSIZE, + CLIP as CLIP, + MAXDIMS as MAXDIMS, + MAY_SHARE_BOUNDS as MAY_SHARE_BOUNDS, + MAY_SHARE_EXACT as MAY_SHARE_EXACT, + RAISE as RAISE, + WRAP as WRAP, + tracemalloc_domain as tracemalloc_domain, array as array, empty_like as empty_like, empty as empty, @@ -315,6 +320,10 @@ from numpy.core.multiarray import ( unpackbits as unpackbits, shares_memory as shares_memory, may_share_memory as may_share_memory, + asarray as asarray, + asanyarray as asanyarray, + ascontiguousarray as ascontiguousarray, + asfortranarray as asfortranarray, ) from numpy.core.numeric import ( @@ -3454,9 +3463,7 @@ inf: Final[float] infty: Final[float] nan: Final[float] pi: Final[float] -ALLOW_THREADS: Final[int] -BUFSIZE: Final[int] -CLIP: Final[int] + ERR_CALL: Final[int] ERR_DEFAULT: Final[int] ERR_IGNORE: Final[int] @@ -3469,17 +3476,11 @@ FPE_DIVIDEBYZERO: Final[int] FPE_INVALID: Final[int] FPE_OVERFLOW: Final[int] FPE_UNDERFLOW: Final[int] -MAXDIMS: Final[int] -MAY_SHARE_BOUNDS: Final[int] -MAY_SHARE_EXACT: Final[int] -RAISE: Final[int] SHIFT_DIVIDEBYZERO: Final[int] SHIFT_INVALID: Final[int] SHIFT_OVERFLOW: Final[int] SHIFT_UNDERFLOW: Final[int] UFUNC_BUFSIZE_DEFAULT: Final[int] -WRAP: Final[int] -tracemalloc_domain: Final[int] little_endian: Final[bool] True_: Final[bool_] diff --git a/numpy/core/_asarray.pyi b/numpy/core/_asarray.pyi index ee21fc0f1..1928cfe12 100644 --- a/numpy/core/_asarray.pyi +++ b/numpy/core/_asarray.pyi @@ -1,7 +1,7 @@ import sys from typing import TypeVar, Union, Iterable, overload -from numpy import ndarray, _OrderKACF +from numpy import ndarray from numpy.typing import ArrayLike, DTypeLike if sys.version_info >= (3, 8): @@ -11,40 +11,6 @@ else: _ArrayType = TypeVar("_ArrayType", bound=ndarray) -# TODO: The following functions are now defined in C, so should be defined -# in a (not yet existing) `multiarray.pyi`. -# (with the exception of `require`) - -def asarray( - a: object, - dtype: DTypeLike = ..., - order: _OrderKACF = ..., - *, - like: ArrayLike = ... -) -> ndarray: ... -@overload -def asanyarray( - a: _ArrayType, - dtype: None = ..., - order: _OrderKACF = ..., - *, - like: ArrayLike = ... -) -> _ArrayType: ... -@overload -def asanyarray( - a: object, - dtype: DTypeLike = ..., - order: _OrderKACF = ..., - *, - like: ArrayLike = ... -) -> ndarray: ... -def ascontiguousarray( - a: object, dtype: DTypeLike = ..., *, like: ArrayLike = ... -) -> ndarray: ... -def asfortranarray( - a: object, dtype: DTypeLike = ..., *, like: ArrayLike = ... -) -> ndarray: ... - _Requirements = Literal[ "C", "C_CONTIGUOUS", "CONTIGUOUS", "F", "F_CONTIGUOUS", "FORTRAN", diff --git a/numpy/core/multiarray.pyi b/numpy/core/multiarray.pyi index 70048d0e6..30b3f416a 100644 --- a/numpy/core/multiarray.pyi +++ b/numpy/core/multiarray.pyi @@ -58,9 +58,9 @@ from numpy.typing import ( ) if sys.version_info >= (3, 8): - from typing import SupportsIndex, Literal as L + from typing import SupportsIndex, Final, Literal as L else: - from typing_extensions import SupportsIndex, Literal as L + from typing_extensions import SupportsIndex, Final, Literal as L _SCT = TypeVar("_SCT", bound=generic) _ArrayType = TypeVar("_ArrayType", bound=NDArray[Any]) @@ -74,6 +74,24 @@ _ArrayLike = _NestedSequence[_SupportsArray[dtype[_SCT]]] __all__: List[str] +ALLOW_THREADS: Final[int] # 0 or 1 (system-specific) +BUFSIZE: L[8192] +CLIP: L[0] +WRAP: L[1] +RAISE: L[2] +MAXDIMS: L[32] +MAY_SHARE_BOUNDS: L[0] +MAY_SHARE_EXACT: L[-1] +tracemalloc_domain: L[389047] + +@overload +def empty_like( + prototype: _ArrayType, + dtype: None = ..., + order: _OrderKACF = ..., + subok: bool = ..., + shape: Optional[_ShapeLike] = ..., +) -> _ArrayType: ... @overload def empty_like( prototype: _ArrayLike[_SCT], @@ -109,6 +127,17 @@ def empty_like( @overload def array( + object: _ArrayType, + dtype: None = ..., + *, + copy: bool = ..., + order: _OrderKACF = ..., + subok: L[True], + ndmin: int = ..., + like: ArrayLike = ..., +) -> _ArrayType: ... +@overload +def array( object: _ArrayLike[_SCT], dtype: None = ..., *, @@ -376,3 +405,135 @@ def may_share_memory( __b: object, max_work: Optional[int] = ..., ) -> bool: ... + +@overload +def asarray( + a: _ArrayLike[_SCT], + dtype: None = ..., + order: _OrderKACF = ..., + *, + like: ArrayLike = ..., +) -> NDArray[_SCT]: ... +@overload +def asarray( + a: object, + dtype: None = ..., + order: _OrderKACF = ..., + *, + like: ArrayLike = ..., +) -> NDArray[Any]: ... +@overload +def asarray( + a: Any, + dtype: _DTypeLike[_SCT], + order: _OrderKACF = ..., + *, + like: ArrayLike = ..., +) -> NDArray[_SCT]: ... +@overload +def asarray( + a: Any, + dtype: DTypeLike, + order: _OrderKACF = ..., + *, + like: ArrayLike = ..., +) -> NDArray[Any]: ... + +@overload +def asanyarray( + a: _ArrayType, # Preserve subclass-information + dtype: None = ..., + order: _OrderKACF = ..., + *, + like: ArrayLike = ..., +) -> _ArrayType: ... +@overload +def asanyarray( + a: _ArrayLike[_SCT], + dtype: None = ..., + order: _OrderKACF = ..., + *, + like: ArrayLike = ..., +) -> NDArray[_SCT]: ... +@overload +def asanyarray( + a: object, + dtype: None = ..., + order: _OrderKACF = ..., + *, + like: ArrayLike = ..., +) -> NDArray[Any]: ... +@overload +def asanyarray( + a: Any, + dtype: _DTypeLike[_SCT], + order: _OrderKACF = ..., + *, + like: ArrayLike = ..., +) -> NDArray[_SCT]: ... +@overload +def asanyarray( + a: Any, + dtype: DTypeLike, + order: _OrderKACF = ..., + *, + like: ArrayLike = ..., +) -> NDArray[Any]: ... + +@overload +def ascontiguousarray( + a: _ArrayLike[_SCT], + dtype: None = ..., + *, + like: ArrayLike = ..., +) -> NDArray[_SCT]: ... +@overload +def ascontiguousarray( + a: object, + dtype: None = ..., + *, + like: ArrayLike = ..., +) -> NDArray[Any]: ... +@overload +def ascontiguousarray( + a: Any, + dtype: _DTypeLike[_SCT], + *, + like: ArrayLike = ..., +) -> NDArray[_SCT]: ... +@overload +def ascontiguousarray( + a: Any, + dtype: DTypeLike, + *, + like: ArrayLike = ..., +) -> NDArray[Any]: ... + +@overload +def asfortranarray( + a: _ArrayLike[_SCT], + dtype: None = ..., + *, + like: ArrayLike = ..., +) -> NDArray[_SCT]: ... +@overload +def asfortranarray( + a: object, + dtype: None = ..., + *, + like: ArrayLike = ..., +) -> NDArray[Any]: ... +@overload +def asfortranarray( + a: Any, + dtype: _DTypeLike[_SCT], + *, + like: ArrayLike = ..., +) -> NDArray[_SCT]: ... +@overload +def asfortranarray( + a: Any, + dtype: DTypeLike, + *, + like: ArrayLike = ..., +) -> NDArray[Any]: ... diff --git a/numpy/typing/tests/data/fail/constants.py b/numpy/typing/tests/data/fail/constants.py index 67ee0e0bc..cf6d760dc 100644 --- a/numpy/typing/tests/data/fail/constants.py +++ b/numpy/typing/tests/data/fail/constants.py @@ -4,3 +4,4 @@ np.Inf = np.Inf # E: Cannot assign to final np.ALLOW_THREADS = np.ALLOW_THREADS # E: Cannot assign to final np.little_endian = np.little_endian # E: Cannot assign to final np.UFUNC_PYVALS_NAME = np.UFUNC_PYVALS_NAME # E: Cannot assign to final +np.CLIP = 2 # E: Incompatible types diff --git a/numpy/typing/tests/data/reveal/array_constructors.py b/numpy/typing/tests/data/reveal/array_constructors.py index 775b0e1e0..ed966679d 100644 --- a/numpy/typing/tests/data/reveal/array_constructors.py +++ b/numpy/typing/tests/data/reveal/array_constructors.py @@ -1,23 +1,30 @@ -from typing import List, Any +from typing import List, Any, TypeVar +from pathlib import Path + import numpy as np import numpy.typing as npt -class SubClass(np.ndarray): ... +_SCT = TypeVar("_SCT", bound=np.generic, covariant=True) + +class SubClass(np.ndarray[Any, np.dtype[_SCT]]): ... i8: np.int64 A: npt.NDArray[np.float64] -B: SubClass +B: SubClass[np.float64] C: List[int] -def func(i: int, j: int, **kwargs: Any) -> SubClass: ... +def func(i: int, j: int, **kwargs: Any) -> SubClass[np.float64]: ... reveal_type(np.empty_like(A)) # E: numpy.ndarray[Any, numpy.dtype[{float64}]] +reveal_type(np.empty_like(B)) # E: SubClass[{float64}] reveal_type(np.empty_like([1, 1.0])) # E: numpy.ndarray[Any, numpy.dtype[Any]] reveal_type(np.empty_like(A, dtype=np.int64)) # E: numpy.ndarray[Any, numpy.dtype[{int64}]] reveal_type(np.empty_like(A, dtype='c16')) # E: numpy.ndarray[Any, numpy.dtype[Any]] reveal_type(np.array(A)) # E: numpy.ndarray[Any, numpy.dtype[{float64}]] +reveal_type(np.array(B)) # E: numpy.ndarray[Any, numpy.dtype[{float64}]] +reveal_type(np.array(B, subok=True)) # E: SubClass[{float64}] reveal_type(np.array([1, 1.0])) # E: numpy.ndarray[Any, numpy.dtype[Any]] reveal_type(np.array(A, dtype=np.int64)) # E: numpy.ndarray[Any, numpy.dtype[{int64}]] reveal_type(np.array(A, dtype='c16')) # E: numpy.ndarray[Any, numpy.dtype[Any]] @@ -36,33 +43,40 @@ reveal_type(np.concatenate(A, dtype=np.int64)) # E: numpy.ndarray[Any, numpy.dt reveal_type(np.concatenate(A, dtype='c16')) # E: numpy.ndarray[Any, numpy.dtype[Any]] reveal_type(np.concatenate([1, 1.0], out=A)) # E: numpy.ndarray[Any, numpy.dtype[{float64}]] -reveal_type(np.asarray(A)) # E: numpy.ndarray[Any, Any] -reveal_type(np.asarray(B)) # E: numpy.ndarray[Any, Any] -reveal_type(np.asarray(C)) # E: numpy.ndarray[Any, Any] +reveal_type(np.asarray(A)) # E: numpy.ndarray[Any, numpy.dtype[{float64}]] +reveal_type(np.asarray(B)) # E: numpy.ndarray[Any, numpy.dtype[{float64}]] +reveal_type(np.asarray([1, 1.0])) # E: numpy.ndarray[Any, numpy.dtype[Any]] +reveal_type(np.asarray(A, dtype=np.int64)) # E: numpy.ndarray[Any, numpy.dtype[{int64}]] +reveal_type(np.asarray(A, dtype='c16')) # E: numpy.ndarray[Any, numpy.dtype[Any]] reveal_type(np.asanyarray(A)) # E: numpy.ndarray[Any, numpy.dtype[{float64}]] -reveal_type(np.asanyarray(B)) # E: SubClass -reveal_type(np.asanyarray(B, dtype=int)) # E: numpy.ndarray[Any, Any] -reveal_type(np.asanyarray(C)) # E: numpy.ndarray[Any, Any] - -reveal_type(np.ascontiguousarray(A)) # E: numpy.ndarray[Any, Any] -reveal_type(np.ascontiguousarray(B)) # E: numpy.ndarray[Any, Any] -reveal_type(np.ascontiguousarray(C)) # E: numpy.ndarray[Any, Any] - -reveal_type(np.asfortranarray(A)) # E: numpy.ndarray[Any, Any] -reveal_type(np.asfortranarray(B)) # E: numpy.ndarray[Any, Any] -reveal_type(np.asfortranarray(C)) # E: numpy.ndarray[Any, Any] +reveal_type(np.asanyarray(B)) # E: SubClass[{float64}] +reveal_type(np.asanyarray([1, 1.0])) # E: numpy.ndarray[Any, numpy.dtype[Any]] +reveal_type(np.asanyarray(A, dtype=np.int64)) # E: numpy.ndarray[Any, numpy.dtype[{int64}]] +reveal_type(np.asanyarray(A, dtype='c16')) # E: numpy.ndarray[Any, numpy.dtype[Any]] + +reveal_type(np.ascontiguousarray(A)) # E: numpy.ndarray[Any, numpy.dtype[{float64}]] +reveal_type(np.ascontiguousarray(B)) # E: numpy.ndarray[Any, numpy.dtype[{float64}]] +reveal_type(np.ascontiguousarray([1, 1.0])) # E: numpy.ndarray[Any, numpy.dtype[Any]] +reveal_type(np.ascontiguousarray(A, dtype=np.int64)) # E: numpy.ndarray[Any, numpy.dtype[{int64}]] +reveal_type(np.ascontiguousarray(A, dtype='c16')) # E: numpy.ndarray[Any, numpy.dtype[Any]] + +reveal_type(np.asfortranarray(A)) # E: numpy.ndarray[Any, numpy.dtype[{float64}]] +reveal_type(np.asfortranarray(B)) # E: numpy.ndarray[Any, numpy.dtype[{float64}]] +reveal_type(np.asfortranarray([1, 1.0])) # E: numpy.ndarray[Any, numpy.dtype[Any]] +reveal_type(np.asfortranarray(A, dtype=np.int64)) # E: numpy.ndarray[Any, numpy.dtype[{int64}]] +reveal_type(np.asfortranarray(A, dtype='c16')) # E: numpy.ndarray[Any, numpy.dtype[Any]] reveal_type(np.require(A)) # E: numpy.ndarray[Any, numpy.dtype[{float64}]] -reveal_type(np.require(B)) # E: SubClass -reveal_type(np.require(B, requirements=None)) # E: SubClass +reveal_type(np.require(B)) # E: SubClass[{float64}] +reveal_type(np.require(B, requirements=None)) # E: SubClass[{float64}] reveal_type(np.require(B, dtype=int)) # E: numpy.ndarray[Any, Any] reveal_type(np.require(B, requirements="E")) # E: numpy.ndarray[Any, Any] reveal_type(np.require(B, requirements=["ENSUREARRAY"])) # E: numpy.ndarray[Any, Any] reveal_type(np.require(B, requirements={"F", "E"})) # E: numpy.ndarray[Any, Any] -reveal_type(np.require(B, requirements=["C", "OWNDATA"])) # E: SubClass -reveal_type(np.require(B, requirements="W")) # E: SubClass -reveal_type(np.require(B, requirements="A")) # E: SubClass +reveal_type(np.require(B, requirements=["C", "OWNDATA"])) # E: SubClass[{float64}] +reveal_type(np.require(B, requirements="W")) # E: SubClass[{float64}] +reveal_type(np.require(B, requirements="A")) # E: SubClass[{float64}] reveal_type(np.require(C)) # E: numpy.ndarray[Any, Any] reveal_type(np.linspace(0, 10)) # E: numpy.ndarray[Any, Any] @@ -82,7 +96,7 @@ reveal_type(np.ones_like(B, dtype=np.int64)) # E: numpy.ndarray[Any, Any] reveal_type(np.full_like(A, i8)) # E: numpy.ndarray[Any, numpy.dtype[{float64}]] reveal_type(np.full_like(C, i8)) # E: numpy.ndarray[Any, Any] -reveal_type(np.full_like(B, i8)) # E: SubClass +reveal_type(np.full_like(B, i8)) # E: SubClass[{float64}] reveal_type(np.full_like(B, i8, dtype=np.int64)) # E: numpy.ndarray[Any, Any] reveal_type(np.ones(1)) # E: numpy.ndarray[Any, Any] @@ -94,7 +108,7 @@ reveal_type(np.full([1, 1, 1], i8)) # E: numpy.ndarray[Any, Any] reveal_type(np.indices([1, 2, 3])) # E: numpy.ndarray[Any, Any] reveal_type(np.indices([1, 2, 3], sparse=True)) # E: tuple[numpy.ndarray[Any, Any]] -reveal_type(np.fromfunction(func, (3, 5))) # E: SubClass +reveal_type(np.fromfunction(func, (3, 5))) # E: SubClass[{float64}] reveal_type(np.identity(10)) # E: numpy.ndarray[Any, Any] diff --git a/numpy/typing/tests/data/reveal/constants.py b/numpy/typing/tests/data/reveal/constants.py index b2382e861..2adefc0c6 100644 --- a/numpy/typing/tests/data/reveal/constants.py +++ b/numpy/typing/tests/data/reveal/constants.py @@ -16,8 +16,8 @@ reveal_type(np.nan) # E: float reveal_type(np.pi) # E: float reveal_type(np.ALLOW_THREADS) # E: int -reveal_type(np.BUFSIZE) # E: int -reveal_type(np.CLIP) # E: int +reveal_type(np.BUFSIZE) # E: Literal[8192] +reveal_type(np.CLIP) # E: Literal[0] reveal_type(np.ERR_CALL) # E: int reveal_type(np.ERR_DEFAULT) # E: int reveal_type(np.ERR_IGNORE) # E: int @@ -30,17 +30,17 @@ reveal_type(np.FPE_DIVIDEBYZERO) # E: int reveal_type(np.FPE_INVALID) # E: int reveal_type(np.FPE_OVERFLOW) # E: int reveal_type(np.FPE_UNDERFLOW) # E: int -reveal_type(np.MAXDIMS) # E: int -reveal_type(np.MAY_SHARE_BOUNDS) # E: int -reveal_type(np.MAY_SHARE_EXACT) # E: int -reveal_type(np.RAISE) # E: int +reveal_type(np.MAXDIMS) # E: Literal[32] +reveal_type(np.MAY_SHARE_BOUNDS) # E: Literal[0] +reveal_type(np.MAY_SHARE_EXACT) # E: Literal[-1] +reveal_type(np.RAISE) # E: Literal[2] reveal_type(np.SHIFT_DIVIDEBYZERO) # E: int reveal_type(np.SHIFT_INVALID) # E: int reveal_type(np.SHIFT_OVERFLOW) # E: int reveal_type(np.SHIFT_UNDERFLOW) # E: int reveal_type(np.UFUNC_BUFSIZE_DEFAULT) # E: int -reveal_type(np.WRAP) # E: int -reveal_type(np.tracemalloc_domain) # E: int +reveal_type(np.WRAP) # E: Literal[1] +reveal_type(np.tracemalloc_domain) # E: Literal[389047] reveal_type(np.little_endian) # E: bool reveal_type(np.True_) # E: numpy.bool_ |