@@ -354,7 +354,7 @@ cdef class IndexEngine:
354
354
dict d = {}
355
355
object val
356
356
Py_ssize_t count = 0 , count_missing = 0
357
- Py_ssize_t i, j, n, n_t, n_alloc, start, end
357
+ Py_ssize_t i, j, n, n_t, n_alloc, max_alloc, start, end
358
358
bint check_na_values = False
359
359
360
360
values = self .values
@@ -364,6 +364,7 @@ cdef class IndexEngine:
364
364
365
365
n = len (values)
366
366
n_t = len (targets)
367
+ max_alloc = n * n_t
367
368
if n > 10 _000:
368
369
n_alloc = 10 _000
369
370
else :
@@ -453,7 +454,9 @@ cdef class IndexEngine:
453
454
454
455
# realloc if needed
455
456
if count >= n_alloc:
456
- n_alloc += 10 _000
457
+ n_alloc *= 2
458
+ if n_alloc > max_alloc:
459
+ n_alloc = max_alloc
457
460
result = np.resize(result, n_alloc)
458
461
459
462
result[count] = j
@@ -463,7 +466,9 @@ cdef class IndexEngine:
463
466
else :
464
467
465
468
if count >= n_alloc:
466
- n_alloc += 10 _000
469
+ n_alloc *= 2
470
+ if n_alloc > max_alloc:
471
+ n_alloc = max_alloc
467
472
result = np.resize(result, n_alloc)
468
473
result[count] = - 1
469
474
count += 1
@@ -1211,7 +1216,7 @@ cdef class MaskedIndexEngine(IndexEngine):
1211
1216
dict d = {}
1212
1217
object val
1213
1218
Py_ssize_t count = 0 , count_missing = 0
1214
- Py_ssize_t i, j, n, n_t, n_alloc, start, end, na_idx
1219
+ Py_ssize_t i, j, n, n_t, n_alloc, max_alloc, start, end, na_idx
1215
1220
1216
1221
target_vals = self ._get_data(targets)
1217
1222
target_mask = self ._get_mask(targets)
@@ -1224,6 +1229,7 @@ cdef class MaskedIndexEngine(IndexEngine):
1224
1229
1225
1230
n = len (values)
1226
1231
n_t = len (target_vals)
1232
+ max_alloc = n * n_t
1227
1233
if n > 10 _000:
1228
1234
n_alloc = 10 _000
1229
1235
else :
@@ -1274,8 +1280,9 @@ cdef class MaskedIndexEngine(IndexEngine):
1274
1280
for na_idx in na_pos:
1275
1281
# realloc if needed
1276
1282
if count >= n_alloc:
1277
- n_alloc += 10 _000
1278
- result = np.resize(result, n_alloc)
1283
+ n_alloc *= 2
1284
+ if n_alloc > max_alloc:
1285
+ n_alloc = max_alloc
1279
1286
1280
1287
result[count] = na_idx
1281
1288
count += 1
@@ -1289,8 +1296,9 @@ cdef class MaskedIndexEngine(IndexEngine):
1289
1296
1290
1297
# realloc if needed
1291
1298
if count >= n_alloc:
1292
- n_alloc += 10 _000
1293
- result = np.resize(result, n_alloc)
1299
+ n_alloc *= 2
1300
+ if n_alloc > max_alloc:
1301
+ n_alloc = max_alloc
1294
1302
1295
1303
result[count] = j
1296
1304
count += 1
0 commit comments