diff --git a/pandas/core/arrays/base.py b/pandas/core/arrays/base.py index 7447d593a7ff0..4435d8b7c88ee 100644 --- a/pandas/core/arrays/base.py +++ b/pandas/core/arrays/base.py @@ -439,7 +439,7 @@ def isna(self) -> ArrayLike: Returns ------- - na_values : Union[np.ndarray, ExtensionArray] + na_values : np.ndarray or ExtensionArray In most cases, this should return a NumPy ndarray. For exceptional cases like ``SparseArray``, where returning an ndarray would be expensive, an ExtensionArray may be diff --git a/pandas/core/base.py b/pandas/core/base.py index ee514888c6331..06b7cd9152fb7 100644 --- a/pandas/core/base.py +++ b/pandas/core/base.py @@ -4,11 +4,12 @@ import builtins import textwrap -from typing import Any, Dict, FrozenSet, List, Optional, Union +from typing import Any, Dict, FrozenSet, Generic, List, Optional import numpy as np import pandas._libs.lib as lib +from pandas._typing import ArrayLike from pandas.compat import PYPY from pandas.compat.numpy import function as nv from pandas.errors import AbstractMethodError @@ -584,7 +585,7 @@ def _shallow_copy(self, obj, **kwargs): return self._constructor(obj, **kwargs) -class IndexOpsMixin: +class IndexOpsMixin(Generic[ArrayLike]): """ Common ops mixin to support a unified interface / docs for Series / Index """ @@ -596,7 +597,7 @@ class IndexOpsMixin: ) @property - def _values(self) -> Union[ExtensionArray, np.ndarray]: + def _values(self) -> ArrayLike: # must be defined here as a property for mypy raise AbstractMethodError(self) @@ -1141,7 +1142,10 @@ def _map_values(self, mapper, na_action=None): values = self._values if na_action is not None: raise NotImplementedError - map_f = lambda values, f: values.map(f) + + def map_f(values, f): + return values.map(f) + else: values = self.astype(object)._values if na_action == "ignore": diff --git a/pandas/core/indexes/base.py b/pandas/core/indexes/base.py index 4bc5599297066..c0aab801a2024 100644 --- a/pandas/core/indexes/base.py +++ b/pandas/core/indexes/base.py @@ -13,7 +13,7 @@ from pandas._libs.tslibs import OutOfBoundsDatetime, Timestamp from pandas._libs.tslibs.period import IncompatibleFrequency from pandas._libs.tslibs.timezones import tz_compare -from pandas._typing import DtypeObj, Label +from pandas._typing import ArrayLike, DtypeObj, Label from pandas.compat import set_function_name from pandas.compat.numpy import function as nv from pandas.util._decorators import Appender, Substitution, cache_readonly, doc @@ -182,7 +182,7 @@ def _new_Index(cls, d): return cls.__new__(cls, **d) -class Index(IndexOpsMixin, PandasObject): +class Index(IndexOpsMixin[ArrayLike], PandasObject): """ Immutable ndarray implementing an ordered, sliceable set. The basic object storing axis labels for all pandas objects. @@ -254,7 +254,7 @@ def _outer_indexer(self, left, right): return libjoin.outer_join_indexer(left, right) _typ = "index" - _data: Union[ExtensionArray, np.ndarray] + _data: ArrayLike _id = None _name: Label = None # MultiIndex.levels previously allowed setting the index name. We @@ -3805,7 +3805,7 @@ def array(self) -> ExtensionArray: return array @property - def _values(self) -> Union[ExtensionArray, np.ndarray]: + def _values(self) -> ArrayLike: """ The best array representation. diff --git a/pandas/tests/indexes/period/test_constructors.py b/pandas/tests/indexes/period/test_constructors.py index 4ec7ef64e2272..56383826db164 100644 --- a/pandas/tests/indexes/period/test_constructors.py +++ b/pandas/tests/indexes/period/test_constructors.py @@ -321,7 +321,7 @@ def test_constructor_mixed(self): def test_constructor_simple_new(self): idx = period_range("2007-01", name="p", periods=2, freq="M") - with pytest.raises(AssertionError, match=""): + with pytest.raises(AssertionError, match="PeriodIndex"): idx._simple_new(idx, name="p") result = idx._simple_new(idx._data, name="p") @@ -339,7 +339,7 @@ def test_constructor_simple_new(self): def test_constructor_simple_new_empty(self): # GH13079 idx = PeriodIndex([], freq="M", name="p") - with pytest.raises(AssertionError, match=""): + with pytest.raises(AssertionError, match="PeriodIndex"): idx._simple_new(idx, name="p") result = idx._simple_new(idx._data, name="p") diff --git a/pandas/tests/series/methods/test_argsort.py b/pandas/tests/series/methods/test_argsort.py index 4353eb4c8cd64..53e5dbd87e508 100644 --- a/pandas/tests/series/methods/test_argsort.py +++ b/pandas/tests/series/methods/test_argsort.py @@ -53,7 +53,7 @@ def test_argsort_stable(self): tm.assert_series_equal(qindexer.astype(np.intp), Series(qexpected)) msg = ( r"ndarray Expected type , " - r"found instead" + r"found ()? instead" ) with pytest.raises(AssertionError, match=msg): tm.assert_numpy_array_equal(qindexer, mindexer)