@@ -16,10 +16,10 @@ ctypedef uint32_t (* random_uint_1_i_32)(aug_state* state, uint32_t a) nogil
16
16
ctypedef int32_t (* random_int_2_i_32)(aug_state* state, int32_t a, int32_t b) nogil
17
17
ctypedef int64_t (* random_int_2_i)(aug_state* state, int64_t a, int64_t b) nogil
18
18
19
- ctypedef void (* random_double_fill)(aug_state* state, int count, double * out) nogil
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]
@@ -104,25 +104,28 @@ cdef object cont_broadcast_1(aug_state* state, void* func, object size, object l
104
104
object a, object a_name, constraint_type a_constraint):
105
105
106
106
cdef np.ndarray a_arr, randoms
107
+ cdef double * randoms_data
107
108
cdef np.broadcast it
108
109
cdef random_double_1 f = (< random_double_1> func)
110
+ cdef np.npy_intp i, n
109
111
110
112
a_arr = < np.ndarray> np.PyArray_FROM_OTF(a, np.NPY_DOUBLE, np.NPY_ALIGNED)
111
113
if a_constraint != CONS_NONE:
112
114
check_array_constraint(a_arr, a_name, a_constraint)
113
115
114
116
if size is not None :
115
- randoms = np.empty(size, np.double)
117
+ randoms = < np.ndarray > np.empty(size, np.double)
116
118
else :
117
- # randoms = np.empty(np.shape(a_arr), np.double)
118
119
randoms = np.PyArray_SimpleNew(np.PyArray_NDIM(a_arr), np.PyArray_DIMS(a_arr), np.NPY_DOUBLE)
119
120
120
-
121
+ randoms_data = < double * > np.PyArray_DATA(randoms)
122
+ n = np.PyArray_SIZE(randoms)
121
123
it = np.broadcast(randoms, a_arr)
124
+
122
125
with lock, nogil:
123
- while np.PyArray_MultiIter_NOTDONE(it ):
126
+ for i in range (n ):
124
127
a_val = (< double * > np.PyArray_MultiIter_DATA(it, 1 ))[0 ]
125
- ( < double * > np.PyArray_MultiIter_DATA(it, 0 ))[ 0 ] = f(state, a_val)
128
+ randoms_data[i ] = f(state, a_val)
126
129
127
130
np.PyArray_MultiIter_NEXT(it)
128
131
@@ -132,8 +135,10 @@ cdef object cont_broadcast_2(aug_state* state, void* func, object size, object l
132
135
object a, object a_name, constraint_type a_constraint,
133
136
object b, object b_name, constraint_type b_constraint):
134
137
cdef np.ndarray a_arr, b_arr, randoms
138
+ cdef double * randoms_data
135
139
cdef np.broadcast it
136
140
cdef random_double_2 f = (< random_double_2> func)
141
+ cdef np.npy_intp i, n
137
142
138
143
a_arr = < np.ndarray> np.PyArray_FROM_OTF(a, np.NPY_DOUBLE, np.NPY_ALIGNED)
139
144
if a_constraint != CONS_NONE:
@@ -144,18 +149,22 @@ cdef object cont_broadcast_2(aug_state* state, void* func, object size, object l
144
149
check_array_constraint(b_arr, b_name, b_constraint)
145
150
146
151
if size is not None :
147
- randoms = np.empty(size, np.double)
152
+ randoms = < np.ndarray > np.empty(size, np.double)
148
153
else :
149
154
it = np.PyArray_MultiIterNew2(a_arr, b_arr)
150
- randoms = np.empty(it.shape, np.double)
151
- # randoms = np.PyArray_SimpleNew(it.nd, np.PyArray_DIMS(it), np.NPY_DOUBLE)
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
+
158
+
159
+ randoms_data = < double * > np.PyArray_DATA(randoms)
160
+ n = np.PyArray_SIZE(randoms)
152
161
153
162
it = np.PyArray_MultiIterNew3(randoms, a_arr, b_arr)
154
163
with lock, nogil:
155
- while np.PyArray_MultiIter_NOTDONE(it ):
164
+ for i in range (n ):
156
165
a_val = (< double * > np.PyArray_MultiIter_DATA(it, 1 ))[0 ]
157
166
b_val = (< double * > np.PyArray_MultiIter_DATA(it, 2 ))[0 ]
158
- ( < double * > np.PyArray_MultiIter_DATA(it, 0 ))[ 0 ] = f(state, a_val, b_val)
167
+ randoms_data[i ] = f(state, a_val, b_val)
159
168
160
169
np.PyArray_MultiIter_NEXT(it)
161
170
@@ -166,8 +175,10 @@ cdef object cont_broadcast_3(aug_state* state, void* func, object size, object l
166
175
object b, object b_name, constraint_type b_constraint,
167
176
object c, object c_name, constraint_type c_constraint):
168
177
cdef np.ndarray a_arr, b_arr, c_arr, randoms
178
+ cdef double * randoms_data
169
179
cdef np.broadcast it
170
180
cdef random_double_3 f = (< random_double_3> func)
181
+ cdef np.npy_intp i, n
171
182
172
183
a_arr = < np.ndarray> np.PyArray_FROM_OTF(a, np.NPY_DOUBLE, np.NPY_ALIGNED)
173
184
if a_constraint != CONS_NONE:
@@ -182,20 +193,22 @@ cdef object cont_broadcast_3(aug_state* state, void* func, object size, object l
182
193
check_array_constraint(c_arr, c_name, c_constraint)
183
194
184
195
if size is not None :
185
- randoms = np.empty(size, np.double)
196
+ randoms = < np.ndarray > np.empty(size, np.double)
186
197
else :
187
198
it = np.PyArray_MultiIterNew3(a_arr, b_arr, c_arr)
188
199
# randoms = np.PyArray_SimpleNew(it.nd, np.PyArray_DIMS(it), np.NPY_DOUBLE)
189
- randoms = np.empty(it.shape, np.double)
200
+ randoms = < np.ndarray > np.empty(it.shape, np.double)
190
201
191
- it = it = np.PyArray_MultiIterNew4(randoms, a_arr, b_arr, c_arr)
192
- # 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)
193
206
with lock, nogil:
194
- while np.PyArray_MultiIter_NOTDONE(it ):
207
+ for i in range (n ):
195
208
a_val = (< double * > np.PyArray_MultiIter_DATA(it, 1 ))[0 ]
196
209
b_val = (< double * > np.PyArray_MultiIter_DATA(it, 2 ))[0 ]
197
210
c_val = (< double * > np.PyArray_MultiIter_DATA(it, 3 ))[0 ]
198
- ( < 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)
199
212
200
213
np.PyArray_MultiIter_NEXT(it)
201
214
@@ -254,8 +267,9 @@ cdef object cont(aug_state* state, void* func, object size, object lock, int nar
254
267
elif narg == 3 :
255
268
return (< random_double_3> func)(state, _a, _b, _c)
256
269
257
- cdef Py_ssize_t i, n = compute_numel(size)
258
- 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)
259
273
cdef random_double_0 f0;
260
274
cdef random_double_1 f1;
261
275
cdef random_double_2 f2;
@@ -265,28 +279,30 @@ cdef object cont(aug_state* state, void* func, object size, object lock, int nar
265
279
if narg == 0 :
266
280
f0 = (< random_double_0> func)
267
281
for i in range (n):
268
- randoms [i] = f0(state)
282
+ randoms_data [i] = f0(state)
269
283
elif narg == 1 :
270
284
f1 = (< random_double_1> func)
271
285
for i in range (n):
272
- randoms [i] = f1(state, _a)
286
+ randoms_data [i] = f1(state, _a)
273
287
elif narg == 2 :
274
288
f2 = (< random_double_2> func)
275
289
for i in range (n):
276
- randoms [i] = f2(state, _a, _b)
290
+ randoms_data [i] = f2(state, _a, _b)
277
291
elif narg == 3 :
278
292
f3 = (< random_double_3> func)
279
293
for i in range (n):
280
- randoms [i] = f3(state, _a, _b, _c)
294
+ randoms_data [i] = f3(state, _a, _b, _c)
281
295
282
296
return np.asarray(randoms).reshape(size)
283
297
284
298
cdef object discrete_broadcast_d(aug_state* state, void * func, object size, object lock,
285
299
object a, object a_name, constraint_type a_constraint):
286
300
287
301
cdef np.ndarray a_arr, randoms
302
+ cdef long * randoms_data
288
303
cdef np.broadcast it
289
304
cdef random_uint_d f = (< random_uint_d> func)
305
+ cdef np.npy_intp i, n
290
306
291
307
a_arr = < np.ndarray> np.PyArray_FROM_OTF(a, np.NPY_DOUBLE, np.NPY_ALIGNED)
292
308
if a_constraint != CONS_NONE:
@@ -298,11 +314,14 @@ cdef object discrete_broadcast_d(aug_state* state, void* func, object size, obje
298
314
# randoms = np.empty(np.shape(a_arr), np.double)
299
315
randoms = np.PyArray_SimpleNew(np.PyArray_NDIM(a_arr), np.PyArray_DIMS(a_arr), np.NPY_LONG)
300
316
317
+ randoms_data = < long * > np.PyArray_DATA(randoms)
318
+ n = np.PyArray_SIZE(randoms)
319
+
301
320
it = np.broadcast(randoms, a_arr)
302
321
with lock, nogil:
303
- while np.PyArray_MultiIter_NOTDONE(it ):
322
+ for i in range (n ):
304
323
a_val = (< double * > np.PyArray_MultiIter_DATA(it, 1 ))[0 ]
305
- ( < long * > np.PyArray_MultiIter_DATA(it, 0 ))[ 0 ] = f(state, a_val)
324
+ randoms_data[i ] = f(state, a_val)
306
325
307
326
np.PyArray_MultiIter_NEXT(it)
308
327
@@ -312,8 +331,10 @@ cdef object discrete_broadcast_dd(aug_state* state, void* func, object size, obj
312
331
object a, object a_name, constraint_type a_constraint,
313
332
object b, object b_name, constraint_type b_constraint):
314
333
cdef np.ndarray a_arr, b_arr, randoms
334
+ cdef long * randoms_data
315
335
cdef np.broadcast it
316
336
cdef random_uint_dd f = (< random_uint_dd> func)
337
+ cdef np.npy_intp i, n
317
338
318
339
a_arr = < np.ndarray> np.PyArray_FROM_OTF(a, np.NPY_DOUBLE, np.NPY_ALIGNED)
319
340
if a_constraint != CONS_NONE:
@@ -323,19 +344,21 @@ cdef object discrete_broadcast_dd(aug_state* state, void* func, object size, obj
323
344
check_array_constraint(b_arr, b_name, b_constraint)
324
345
325
346
if size is not None :
326
- randoms = np.empty(size, np.int)
347
+ randoms = < np.ndarray > np.empty(size, np.int)
327
348
else :
328
349
it = np.PyArray_MultiIterNew2(a_arr, b_arr)
329
- randoms = np.empty(it.shape, np.int)
350
+ randoms = < np.ndarray > np.empty(it.shape, np.int)
330
351
# randoms = np.PyArray_SimpleNew(it.nd, np.PyArray_DIMS(it), np.NPY_LONG)
331
352
353
+ randoms_data = < long * > np.PyArray_DATA(randoms)
354
+ n = np.PyArray_SIZE(randoms)
355
+
332
356
it = np.PyArray_MultiIterNew3(randoms, a_arr, b_arr)
333
357
with lock, nogil:
334
- while np.PyArray_MultiIter_NOTDONE(it ):
358
+ for i in range (n ):
335
359
a_val = (< double * > np.PyArray_MultiIter_DATA(it, 1 ))[0 ]
336
360
b_val = (< double * > np.PyArray_MultiIter_DATA(it, 2 ))[0 ]
337
-
338
- (< long * > np.PyArray_MultiIter_DATA(it, 0 ))[0 ] = f(state, a_val, b_val)
361
+ randoms_data[i] = f(state, a_val, b_val)
339
362
340
363
np.PyArray_MultiIter_NEXT(it)
341
364
@@ -345,8 +368,11 @@ cdef object discrete_broadcast_di(aug_state* state, void* func, object size, obj
345
368
object a, object a_name, constraint_type a_constraint,
346
369
object b, object b_name, constraint_type b_constraint):
347
370
cdef np.ndarray a_arr, b_arr, randoms
371
+ cdef long * randoms_data
348
372
cdef np.broadcast it
349
373
cdef random_uint_di f = (< random_uint_di> func)
374
+ cdef np.npy_intp i, n
375
+
350
376
351
377
a_arr = < np.ndarray> np.PyArray_FROM_OTF(a, np.NPY_DOUBLE, np.NPY_ALIGNED)
352
378
if a_constraint != CONS_NONE:
@@ -357,15 +383,17 @@ cdef object discrete_broadcast_di(aug_state* state, void* func, object size, obj
357
383
check_array_constraint(b_arr, b_name, b_constraint)
358
384
359
385
if size is not None :
360
- randoms = np.empty(size, np.int)
386
+ randoms = < np.ndarray > np.empty(size, np.int)
361
387
else :
362
388
it = np.PyArray_MultiIterNew2(a_arr, b_arr)
363
- randoms = np.empty(it.shape, np.int)
364
- # 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)
365
393
366
394
it = np.PyArray_MultiIterNew3(randoms, a_arr, b_arr)
367
395
with lock, nogil:
368
- while np.PyArray_MultiIter_NOTDONE(it ):
396
+ for i in range (n ):
369
397
a_val = (< double * > np.PyArray_MultiIter_DATA(it, 1 ))[0 ]
370
398
b_val = (< long * > np.PyArray_MultiIter_DATA(it, 2 ))[0 ]
371
399
(< long * > np.PyArray_MultiIter_DATA(it, 0 ))[0 ] = f(state, a_val, b_val)
@@ -379,8 +407,10 @@ cdef object discrete_broadcast_iii(aug_state* state, void* func, object size, ob
379
407
object b, object b_name, constraint_type b_constraint,
380
408
object c, object c_name, constraint_type c_constraint):
381
409
cdef np.ndarray a_arr, b_arr, c_arr, randoms
410
+ cdef long * randoms_data
382
411
cdef np.broadcast it
383
412
cdef random_uint_iii f = (< random_uint_iii> func)
413
+ cdef np.npy_intp i, n
384
414
385
415
a_arr = < np.ndarray> np.PyArray_FROM_OTF(a, np.NPY_LONG, np.NPY_ALIGNED)
386
416
if a_constraint != CONS_NONE:
@@ -395,19 +425,21 @@ cdef object discrete_broadcast_iii(aug_state* state, void* func, object size, ob
395
425
check_array_constraint(c_arr, c_name, c_constraint)
396
426
397
427
if size is not None :
398
- randoms = np.empty(size, np.int)
428
+ randoms = < np.ndarray > np.empty(size, np.int)
399
429
else :
400
430
it = np.PyArray_MultiIterNew3(a_arr, b_arr, c_arr)
401
- randoms = np.empty(it.shape, np.int)
402
- # 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)
403
435
404
436
it = np.PyArray_MultiIterNew4(randoms, a_arr, b_arr, c_arr)
405
437
with lock, nogil:
406
- while np.PyArray_MultiIter_NOTDONE(it ):
438
+ for i in range (n ):
407
439
a_val = (< long * > np.PyArray_MultiIter_DATA(it, 1 ))[0 ]
408
440
b_val = (< long * > np.PyArray_MultiIter_DATA(it, 2 ))[0 ]
409
441
c_val = (< long * > np.PyArray_MultiIter_DATA(it, 3 ))[0 ]
410
- ( < 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)
411
443
412
444
np.PyArray_MultiIter_NEXT(it)
413
445
@@ -416,24 +448,28 @@ cdef object discrete_broadcast_iii(aug_state* state, void* func, object size, ob
416
448
cdef object discrete_broadcast_i(aug_state* state, void * func, object size, object lock,
417
449
object a, object a_name, constraint_type a_constraint):
418
450
cdef np.ndarray a_arr, randoms
451
+ cdef long * randoms_data
419
452
cdef np.broadcast it
420
453
cdef random_uint_i f = (< random_uint_i> func)
454
+ cdef np.npy_intp i, n
421
455
422
456
a_arr = < np.ndarray> np.PyArray_FROM_OTF(a, np.NPY_LONG, np.NPY_ALIGNED)
423
457
if a_constraint != CONS_NONE:
424
458
check_array_constraint(a_arr, a_name, a_constraint)
425
459
426
460
if size is not None :
427
- randoms = np.empty(size, np.int)
461
+ randoms = < np.ndarray > np.empty(size, np.int)
428
462
else :
429
- # randoms = np.empty(np.shape(a_arr), np.double)
430
463
randoms = np.PyArray_SimpleNew(np.PyArray_NDIM(a_arr), np.PyArray_DIMS(a_arr), np.NPY_LONG)
431
464
465
+ randoms_data = < long * > np.PyArray_DATA(randoms)
466
+ n = np.PyArray_SIZE(randoms)
467
+
432
468
it = np.broadcast(randoms, a_arr)
433
469
with lock, nogil:
434
- while np.PyArray_MultiIter_NOTDONE(it ):
470
+ for i in range (n ):
435
471
a_val = (< long * > np.PyArray_MultiIter_DATA(it, 1 ))[0 ]
436
- ( < long * > np.PyArray_MultiIter_DATA(it, 0 ))[ 0 ] = f(state, a_val)
472
+ randoms_data[i ] = f(state, a_val)
437
473
438
474
np.PyArray_MultiIter_NEXT(it)
439
475
@@ -531,7 +567,7 @@ cdef object disc(aug_state* state, void* func, object size, object lock,
531
567
else :
532
568
return (< random_uint_iii> func)(state, _ia, _ib, _ic)
533
569
534
- cdef Py_ssize_t i, n = compute_numel(size)
570
+ cdef np.npy_intp i, n = compute_numel(size)
535
571
cdef np.int_t [::1 ] randoms = np.empty(n, np.int)
536
572
cdef random_uint_0 f0;
537
573
cdef random_uint_d fd;
0 commit comments