summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--numpy/__init__.pyi27
-rw-r--r--numpy/core/_asarray.pyi36
-rw-r--r--numpy/core/multiarray.pyi165
-rw-r--r--numpy/typing/tests/data/fail/constants.py1
-rw-r--r--numpy/typing/tests/data/reveal/array_constructors.py64
-rw-r--r--numpy/typing/tests/data/reveal/constants.py16
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_