summaryrefslogtreecommitdiff
path: root/numpy/typing
diff options
context:
space:
mode:
authorCharles Harris <charlesr.harris@gmail.com>2022-01-24 13:06:38 -0700
committerGitHub <noreply@github.com>2022-01-24 13:06:38 -0700
commit4eb53425ecdad412411d6d174064405f511494eb (patch)
treed627007958fd05fcf63e69afee6e67cd89166ed6 /numpy/typing
parent986a8797b9bf7ccb499861bb46ec8ce13fb720ec (diff)
parent734c4fdb56d8b954bd852eb3133eb9f36277137d (diff)
downloadnumpy-4eb53425ecdad412411d6d174064405f511494eb.tar.gz
Merge pull request #20887 from BvB93/aliases
TYP,MAINT: Add aliases for commonly used unions
Diffstat (limited to 'numpy/typing')
-rw-r--r--numpy/typing/__init__.py1
-rw-r--r--numpy/typing/_array_like.py30
-rw-r--r--numpy/typing/_dtype_like.py13
-rw-r--r--numpy/typing/tests/data/fail/multiarray.pyi2
-rw-r--r--numpy/typing/tests/data/reveal/array_constructors.pyi2
5 files changed, 33 insertions, 15 deletions
diff --git a/numpy/typing/__init__.py b/numpy/typing/__init__.py
index 72ac750ae..acef90ce4 100644
--- a/numpy/typing/__init__.py
+++ b/numpy/typing/__init__.py
@@ -323,6 +323,7 @@ from ._scalars import (
from ._shape import _Shape, _ShapeLike
from ._dtype_like import (
DTypeLike as DTypeLike,
+ _DTypeLike,
_SupportsDType,
_VoidDTypeLike,
_DTypeLikeBool,
diff --git a/numpy/typing/_array_like.py b/numpy/typing/_array_like.py
index bba545b7b..02f264222 100644
--- a/numpy/typing/_array_like.py
+++ b/numpy/typing/_array_like.py
@@ -57,10 +57,16 @@ _FiniteNestedSequence = Union[
Sequence[Sequence[Sequence[Sequence[_T]]]],
]
+# A subset of `npt.ArrayLike` that can be parametrized w.r.t. `np.generic`
+_ArrayLike = Union[
+ _SupportsArray["dtype[_ScalarType]"],
+ _NestedSequence[_SupportsArray["dtype[_ScalarType]"]],
+]
+
# A union representing array-like objects; consists of two typevars:
# One representing types that can be parametrized w.r.t. `np.dtype`
# and another one for the rest
-_ArrayLike = Union[
+_DualArrayLike = Union[
_SupportsArray[_DType],
_NestedSequence[_SupportsArray[_DType]],
_T,
@@ -74,38 +80,38 @@ _ArrayLike = Union[
# is resolved. See also the mypy issue:
#
# https://github.com/python/typing/issues/593
-ArrayLike = _ArrayLike[
+ArrayLike = _DualArrayLike[
dtype,
Union[bool, int, float, complex, str, bytes],
]
# `ArrayLike<X>_co`: array-like objects that can be coerced into `X`
# given the casting rules `same_kind`
-_ArrayLikeBool_co = _ArrayLike[
+_ArrayLikeBool_co = _DualArrayLike[
"dtype[bool_]",
bool,
]
-_ArrayLikeUInt_co = _ArrayLike[
+_ArrayLikeUInt_co = _DualArrayLike[
"dtype[Union[bool_, unsignedinteger[Any]]]",
bool,
]
-_ArrayLikeInt_co = _ArrayLike[
+_ArrayLikeInt_co = _DualArrayLike[
"dtype[Union[bool_, integer[Any]]]",
Union[bool, int],
]
-_ArrayLikeFloat_co = _ArrayLike[
+_ArrayLikeFloat_co = _DualArrayLike[
"dtype[Union[bool_, integer[Any], floating[Any]]]",
Union[bool, int, float],
]
-_ArrayLikeComplex_co = _ArrayLike[
+_ArrayLikeComplex_co = _DualArrayLike[
"dtype[Union[bool_, integer[Any], floating[Any], complexfloating[Any, Any]]]",
Union[bool, int, float, complex],
]
-_ArrayLikeNumber_co = _ArrayLike[
+_ArrayLikeNumber_co = _DualArrayLike[
"dtype[Union[bool_, number[Any]]]",
Union[bool, int, float, complex],
]
-_ArrayLikeTD64_co = _ArrayLike[
+_ArrayLikeTD64_co = _DualArrayLike[
"dtype[Union[bool_, integer[Any], timedelta64]]",
Union[bool, int],
]
@@ -122,16 +128,16 @@ _ArrayLikeVoid_co = Union[
_SupportsArray["dtype[void]"],
_NestedSequence[_SupportsArray["dtype[void]"]],
]
-_ArrayLikeStr_co = _ArrayLike[
+_ArrayLikeStr_co = _DualArrayLike[
"dtype[str_]",
str,
]
-_ArrayLikeBytes_co = _ArrayLike[
+_ArrayLikeBytes_co = _DualArrayLike[
"dtype[bytes_]",
bytes,
]
-_ArrayLikeInt = _ArrayLike[
+_ArrayLikeInt = _DualArrayLike[
"dtype[integer[Any]]",
int,
]
diff --git a/numpy/typing/_dtype_like.py b/numpy/typing/_dtype_like.py
index c9bf1a137..b705d82fd 100644
--- a/numpy/typing/_dtype_like.py
+++ b/numpy/typing/_dtype_like.py
@@ -57,9 +57,12 @@ from ._char_codes import (
_ObjectCodes,
)
-_DTypeLikeNested = Any # TODO: wait for support for recursive types
+_SCT = TypeVar("_SCT", bound=np.generic)
_DType_co = TypeVar("_DType_co", covariant=True, bound=DType[Any])
+_DTypeLikeNested = Any # TODO: wait for support for recursive types
+
+
# Mandatory keys
class _DTypeDictBase(TypedDict):
names: Sequence[str]
@@ -82,6 +85,14 @@ class _SupportsDType(Protocol[_DType_co]):
def dtype(self) -> _DType_co: ...
+# A subset of `npt.DTypeLike` that can be parametrized w.r.t. `np.generic`
+_DTypeLike = Union[
+ "np.dtype[_SCT]",
+ Type[_SCT],
+ _SupportsDType["np.dtype[_SCT]"],
+]
+
+
# Would create a dtype[np.void]
_VoidDTypeLike = Union[
# (flexible_dtype, itemsize)
diff --git a/numpy/typing/tests/data/fail/multiarray.pyi b/numpy/typing/tests/data/fail/multiarray.pyi
index a770e52c5..425ec3d0f 100644
--- a/numpy/typing/tests/data/fail/multiarray.pyi
+++ b/numpy/typing/tests/data/fail/multiarray.pyi
@@ -39,7 +39,7 @@ np.arange(stop=10) # E: No overload variant
np.datetime_data(int) # E: incompatible type
-np.busday_offset("2012", 10) # E: incompatible type
+np.busday_offset("2012", 10) # E: No overload variant
np.datetime_as_string("2012") # E: No overload variant
diff --git a/numpy/typing/tests/data/reveal/array_constructors.pyi b/numpy/typing/tests/data/reveal/array_constructors.pyi
index 448ed7e8b..c629454df 100644
--- a/numpy/typing/tests/data/reveal/array_constructors.pyi
+++ b/numpy/typing/tests/data/reveal/array_constructors.pyi
@@ -193,5 +193,5 @@ reveal_type(np.stack([C, C])) # E: ndarray[Any, dtype[Any]]
reveal_type(np.stack([A, A], axis=0)) # E: Any
reveal_type(np.stack([A, A], out=B)) # E: SubClass[{float64}]
-reveal_type(np.block([[A, A], [A, A]])) # E: ndarray[Any, Any]
+reveal_type(np.block([[A, A], [A, A]])) # E: ndarray[Any, dtype[Any]]
reveal_type(np.block(C)) # E: ndarray[Any, dtype[Any]]