Skip to content

Commit eefb58b

Browse files
authored
🐓 special: work around false positive overload-overlap mypy errors on numpy<2.1 (#785)
2 parents 59ebbc8 + 8b318d5 commit eefb58b

File tree

2 files changed

+44
-41
lines changed

2 files changed

+44
-41
lines changed

ā€Žscipy-stubs/special/_logsumexp.pyi

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import Any, TypeVar, overload
1+
from typing import Any, Never, TypeVar, overload
22

33
import numpy as np
44
import optype.numpy as onp
@@ -15,9 +15,12 @@ _InexactOrArrayT = TypeVar("_InexactOrArrayT", bound=npc.inexact | onp.ArrayND[n
1515

1616
###
1717

18+
# Mypy reports four false positive `overload-overlap` only with `numpy<2.1`
19+
# mypy: disable-error-code="overload-overlap"
20+
1821
@overload # 0d/nd T, axis=None (default), keepdims=False (default)
1922
def logsumexp(
20-
a: _InexactT | onp.ToArrayND[_InexactT, _InexactT],
23+
a: _InexactT | onp.ToArrayND[Never, _InexactT],
2124
axis: None = None,
2225
b: onp.ToComplex | onp.ToComplexND | None = None,
2326
keepdims: onp.ToFalse = False,
@@ -41,7 +44,7 @@ def logsumexp(
4144
) -> np.complex128: ...
4245
@overload # 0d/nd T, keepdims=True
4346
def logsumexp(
44-
a: _InexactT | onp.ToArrayND[_InexactT, _InexactT],
47+
a: _InexactT | onp.ToArrayND[Never, _InexactT],
4548
axis: AnyShape | None = None,
4649
b: onp.ToComplex | onp.ToComplexND | None = None,
4750
*,
@@ -68,7 +71,7 @@ def logsumexp(
6871
) -> onp.ArrayND[np.complex128]: ...
6972
@overload # 0d/nd T, axis=<given>
7073
def logsumexp(
71-
a: _InexactT | onp.ToArrayND[_InexactT, _InexactT],
74+
a: _InexactT | onp.ToArrayND[Never, _InexactT],
7275
axis: AnyShape,
7376
b: onp.ToComplex | onp.ToComplexND | None = None,
7477
*,
@@ -109,7 +112,7 @@ def logsumexp(
109112
) -> onp.ArrayND[np.complex128 | Any] | Any: ...
110113
@overload # 0d/nd T@floating, axis=None (default), keepdims=False (default), return_sign=True
111114
def logsumexp(
112-
a: _FloatingT | onp.ToArrayND[_FloatingT, _FloatingT],
115+
a: _FloatingT | onp.ToArrayND[Never, _FloatingT],
113116
axis: None = None,
114117
b: onp.ToFloat | onp.ToFloatND | None = None,
115118
keepdims: onp.ToFalse = False,
@@ -136,7 +139,7 @@ def logsumexp(
136139
) -> tuple[np.float64, np.complex128]: ...
137140
@overload # 0d/nd T@complexfloating, axis=None (default), keepdims=False (default), return_sign=True
138141
def logsumexp(
139-
a: _CFloatingT | onp.ToArrayND[_CFloatingT, _CFloatingT],
142+
a: _CFloatingT | onp.ToArrayND[Never, _CFloatingT],
140143
axis: None = None,
141144
b: onp.ToFloat | onp.ToFloatND | None = None,
142145
keepdims: onp.ToFalse = False,
@@ -145,7 +148,7 @@ def logsumexp(
145148
) -> tuple[npc.floating, _CFloatingT]: ...
146149
@overload # 0d/nd T@floatinv, keepdims=True, return_sign=True
147150
def logsumexp(
148-
a: _FloatingT | onp.ToArrayND[_FloatingT, _FloatingT],
151+
a: _FloatingT | onp.ToArrayND[Never, _FloatingT],
149152
axis: AnyShape | None = None,
150153
b: onp.ToFloat | onp.ToFloatND | None = None,
151154
*,
@@ -172,7 +175,7 @@ def logsumexp(
172175
) -> tuple[onp.ArrayND[np.float64], onp.ArrayND[np.complex128]]: ...
173176
@overload # 0d/nd T@complexfloating, keepdims=True, return_sign=True
174177
def logsumexp(
175-
a: _CFloatingT | onp.ToArrayND[_CFloatingT, _CFloatingT],
178+
a: _CFloatingT | onp.ToArrayND[Never, _CFloatingT],
176179
axis: AnyShape | None = None,
177180
b: onp.ToComplex | onp.ToComplexND | None = None,
178181
*,
@@ -181,7 +184,7 @@ def logsumexp(
181184
) -> tuple[onp.ArrayND[npc.floating], onp.ArrayND[_CFloatingT]]: ...
182185
@overload # 0d/nd T@floatinv, axis=<given>, return_sign=True
183186
def logsumexp(
184-
a: _FloatingT | onp.ToArrayND[_FloatingT, _FloatingT],
187+
a: _FloatingT | onp.ToArrayND[Never, _FloatingT],
185188
axis: AnyShape,
186189
b: onp.ToFloat | onp.ToFloatND | None = None,
187190
keepdims: onp.ToFalse = False,
@@ -208,7 +211,7 @@ def logsumexp(
208211
) -> tuple[onp.ArrayND[np.float64] | Any, onp.ArrayND[np.complex128] | Any]: ...
209212
@overload # 0d/nd T@complexfloating, axis=<given>, return_sign=True
210213
def logsumexp(
211-
a: _CFloatingT | onp.ToArrayND[_CFloatingT, _CFloatingT],
214+
a: _CFloatingT | onp.ToArrayND[Never, _CFloatingT],
212215
axis: AnyShape,
213216
b: onp.ToComplex | onp.ToComplexND | None = None,
214217
keepdims: onp.ToFalse = False,
@@ -242,7 +245,7 @@ def softmax(x: onp.ToInt | onp.ToJustFloat64, axis: AnyShape | None = None) -> n
242245
@overload # 0d ~complex128
243246
def softmax(x: onp.ToJustComplex128, axis: AnyShape | None = None) -> np.complex128: ...
244247
@overload # nd T@inexact
245-
def softmax(x: onp.ToArrayND[_InexactT, _InexactT], axis: AnyShape | None = None) -> onp.ArrayND[_InexactT]: ...
248+
def softmax(x: onp.ToArrayND[Never, _InexactT], axis: AnyShape | None = None) -> onp.ArrayND[_InexactT]: ...
246249
@overload # nd +float64
247250
def softmax(x: onp.ToIntND | onp.ToJustFloat64_ND, axis: AnyShape | None = None) -> onp.ArrayND[np.float64]: ...
248251
@overload # nd ~complex128
@@ -264,7 +267,7 @@ def log_softmax(x: onp.ToInt | onp.ToJustFloat64, axis: AnyShape | None = None)
264267
@overload # 0d ~complex128
265268
def log_softmax(x: onp.ToJustComplex128, axis: AnyShape | None = None) -> np.complex128: ...
266269
@overload # nd T@inexact
267-
def log_softmax(x: onp.ToArrayND[_InexactT, _InexactT], axis: AnyShape | None = None) -> onp.ArrayND[_InexactT]: ...
270+
def log_softmax(x: onp.ToArrayND[Never, _InexactT], axis: AnyShape | None = None) -> onp.ArrayND[_InexactT]: ...
268271
@overload # nd +float64
269272
def log_softmax(x: onp.ToIntND | onp.ToJustFloat64_ND, axis: AnyShape | None = None) -> onp.ArrayND[np.float64]: ...
270273
@overload # nd ~complex128

ā€Žscipy-stubs/special/_ufuncs.pyi

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# pyright: reportIncompatibleMethodOverride=false
2-
# mypy: disable-error-code="override"
2+
# mypy: disable-error-code="overload-overlap, override"
33

44
from types import EllipsisType
55
from typing import Generic, Literal as L, LiteralString, Never, TypeAlias, TypedDict, final, overload, type_check_only
@@ -813,7 +813,7 @@ class _UFunc11c(_UFunc11[_NameT_co, _IdentityT_co], Generic[_NameT_co, _Identity
813813
@overload
814814
def __call__(self, x: _ToSubComplex, /, out: _Out1 = None, **kw: Unpack[_Kw11c]) -> _Complex: ...
815815
@overload
816-
def __call__(self, x: _Complex_DT, /, out: _Out1 = None, **kw: Unpack[_KwBase]) -> _Complex_DT: ... # type: ignore[overload-overlap]
816+
def __call__(self, x: _Complex_DT, /, out: _Out1 = None, **kw: Unpack[_KwBase]) -> _Complex_DT: ...
817817
@overload
818818
def __call__(self, x: _ToComplex128ND, /, out: _Out1 = None, **kw: Unpack[_Kw11c]) -> _ComplexND: ...
819819
@overload
@@ -841,7 +841,7 @@ class _UFunc11fc(_UFunc11[_NameT_co, _IdentityT_co], Generic[_NameT_co, _Identit
841841
@overload
842842
def __call__(self, x: _ToSubComplex, /, out: _Out1 = None, **kw: Unpack[_Kw11fc]) -> _Inexact: ...
843843
@overload
844-
def __call__(self, x: _Inexact_DT, /, out: _Out1 = None, **kw: Unpack[_KwBase]) -> _Inexact_DT: ... # type: ignore[overload-overlap]
844+
def __call__(self, x: _Inexact_DT, /, out: _Out1 = None, **kw: Unpack[_KwBase]) -> _Inexact_DT: ...
845845
@overload
846846
def __call__(self, x: onp.ToFloat64_ND, /, out: _Out1 = None, **kw: Unpack[_Kw11fc]) -> _FloatND: ...
847847
@overload
@@ -910,7 +910,7 @@ class _UFunc12fc(_UFunc12[_NameT_co, _IdentityT_co], Generic[_NameT_co, _Identit
910910
@overload
911911
def __call__(self, x: _ToSubComplex, /, out: _None2 = ..., **kw: Unpack[_Kw12fc]) -> _Tuple2[_Inexact]: ...
912912
@overload
913-
def __call__(self, x: _Inexact_DT, /, out: _None2 = ..., **kw: Unpack[_KwBase]) -> _Tuple2[_Inexact_DT]: ... # type: ignore[overload-overlap]
913+
def __call__(self, x: _Inexact_DT, /, out: _None2 = ..., **kw: Unpack[_KwBase]) -> _Tuple2[_Inexact_DT]: ...
914914
@overload
915915
def __call__(self, x: onp.ToFloat64_ND, /, out: _None2 = ..., **kw: Unpack[_Kw12fc]) -> _Tuple2[_FloatND]: ...
916916
@overload
@@ -986,7 +986,7 @@ class _UFunc14fc(_UFunc14[_NameT_co, _IdentityT_co], Generic[_NameT_co, _Identit
986986
@overload
987987
def __call__(self, x: _ToSubComplex, /, out: _None4 = ..., **kw: Unpack[_Kw14fc]) -> _Tuple4[_Inexact]: ...
988988
@overload
989-
def __call__(self, x: _Inexact_DT, /, out: _None4 = ..., **kw: Unpack[_KwBase]) -> _Tuple4[_Inexact_DT]: ... # type: ignore[overload-overlap]
989+
def __call__(self, x: _Inexact_DT, /, out: _None4 = ..., **kw: Unpack[_KwBase]) -> _Tuple4[_Inexact_DT]: ...
990990
@overload
991991
def __call__(self, x: onp.ToFloat64_ND, /, out: _None4 = ..., **kw: Unpack[_Kw14fc]) -> _Tuple4[_FloatND]: ...
992992
@overload
@@ -1164,7 +1164,7 @@ class _UFunc21c1(_UFuncWithoutIdentity, _UFunc21[_NameT_co, _IdentityT_co], Gene
11641164
@overload
11651165
def __call__(self, a: onp.ToFloat64, b: _ToSubComplex, /, out: _Out1 = None, **kw: Unpack[_Kw21c1]) -> _Complex: ...
11661166
@overload
1167-
def __call__(self, a: _ToFloat32, b: _Complex_DT, /, out: _Out1 = None, **kw: Unpack[_KwBase]) -> _Complex_DT: ... # type: ignore[overload-overlap]
1167+
def __call__(self, a: _ToFloat32, b: _Complex_DT, /, out: _Out1 = None, **kw: Unpack[_KwBase]) -> _Complex_DT: ...
11681168
@overload
11691169
def __call__(self, a: onp.ToFloat64_ND, b: _ToComplex128_D, /, out: _Out1 = None, **kw: Unpack[_Kw21c1]) -> _ComplexND: ...
11701170
@overload
@@ -1199,11 +1199,11 @@ class _UFunc21fc1(_UFunc21[_NameT_co, _IdentityT_co], Generic[_NameT_co, _Identi
11991199
@overload
12001200
def __call__(self, a: onp.ToFloat64, b: _ToSubFloat, /, out: _Out1 = None, **kw: Unpack[_Kw21fc1]) -> _Float: ...
12011201
@overload
1202-
def __call__(self, a: _ToFloat32, b: _Complex_DT, /, out: _Out1 = None, **kw: Unpack[_KwBase]) -> _Complex_DT: ... # type: ignore[overload-overlap]
1202+
def __call__(self, a: _ToFloat32, b: _Complex_DT, /, out: _Out1 = None, **kw: Unpack[_KwBase]) -> _Complex_DT: ...
12031203
@overload
1204-
def __call__(self, a: _Float_DT | _ToFloat32, b: _Float_DT, /, out: _Out1 = None, **kw: Unpack[_KwBase]) -> _Float_DT: ... # type: ignore[overload-overlap]
1204+
def __call__(self, a: _Float_DT | _ToFloat32, b: _Float_DT, /, out: _Out1 = None, **kw: Unpack[_KwBase]) -> _Float_DT: ...
12051205
@overload
1206-
def __call__(self, a: _Float_DT, b: _Float_DT | _ToFloat32, /, out: _Out1 = None, **kw: Unpack[_KwBase]) -> _Float_DT: ... # type: ignore[overload-overlap]
1206+
def __call__(self, a: _Float_DT, b: _Float_DT | _ToFloat32, /, out: _Out1 = None, **kw: Unpack[_KwBase]) -> _Float_DT: ...
12071207
@overload
12081208
def __call__(self, a: _ToFloat64OrND, b: onp.ToFloat64_ND, /, out: _Out1 = None, **kw: Unpack[_Kw21fc1]) -> _FloatND: ...
12091209
@overload
@@ -1332,9 +1332,9 @@ class _UFunc21fc2(_UFunc21[_NameT_co, _IdentityT_co], Generic[_NameT_co, _Identi
13321332
@overload
13331333
def __call__(self, a: _ToSubComplex, b: _ToSubComplex, /, out: _Out1 = None, **kw: Unpack[_Kw21fc2]) -> _Inexact: ...
13341334
@overload
1335-
def __call__(self, a: _ToFloat32, b: _Inexact_DT, /, out: _Out1 = None, **kw: Unpack[_KwBase]) -> _Inexact_DT: ... # type: ignore[overload-overlap]
1335+
def __call__(self, a: _ToFloat32, b: _Inexact_DT, /, out: _Out1 = None, **kw: Unpack[_KwBase]) -> _Inexact_DT: ...
13361336
@overload
1337-
def __call__(self, a: _Inexact_DT, b: _ToFloat32, /, out: _Out1 = None, **kw: Unpack[_KwBase]) -> _Inexact_DT: ... # type: ignore[overload-overlap]
1337+
def __call__(self, a: _Inexact_DT, b: _ToFloat32, /, out: _Out1 = None, **kw: Unpack[_KwBase]) -> _Inexact_DT: ...
13381338
@overload
13391339
def __call__(self, a: _ToFloat64OrND, b: onp.ToFloat64_ND, /, out: _Out1 = None, **kw: Unpack[_Kw21fc2]) -> _FloatND: ...
13401340
@overload
@@ -1665,23 +1665,23 @@ class _UFunc31fc1(_UFunc31[_NameT_co, _IdentityT_co], Generic[_NameT_co, _Identi
16651665
self, n: _ToSubFloat, a: _ToSubFloat, x: _ToSubFloat, /, out: _Out1 = None, **kw: Unpack[_Kw31fc1]
16661666
) -> _Float: ...
16671667
@overload
1668-
def __call__( # type: ignore[overload-overlap]
1668+
def __call__(
16691669
self, n: _ToSubFloat, a: _ToSubFloat, x: _ToSubComplex, /, out: _Out1 = None, **kw: Unpack[_Kw31fc1]
16701670
) -> _Inexact: ...
16711671
@overload
1672-
def __call__( # type: ignore[overload-overlap]
1672+
def __call__(
16731673
self, n: _ToFloat32, a: _ToFloat32, x: _Complex_DT, /, out: _Out1 = None, **kw: Unpack[_KwBase]
16741674
) -> _Complex_DT: ...
16751675
@overload
1676-
def __call__( # type: ignore[overload-overlap]
1676+
def __call__(
16771677
self, n: _Float_DT | _ToFloat32, a: _Float_DT | _ToFloat32, x: _Float_DT, /, out: _Out1 = None, **kw: Unpack[_KwBase]
16781678
) -> _Float_DT: ...
16791679
@overload
1680-
def __call__( # type: ignore[overload-overlap]
1680+
def __call__(
16811681
self, n: _Float_DT | _ToFloat32, a: _Float_DT, x: _Float_DT | _ToFloat32, /, out: _Out1 = None, **kw: Unpack[_KwBase]
16821682
) -> _Float_DT: ...
16831683
@overload
1684-
def __call__( # type: ignore[overload-overlap]
1684+
def __call__(
16851685
self, n: _Float_DT, a: _Float_DT | _ToFloat32, x: _Float_DT | _ToFloat32, /, out: _Out1 = None, **kw: Unpack[_KwBase]
16861686
) -> _Float_DT: ...
16871687
@overload
@@ -1733,7 +1733,7 @@ class _UFunc31fc3(_UFunc31[_NameT_co, _IdentityT_co], Generic[_NameT_co, _Identi
17331733
self, x: _ToSubComplex, y: _ToSubComplex, z: _ToSubComplex, /, out: _Out1 = None, **kw: Unpack[_Kw31fc3]
17341734
) -> _Inexact: ...
17351735
@overload
1736-
def __call__( # type: ignore[overload-overlap]
1736+
def __call__(
17371737
self,
17381738
x: _Inexact_DT | _ToComplex64,
17391739
y: _Inexact_DT | _ToComplex64,
@@ -1743,7 +1743,7 @@ class _UFunc31fc3(_UFunc31[_NameT_co, _IdentityT_co], Generic[_NameT_co, _Identi
17431743
**kw: Unpack[_KwBase],
17441744
) -> _Inexact_DT: ...
17451745
@overload
1746-
def __call__( # type: ignore[overload-overlap]
1746+
def __call__(
17471747
self,
17481748
x: _Inexact_DT | _ToComplex64,
17491749
y: _Inexact_DT,
@@ -1753,7 +1753,7 @@ class _UFunc31fc3(_UFunc31[_NameT_co, _IdentityT_co], Generic[_NameT_co, _Identi
17531753
**kw: Unpack[_KwBase],
17541754
) -> _Inexact_DT: ...
17551755
@overload
1756-
def __call__( # type: ignore[overload-overlap]
1756+
def __call__(
17571757
self,
17581758
x: _Inexact_DT,
17591759
y: _Inexact_DT | _ToComplex64,
@@ -2039,15 +2039,15 @@ class _UFunc41fc1(_UFunc41[_NameT_co, _IdentityT_co], Generic[_NameT_co, _Identi
20392039
self, n: _ToSubFloat, a: _ToSubFloat, b: _ToSubFloat, x: _ToSubFloat, /, out: _Out1 = None, **kw: Unpack[_Kw41fc1]
20402040
) -> _Float: ...
20412041
@overload
2042-
def __call__( # type: ignore[overload-overlap]
2042+
def __call__(
20432043
self, n: _ToSubFloat, a: _ToSubFloat, b: _ToSubFloat, x: _ToSubComplex, /, out: _Out1 = None, **kw: Unpack[_Kw41fc1]
20442044
) -> _Inexact: ...
20452045
@overload
2046-
def __call__( # type: ignore[overload-overlap]
2046+
def __call__(
20472047
self, n: _ToFloat32, a: _ToFloat32, b: _ToFloat32, x: _Complex_DT, /, out: _Out1 = None, **kw: Unpack[_KwBase]
20482048
) -> _Complex_DT: ...
20492049
@overload
2050-
def __call__( # type: ignore[overload-overlap]
2050+
def __call__(
20512051
self,
20522052
n: _Float_DT | _ToFloat32,
20532053
a: _Float_DT | _ToFloat32,
@@ -2058,7 +2058,7 @@ class _UFunc41fc1(_UFunc41[_NameT_co, _IdentityT_co], Generic[_NameT_co, _Identi
20582058
**kw: Unpack[_KwBase],
20592059
) -> _Float_DT: ...
20602060
@overload
2061-
def __call__( # type: ignore[overload-overlap]
2061+
def __call__(
20622062
self,
20632063
n: _Float_DT | _ToFloat32,
20642064
a: _Float_DT | _ToFloat32,
@@ -2069,7 +2069,7 @@ class _UFunc41fc1(_UFunc41[_NameT_co, _IdentityT_co], Generic[_NameT_co, _Identi
20692069
**kw: Unpack[_KwBase],
20702070
) -> _Float_DT: ...
20712071
@overload
2072-
def __call__( # type: ignore[overload-overlap]
2072+
def __call__(
20732073
self,
20742074
n: _Float_DT | _ToFloat32,
20752075
a: _Float_DT,
@@ -2080,7 +2080,7 @@ class _UFunc41fc1(_UFunc41[_NameT_co, _IdentityT_co], Generic[_NameT_co, _Identi
20802080
**kw: Unpack[_KwBase],
20812081
) -> _Float_DT: ...
20822082
@overload
2083-
def __call__( # type: ignore[overload-overlap]
2083+
def __call__(
20842084
self,
20852085
n: _Float_DT,
20862086
a: _Float_DT | _ToFloat32,
@@ -2210,7 +2210,7 @@ class _UFunc41fc4(_UFunc41[_NameT_co, _IdentityT_co], Generic[_NameT_co, _Identi
22102210
self, x: _ToSubComplex, y: _ToSubComplex, z: _ToSubComplex, p: _ToSubComplex, /, out: _Out1 = None, **kw: Unpack[_Kw41fc4]
22112211
) -> _Inexact: ...
22122212
@overload
2213-
def __call__( # type: ignore[overload-overlap]
2213+
def __call__(
22142214
self,
22152215
x: _Inexact_DT | _ToComplex64,
22162216
y: _Inexact_DT | _ToComplex64,
@@ -2221,7 +2221,7 @@ class _UFunc41fc4(_UFunc41[_NameT_co, _IdentityT_co], Generic[_NameT_co, _Identi
22212221
**kw: Unpack[_Kw41fc4],
22222222
) -> _Inexact_DT: ...
22232223
@overload
2224-
def __call__( # type: ignore[overload-overlap]
2224+
def __call__(
22252225
self,
22262226
x: _Inexact_DT | _ToComplex64,
22272227
y: _Inexact_DT | _ToComplex64,
@@ -2232,7 +2232,7 @@ class _UFunc41fc4(_UFunc41[_NameT_co, _IdentityT_co], Generic[_NameT_co, _Identi
22322232
**kw: Unpack[_Kw41fc4],
22332233
) -> _Inexact_DT: ...
22342234
@overload
2235-
def __call__( # type: ignore[overload-overlap]
2235+
def __call__(
22362236
self,
22372237
x: _Inexact_DT | _ToComplex64,
22382238
y: _Inexact_DT,
@@ -2243,7 +2243,7 @@ class _UFunc41fc4(_UFunc41[_NameT_co, _IdentityT_co], Generic[_NameT_co, _Identi
22432243
**kw: Unpack[_Kw41fc4],
22442244
) -> _Inexact_DT: ...
22452245
@overload
2246-
def __call__( # type: ignore[overload-overlap]
2246+
def __call__(
22472247
self,
22482248
x: _Inexact_DT,
22492249
y: _Inexact_DT | _ToComplex64,

0 commit comments

Comments
Ā (0)