@@ -468,6 +468,10 @@ def get_indexer(self, target, method=None, limit=None, tolerance=None):
468
468
469
469
if tolerance is not None :
470
470
tolerance = self ._convert_tolerance (tolerance , target )
471
+ if self_index is not self :
472
+ # convert tolerance to i8
473
+ tolerance = self ._maybe_convert_timedelta (tolerance )
474
+
471
475
return Index .get_indexer (self_index , target , method , limit , tolerance )
472
476
473
477
@Appender (_index_shared_docs ["get_indexer_non_unique" ] % _index_doc_kwargs )
@@ -504,6 +508,7 @@ def get_loc(self, key, method=None, tolerance=None):
504
508
TypeError
505
509
If key is listlike or otherwise not hashable.
506
510
"""
511
+ orig_key = key
507
512
508
513
if not is_scalar (key ):
509
514
raise InvalidIndexError (key )
@@ -545,20 +550,12 @@ def get_loc(self, key, method=None, tolerance=None):
545
550
key = Period (key , freq = self .freq )
546
551
except ValueError :
547
552
# we cannot construct the Period
548
- raise KeyError (key )
553
+ raise KeyError (orig_key )
549
554
550
- ordinal = self ._data ._unbox_scalar (key )
551
555
try :
552
- return self . _engine . get_loc (ordinal )
556
+ return Index . get_loc (self , key , method , tolerance )
553
557
except KeyError :
554
-
555
- try :
556
- if tolerance is not None :
557
- tolerance = self ._convert_tolerance (tolerance , np .asarray (key ))
558
- return self ._int64index .get_loc (ordinal , method , tolerance )
559
-
560
- except KeyError :
561
- raise KeyError (key )
558
+ raise KeyError (orig_key )
562
559
563
560
def _maybe_cast_slice_bound (self , label , side : str , kind : str ):
564
561
"""
@@ -625,12 +622,6 @@ def _get_string_slice(self, key: str, use_lhs: bool = True, use_rhs: bool = True
625
622
except KeyError :
626
623
raise KeyError (key )
627
624
628
- def _convert_tolerance (self , tolerance , target ):
629
- tolerance = DatetimeIndexOpsMixin ._convert_tolerance (self , tolerance , target )
630
- if target .size != tolerance .size and tolerance .size > 1 :
631
- raise ValueError ("list-like tolerance size must match target index size" )
632
- return self ._maybe_convert_timedelta (tolerance )
633
-
634
625
def insert (self , loc , item ):
635
626
if not isinstance (item , Period ) or self .freq != item .freq :
636
627
return self .astype (object ).insert (loc , item )
0 commit comments