Skip to content

Commit 2c17e72

Browse files
committed
Remove BlockSlider
1 parent bce72ac commit 2c17e72

File tree

1 file changed

+3
-82
lines changed

1 file changed

+3
-82
lines changed

pandas/_libs/reduction.pyx

+3-82
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,6 @@ class InvalidApply(Exception):
328328
def apply_frame_axis0(object frame, object f, object names,
329329
const int64_t[:] starts, const int64_t[:] ends):
330330
cdef:
331-
BlockSlider slider
332331
Py_ssize_t i, n = len(starts)
333332
list results
334333
object piece
@@ -339,16 +338,13 @@ def apply_frame_axis0(object frame, object f, object names,
339338

340339
results = []
341340

342-
slider = BlockSlider(frame)
343-
344341
mutated = False
345-
item_cache = slider.dummy._item_cache
342+
item_cache = frame._item_cache
346343
try:
347344
for i in range(n):
348-
slider.move(starts[i], ends[i])
349345

350346
item_cache.clear() # ugh
351-
chunk = slider.frame[starts[i]:ends[i]]
347+
chunk = frame[starts[i]:ends[i]]
352348
object.__setattr__(chunk, 'name', names[i])
353349

354350
try:
@@ -381,81 +377,6 @@ def apply_frame_axis0(object frame, object f, object names,
381377
if require_slow_apply:
382378
break
383379
finally:
384-
slider.reset()
380+
pass
385381

386382
return results, mutated
387-
388-
389-
cdef class BlockSlider:
390-
"""
391-
Only capable of sliding on axis=0
392-
"""
393-
394-
cdef public:
395-
object frame, dummy, index
396-
int nblocks
397-
Slider idx_slider
398-
list blocks
399-
400-
cdef:
401-
char **base_ptrs
402-
403-
def __init__(self, object frame):
404-
cdef:
405-
Py_ssize_t i
406-
object b
407-
408-
self.frame = frame
409-
self.dummy = frame[:0]
410-
self.index = self.dummy.index
411-
412-
self.blocks = [b.values for b in self.dummy._mgr.blocks]
413-
414-
for x in self.blocks:
415-
util.set_array_not_contiguous(x)
416-
417-
self.nblocks = len(self.blocks)
418-
# See the comment in indexes/base.py about _index_data.
419-
# We need this for EA-backed indexes that have a reference to a 1-d
420-
# ndarray like datetime / timedelta / period.
421-
self.idx_slider = Slider(
422-
self.frame.index._index_data, self.dummy.index._index_data)
423-
424-
self.base_ptrs = <char**>malloc(sizeof(char*) * len(self.blocks))
425-
for i, block in enumerate(self.blocks):
426-
self.base_ptrs[i] = (<ndarray>block).data
427-
428-
def __dealloc__(self):
429-
free(self.base_ptrs)
430-
431-
cdef move(self, int start, int end):
432-
cdef:
433-
ndarray arr
434-
Py_ssize_t i
435-
436-
# move blocks
437-
for i in range(self.nblocks):
438-
arr = self.blocks[i]
439-
440-
# axis=1 is the frame's axis=0
441-
arr.data = self.base_ptrs[i] + arr.strides[1] * start
442-
arr.shape[1] = end - start
443-
444-
# move and set the index
445-
self.idx_slider.move(start, end)
446-
447-
object.__setattr__(self.index, '_index_data', self.idx_slider.buf)
448-
self.index._engine.clear_mapping()
449-
450-
cdef reset(self):
451-
cdef:
452-
ndarray arr
453-
Py_ssize_t i
454-
455-
# reset blocks
456-
for i in range(self.nblocks):
457-
arr = self.blocks[i]
458-
459-
# axis=1 is the frame's axis=0
460-
arr.data = self.base_ptrs[i]
461-
arr.shape[1] = 0

0 commit comments

Comments
 (0)