@@ -18,8 +18,8 @@ ctypedef int64_t (* random_int_2_i)(aug_state* state, int64_t a, int64_t b) nogi
18
18
19
19
ctypedef void (* random_double_fill)(aug_state* state, np.npy_intp count, double * out) nogil
20
20
21
- cdef Py_ssize_t compute_numel(size):
22
- cdef Py_ssize_t i, n = 1
21
+ cdef np.npy_intp compute_numel(size):
22
+ cdef np.npy_intp i, n = 1
23
23
if isinstance (size, tuple ):
24
24
for i in range (len (size)):
25
25
n *= size[i]
@@ -153,8 +153,8 @@ cdef object cont_broadcast_2(aug_state* state, void* func, object size, object l
153
153
else :
154
154
it = np.PyArray_MultiIterNew2(a_arr, b_arr)
155
155
randoms = < np.ndarray> np.empty(it.shape, np.double)
156
- # randoms = np.PyArray_SimpleNew(it.nd, np.PyArray_DIMS(it), np.NPY_DOUBLE)
157
- # TODO: These are needed when using a for loop
156
+ # randoms = np.PyArray_SimpleNew(it.nd, np.PyArray_DIMS(it), np.NPY_DOUBLE)
157
+
158
158
159
159
randoms_data = < double * > np.PyArray_DATA(randoms)
160
160
n = np.PyArray_SIZE(randoms)
@@ -175,8 +175,10 @@ cdef object cont_broadcast_3(aug_state* state, void* func, object size, object l
175
175
object b, object b_name, constraint_type b_constraint,
176
176
object c, object c_name, constraint_type c_constraint):
177
177
cdef np.ndarray a_arr, b_arr, c_arr, randoms
178
+ cdef double * randoms_data
178
179
cdef np.broadcast it
179
180
cdef random_double_3 f = (< random_double_3> func)
181
+ cdef np.npy_intp i, n
180
182
181
183
a_arr = < np.ndarray> np.PyArray_FROM_OTF(a, np.NPY_DOUBLE, np.NPY_ALIGNED)
182
184
if a_constraint != CONS_NONE:
@@ -191,20 +193,22 @@ cdef object cont_broadcast_3(aug_state* state, void* func, object size, object l
191
193
check_array_constraint(c_arr, c_name, c_constraint)
192
194
193
195
if size is not None :
194
- randoms = np.empty(size, np.double)
196
+ randoms = < np.ndarray > np.empty(size, np.double)
195
197
else :
196
198
it = np.PyArray_MultiIterNew3(a_arr, b_arr, c_arr)
197
199
# randoms = np.PyArray_SimpleNew(it.nd, np.PyArray_DIMS(it), np.NPY_DOUBLE)
198
- randoms = np.empty(it.shape, np.double)
200
+ randoms = < np.ndarray > np.empty(it.shape, np.double)
199
201
200
- it = it = np.PyArray_MultiIterNew4(randoms, a_arr, b_arr, c_arr)
201
- # np.broadcast(randoms, a_arr, b_arr, c_arr)
202
+ randoms_data = < double * > np.PyArray_DATA(randoms)
203
+ n = np.PyArray_SIZE(randoms)
204
+
205
+ it = np.PyArray_MultiIterNew4(randoms, a_arr, b_arr, c_arr)
202
206
with lock, nogil:
203
- while np.PyArray_MultiIter_NOTDONE(it ):
207
+ for i in range (n ):
204
208
a_val = (< double * > np.PyArray_MultiIter_DATA(it, 1 ))[0 ]
205
209
b_val = (< double * > np.PyArray_MultiIter_DATA(it, 2 ))[0 ]
206
210
c_val = (< double * > np.PyArray_MultiIter_DATA(it, 3 ))[0 ]
207
- ( < double * > np.PyArray_MultiIter_DATA(it, 0 ))[ 0 ] = f(state, a_val, b_val, c_val)
211
+ randoms_data[i ] = f(state, a_val, b_val, c_val)
208
212
209
213
np.PyArray_MultiIter_NEXT(it)
210
214
@@ -263,8 +267,9 @@ cdef object cont(aug_state* state, void* func, object size, object lock, int nar
263
267
elif narg == 3 :
264
268
return (< random_double_3> func)(state, _a, _b, _c)
265
269
266
- cdef Py_ssize_t i, n = compute_numel(size)
267
- cdef double [::1 ] randoms = np.empty(n, np.double)
270
+ cdef np.npy_intp i, n = compute_numel(size)
271
+ cdef np.ndarray randoms = np.empty(n, np.double)
272
+ cdef double * randoms_data = < double * > np.PyArray_DATA(randoms)
268
273
cdef random_double_0 f0;
269
274
cdef random_double_1 f1;
270
275
cdef random_double_2 f2;
@@ -274,28 +279,30 @@ cdef object cont(aug_state* state, void* func, object size, object lock, int nar
274
279
if narg == 0 :
275
280
f0 = (< random_double_0> func)
276
281
for i in range (n):
277
- randoms [i] = f0(state)
282
+ randoms_data [i] = f0(state)
278
283
elif narg == 1 :
279
284
f1 = (< random_double_1> func)
280
285
for i in range (n):
281
- randoms [i] = f1(state, _a)
286
+ randoms_data [i] = f1(state, _a)
282
287
elif narg == 2 :
283
288
f2 = (< random_double_2> func)
284
289
for i in range (n):
285
- randoms [i] = f2(state, _a, _b)
290
+ randoms_data [i] = f2(state, _a, _b)
286
291
elif narg == 3 :
287
292
f3 = (< random_double_3> func)
288
293
for i in range (n):
289
- randoms [i] = f3(state, _a, _b, _c)
294
+ randoms_data [i] = f3(state, _a, _b, _c)
290
295
291
296
return np.asarray(randoms).reshape(size)
292
297
293
298
cdef object discrete_broadcast_d(aug_state* state, void * func, object size, object lock,
294
299
object a, object a_name, constraint_type a_constraint):
295
300
296
301
cdef np.ndarray a_arr, randoms
302
+ cdef long * randoms_data
297
303
cdef np.broadcast it
298
304
cdef random_uint_d f = (< random_uint_d> func)
305
+ cdef np.npy_intp i, n
299
306
300
307
a_arr = < np.ndarray> np.PyArray_FROM_OTF(a, np.NPY_DOUBLE, np.NPY_ALIGNED)
301
308
if a_constraint != CONS_NONE:
@@ -307,11 +314,14 @@ cdef object discrete_broadcast_d(aug_state* state, void* func, object size, obje
307
314
# randoms = np.empty(np.shape(a_arr), np.double)
308
315
randoms = np.PyArray_SimpleNew(np.PyArray_NDIM(a_arr), np.PyArray_DIMS(a_arr), np.NPY_LONG)
309
316
317
+ randoms_data = < long * > np.PyArray_DATA(randoms)
318
+ n = np.PyArray_SIZE(randoms)
319
+
310
320
it = np.broadcast(randoms, a_arr)
311
321
with lock, nogil:
312
- while np.PyArray_MultiIter_NOTDONE(it ):
322
+ for i in range (n ):
313
323
a_val = (< double * > np.PyArray_MultiIter_DATA(it, 1 ))[0 ]
314
- ( < long * > np.PyArray_MultiIter_DATA(it, 0 ))[ 0 ] = f(state, a_val)
324
+ randoms_data[i ] = f(state, a_val)
315
325
316
326
np.PyArray_MultiIter_NEXT(it)
317
327
@@ -321,8 +331,10 @@ cdef object discrete_broadcast_dd(aug_state* state, void* func, object size, obj
321
331
object a, object a_name, constraint_type a_constraint,
322
332
object b, object b_name, constraint_type b_constraint):
323
333
cdef np.ndarray a_arr, b_arr, randoms
334
+ cdef long * randoms_data
324
335
cdef np.broadcast it
325
336
cdef random_uint_dd f = (< random_uint_dd> func)
337
+ cdef np.npy_intp i, n
326
338
327
339
a_arr = < np.ndarray> np.PyArray_FROM_OTF(a, np.NPY_DOUBLE, np.NPY_ALIGNED)
328
340
if a_constraint != CONS_NONE:
@@ -332,19 +344,21 @@ cdef object discrete_broadcast_dd(aug_state* state, void* func, object size, obj
332
344
check_array_constraint(b_arr, b_name, b_constraint)
333
345
334
346
if size is not None :
335
- randoms = np.empty(size, np.int)
347
+ randoms = < np.ndarray > np.empty(size, np.int)
336
348
else :
337
349
it = np.PyArray_MultiIterNew2(a_arr, b_arr)
338
- randoms = np.empty(it.shape, np.int)
350
+ randoms = < np.ndarray > np.empty(it.shape, np.int)
339
351
# randoms = np.PyArray_SimpleNew(it.nd, np.PyArray_DIMS(it), np.NPY_LONG)
340
352
353
+ randoms_data = < long * > np.PyArray_DATA(randoms)
354
+ n = np.PyArray_SIZE(randoms)
355
+
341
356
it = np.PyArray_MultiIterNew3(randoms, a_arr, b_arr)
342
357
with lock, nogil:
343
- while np.PyArray_MultiIter_NOTDONE(it ):
358
+ for i in range (n ):
344
359
a_val = (< double * > np.PyArray_MultiIter_DATA(it, 1 ))[0 ]
345
360
b_val = (< double * > np.PyArray_MultiIter_DATA(it, 2 ))[0 ]
346
-
347
- (< long * > np.PyArray_MultiIter_DATA(it, 0 ))[0 ] = f(state, a_val, b_val)
361
+ randoms_data[i] = f(state, a_val, b_val)
348
362
349
363
np.PyArray_MultiIter_NEXT(it)
350
364
@@ -354,8 +368,11 @@ cdef object discrete_broadcast_di(aug_state* state, void* func, object size, obj
354
368
object a, object a_name, constraint_type a_constraint,
355
369
object b, object b_name, constraint_type b_constraint):
356
370
cdef np.ndarray a_arr, b_arr, randoms
371
+ cdef long * randoms_data
357
372
cdef np.broadcast it
358
373
cdef random_uint_di f = (< random_uint_di> func)
374
+ cdef np.npy_intp i, n
375
+
359
376
360
377
a_arr = < np.ndarray> np.PyArray_FROM_OTF(a, np.NPY_DOUBLE, np.NPY_ALIGNED)
361
378
if a_constraint != CONS_NONE:
@@ -366,15 +383,17 @@ cdef object discrete_broadcast_di(aug_state* state, void* func, object size, obj
366
383
check_array_constraint(b_arr, b_name, b_constraint)
367
384
368
385
if size is not None :
369
- randoms = np.empty(size, np.int)
386
+ randoms = < np.ndarray > np.empty(size, np.int)
370
387
else :
371
388
it = np.PyArray_MultiIterNew2(a_arr, b_arr)
372
- randoms = np.empty(it.shape, np.int)
373
- # randoms = np.PyArray_SimpleNew(it.nd, np.PyArray_DIMS(it), np.NPY_LONG)
389
+ randoms = < np.ndarray> np.empty(it.shape, np.int)
390
+
391
+ randoms_data = < long * > np.PyArray_DATA(randoms)
392
+ n = np.PyArray_SIZE(randoms)
374
393
375
394
it = np.PyArray_MultiIterNew3(randoms, a_arr, b_arr)
376
395
with lock, nogil:
377
- while np.PyArray_MultiIter_NOTDONE(it ):
396
+ for i in range (n ):
378
397
a_val = (< double * > np.PyArray_MultiIter_DATA(it, 1 ))[0 ]
379
398
b_val = (< long * > np.PyArray_MultiIter_DATA(it, 2 ))[0 ]
380
399
(< long * > np.PyArray_MultiIter_DATA(it, 0 ))[0 ] = f(state, a_val, b_val)
@@ -388,8 +407,10 @@ cdef object discrete_broadcast_iii(aug_state* state, void* func, object size, ob
388
407
object b, object b_name, constraint_type b_constraint,
389
408
object c, object c_name, constraint_type c_constraint):
390
409
cdef np.ndarray a_arr, b_arr, c_arr, randoms
410
+ cdef long * randoms_data
391
411
cdef np.broadcast it
392
412
cdef random_uint_iii f = (< random_uint_iii> func)
413
+ cdef np.npy_intp i, n
393
414
394
415
a_arr = < np.ndarray> np.PyArray_FROM_OTF(a, np.NPY_LONG, np.NPY_ALIGNED)
395
416
if a_constraint != CONS_NONE:
@@ -404,19 +425,21 @@ cdef object discrete_broadcast_iii(aug_state* state, void* func, object size, ob
404
425
check_array_constraint(c_arr, c_name, c_constraint)
405
426
406
427
if size is not None :
407
- randoms = np.empty(size, np.int)
428
+ randoms = < np.ndarray > np.empty(size, np.int)
408
429
else :
409
430
it = np.PyArray_MultiIterNew3(a_arr, b_arr, c_arr)
410
- randoms = np.empty(it.shape, np.int)
411
- # randoms = np.PyArray_SimpleNew(it.nd, np.PyArray_DIMS(it), np.NPY_LONG)
431
+ randoms = < np.ndarray> np.empty(it.shape, np.int)
432
+
433
+ randoms_data = < long * > np.PyArray_DATA(randoms)
434
+ n = np.PyArray_SIZE(randoms)
412
435
413
436
it = np.PyArray_MultiIterNew4(randoms, a_arr, b_arr, c_arr)
414
437
with lock, nogil:
415
- while np.PyArray_MultiIter_NOTDONE(it ):
438
+ for i in range (n ):
416
439
a_val = (< long * > np.PyArray_MultiIter_DATA(it, 1 ))[0 ]
417
440
b_val = (< long * > np.PyArray_MultiIter_DATA(it, 2 ))[0 ]
418
441
c_val = (< long * > np.PyArray_MultiIter_DATA(it, 3 ))[0 ]
419
- ( < long * > np.PyArray_MultiIter_DATA(it, 0 ))[ 0 ] = f(state, a_val, b_val, c_val)
442
+ randoms_data[i ] = f(state, a_val, b_val, c_val)
420
443
421
444
np.PyArray_MultiIter_NEXT(it)
422
445
@@ -425,24 +448,28 @@ cdef object discrete_broadcast_iii(aug_state* state, void* func, object size, ob
425
448
cdef object discrete_broadcast_i(aug_state* state, void * func, object size, object lock,
426
449
object a, object a_name, constraint_type a_constraint):
427
450
cdef np.ndarray a_arr, randoms
451
+ cdef long * randoms_data
428
452
cdef np.broadcast it
429
453
cdef random_uint_i f = (< random_uint_i> func)
454
+ cdef np.npy_intp i, n
430
455
431
456
a_arr = < np.ndarray> np.PyArray_FROM_OTF(a, np.NPY_LONG, np.NPY_ALIGNED)
432
457
if a_constraint != CONS_NONE:
433
458
check_array_constraint(a_arr, a_name, a_constraint)
434
459
435
460
if size is not None :
436
- randoms = np.empty(size, np.int)
461
+ randoms = < np.ndarray > np.empty(size, np.int)
437
462
else :
438
- # randoms = np.empty(np.shape(a_arr), np.double)
439
463
randoms = np.PyArray_SimpleNew(np.PyArray_NDIM(a_arr), np.PyArray_DIMS(a_arr), np.NPY_LONG)
440
464
465
+ randoms_data = < long * > np.PyArray_DATA(randoms)
466
+ n = np.PyArray_SIZE(randoms)
467
+
441
468
it = np.broadcast(randoms, a_arr)
442
469
with lock, nogil:
443
- while np.PyArray_MultiIter_NOTDONE(it ):
470
+ for i in range (n ):
444
471
a_val = (< long * > np.PyArray_MultiIter_DATA(it, 1 ))[0 ]
445
- ( < long * > np.PyArray_MultiIter_DATA(it, 0 ))[ 0 ] = f(state, a_val)
472
+ randoms_data[i ] = f(state, a_val)
446
473
447
474
np.PyArray_MultiIter_NEXT(it)
448
475
@@ -540,7 +567,7 @@ cdef object disc(aug_state* state, void* func, object size, object lock,
540
567
else :
541
568
return (< random_uint_iii> func)(state, _ia, _ib, _ic)
542
569
543
- cdef Py_ssize_t i, n = compute_numel(size)
570
+ cdef np.npy_intp i, n = compute_numel(size)
544
571
cdef np.int_t [::1 ] randoms = np.empty(n, np.int)
545
572
cdef random_uint_0 f0;
546
573
cdef random_uint_d fd;
0 commit comments