@@ -328,7 +328,6 @@ class InvalidApply(Exception):
328
328
def apply_frame_axis0 (object frame , object f , object names ,
329
329
const int64_t[:] starts , const int64_t[:] ends ):
330
330
cdef:
331
- BlockSlider slider
332
331
Py_ssize_t i, n = len (starts)
333
332
list results
334
333
object piece
@@ -339,16 +338,13 @@ def apply_frame_axis0(object frame, object f, object names,
339
338
340
339
results = []
341
340
342
- slider = BlockSlider(frame)
343
-
344
341
mutated = False
345
- item_cache = slider.dummy ._item_cache
342
+ item_cache = frame ._item_cache
346
343
try :
347
344
for i in range (n):
348
- slider.move(starts[i], ends[i])
349
345
350
346
item_cache.clear() # ugh
351
- chunk = slider. frame[starts[i]:ends[i]]
347
+ chunk = frame[starts[i]:ends[i]]
352
348
object .__setattr__ (chunk, ' name' , names[i])
353
349
354
350
try :
@@ -381,81 +377,6 @@ def apply_frame_axis0(object frame, object f, object names,
381
377
if require_slow_apply:
382
378
break
383
379
finally :
384
- slider.reset()
380
+ pass
385
381
386
382
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