From a2a8cd183ba500e40299f5a48bbad72712259916 Mon Sep 17 00:00:00 2001 From: Marco Gorelli <33491632+MarcoGorelli@users.noreply.github.com> Date: Fri, 7 Mar 2025 14:40:50 +0000 Subject: [PATCH 01/10] make some tslibs files pass with pyright-strict --- pandas-stubs/_libs/tslibs/strptime.pyi | 1 + pandas-stubs/_libs/tslibs/timedeltas.pyi | 5 ++++- pandas-stubs/_libs/tslibs/timestamps.pyi | 23 ++++++++++++++++------- tests/test_scalars.py | 12 ++++++++++-- 4 files changed, 31 insertions(+), 10 deletions(-) diff --git a/pandas-stubs/_libs/tslibs/strptime.pyi b/pandas-stubs/_libs/tslibs/strptime.pyi index 53f1252dd..aa04e7991 100644 --- a/pandas-stubs/_libs/tslibs/strptime.pyi +++ b/pandas-stubs/_libs/tslibs/strptime.pyi @@ -1,3 +1,4 @@ +# pyright from typing import Any def array_strptime(*args, **kwargs) -> Any: ... diff --git a/pandas-stubs/_libs/tslibs/timedeltas.pyi b/pandas-stubs/_libs/tslibs/timedeltas.pyi index 081f11e9e..01a17e1df 100644 --- a/pandas-stubs/_libs/tslibs/timedeltas.pyi +++ b/pandas-stubs/_libs/tslibs/timedeltas.pyi @@ -1,3 +1,4 @@ +# pyright: strict import datetime as dt from datetime import timedelta from typing import ( @@ -241,7 +242,9 @@ class Timedelta(timedelta): @overload def __rmul__(self, other: float) -> Timedelta: ... @overload - def __rmul__(self, other: np.ndarray) -> np.ndarray: ... + def __rmul__( + self, other: npt.NDArray[np.floating] | npt.NDArray[np.integer] + ) -> npt.NDArray[np.timedelta64]: ... @overload def __rmul__(self, other: Series[int]) -> TimedeltaSeries: ... @overload diff --git a/pandas-stubs/_libs/tslibs/timestamps.pyi b/pandas-stubs/_libs/tslibs/timestamps.pyi index 702c1287d..c94b41253 100644 --- a/pandas-stubs/_libs/tslibs/timestamps.pyi +++ b/pandas-stubs/_libs/tslibs/timestamps.pyi @@ -1,11 +1,12 @@ +# pyright: strict from datetime import ( - _IsoCalendarDate, date as _date, datetime, time as _time, timedelta, tzinfo as _tzinfo, ) +from datetime import _IsoCalendarDate # pyright: ignore[reportPrivateUsage] import sys from time import struct_time from typing import ( @@ -166,25 +167,33 @@ class Timestamp(datetime, SupportsIndex): @overload # type: ignore[override] def __le__(self, other: Timestamp | datetime | np.datetime64) -> bool: ... # type: ignore[misc] @overload - def __le__(self, other: Index | npt.NDArray[np.datetime64]) -> np_ndarray_bool: ... + def __le__( + self, other: Index[Timestamp] | npt.NDArray[np.datetime64] + ) -> np_ndarray_bool: ... @overload def __le__(self, other: TimestampSeries) -> Series[bool]: ... @overload # type: ignore[override] def __lt__(self, other: Timestamp | datetime | np.datetime64) -> bool: ... # type: ignore[misc] @overload - def __lt__(self, other: Index | npt.NDArray[np.datetime64]) -> np_ndarray_bool: ... + def __lt__( + self, other: Index[Timestamp] | npt.NDArray[np.datetime64] + ) -> np_ndarray_bool: ... @overload def __lt__(self, other: TimestampSeries) -> Series[bool]: ... @overload # type: ignore[override] def __ge__(self, other: Timestamp | datetime | np.datetime64) -> bool: ... # type: ignore[misc] @overload - def __ge__(self, other: Index | npt.NDArray[np.datetime64]) -> np_ndarray_bool: ... + def __ge__( + self, other: Index[Timestamp] | npt.NDArray[np.datetime64] + ) -> np_ndarray_bool: ... @overload def __ge__(self, other: TimestampSeries) -> Series[bool]: ... @overload # type: ignore[override] def __gt__(self, other: Timestamp | datetime | np.datetime64) -> bool: ... # type: ignore[misc] @overload - def __gt__(self, other: Index | npt.NDArray[np.datetime64]) -> np_ndarray_bool: ... + def __gt__( + self, other: Index[Timestamp] | npt.NDArray[np.datetime64] + ) -> np_ndarray_bool: ... @overload def __gt__(self, other: TimestampSeries) -> Series[bool]: ... # error: Signature of "__add__" incompatible with supertype "date"/"datetime" @@ -224,7 +233,7 @@ class Timestamp(datetime, SupportsIndex): @overload def __eq__(self, other: TimestampSeries) -> Series[bool]: ... # type: ignore[overload-overlap] @overload - def __eq__(self, other: npt.NDArray[np.datetime64] | Index) -> np_ndarray_bool: ... # type: ignore[overload-overlap] + def __eq__(self, other: npt.NDArray[np.datetime64] | Index[Timestamp]) -> np_ndarray_bool: ... # type: ignore[overload-overlap] @overload def __eq__(self, other: object) -> Literal[False]: ... @overload @@ -232,7 +241,7 @@ class Timestamp(datetime, SupportsIndex): @overload def __ne__(self, other: TimestampSeries) -> Series[bool]: ... # type: ignore[overload-overlap] @overload - def __ne__(self, other: npt.NDArray[np.datetime64] | Index) -> np_ndarray_bool: ... # type: ignore[overload-overlap] + def __ne__(self, other: npt.NDArray[np.datetime64] | Index[Timestamp]) -> np_ndarray_bool: ... # type: ignore[overload-overlap] @overload def __ne__(self, other: object) -> Literal[True]: ... def __hash__(self) -> int: ... diff --git a/tests/test_scalars.py b/tests/test_scalars.py index 69a3dbf7d..de6d42973 100644 --- a/tests/test_scalars.py +++ b/tests/test_scalars.py @@ -713,8 +713,16 @@ def test_timedelta_mul_div() -> None: check(assert_type(md_int * td, pd.Timedelta), pd.Timedelta) check(assert_type(md_float * td, pd.Timedelta), pd.Timedelta) - check(assert_type(md_ndarray_intp * td, np.ndarray), np.ndarray, np.timedelta64) - check(assert_type(md_ndarray_float * td, np.ndarray), np.ndarray, np.timedelta64) + check( + assert_type(md_ndarray_intp * td, npt.NDArray[np.timedelta64]), + np.ndarray, + np.timedelta64, + ) + check( + assert_type(md_ndarray_float * td, npt.NDArray[np.timedelta64]), + np.ndarray, + np.timedelta64, + ) check(assert_type(mp_series_int * td, TimedeltaSeries), pd.Series, pd.Timedelta) check(assert_type(md_series_float * td, TimedeltaSeries), pd.Series, pd.Timedelta) check(assert_type(md_int64_index * td, pd.TimedeltaIndex), pd.TimedeltaIndex) From 5fb4fcb48f7c8b224af43befc871a83442043344 Mon Sep 17 00:00:00 2001 From: Marco Gorelli <33491632+MarcoGorelli@users.noreply.github.com> Date: Mon, 10 Mar 2025 14:00:55 +0000 Subject: [PATCH 02/10] add test which uses unknown index --- pandas-stubs/_libs/tslibs/timestamps.pyi | 13 ++++++------- tests/test_scalars.py | 4 ++++ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/pandas-stubs/_libs/tslibs/timestamps.pyi b/pandas-stubs/_libs/tslibs/timestamps.pyi index c94b41253..b3f87910f 100644 --- a/pandas-stubs/_libs/tslibs/timestamps.pyi +++ b/pandas-stubs/_libs/tslibs/timestamps.pyi @@ -20,7 +20,6 @@ from _typing import TimeZones import numpy as np from pandas import ( DatetimeIndex, - Index, TimedeltaIndex, ) from pandas.core.series import ( @@ -168,7 +167,7 @@ class Timestamp(datetime, SupportsIndex): def __le__(self, other: Timestamp | datetime | np.datetime64) -> bool: ... # type: ignore[misc] @overload def __le__( - self, other: Index[Timestamp] | npt.NDArray[np.datetime64] + self, other: DatetimeIndex | npt.NDArray[np.datetime64] ) -> np_ndarray_bool: ... @overload def __le__(self, other: TimestampSeries) -> Series[bool]: ... @@ -176,7 +175,7 @@ class Timestamp(datetime, SupportsIndex): def __lt__(self, other: Timestamp | datetime | np.datetime64) -> bool: ... # type: ignore[misc] @overload def __lt__( - self, other: Index[Timestamp] | npt.NDArray[np.datetime64] + self, other: DatetimeIndex | npt.NDArray[np.datetime64] ) -> np_ndarray_bool: ... @overload def __lt__(self, other: TimestampSeries) -> Series[bool]: ... @@ -184,7 +183,7 @@ class Timestamp(datetime, SupportsIndex): def __ge__(self, other: Timestamp | datetime | np.datetime64) -> bool: ... # type: ignore[misc] @overload def __ge__( - self, other: Index[Timestamp] | npt.NDArray[np.datetime64] + self, other: DatetimeIndex | npt.NDArray[np.datetime64] ) -> np_ndarray_bool: ... @overload def __ge__(self, other: TimestampSeries) -> Series[bool]: ... @@ -192,7 +191,7 @@ class Timestamp(datetime, SupportsIndex): def __gt__(self, other: Timestamp | datetime | np.datetime64) -> bool: ... # type: ignore[misc] @overload def __gt__( - self, other: Index[Timestamp] | npt.NDArray[np.datetime64] + self, other: DatetimeIndex | npt.NDArray[np.datetime64] ) -> np_ndarray_bool: ... @overload def __gt__(self, other: TimestampSeries) -> Series[bool]: ... @@ -233,7 +232,7 @@ class Timestamp(datetime, SupportsIndex): @overload def __eq__(self, other: TimestampSeries) -> Series[bool]: ... # type: ignore[overload-overlap] @overload - def __eq__(self, other: npt.NDArray[np.datetime64] | Index[Timestamp]) -> np_ndarray_bool: ... # type: ignore[overload-overlap] + def __eq__(self, other: npt.NDArray[np.datetime64] | DatetimeIndex) -> np_ndarray_bool: ... # type: ignore[overload-overlap] @overload def __eq__(self, other: object) -> Literal[False]: ... @overload @@ -241,7 +240,7 @@ class Timestamp(datetime, SupportsIndex): @overload def __ne__(self, other: TimestampSeries) -> Series[bool]: ... # type: ignore[overload-overlap] @overload - def __ne__(self, other: npt.NDArray[np.datetime64] | Index[Timestamp]) -> np_ndarray_bool: ... # type: ignore[overload-overlap] + def __ne__(self, other: npt.NDArray[np.datetime64] | DatetimeIndex) -> np_ndarray_bool: ... # type: ignore[overload-overlap] @overload def __ne__(self, other: object) -> Literal[True]: ... def __hash__(self) -> int: ... diff --git a/tests/test_scalars.py b/tests/test_scalars.py index de6d42973..4d02cd54a 100644 --- a/tests/test_scalars.py +++ b/tests/test_scalars.py @@ -1261,6 +1261,8 @@ def test_timestamp_cmp() -> None: c_np_dt64 = np.datetime64(1, "ns") c_dt_datetime = dt.datetime(year=2000, month=1, day=1) c_datetimeindex = pd.DatetimeIndex(["2000-1-1"]) + # DatetimeIndex, but the type checker detects it to be Index[Unknown]. + c_unknown_index = pd.DataFrame({"a": [1]}, index=c_datetimeindex).index c_np_ndarray_dt64 = np_dt64_arr c_series_dt64: TimestampSeries = pd.Series([1, 2, 3], dtype="datetime64[ns]") c_series_timestamp = pd.Series(pd.DatetimeIndex(["2000-1-1"])) @@ -1281,6 +1283,8 @@ def test_timestamp_cmp() -> None: check(assert_type(ts > c_datetimeindex, np_ndarray_bool), np.ndarray, np.bool_) check(assert_type(ts <= c_datetimeindex, np_ndarray_bool), np.ndarray, np.bool_) + check(assert_type(ts > c_unknown_index, np_ndarray_bool), np.ndarray, np.bool_) + check(assert_type(ts <= c_unknown_index, np_ndarray_bool), np.ndarray, np.bool_) check(assert_type(ts > c_np_ndarray_dt64, np_ndarray_bool), np.ndarray, np.bool_) check(assert_type(ts <= c_np_ndarray_dt64, np_ndarray_bool), np.ndarray, np.bool_) From f39c5c49b61ee344b72b1a29b0a24d8d3f1c6a29 Mon Sep 17 00:00:00 2001 From: Marco Gorelli <33491632+MarcoGorelli@users.noreply.github.com> Date: Mon, 10 Mar 2025 14:36:54 +0000 Subject: [PATCH 03/10] try reverting strict in timestamps.pyi --- pandas-stubs/_libs/tslibs/timestamps.pyi | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pandas-stubs/_libs/tslibs/timestamps.pyi b/pandas-stubs/_libs/tslibs/timestamps.pyi index b3f87910f..a970f4192 100644 --- a/pandas-stubs/_libs/tslibs/timestamps.pyi +++ b/pandas-stubs/_libs/tslibs/timestamps.pyi @@ -1,12 +1,11 @@ -# pyright: strict from datetime import ( + _IsoCalendarDate, date as _date, datetime, time as _time, timedelta, tzinfo as _tzinfo, ) -from datetime import _IsoCalendarDate # pyright: ignore[reportPrivateUsage] import sys from time import struct_time from typing import ( From ae12843a25dcd73a1bfc639425f94e6f8bb8704a Mon Sep 17 00:00:00 2001 From: Marco Gorelli <33491632+MarcoGorelli@users.noreply.github.com> Date: Mon, 10 Mar 2025 19:22:16 +0000 Subject: [PATCH 04/10] use Index[Any] for __eq__ and __neq__ --- pandas-stubs/_libs/tslibs/timestamps.pyi | 6 ++++-- tests/test_scalars.py | 9 +++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/pandas-stubs/_libs/tslibs/timestamps.pyi b/pandas-stubs/_libs/tslibs/timestamps.pyi index a970f4192..7c12da3ad 100644 --- a/pandas-stubs/_libs/tslibs/timestamps.pyi +++ b/pandas-stubs/_libs/tslibs/timestamps.pyi @@ -9,6 +9,7 @@ from datetime import ( import sys from time import struct_time from typing import ( + Any, ClassVar, Literal, SupportsIndex, @@ -19,6 +20,7 @@ from _typing import TimeZones import numpy as np from pandas import ( DatetimeIndex, + Index, TimedeltaIndex, ) from pandas.core.series import ( @@ -231,7 +233,7 @@ class Timestamp(datetime, SupportsIndex): @overload def __eq__(self, other: TimestampSeries) -> Series[bool]: ... # type: ignore[overload-overlap] @overload - def __eq__(self, other: npt.NDArray[np.datetime64] | DatetimeIndex) -> np_ndarray_bool: ... # type: ignore[overload-overlap] + def __eq__(self, other: npt.NDArray[np.datetime64] | Index[Any]) -> np_ndarray_bool: ... # type: ignore[overload-overlap] @overload def __eq__(self, other: object) -> Literal[False]: ... @overload @@ -239,7 +241,7 @@ class Timestamp(datetime, SupportsIndex): @overload def __ne__(self, other: TimestampSeries) -> Series[bool]: ... # type: ignore[overload-overlap] @overload - def __ne__(self, other: npt.NDArray[np.datetime64] | DatetimeIndex) -> np_ndarray_bool: ... # type: ignore[overload-overlap] + def __ne__(self, other: npt.NDArray[np.datetime64] | Index[Any]) -> np_ndarray_bool: ... # type: ignore[overload-overlap] @overload def __ne__(self, other: object) -> Literal[True]: ... def __hash__(self) -> int: ... diff --git a/tests/test_scalars.py b/tests/test_scalars.py index 4d02cd54a..086324799 100644 --- a/tests/test_scalars.py +++ b/tests/test_scalars.py @@ -1325,6 +1325,8 @@ def test_timestamp_cmp() -> None: check(assert_type(ts >= c_datetimeindex, np_ndarray_bool), np.ndarray, np.bool_) check(assert_type(ts < c_datetimeindex, np_ndarray_bool), np.ndarray, np.bool_) + check(assert_type(ts >= c_unknown_index, np_ndarray_bool), np.ndarray, np.bool_) + check(assert_type(ts < c_unknown_index, np_ndarray_bool), np.ndarray, np.bool_) check(assert_type(ts >= c_np_ndarray_dt64, np_ndarray_bool), np.ndarray, np.bool_) check(assert_type(ts < c_np_ndarray_dt64, np_ndarray_bool), np.ndarray, np.bool_) @@ -1370,6 +1372,13 @@ def test_timestamp_cmp() -> None: assert_type(ts != c_datetimeindex, np_ndarray_bool), np.ndarray, np.bool_ ) assert (eq_arr != ne_arr).all() + eq_arr = check( + assert_type(ts == c_unknown_index, np_ndarray_bool), np.ndarray, np.bool_ + ) + ne_arr = check( + assert_type(ts != c_unknown_index, np_ndarray_bool), np.ndarray, np.bool_ + ) + assert (eq_arr != ne_arr).all() eq_arr = check( assert_type(ts == c_np_ndarray_dt64, np_ndarray_bool), np.ndarray, np.bool_ From e39056f59e8adcd600b9a9318bc7a035c730a96a Mon Sep 17 00:00:00 2001 From: Marco Gorelli <33491632+MarcoGorelli@users.noreply.github.com> Date: Mon, 10 Mar 2025 19:23:23 +0000 Subject: [PATCH 05/10] try putting strict back --- pandas-stubs/_libs/tslibs/timestamps.pyi | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pandas-stubs/_libs/tslibs/timestamps.pyi b/pandas-stubs/_libs/tslibs/timestamps.pyi index 7c12da3ad..5140f6e56 100644 --- a/pandas-stubs/_libs/tslibs/timestamps.pyi +++ b/pandas-stubs/_libs/tslibs/timestamps.pyi @@ -1,11 +1,12 @@ +# pyright: strict from datetime import ( - _IsoCalendarDate, date as _date, datetime, time as _time, timedelta, tzinfo as _tzinfo, ) +from datetime import _IsoCalendarDate # pyright: ignore[reportPrivateUsage] import sys from time import struct_time from typing import ( From 21c6f6bc4b1b2d7942cbf877fe38d417c0b23bd1 Mon Sep 17 00:00:00 2001 From: Marco Gorelli <33491632+MarcoGorelli@users.noreply.github.com> Date: Tue, 11 Mar 2025 15:32:20 +0000 Subject: [PATCH 06/10] DataFrame.index -> UnknownIndex --- pandas-stubs/core/frame.pyi | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pandas-stubs/core/frame.pyi b/pandas-stubs/core/frame.pyi index 03fab417e..0fd4a673e 100644 --- a/pandas-stubs/core/frame.pyi +++ b/pandas-stubs/core/frame.pyi @@ -31,7 +31,10 @@ from pandas.core.generic import NDFrame from pandas.core.groupby.generic import DataFrameGroupBy from pandas.core.groupby.grouper import Grouper from pandas.core.indexers import BaseIndexer -from pandas.core.indexes.base import Index +from pandas.core.indexes.base import ( + Index, + UnknownIndex, +) from pandas.core.indexes.category import CategoricalIndex from pandas.core.indexes.datetimes import DatetimeIndex from pandas.core.indexes.interval import IntervalIndex @@ -1617,7 +1620,7 @@ class DataFrame(NDFrame, OpsMixin, _GetItemHack): @property def iloc(self) -> _iLocIndexerFrame[Self]: ... @property - def index(self) -> Index: ... + def index(self) -> UnknownIndex: ... @index.setter def index(self, idx: Index) -> None: ... @property From 8e582fa4cf892edb5136f8ca3e89ba580561cb0f Mon Sep 17 00:00:00 2001 From: Irv Lustig <irv@princeton.com> Date: Tue, 11 Mar 2025 12:32:19 -0400 Subject: [PATCH 07/10] try using _tzinfo --- pandas-stubs/_typing.pyi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pandas-stubs/_typing.pyi b/pandas-stubs/_typing.pyi index 478f60da0..cb4b05850 100644 --- a/pandas-stubs/_typing.pyi +++ b/pandas-stubs/_typing.pyi @@ -8,7 +8,7 @@ from collections.abc import ( Sequence, ) import datetime -from datetime import tzinfo +from datetime import tzinfo as _tzinfo from os import PathLike from re import Pattern import sys @@ -833,6 +833,6 @@ TimeGrouperOrigin: TypeAlias = ( ExcelReadEngine: TypeAlias = Literal["xlrd", "openpyxl", "odf", "pyxlsb", "calamine"] ExcelWriteEngine: TypeAlias = Literal["openpyxl", "odf", "xlsxwriter"] -TimeZones: TypeAlias = str | tzinfo | None | int +TimeZones: TypeAlias = str | _tzinfo | None | int __all__ = ["npt", "type_t"] From e0feec3e86f3f92488a4dd3130bd137249415086 Mon Sep 17 00:00:00 2001 From: Irv Lustig <irv@princeton.com> Date: Tue, 11 Mar 2025 12:36:45 -0400 Subject: [PATCH 08/10] try changing pyproject to avoid cache --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 2570e0898..ca1f3c13f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,7 +42,7 @@ pytest = ">=7.1.2" pyright = ">=1.1.396" poethepoet = ">=0.16.5" loguru = ">=0.6.0" -typing-extensions = ">=4.4.0" +typing-extensions = ">=4.12.2" matplotlib = ">=3.6.3" pre-commit = ">=2.19.0" black = ">=23.3.0" From c56914972cdd6f5c03dec6e6e24c55f7005f6cc6 Mon Sep 17 00:00:00 2001 From: Irv Lustig <irv@princeton.com> Date: Tue, 11 Mar 2025 12:45:11 -0400 Subject: [PATCH 09/10] try pyright 1.1.394 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index ca1f3c13f..6b71f358a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,7 +39,7 @@ mypy = "1.15.0" pandas = "2.2.3" pyarrow = ">=10.0.1" pytest = ">=7.1.2" -pyright = ">=1.1.396" +pyright = "1.1.394" poethepoet = ">=0.16.5" loguru = ">=0.6.0" typing-extensions = ">=4.12.2" From ba674e4b260546f2c6cbe267b6ff61ae972ce4b4 Mon Sep 17 00:00:00 2001 From: Irv Lustig <irv@princeton.com> Date: Tue, 11 Mar 2025 13:12:21 -0400 Subject: [PATCH 10/10] move Timezones into timestamps.pyi --- pandas-stubs/_libs/tslibs/timestamps.pyi | 3 ++- pyproject.toml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/pandas-stubs/_libs/tslibs/timestamps.pyi b/pandas-stubs/_libs/tslibs/timestamps.pyi index 5140f6e56..b311dbfd6 100644 --- a/pandas-stubs/_libs/tslibs/timestamps.pyi +++ b/pandas-stubs/_libs/tslibs/timestamps.pyi @@ -17,7 +17,7 @@ from typing import ( overload, ) -from _typing import TimeZones +# from _typing import TimeZones import numpy as np from pandas import ( DatetimeIndex, @@ -51,6 +51,7 @@ _Ambiguous: TypeAlias = bool | Literal["raise", "NaT"] _Nonexistent: TypeAlias = ( Literal["raise", "NaT", "shift_backward", "shift_forward"] | Timedelta | timedelta ) +TimeZones: TypeAlias = str | _tzinfo | None | int class Timestamp(datetime, SupportsIndex): min: ClassVar[Timestamp] # pyright: ignore[reportIncompatibleVariableOverride] diff --git a/pyproject.toml b/pyproject.toml index 6b71f358a..ca1f3c13f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,7 +39,7 @@ mypy = "1.15.0" pandas = "2.2.3" pyarrow = ">=10.0.1" pytest = ">=7.1.2" -pyright = "1.1.394" +pyright = ">=1.1.396" poethepoet = ">=0.16.5" loguru = ">=0.6.0" typing-extensions = ">=4.12.2"