Skip to content

Commit db718c4

Browse files
authored
TYP: #1447 #1867 @override in pandas-stubs/_libs/tslibs/timestamps.pyi (#1871)
* `@override` in `Timestamp` * one more override * fix run
1 parent 1888528 commit db718c4

1 file changed

Lines changed: 57 additions & 5 deletions

File tree

pandas-stubs/_libs/tslibs/timestamps.pyi

Lines changed: 57 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ from pandas.core.indexes.base import Index
2525
from pandas.core.indexes.datetimes import DatetimeIndex
2626
from pandas.core.indexes.timedeltas import TimedeltaIndex
2727
from pandas.core.series import Series
28+
from typing_extensions import override
2829

2930
from pandas._libs.tslibs import (
3031
Period,
@@ -78,65 +79,91 @@ class Timestamp(datetime, SupportsIndex):
7879
# While Timestamp can return pd.NaT, having the constructor return
7980
# a Union with NaTType makes things awkward for users of pandas
8081
@property
82+
@override
8183
def year(self) -> int: ...
8284
@property
85+
@override
8386
def month(self) -> int: ...
8487
@property
88+
@override
8589
def day(self) -> int: ...
8690
@property
91+
@override
8792
def hour(self) -> int: ...
8893
@property
94+
@override
8995
def minute(self) -> int: ...
9096
@property
97+
@override
9198
def second(self) -> int: ...
9299
@property
100+
@override
93101
def microsecond(self) -> int: ...
94102
@property
95103
def nanosecond(self) -> int: ...
96104
@property
105+
@override
97106
def tzinfo(self) -> _tzinfo | None: ...
98107
@property
99108
def tz(self) -> _tzinfo | None: ...
100109
@property
110+
@override
101111
def fold(self) -> int: ...
102112
if sys.version_info >= (3, 12):
103113
@classmethod
114+
@override
104115
# TODO: reduce the double unused-ignore-comment when astral-sh/ty#2681 is resolved
105116
def fromtimestamp( # pyright: ignore[reportIncompatibleMethodOverride] # pyrefly: ignore[bad-override-param-name] # ty: ignore[invalid-method-override,unused-ignore-comment,unused-ignore-comment]
106117
cls, t: float, tz: _tzinfo | str | None = None
107118
) -> Self: ...
108119
else:
109120
@classmethod
121+
@override
110122
def fromtimestamp(cls, t: float, tz: _tzinfo | str | None = None) -> Self: ...
111123

112124
@classmethod
125+
@override
113126
def today(cls, tz: _tzinfo | str | None = None) -> Self: ...
114127
@classmethod
128+
@override
115129
def fromordinal(
116130
cls,
117131
ordinal: int,
118132
tz: _tzinfo | str | None = None,
119133
) -> Self: ...
120134
@classmethod
135+
@override
121136
def now(cls, tz: _tzinfo | str | None = None) -> Self: ...
122137
# error: Signature of "combine" incompatible with supertype "datetime"
123138
@classmethod
139+
@override
124140
def combine(cls, date: _date, time: _time) -> Self: ... # type: ignore[override] # pyright: ignore[reportIncompatibleMethodOverride] # pyrefly: ignore[bad-override] # ty: ignore[invalid-method-override]
125141
@classmethod
142+
@override
126143
def fromisoformat(cls, date_string: str) -> Self: ...
144+
@override
127145
def strftime(self, format: str) -> str: ...
146+
@override
128147
def __format__(self, fmt: str) -> str: ...
148+
@override
129149
def toordinal(self) -> int: ...
150+
@override
130151
def timetuple(self) -> struct_time: ...
152+
@override
131153
def timestamp(self) -> float: ...
154+
@override
132155
def utctimetuple(self) -> struct_time: ...
156+
@override
133157
def date(self) -> _date: ...
158+
@override
134159
def time(self) -> _time: ...
160+
@override
135161
def timetz(self) -> _time: ...
136162
# Override since fold is more precise than datetime.replace(fold:int)
137163
# Here it is restricted to be 0 or 1 using a Literal
138164
# Violation of Liskov substitution principle
139-
def replace( # type: ignore[override] # pyright: ignore[reportIncompatibleMethodOverride] # pyrefly: ignore # ty: ignore[invalid-method-override]
165+
@override
166+
def replace( # type: ignore[override] # pyright: ignore[reportIncompatibleMethodOverride] # pyrefly: ignore[bad-override] # ty: ignore[invalid-method-override]
140167
self,
141168
year: int | None = None,
142169
month: int | None = None,
@@ -148,8 +175,11 @@ class Timestamp(datetime, SupportsIndex):
148175
tzinfo: _tzinfo | None = None,
149176
fold: Literal[0, 1] | None = None,
150177
) -> Timestamp: ...
178+
@override
151179
def astimezone(self, tz: _tzinfo | None = None) -> Self: ...
180+
@override
152181
def ctime(self) -> str: ...
182+
@override
153183
def isoformat( # type: ignore[override] # pyright: ignore[reportIncompatibleMethodOverride] # pyrefly: ignore[bad-override] # ty: ignore[invalid-method-override]
154184
self,
155185
sep: str = "T",
@@ -164,13 +194,18 @@ class Timestamp(datetime, SupportsIndex):
164194
] = "auto",
165195
) -> str: ...
166196
@classmethod
197+
@override
167198
def strptime(cls, date_string: Never, format: Never) -> Never: ... # type: ignore[override] # pyright: ignore[reportIncompatibleMethodOverride] # pyrefly: ignore[bad-override] # ty: ignore[invalid-method-override]
199+
@override
168200
def utcoffset(self) -> timedelta | None: ...
201+
@override
169202
def tzname(self) -> str | None: ...
203+
@override
170204
def dst(self) -> timedelta | None: ...
171205
# Mypy complains Forward operator "<inequality op>" is not callable, so ignore misc
172206
# for le, lt ge and gt
173207
@overload # type: ignore[override]
208+
@override
174209
def __le__(self, other: datetime | np.datetime64 | Self) -> bool: ...
175210
@overload
176211
def __le__(self, other: DatetimeIndex) -> np_1darray_bool: ...
@@ -179,6 +214,7 @@ class Timestamp(datetime, SupportsIndex):
179214
@overload
180215
def __le__(self, other: Series[Timestamp]) -> Series[bool]: ...
181216
@overload # type: ignore[override]
217+
@override
182218
def __lt__(self, other: datetime | np.datetime64 | Self) -> bool: ...
183219
@overload
184220
def __lt__(self, other: DatetimeIndex) -> np_1darray_bool: ...
@@ -187,6 +223,7 @@ class Timestamp(datetime, SupportsIndex):
187223
@overload
188224
def __lt__(self, other: Series[Timestamp]) -> Series[bool]: ...
189225
@overload # type: ignore[override]
226+
@override
190227
def __ge__(self, other: datetime | np.datetime64 | Self) -> bool: ...
191228
@overload
192229
def __ge__(self, other: DatetimeIndex) -> np_1darray_bool: ...
@@ -195,6 +232,7 @@ class Timestamp(datetime, SupportsIndex):
195232
@overload
196233
def __ge__(self, other: Series[Timestamp]) -> Series[bool]: ...
197234
@overload # type: ignore[override]
235+
@override
198236
def __gt__(self, other: datetime | np.datetime64 | Self) -> bool: ...
199237
@overload
200238
def __gt__(self, other: DatetimeIndex) -> np_1darray_bool: ...
@@ -204,19 +242,22 @@ class Timestamp(datetime, SupportsIndex):
204242
def __gt__(self, other: Series[Timestamp]) -> Series[bool]: ...
205243
# error: Signature of "__add__" incompatible with supertype "date"/"datetime"
206244
@overload # type: ignore[override]
245+
@override
207246
def __add__(self, other: np_ndarray_td[ShapeT]) -> np_ndarray_dt[ShapeT]: ...
208247
@overload
209248
def __add__(self, other: timedelta | np.timedelta64 | Tick) -> Self: ...
210249
@overload
211250
def __add__(self, other: TimedeltaIndex) -> DatetimeIndex: ...
212251
@overload
252+
@override
213253
def __radd__(self, other: timedelta) -> Self: ...
214254
@overload
215255
def __radd__(self, other: TimedeltaIndex) -> DatetimeIndex: ...
216256
@overload
217257
def __radd__(self, other: np_ndarray_td[ShapeT]) -> np_ndarray_dt[ShapeT]: ...
218258
def __rsub__(self, other: datetime | np.datetime64) -> Timedelta: ...
219259
@overload # type: ignore[override]
260+
@override
220261
def __sub__(self, other: datetime | np.datetime64) -> Timedelta: ...
221262
@overload
222263
def __sub__(self, other: timedelta | np.timedelta64 | Tick) -> Self: ...
@@ -225,28 +266,38 @@ class Timestamp(datetime, SupportsIndex):
225266
@overload
226267
def __sub__(self, other: np_ndarray_td[ShapeT]) -> np_ndarray_dt[ShapeT]: ...
227268
@overload
228-
def __eq__(self, other: datetime | np.datetime64 | Self) -> bool: ... # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload]
269+
@override
270+
def __eq__(self, other: datetime | np.datetime64 | Self) -> bool: ... # type: ignore[overload-overlap]
229271
@overload
230272
def __eq__(self, other: Series[Timestamp]) -> Series[bool]: ... # type: ignore[overload-overlap]
231273
@overload
232274
def __eq__(self, other: Index) -> np_1darray_bool: ... # type: ignore[overload-overlap]
233275
@overload
234276
def __eq__(self, other: np_ndarray_dt[ShapeT]) -> np_ndarray_bool[ShapeT]: ... # type: ignore[overload-overlap]
235277
@overload
236-
def __eq__(self, other: object) -> Literal[False]: ...
278+
def __eq__( # pyright: ignore[reportOverlappingOverload]
279+
self, other: object
280+
) -> Literal[False]: ...
237281
@overload
238-
def __ne__(self, other: datetime | np.datetime64 | Self) -> bool: ... # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload]
282+
@override
283+
def __ne__(self, other: datetime | np.datetime64 | Self) -> bool: ... # type: ignore[overload-overlap]
239284
@overload
240285
def __ne__(self, other: Series[Timestamp]) -> Series[bool]: ... # type: ignore[overload-overlap]
241286
@overload
242287
def __ne__(self, other: Index) -> np_1darray_bool: ... # type: ignore[overload-overlap]
243288
@overload
244289
def __ne__(self, other: np_ndarray_dt[ShapeT]) -> np_ndarray_bool[ShapeT]: ... # type: ignore[overload-overlap]
245290
@overload
246-
def __ne__(self, other: object) -> Literal[True]: ...
291+
def __ne__( # pyright: ignore[reportOverlappingOverload]
292+
self, other: object
293+
) -> Literal[True]: ...
294+
@override
247295
def __hash__(self) -> int: ...
296+
@override
248297
def weekday(self) -> int: ...
298+
@override
249299
def isoweekday(self) -> int: ...
300+
@override
250301
def isocalendar(self) -> _IsoCalendarDate: ...
251302
@property
252303
def is_leap_year(self) -> bool: ...
@@ -328,4 +379,5 @@ class Timestamp(datetime, SupportsIndex):
328379
def unit(self) -> TimeUnit: ...
329380
def as_unit(self, unit: TimeUnit, round_ok: bool = True) -> Self: ...
330381
# To support slicing
382+
@override
331383
def __index__(self) -> int: ...

0 commit comments

Comments
 (0)