|
2 | 2 | from datetime import datetime
|
3 | 3 | from functools import partial
|
4 | 4 | from itertools import islice
|
5 |
| -from typing import TYPE_CHECKING, Optional, TypeVar, Union |
| 5 | +from typing import ( |
| 6 | + TYPE_CHECKING, |
| 7 | + Callable, |
| 8 | + List, |
| 9 | + Optional, |
| 10 | + Tuple, |
| 11 | + TypeVar, |
| 12 | + Union, |
| 13 | + overload, |
| 14 | +) |
6 | 15 | import warnings
|
7 | 16 |
|
8 | 17 | import numpy as np
|
|
15 | 24 | _guess_datetime_format,
|
16 | 25 | )
|
17 | 26 | from pandas._libs.tslibs.strptime import array_strptime
|
18 |
| -from pandas._typing import ArrayLike |
| 27 | +from pandas._typing import ArrayLike, Label, Timezone |
19 | 28 |
|
20 | 29 | from pandas.core.dtypes.common import (
|
21 | 30 | ensure_object,
|
|
45 | 54 |
|
46 | 55 | if TYPE_CHECKING:
|
47 | 56 | from pandas import Series # noqa:F401
|
| 57 | + from pandas._libs.tslibs.nattype import NaTType # noqa:F401 |
48 | 58 |
|
49 | 59 | # ---------------------------------------------------------------------
|
50 | 60 | # types used in annotations
|
51 | 61 |
|
52 |
| -ArrayConvertible = Union[list, tuple, ArrayLike, "Series"] |
| 62 | +ArrayConvertible = Union[List, Tuple, ArrayLike, "Series"] |
53 | 63 | Scalar = Union[int, float, str]
|
54 | 64 | DatetimeScalar = TypeVar("DatetimeScalar", Scalar, datetime)
|
55 |
| -DatetimeScalarOrArrayConvertible = Union[ |
56 |
| - DatetimeScalar, list, tuple, ArrayLike, "Series" |
57 |
| -] |
| 65 | +DatetimeScalarOrArrayConvertible = Union[DatetimeScalar, ArrayConvertible] |
58 | 66 |
|
59 | 67 |
|
60 | 68 | # ---------------------------------------------------------------------
|
@@ -123,7 +131,12 @@ def should_cache(
|
123 | 131 | return do_caching
|
124 | 132 |
|
125 | 133 |
|
126 |
| -def _maybe_cache(arg, format, cache, convert_listlike): |
| 134 | +def _maybe_cache( |
| 135 | + arg: ArrayConvertible, |
| 136 | + format: Optional[str], |
| 137 | + cache: bool, |
| 138 | + convert_listlike: Callable, |
| 139 | +) -> "Series": |
127 | 140 | """
|
128 | 141 | Create a cache of unique dates from an array of dates
|
129 | 142 |
|
@@ -159,7 +172,7 @@ def _maybe_cache(arg, format, cache, convert_listlike):
|
159 | 172 |
|
160 | 173 |
|
161 | 174 | def _box_as_indexlike(
|
162 |
| - dt_array: ArrayLike, utc: Optional[bool] = None, name: Optional[str] = None |
| 175 | + dt_array: ArrayLike, utc: Optional[bool] = None, name: Label = None |
163 | 176 | ) -> Index:
|
164 | 177 | """
|
165 | 178 | Properly boxes the ndarray of datetimes to DatetimeIndex
|
@@ -244,15 +257,15 @@ def _return_parsed_timezone_results(result, timezones, tz, name):
|
244 | 257 |
|
245 | 258 | def _convert_listlike_datetimes(
|
246 | 259 | arg,
|
247 |
| - format, |
248 |
| - name=None, |
249 |
| - tz=None, |
250 |
| - unit=None, |
251 |
| - errors=None, |
252 |
| - infer_datetime_format=None, |
253 |
| - dayfirst=None, |
254 |
| - yearfirst=None, |
255 |
| - exact=None, |
| 260 | + format: Optional[str], |
| 261 | + name: Label = None, |
| 262 | + tz: Optional[Timezone] = None, |
| 263 | + unit: Optional[str] = None, |
| 264 | + errors: Optional[str] = None, |
| 265 | + infer_datetime_format: Optional[bool] = None, |
| 266 | + dayfirst: Optional[bool] = None, |
| 267 | + yearfirst: Optional[bool] = None, |
| 268 | + exact: Optional[bool] = None, |
256 | 269 | ):
|
257 | 270 | """
|
258 | 271 | Helper function for to_datetime. Performs the conversions of 1D listlike
|
@@ -306,9 +319,7 @@ def _convert_listlike_datetimes(
|
306 | 319 | pass
|
307 | 320 | elif tz:
|
308 | 321 | # DatetimeArray, DatetimeIndex
|
309 |
| - # error: Item "DatetimeIndex" of "Union[DatetimeArray, DatetimeIndex]" has |
310 |
| - # no attribute "tz_localize" |
311 |
| - return arg.tz_localize(tz) # type: ignore |
| 322 | + return arg.tz_localize(tz) |
312 | 323 |
|
313 | 324 | return arg
|
314 | 325 |
|
@@ -539,19 +550,70 @@ def _adjust_to_origin(arg, origin, unit):
|
539 | 550 | return arg
|
540 | 551 |
|
541 | 552 |
|
| 553 | +@overload |
542 | 554 | def to_datetime(
|
543 |
| - arg, |
544 |
| - errors="raise", |
545 |
| - dayfirst=False, |
546 |
| - yearfirst=False, |
547 |
| - utc=None, |
548 |
| - format=None, |
549 |
| - exact=True, |
550 |
| - unit=None, |
551 |
| - infer_datetime_format=False, |
| 555 | + arg: DatetimeScalar, |
| 556 | + errors: str = ..., |
| 557 | + dayfirst: bool = ..., |
| 558 | + yearfirst: bool = ..., |
| 559 | + utc: Optional[bool] = ..., |
| 560 | + format: Optional[str] = ..., |
| 561 | + exact: bool = ..., |
| 562 | + unit: Optional[str] = ..., |
| 563 | + infer_datetime_format: bool = ..., |
| 564 | + origin=..., |
| 565 | + cache: bool = ..., |
| 566 | +) -> Union[DatetimeScalar, "NaTType"]: |
| 567 | + ... |
| 568 | + |
| 569 | + |
| 570 | +@overload |
| 571 | +def to_datetime( |
| 572 | + arg: "Series", |
| 573 | + errors: str = ..., |
| 574 | + dayfirst: bool = ..., |
| 575 | + yearfirst: bool = ..., |
| 576 | + utc: Optional[bool] = ..., |
| 577 | + format: Optional[str] = ..., |
| 578 | + exact: bool = ..., |
| 579 | + unit: Optional[str] = ..., |
| 580 | + infer_datetime_format: bool = ..., |
| 581 | + origin=..., |
| 582 | + cache: bool = ..., |
| 583 | +) -> "Series": |
| 584 | + ... |
| 585 | + |
| 586 | + |
| 587 | +@overload |
| 588 | +def to_datetime( |
| 589 | + arg: Union[List, Tuple], |
| 590 | + errors: str = ..., |
| 591 | + dayfirst: bool = ..., |
| 592 | + yearfirst: bool = ..., |
| 593 | + utc: Optional[bool] = ..., |
| 594 | + format: Optional[str] = ..., |
| 595 | + exact: bool = ..., |
| 596 | + unit: Optional[str] = ..., |
| 597 | + infer_datetime_format: bool = ..., |
| 598 | + origin=..., |
| 599 | + cache: bool = ..., |
| 600 | +) -> DatetimeIndex: |
| 601 | + ... |
| 602 | + |
| 603 | + |
| 604 | +def to_datetime( |
| 605 | + arg: DatetimeScalarOrArrayConvertible, |
| 606 | + errors: str = "raise", |
| 607 | + dayfirst: bool = False, |
| 608 | + yearfirst: bool = False, |
| 609 | + utc: Optional[bool] = None, |
| 610 | + format: Optional[str] = None, |
| 611 | + exact: bool = True, |
| 612 | + unit: Optional[str] = None, |
| 613 | + infer_datetime_format: bool = False, |
552 | 614 | origin="unix",
|
553 |
| - cache=True, |
554 |
| -): |
| 615 | + cache: bool = True, |
| 616 | +) -> Union[DatetimeIndex, "Series", DatetimeScalar, "NaTType"]: |
555 | 617 | """
|
556 | 618 | Convert argument to datetime.
|
557 | 619 |
|
@@ -746,8 +808,7 @@ def to_datetime(
|
746 | 808 | if not cache_array.empty:
|
747 | 809 | result = _convert_and_box_cache(arg, cache_array, name=arg.name)
|
748 | 810 | else:
|
749 |
| - convert_listlike = partial(convert_listlike, name=arg.name) |
750 |
| - result = convert_listlike(arg, format) |
| 811 | + result = convert_listlike(arg, format, name=arg.name) |
751 | 812 | elif is_list_like(arg):
|
752 | 813 | try:
|
753 | 814 | cache_array = _maybe_cache(arg, format, cache, convert_listlike)
|
|
0 commit comments