@@ -571,10 +571,10 @@ def _cleanup(self):
571
571
def _engine (self ):
572
572
# property, for now, slow to look up
573
573
574
- # to avoid a reference cycle, bind `_ndarray_values ` to a local variable, so
574
+ # to avoid a reference cycle, bind `target_values ` to a local variable, so
575
575
# `self` is not passed into the lambda.
576
- _ndarray_values = self ._ndarray_values
577
- return self ._engine_type (lambda : _ndarray_values , len (self ))
576
+ target_values = self ._get_engine_target ()
577
+ return self ._engine_type (lambda : target_values , len (self ))
578
578
579
579
# --------------------------------------------------------------------
580
580
# Array-Like Methods
@@ -2976,7 +2976,7 @@ def get_indexer(
2976
2976
"backfill or nearest reindexing"
2977
2977
)
2978
2978
2979
- indexer = self ._engine .get_indexer (target ._ndarray_values )
2979
+ indexer = self ._engine .get_indexer (target ._get_engine_target () )
2980
2980
2981
2981
return ensure_platform_int (indexer )
2982
2982
@@ -2990,19 +2990,20 @@ def _convert_tolerance(self, tolerance, target):
2990
2990
def _get_fill_indexer (
2991
2991
self , target : "Index" , method : str_t , limit = None , tolerance = None
2992
2992
) -> np .ndarray :
2993
+
2994
+ target_values = target ._get_engine_target ()
2995
+
2993
2996
if self .is_monotonic_increasing and target .is_monotonic_increasing :
2994
2997
engine_method = (
2995
2998
self ._engine .get_pad_indexer
2996
2999
if method == "pad"
2997
3000
else self ._engine .get_backfill_indexer
2998
3001
)
2999
- indexer = engine_method (target . _ndarray_values , limit )
3002
+ indexer = engine_method (target_values , limit )
3000
3003
else :
3001
3004
indexer = self ._get_fill_indexer_searchsorted (target , method , limit )
3002
3005
if tolerance is not None :
3003
- indexer = self ._filter_indexer_tolerance (
3004
- target ._ndarray_values , indexer , tolerance
3005
- )
3006
+ indexer = self ._filter_indexer_tolerance (target_values , indexer , tolerance )
3006
3007
return indexer
3007
3008
3008
3009
def _get_fill_indexer_searchsorted (
@@ -3915,6 +3916,12 @@ def _internal_get_values(self) -> np.ndarray:
3915
3916
"""
3916
3917
return self .values
3917
3918
3919
+ def _get_engine_target (self ) -> np .ndarray :
3920
+ """
3921
+ Get the ndarray that we can pass to the IndexEngine constructor.
3922
+ """
3923
+ return self ._values
3924
+
3918
3925
@Appender (IndexOpsMixin .memory_usage .__doc__ )
3919
3926
def memory_usage (self , deep : bool = False ) -> int :
3920
3927
result = super ().memory_usage (deep = deep )
@@ -4657,7 +4664,7 @@ def get_indexer_non_unique(self, target):
4657
4664
elif self .is_all_dates and target .is_all_dates : # GH 30399
4658
4665
tgt_values = target .asi8
4659
4666
else :
4660
- tgt_values = target ._ndarray_values
4667
+ tgt_values = target ._get_engine_target ()
4661
4668
4662
4669
indexer , missing = self ._engine .get_indexer_non_unique (tgt_values )
4663
4670
return ensure_platform_int (indexer ), missing
0 commit comments