@@ -9,6 +9,7 @@ from collections.abc import (
9
9
)
10
10
import datetime as dt
11
11
from re import Pattern
12
+ import sys
12
13
from typing import (
13
14
Any ,
14
15
ClassVar ,
@@ -229,8 +230,32 @@ class _LocIndexerFrame(_LocIndexer):
229
230
value : Scalar | NAType | NaTType | ArrayLike | Series | list | None ,
230
231
) -> None : ...
231
232
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]
234
259
235
260
@overload
236
261
def __new__ (
@@ -607,14 +632,6 @@ class DataFrame(NDFrame, OpsMixin):
607
632
@property
608
633
def T (self ) -> DataFrame : ...
609
634
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 : ...
618
635
def isetitem (
619
636
self , loc : int | Sequence [int ], value : Scalar | ArrayLike | list [Any ]
620
637
) -> None : ...
0 commit comments