From 841bcf5d82bf376ca41a750323319ab1200d80ed Mon Sep 17 00:00:00 2001 From: Irv Lustig Date: Sat, 1 May 2021 21:32:13 -0400 Subject: [PATCH 1/2] TYP: ExtensionArray unique and repeat --- pandas/core/arrays/base.py | 5 +++-- pandas/core/arrays/interval.py | 10 +++++++++- pandas/core/base.py | 3 ++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/pandas/core/arrays/base.py b/pandas/core/arrays/base.py index 5a2643dd531ed..7b834014404ca 100644 --- a/pandas/core/arrays/base.py +++ b/pandas/core/arrays/base.py @@ -69,6 +69,7 @@ ) if TYPE_CHECKING: + from typing import Literal class ExtensionArraySupportsAnyAll("ExtensionArray"): def any(self, *, skipna: bool = True) -> bool: @@ -794,7 +795,7 @@ def shift(self, periods: int = 1, fill_value: object = None) -> ExtensionArray: b = empty return self._concat_same_type([a, b]) - def unique(self): + def unique(self: ExtensionArrayT) -> ExtensionArrayT: """ Compute the ExtensionArray of unique values. @@ -1023,7 +1024,7 @@ def factorize(self, na_sentinel: int = -1) -> tuple[np.ndarray, ExtensionArray]: @Substitution(klass="ExtensionArray") @Appender(_extension_array_shared_docs["repeat"]) - def repeat(self, repeats, axis=None): + def repeat(self, repeats: int | Sequence[int], axis: Literal[0] | None = None): nv.validate_repeat((), {"axis": axis}) ind = np.arange(len(self)).repeat(repeats) return self.take(ind) diff --git a/pandas/core/arrays/interval.py b/pandas/core/arrays/interval.py index 50e8cc4c82e0d..1837a85781a0e 100644 --- a/pandas/core/arrays/interval.py +++ b/pandas/core/arrays/interval.py @@ -7,6 +7,7 @@ ) import textwrap from typing import ( + TYPE_CHECKING, Sequence, TypeVar, cast, @@ -85,6 +86,9 @@ unpack_zerodim_and_defer, ) +if TYPE_CHECKING: + from typing import Literal + IntervalArrayT = TypeVar("IntervalArrayT", bound="IntervalArray") _interval_shared_docs: dict[str, str] = {} @@ -1518,7 +1522,11 @@ def delete(self: IntervalArrayT, loc) -> IntervalArrayT: return self._shallow_copy(left=new_left, right=new_right) @Appender(_extension_array_shared_docs["repeat"] % _shared_docs_kwargs) - def repeat(self: IntervalArrayT, repeats: int, axis=None) -> IntervalArrayT: + def repeat( + self: IntervalArrayT, + repeats: int | Sequence[int], + axis: Literal[0] | None = None, + ) -> IntervalArrayT: nv.validate_repeat((), {"axis": axis}) left_repeat = self.left.repeat(repeats) right_repeat = self.right.repeat(repeats) diff --git a/pandas/core/base.py b/pandas/core/base.py index 42f52618eb07b..e1e36d6d226c4 100644 --- a/pandas/core/base.py +++ b/pandas/core/base.py @@ -16,6 +16,7 @@ import pandas._libs.lib as lib from pandas._typing import ( + ArrayLike, Dtype, DtypeObj, IndexLabel, @@ -996,7 +997,7 @@ def unique(self): values = self._values if not isinstance(values, np.ndarray): - result = values.unique() + result: ArrayLike = values.unique() if self.dtype.kind in ["m", "M"] and isinstance(self, ABCSeries): # GH#31182 Series._values returns EA, unpack for backward-compat if getattr(self.dtype, "tz", None) is None: From 0a02b0578c3c0912e425cfae041a5283897aa2e6 Mon Sep 17 00:00:00 2001 From: Irv Lustig Date: Sun, 2 May 2021 12:28:26 -0400 Subject: [PATCH 2/2] change repeat argument --- pandas/core/arrays/base.py | 3 +-- pandas/core/arrays/interval.py | 6 +----- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/pandas/core/arrays/base.py b/pandas/core/arrays/base.py index 7b834014404ca..bd01191719143 100644 --- a/pandas/core/arrays/base.py +++ b/pandas/core/arrays/base.py @@ -69,7 +69,6 @@ ) if TYPE_CHECKING: - from typing import Literal class ExtensionArraySupportsAnyAll("ExtensionArray"): def any(self, *, skipna: bool = True) -> bool: @@ -1024,7 +1023,7 @@ def factorize(self, na_sentinel: int = -1) -> tuple[np.ndarray, ExtensionArray]: @Substitution(klass="ExtensionArray") @Appender(_extension_array_shared_docs["repeat"]) - def repeat(self, repeats: int | Sequence[int], axis: Literal[0] | None = None): + def repeat(self, repeats: int | Sequence[int], axis: int | None = None): nv.validate_repeat((), {"axis": axis}) ind = np.arange(len(self)).repeat(repeats) return self.take(ind) diff --git a/pandas/core/arrays/interval.py b/pandas/core/arrays/interval.py index 1837a85781a0e..95c95d98bc968 100644 --- a/pandas/core/arrays/interval.py +++ b/pandas/core/arrays/interval.py @@ -7,7 +7,6 @@ ) import textwrap from typing import ( - TYPE_CHECKING, Sequence, TypeVar, cast, @@ -86,9 +85,6 @@ unpack_zerodim_and_defer, ) -if TYPE_CHECKING: - from typing import Literal - IntervalArrayT = TypeVar("IntervalArrayT", bound="IntervalArray") _interval_shared_docs: dict[str, str] = {} @@ -1525,7 +1521,7 @@ def delete(self: IntervalArrayT, loc) -> IntervalArrayT: def repeat( self: IntervalArrayT, repeats: int | Sequence[int], - axis: Literal[0] | None = None, + axis: int | None = None, ) -> IntervalArrayT: nv.validate_repeat((), {"axis": axis}) left_repeat = self.left.repeat(repeats)