Skip to content

Commit 466b855

Browse files
rhshadrachluckyvs1
authored andcommitted
REF/TYP: Rename ABCIndexClass->ABCIndex and use cast (pandas-dev#38329)
1 parent 6f6f39f commit 466b855

30 files changed

+111
-125
lines changed

pandas/core/algorithms.py

+9-7
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
from pandas.core.dtypes.generic import (
5151
ABCDatetimeArray,
5252
ABCExtensionArray,
53-
ABCIndexClass,
53+
ABCIndex,
5454
ABCMultiIndex,
5555
ABCRangeIndex,
5656
ABCSeries,
@@ -63,6 +63,7 @@
6363

6464
if TYPE_CHECKING:
6565
from pandas import Categorical, DataFrame, Index, Series
66+
from pandas.core.arrays import DatetimeArray, TimedeltaArray
6667

6768
_shared_docs: Dict[str, str] = {}
6869

@@ -215,7 +216,7 @@ def _reconstruct_data(
215216
values = values.astype(dtype, copy=False)
216217

217218
# we only support object dtypes bool Index
218-
if isinstance(original, ABCIndexClass):
219+
if isinstance(original, ABCIndex):
219220
values = values.astype(object, copy=False)
220221
elif dtype is not None:
221222
if is_datetime64_dtype(dtype):
@@ -437,9 +438,7 @@ def isin(comps: AnyArrayLike, values: AnyArrayLike) -> np.ndarray:
437438
f"to isin(), you passed a [{type(values).__name__}]"
438439
)
439440

440-
if not isinstance(
441-
values, (ABCIndexClass, ABCSeries, ABCExtensionArray, np.ndarray)
442-
):
441+
if not isinstance(values, (ABCIndex, ABCSeries, ABCExtensionArray, np.ndarray)):
443442
values = _ensure_arraylike(list(values))
444443
elif isinstance(values, ABCMultiIndex):
445444
# Avoid raising in extract_array
@@ -700,7 +699,7 @@ def factorize(
700699
and values.freq is not None
701700
):
702701
codes, uniques = values.factorize(sort=sort)
703-
if isinstance(original, ABCIndexClass):
702+
if isinstance(original, ABCIndex):
704703
uniques = original._shallow_copy(uniques, name=None)
705704
elif isinstance(original, ABCSeries):
706705
from pandas import Index
@@ -739,8 +738,11 @@ def factorize(
739738
uniques = _reconstruct_data(uniques, dtype, original)
740739

741740
# return original tenor
742-
if isinstance(original, ABCIndexClass):
741+
if isinstance(original, ABCIndex):
743742
if original.dtype.kind in ["m", "M"] and isinstance(uniques, np.ndarray):
743+
original._data = cast(
744+
"Union[DatetimeArray, TimedeltaArray]", original._data
745+
)
744746
uniques = type(original._data)._simple_new(uniques, dtype=original.dtype)
745747
uniques = original._shallow_copy(uniques, name=None)
746748
elif isinstance(original, ABCSeries):

pandas/core/arrays/base.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
pandas_dtype,
4242
)
4343
from pandas.core.dtypes.dtypes import ExtensionDtype
44-
from pandas.core.dtypes.generic import ABCDataFrame, ABCIndexClass, ABCSeries
44+
from pandas.core.dtypes.generic import ABCDataFrame, ABCIndex, ABCSeries
4545
from pandas.core.dtypes.missing import isna
4646

4747
from pandas.core import ops
@@ -1361,7 +1361,7 @@ def convert_values(param):
13611361
ovalues = [param] * len(self)
13621362
return ovalues
13631363

1364-
if isinstance(other, (ABCSeries, ABCIndexClass, ABCDataFrame)):
1364+
if isinstance(other, (ABCSeries, ABCIndex, ABCDataFrame)):
13651365
# rely on pandas to unbox and dispatch to us
13661366
return NotImplemented
13671367

pandas/core/arrays/categorical.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
needs_i8_conversion,
3939
)
4040
from pandas.core.dtypes.dtypes import CategoricalDtype
41-
from pandas.core.dtypes.generic import ABCIndexClass, ABCSeries
41+
from pandas.core.dtypes.generic import ABCIndex, ABCSeries
4242
from pandas.core.dtypes.missing import is_valid_nat_for_dtype, isna, notna
4343

4444
from pandas.core import ops
@@ -321,7 +321,7 @@ def __init__(
321321
if is_categorical_dtype(values):
322322
if dtype.categories is None:
323323
dtype = CategoricalDtype(values.categories, dtype.ordered)
324-
elif not isinstance(values, (ABCIndexClass, ABCSeries)):
324+
elif not isinstance(values, (ABCIndex, ABCSeries)):
325325
# sanitize_array coerces np.nan to a string under certain versions
326326
# of numpy
327327
values = maybe_infer_to_datetimelike(values, convert_dates=True)
@@ -2514,7 +2514,7 @@ def _get_codes_for_values(values, categories) -> np.ndarray:
25142514
values = ensure_object(values)
25152515
categories = ensure_object(categories)
25162516

2517-
if isinstance(categories, ABCIndexClass):
2517+
if isinstance(categories, ABCIndex):
25182518
return coerce_indexer_dtype(categories.get_indexer_for(values), categories)
25192519

25202520
# Only hit here when we've already coerced to object dtypee.

pandas/core/arrays/datetimes.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
pandas_dtype,
4545
)
4646
from pandas.core.dtypes.dtypes import DatetimeTZDtype
47-
from pandas.core.dtypes.generic import ABCIndexClass, ABCPandasArray, ABCSeries
47+
from pandas.core.dtypes.generic import ABCIndex, ABCPandasArray, ABCSeries
4848
from pandas.core.dtypes.missing import isna
4949

5050
from pandas.core.algorithms import checked_add_with_arr
@@ -216,7 +216,7 @@ class DatetimeArray(dtl.TimelikeOps, dtl.DatelikeOps):
216216
_freq = None
217217

218218
def __init__(self, values, dtype=DT64NS_DTYPE, freq=None, copy=False):
219-
if isinstance(values, (ABCSeries, ABCIndexClass)):
219+
if isinstance(values, (ABCSeries, ABCIndex)):
220220
values = values._values
221221

222222
inferred_freq = getattr(values, "_freq", None)
@@ -1947,7 +1947,7 @@ def sequence_to_dt64ns(
19471947
# if dtype has an embedded tz, capture it
19481948
tz = validate_tz_from_dtype(dtype, tz)
19491949

1950-
if isinstance(data, ABCIndexClass):
1950+
if isinstance(data, ABCIndex):
19511951
if data.nlevels > 1:
19521952
# Without this check, data._data below is None
19531953
raise TypeError("Cannot create a DatetimeArray from a MultiIndex.")

pandas/core/arrays/period.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
)
4141
from pandas.core.dtypes.dtypes import PeriodDtype
4242
from pandas.core.dtypes.generic import (
43-
ABCIndexClass,
43+
ABCIndex,
4444
ABCPeriodIndex,
4545
ABCSeries,
4646
ABCTimedeltaArray,
@@ -964,14 +964,14 @@ def dt64arr_to_periodarr(data, freq, tz=None):
964964
raise ValueError(f"Wrong dtype: {data.dtype}")
965965

966966
if freq is None:
967-
if isinstance(data, ABCIndexClass):
967+
if isinstance(data, ABCIndex):
968968
data, freq = data._values, data.freq
969969
elif isinstance(data, ABCSeries):
970970
data, freq = data._values, data.dt.freq
971971

972972
freq = Period._maybe_convert_freq(freq)
973973

974-
if isinstance(data, (ABCIndexClass, ABCSeries)):
974+
if isinstance(data, (ABCIndex, ABCSeries)):
975975
data = data._values
976976

977977
base = freq._period_dtype_code

pandas/core/arrays/sparse/array.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
is_string_dtype,
3636
pandas_dtype,
3737
)
38-
from pandas.core.dtypes.generic import ABCIndexClass, ABCSeries
38+
from pandas.core.dtypes.generic import ABCIndex, ABCSeries
3939
from pandas.core.dtypes.missing import isna, na_value_for_dtype, notna
4040

4141
import pandas.core.algorithms as algos
@@ -746,7 +746,7 @@ def value_counts(self, dropna=True):
746746
keys = np.insert(keys, 0, self.fill_value)
747747
counts = np.insert(counts, 0, fcounts)
748748

749-
if not isinstance(keys, ABCIndexClass):
749+
if not isinstance(keys, ABCIndex):
750750
keys = Index(keys)
751751
return Series(counts, index=keys)
752752

pandas/core/base.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
is_object_dtype,
3333
is_scalar,
3434
)
35-
from pandas.core.dtypes.generic import ABCDataFrame, ABCIndexClass, ABCSeries
35+
from pandas.core.dtypes.generic import ABCDataFrame, ABCIndex, ABCSeries
3636
from pandas.core.dtypes.missing import isna, remove_na_arraylike
3737

3838
from pandas.core import algorithms
@@ -199,7 +199,7 @@ def _selection_name(self):
199199
@property
200200
def _selection_list(self):
201201
if not isinstance(
202-
self._selection, (list, tuple, ABCSeries, ABCIndexClass, np.ndarray)
202+
self._selection, (list, tuple, ABCSeries, ABCIndex, np.ndarray)
203203
):
204204
return [self._selection]
205205
return self._selection
@@ -254,7 +254,7 @@ def __getitem__(self, key):
254254
if self._selection is not None:
255255
raise IndexError(f"Column(s) {self._selection} already selected")
256256

257-
if isinstance(key, (list, tuple, ABCSeries, ABCIndexClass, np.ndarray)):
257+
if isinstance(key, (list, tuple, ABCSeries, ABCIndex, np.ndarray)):
258258
# pandas\core\base.py:217: error: "SelectionMixin" has no attribute
259259
# "obj" [attr-defined]
260260
if len(

pandas/core/common.py

+4-6
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
is_extension_array_dtype,
2525
is_integer,
2626
)
27-
from pandas.core.dtypes.generic import ABCExtensionArray, ABCIndexClass, ABCSeries
27+
from pandas.core.dtypes.generic import ABCExtensionArray, ABCIndex, ABCSeries
2828
from pandas.core.dtypes.inference import iterable_not_string
2929
from pandas.core.dtypes.missing import isna, isnull, notnull # noqa
3030

@@ -100,7 +100,7 @@ def is_bool_indexer(key: Any) -> bool:
100100
check_array_indexer : Check that `key` is a valid array to index,
101101
and convert to an ndarray.
102102
"""
103-
if isinstance(key, (ABCSeries, np.ndarray, ABCIndexClass)) or (
103+
if isinstance(key, (ABCSeries, np.ndarray, ABCIndex)) or (
104104
is_array_like(key) and is_extension_array_dtype(key.dtype)
105105
):
106106
if key.dtype == np.object_:
@@ -199,7 +199,7 @@ def asarray_tuplesafe(values, dtype=None):
199199

200200
if not (isinstance(values, (list, tuple)) or hasattr(values, "__array__")):
201201
values = list(values)
202-
elif isinstance(values, ABCIndexClass):
202+
elif isinstance(values, ABCIndex):
203203
return values._values
204204

205205
if isinstance(values, list) and dtype in [np.object_, object]:
@@ -466,9 +466,7 @@ def convert_to_list_like(
466466
Convert list-like or scalar input to list-like. List, numpy and pandas array-like
467467
inputs are returned unmodified whereas others are converted to list.
468468
"""
469-
if isinstance(
470-
values, (list, np.ndarray, ABCIndexClass, ABCSeries, ABCExtensionArray)
471-
):
469+
if isinstance(values, (list, np.ndarray, ABCIndex, ABCSeries, ABCExtensionArray)):
472470
# np.ndarray resolving as Any gives a false positive
473471
return values # type: ignore[return-value]
474472
elif isinstance(values, abc.Iterable) and not isinstance(values, str):

pandas/core/construction.py

+3-5
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
)
4242
from pandas.core.dtypes.generic import (
4343
ABCExtensionArray,
44-
ABCIndexClass,
44+
ABCIndex,
4545
ABCPandasArray,
4646
ABCSeries,
4747
)
@@ -281,9 +281,7 @@ def array(
281281
msg = f"Cannot pass scalar '{data}' to 'pandas.array'."
282282
raise ValueError(msg)
283283

284-
if dtype is None and isinstance(
285-
data, (ABCSeries, ABCIndexClass, ABCExtensionArray)
286-
):
284+
if dtype is None and isinstance(data, (ABCSeries, ABCIndex, ABCExtensionArray)):
287285
dtype = data.dtype
288286

289287
data = extract_array(data, extract_numpy=True)
@@ -392,7 +390,7 @@ def extract_array(obj: object, extract_numpy: bool = False) -> Union[Any, ArrayL
392390
>>> extract_array(pd.Series([1, 2, 3]), extract_numpy=True)
393391
array([1, 2, 3])
394392
"""
395-
if isinstance(obj, (ABCIndexClass, ABCSeries)):
393+
if isinstance(obj, (ABCIndex, ABCSeries)):
396394
obj = obj.array
397395

398396
if extract_numpy and isinstance(obj, ABCPandasArray):

pandas/core/dtypes/base.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from pandas._typing import DtypeObj
1010
from pandas.errors import AbstractMethodError
1111

12-
from pandas.core.dtypes.generic import ABCDataFrame, ABCIndexClass, ABCSeries
12+
from pandas.core.dtypes.generic import ABCDataFrame, ABCIndex, ABCSeries
1313

1414
if TYPE_CHECKING:
1515
from pandas.core.arrays import ExtensionArray
@@ -277,7 +277,7 @@ def is_dtype(cls, dtype: object) -> bool:
277277
"""
278278
dtype = getattr(dtype, "dtype", dtype)
279279

280-
if isinstance(dtype, (ABCSeries, ABCIndexClass, ABCDataFrame, np.dtype)):
280+
if isinstance(dtype, (ABCSeries, ABCIndex, ABCDataFrame, np.dtype)):
281281
# https://github.com/pandas-dev/pandas/issues/22960
282282
# avoid passing data to `construct_from_string`. This could
283283
# cause a FutureWarning from numpy about failing elementwise

pandas/core/dtypes/common.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
IntervalDtype,
2020
PeriodDtype,
2121
)
22-
from pandas.core.dtypes.generic import ABCCategorical, ABCIndexClass
22+
from pandas.core.dtypes.generic import ABCCategorical, ABCIndex
2323
from pandas.core.dtypes.inference import ( # noqa:F401
2424
is_array_like,
2525
is_bool,
@@ -1389,7 +1389,7 @@ def is_bool_dtype(arr_or_dtype) -> bool:
13891389
arr_or_dtype = arr_or_dtype.categories
13901390
# now we use the special definition for Index
13911391

1392-
if isinstance(arr_or_dtype, ABCIndexClass):
1392+
if isinstance(arr_or_dtype, ABCIndex):
13931393

13941394
# TODO(jreback)
13951395
# we don't have a boolean Index class

pandas/core/dtypes/dtypes.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
from pandas._typing import DtypeObj, Ordered
2626

2727
from pandas.core.dtypes.base import ExtensionDtype, register_extension_dtype
28-
from pandas.core.dtypes.generic import ABCCategoricalIndex, ABCIndexClass
28+
from pandas.core.dtypes.generic import ABCCategoricalIndex, ABCIndex
2929
from pandas.core.dtypes.inference import is_bool, is_list_like
3030

3131
if TYPE_CHECKING:
@@ -499,7 +499,7 @@ def validate_categories(categories, fastpath: bool = False):
499499
raise TypeError(
500500
f"Parameter 'categories' must be list-like, was {repr(categories)}"
501501
)
502-
elif not isinstance(categories, ABCIndexClass):
502+
elif not isinstance(categories, ABCIndex):
503503
categories = Index(categories, tupleize_cols=False)
504504

505505
if not fastpath:

pandas/core/dtypes/generic.py

+21-16
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
DataFrame,
1010
DatetimeIndex,
1111
Float64Index,
12+
Index,
1213
Int64Index,
1314
IntervalIndex,
1415
MultiIndex,
@@ -76,24 +77,28 @@ def _check(cls, inst) -> bool:
7677
"Type[IntervalIndex]",
7778
create_pandas_abc_type("ABCIntervalIndex", "_typ", ("intervalindex",)),
7879
)
79-
ABCIndexClass = create_pandas_abc_type(
80-
"ABCIndexClass",
81-
"_typ",
82-
{
83-
"index",
84-
"int64index",
85-
"rangeindex",
86-
"float64index",
87-
"uint64index",
88-
"multiindex",
89-
"datetimeindex",
90-
"timedeltaindex",
91-
"periodindex",
92-
"categoricalindex",
93-
"intervalindex",
94-
},
80+
ABCIndex = cast(
81+
"Type[Index]",
82+
create_pandas_abc_type(
83+
"ABCIndex",
84+
"_typ",
85+
{
86+
"index",
87+
"int64index",
88+
"rangeindex",
89+
"float64index",
90+
"uint64index",
91+
"multiindex",
92+
"datetimeindex",
93+
"timedeltaindex",
94+
"periodindex",
95+
"categoricalindex",
96+
"intervalindex",
97+
},
98+
),
9599
)
96100

101+
97102
ABCNDFrame = cast(
98103
"Type[NDFrame]",
99104
create_pandas_abc_type("ABCNDFrame", "_typ", ("series", "dataframe")),

pandas/core/dtypes/missing.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
from pandas.core.dtypes.generic import (
3535
ABCDataFrame,
3636
ABCExtensionArray,
37-
ABCIndexClass,
37+
ABCIndex,
3838
ABCMultiIndex,
3939
ABCSeries,
4040
)
@@ -156,7 +156,7 @@ def _isna(obj, inf_as_na: bool = False):
156156
raise NotImplementedError("isna is not defined for MultiIndex")
157157
elif isinstance(obj, type):
158158
return False
159-
elif isinstance(obj, (ABCSeries, np.ndarray, ABCIndexClass, ABCExtensionArray)):
159+
elif isinstance(obj, (ABCSeries, np.ndarray, ABCIndex, ABCExtensionArray)):
160160
return _isna_ndarraylike(obj, inf_as_na=inf_as_na)
161161
elif isinstance(obj, ABCDataFrame):
162162
return obj.isna()

0 commit comments

Comments
 (0)