From 4ede926cd48b18ba1129a00933ac6bf2a40705de Mon Sep 17 00:00:00 2001 From: Irv Lustig Date: Fri, 15 Mar 2024 21:41:56 -0400 Subject: [PATCH] fix concat, update mypy, pyright (#890) --- pandas-stubs/core/indexes/multi.pyi | 4 ++- pandas-stubs/core/reshape/concat.pyi | 46 ++++++++++++++++++++++++++-- pyproject.toml | 6 ++-- tests/test_io.py | 4 +-- 4 files changed, 52 insertions(+), 8 deletions(-) diff --git a/pandas-stubs/core/indexes/multi.pyi b/pandas-stubs/core/indexes/multi.pyi index 50c0f939..0da84bb4 100644 --- a/pandas-stubs/core/indexes/multi.pyi +++ b/pandas-stubs/core/indexes/multi.pyi @@ -128,7 +128,9 @@ class MultiIndex(Index[Any]): ), ) -> Self: ... @overload - def __getitem__(self, key: int) -> tuple: ... + def __getitem__( # pyright: ignore[reportIncompatibleMethodOverride] + self, key: int + ) -> tuple: ... def take( self, indices, axis: int = ..., allow_fill: bool = ..., fill_value=..., **kwargs ): ... diff --git a/pandas-stubs/core/reshape/concat.pyi b/pandas-stubs/core/reshape/concat.pyi index 7ee1913b..bdd11b7e 100644 --- a/pandas-stubs/core/reshape/concat.pyi +++ b/pandas-stubs/core/reshape/concat.pyi @@ -23,6 +23,48 @@ from pandas._typing import ( HashableT4, ) +@overload +def concat( + objs: Iterable[DataFrame] | Mapping[HashableT1, DataFrame], + *, + axis: Axis = ..., + join: Literal["inner", "outer"] = ..., + ignore_index: bool = ..., + keys: Iterable[HashableT2] = ..., + levels: Sequence[list[HashableT3] | tuple[HashableT3, ...]] = ..., + names: list[HashableT4] = ..., + verify_integrity: bool = ..., + sort: bool = ..., + copy: bool = ..., +) -> DataFrame: ... +@overload +def concat( # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload] + objs: Iterable[Series] | Mapping[HashableT1, Series], + *, + axis: AxisIndex = ..., + join: Literal["inner", "outer"] = ..., + ignore_index: bool = ..., + keys: Iterable[HashableT2] = ..., + levels: Sequence[list[HashableT3] | tuple[HashableT3, ...]] = ..., + names: list[HashableT4] = ..., + verify_integrity: bool = ..., + sort: bool = ..., + copy: bool = ..., +) -> Series: ... +@overload +def concat( # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload] + objs: Iterable[Series | DataFrame] | Mapping[HashableT1, Series | DataFrame], + *, + axis: Axis = ..., + join: Literal["inner", "outer"] = ..., + ignore_index: bool = ..., + keys: Iterable[HashableT2] = ..., + levels: Sequence[list[HashableT3] | tuple[HashableT3, ...]] = ..., + names: list[HashableT4] = ..., + verify_integrity: bool = ..., + sort: bool = ..., + copy: bool = ..., +) -> DataFrame: ... @overload def concat( objs: Iterable[None] | Mapping[HashableT1, None], @@ -38,7 +80,7 @@ def concat( copy: bool = ..., ) -> Never: ... @overload -def concat( # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload] +def concat( # type: ignore[overload-overlap] objs: Iterable[DataFrame | None] | Mapping[HashableT1, DataFrame | None], *, axis: Axis = ..., @@ -52,7 +94,7 @@ def concat( # type: ignore[overload-overlap] # pyright: ignore[reportOverlappin copy: bool = ..., ) -> DataFrame: ... @overload -def concat( # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload] +def concat( # type: ignore[overload-overlap] objs: Iterable[Series | None] | Mapping[HashableT1, Series | None], *, axis: AxisIndex = ..., diff --git a/pyproject.toml b/pyproject.toml index df1b83b8..2149b035 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,11 +35,11 @@ types-pytz = ">= 2022.1.1" numpy = { version = ">=1.26.0", python = "<3.13" } [tool.poetry.group.dev.dependencies] -mypy = "1.8.0" -pandas = "2.2.0" +mypy = "1.9.0" +pandas = "2.2.1" pyarrow = ">=10.0.1" pytest = ">=7.1.2" -pyright = ">=1.1.350" +pyright = ">=1.1.354" poethepoet = ">=0.16.5" loguru = ">=0.6.0" typing-extensions = ">=4.4.0" diff --git a/tests/test_io.py b/tests/test_io.py index f2bcb21d..75d0331b 100644 --- a/tests/test_io.py +++ b/tests/test_io.py @@ -430,13 +430,13 @@ def test_hdf_series(): def test_spss(): if PD_LTE_22: warning_class = FutureWarning - message = "ChainedAssignmentError: behaviour will change" + message = "Placeholder" else: warning_class = pd.errors.ChainedAssignmentError # type: ignore[attr-defined] # pyright: ignore[reportAttributeAccessIssue] message = "A value is trying to be set on a copy of a DataFrame" path = Path(CWD, "data", "labelled-num.sav") - with pytest_warns_bounded(warning_class, message): + with pytest_warns_bounded(warning_class, message, "2.3.0"): check( assert_type(read_spss(path, convert_categoricals=True), DataFrame), DataFrame,