diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 740540c08..b233de81b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -18,7 +18,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macos-latest] - python-version: ['3.9', '3.10', '3.11'] + python-version: ['3.9', '3.10', '3.11', '3.12'] steps: - uses: actions/checkout@v3 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d3559f982..35165128e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,7 +3,7 @@ ci: autofix_prs: false repos: - repo: https://github.com/python/black - rev: 23.12.0 + rev: 23.12.1 hooks: - id: black - repo: https://github.com/PyCQA/isort @@ -11,7 +11,7 @@ repos: hooks: - id: isort - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.1.8 + rev: v0.1.9 hooks: - id: ruff args: [ diff --git a/pandas-stubs/_libs/tslibs/timestamps.pyi b/pandas-stubs/_libs/tslibs/timestamps.pyi index dbf151c7b..a8bf36b87 100644 --- a/pandas-stubs/_libs/tslibs/timestamps.pyi +++ b/pandas-stubs/_libs/tslibs/timestamps.pyi @@ -6,6 +6,7 @@ from datetime import ( timedelta, tzinfo as _tzinfo, ) +import sys from time import struct_time from typing import ( ClassVar, @@ -99,8 +100,16 @@ class Timestamp(datetime): def tz(self) -> _tzinfo | None: ... @property def fold(self) -> int: ... - @classmethod - def fromtimestamp(cls, t: float, tz: _tzinfo | str | None = ...) -> Self: ... + + if sys.version_info < (3, 12): + @classmethod + def fromtimestamp(cls, t: float, tz: _tzinfo | str | None = ...) -> Self: ... + else: + @classmethod + def fromtimestamp( # pyright: ignore[reportIncompatibleMethodOverride] + cls, t: float, tz: _tzinfo | str | None = ... + ) -> Self: ... + @classmethod def utcfromtimestamp(cls, ts: float) -> Self: ... @classmethod diff --git a/pyproject.toml b/pyproject.toml index a29d4ab56..8a2693e62 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,7 +35,7 @@ types-pytz = ">= 2022.1.1" numpy = { version = ">=1.26.0", python = "<3.13" } [tool.poetry.group.dev.dependencies] -mypy = "1.7.1" +mypy = "1.8.0" pandas = "2.1.4" pyarrow = ">=10.0.1" pytest = ">=7.1.2" @@ -62,7 +62,6 @@ jinja2 = ">=3.1" scipy = { version = ">=1.9.1", python = "<3.13" } SQLAlchemy = ">=2.0.12" types-python-dateutil = ">=2.8.19" -numexpr = "<2.8.5" # https://github.com/pandas-dev/pandas/issues/54449 beautifulsoup4 = ">=4.12.2" html5lib = ">=1.1" @@ -199,6 +198,14 @@ useLibraryCodeForTypes = false [tool.codespell] ignore-words-list = "indext, mose, sav, ser" +[tool.pytest.ini_options] +filterwarnings = [ + # treat warnings as errors + "error", + # until there is a new dateutil release: github.com/dateutil/dateutil/pull/1285 + "ignore:datetime.datetime.utc:DeprecationWarning", +] + # Next line needed to avoid poetry complaint [tool.setuptools_scm] diff --git a/scripts/test/run.py b/scripts/test/run.py index e08b41a14..c30395da9 100644 --- a/scripts/test/run.py +++ b/scripts/test/run.py @@ -15,8 +15,8 @@ def pyright_src(): subprocess.run(cmd, check=True) -def pytest(flags: tuple[str, ...] = ("-Werror",)): - cmd = ["pytest", "--cache-clear", *flags] +def pytest(): + cmd = ["pytest", "--cache-clear"] subprocess.run(cmd, check=True) diff --git a/tests/test_frame.py b/tests/test_frame.py index bdd9bf491..e3875432f 100644 --- a/tests/test_frame.py +++ b/tests/test_frame.py @@ -1699,31 +1699,43 @@ class ReadCsvKwargs(TypedDict): pd.DataFrame, ) parse_dates_2 = {"combined_date": ["Year", "Month", "Day"]} - check( - assert_type(pd.read_csv(path, parse_dates=parse_dates_2), pd.DataFrame), - pd.DataFrame, - ) + with pytest_warns_bounded( + FutureWarning, "Support for nested sequences", lower="2.1.99" + ): + check( + assert_type(pd.read_csv(path, parse_dates=parse_dates_2), pd.DataFrame), + pd.DataFrame, + ) parse_dates_3 = {"combined_date": [1, 2, 3]} - check( - assert_type(pd.read_csv(path, parse_dates=parse_dates_3), pd.DataFrame), - pd.DataFrame, - ) + with pytest_warns_bounded( + FutureWarning, "Support for nested sequences", lower="2.1.99" + ): + check( + assert_type(pd.read_csv(path, parse_dates=parse_dates_3), pd.DataFrame), + pd.DataFrame, + ) # MyPy calls this Dict[str, object] by default which necessitates the explicit annotation (Pyright does not) parse_dates_4: dict[str, list[str | int]] = {"combined_date": [1, "Month", 3]} - check( - assert_type(pd.read_csv(path, parse_dates=parse_dates_4), pd.DataFrame), - pd.DataFrame, - ) + with pytest_warns_bounded( + FutureWarning, "Support for nested sequences", lower="2.1.99" + ): + check( + assert_type(pd.read_csv(path, parse_dates=parse_dates_4), pd.DataFrame), + pd.DataFrame, + ) parse_dates_5 = [0] check( assert_type(pd.read_csv(path, parse_dates=parse_dates_5), pd.DataFrame), pd.DataFrame, ) parse_dates_6 = [[1, 2, 3]] - check( - assert_type(pd.read_csv(path, parse_dates=parse_dates_6), pd.DataFrame), - pd.DataFrame, - ) + with pytest_warns_bounded( + FutureWarning, "Support for nested sequences", lower="2.1.99" + ): + check( + assert_type(pd.read_csv(path, parse_dates=parse_dates_6), pd.DataFrame), + pd.DataFrame, + ) def test_groupby_series_methods() -> None: diff --git a/tests/test_utility.py b/tests/test_utility.py index 9a27f822c..70ae19034 100644 --- a/tests/test_utility.py +++ b/tests/test_utility.py @@ -1,12 +1,21 @@ +import platform + import pandas as pd -import pytest from typing_extensions import assert_type -from tests import check +from tests import ( + check, + pytest_warns_bounded, +) def test_show_version(): - with pytest.warns(UserWarning, match="Setuptools is replacing distutils"): + with pytest_warns_bounded( + UserWarning, + match="Setuptools is replacing distutils", + upper="3.11.99", + version_str=platform.python_version(), + ): check(assert_type(pd.show_versions(True), None), type(None)) check(assert_type(pd.show_versions(False), None), type(None))