diff --git a/pandas/core/arrays/categorical.py b/pandas/core/arrays/categorical.py index bf14ed44e3a1c..48f62fe888b9a 100644 --- a/pandas/core/arrays/categorical.py +++ b/pandas/core/arrays/categorical.py @@ -463,7 +463,7 @@ def astype(self, dtype: Dtype, copy: bool = True) -> ArrayLike: return self return self._set_dtype(dtype) if is_extension_array_dtype(dtype): - return array(self, dtype=dtype, copy=copy) # type: ignore # GH 28770 + return array(self, dtype=dtype, copy=copy) if is_integer_dtype(dtype) and self.isna().any(): raise ValueError("Cannot convert float NaN to integer") return np.array(self, dtype=dtype, copy=copy) diff --git a/pandas/core/arrays/datetimelike.py b/pandas/core/arrays/datetimelike.py index 407daf15d5cce..76788f3f97a28 100644 --- a/pandas/core/arrays/datetimelike.py +++ b/pandas/core/arrays/datetimelike.py @@ -1,6 +1,6 @@ from datetime import datetime, timedelta import operator -from typing import Any, Sequence, Type, Union, cast +from typing import Any, Sequence, Type, TypeVar, Union, cast import warnings import numpy as np @@ -437,6 +437,9 @@ def _with_freq(self, freq): return self +DatetimeLikeArrayT = TypeVar("DatetimeLikeArrayT", bound="DatetimeLikeArrayMixin") + + class DatetimeLikeArrayMixin( ExtensionOpsMixin, AttributesMixin, NDArrayBackedExtensionArray ): @@ -679,7 +682,7 @@ def _concat_same_type(cls, to_concat, axis: int = 0): return cls._simple_new(values, dtype=dtype, freq=new_freq) - def copy(self): + def copy(self: DatetimeLikeArrayT) -> DatetimeLikeArrayT: values = self.asi8.copy() return type(self)._simple_new(values, dtype=self.dtype, freq=self.freq) diff --git a/pandas/core/arrays/period.py b/pandas/core/arrays/period.py index 2d9522b00627c..b7dfcd4cb188c 100644 --- a/pandas/core/arrays/period.py +++ b/pandas/core/arrays/period.py @@ -1,6 +1,6 @@ from datetime import timedelta import operator -from typing import Any, Callable, List, Optional, Sequence, Union +from typing import Any, Callable, List, Optional, Sequence, Type, Union import numpy as np @@ -20,6 +20,7 @@ period_asfreq_arr, ) from pandas._libs.tslibs.timedeltas import Timedelta, delta_to_nanoseconds +from pandas._typing import AnyArrayLike from pandas.util._decorators import cache_readonly from pandas.core.dtypes.common import ( @@ -172,8 +173,8 @@ def _simple_new(cls, values: np.ndarray, freq=None, **kwargs) -> "PeriodArray": @classmethod def _from_sequence( - cls, - scalars: Sequence[Optional[Period]], + cls: Type["PeriodArray"], + scalars: Union[Sequence[Optional[Period]], AnyArrayLike], dtype: Optional[PeriodDtype] = None, copy: bool = False, ) -> "PeriodArray": @@ -186,7 +187,6 @@ def _from_sequence( validate_dtype_freq(scalars.dtype, freq) if copy: scalars = scalars.copy() - assert isinstance(scalars, PeriodArray) # for mypy return scalars periods = np.asarray(scalars, dtype=object) @@ -772,7 +772,7 @@ def raise_on_incompatible(left, right): def period_array( - data: Sequence[Optional[Period]], + data: Union[Sequence[Optional[Period]], AnyArrayLike], freq: Optional[Union[str, Tick]] = None, copy: bool = False, ) -> PeriodArray: diff --git a/pandas/core/construction.py b/pandas/core/construction.py index 2f71f4f4ccc19..351ef1d0429da 100644 --- a/pandas/core/construction.py +++ b/pandas/core/construction.py @@ -13,7 +13,7 @@ from pandas._libs import lib from pandas._libs.tslibs import IncompatibleFrequency, OutOfBoundsDatetime -from pandas._typing import ArrayLike, Dtype, DtypeObj +from pandas._typing import AnyArrayLike, ArrayLike, Dtype, DtypeObj from pandas.core.dtypes.cast import ( construct_1d_arraylike_from_scalar, @@ -54,7 +54,9 @@ def array( - data: Sequence[object], dtype: Optional[Dtype] = None, copy: bool = True, + data: Union[Sequence[object], AnyArrayLike], + dtype: Optional[Dtype] = None, + copy: bool = True, ) -> "ExtensionArray": """ Create an array.