Skip to content

Commit dd8b73a

Browse files
committed
fix for getitem with pythong 3.12 and mypy
1 parent e2c11d0 commit dd8b73a

File tree

1 file changed

+27
-10
lines changed

1 file changed

+27
-10
lines changed

pandas-stubs/core/frame.pyi

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ from collections.abc import (
99
)
1010
import datetime as dt
1111
from re import Pattern
12+
import sys
1213
from typing import (
1314
Any,
1415
ClassVar,
@@ -229,8 +230,32 @@ class _LocIndexerFrame(_LocIndexer):
229230
value: Scalar | NAType | NaTType | ArrayLike | Series | list | None,
230231
) -> None: ...
231232

232-
class DataFrame(NDFrame, OpsMixin):
233-
__hash__: ClassVar[None] # type: ignore[assignment]
233+
# With mypy 1.14.1 and python 3.12, the second overload needs a type-ignore statement
234+
if sys.version_info >= (3, 12):
235+
class _GetItemHack:
236+
@overload
237+
def __getitem__(self, key: Scalar | tuple[Hashable, ...]) -> Series: ... # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload]
238+
@overload
239+
def __getitem__( # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload]
240+
self, key: Iterable[Hashable] | slice
241+
) -> DataFrame: ...
242+
@overload
243+
def __getitem__(self, key: Hashable) -> Series: ...
244+
245+
else:
246+
class _GetItemHack:
247+
@overload
248+
def __getitem__(self, key: Scalar | tuple[Hashable, ...]) -> Series: ... # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload]
249+
@overload
250+
def __getitem__( # pyright: ignore[reportOverlappingOverload]
251+
self, key: Iterable[Hashable] | slice
252+
) -> DataFrame: ...
253+
@overload
254+
def __getitem__(self, key: Hashable) -> Series: ...
255+
256+
class DataFrame(NDFrame, OpsMixin, _GetItemHack):
257+
258+
__hash__: ClassVar[None] # type: ignore[assignment] # pyright: ignore[reportIncompatibleMethodOverride]
234259

235260
@overload
236261
def __new__(
@@ -607,14 +632,6 @@ class DataFrame(NDFrame, OpsMixin):
607632
@property
608633
def T(self) -> DataFrame: ...
609634
def __getattr__(self, name: str) -> Series: ...
610-
@overload
611-
def __getitem__(self, key: Scalar | tuple[Hashable, ...]) -> Series: ... # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload]
612-
@overload
613-
def __getitem__( # pyright: ignore[reportOverlappingOverload]
614-
self, key: Iterable[Hashable] | slice
615-
) -> DataFrame: ...
616-
@overload
617-
def __getitem__(self, key: Hashable) -> Series: ...
618635
def isetitem(
619636
self, loc: int | Sequence[int], value: Scalar | ArrayLike | list[Any]
620637
) -> None: ...

0 commit comments

Comments
 (0)