summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatti Picus <matti.picus@gmail.com>2022-02-24 17:47:59 +0200
committerGitHub <noreply@github.com>2022-02-24 17:47:59 +0200
commitedbdd7ffc7e53807ce24d0708e89c41051621f52 (patch)
tree54e4293d70e8f50fc317841b9bdfc05ce9d1c3c5
parent73e48ae177c4b29cdbdbcfd39e22cf5de6c7f125 (diff)
parent370b404d9652ab1f4086f2726ed63a9e0e013029 (diff)
downloadnumpy-edbdd7ffc7e53807ce24d0708e89c41051621f52.tar.gz
Merge pull request #21111 from BvB93/__array_finalize__
TYP, MAINT: Relax the `obj` type in `__array_finalize__`
-rw-r--r--numpy/__init__.pyi10
-rw-r--r--numpy/typing/tests/data/fail/ndarray_misc.pyi2
-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/ndarray_misc.pyi4
-rw-r--r--numpy/typing/tests/data/reveal/rec.pyi1
6 files changed, 18 insertions, 4 deletions
diff --git a/numpy/__init__.pyi b/numpy/__init__.pyi
index 6ecb3d2da..297c482e5 100644
--- a/numpy/__init__.pyi
+++ b/numpy/__init__.pyi
@@ -1526,7 +1526,9 @@ class ndarray(_ArrayOrScalarCommon, Generic[_ShapeType, _DType_co]):
kwargs: Mapping[str, Any],
) -> Any: ...
- @property
+ # 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__(
@@ -3699,7 +3701,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],
@@ -3811,7 +3813,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: (
@@ -3972,7 +3974,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/fail/ndarray_misc.pyi b/numpy/typing/tests/data/fail/ndarray_misc.pyi
index 8320a44f3..77bd9a44e 100644
--- a/numpy/typing/tests/data/fail/ndarray_misc.pyi
+++ b/numpy/typing/tests/data/fail/ndarray_misc.pyi
@@ -39,3 +39,5 @@ AR_b.__index__() # E: Invalid self argument
AR_f8[1.5] # E: No overload variant
AR_f8["field_a"] # E: No overload variant
AR_f8[["field_a", "field_b"]] # E: Invalid index type
+
+AR_f8.__array_finalize__(object()) # E: incompatible type
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/ndarray_misc.pyi b/numpy/typing/tests/data/reveal/ndarray_misc.pyi
index f91d6351b..c9a42b3e8 100644
--- a/numpy/typing/tests/data/reveal/ndarray_misc.pyi
+++ b/numpy/typing/tests/data/reveal/ndarray_misc.pyi
@@ -212,3 +212,7 @@ reveal_type(AR_f8.dump("test_file")) # E: None
reveal_type(AR_f8.dump(b"test_file")) # E: None
with open("test_file", "wb") as f:
reveal_type(AR_f8.dump(f)) # E: None
+
+reveal_type(AR_f8.__array_finalize__(None)) # E: None
+reveal_type(AR_f8.__array_finalize__(B)) # E: None
+reveal_type(AR_f8.__array_finalize__(AR_f8)) # 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),