Skip to content

Commit 69c673c

Browse files
authored
TYP: indexes (#43273)
1 parent e39ea30 commit 69c673c

File tree

3 files changed

+36
-24
lines changed

3 files changed

+36
-24
lines changed

pandas/core/indexes/base.py

+12-8
Original file line numberDiff line numberDiff line change
@@ -2498,7 +2498,7 @@ def __reduce__(self):
24982498
"""The expected NA value to use with this index."""
24992499

25002500
@cache_readonly
2501-
def _isnan(self) -> np.ndarray:
2501+
def _isnan(self) -> npt.NDArray[np.bool_]:
25022502
"""
25032503
Return if each value is NaN.
25042504
"""
@@ -2521,7 +2521,7 @@ def hasnans(self) -> bool:
25212521
return False
25222522

25232523
@final
2524-
def isna(self) -> np.ndarray:
2524+
def isna(self) -> npt.NDArray[np.bool_]:
25252525
"""
25262526
Detect missing values.
25272527
@@ -2579,7 +2579,7 @@ def isna(self) -> np.ndarray:
25792579
isnull = isna
25802580

25812581
@final
2582-
def notna(self) -> np.ndarray:
2582+
def notna(self) -> npt.NDArray[np.bool_]:
25832583
"""
25842584
Detect existing (non-missing) values.
25852585
@@ -2764,7 +2764,9 @@ def drop_duplicates(self: _IndexT, keep: str_t | bool = "first") -> _IndexT:
27642764

27652765
return super().drop_duplicates(keep=keep)
27662766

2767-
def duplicated(self, keep: Literal["first", "last", False] = "first") -> np.ndarray:
2767+
def duplicated(
2768+
self, keep: Literal["first", "last", False] = "first"
2769+
) -> npt.NDArray[np.bool_]:
27682770
"""
27692771
Indicate duplicate index values.
27702772
@@ -5495,7 +5497,7 @@ def _get_indexer_strict(self, key, axis_name: str_t) -> tuple[Index, np.ndarray]
54955497

54965498
return keyarr, indexer
54975499

5498-
def _raise_if_missing(self, key, indexer, axis_name: str_t):
5500+
def _raise_if_missing(self, key, indexer, axis_name: str_t) -> None:
54995501
"""
55005502
Check that indexer can be used to return a result.
55015503
@@ -6119,7 +6121,9 @@ def get_slice_bound(self, label, side: str_t, kind=no_default) -> int:
61196121
else:
61206122
return slc
61216123

6122-
def slice_locs(self, start=None, end=None, step=None, kind=no_default):
6124+
def slice_locs(
6125+
self, start=None, end=None, step=None, kind=no_default
6126+
) -> tuple[int, int]:
61236127
"""
61246128
Compute slice locations for input labels.
61256129
@@ -6491,7 +6495,7 @@ def all(self, *args, **kwargs):
64916495
return np.all(self.values) # type: ignore[arg-type]
64926496

64936497
@final
6494-
def _maybe_disable_logical_methods(self, opname: str_t):
6498+
def _maybe_disable_logical_methods(self, opname: str_t) -> None:
64956499
"""
64966500
raise if this Index subclass does not support any or all.
64976501
"""
@@ -6606,7 +6610,7 @@ def _deprecated_arg(self, value, name: str_t, methodname: str_t) -> None:
66066610
)
66076611

66086612

6609-
def ensure_index_from_sequences(sequences, names=None):
6613+
def ensure_index_from_sequences(sequences, names=None) -> Index:
66106614
"""
66116615
Construct an index from sequences of data.
66126616

pandas/core/indexes/extension.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@
1010

1111
import numpy as np
1212

13-
from pandas._typing import ArrayLike
13+
from pandas._typing import (
14+
ArrayLike,
15+
npt,
16+
)
1417
from pandas.compat.numpy import function as nv
1518
from pandas.util._decorators import (
1619
cache_readonly,
@@ -437,7 +440,7 @@ def astype(self, dtype, copy: bool = True) -> Index:
437440
return Index(new_values, dtype=new_values.dtype, name=self.name, copy=False)
438441

439442
@cache_readonly
440-
def _isnan(self) -> np.ndarray:
443+
def _isnan(self) -> npt.NDArray[np.bool_]:
441444
# error: Incompatible return value type (got "ExtensionArray", expected
442445
# "ndarray")
443446
return self._data.isna() # type: ignore[return-value]

pandas/core/indexes/multi.py

+19-14
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
DtypeObj,
3232
Scalar,
3333
Shape,
34+
npt,
3435
)
3536
from pandas.compat.numpy import function as nv
3637
from pandas.errors import (
@@ -1588,7 +1589,7 @@ def _inferred_type_levels(self) -> list[str]:
15881589
return [i.inferred_type for i in self.levels]
15891590

15901591
@doc(Index.duplicated)
1591-
def duplicated(self, keep="first") -> np.ndarray:
1592+
def duplicated(self, keep="first") -> npt.NDArray[np.bool_]:
15921593
shape = tuple(len(lev) for lev in self.levels)
15931594
ids = get_group_index(self.codes, shape, sort=False, xnull=False)
15941595

@@ -1842,7 +1843,7 @@ def _is_lexsorted(self) -> bool:
18421843
return self._lexsort_depth == self.nlevels
18431844

18441845
@property
1845-
def lexsort_depth(self):
1846+
def lexsort_depth(self) -> int:
18461847
warnings.warn(
18471848
"MultiIndex.is_lexsorted is deprecated as a public function, "
18481849
"users should use MultiIndex.is_monotonic_increasing instead.",
@@ -2152,7 +2153,7 @@ def append(self, other):
21522153
except (TypeError, IndexError):
21532154
return Index._with_infer(new_tuples)
21542155

2155-
def argsort(self, *args, **kwargs) -> np.ndarray:
2156+
def argsort(self, *args, **kwargs) -> npt.NDArray[np.intp]:
21562157
return self._values.argsort(*args, **kwargs)
21572158

21582159
@Appender(_index_shared_docs["repeat"] % _index_doc_kwargs)
@@ -2371,7 +2372,7 @@ def cats(level_codes):
23712372

23722373
def sortlevel(
23732374
self, level=0, ascending: bool = True, sort_remaining: bool = True
2374-
) -> tuple[MultiIndex, np.ndarray]:
2375+
) -> tuple[MultiIndex, npt.NDArray[np.intp]]:
23752376
"""
23762377
Sort MultiIndex at the requested level.
23772378
@@ -2392,7 +2393,7 @@ def sortlevel(
23922393
-------
23932394
sorted_index : pd.MultiIndex
23942395
Resulting index.
2395-
indexer : np.ndarray
2396+
indexer : np.ndarray[np.intp]
23962397
Indices of output values in original index.
23972398
23982399
Examples
@@ -2493,7 +2494,7 @@ def _wrap_reindex_result(self, target, indexer, preserve_names: bool):
24932494
target = self._maybe_preserve_names(target, preserve_names)
24942495
return target
24952496

2496-
def _maybe_preserve_names(self, target: Index, preserve_names: bool):
2497+
def _maybe_preserve_names(self, target: Index, preserve_names: bool) -> Index:
24972498
if (
24982499
preserve_names
24992500
and target.nlevels == self.nlevels
@@ -2506,7 +2507,7 @@ def _maybe_preserve_names(self, target: Index, preserve_names: bool):
25062507
# --------------------------------------------------------------------
25072508
# Indexing Methods
25082509

2509-
def _check_indexing_error(self, key):
2510+
def _check_indexing_error(self, key) -> None:
25102511
if not is_hashable(key) or is_iterator(key):
25112512
# We allow tuples if they are hashable, whereas other Index
25122513
# subclasses require scalar.
@@ -2541,7 +2542,9 @@ def _get_values_for_loc(self, series: Series, loc, key):
25412542
new_ser = series._constructor(new_values, index=new_index, name=series.name)
25422543
return new_ser.__finalize__(series)
25432544

2544-
def _get_indexer_strict(self, key, axis_name: str) -> tuple[Index, np.ndarray]:
2545+
def _get_indexer_strict(
2546+
self, key, axis_name: str
2547+
) -> tuple[Index, npt.NDArray[np.intp]]:
25452548

25462549
keyarr = key
25472550
if not isinstance(keyarr, Index):
@@ -2555,7 +2558,7 @@ def _get_indexer_strict(self, key, axis_name: str) -> tuple[Index, np.ndarray]:
25552558

25562559
return super()._get_indexer_strict(key, axis_name)
25572560

2558-
def _raise_if_missing(self, key, indexer, axis_name: str):
2561+
def _raise_if_missing(self, key, indexer, axis_name: str) -> None:
25592562
keyarr = key
25602563
if not isinstance(key, Index):
25612564
keyarr = com.asarray_tuplesafe(key)
@@ -2575,7 +2578,7 @@ def _raise_if_missing(self, key, indexer, axis_name: str):
25752578
else:
25762579
return super()._raise_if_missing(key, indexer, axis_name)
25772580

2578-
def _get_indexer_level_0(self, target) -> np.ndarray:
2581+
def _get_indexer_level_0(self, target) -> npt.NDArray[np.intp]:
25792582
"""
25802583
Optimized equivalent to `self.get_level_values(0).get_indexer_for(target)`.
25812584
"""
@@ -2640,7 +2643,9 @@ def get_slice_bound(
26402643
label = (label,)
26412644
return self._partial_tup_index(label, side=side)
26422645

2643-
def slice_locs(self, start=None, end=None, step=None, kind=lib.no_default):
2646+
def slice_locs(
2647+
self, start=None, end=None, step=None, kind=lib.no_default
2648+
) -> tuple[int, int]:
26442649
"""
26452650
For an ordered MultiIndex, compute the slice locations for input
26462651
labels.
@@ -3614,7 +3619,7 @@ def _maybe_match_names(self, other):
36143619
names.append(None)
36153620
return names
36163621

3617-
def _wrap_intersection_result(self, other, result):
3622+
def _wrap_intersection_result(self, other, result) -> MultiIndex:
36183623
_, result_names = self._convert_can_do_setop(other)
36193624

36203625
if len(result) == 0:
@@ -3627,7 +3632,7 @@ def _wrap_intersection_result(self, other, result):
36273632
else:
36283633
return MultiIndex.from_arrays(zip(*result), sortorder=0, names=result_names)
36293634

3630-
def _wrap_difference_result(self, other, result):
3635+
def _wrap_difference_result(self, other, result) -> MultiIndex:
36313636
_, result_names = self._convert_can_do_setop(other)
36323637

36333638
if len(result) == 0:
@@ -3738,7 +3743,7 @@ def delete(self, loc) -> MultiIndex:
37383743
)
37393744

37403745
@doc(Index.isin)
3741-
def isin(self, values, level=None) -> np.ndarray:
3746+
def isin(self, values, level=None) -> npt.NDArray[np.bool_]:
37423747
if level is None:
37433748
values = MultiIndex.from_tuples(values, names=self.names)._values
37443749
return algos.isin(self._values, values)

0 commit comments

Comments
 (0)