diff options
author | iantra <iantrasolari@gmail.com> | 2022-09-05 14:32:34 +0200 |
---|---|---|
committer | Charles Harris <charlesr.harris@gmail.com> | 2022-09-07 07:25:50 -0600 |
commit | 336f3a48490629c93904ad15c7a545177737bed3 (patch) | |
tree | 6d12b396515032b20e04b6ac80ba84b7ab52e7c7 | |
parent | 5a5b6504368e35b0fbd399bad79c7385e4e6d10a (diff) | |
download | numpy-336f3a48490629c93904ad15c7a545177737bed3.tar.gz |
BUG: Introduce Unknown array type to deal with NDArray[Any] more gracefully.
-rw-r--r-- | numpy/_typing/__init__.py | 1 | ||||
-rw-r--r-- | numpy/_typing/_array_like.py | 13 | ||||
-rw-r--r-- | numpy/core/numeric.pyi | 62 |
3 files changed, 62 insertions, 14 deletions
diff --git a/numpy/_typing/__init__.py b/numpy/_typing/__init__.py index 37ed06871..76b806c7f 100644 --- a/numpy/_typing/__init__.py +++ b/numpy/_typing/__init__.py @@ -198,6 +198,7 @@ from ._array_like import ( _ArrayLikeVoid_co as _ArrayLikeVoid_co, _ArrayLikeStr_co as _ArrayLikeStr_co, _ArrayLikeBytes_co as _ArrayLikeBytes_co, + _ArrayLikeUnknown as _ArrayLikeUnknown, ) from ._generic_alias import ( NDArray as NDArray, diff --git a/numpy/_typing/_array_like.py b/numpy/_typing/_array_like.py index 02f264222..2e5684b0b 100644 --- a/numpy/_typing/_array_like.py +++ b/numpy/_typing/_array_like.py @@ -141,3 +141,16 @@ _ArrayLikeInt = _DualArrayLike[ "dtype[integer[Any]]", int, ] + +# Extra ArrayLike type so that pyright can deal with NDArray[Any] +# Used as the first overload, should only match NDArray[Any], +# not any actual types. +# https://github.com/numpy/numpy/pull/22193 +class _UnknownType: + ... + + +_ArrayLikeUnknown = _DualArrayLike[ + "dtype[_UnknownType]", + _UnknownType, +] diff --git a/numpy/core/numeric.pyi b/numpy/core/numeric.pyi index ed2b03ab4..98d3789a5 100644 --- a/numpy/core/numeric.pyi +++ b/numpy/core/numeric.pyi @@ -43,6 +43,7 @@ from numpy._typing import ( _ArrayLikeComplex_co, _ArrayLikeTD64_co, _ArrayLikeObject_co, + _ArrayLikeUnknown, ) _T = TypeVar("_T") @@ -257,10 +258,10 @@ def flatnonzero(a: ArrayLike) -> NDArray[intp]: ... @overload def correlate( - a: _ArrayLikeObject_co, - v: _ArrayLikeObject_co, + a: _ArrayLikeUnknown, + v: _ArrayLikeUnknown, mode: _CorrelateMode = ..., -) -> NDArray[object_]: ... +) -> NDArray[Any]: ... @overload def correlate( a: _ArrayLikeBool_co, @@ -297,13 +298,19 @@ def correlate( v: _ArrayLikeTD64_co, mode: _CorrelateMode = ..., ) -> NDArray[timedelta64]: ... - @overload -def convolve( +def correlate( a: _ArrayLikeObject_co, v: _ArrayLikeObject_co, mode: _CorrelateMode = ..., ) -> NDArray[object_]: ... + +@overload +def convolve( + a: _ArrayLikeUnknown, + v: _ArrayLikeUnknown, + mode: _CorrelateMode = ..., +) -> NDArray[Any]: ... @overload def convolve( a: _ArrayLikeBool_co, @@ -340,13 +347,19 @@ def convolve( v: _ArrayLikeTD64_co, mode: _CorrelateMode = ..., ) -> NDArray[timedelta64]: ... +@overload +def convolve( + a: _ArrayLikeObject_co, + v: _ArrayLikeObject_co, + mode: _CorrelateMode = ..., +) -> NDArray[object_]: ... @overload def outer( - a: _ArrayLikeObject_co, - b: _ArrayLikeObject_co, + a: _ArrayLikeUnknown, + b: _ArrayLikeUnknown, out: None = ..., -) -> NDArray[object_]: ... +) -> NDArray[Any]: ... @overload def outer( a: _ArrayLikeBool_co, @@ -385,6 +398,12 @@ def outer( ) -> NDArray[timedelta64]: ... @overload def outer( + a: _ArrayLikeObject_co, + b: _ArrayLikeObject_co, + out: None = ..., +) -> NDArray[object_]: ... +@overload +def outer( a: _ArrayLikeComplex_co | _ArrayLikeTD64_co | _ArrayLikeObject_co, b: _ArrayLikeComplex_co | _ArrayLikeTD64_co | _ArrayLikeObject_co, out: _ArrayType, @@ -392,10 +411,10 @@ def outer( @overload def tensordot( - a: _ArrayLikeObject_co, - b: _ArrayLikeObject_co, + a: _ArrayLikeUnknown, + b: _ArrayLikeUnknown, axes: int | tuple[_ShapeLike, _ShapeLike] = ..., -) -> NDArray[object_]: ... +) -> NDArray[Any]: ... @overload def tensordot( a: _ArrayLikeBool_co, @@ -432,6 +451,12 @@ def tensordot( b: _ArrayLikeTD64_co, axes: int | tuple[_ShapeLike, _ShapeLike] = ..., ) -> NDArray[timedelta64]: ... +@overload +def tensordot( + a: _ArrayLikeObject_co, + b: _ArrayLikeObject_co, + axes: int | tuple[_ShapeLike, _ShapeLike] = ..., +) -> NDArray[object_]: ... @overload def roll( @@ -460,13 +485,13 @@ def moveaxis( @overload def cross( - a: _ArrayLikeObject_co, - b: _ArrayLikeObject_co, + a: _ArrayLikeUnknown, + b: _ArrayLikeUnknown, axisa: int = ..., axisb: int = ..., axisc: int = ..., axis: None | int = ..., -) -> NDArray[object_]: ... +) -> NDArray[Any]: ... @overload def cross( a: _ArrayLikeBool_co, @@ -512,6 +537,15 @@ def cross( axisc: int = ..., axis: None | int = ..., ) -> NDArray[complexfloating[Any, Any]]: ... +@overload +def cross( + a: _ArrayLikeObject_co, + b: _ArrayLikeObject_co, + axisa: int = ..., + axisb: int = ..., + axisc: int = ..., + axis: None | int = ..., +) -> NDArray[object_]: ... @overload def indices( |