From f02a8436762eff641a108f24c93f3cc919020a36 Mon Sep 17 00:00:00 2001 From: Irv Lustig Date: Fri, 3 Oct 2025 13:46:34 -0400 Subject: [PATCH 1/4] fix reportMissingTypeStubs error --- pandas-stubs/__init__.pyi | 1 - pandas-stubs/core/arrays/arrow/dtype.pyi | 2 +- pandas-stubs/io/api.pyi | 1 - pandas-stubs/io/excel/_base.pyi | 4 ++-- pandas-stubs/io/parsers/readers.pyi | 3 --- pyproject.toml | 1 - tests/test_dtypes.py | 2 +- tests/test_pandas.py | 2 +- 8 files changed, 5 insertions(+), 11 deletions(-) diff --git a/pandas-stubs/__init__.pyi b/pandas-stubs/__init__.pyi index 62d205812..395be2b48 100644 --- a/pandas-stubs/__init__.pyi +++ b/pandas-stubs/__init__.pyi @@ -94,7 +94,6 @@ from pandas._config import ( ) from pandas.util._print_versions import show_versions as show_versions -from pandas.util._tester import test as test from pandas.io.api import ( ExcelFile as ExcelFile, diff --git a/pandas-stubs/core/arrays/arrow/dtype.pyi b/pandas-stubs/core/arrays/arrow/dtype.pyi index 79b796f2d..e545f36a1 100644 --- a/pandas-stubs/core/arrays/arrow/dtype.pyi +++ b/pandas-stubs/core/arrays/arrow/dtype.pyi @@ -1,4 +1,4 @@ -import pyarrow as pa +import pyarrow as pa # pyright: ignore[reportMissingTypeStubs] from pandas._libs.missing import NAType diff --git a/pandas-stubs/io/api.pyi b/pandas-stubs/io/api.pyi index dc41ede2f..8da2a7a40 100644 --- a/pandas-stubs/io/api.pyi +++ b/pandas-stubs/io/api.pyi @@ -5,7 +5,6 @@ from pandas.io.excel import ( read_excel as read_excel, ) from pandas.io.feather_format import read_feather as read_feather -from pandas.io.gbq import read_gbq as read_gbq from pandas.io.html import read_html as read_html from pandas.io.json import read_json as read_json from pandas.io.orc import read_orc as read_orc diff --git a/pandas-stubs/io/excel/_base.pyi b/pandas-stubs/io/excel/_base.pyi index 33ce34814..fdd1a03c4 100644 --- a/pandas-stubs/io/excel/_base.pyi +++ b/pandas-stubs/io/excel/_base.pyi @@ -12,10 +12,10 @@ from typing import ( overload, ) -from odf.opendocument import OpenDocument +from odf.opendocument import OpenDocument # pyright: ignore[reportMissingTypeStubs] from openpyxl.workbook.workbook import Workbook from pandas.core.frame import DataFrame -import pyxlsb.workbook +import pyxlsb.workbook # pyright: ignore[reportMissingTypeStubs] from typing_extensions import Self from xlrd.book import Book diff --git a/pandas-stubs/io/parsers/readers.pyi b/pandas-stubs/io/parsers/readers.pyi index 227e69f0d..c3ad7f391 100644 --- a/pandas-stubs/io/parsers/readers.pyi +++ b/pandas-stubs/io/parsers/readers.pyi @@ -34,8 +34,6 @@ from pandas._typing import ( UsecolsArgType, ) -from pandas.io.common import IOHandles - @overload def read_csv( filepath_or_buffer: FilePath | ReadCsvBuffer[bytes] | ReadCsvBuffer[str], @@ -472,7 +470,6 @@ class TextFileReader(abc.Iterator): chunksize: int | None nrows: int | None squeeze: bool - handles: IOHandles | None def __init__( self, f: FilePath | ReadCsvBuffer[bytes] | ReadCsvBuffer[str] | list, diff --git a/pyproject.toml b/pyproject.toml index a9f5bda73..bb7b37612 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -240,7 +240,6 @@ enableTypeIgnoreComments = false # use pyright-specific ignores # disable subset of strict reportMissingParameterType = false reportMissingTypeArgument = false -reportMissingTypeStubs = false reportUnnecessaryTypeIgnoreComment = true reportUnknownArgumentType = false reportUnknownLambdaType = false diff --git a/tests/test_dtypes.py b/tests/test_dtypes.py index dbf3e5fe2..d6d9aeefd 100644 --- a/tests/test_dtypes.py +++ b/tests/test_dtypes.py @@ -20,7 +20,7 @@ BooleanArray, IntegerArray, ) -import pyarrow as pa +import pyarrow as pa # pyright: ignore[reportMissingTypeStubs] from typing_extensions import assert_type from pandas._typing import Scalar diff --git a/tests/test_pandas.py b/tests/test_pandas.py index f03705ed6..7554e4e7b 100644 --- a/tests/test_pandas.py +++ b/tests/test_pandas.py @@ -678,7 +678,7 @@ def test_crosstab() -> None: def test_arrow_dtype() -> None: pytest.importorskip("pyarrow") - import pyarrow as pa + import pyarrow as pa # pyright: ignore[reportMissingTypeStubs] check( assert_type( From c8a222db6e60bf0525100ed6e9b88798dfb994ce Mon Sep 17 00:00:00 2001 From: Irv Lustig Date: Fri, 3 Oct 2025 13:48:16 -0400 Subject: [PATCH 2/4] fix isort issues --- pandas-stubs/core/indexers/__init__.pyi | 2 ++ pandas-stubs/core/indexers/objects.pyi | 31 +++++++++++++++++++++++++ pandas-stubs/core/indexers/utils.pyi | 14 +++++++++++ 3 files changed, 47 insertions(+) create mode 100644 pandas-stubs/core/indexers/__init__.pyi create mode 100644 pandas-stubs/core/indexers/objects.pyi create mode 100644 pandas-stubs/core/indexers/utils.pyi diff --git a/pandas-stubs/core/indexers/__init__.pyi b/pandas-stubs/core/indexers/__init__.pyi new file mode 100644 index 000000000..b3d832a36 --- /dev/null +++ b/pandas-stubs/core/indexers/__init__.pyi @@ -0,0 +1,2 @@ +from pandas.core.indexers.objects import BaseIndexer as BaseIndexer +from pandas.core.indexers.utils import check_array_indexer as check_array_indexer diff --git a/pandas-stubs/core/indexers/objects.pyi b/pandas-stubs/core/indexers/objects.pyi new file mode 100644 index 000000000..2187cf885 --- /dev/null +++ b/pandas-stubs/core/indexers/objects.pyi @@ -0,0 +1,31 @@ +from typing import Any + +import numpy as np +from pandas import DatetimeIndex + +from pandas._libs.tslibs import BaseOffset + +class BaseIndexer: + def __init__( + self, index_array: np.ndarray | None = None, window_size: int = 0, **kwargs: Any + ) -> None: ... + def get_window_bounds( + self, + num_values: int, + min_periods: int | None, + center: bool | None, + closed: str | None = None, + step: int | None = None, + ) -> tuple[np.ndarray, np.ndarray]: ... + +class FixedForwardWindowIndexer(BaseIndexer): ... + +class VariableOffsetWindowIndexer(BaseIndexer): + def __init__( + self, + index_array: np.ndarray | None = None, + window_size: int = 0, + index: DatetimeIndex | None = None, + offset: BaseOffset | None = None, + **kwargs: Any, + ) -> None: ... diff --git a/pandas-stubs/core/indexers/utils.pyi b/pandas-stubs/core/indexers/utils.pyi new file mode 100644 index 000000000..99f1b018a --- /dev/null +++ b/pandas-stubs/core/indexers/utils.pyi @@ -0,0 +1,14 @@ +from typing import overload + +from pandas._typing import ( + AnyArrayLike, + ListLike, + np_ndarray_int, +) + +@overload +def check_array_indexer(array: AnyArrayLike, indexer: int) -> int: ... +@overload +def check_array_indexer(array: AnyArrayLike, indexer: slice) -> slice: ... +@overload +def check_array_indexer(array: AnyArrayLike, indexer: ListLike) -> np_ndarray_int: ... From 815edae69135a239bf6c8639fc7a782257a83513 Mon Sep 17 00:00:00 2001 From: Irv Lustig Date: Fri, 3 Oct 2025 14:00:03 -0400 Subject: [PATCH 3/4] fix python 3.10 issue --- tests/extension/decimal/array.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/extension/decimal/array.py b/tests/extension/decimal/array.py index 60cfe3fb7..92f59c081 100644 --- a/tests/extension/decimal/array.py +++ b/tests/extension/decimal/array.py @@ -6,7 +6,6 @@ import sys import numpy as np -import pandas as pd from pandas.api.extensions import ( no_default, register_extension_dtype, @@ -165,7 +164,7 @@ def __getitem__(self, item): return self._data[item] else: # array, slice. - item = pd.api.indexers.check_array_indexer(self, item) + item = check_array_indexer(self, item) return type(self)(self._data[item]) def take( From 377872cb50222faacc205c5e496610e82cc138be Mon Sep 17 00:00:00 2001 From: Irv Lustig Date: Fri, 3 Oct 2025 18:23:57 -0400 Subject: [PATCH 4/4] add pyarrow-stubs. add comment about check_array_indexer --- pandas-stubs/core/arrays/arrow/__init__.pyi | 0 pandas-stubs/core/arrays/arrow/dtype.pyi | 2 +- pandas-stubs/core/indexers/utils.pyi | 1 + pyproject.toml | 1 + tests/test_dtypes.py | 2 +- tests/test_pandas.py | 2 +- 6 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 pandas-stubs/core/arrays/arrow/__init__.pyi diff --git a/pandas-stubs/core/arrays/arrow/__init__.pyi b/pandas-stubs/core/arrays/arrow/__init__.pyi new file mode 100644 index 000000000..e69de29bb diff --git a/pandas-stubs/core/arrays/arrow/dtype.pyi b/pandas-stubs/core/arrays/arrow/dtype.pyi index e545f36a1..79b796f2d 100644 --- a/pandas-stubs/core/arrays/arrow/dtype.pyi +++ b/pandas-stubs/core/arrays/arrow/dtype.pyi @@ -1,4 +1,4 @@ -import pyarrow as pa # pyright: ignore[reportMissingTypeStubs] +import pyarrow as pa from pandas._libs.missing import NAType diff --git a/pandas-stubs/core/indexers/utils.pyi b/pandas-stubs/core/indexers/utils.pyi index 99f1b018a..60f1eb760 100644 --- a/pandas-stubs/core/indexers/utils.pyi +++ b/pandas-stubs/core/indexers/utils.pyi @@ -6,6 +6,7 @@ from pandas._typing import ( np_ndarray_int, ) +# Docs may not be right. See pandas-dev/pandas#62562 @overload def check_array_indexer(array: AnyArrayLike, indexer: int) -> int: ... @overload diff --git a/pyproject.toml b/pyproject.toml index bb7b37612..48d2c42f0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -68,6 +68,7 @@ types-python-dateutil = ">=2.8.19" beautifulsoup4 = ">=4.14.2" html5lib = ">=1.1" python-calamine = ">=0.2.0" +pyarrow-stubs = { version = ">=20.0.0.20250928", python = "<4" } [build-system] requires = ["poetry-core>=1.0.0"] diff --git a/tests/test_dtypes.py b/tests/test_dtypes.py index d6d9aeefd..dbf3e5fe2 100644 --- a/tests/test_dtypes.py +++ b/tests/test_dtypes.py @@ -20,7 +20,7 @@ BooleanArray, IntegerArray, ) -import pyarrow as pa # pyright: ignore[reportMissingTypeStubs] +import pyarrow as pa from typing_extensions import assert_type from pandas._typing import Scalar diff --git a/tests/test_pandas.py b/tests/test_pandas.py index 7554e4e7b..f03705ed6 100644 --- a/tests/test_pandas.py +++ b/tests/test_pandas.py @@ -678,7 +678,7 @@ def test_crosstab() -> None: def test_arrow_dtype() -> None: pytest.importorskip("pyarrow") - import pyarrow as pa # pyright: ignore[reportMissingTypeStubs] + import pyarrow as pa check( assert_type(