@@ -77,6 +77,10 @@ cdef object _rand_{{nptype}}(object low, object high, object size, aug_state *st
77
77
cdef np.broadcast it
78
78
cdef int buf_rem = 0
79
79
80
+ if size is not None:
81
+ if (np.prod(size) == 0):
82
+ return np.empty(size, dtype=np.{{nptype}})
83
+
80
84
low = np.array(low, copy=False)
81
85
high = np.array(high, copy=False)
82
86
low_ndim = np.PyArray_NDIM(<np.ndarray>low)
@@ -129,10 +133,10 @@ cdef object _rand_{{nptype}}(object low, object high, object size, aug_state *st
129
133
130
134
it = np.PyArray_MultiIterNew3(low_arr, high_arr, out_arr)
131
135
out_data = <{{utype}}_t *>np.PyArray_DATA(out_arr)
132
- n = np.PyArray_SIZE(out_arr)
136
+ cnt = np.PyArray_SIZE(out_arr)
133
137
mask = last_rng = 0
134
138
with lock, nogil:
135
- for i in range(n ):
139
+ for i in range(cnt ):
136
140
low_v = (<{{nptype_up}}_t*>np.PyArray_MultiIter_DATA(it, 0))[0]
137
141
high_v = (<{{nptype_up}}_t*>np.PyArray_MultiIter_DATA(it, 1))[0]
138
142
rng = <{{utype}}_t>((high_v - 1) - low_v)
@@ -199,6 +203,10 @@ cdef object _rand_{{nptype}}(object low, object high, object size, aug_state *st
199
203
cdef {{nptype}}_t low_v, high_v
200
204
cdef uint64_t rng, last_rng, val, mask, off, out_val
201
205
206
+ if size is not None:
207
+ if (np.prod(size) == 0):
208
+ return np.empty(size, dtype=np.{{nptype}})
209
+
202
210
low = np.array(low, copy=False)
203
211
high = np.array(high, copy=False)
204
212
low_ndim = np.PyArray_NDIM(<np.ndarray>low)
@@ -238,9 +246,9 @@ cdef object _rand_{{nptype}}(object low, object high, object size, aug_state *st
238
246
239
247
highm1_arr = <np.ndarray>np.empty_like(high_arr, dtype=np.{{nptype}})
240
248
highm1_data = <{{nptype}}_t *>np.PyArray_DATA(highm1_arr)
241
- n = np.PyArray_SIZE(high_arr)
249
+ cnt = np.PyArray_SIZE(high_arr)
242
250
flat = high_arr.flat
243
- for i in range(n ):
251
+ for i in range(cnt ):
244
252
closed_upper = int(flat[i]) - 1
245
253
if closed_upper > {{ub}}:
246
254
raise ValueError('high is out of bounds for {{nptype}}')
0 commit comments