From db34dd512a918e18180d204465661694f5c295b3 Mon Sep 17 00:00:00 2001 From: Irv Lustig Date: Thu, 12 Jan 2023 12:17:56 -0500 Subject: [PATCH] allow np.uint64 to be used in indexing. Support numpy 1.24.1 --- pandas-stubs/_typing.pyi | 2 +- pandas-stubs/core/indexes/base.pyi | 5 +++-- pyproject.toml | 2 +- tests/test_frame.py | 14 ++++++++++++++ tests/test_pandas.py | 4 ++-- 5 files changed, 21 insertions(+), 6 deletions(-) diff --git a/pandas-stubs/_typing.pyi b/pandas-stubs/_typing.pyi index d76637d0..0bb08be2 100644 --- a/pandas-stubs/_typing.pyi +++ b/pandas-stubs/_typing.pyi @@ -189,7 +189,7 @@ np_ndarray_anyint: TypeAlias = npt.NDArray[np.integer] np_ndarray_bool: TypeAlias = npt.NDArray[np.bool_] np_ndarray_str: TypeAlias = npt.NDArray[np.str_] -IndexType: TypeAlias = Union[slice, np_ndarray_int64, Index, list[int], Series[int]] +IndexType: TypeAlias = Union[slice, np_ndarray_anyint, Index, list[int], Series[int]] MaskType: TypeAlias = Union[Series[bool], np_ndarray_bool, list[bool]] # Scratch types for generics S1 = TypeVar( diff --git a/pandas-stubs/core/indexes/base.pyi b/pandas-stubs/core/indexes/base.pyi index 0d40918d..b0507fa1 100644 --- a/pandas-stubs/core/indexes/base.pyi +++ b/pandas-stubs/core/indexes/base.pyi @@ -38,6 +38,7 @@ from pandas._typing import ( Level, NaPosition, Scalar, + np_ndarray_anyint, np_ndarray_bool, np_ndarray_int64, type_t, @@ -192,10 +193,10 @@ class Index(IndexOpsMixin, PandasObject): @overload def __getitem__( self: IndexT, - idx: slice | np_ndarray_int64 | Index | Series[bool] | np_ndarray_bool, + idx: slice | np_ndarray_anyint | Index | Series[bool] | np_ndarray_bool, ) -> IndexT: ... @overload - def __getitem__(self, idx: int | tuple[np_ndarray_int64, ...]) -> Scalar: ... + def __getitem__(self, idx: int | tuple[np_ndarray_anyint, ...]) -> Scalar: ... def append(self, other): ... def putmask(self, mask, value): ... def equals(self, other) -> bool: ... diff --git a/pyproject.toml b/pyproject.toml index e1708645..0e12e5a1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,7 +42,7 @@ pyright = ">=1.1.286" poethepoet = ">=0.16.5" loguru = ">=0.6.0" pandas = "1.5.2" -numpy = "<=1.23.5" +numpy = ">=1.24.1" typing-extensions = ">=4.2.0" matplotlib = ">=3.5.1" pre-commit = ">=2.19.0" diff --git a/tests/test_frame.py b/tests/test_frame.py index 7b13ee77..66716d79 100644 --- a/tests/test_frame.py +++ b/tests/test_frame.py @@ -25,6 +25,7 @@ ) import numpy as np +import numpy.typing as npt import pandas as pd from pandas._testing import ( ensure_clean, @@ -2363,3 +2364,16 @@ def test_frame_dropna_subset() -> None: assert_type(df.dropna(subset=df.columns.drop("col1")), pd.DataFrame), pd.DataFrame, ) + + +def test_npint_loc_indexer() -> None: + # GH 508 + + df = pd.DataFrame(dict(x=[1, 2, 3]), index=np.array([10, 20, 30], dtype="uint64")) + + def get_NDArray(df: pd.DataFrame, key: npt.NDArray[np.uint64]) -> pd.DataFrame: + df2 = df.loc[key] + return df2 + + a: npt.NDArray[np.uint64] = np.array([10, 30], dtype="uint64") + check(assert_type(get_NDArray(df, a), pd.DataFrame), pd.DataFrame) diff --git a/tests/test_pandas.py b/tests/test_pandas.py index 999b0c5a..b16daf65 100644 --- a/tests/test_pandas.py +++ b/tests/test_pandas.py @@ -13,6 +13,7 @@ import pandas as pd from pandas import Grouper from pandas.api.extensions import ExtensionArray +from pandas.util.version import Version import pytest from typing_extensions import assert_type @@ -1705,7 +1706,7 @@ def test_pivot_table() -> None: ), pd.DataFrame, ) - with pytest.warns(np.VisibleDeprecationWarning): + if Version(np.__version__) <= Version("1.23.5"): check( assert_type( pd.pivot_table( @@ -1719,7 +1720,6 @@ def test_pivot_table() -> None: ), pd.DataFrame, ) - with pytest.warns(np.VisibleDeprecationWarning): check( assert_type( pd.pivot_table(