diff options
author | Charles Harris <charlesr.harris@gmail.com> | 2022-01-24 13:06:38 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-24 13:06:38 -0700 |
commit | 4eb53425ecdad412411d6d174064405f511494eb (patch) | |
tree | d627007958fd05fcf63e69afee6e67cd89166ed6 /numpy/typing | |
parent | 986a8797b9bf7ccb499861bb46ec8ce13fb720ec (diff) | |
parent | 734c4fdb56d8b954bd852eb3133eb9f36277137d (diff) | |
download | numpy-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__.py | 1 | ||||
-rw-r--r-- | numpy/typing/_array_like.py | 30 | ||||
-rw-r--r-- | numpy/typing/_dtype_like.py | 13 | ||||
-rw-r--r-- | numpy/typing/tests/data/fail/multiarray.pyi | 2 | ||||
-rw-r--r-- | numpy/typing/tests/data/reveal/array_constructors.pyi | 2 |
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]] |