Skip to content

Commit a094e3e

Browse files
committed
remove __bool__, and comparisons (eq/ne/gt/lt/...) with Series/Index as they return NotImplemented
1 parent 08e604c commit a094e3e

File tree

2 files changed

+20
-53
lines changed

2 files changed

+20
-53
lines changed

pandas-stubs/_libs/missing.pyi

Lines changed: 14 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ from typing_extensions import Self
1515
class NAType:
1616
def __new__(cls, *args: Any, **kwargs: Any) -> Self: ...
1717
def __format__(self, format_spec: str) -> str: ...
18-
def __bool__(self) -> None: ...
1918
def __hash__(self) -> int: ...
2019
def __reduce__(self) -> str: ...
2120
@overload
@@ -135,7 +134,7 @@ class NAType:
135134
@overload # type: ignore[override]
136135
def __eq__( # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload]
137136
self, other: Series, /
138-
) -> Series: ...
137+
) -> Series[bool]: ...
139138
@overload
140139
def __eq__(self, other: Index, /) -> BooleanArray: ... # type: ignore[overload-overlap]
141140
@overload
@@ -145,7 +144,7 @@ class NAType:
145144
@overload # type: ignore[override]
146145
def __ne__( # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload]
147146
self, other: Series, /
148-
) -> Series: ...
147+
) -> Series[bool]: ...
149148
@overload
150149
def __ne__(self, other: Index, /) -> BooleanArray: ... # type: ignore[overload-overlap]
151150
@overload
@@ -155,31 +154,31 @@ class NAType:
155154
@overload
156155
def __le__( # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload]
157156
self, other: Series, /
158-
) -> Series: ...
157+
) -> Series[bool]: ...
159158
@overload
160159
def __le__(self, other: Index, /) -> BooleanArray: ... # type: ignore[overload-overlap]
161160
@overload
162161
def __le__(self, other: object, /) -> NAType: ...
163162
@overload
164163
def __lt__( # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload]
165164
self, other: Series, /
166-
) -> Series: ...
165+
) -> Series[bool]: ...
167166
@overload
168167
def __lt__(self, other: Index, /) -> BooleanArray: ... # type: ignore[overload-overlap]
169168
@overload
170169
def __lt__(self, other: object, /) -> NAType: ...
171170
@overload
172171
def __gt__( # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload]
173172
self, other: Series, /
174-
) -> Series: ...
173+
) -> Series[bool]: ...
175174
@overload
176175
def __gt__(self, other: Index, /) -> BooleanArray: ... # type: ignore[overload-overlap]
177176
@overload
178177
def __gt__(self, other: object, /) -> NAType: ...
179178
@overload
180179
def __ge__( # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload]
181180
self, other: Series, /
182-
) -> Series: ...
181+
) -> Series[bool]: ...
183182
@overload
184183
def __ge__(self, other: Index, /) -> BooleanArray: ... # type: ignore[overload-overlap]
185184
@overload
@@ -205,45 +204,21 @@ class NAType:
205204
@overload
206205
def __rpow__(self, other: object, /) -> NAType: ...
207206
@overload
208-
def __and__( # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload]
209-
self, other: Series, /
210-
) -> Series: ...
211-
@overload
212-
def __and__(self, other: Index, /) -> Index: ... # type: ignore[overload-overlap]
213-
@overload
214-
def __and__(self, other: Literal[False], /) -> Literal[False]: ... # type: ignore[overload-overlap]
215-
@overload
216-
def __and__(self, other: object, /) -> NAType: ...
207+
def __and__(self, other: Literal[False], /) -> Literal[False]: ... # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload]
217208
@overload
218-
def __rand__( # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload]
219-
self, other: Series, /
220-
) -> Series: ...
221-
@overload
222-
def __rand__(self, other: Index, /) -> Index: ... # type: ignore[overload-overlap]
209+
def __and__(self, other: bool | NAType, /) -> NAType: ...
223210
@overload
224-
def __rand__(self, other: Literal[False], /) -> Literal[False]: ... # type: ignore[overload-overlap]
211+
def __rand__(self, other: Literal[False], /) -> Literal[False]: ... # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload]
225212
@overload
226-
def __rand__(self, other: object, /) -> NAType: ...
227-
@overload
228-
def __or__( # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload]
229-
self, other: Series, /
230-
) -> Series: ...
213+
def __rand__(self, other: bool, /) -> NAType: ...
231214
@overload
232-
def __or__(self, other: Index, /) -> Index: ... # type: ignore[overload-overlap]
233-
@overload
234-
def __or__(self, other: Literal[True], /) -> Literal[True]: ... # type: ignore[overload-overlap]
235-
@overload
236-
def __or__(self, other: object, /) -> NAType: ...
237-
@overload
238-
def __ror__( # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload]
239-
self, other: Series, /
240-
) -> Series: ...
215+
def __or__(self, other: Literal[True], /) -> Literal[True]: ... # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload]
241216
@overload
242-
def __ror__(self, other: Index, /) -> Index: ... # type: ignore[overload-overlap]
217+
def __or__(self, other: bool | NAType, /) -> NAType: ...
243218
@overload
244-
def __ror__(self, other: Literal[True], /) -> Literal[True]: ... # type: ignore[overload-overlap]
219+
def __ror__(self, other: Literal[True], /) -> Literal[True]: ... # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload]
245220
@overload
246-
def __ror__(self, other: object, /) -> NAType: ...
221+
def __ror__(self, other: bool | NAType, /) -> NAType: ...
247222
@overload
248223
def __xor__( # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload]
249224
self, other: Series, /

tests/test_natype.py

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -123,32 +123,32 @@ def test_arithmetic() -> None:
123123
check(assert_type(divmod(1, na), tuple[NAType, NAType]), tuple)
124124

125125
# __eq__
126-
check(assert_type(na == s_int, pd.Series), pd.Series)
126+
check(assert_type(na == s_int, "pd.Series[bool]"), pd.Series)
127127
check(assert_type(na == idx_int, BooleanArray), BooleanArray)
128128
check(assert_type(na == 1, NAType), NAType)
129129

130130
# __ne__
131-
check(assert_type(na != s_int, pd.Series), pd.Series)
131+
check(assert_type(na != s_int, "pd.Series[bool]"), pd.Series)
132132
check(assert_type(na != idx_int, BooleanArray), BooleanArray)
133133
check(assert_type(na != 1, NAType), NAType)
134134

135135
# __le__
136-
check(assert_type(na <= s_int, pd.Series), pd.Series)
136+
check(assert_type(na <= s_int, "pd.Series[bool]"), pd.Series)
137137
check(assert_type(na <= idx_int, BooleanArray), BooleanArray)
138138
check(assert_type(na <= 1, NAType), NAType)
139139

140140
# __lt__
141-
check(assert_type(na < s_int, pd.Series), pd.Series)
141+
check(assert_type(na < s_int, "pd.Series[bool]"), pd.Series)
142142
check(assert_type(na < idx_int, BooleanArray), BooleanArray)
143143
check(assert_type(na < 1, NAType), NAType)
144144

145145
# __gt__
146-
check(assert_type(na > s_int, pd.Series), pd.Series)
146+
check(assert_type(na > s_int, "pd.Series[bool]"), pd.Series)
147147
check(assert_type(na > idx_int, BooleanArray), BooleanArray)
148148
check(assert_type(na > 1, NAType), NAType)
149149

150150
# __ge__
151-
check(assert_type(na >= s_int, pd.Series), pd.Series)
151+
check(assert_type(na >= s_int, "pd.Series[bool]"), pd.Series)
152152
check(assert_type(na >= idx_int, BooleanArray), BooleanArray)
153153
check(assert_type(na >= 1, NAType), NAType)
154154

@@ -164,27 +164,19 @@ def test_arithmetic() -> None:
164164
check(assert_type(2**na, NAType), NAType)
165165

166166
# __and__
167-
check(assert_type(na & s_int, pd.Series), pd.Series)
168-
check(assert_type(na & idx_int, pd.Index), pd.Index)
169167
check(assert_type(na & False, Literal[False]), bool)
170168
check(assert_type(na & True, NAType), NAType)
171169
check(assert_type(na & na, NAType), NAType)
172170

173171
# __rand__
174-
check(assert_type(s_int & na, pd.Series), pd.Series)
175-
check(assert_type(idx_int & na, pd.Index), pd.Index)
176172
check(assert_type(False & na, Literal[False]), bool)
177173
check(assert_type(True & na, NAType), NAType)
178174

179175
# __or__
180-
check(assert_type(na | s_int, pd.Series), pd.Series)
181-
check(assert_type(na | idx_int, pd.Index), pd.Index)
182176
check(assert_type(na | False, NAType), NAType)
183177
check(assert_type(na | True, Literal[True]), bool)
184178

185179
# __ror__
186-
check(assert_type(s_int | na, pd.Series), pd.Series)
187-
check(assert_type(idx_int | na, pd.Index), pd.Index)
188180
check(assert_type(False | na, NAType), NAType)
189181
check(assert_type(True | na, Literal[True]), bool)
190182

0 commit comments

Comments
 (0)