Skip to content

Commit abd3acf

Browse files
authored
CLN: clean Index._id (#37087)
1 parent f58de9f commit abd3acf

File tree

3 files changed

+18
-10
lines changed

3 files changed

+18
-10
lines changed

pandas/core/indexes/base.py

+13-8
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
FrozenSet,
1010
Hashable,
1111
List,
12+
NewType,
1213
Optional,
1314
Sequence,
1415
Tuple,
@@ -118,7 +119,9 @@
118119

119120

120121
_o_dtype = np.dtype(object)
121-
_Identity = object
122+
123+
124+
_Identity = NewType("_Identity", object)
122125

123126

124127
def _new_Index(cls, d):
@@ -217,7 +220,7 @@ def _outer_indexer(self, left, right):
217220

218221
_typ = "index"
219222
_data: Union[ExtensionArray, np.ndarray]
220-
_id = None
223+
_id: _Identity
221224
_name: Label = None
222225
# MultiIndex.levels previously allowed setting the index name. We
223226
# don't allow this anymore, and raise if it happens rather than
@@ -432,8 +435,9 @@ def _simple_new(cls, values, name: Label = None):
432435
result._index_data = values
433436
result._name = name
434437
result._cache = {}
438+
result._reset_identity()
435439

436-
return result._reset_identity()
440+
return result
437441

438442
@cache_readonly
439443
def _constructor(self):
@@ -537,15 +541,16 @@ def is_(self, other) -> bool:
537541
--------
538542
Index.identical : Works like ``Index.is_`` but also checks metadata.
539543
"""
540-
# use something other than None to be clearer
541-
return self._id is getattr(other, "_id", Ellipsis) and self._id is not None
544+
try:
545+
return self._id is other._id
546+
except AttributeError:
547+
return False
542548

543-
def _reset_identity(self):
549+
def _reset_identity(self) -> None:
544550
"""
545551
Initializes or resets ``_id`` attribute with new object.
546552
"""
547-
self._id = _Identity()
548-
return self
553+
self._id = _Identity(object())
549554

550555
def _cleanup(self):
551556
self._engine.clear_mapping()

pandas/core/indexes/multi.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,9 @@ def __new__(
316316
new_codes = result._verify_integrity()
317317
result._codes = new_codes
318318

319-
return result._reset_identity()
319+
result._reset_identity()
320+
321+
return result
320322

321323
def _validate_codes(self, level: List, code: List):
322324
"""

pandas/tests/arithmetic/test_object.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -343,8 +343,9 @@ def _simple_new(cls, values, name=None, dtype=None):
343343
result._index_data = values
344344
result._name = name
345345
result._calls = 0
346+
result._reset_identity()
346347

347-
return result._reset_identity()
348+
return result
348349

349350
def __add__(self, other):
350351
self._calls += 1

0 commit comments

Comments
 (0)