summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoriantra <iantrasolari@gmail.com>2022-09-05 14:32:34 +0200
committerCharles Harris <charlesr.harris@gmail.com>2022-09-07 07:25:50 -0600
commit336f3a48490629c93904ad15c7a545177737bed3 (patch)
tree6d12b396515032b20e04b6ac80ba84b7ab52e7c7
parent5a5b6504368e35b0fbd399bad79c7385e4e6d10a (diff)
downloadnumpy-336f3a48490629c93904ad15c7a545177737bed3.tar.gz
BUG: Introduce Unknown array type to deal with NDArray[Any] more gracefully.
-rw-r--r--numpy/_typing/__init__.py1
-rw-r--r--numpy/_typing/_array_like.py13
-rw-r--r--numpy/core/numeric.pyi62
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(