From 49c28693dd7c7f2e9e3ec7df388918e3ccd454d7 Mon Sep 17 00:00:00 2001 From: David Stansby Date: Sun, 3 Aug 2025 15:18:54 +0100 Subject: [PATCH 1/6] Add type stubs for functions in matplotlib.dates --- lib/matplotlib/dates.pyi | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 lib/matplotlib/dates.pyi diff --git a/lib/matplotlib/dates.pyi b/lib/matplotlib/dates.pyi new file mode 100644 index 000000000000..7ea807eead9f --- /dev/null +++ b/lib/matplotlib/dates.pyi @@ -0,0 +1,20 @@ +import datetime +from collections.abc import Sequence +import numpy as np +import numpy.typing as npt + +TZ = str | datetime.tzinfo +DateNum = float | Sequence[float] + +def _get_tzinfo(tz: TZ | None) -> datetime.tzinfo: ... +def _reset_epoch_test_example() -> None: ... +def set_epoch(epoch: str) -> None: ... +def get_epoch() -> str: ... +def _dt64_to_ordinalf(d: np.datetime64 | npt.NDArray[np.datetime64]) -> npt.NDArray[np.floating]: ... +def _from_ordinalf(x: float, tz: TZ | None) -> datetime.datetime: ... +def datestr2num(d: str | Sequence[str], default: datetime.datetime | None) -> DateNum: ... +def date2num(d: datetime.datetime | np.datetime64 | Sequence[datetime.datetime] | Sequence[np.datetime64]) -> DateNum: ... +def num2date(x: DateNum, tz: TZ | None) -> datetime.datetime | Sequence[datetime.datetime]: ... +def num2timedelta(x: DateNum) -> datetime.timedelta | list[datetime.timedelta]: ... +def drange(dstart: datetime.datetime, dend: datetime.datetime, delta: datetime.timedelta) -> npt.NDArray[np.floating]: ... +def _wrap_in_tex(text: str) -> str: ... From ec0cdc488c358c74d4a42ab9e2d2737add1b83ab Mon Sep 17 00:00:00 2001 From: David Stansby Date: Mon, 4 Aug 2025 09:04:32 +0100 Subject: [PATCH 2/6] Make date typing tighter with overloads --- lib/matplotlib/dates.pyi | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/lib/matplotlib/dates.pyi b/lib/matplotlib/dates.pyi index 7ea807eead9f..8227408497bc 100644 --- a/lib/matplotlib/dates.pyi +++ b/lib/matplotlib/dates.pyi @@ -1,5 +1,7 @@ import datetime from collections.abc import Sequence +from typing import overload + import numpy as np import numpy.typing as npt @@ -12,9 +14,26 @@ def set_epoch(epoch: str) -> None: ... def get_epoch() -> str: ... def _dt64_to_ordinalf(d: np.datetime64 | npt.NDArray[np.datetime64]) -> npt.NDArray[np.floating]: ... def _from_ordinalf(x: float, tz: TZ | None) -> datetime.datetime: ... -def datestr2num(d: str | Sequence[str], default: datetime.datetime | None) -> DateNum: ... -def date2num(d: datetime.datetime | np.datetime64 | Sequence[datetime.datetime] | Sequence[np.datetime64]) -> DateNum: ... -def num2date(x: DateNum, tz: TZ | None) -> datetime.datetime | Sequence[datetime.datetime]: ... -def num2timedelta(x: DateNum) -> datetime.timedelta | list[datetime.timedelta]: ... + +@overload +def datestr2num(d: str, default: datetime.datetime | None) -> float: ... +@overload +def datestr2num(d: Sequence[str], default: datetime.datetime | None) -> npt.NDArray[np.floating]: ... + +@overload +def date2num(d: datetime.datetime | np.datetime64) -> float: ... +@overload +def date2num(d: Sequence[datetime.datetime] | Sequence[np.datetime64]) -> npt.NDArray[np.floating]: ... + +@overload +def num2date(x: float, tz: TZ | None) -> datetime.datetime: ... +@overload +def num2date(x: Sequence[float], tz: TZ | None) -> list[datetime.datetime]: ... + +@overload +def num2timedelta(x: float) -> datetime.timedelta: ... +@overload +def num2timedelta(x: Sequence[float]) -> list[datetime.timedelta]: ... + def drange(dstart: datetime.datetime, dend: datetime.datetime, delta: datetime.timedelta) -> npt.NDArray[np.floating]: ... def _wrap_in_tex(text: str) -> str: ... From 39762037b65d13c45d003ba9f63e5db5606cfae5 Mon Sep 17 00:00:00 2001 From: David Stansby Date: Mon, 4 Aug 2025 09:04:55 +0100 Subject: [PATCH 3/6] Fix _dt64_to_ordinalf type --- lib/matplotlib/dates.py | 2 +- lib/matplotlib/dates.pyi | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/matplotlib/dates.py b/lib/matplotlib/dates.py index 511e1c6df6cc..107cb17e3685 100644 --- a/lib/matplotlib/dates.py +++ b/lib/matplotlib/dates.py @@ -309,7 +309,7 @@ def get_epoch(): def _dt64_to_ordinalf(d): """ - Convert `numpy.datetime64` or an `numpy.ndarray` of those types to + Convert a `numpy.ndarray` of np.datetime64 to Gregorian date as UTC float relative to the epoch (see `.get_epoch`). Roundoff is float64 precision. Practically: microseconds for dates between 290301 BC, 294241 AD, milliseconds for larger dates diff --git a/lib/matplotlib/dates.pyi b/lib/matplotlib/dates.pyi index 8227408497bc..c6e40ef1e942 100644 --- a/lib/matplotlib/dates.pyi +++ b/lib/matplotlib/dates.pyi @@ -12,7 +12,7 @@ def _get_tzinfo(tz: TZ | None) -> datetime.tzinfo: ... def _reset_epoch_test_example() -> None: ... def set_epoch(epoch: str) -> None: ... def get_epoch() -> str: ... -def _dt64_to_ordinalf(d: np.datetime64 | npt.NDArray[np.datetime64]) -> npt.NDArray[np.floating]: ... +def _dt64_to_ordinalf(d: npt.NDArray[np.datetime64]) -> npt.NDArray[np.floating]: ... def _from_ordinalf(x: float, tz: TZ | None) -> datetime.datetime: ... @overload From 636889f10a8bdc4019aaef4a1f815b36f902bc29 Mon Sep 17 00:00:00 2001 From: David Stansby Date: Mon, 4 Aug 2025 09:12:51 +0100 Subject: [PATCH 4/6] Remvoe old type alisas --- lib/matplotlib/dates.pyi | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/matplotlib/dates.pyi b/lib/matplotlib/dates.pyi index c6e40ef1e942..567cd6a082ba 100644 --- a/lib/matplotlib/dates.pyi +++ b/lib/matplotlib/dates.pyi @@ -6,7 +6,6 @@ import numpy as np import numpy.typing as npt TZ = str | datetime.tzinfo -DateNum = float | Sequence[float] def _get_tzinfo(tz: TZ | None) -> datetime.tzinfo: ... def _reset_epoch_test_example() -> None: ... From 1117e2f50581a8b1ed4cb09ad50a70a459194447 Mon Sep 17 00:00:00 2001 From: David Stansby Date: Mon, 4 Aug 2025 09:38:51 +0100 Subject: [PATCH 5/6] Add argument defaults --- lib/matplotlib/dates.pyi | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/matplotlib/dates.pyi b/lib/matplotlib/dates.pyi index 567cd6a082ba..f784d3fd1f9b 100644 --- a/lib/matplotlib/dates.pyi +++ b/lib/matplotlib/dates.pyi @@ -7,17 +7,17 @@ import numpy.typing as npt TZ = str | datetime.tzinfo -def _get_tzinfo(tz: TZ | None) -> datetime.tzinfo: ... +def _get_tzinfo(tz: TZ | None=None) -> datetime.tzinfo: ... def _reset_epoch_test_example() -> None: ... def set_epoch(epoch: str) -> None: ... def get_epoch() -> str: ... def _dt64_to_ordinalf(d: npt.NDArray[np.datetime64]) -> npt.NDArray[np.floating]: ... -def _from_ordinalf(x: float, tz: TZ | None) -> datetime.datetime: ... +def _from_ordinalf(x: float, tz: TZ | None=None) -> datetime.datetime: ... @overload -def datestr2num(d: str, default: datetime.datetime | None) -> float: ... +def datestr2num(d: str, default: datetime.datetime | None=None) -> float: ... @overload -def datestr2num(d: Sequence[str], default: datetime.datetime | None) -> npt.NDArray[np.floating]: ... +def datestr2num(d: Sequence[str], default: datetime.datetime | None=None) -> npt.NDArray[np.floating]: ... @overload def date2num(d: datetime.datetime | np.datetime64) -> float: ... @@ -25,9 +25,9 @@ def date2num(d: datetime.datetime | np.datetime64) -> float: ... def date2num(d: Sequence[datetime.datetime] | Sequence[np.datetime64]) -> npt.NDArray[np.floating]: ... @overload -def num2date(x: float, tz: TZ | None) -> datetime.datetime: ... +def num2date(x: float, tz: TZ | None=None) -> datetime.datetime: ... @overload -def num2date(x: Sequence[float], tz: TZ | None) -> list[datetime.datetime]: ... +def num2date(x: Sequence[float], tz: TZ | None=None) -> list[datetime.datetime]: ... @overload def num2timedelta(x: float) -> datetime.timedelta: ... From d82075fc4b3cde42dd515d6299743466d9fa312d Mon Sep 17 00:00:00 2001 From: David Stansby Date: Mon, 4 Aug 2025 09:41:16 +0100 Subject: [PATCH 6/6] Remove overload on datestr2num --- lib/matplotlib/dates.pyi | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/matplotlib/dates.pyi b/lib/matplotlib/dates.pyi index f784d3fd1f9b..426082679393 100644 --- a/lib/matplotlib/dates.pyi +++ b/lib/matplotlib/dates.pyi @@ -13,11 +13,10 @@ def set_epoch(epoch: str) -> None: ... def get_epoch() -> str: ... def _dt64_to_ordinalf(d: npt.NDArray[np.datetime64]) -> npt.NDArray[np.floating]: ... def _from_ordinalf(x: float, tz: TZ | None=None) -> datetime.datetime: ... - -@overload -def datestr2num(d: str, default: datetime.datetime | None=None) -> float: ... -@overload -def datestr2num(d: Sequence[str], default: datetime.datetime | None=None) -> npt.NDArray[np.floating]: ... +# Ideally str | Sequence[str] would get an override, but because a str is a valid Sequence[str], +# it's not possible to distinguish between them in the type system +# See https://github.com/python/typing/issues/256 +def datestr2num(d: str | Sequence[str], default: datetime.datetime | None=None) -> float | npt.NDArray[np.floating]: ... @overload def date2num(d: datetime.datetime | np.datetime64) -> float: ... pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy