@@ -259,11 +259,11 @@ cdef class IndexEngine:
259
259
self .monotonic_inc = 0
260
260
self .monotonic_dec = 0
261
261
262
- def get_indexer (self , values ):
262
+ def get_indexer (self , ndarray values ):
263
263
self ._ensure_mapping_populated()
264
264
return self .mapping.lookup(values)
265
265
266
- def get_indexer_non_unique (self , targets ):
266
+ def get_indexer_non_unique (self , ndarray targets ):
267
267
"""
268
268
Return an indexer suitable for taking from a non unique index
269
269
return the labels in the same order as the target
@@ -451,11 +451,11 @@ cdef class DatetimeEngine(Int64Engine):
451
451
except KeyError :
452
452
raise KeyError (val)
453
453
454
- def get_indexer_non_unique (self , targets ):
454
+ def get_indexer_non_unique (self , ndarray targets ):
455
455
# we may get datetime64[ns] or timedelta64[ns], cast these to int64
456
456
return super ().get_indexer_non_unique(targets.view(" i8" ))
457
457
458
- def get_indexer (self , values ):
458
+ def get_indexer (self , ndarray values ):
459
459
self ._ensure_mapping_populated()
460
460
if values.dtype != self ._get_box_dtype():
461
461
return np.repeat(- 1 , len (values)).astype(' i4' )
@@ -594,15 +594,15 @@ cdef class BaseMultiIndexCodesEngine:
594
594
in zip (self .levels, zip (* target))]
595
595
return self ._codes_to_ints(np.array(level_codes, dtype = ' uint64' ).T)
596
596
597
- def get_indexer_no_fill (self , object target ) -> np.ndarray:
597
+ def get_indexer (self , ndarray[ object] target ) -> np.ndarray:
598
598
"""
599
599
Returns an array giving the positions of each value of `target` in
600
600
`self.values`, where -1 represents a value in `target` which does not
601
601
appear in `self.values`
602
602
603
603
Parameters
604
604
----------
605
- target : list-like of keys
605
+ target : ndarray[object]
606
606
Each key is a tuple , with a label for each level of the index
607
607
608
608
Returns
@@ -613,8 +613,8 @@ cdef class BaseMultiIndexCodesEngine:
613
613
lab_ints = self ._extract_level_codes(target)
614
614
return self._base.get_indexer(self , lab_ints )
615
615
616
- def get_indexer (self , object target , object values = None ,
617
- object method = None , object limit = None ) -> np.ndarray:
616
+ def get_indexer_with_fill (self , ndarray target , ndarray values ,
617
+ str method , object limit ) -> np.ndarray:
618
618
"""
619
619
Returns an array giving the positions of each value of `target` in
620
620
`values`, where -1 represents a value in `target` which does not
@@ -630,25 +630,22 @@ cdef class BaseMultiIndexCodesEngine:
630
630
631
631
Parameters
632
632
----------
633
- target: list-like of tuples
633
+ target: ndarray[object] of tuples
634
634
need not be sorted , but all must have the same length , which must be
635
635
the same as the length of all tuples in `values`
636
- values : list-like of tuples
636
+ values : ndarray[object] of tuples
637
637
must be sorted and all have the same length. Should be the set of
638
638
the MultiIndex's values. Needed only if `method` is not None
639
639
method: string
640
640
"backfill" or "pad"
641
- limit: int , optional
641
+ limit: int or None
642
642
if provided , limit the number of fills to this value
643
643
644
644
Returns
645
645
-------
646
646
np.ndarray[int64_t , ndim = 1 ] of the indexer of `target` into `values`,
647
647
filled with the `method` (and optionally `limit`) specified
648
648
"""
649
- if method is None:
650
- return self.get_indexer_no_fill(target )
651
-
652
649
assert method in ("backfill", "pad")
653
650
cdef:
654
651
int64_t i , j , next_code
@@ -658,8 +655,8 @@ cdef class BaseMultiIndexCodesEngine:
658
655
ndarray[int64_t , ndim = 1 ] new_codes, new_target_codes
659
656
ndarray[int64_t , ndim = 1 ] sorted_indexer
660
657
661
- target_order = np.argsort(target.values ).astype(' int64' )
662
- target_values = target.values [target_order]
658
+ target_order = np.argsort(target).astype(' int64' )
659
+ target_values = target[target_order]
663
660
num_values , num_target_values = len (values), len(target_values )
664
661
new_codes , new_target_codes = (
665
662
np.empty((num_values,)).astype(' int64' ),
@@ -718,7 +715,7 @@ cdef class BaseMultiIndexCodesEngine:
718
715
719
716
return self ._base.get_loc(self , lab_int)
720
717
721
- def get_indexer_non_unique (self , object target ):
718
+ def get_indexer_non_unique (self , ndarray target ):
722
719
# This needs to be overridden just because the default one works on
723
720
# target._values, and target can be itself a MultiIndex.
724
721
0 commit comments