@@ -3224,8 +3224,8 @@ def convert_indexer(start, stop, step, indexer=indexer, codes=level_codes):
3224
3224
return convert_indexer (start , stop + 1 , step )
3225
3225
else :
3226
3226
# sorted, so can return slice object -> view
3227
- i = algos .searchsorted (level_codes , start , side = "left" )
3228
- j = algos .searchsorted (level_codes , stop , side = "right" )
3227
+ i = level_codes .searchsorted (start , side = "left" )
3228
+ j = level_codes .searchsorted (stop , side = "right" )
3229
3229
return slice (i , j , step )
3230
3230
3231
3231
else :
@@ -3248,12 +3248,12 @@ def convert_indexer(start, stop, step, indexer=indexer, codes=level_codes):
3248
3248
3249
3249
if isinstance (idx , slice ):
3250
3250
# e.g. test_partial_string_timestamp_multiindex
3251
- start = algos .searchsorted (level_codes , idx .start , side = "left" )
3251
+ start = level_codes .searchsorted (idx .start , side = "left" )
3252
3252
# NB: "left" here bc of slice semantics
3253
- end = algos .searchsorted (level_codes , idx .stop , side = "left" )
3253
+ end = level_codes .searchsorted (idx .stop , side = "left" )
3254
3254
else :
3255
- start = algos .searchsorted (level_codes , idx , side = "left" )
3256
- end = algos .searchsorted (level_codes , idx , side = "right" )
3255
+ start = level_codes .searchsorted (idx , side = "left" )
3256
+ end = level_codes .searchsorted (idx , side = "right" )
3257
3257
3258
3258
if start == end :
3259
3259
# The label is present in self.levels[level] but unused:
@@ -3304,10 +3304,10 @@ def get_locs(self, seq):
3304
3304
)
3305
3305
3306
3306
n = len (self )
3307
- # indexer is the list of all positions that we want to take; it
3308
- # is created on the first entry in seq and narrowed down as we
3309
- # look at remaining entries
3310
- indexer = None
3307
+ # indexer is the list of all positions that we want to take; we
3308
+ # start with it being everything and narrow it down as we look at each
3309
+ # entry in `seq`
3310
+ indexer = Index ( np . arange ( n ))
3311
3311
3312
3312
if any (x is Ellipsis for x in seq ):
3313
3313
raise NotImplementedError (
@@ -3330,9 +3330,7 @@ def _convert_to_indexer(r) -> Int64Index:
3330
3330
r = r .nonzero ()[0 ]
3331
3331
return Int64Index (r )
3332
3332
3333
- def _update_indexer (idxr : Index , indexer : Index | None ) -> Index :
3334
- if indexer is None :
3335
- return idxr
3333
+ def _update_indexer (idxr : Index , indexer : Index ) -> Index :
3336
3334
indexer_intersection = indexer .intersection (idxr )
3337
3335
if indexer_intersection .empty and not idxr .empty and not indexer .empty :
3338
3336
raise KeyError (seq )
@@ -3417,8 +3415,7 @@ def _update_indexer(idxr: Index, indexer: Index | None) -> Index:
3417
3415
3418
3416
elif com .is_null_slice (k ):
3419
3417
# empty slice
3420
- if indexer is None :
3421
- indexer = Index (np .arange (n ))
3418
+ pass
3422
3419
3423
3420
elif isinstance (k , slice ):
3424
3421
@@ -3611,6 +3608,10 @@ def equals(self, other: object) -> bool:
3611
3608
# i.e. ExtensionArray
3612
3609
if not self_values .equals (other_values ):
3613
3610
return False
3611
+ elif not isinstance (other_values , np .ndarray ):
3612
+ # i.e. other is ExtensionArray
3613
+ if not other_values .equals (self_values ):
3614
+ return False
3614
3615
else :
3615
3616
if not array_equivalent (self_values , other_values ):
3616
3617
return False
0 commit comments