Skip to content

Commit c4371eb

Browse files
authored
Merge pull request #28706 from charris/backport-28702
TYP: Fix inconsistent ``NDArray[float64].__[r]truediv__`` return type with ``float``
2 parents 202732d + bd89621 commit c4371eb

2 files changed

Lines changed: 88 additions & 2 deletions

File tree

numpy/__init__.pyi

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2994,7 +2994,7 @@ class ndarray(_ArrayOrScalarCommon, Generic[_ShapeT_co, _DType_co]):
29942994
def __rmul__(self: NDArray[Any], other: _ArrayLikeObject_co, /) -> Any: ...
29952995

29962996
@overload
2997-
def __truediv__(self: _ArrayInt_co, other: _ArrayLikeFloat64_co, /) -> NDArray[float64]: ...
2997+
def __truediv__(self: _ArrayInt_co | NDArray[floating[_64Bit]], other: _ArrayLikeFloat64_co, /) -> NDArray[float64]: ...
29982998
@overload
29992999
def __truediv__(self: _ArrayFloat64_co, other: _ArrayLikeInt_co | _ArrayLike[floating[_64Bit]], /) -> NDArray[float64]: ...
30003000
@overload
@@ -3025,7 +3025,7 @@ class ndarray(_ArrayOrScalarCommon, Generic[_ShapeT_co, _DType_co]):
30253025
def __truediv__(self: NDArray[Any], other: _ArrayLikeObject_co, /) -> Any: ...
30263026

30273027
@overload
3028-
def __rtruediv__(self: _ArrayInt_co, other: _ArrayLikeFloat64_co, /) -> NDArray[float64]: ...
3028+
def __rtruediv__(self: _ArrayInt_co | NDArray[floating[_64Bit]], other: _ArrayLikeFloat64_co, /) -> NDArray[float64]: ...
30293029
@overload
30303030
def __rtruediv__(self: _ArrayFloat64_co, other: _ArrayLikeInt_co | _ArrayLike[floating[_64Bit]], /) -> NDArray[float64]: ...
30313031
@overload

numpy/typing/tests/data/reveal/arithmetic.pyi

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,92 @@ assert_type(AR_LIKE_m - AR_O, Any)
185185
assert_type(AR_LIKE_M - AR_O, Any)
186186
assert_type(AR_LIKE_O - AR_O, Any)
187187

188+
# Array "true" division
189+
190+
assert_type(AR_f / b, npt.NDArray[np.float64])
191+
assert_type(AR_f / i, npt.NDArray[np.float64])
192+
assert_type(AR_f / f, npt.NDArray[np.float64])
193+
194+
assert_type(b / AR_f, npt.NDArray[np.float64])
195+
assert_type(i / AR_f, npt.NDArray[np.float64])
196+
assert_type(f / AR_f, npt.NDArray[np.float64])
197+
198+
assert_type(AR_b / AR_LIKE_b, npt.NDArray[np.float64])
199+
assert_type(AR_b / AR_LIKE_u, npt.NDArray[np.float64])
200+
assert_type(AR_b / AR_LIKE_i, npt.NDArray[np.float64])
201+
assert_type(AR_b / AR_LIKE_f, npt.NDArray[np.float64])
202+
assert_type(AR_b / AR_LIKE_O, Any)
203+
204+
assert_type(AR_LIKE_b / AR_b, npt.NDArray[np.float64])
205+
assert_type(AR_LIKE_u / AR_b, npt.NDArray[np.float64])
206+
assert_type(AR_LIKE_i / AR_b, npt.NDArray[np.float64])
207+
assert_type(AR_LIKE_f / AR_b, npt.NDArray[np.float64])
208+
assert_type(AR_LIKE_O / AR_b, Any)
209+
210+
assert_type(AR_u / AR_LIKE_b, npt.NDArray[np.float64])
211+
assert_type(AR_u / AR_LIKE_u, npt.NDArray[np.float64])
212+
assert_type(AR_u / AR_LIKE_i, npt.NDArray[np.float64])
213+
assert_type(AR_u / AR_LIKE_f, npt.NDArray[np.float64])
214+
assert_type(AR_u / AR_LIKE_O, Any)
215+
216+
assert_type(AR_LIKE_b / AR_u, npt.NDArray[np.float64])
217+
assert_type(AR_LIKE_u / AR_u, npt.NDArray[np.float64])
218+
assert_type(AR_LIKE_i / AR_u, npt.NDArray[np.float64])
219+
assert_type(AR_LIKE_f / AR_u, npt.NDArray[np.float64])
220+
assert_type(AR_LIKE_m / AR_u, npt.NDArray[np.timedelta64])
221+
assert_type(AR_LIKE_O / AR_u, Any)
222+
223+
assert_type(AR_i / AR_LIKE_b, npt.NDArray[np.float64])
224+
assert_type(AR_i / AR_LIKE_u, npt.NDArray[np.float64])
225+
assert_type(AR_i / AR_LIKE_i, npt.NDArray[np.float64])
226+
assert_type(AR_i / AR_LIKE_f, npt.NDArray[np.float64])
227+
assert_type(AR_i / AR_LIKE_O, Any)
228+
229+
assert_type(AR_LIKE_b / AR_i, npt.NDArray[np.float64])
230+
assert_type(AR_LIKE_u / AR_i, npt.NDArray[np.float64])
231+
assert_type(AR_LIKE_i / AR_i, npt.NDArray[np.float64])
232+
assert_type(AR_LIKE_f / AR_i, npt.NDArray[np.float64])
233+
assert_type(AR_LIKE_m / AR_i, npt.NDArray[np.timedelta64])
234+
assert_type(AR_LIKE_O / AR_i, Any)
235+
236+
assert_type(AR_f / AR_LIKE_b, npt.NDArray[np.float64])
237+
assert_type(AR_f / AR_LIKE_u, npt.NDArray[np.float64])
238+
assert_type(AR_f / AR_LIKE_i, npt.NDArray[np.float64])
239+
assert_type(AR_f / AR_LIKE_f, npt.NDArray[np.float64])
240+
assert_type(AR_f / AR_LIKE_O, Any)
241+
242+
assert_type(AR_LIKE_b / AR_f, npt.NDArray[np.float64])
243+
assert_type(AR_LIKE_u / AR_f, npt.NDArray[np.float64])
244+
assert_type(AR_LIKE_i / AR_f, npt.NDArray[np.float64])
245+
assert_type(AR_LIKE_f / AR_f, npt.NDArray[np.float64])
246+
assert_type(AR_LIKE_m / AR_f, npt.NDArray[np.timedelta64])
247+
assert_type(AR_LIKE_O / AR_f, Any)
248+
249+
assert_type(AR_m / AR_LIKE_u, npt.NDArray[np.timedelta64])
250+
assert_type(AR_m / AR_LIKE_i, npt.NDArray[np.timedelta64])
251+
assert_type(AR_m / AR_LIKE_f, npt.NDArray[np.timedelta64])
252+
assert_type(AR_m / AR_LIKE_m, npt.NDArray[np.float64])
253+
assert_type(AR_m / AR_LIKE_O, Any)
254+
255+
assert_type(AR_LIKE_m / AR_m, npt.NDArray[np.float64])
256+
assert_type(AR_LIKE_O / AR_m, Any)
257+
258+
assert_type(AR_O / AR_LIKE_b, Any)
259+
assert_type(AR_O / AR_LIKE_u, Any)
260+
assert_type(AR_O / AR_LIKE_i, Any)
261+
assert_type(AR_O / AR_LIKE_f, Any)
262+
assert_type(AR_O / AR_LIKE_m, Any)
263+
assert_type(AR_O / AR_LIKE_M, Any)
264+
assert_type(AR_O / AR_LIKE_O, Any)
265+
266+
assert_type(AR_LIKE_b / AR_O, Any)
267+
assert_type(AR_LIKE_u / AR_O, Any)
268+
assert_type(AR_LIKE_i / AR_O, Any)
269+
assert_type(AR_LIKE_f / AR_O, Any)
270+
assert_type(AR_LIKE_m / AR_O, Any)
271+
assert_type(AR_LIKE_M / AR_O, Any)
272+
assert_type(AR_LIKE_O / AR_O, Any)
273+
188274
# Array floor division
189275

190276
assert_type(AR_b // AR_LIKE_b, npt.NDArray[np.int8])

0 commit comments

Comments
 (0)