Skip to content

Commit d886f10

Browse files
authored
REF: pad/backfill out of IndexEngine (#43761)
1 parent 37d991c commit d886f10

File tree

4 files changed

+8
-67
lines changed

4 files changed

+8
-67
lines changed

pandas/_libs/index.pyi

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,6 @@ class IndexEngine:
1818
def is_monotonic_increasing(self) -> bool: ...
1919
@property
2020
def is_monotonic_decreasing(self) -> bool: ...
21-
def get_backfill_indexer(
22-
self, other: np.ndarray, limit: int | None = ...
23-
) -> npt.NDArray[np.intp]: ...
24-
def get_pad_indexer(
25-
self, other: np.ndarray, limit: int | None = ...
26-
) -> npt.NDArray[np.intp]: ...
2721
@property
2822
def is_mapping_populated(self) -> bool: ...
2923
def clear_mapping(self): ...

pandas/_libs/index.pyx

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -224,12 +224,6 @@ cdef class IndexEngine:
224224
cdef _call_monotonic(self, values):
225225
return algos.is_monotonic(values, timelike=False)
226226

227-
def get_backfill_indexer(self, other: np.ndarray, limit=None) -> np.ndarray:
228-
return algos.backfill(self.values, other, limit=limit)
229-
230-
def get_pad_indexer(self, other: np.ndarray, limit=None) -> np.ndarray:
231-
return algos.pad(self.values, other, limit=limit)
232-
233227
cdef _make_hash_table(self, Py_ssize_t n):
234228
raise NotImplementedError
235229

pandas/core/indexes/base.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3703,13 +3703,14 @@ def _get_fill_indexer(
37033703
)
37043704

37053705
if self.is_monotonic_increasing and target.is_monotonic_increasing:
3706-
engine_method = (
3707-
self._engine.get_pad_indexer
3708-
if method == "pad"
3709-
else self._engine.get_backfill_indexer
3710-
)
37113706
target_values = target._get_engine_target()
3712-
indexer = engine_method(target_values, limit)
3707+
own_values = self._get_engine_target()
3708+
3709+
if method == "pad":
3710+
indexer = libalgos.pad(own_values, target_values, limit=limit)
3711+
else:
3712+
# i.e. "backfill"
3713+
indexer = libalgos.backfill(own_values, target_values, limit=limit)
37133714
else:
37143715
indexer = self._get_fill_indexer_searchsorted(target, method, limit)
37153716
if tolerance is not None and len(self):

pandas/tests/indexes/test_engines.py

Lines changed: 1 addition & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,9 @@
33
import numpy as np
44
import pytest
55

6-
from pandas._libs import (
7-
algos as libalgos,
8-
index as libindex,
9-
)
6+
from pandas._libs import index as libindex
107

118
import pandas as pd
12-
import pandas._testing as tm
139

1410

1511
@pytest.fixture(
@@ -145,30 +141,6 @@ def test_get_loc(self, numeric_indexing_engine_type_and_dtype):
145141
result = engine.get_loc(2)
146142
assert (result == expected).all()
147143

148-
def test_get_backfill_indexer(self, numeric_indexing_engine_type_and_dtype):
149-
engine_type, dtype = numeric_indexing_engine_type_and_dtype
150-
151-
arr = np.array([1, 5, 10], dtype=dtype)
152-
engine = engine_type(arr)
153-
154-
new = np.arange(12, dtype=dtype)
155-
result = engine.get_backfill_indexer(new)
156-
157-
expected = libalgos.backfill(arr, new)
158-
tm.assert_numpy_array_equal(result, expected)
159-
160-
def test_get_pad_indexer(self, numeric_indexing_engine_type_and_dtype):
161-
engine_type, dtype = numeric_indexing_engine_type_and_dtype
162-
163-
arr = np.array([1, 5, 10], dtype=dtype)
164-
engine = engine_type(arr)
165-
166-
new = np.arange(12, dtype=dtype)
167-
result = engine.get_pad_indexer(new)
168-
169-
expected = libalgos.pad(arr, new)
170-
tm.assert_numpy_array_equal(result, expected)
171-
172144

173145
class TestObjectEngine:
174146
engine_type = libindex.ObjectEngine
@@ -225,23 +197,3 @@ def test_get_loc(self):
225197
expected = np.array([False, True, False] * num, dtype=bool)
226198
result = engine.get_loc("b")
227199
assert (result == expected).all()
228-
229-
def test_get_backfill_indexer(self):
230-
arr = np.array(["a", "e", "j"], dtype=self.dtype)
231-
engine = self.engine_type(arr)
232-
233-
new = np.array(list("abcdefghij"), dtype=self.dtype)
234-
result = engine.get_backfill_indexer(new)
235-
236-
expected = libalgos.backfill["object"](arr, new)
237-
tm.assert_numpy_array_equal(result, expected)
238-
239-
def test_get_pad_indexer(self):
240-
arr = np.array(["a", "e", "j"], dtype=self.dtype)
241-
engine = self.engine_type(arr)
242-
243-
new = np.array(list("abcdefghij"), dtype=self.dtype)
244-
result = engine.get_pad_indexer(new)
245-
246-
expected = libalgos.pad["object"](arr, new)
247-
tm.assert_numpy_array_equal(result, expected)

0 commit comments

Comments
 (0)