From 8739da308de3dba501c424b868aca96c30a8f091 Mon Sep 17 00:00:00 2001 From: Brock Date: Mon, 29 Mar 2021 20:34:10 -0700 Subject: [PATCH 1/2] REF: de-duplicate pad/backfill code --- pandas/_libs/algos.pyx | 58 ++---------------------------------------- 1 file changed, 2 insertions(+), 56 deletions(-) diff --git a/pandas/_libs/algos.pyx b/pandas/_libs/algos.pyx index a4bc2443e0eeb..d956d5bc86462 100644 --- a/pandas/_libs/algos.pyx +++ b/pandas/_libs/algos.pyx @@ -794,68 +794,14 @@ def backfill(ndarray[algos_t] old, ndarray[algos_t] new, limit=None) -> ndarray: return indexer -@cython.boundscheck(False) -@cython.wraparound(False) def backfill_inplace(algos_t[:] values, uint8_t[:] mask, limit=None): - cdef: - Py_ssize_t i, N - algos_t val - uint8_t prev_mask - int lim, fill_count = 0 - - N = len(values) - - # GH#2778 - if N == 0: - return - - lim = validate_limit(N, limit) - - val = values[N - 1] - prev_mask = mask[N - 1] - for i in range(N - 1, -1, -1): - if mask[i]: - if fill_count >= lim: - continue - fill_count += 1 - values[i] = val - mask[i] = prev_mask - else: - fill_count = 0 - val = values[i] - prev_mask = mask[i] + return pad_inplace(values[::-1], mask[::-1], limit=limit) -@cython.boundscheck(False) -@cython.wraparound(False) def backfill_2d_inplace(algos_t[:, :] values, const uint8_t[:, :] mask, limit=None): - cdef: - Py_ssize_t i, j, N, K - algos_t val - int lim, fill_count = 0 - - K, N = (values).shape - - # GH#2778 - if N == 0: - return - - lim = validate_limit(N, limit) - - for j in range(K): - fill_count = 0 - val = values[j, N - 1] - for i in range(N - 1, -1, -1): - if mask[j, i]: - if fill_count >= lim: - continue - fill_count += 1 - values[j, i] = val - else: - fill_count = 0 - val = values[j, i] + return pad_2d_inplace(values[:, ::-1], mask[:, ::-1], limit) @cython.boundscheck(False) From c27342c5ebdfd16492b93ad106cf7aa5f5a22a6a Mon Sep 17 00:00:00 2001 From: Brock Date: Tue, 30 Mar 2021 14:26:32 -0700 Subject: [PATCH 2/2] remove unnessarty return statements --- pandas/_libs/algos.pyx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pandas/_libs/algos.pyx b/pandas/_libs/algos.pyx index d956d5bc86462..0c17e8c3f8c19 100644 --- a/pandas/_libs/algos.pyx +++ b/pandas/_libs/algos.pyx @@ -795,13 +795,13 @@ def backfill(ndarray[algos_t] old, ndarray[algos_t] new, limit=None) -> ndarray: def backfill_inplace(algos_t[:] values, uint8_t[:] mask, limit=None): - return pad_inplace(values[::-1], mask[::-1], limit=limit) + pad_inplace(values[::-1], mask[::-1], limit=limit) def backfill_2d_inplace(algos_t[:, :] values, const uint8_t[:, :] mask, limit=None): - return pad_2d_inplace(values[:, ::-1], mask[:, ::-1], limit) + pad_2d_inplace(values[:, ::-1], mask[:, ::-1], limit) @cython.boundscheck(False)