@@ -223,11 +223,12 @@ cdef class VariableWindowIndexer(WindowIndexer):
223
223
224
224
"""
225
225
def __init__ (self , ndarray input , int64_t win , int64_t minp ,
226
- bint left_closed , bint right_closed , ndarray index ):
226
+ bint left_closed , bint right_closed , ndarray index ,
227
+ object floor = None ):
227
228
228
229
self .is_variable = 1
229
230
self .N = len (index)
230
- self .minp = _check_minp(win, minp, self .N)
231
+ self .minp = _check_minp(win, minp, self .N, floor = floor )
231
232
232
233
self .start = np.empty(self .N, dtype = ' int64' )
233
234
self .start.fill(- 1 )
@@ -342,7 +343,7 @@ def get_window_indexer(input, win, minp, index, closed,
342
343
343
344
if index is not None :
344
345
indexer = VariableWindowIndexer(input , win, minp, left_closed,
345
- right_closed, index)
346
+ right_closed, index, floor = floor )
346
347
elif use_mock:
347
348
indexer = MockFixedWindowIndexer(input , win, minp, left_closed,
348
349
right_closed, index, floor)
@@ -409,11 +410,10 @@ def roll_count(ndarray[double_t] input, int64_t win, int64_t minp,
409
410
# Rolling sum
410
411
411
412
412
- cdef inline double calc_sum(int64_t minp, int64_t nobs, double sum_x,
413
- bint no_min = False ) nogil:
413
+ cdef inline double calc_sum(int64_t minp, int64_t nobs, double sum_x) nogil:
414
414
cdef double result
415
415
416
- if no_min or nobs >= minp:
416
+ if nobs >= minp:
417
417
result = sum_x
418
418
else :
419
419
result = NaN
@@ -444,17 +444,16 @@ def roll_sum(ndarray[double_t] input, int64_t win, int64_t minp,
444
444
double val, prev_x, sum_x = 0
445
445
int64_t s, e
446
446
int64_t nobs = 0 , i, j, N
447
- bint is_variable, no_min
447
+ bint is_variable
448
448
ndarray[int64_t] start, end
449
449
ndarray[double_t] output
450
450
451
- if minp == 0 :
452
- no_min = True
453
- else :
454
- no_min = False
451
+ print (' minp' , minp)
455
452
start, end, N, win, minp, is_variable = get_window_indexer(input , win,
456
453
minp, index,
457
- closed)
454
+ closed,
455
+ floor = 0 )
456
+ print (' minp' , minp)
458
457
output = np.empty(N, dtype = float )
459
458
460
459
# for performance we are going to iterate
@@ -488,27 +487,27 @@ def roll_sum(ndarray[double_t] input, int64_t win, int64_t minp,
488
487
for j in range (end[i - 1 ], e):
489
488
add_sum(input [j], & nobs, & sum_x)
490
489
491
- output[i] = calc_sum(minp, nobs, sum_x, no_min )
490
+ output[i] = calc_sum(minp, nobs, sum_x)
492
491
493
492
else :
494
493
495
494
# fixed window
496
495
497
496
with nogil:
498
497
499
- for i in range (0 , minp - 1 ):
498
+ for i in range (0 , min ( 1 , minp) - 1 ):
500
499
add_sum(input [i], & nobs, & sum_x)
501
500
output[i] = NaN
502
501
503
- for i in range (minp - 1 , N):
502
+ for i in range (min ( 1 , minp) - 1 , N):
504
503
val = input [i]
505
504
add_sum(val, & nobs, & sum_x)
506
505
507
506
if i > win - 1 :
508
507
prev_x = input [i - win]
509
508
remove_sum(prev_x, & nobs, & sum_x)
510
509
511
- output[i] = calc_sum(minp, nobs, sum_x, no_min )
510
+ output[i] = calc_sum(minp, nobs, sum_x)
512
511
513
512
return output
514
513
0 commit comments