Skip to content

Commit 642d814

Browse files
committed
CLN: Clean up python code in array_utilities
Remove unnecessary python routine use in array_utilities
1 parent 46c668b commit 642d814

File tree

1 file changed

+23
-30
lines changed

1 file changed

+23
-30
lines changed

randomstate/array_utilities.pxi

Lines changed: 23 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,6 @@ ctypedef uint32_t (* random_uint_1_i_32)(aug_state* state, uint32_t a) nogil
1818
ctypedef int32_t (* random_int_2_i_32)(aug_state* state, int32_t a, int32_t b) nogil
1919
ctypedef int64_t (* random_int_2_i)(aug_state* state, int64_t a, int64_t b) nogil
2020

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-
3021
cdef check_output(object out, object dtype, object size):
3122
if out is None:
3223
return
@@ -137,7 +128,7 @@ cdef object cont_broadcast_1(aug_state* state, void* func, object size, object l
137128

138129
randoms_data = <double *>np.PyArray_DATA(randoms)
139130
n = np.PyArray_SIZE(randoms)
140-
it = np.broadcast(randoms, a_arr)
131+
it = np.PyArray_MultiIterNew2(randoms, a_arr)
141132

142133
with lock, nogil:
143134
for i in range(n):
@@ -290,11 +281,10 @@ cdef object cont(aug_state* state, void* func, object size, object lock, int nar
290281
cdef np.npy_intp i, n
291282
cdef np.ndarray randoms
292283
if out is None:
293-
n = compute_numel(size)
294-
randoms = np.empty(n, np.double)
284+
randoms = <np.ndarray>np.empty(size)
295285
else:
296286
randoms = <np.ndarray>out
297-
n = np.PyArray_SIZE(randoms)
287+
n = np.PyArray_SIZE(randoms)
298288

299289
cdef double *randoms_data = <double *>np.PyArray_DATA(randoms)
300290
cdef random_double_0 f0;
@@ -321,7 +311,7 @@ cdef object cont(aug_state* state, void* func, object size, object lock, int nar
321311
randoms_data[i] = f3(state, _a, _b, _c)
322312

323313
if out is None:
324-
return np.asarray(randoms).reshape(size)
314+
return randoms
325315
else:
326316
return out
327317

@@ -346,7 +336,7 @@ cdef object discrete_broadcast_d(aug_state* state, void* func, object size, obje
346336
randoms_data = <long *>np.PyArray_DATA(randoms)
347337
n = np.PyArray_SIZE(randoms)
348338

349-
it = np.broadcast(randoms, a_arr)
339+
it = np.PyArray_MultiIterNew2(randoms, a_arr)
350340
with lock, nogil:
351341
for i in range(n):
352342
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
486476
randoms_data = <long *>np.PyArray_DATA(randoms)
487477
n = np.PyArray_SIZE(randoms)
488478

489-
it = np.broadcast(randoms, a_arr)
479+
it = np.PyArray_MultiIterNew2(randoms, a_arr)
490480
with lock, nogil:
491481
for i in range(n):
492482
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,
591581
else:
592582
return (<random_uint_iii>func)(state, _ia, _ib, _ic)
593583

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
596587
cdef random_uint_0 f0;
597588
cdef random_uint_d fd;
598589
cdef random_uint_dd fdd;
599590
cdef random_uint_di fdi;
600591
cdef random_uint_i fi;
601592
cdef random_uint_iii fiii;
602593

594+
n = np.PyArray_SIZE(randoms)
595+
randoms_data = <np.int_t *>np.PyArray_DATA(randoms)
596+
603597
with lock, nogil:
604598
if narg_long == 0:
605599
if narg_double == 0:
606600
f0 = (<random_uint_0>func)
607601
for i in range(n):
608-
randoms[i] = f0(state)
602+
randoms_data[i] = f0(state)
609603
elif narg_double == 1:
610604
fd = (<random_uint_d>func)
611605
for i in range(n):
612-
randoms[i] = fd(state, _da)
606+
randoms_data[i] = fd(state, _da)
613607
elif narg_double == 2:
614608
fdd = (<random_uint_dd>func)
615609
for i in range(n):
616-
randoms[i] = fdd(state, _da, _db)
610+
randoms_data[i] = fdd(state, _da, _db)
617611
elif narg_long == 1:
618612
if narg_double == 0:
619613
fi = (<random_uint_i>func)
620614
for i in range(n):
621-
randoms[i] = fi(state, _ia)
615+
randoms_data[i] = fi(state, _ia)
622616
if narg_double == 1:
623617
fdi = (<random_uint_di>func)
624618
for i in range(n):
625-
randoms[i] = fdi(state, _da, _ib)
619+
randoms_data[i] = fdi(state, _da, _ib)
626620
else:
627621
fiii = (<random_uint_iii>func)
628622
for i in range(n):
629-
randoms[i] = fiii(state, _ia, _ib, _ic)
623+
randoms_data[i] = fiii(state, _ia, _ib, _ic)
630624

631-
return np.asarray(randoms).reshape(size)
625+
return randoms
632626

633627

634628
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
656650

657651
randoms_data = <float *>np.PyArray_DATA(randoms)
658652
n = np.PyArray_SIZE(randoms)
659-
it = np.broadcast(randoms, a_arr)
653+
it = np.PyArray_MultiIterNew2(randoms, a_arr)
660654

661655
with lock, nogil:
662656
for i in range(n):
@@ -694,11 +688,10 @@ cdef object cont_float(aug_state* state, void* func, object size, object lock,
694688
cdef np.npy_intp i, n
695689
cdef np.ndarray randoms
696690
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)
699692
else:
700693
randoms = <np.ndarray>out
701-
n = np.PyArray_SIZE(randoms)
694+
n = np.PyArray_SIZE(randoms)
702695

703696
cdef float *randoms_data = <float *>np.PyArray_DATA(randoms)
704697
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,
708701
randoms_data[i] = f1(state, _a)
709702

710703
if out is None:
711-
return np.asarray(randoms).reshape(size)
704+
return randoms
712705
else:
713706
return out

0 commit comments

Comments
 (0)