@@ -606,45 +606,24 @@ def _parsed_string_to_bounds(self, reso: str, parsed: datetime):
606
606
iv = Period (parsed , freq = (grp , 1 ))
607
607
return (iv .asfreq (self .freq , how = "start" ), iv .asfreq (self .freq , how = "end" ))
608
608
609
- def _get_string_slice (self , key : str , use_lhs : bool = True , use_rhs : bool = True ):
610
- # TODO: Check for non-True use_lhs/use_rhs
611
- parsed , reso = parse_time_string (key , self .freq )
609
+ def _validate_partial_date_slice (self , reso : str ):
612
610
grp = resolution .Resolution .get_freq_group (reso )
613
611
freqn = resolution .get_freq_group (self .freq )
614
612
615
613
if not grp < freqn :
616
614
# TODO: we used to also check for
617
615
# reso in ["day", "hour", "minute", "second"]
618
616
# why is that check not needed?
619
- raise ValueError (key )
620
-
621
- t1 , t2 = self ._parsed_string_to_bounds (reso , parsed )
622
- i8vals = self .asi8
623
-
624
- if self .is_monotonic :
625
-
626
- # we are out of range
627
- if len (self ) and (
628
- (use_lhs and t1 < self [0 ] and t2 < self [0 ])
629
- or ((use_rhs and t1 > self [- 1 ] and t2 > self [- 1 ]))
630
- ):
631
- raise KeyError (key )
632
-
633
- # TODO: does this depend on being monotonic _increasing_?
634
- # If so, DTI will also be affected.
617
+ raise ValueError
635
618
636
- # a monotonic (sorted) series can be sliced
637
- # Use asi8.searchsorted to avoid re-validating Periods
638
- left = i8vals .searchsorted (t1 .ordinal , side = "left" ) if use_lhs else None
639
- right = i8vals .searchsorted (t2 .ordinal , side = "right" ) if use_rhs else None
640
- return slice (left , right )
641
-
642
- else :
643
- lhs_mask = (i8vals >= t1 .ordinal ) if use_lhs else True
644
- rhs_mask = (i8vals <= t2 .ordinal ) if use_rhs else True
619
+ def _get_string_slice (self , key : str , use_lhs : bool = True , use_rhs : bool = True ):
620
+ # TODO: Check for non-True use_lhs/use_rhs
621
+ parsed , reso = parse_time_string (key , self .freq )
645
622
646
- # try to find a the dates
647
- return (lhs_mask & rhs_mask ).nonzero ()[0 ]
623
+ try :
624
+ return self ._partial_date_slice (reso , parsed , use_lhs , use_rhs )
625
+ except KeyError :
626
+ raise KeyError (key )
648
627
649
628
def _convert_tolerance (self , tolerance , target ):
650
629
tolerance = DatetimeIndexOpsMixin ._convert_tolerance (self , tolerance , target )
0 commit comments