@@ -18,15 +18,6 @@ ctypedef uint32_t (* random_uint_1_i_32)(aug_state* state, uint32_t a) nogil
18
18
ctypedef int32_t (* random_int_2_i_32)(aug_state* state, int32_t a, int32_t b) nogil
19
19
ctypedef int64_t (* random_int_2_i)(aug_state* state, int64_t a, int64_t b) nogil
20
20
21
- cdef np.npy_intp compute_numel(size):
22
- cdef np.npy_intp i, n = 1
23
- if isinstance (size, tuple ):
24
- for i in range (len (size)):
25
- n *= size[i]
26
- else :
27
- n = size
28
- return n
29
-
30
21
cdef check_output(object out, object dtype, object size):
31
22
if out is None :
32
23
return
@@ -137,7 +128,7 @@ cdef object cont_broadcast_1(aug_state* state, void* func, object size, object l
137
128
138
129
randoms_data = < double * > np.PyArray_DATA(randoms)
139
130
n = np.PyArray_SIZE(randoms)
140
- it = np.broadcast (randoms, a_arr)
131
+ it = np.PyArray_MultiIterNew2 (randoms, a_arr)
141
132
142
133
with lock, nogil:
143
134
for i in range (n):
@@ -290,11 +281,10 @@ cdef object cont(aug_state* state, void* func, object size, object lock, int nar
290
281
cdef np.npy_intp i, n
291
282
cdef np.ndarray randoms
292
283
if out is None :
293
- n = compute_numel(size)
294
- randoms = np.empty(n, np.double)
284
+ randoms = < np.ndarray> np.empty(size)
295
285
else :
296
286
randoms = < np.ndarray> out
297
- n = np.PyArray_SIZE(randoms)
287
+ n = np.PyArray_SIZE(randoms)
298
288
299
289
cdef double * randoms_data = < double * > np.PyArray_DATA(randoms)
300
290
cdef random_double_0 f0;
@@ -321,7 +311,7 @@ cdef object cont(aug_state* state, void* func, object size, object lock, int nar
321
311
randoms_data[i] = f3(state, _a, _b, _c)
322
312
323
313
if out is None :
324
- return np.asarray( randoms).reshape(size)
314
+ return randoms
325
315
else :
326
316
return out
327
317
@@ -346,7 +336,7 @@ cdef object discrete_broadcast_d(aug_state* state, void* func, object size, obje
346
336
randoms_data = < long * > np.PyArray_DATA(randoms)
347
337
n = np.PyArray_SIZE(randoms)
348
338
349
- it = np.broadcast (randoms, a_arr)
339
+ it = np.PyArray_MultiIterNew2 (randoms, a_arr)
350
340
with lock, nogil:
351
341
for i in range (n):
352
342
a_val = (< double * > np.PyArray_MultiIter_DATA(it, 1 ))[0 ]
@@ -486,7 +476,7 @@ cdef object discrete_broadcast_i(aug_state* state, void* func, object size, obje
486
476
randoms_data = < long * > np.PyArray_DATA(randoms)
487
477
n = np.PyArray_SIZE(randoms)
488
478
489
- it = np.broadcast (randoms, a_arr)
479
+ it = np.PyArray_MultiIterNew2 (randoms, a_arr)
490
480
with lock, nogil:
491
481
for i in range (n):
492
482
a_val = (< long * > np.PyArray_MultiIter_DATA(it, 1 ))[0 ]
@@ -591,44 +581,48 @@ cdef object disc(aug_state* state, void* func, object size, object lock,
591
581
else :
592
582
return (< random_uint_iii> func)(state, _ia, _ib, _ic)
593
583
594
- cdef np.npy_intp i, n = compute_numel(size)
595
- cdef np.int_t [::1 ] randoms = np.empty(n, np.int)
584
+ cdef np.npy_intp i, n
585
+ cdef np.ndarray randoms = < np.ndarray> np.empty(size, np.int)
586
+ cdef np.int_t * randoms_data
596
587
cdef random_uint_0 f0;
597
588
cdef random_uint_d fd;
598
589
cdef random_uint_dd fdd;
599
590
cdef random_uint_di fdi;
600
591
cdef random_uint_i fi;
601
592
cdef random_uint_iii fiii;
602
593
594
+ n = np.PyArray_SIZE(randoms)
595
+ randoms_data = < np.int_t * > np.PyArray_DATA(randoms)
596
+
603
597
with lock, nogil:
604
598
if narg_long == 0 :
605
599
if narg_double == 0 :
606
600
f0 = (< random_uint_0> func)
607
601
for i in range (n):
608
- randoms [i] = f0(state)
602
+ randoms_data [i] = f0(state)
609
603
elif narg_double == 1 :
610
604
fd = (< random_uint_d> func)
611
605
for i in range (n):
612
- randoms [i] = fd(state, _da)
606
+ randoms_data [i] = fd(state, _da)
613
607
elif narg_double == 2 :
614
608
fdd = (< random_uint_dd> func)
615
609
for i in range (n):
616
- randoms [i] = fdd(state, _da, _db)
610
+ randoms_data [i] = fdd(state, _da, _db)
617
611
elif narg_long == 1 :
618
612
if narg_double == 0 :
619
613
fi = (< random_uint_i> func)
620
614
for i in range (n):
621
- randoms [i] = fi(state, _ia)
615
+ randoms_data [i] = fi(state, _ia)
622
616
if narg_double == 1 :
623
617
fdi = (< random_uint_di> func)
624
618
for i in range (n):
625
- randoms [i] = fdi(state, _da, _ib)
619
+ randoms_data [i] = fdi(state, _da, _ib)
626
620
else :
627
621
fiii = (< random_uint_iii> func)
628
622
for i in range (n):
629
- randoms [i] = fiii(state, _ia, _ib, _ic)
623
+ randoms_data [i] = fiii(state, _ia, _ib, _ic)
630
624
631
- return np.asarray( randoms).reshape(size)
625
+ return randoms
632
626
633
627
634
628
cdef object cont_broadcast_float_1(aug_state* state, void * func, object size, object lock,
@@ -656,7 +650,7 @@ cdef object cont_broadcast_float_1(aug_state* state, void* func, object size, ob
656
650
657
651
randoms_data = < float * > np.PyArray_DATA(randoms)
658
652
n = np.PyArray_SIZE(randoms)
659
- it = np.broadcast (randoms, a_arr)
653
+ it = np.PyArray_MultiIterNew2 (randoms, a_arr)
660
654
661
655
with lock, nogil:
662
656
for i in range (n):
@@ -694,11 +688,10 @@ cdef object cont_float(aug_state* state, void* func, object size, object lock,
694
688
cdef np.npy_intp i, n
695
689
cdef np.ndarray randoms
696
690
if out is None :
697
- n = compute_numel(size)
698
- randoms = np.empty(n, np.float32)
691
+ randoms = < np.ndarray> np.empty(size, np.float32)
699
692
else :
700
693
randoms = < np.ndarray> out
701
- n = np.PyArray_SIZE(randoms)
694
+ n = np.PyArray_SIZE(randoms)
702
695
703
696
cdef float * randoms_data = < float * > np.PyArray_DATA(randoms)
704
697
cdef random_float_1 f1 = < random_float_1> func;
@@ -708,6 +701,6 @@ cdef object cont_float(aug_state* state, void* func, object size, object lock,
708
701
randoms_data[i] = f1(state, _a)
709
702
710
703
if out is None :
711
- return np.asarray( randoms).reshape(size)
704
+ return randoms
712
705
else :
713
706
return out
0 commit comments