summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBas van Beek <43369155+BvB93@users.noreply.github.com>2022-02-23 16:12:59 +0100
committerBas van Beek <43369155+BvB93@users.noreply.github.com>2022-02-23 16:21:31 +0100
commit370b404d9652ab1f4086f2726ed63a9e0e013029 (patch)
treeaa3de28cdcbeac789fbfbb6e8f77ca38f4a0a786
parent0705bde8c0b6f723d6c75b9f029725a325ac461c (diff)
downloadnumpy-370b404d9652ab1f4086f2726ed63a9e0e013029.tar.gz
MAINT: Relax the `obj` type in `__array_finalize__`
-rw-r--r--numpy/__init__.pyi9
-rw-r--r--numpy/typing/tests/data/reveal/chararray.pyi3
-rw-r--r--numpy/typing/tests/data/reveal/memmap.pyi2
-rw-r--r--numpy/typing/tests/data/reveal/rec.pyi1
4 files changed, 12 insertions, 3 deletions
diff --git a/numpy/__init__.pyi b/numpy/__init__.pyi
index 8d82013e2..cabde7969 100644
--- a/numpy/__init__.pyi
+++ b/numpy/__init__.pyi
@@ -1524,6 +1524,9 @@ class ndarray(_ArrayOrScalarCommon, Generic[_ShapeType, _DType_co]):
kwargs: Mapping[str, Any],
) -> Any: ...
+ # NOTE: In practice any object is accepted by `obj`, but as `__array_finalize__`
+ # is a pseudo-abstract method the type has been narrowed down in order to
+ # grant subclasses a bit more flexiblity
def __array_finalize__(self, obj: None | NDArray[Any], /) -> None: ...
def __array_wrap__(
@@ -3693,7 +3696,7 @@ class memmap(ndarray[_ShapeType, _DType_co]):
shape: None | int | tuple[int, ...] = ...,
order: _OrderKACF = ...,
) -> memmap[Any, dtype[Any]]: ...
- def __array_finalize__(self, obj: memmap[Any, Any]) -> None: ...
+ def __array_finalize__(self, obj: object) -> None: ...
def __array_wrap__(
self,
array: memmap[_ShapeType, _DType_co],
@@ -3805,7 +3808,7 @@ class matrix(ndarray[_ShapeType, _DType_co]):
dtype: DTypeLike = ...,
copy: bool = ...,
) -> matrix[Any, Any]: ...
- def __array_finalize__(self, obj: NDArray[Any]) -> None: ...
+ def __array_finalize__(self, obj: object) -> None: ...
@overload
def __getitem__(self, key: (
@@ -3966,7 +3969,7 @@ class chararray(ndarray[_ShapeType, _CharDType]):
order: _OrderKACF = ...,
) -> chararray[Any, dtype[str_]]: ...
- def __array_finalize__(self, obj: NDArray[str_ | bytes_]) -> None: ...
+ def __array_finalize__(self, obj: object) -> None: ...
def __mul__(self, other: _ArrayLikeInt_co) -> chararray[Any, _CharDType]: ...
def __rmul__(self, other: _ArrayLikeInt_co) -> chararray[Any, _CharDType]: ...
def __mod__(self, i: Any) -> chararray[Any, _CharDType]: ...
diff --git a/numpy/typing/tests/data/reveal/chararray.pyi b/numpy/typing/tests/data/reveal/chararray.pyi
index 3da2e1599..61906c860 100644
--- a/numpy/typing/tests/data/reveal/chararray.pyi
+++ b/numpy/typing/tests/data/reveal/chararray.pyi
@@ -127,3 +127,6 @@ reveal_type(AR_S.istitle()) # E: ndarray[Any, dtype[bool_]]
reveal_type(AR_U.isupper()) # E: ndarray[Any, dtype[bool_]]
reveal_type(AR_S.isupper()) # E: ndarray[Any, dtype[bool_]]
+
+reveal_type(AR_U.__array_finalize__(object())) # E: None
+reveal_type(AR_S.__array_finalize__(object())) # E: None
diff --git a/numpy/typing/tests/data/reveal/memmap.pyi b/numpy/typing/tests/data/reveal/memmap.pyi
index 86de8eb08..af7307499 100644
--- a/numpy/typing/tests/data/reveal/memmap.pyi
+++ b/numpy/typing/tests/data/reveal/memmap.pyi
@@ -14,3 +14,5 @@ reveal_type(np.memmap("file.txt", offset=5)) # E: memmap[Any, dtype[{uint8}]]
reveal_type(np.memmap(b"file.txt", dtype=np.float64, shape=(10, 3))) # E: memmap[Any, dtype[{float64}]]
with open("file.txt", "rb") as f:
reveal_type(np.memmap(f, dtype=float, order="K")) # E: memmap[Any, dtype[Any]]
+
+reveal_type(memmap_obj.__array_finalize__(object())) # E: None
diff --git a/numpy/typing/tests/data/reveal/rec.pyi b/numpy/typing/tests/data/reveal/rec.pyi
index b2eaca899..8ea4a6ee8 100644
--- a/numpy/typing/tests/data/reveal/rec.pyi
+++ b/numpy/typing/tests/data/reveal/rec.pyi
@@ -33,6 +33,7 @@ reveal_type(REC_AR_V.field(0, AR_i8)) # E: None
reveal_type(REC_AR_V.field("field_a", AR_i8)) # E: None
reveal_type(REC_AR_V["field_a"]) # E: Any
reveal_type(REC_AR_V.field_a) # E: Any
+reveal_type(REC_AR_V.__array_finalize__(object())) # E: None
reveal_type(np.recarray( # recarray[Any, dtype[record]]
shape=(10, 5),