@@ -1051,7 +1051,7 @@ cdef _roll_min_max_variable(ndarray[numeric] values,
1051
1051
bint is_max):
1052
1052
cdef:
1053
1053
numeric ai
1054
- int64_t i, close_offset, curr_win_size
1054
+ int64_t i, k, close_offset, curr_win_size
1055
1055
Py_ssize_t nobs = 0 , N = len (values)
1056
1056
deque Q[int64_t] # min/max always the front
1057
1057
deque W[int64_t] # track the whole window for nobs compute
@@ -1088,12 +1088,14 @@ cdef _roll_min_max_variable(ndarray[numeric] values,
1088
1088
# first window's size
1089
1089
curr_win_size = endi[0 ] - starti[0 ]
1090
1090
1091
+ k = 0
1091
1092
for i in range (endi[0 ], endi[N- 1 ]):
1092
1093
if not Q.empty() and curr_win_size > 0 :
1093
- output[i - 1 + close_offset ] = calc_mm(
1094
+ output[k ] = calc_mm(
1094
1095
minp, nobs, values[Q.front()])
1095
1096
else :
1096
- output[i- 1 + close_offset] = NaN
1097
+ output[k] = NaN
1098
+ k += 1
1097
1099
1098
1100
ai = init_mm(values[i], & nobs, is_max)
1099
1101
@@ -1119,9 +1121,9 @@ cdef _roll_min_max_variable(ndarray[numeric] values,
1119
1121
W.push_back(i)
1120
1122
1121
1123
if not Q.empty() and curr_win_size > 0 :
1122
- output[N - 1 ] = calc_mm(minp, nobs, values[Q.front()])
1124
+ output[k ] = calc_mm(minp, nobs, values[Q.front()])
1123
1125
else :
1124
- output[N - 1 ] = NaN
1126
+ output[k ] = NaN
1125
1127
1126
1128
return output
1127
1129
0 commit comments