55
66from __future__ import annotations
77
8- import datetime as dt
9- import math
108from enum import Enum
119from functools import total_ordering
1210
1614
1715TYPE_CHECKING = False
1816if TYPE_CHECKING :
17+ import datetime as dt
1918 from collections .abc import Iterable
2019 from typing import Any
2120
@@ -46,6 +45,8 @@ def __lt__(self, other: Any) -> Any:
4645
4746
4847def _now () -> dt .datetime :
48+ import datetime as dt
49+
4950 return dt .datetime .now ()
5051
5152
@@ -69,6 +70,8 @@ def _date_and_delta(value: Any, *, now: dt.datetime | None = None) -> tuple[Any,
6970
7071 If that's not possible, return `(None, value)`.
7172 """
73+ import datetime as dt
74+
7275 if not now :
7376 now = _now ()
7477 if isinstance (value , dt .datetime ):
@@ -123,6 +126,8 @@ def naturaldelta(
123126
124127 assert naturaldelta(later - now) == "30 minutes"
125128 """
129+ import datetime as dt
130+
126131 tmp = Unit [minimum_unit .upper ()]
127132 if tmp not in (Unit .SECONDS , Unit .MILLISECONDS , Unit .MICROSECONDS ):
128133 msg = f"Minimum unit '{ minimum_unit } ' not supported"
@@ -246,6 +251,8 @@ def naturaltime(
246251 Returns:
247252 str: A natural representation of the input in a resolution that makes sense.
248253 """
254+ import datetime as dt
255+
249256 value = _convert_aware_datetime (value )
250257 when = _convert_aware_datetime (when )
251258
@@ -271,6 +278,8 @@ def _convert_aware_datetime(
271278 value : dt .datetime | dt .timedelta | float | None ,
272279) -> Any :
273280 """Convert aware datetime to naive datetime and pass through any other type."""
281+ import datetime as dt
282+
274283 if isinstance (value , dt .datetime ) and value .tzinfo is not None :
275284 value = dt .datetime .fromtimestamp (value .timestamp ())
276285 return value
@@ -284,6 +293,8 @@ def naturalday(value: dt.date | dt.datetime, format: str = "%b %d") -> str:
284293 formatted according to `format`.
285294
286295 """
296+ import datetime as dt
297+
287298 try :
288299 value = dt .date (value .year , value .month , value .day )
289300 except AttributeError :
@@ -308,6 +319,8 @@ def naturalday(value: dt.date | dt.datetime, format: str = "%b %d") -> str:
308319
309320def naturaldate (value : dt .date | dt .datetime ) -> str :
310321 """Like `naturalday`, but append a year for dates more than ~five months away."""
322+ import datetime as dt
323+
311324 try :
312325 value = dt .date (value .year , value .month , value .day )
313326 except AttributeError :
@@ -594,6 +607,8 @@ def precisedelta(
594607 if fmt_value > 0 or (not texts and unit == min_unit ):
595608 _fmt_value = 2 if 1 < fmt_value < 2 else int (fmt_value )
596609 fmt_txt = _ngettext (singular_txt , plural_txt , _fmt_value )
610+ import math
611+
597612 if unit == min_unit and math .modf (fmt_value )[0 ] > 0 :
598613 fmt_txt = fmt_txt .replace ("%d" , format )
599614 elif unit == YEARS :
0 commit comments