@@ -9,6 +9,7 @@ from collections.abc import (
99)
1010import datetime as dt
1111from re import Pattern
12+ import sys
1213from 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