Skip to content

Commit 8b3260a

Browse files
committed
🥅 np.lib._function_base_impl workarounds for Any shape overload bugs
1 parent 60c9a73 commit 8b3260a

File tree

2 files changed

+110
-83
lines changed

2 files changed

+110
-83
lines changed

‎src/numpy-stubs/@test/static/accept/lib_function_base.pyi

Lines changed: 40 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ import numpy as np
1010
vectorized_func: np.vectorize
1111

1212
f8: np.float64
13-
AR_LIKE_f8: list[float]
14-
AR_LIKE_c16: list[complex]
13+
AR_LIKE_i: list[int]
14+
AR_LIKE_f: list[float]
15+
AR_LIKE_c: list[complex]
1516
AR_LIKE_O: list[Fraction]
1617

1718
AR_i8: _nt.Array[np.int64]
@@ -22,7 +23,7 @@ AR_M: _nt.Array[np.datetime64]
2223
AR_O: _nt.Array[np.object_]
2324
AR_b: _nt.Array[np.bool]
2425
AR_U: _nt.Array[np.str_]
25-
CHAR_AR_U: np.char.chararray[tuple[int, ...], np.dtype[np.str_]]
26+
CHAR_AR_U: np.char.chararray[_nt.AnyShape, np.dtype[np.str_]]
2627

2728
AR_b_list: list[_nt.Array[np.bool]]
2829

@@ -41,12 +42,12 @@ assert_type(np.vectorize(int), np.vectorize)
4142
assert_type(np.vectorize(int, otypes="i", doc="doc", excluded=(), cache=True, signature=None), np.vectorize)
4243

4344
assert_type(np.rot90(AR_f8, k=2), _nt.Array[np.float64])
44-
assert_type(np.rot90(AR_LIKE_f8, axes=(0, 1)), _nt.Array[Any])
45+
assert_type(np.rot90(AR_LIKE_f, axes=(0, 1)), _nt.Array[Any])
4546

4647
assert_type(np.flip(f8), np.float64)
4748
assert_type(np.flip(1.0), Any)
4849
assert_type(np.flip(AR_f8, axis=(0, 1)), _nt.Array[np.float64])
49-
assert_type(np.flip(AR_LIKE_f8, axis=0), _nt.Array[Any])
50+
assert_type(np.flip(AR_LIKE_f, axis=0), _nt.Array[Any])
5051

5152
assert_type(np.iterable(1), bool)
5253
assert_type(np.iterable([1]), bool)
@@ -61,30 +62,30 @@ assert_type(np.average(AR_f8, axis=0), Any)
6162
assert_type(np.average(AR_f8, axis=0, returned=True), tuple[Any, Any])
6263

6364
assert_type(np.asarray_chkfinite(AR_f8), _nt.Array[np.float64])
64-
assert_type(np.asarray_chkfinite(AR_LIKE_f8), _nt.Array[Any])
65+
assert_type(np.asarray_chkfinite(AR_LIKE_f), _nt.Array[Any])
6566
assert_type(np.asarray_chkfinite(AR_f8, dtype=np.float64), _nt.Array[np.float64])
6667
assert_type(np.asarray_chkfinite(AR_f8, dtype=float), _nt.Array[Any])
6768

6869
assert_type(np.piecewise(AR_f8, AR_b, [func]), _nt.Array[np.float64])
6970
assert_type(np.piecewise(AR_f8, AR_b_list, [func]), _nt.Array[np.float64])
7071
assert_type(np.piecewise(AR_f8, AR_b_list, [func], True, -1, kwarg=""), _nt.Array[np.float64])
7172
assert_type(np.piecewise(AR_f8, AR_b_list, [func], True, arg=-1, kwarg=""), _nt.Array[np.float64])
72-
assert_type(np.piecewise(AR_LIKE_f8, AR_b_list, [func]), _nt.Array[Any])
73+
assert_type(np.piecewise(AR_LIKE_f, AR_b_list, [func]), _nt.Array[Any])
7374

7475
assert_type(np.select([AR_f8], [AR_f8]), _nt.Array[np.float64])
7576

76-
assert_type(np.copy(AR_LIKE_f8), _nt.Array[Any])
77+
assert_type(np.copy(AR_LIKE_f), _nt.Array[Any])
7778
assert_type(np.copy(AR_U), _nt.Array[np.str_])
7879
assert_type(np.copy(CHAR_AR_U), _nt.Array[np.str_])
79-
assert_type(np.copy(CHAR_AR_U, "K", subok=True), np.char.chararray[tuple[int, ...], np.dtype[np.str_]])
80-
assert_type(np.copy(CHAR_AR_U, subok=True), np.char.chararray[tuple[int, ...], np.dtype[np.str_]])
80+
assert_type(np.copy(CHAR_AR_U, "K", subok=True), np.char.chararray[_nt.AnyShape, np.dtype[np.str_]])
81+
assert_type(np.copy(CHAR_AR_U, subok=True), np.char.chararray[_nt.AnyShape, np.dtype[np.str_]])
8182

8283
assert_type(np.gradient(AR_f8, axis=None), Any)
83-
assert_type(np.gradient(AR_LIKE_f8, edge_order=2), Any)
84+
assert_type(np.gradient(AR_LIKE_f, edge_order=2), Any)
8485

8586
assert_type(np.diff("bob", n=0), str)
8687
assert_type(np.diff(AR_f8, axis=0), _nt.Array[np.float64])
87-
assert_type(np.diff(AR_LIKE_f8, prepend=1.5), _nt.Array[Any])
88+
assert_type(np.diff(AR_LIKE_f, prepend=1.5), _nt.Array[Any])
8889

8990
assert_type(np.interp(1, [1], AR_f8), np.float64)
9091
assert_type(np.interp(1, [1], [1]), np.float64)
@@ -107,10 +108,10 @@ assert_type(np.unwrap(AR_O), _nt.Array[np.object_])
107108
assert_type(np.sort_complex(AR_f8), _nt.Array[np.complexfloating])
108109

109110
assert_type(np.trim_zeros(AR_f8), _nt.Array[np.float64])
110-
assert_type(np.trim_zeros(AR_LIKE_f8), list[float])
111+
assert_type(np.trim_zeros(AR_LIKE_f), list[float])
111112

112113
assert_type(np.extract(AR_i8, AR_f8), _nt.Array[np.float64])
113-
assert_type(np.extract(AR_i8, AR_LIKE_f8), _nt.Array[Any])
114+
assert_type(np.extract(AR_i8, AR_LIKE_f), _nt.Array[Any])
114115

115116
assert_type(np.place(AR_f8, mask=AR_i8, vals=5.0), None)
116117

@@ -142,7 +143,7 @@ assert_type(np.median(AR_m), np.timedelta64)
142143
assert_type(np.median(AR_O), Any)
143144
assert_type(np.median(AR_f8, keepdims=True), Any)
144145
assert_type(np.median(AR_c16, axis=0), Any)
145-
assert_type(np.median(AR_LIKE_f8, out=AR_c16), _nt.Array[np.complex128])
146+
assert_type(np.median(AR_LIKE_f, out=AR_c16), _nt.Array[np.complex128])
146147

147148
assert_type(np.percentile(AR_f8, 50), np.floating)
148149
assert_type(np.percentile(AR_c16, 50), np.complexfloating)
@@ -172,38 +173,45 @@ assert_type(np.quantile(AR_f8, [0.5], keepdims=True), Any)
172173
assert_type(np.quantile(AR_f8, [0.5], axis=[1]), Any)
173174
assert_type(np.quantile(AR_f8, [0.5], out=AR_c16), _nt.Array[np.complex128])
174175

175-
assert_type(np.trapezoid(AR_LIKE_f8), np.float64)
176-
assert_type(np.trapezoid(AR_LIKE_f8, AR_LIKE_f8), np.float64)
177-
assert_type(np.trapezoid(AR_LIKE_c16), np.complexfloating)
178-
assert_type(np.trapezoid(AR_LIKE_c16, AR_LIKE_f8), np.complexfloating)
179-
assert_type(np.trapezoid(AR_LIKE_f8, AR_LIKE_c16), np.complexfloating)
176+
assert_type(np.trapezoid(AR_LIKE_i), np.float64)
177+
assert_type(np.trapezoid(AR_LIKE_f), np.float64)
178+
assert_type(np.trapezoid(AR_LIKE_f, AR_LIKE_f), np.float64)
179+
assert_type(np.trapezoid(AR_LIKE_f, AR_LIKE_i), np.float64)
180+
assert_type(np.trapezoid(AR_LIKE_i, AR_LIKE_f), np.float64)
181+
assert_type(np.trapezoid(AR_LIKE_c), np.complexfloating)
182+
assert_type(np.trapezoid(AR_LIKE_c, AR_LIKE_f), np.complexfloating)
183+
assert_type(np.trapezoid(AR_LIKE_f, AR_LIKE_c), np.complexfloating)
180184
# pyright bug: https://github.com/microsoft/pyright/issues/9896
181185
assert_type(np.trapezoid(AR_LIKE_O), float) # pyright: ignore[reportAssertTypeFailure]
182-
assert_type(np.trapezoid(AR_LIKE_O, AR_LIKE_f8), float) # pyright: ignore[reportAssertTypeFailure]
183-
assert_type(np.trapezoid(AR_f8), np.floating | _nt.Array[np.floating])
184-
assert_type(np.trapezoid(AR_f8, AR_f8), np.floating | _nt.Array[np.floating])
185-
assert_type(np.trapezoid(AR_c16), np.complexfloating | _nt.Array[np.complexfloating])
186-
assert_type(np.trapezoid(AR_c16, AR_c16), np.complexfloating | _nt.Array[np.complexfloating])
186+
assert_type(np.trapezoid(AR_LIKE_O, AR_LIKE_f), float) # pyright: ignore[reportAssertTypeFailure]
187+
assert_type(np.trapezoid(AR_i8), np.float64 | _nt.Array[np.float64])
188+
assert_type(np.trapezoid(AR_i8, AR_i8), np.float64 | _nt.Array[np.float64])
189+
assert_type(np.trapezoid(AR_f8), np.float64 | _nt.Array[np.float64])
190+
assert_type(np.trapezoid(AR_f8, AR_f8), np.float64 | _nt.Array[np.float64])
191+
assert_type(np.trapezoid(AR_i8, AR_f8), np.float64 | _nt.Array[np.float64])
192+
assert_type(np.trapezoid(AR_f8, AR_i8), np.float64 | _nt.Array[np.float64])
193+
assert_type(np.trapezoid(AR_c16), np.complex128 | _nt.Array[np.complex128])
194+
assert_type(np.trapezoid(AR_c16, AR_c16), np.complex128 | _nt.Array[np.complex128])
187195
assert_type(np.trapezoid(AR_m), np.timedelta64 | _nt.Array[np.timedelta64])
188196
assert_type(np.trapezoid(AR_O), Any)
189-
assert_type(np.trapezoid(AR_O, AR_LIKE_f8), Any)
197+
assert_type(np.trapezoid(AR_O, AR_LIKE_f), Any)
190198

191199
assert_type(np.meshgrid(), tuple[()])
192200
assert_type(np.meshgrid(AR_c16, indexing="ij"), tuple[_nt.Array1D[np.complex128]])
193201
assert_type(np.meshgrid(AR_i8, AR_f8, copy=False), tuple[_nt.Array2D[np.int64], _nt.Array2D[np.float64]])
194-
assert_type(np.meshgrid(AR_LIKE_f8, AR_f8), tuple[_nt.Array2D, _nt.Array2D[np.float64]])
195-
assert_type(np.meshgrid(AR_LIKE_f8, AR_i8, AR_c16), tuple[_nt.Array3D, _nt.Array3D, _nt.Array3D])
202+
assert_type(np.meshgrid(AR_LIKE_f, AR_f8), tuple[_nt.Array2D, _nt.Array2D[np.float64]])
203+
assert_type(np.meshgrid(AR_LIKE_f, AR_i8, AR_c16), tuple[_nt.Array3D, _nt.Array3D, _nt.Array3D])
196204
assert_type(np.meshgrid(AR_f8, AR_f8, AR_f8, AR_f8), tuple[_nt.Array4D, _nt.Array4D, _nt.Array4D, _nt.Array4D])
197-
assert_type(np.meshgrid(*AR_LIKE_f8), tuple[_nt.Array[Any], ...])
205+
assert_type(np.meshgrid(*AR_LIKE_f), tuple[_nt.Array[Any], ...])
198206

199207
assert_type(np.delete(AR_f8, np.s_[:5]), _nt.Array[np.float64])
200-
assert_type(np.delete(AR_LIKE_f8, [0, 4, 9], axis=0), _nt.Array[Any])
208+
assert_type(np.delete(AR_LIKE_f, [0, 4, 9], axis=0), _nt.Array[Any])
201209

202210
assert_type(np.insert(AR_f8, np.s_[:5], 5), _nt.Array[np.float64])
203-
assert_type(np.insert(AR_LIKE_f8, [0, 4, 9], [0.5, 9.2, 7], axis=0), _nt.Array[Any])
211+
assert_type(np.insert(AR_LIKE_f, [0, 4, 9], [0.5, 9.2, 7], axis=0), _nt.Array[Any])
204212

205213
assert_type(np.append(AR_f8, 5), _nt.Array[Any])
206-
assert_type(np.append(AR_LIKE_f8, 1j, axis=0), _nt.Array[Any])
214+
assert_type(np.append(AR_LIKE_f, 1j, axis=0), _nt.Array[Any])
207215

208216
assert_type(np.digitize(4.5, [1]), np.intp)
209217
assert_type(np.digitize(AR_f8, [1, 2, 3]), _nt.Array[np.intp])

‎src/numpy-stubs/lib/_function_base_impl.pyi

Lines changed: 70 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ _ScalarT = TypeVar("_ScalarT", bound=np.generic)
7575
_ScalarT1 = TypeVar("_ScalarT1", bound=np.generic)
7676
_ScalarT2 = TypeVar("_ScalarT2", bound=np.generic)
7777
_NumberT = TypeVar("_NumberT", bound=np.number)
78+
_TrapezoidScalarT = TypeVar("_TrapezoidScalarT", bound=np.inexact | np.timedelta64)
7879

7980
_Tuple2: TypeAlias = tuple[_T, _T]
8081
_ToInt: TypeAlias = CanIndex | SupportsInt
@@ -367,11 +368,6 @@ def copy(a: _ArrayLike[_ScalarT], order: _Order = "K", subok: L[False] = False)
367368
def copy(a: ArrayLike, order: _Order = "K", subok: L[False] = False) -> _nt.Array[Incomplete]: ...
368369

369370
#
370-
@overload
371-
def gradient(
372-
f: _nt.ToGeneric_0d, *varargs: ArrayLike, axis: _ShapeLike | None = None, edge_order: L[1, 2] = 1
373-
) -> tuple[()]: ...
374-
@overload
375371
def gradient(
376372
f: ArrayLike, *varargs: ArrayLike, axis: _ShapeLike | None = None, edge_order: L[1, 2] = 1
377373
) -> Incomplete: ...
@@ -483,13 +479,13 @@ def interp(
483479

484480
#
485481
@overload
486-
def angle(z: _nt.CoComplex_0d, deg: bool = False) -> np.floating: ...
487-
@overload
488482
def angle(z: _nt.CoComplex_1nd, deg: bool = False) -> _nt.Array[np.floating]: ...
489483
@overload
490-
def angle(z: np.object_, deg: bool = False) -> Incomplete: ...
484+
def angle(z: _nt.co_complex | complex, deg: bool = False) -> np.floating: ...
491485
@overload
492486
def angle(z: _nt.ToObject_1nd, deg: bool = False) -> _nt.Array[np.object_]: ...
487+
@overload
488+
def angle(z: _nt.ToObject_nd, deg: bool = False) -> Incomplete: ...
493489

494490
#
495491
@overload
@@ -733,9 +729,9 @@ def i0(x: _nt.CoFloating_nd) -> _nt.Array[np.floating]: ...
733729

734730
#
735731
@overload
736-
def sinc(x: _nt.CoFloating_0d) -> np.floating: ...
732+
def sinc(x: _nt.co_float | float) -> np.floating: ...
737733
@overload
738-
def sinc(x: _nt.ToComplex_0d) -> np.complexfloating: ...
734+
def sinc(x: np.complexfloating | _nt.JustComplex) -> np.complexfloating: ...
739735
@overload
740736
def sinc(x: _nt.CoFloating_1nd) -> _nt.Array[np.floating]: ...
741737
@overload
@@ -964,6 +960,27 @@ def percentile(
964960
# NOTE: Not an alias, but they do have identical signatures (that we can reuse)
965961
quantile = percentile
966962

963+
@overload # workaround for microsoft/pyright#10232
964+
def trapezoid(
965+
y: _nt._ToArray_nnd[np.float64 | _nt.co_integer],
966+
x: _nt._ToArray_nnd[np.float64 | _nt.co_integer] | None = None,
967+
dx: _nt.CoFloat64_0d = 1.0,
968+
axis: CanIndex = -1,
969+
) -> np.float64 | _nt.Array[np.float64]: ...
970+
@overload # workaround for microsoft/pyright#10232
971+
def trapezoid(
972+
y: _nt._ToArray_nnd[_TrapezoidScalarT],
973+
x: _nt.Casts[_TrapezoidScalarT, _nt.NeitherShape] | None = None,
974+
dx: _nt.CastsScalar[_TrapezoidScalarT] | float = 1.0,
975+
axis: CanIndex = -1,
976+
) -> _TrapezoidScalarT | _nt.Array[_TrapezoidScalarT]: ...
977+
@overload # workaround for microsoft/pyright#10232
978+
def trapezoid(
979+
y: _nt.Casts[_TrapezoidScalarT, _nt.NeitherShape],
980+
x: _nt._ToArray_nnd[_TrapezoidScalarT],
981+
dx: _nt.CastsScalar[_TrapezoidScalarT] | float = 1.0,
982+
axis: CanIndex = -1,
983+
) -> _TrapezoidScalarT | _nt.Array[_TrapezoidScalarT]: ...
967984
@overload
968985
def trapezoid(
969986
y: _nt._ToArray2_1ds[np.float64 | _nt.co_integer, float],
@@ -972,6 +989,33 @@ def trapezoid(
972989
axis: CanIndex = -1,
973990
) -> np.float64: ...
974991
@overload
992+
def trapezoid(
993+
y: _nt.CoFloating_1ds, x: _nt.CoFloating_1ds | None = None, dx: _nt.CoFloating_0d = 1.0, axis: CanIndex = -1
994+
) -> np.floating: ...
995+
@overload
996+
def trapezoid(
997+
y: _nt.ToComplex_1ds, x: _nt.CoComplex_1ds | None = None, dx: _nt.CoComplex_0d = 1.0, axis: CanIndex = -1
998+
) -> np.complexfloating: ...
999+
@overload
1000+
def trapezoid(
1001+
y: _nt.CoComplex_1ds, x: _nt.ToComplex_1ds, dx: _nt.CoComplex_0d = 1.0, axis: CanIndex = -1
1002+
) -> np.complexfloating: ...
1003+
@overload
1004+
def trapezoid(
1005+
y: _nt.ToTimeDelta_1ds, x: _nt.CoTimeDelta_1ds | None = None, dx: _nt.CoFloating_0d = 1.0, axis: CanIndex = -1
1006+
) -> np.timedelta64: ...
1007+
@overload
1008+
def trapezoid(
1009+
y: _nt.CoTimeDelta_1ds, x: _nt.ToTimeDelta_1ds, dx: _nt.CoFloating_0d = 1.0, axis: CanIndex = -1
1010+
) -> np.timedelta64: ...
1011+
@overload
1012+
def trapezoid(
1013+
y: Sequence[dt.timedelta],
1014+
x: Sequence[dt.timedelta] | _nt.CoFloating_1ds | None = None,
1015+
dx: _nt.CoComplex_0d = 1.0,
1016+
axis: CanIndex = -1,
1017+
) -> dt.timedelta: ...
1018+
@overload
9751019
def trapezoid(
9761020
y: _nt._ToArray2_2nd[np.float64 | _nt.co_integer, float],
9771021
x: _nt._ToArray2_1nd[np.float64 | _nt.co_integer, float] | None = None,
@@ -986,10 +1030,6 @@ def trapezoid(
9861030
axis: CanIndex = -1,
9871031
) -> _nt.Array[np.float64]: ...
9881032
@overload
989-
def trapezoid(
990-
y: _nt.CoFloating_1ds, x: _nt.CoFloating_1ds | None = None, dx: _nt.CoFloating_0d = 1.0, axis: CanIndex = -1
991-
) -> np.floating: ...
992-
@overload
9931033
def trapezoid(
9941034
y: _nt.CoFloating_2nd, x: _nt.CoFloating_1nd | None = None, dx: _nt.CoFloating_0d = 1.0, axis: CanIndex = -1
9951035
) -> _nt.Array[np.floating]: ...
@@ -998,14 +1038,6 @@ def trapezoid(
9981038
y: _nt.CoFloating_1nd, x: _nt.CoFloating_2nd, dx: _nt.CoFloating_0d = 1.0, axis: CanIndex = -1
9991039
) -> _nt.Array[np.floating]: ...
10001040
@overload
1001-
def trapezoid(
1002-
y: _nt.CoFloating_1nd, x: _nt.CoFloating_1nd | None = None, dx: _nt.CoFloating_0d = 1.0, axis: CanIndex = -1
1003-
) -> np.floating | _nt.Array[np.floating]: ...
1004-
@overload
1005-
def trapezoid(
1006-
y: _nt.ToComplex_1ds, x: _nt.CoComplex_1ds | None = None, dx: _nt.CoComplex_0d = 1.0, axis: CanIndex = -1
1007-
) -> np.complexfloating: ...
1008-
@overload
10091041
def trapezoid(
10101042
y: _nt.ToComplex_2nd, x: _nt.CoComplex_1nd | None = None, dx: _nt.CoComplex_0d = 1.0, axis: CanIndex = -1
10111043
) -> _nt.Array[np.complexfloating]: ...
@@ -1014,14 +1046,6 @@ def trapezoid(
10141046
y: _nt.ToComplex_1nd, x: _nt.CoComplex_2nd, dx: _nt.CoComplex_0d = 1.0, axis: CanIndex = -1
10151047
) -> _nt.Array[np.complexfloating]: ...
10161048
@overload
1017-
def trapezoid(
1018-
y: _nt.ToComplex_1nd, x: _nt.CoComplex_1nd | None = None, dx: _nt.CoComplex_0d = 1.0, axis: CanIndex = -1
1019-
) -> np.complexfloating | _nt.Array[np.complexfloating]: ...
1020-
@overload
1021-
def trapezoid(
1022-
y: _nt.CoComplex_1ds, x: _nt.ToComplex_1ds, dx: _nt.CoComplex_0d = 1.0, axis: CanIndex = -1
1023-
) -> np.complexfloating: ...
1024-
@overload
10251049
def trapezoid(
10261050
y: _nt.CoComplex_2nd, x: _nt.ToComplex_1nd, dx: _nt.CoComplex_0d = 1.0, axis: CanIndex = -1
10271051
) -> _nt.Array[np.complexfloating]: ...
@@ -1031,48 +1055,41 @@ def trapezoid(
10311055
) -> _nt.Array[np.complexfloating]: ...
10321056
@overload
10331057
def trapezoid(
1034-
y: _nt.CoComplex_1nd, x: _nt.ToComplex_1nd, dx: _nt.CoComplex_0d = 1.0, axis: CanIndex = -1
1035-
) -> np.complexfloating | _nt.Array[np.complexfloating]: ...
1058+
y: _nt.ToTimeDelta_2nd, x: _nt.CoTimeDelta_1nd | None = None, dx: _nt.CoFloating_0d = 1.0, axis: CanIndex = -1
1059+
) -> _nt.Array[np.timedelta64]: ...
10361060
@overload
10371061
def trapezoid(
1038-
y: _nt.ToTimeDelta_1ds, x: _nt.CoTimeDelta_1ds | None = None, dx: _nt.CoFloating_0d = 1.0, axis: CanIndex = -1
1039-
) -> np.timedelta64: ...
1062+
y: _nt.ToTimeDelta_1nd, x: _nt.CoTimeDelta_2nd, dx: _nt.CoFloating_0d = 1.0, axis: CanIndex = -1
1063+
) -> _nt.Array[np.timedelta64]: ...
10401064
@overload
10411065
def trapezoid(
1042-
y: _nt.ToTimeDelta_2nd, x: _nt.CoTimeDelta_1nd | None = None, dx: _nt.CoFloating_0d = 1.0, axis: CanIndex = -1
1066+
y: _nt.CoTimeDelta_2nd, x: _nt.ToTimeDelta_1nd, dx: _nt.CoFloating_0d = 1.0, axis: CanIndex = -1
10431067
) -> _nt.Array[np.timedelta64]: ...
10441068
@overload
10451069
def trapezoid(
1046-
y: _nt.ToTimeDelta_1nd, x: _nt.CoTimeDelta_2nd, dx: _nt.CoFloating_0d = 1.0, axis: CanIndex = -1
1070+
y: _nt.CoTimeDelta_1nd, x: _nt.ToTimeDelta_2nd, dx: _nt.CoFloating_0d = 1.0, axis: CanIndex = -1
10471071
) -> _nt.Array[np.timedelta64]: ...
10481072
@overload
10491073
def trapezoid(
1050-
y: _nt.ToTimeDelta_1nd, x: _nt.CoTimeDelta_1nd | None = None, dx: _nt.CoFloating_0d = 1.0, axis: CanIndex = -1
1051-
) -> np.timedelta64 | _nt.Array[np.timedelta64]: ...
1074+
y: _nt.CoFloating_1nd, x: _nt.CoFloating_1nd | None = None, dx: _nt.CoFloating_0d = 1.0, axis: CanIndex = -1
1075+
) -> np.floating | _nt.Array[np.floating]: ...
10521076
@overload
10531077
def trapezoid(
1054-
y: _nt.CoTimeDelta_1ds, x: _nt.ToTimeDelta_1ds, dx: _nt.CoFloating_0d = 1.0, axis: CanIndex = -1
1055-
) -> np.timedelta64: ...
1078+
y: _nt.ToComplex_1nd, x: _nt.CoComplex_1nd | None = None, dx: _nt.CoComplex_0d = 1.0, axis: CanIndex = -1
1079+
) -> np.complexfloating | _nt.Array[np.complexfloating]: ...
10561080
@overload
10571081
def trapezoid(
1058-
y: _nt.CoTimeDelta_2nd, x: _nt.ToTimeDelta_1nd, dx: _nt.CoFloating_0d = 1.0, axis: CanIndex = -1
1059-
) -> _nt.Array[np.timedelta64]: ...
1082+
y: _nt.CoComplex_1nd, x: _nt.ToComplex_1nd, dx: _nt.CoComplex_0d = 1.0, axis: CanIndex = -1
1083+
) -> np.complexfloating | _nt.Array[np.complexfloating]: ...
10601084
@overload
10611085
def trapezoid(
1062-
y: _nt.CoTimeDelta_1nd, x: _nt.ToTimeDelta_2nd, dx: _nt.CoFloating_0d = 1.0, axis: CanIndex = -1
1063-
) -> _nt.Array[np.timedelta64]: ...
1086+
y: _nt.ToTimeDelta_1nd, x: _nt.CoTimeDelta_1nd | None = None, dx: _nt.CoFloating_0d = 1.0, axis: CanIndex = -1
1087+
) -> np.timedelta64 | _nt.Array[np.timedelta64]: ...
10641088
@overload
10651089
def trapezoid(
10661090
y: _nt.CoTimeDelta_1nd, x: _nt.ToTimeDelta_1nd, dx: _nt.CoFloating_0d = 1.0, axis: CanIndex = -1
10671091
) -> np.timedelta64 | _nt.Array[np.timedelta64]: ...
10681092
@overload
1069-
def trapezoid(
1070-
y: Sequence[dt.timedelta],
1071-
x: Sequence[dt.timedelta] | _nt.CoFloating_1ds | None = None,
1072-
dx: _nt.CoComplex_0d = 1.0,
1073-
axis: CanIndex = -1,
1074-
) -> dt.timedelta: ...
1075-
@overload
10761093
def trapezoid(
10771094
y: Sequence[_CanRMulFloat[_T]],
10781095
x: Sequence[_CanRMulFloat[_T]] | Sequence[_T] | None = None,
@@ -1174,6 +1191,8 @@ def insert(
11741191
def append(arr: ArrayLike, values: ArrayLike, axis: CanIndex | None = ...) -> _nt.Array[Incomplete]: ...
11751192

11761193
#
1194+
@overload # workaround for microsoft/pyright#10232
1195+
def digitize(x: _nt._ToArray_nnd[_nt.co_float], bins: _nt.CoFloating_1d, right: bool = False) -> _nt.Array[np.intp]: ...
11771196
@overload
11781197
def digitize(x: _nt.CoFloating_0d, bins: _nt.CoFloating_1d, right: bool = False) -> np.intp: ...
11791198
@overload

0 commit comments

Comments
 (0)