Skip to content

Commit a6d7863

Browse files
committed
BUGFIX: Fixing bug for 32 bit architectures
1 parent 6c34821 commit a6d7863

File tree

9 files changed

+66
-53
lines changed

9 files changed

+66
-53
lines changed

arrayfire/array.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def _create_strided_array(buf, numdims, idims, dtype, is_device, offset, strides
3636
c_dims = dim4(idims[0], idims[1], idims[2], idims[3])
3737
if offset is None:
3838
offset = 0
39-
offset = ct.c_ulonglong(offset)
39+
offset = c_dim_t(offset)
4040
if strides is None:
4141
strides = (1, idims[0], idims[0]*idims[1], idims[0]*idims[1]*idims[2])
4242
while len(strides) < 4:
@@ -85,10 +85,10 @@ def constant_array(val, d0, d1=None, d2=None, d3=None, dtype=Dtype.f32):
8585
safe_call(backend.get().af_constant_complex(ct.pointer(out), c_real, c_imag,
8686
4, ct.pointer(dims), dtype))
8787
elif dtype.value == Dtype.s64.value:
88-
c_val = ct.c_longlong(val.real)
88+
c_val = c_dim_t(val.real)
8989
safe_call(backend.get().af_constant_long(ct.pointer(out), c_val, 4, ct.pointer(dims)))
9090
elif dtype.value == Dtype.u64.value:
91-
c_val = ct.c_ulonglong(val.real)
91+
c_val = c_dim_t(val.real)
9292
safe_call(backend.get().af_constant_ulong(ct.pointer(out), c_val, 4, ct.pointer(dims)))
9393
else:
9494
c_val = ct.c_double(val)
@@ -526,7 +526,7 @@ def offset(self):
526526
offset : int
527527
The offset in number of elements
528528
"""
529-
offset = ct.c_longlong(0)
529+
offset = c_dim_t(0)
530530
safe_call(backend.get().af_get_offset(ct.pointer(offset), self.arr))
531531
return offset.value
532532

@@ -539,10 +539,10 @@ def strides(self):
539539
strides : tuple
540540
The strides for each dimension
541541
"""
542-
s0 = ct.c_longlong(0)
543-
s1 = ct.c_longlong(0)
544-
s2 = ct.c_longlong(0)
545-
s3 = ct.c_longlong(0)
542+
s0 = c_dim_t(0)
543+
s1 = c_dim_t(0)
544+
s2 = c_dim_t(0)
545+
s3 = c_dim_t(0)
546546
safe_call(backend.get().af_get_strides(ct.pointer(s0), ct.pointer(s1),
547547
ct.pointer(s2), ct.pointer(s3), self.arr))
548548
strides = (s0.value,s1.value,s2.value,s3.value)
@@ -552,7 +552,7 @@ def elements(self):
552552
"""
553553
Return the number of elements in the array.
554554
"""
555-
num = ct.c_ulonglong(0)
555+
num = c_dim_t(0)
556556
safe_call(backend.get().af_get_elements(ct.pointer(num), self.arr))
557557
return num.value
558558

@@ -574,10 +574,10 @@ def dims(self):
574574
"""
575575
Return the shape of the array as a tuple.
576576
"""
577-
d0 = ct.c_longlong(0)
578-
d1 = ct.c_longlong(0)
579-
d2 = ct.c_longlong(0)
580-
d3 = ct.c_longlong(0)
577+
d0 = c_dim_t(0)
578+
d1 = c_dim_t(0)
579+
d2 = c_dim_t(0)
580+
d3 = c_dim_t(0)
581581
safe_call(backend.get().af_get_dims(ct.pointer(d0), ct.pointer(d1),
582582
ct.pointer(d2), ct.pointer(d3), self.arr))
583583
dims = (d0.value,d1.value,d2.value,d3.value)
@@ -994,7 +994,7 @@ def __getitem__(self, key):
994994
inds = _get_indices(key)
995995

996996
safe_call(backend.get().af_index_gen(ct.pointer(out.arr),
997-
self.arr, ct.c_longlong(n_dims), inds.pointer))
997+
self.arr, c_dim_t(n_dims), inds.pointer))
998998
return out
999999
except RuntimeError as e:
10001000
raise IndexError(str(e))
@@ -1035,7 +1035,7 @@ def __setitem__(self, key, val):
10351035
inds = _get_indices(key)
10361036

10371037
safe_call(backend.get().af_assign_gen(ct.pointer(out_arr),
1038-
self.arr, ct.c_longlong(n_dims), inds.pointer,
1038+
self.arr, c_dim_t(n_dims), inds.pointer,
10391039
other_arr))
10401040
safe_call(backend.get().af_release_array(self.arr))
10411041
if del_other:

arrayfire/device.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ def alloc_device(num_bytes):
287287
Allocate a buffer on the device with specified number of bytes.
288288
"""
289289
ptr = ct.c_void_p(0)
290-
c_num_bytes = ct.c_longlong(num_bytes)
290+
c_num_bytes = c_dim_t(num_bytes)
291291
safe_call(backend.get().af_alloc_device(ct.pointer(ptr), c_num_bytes))
292292
return ptr.value
293293

@@ -296,7 +296,7 @@ def alloc_host(num_bytes):
296296
Allocate a buffer on the host with specified number of bytes.
297297
"""
298298
ptr = ct.c_void_p(0)
299-
c_num_bytes = ct.c_longlong(num_bytes)
299+
c_num_bytes = c_dim_t(num_bytes)
300300
safe_call(backend.get().af_alloc_host(ct.pointer(ptr), c_num_bytes))
301301
return ptr.value
302302

@@ -305,7 +305,7 @@ def alloc_pinned(num_bytes):
305305
Allocate a buffer on the host using pinned memory with specified number of bytes.
306306
"""
307307
ptr = ct.c_void_p(0)
308-
c_num_bytes = ct.c_longlong(num_bytes)
308+
c_num_bytes = c_dim_t(num_bytes)
309309
safe_call(backend.get().af_alloc_pinned(ct.pointer(ptr), c_num_bytes))
310310
return ptr.value
311311

arrayfire/features.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,13 @@ def __init__(self, num=0):
2828
self.feat = ct.c_void_p(0)
2929
if num is not None:
3030
assert(isinstance(num, numbers.Number))
31-
safe_call(backend.get().af_create_features(ct.pointer(self.feat), ct.c_longlong(num)))
31+
safe_call(backend.get().af_create_features(ct.pointer(self.feat), c_dim_t(num)))
3232

3333
def num_features():
3434
"""
3535
Returns the number of features detected.
3636
"""
37-
num = ct.c_longlong(0)
37+
num = c_dim_t(0)
3838
safe_call(backend.get().af_get_features_num(ct.pointer(num), self.feat))
3939
return num
4040

arrayfire/graphics.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class Window(object):
4848
def __init__(self, width=1280, height=720, title="ArrayFire"):
4949
self._r = -1
5050
self._c = -1
51-
self._wnd = ct.c_longlong(0)
51+
self._wnd = ct.c_void_p(0)
5252
self._cmap = COLORMAP.DEFAULT
5353

5454
_width = 1280 if width is None else width

arrayfire/image.py

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,8 @@ def resize(image, scale=None, odim0=None, odim1=None, method=INTERP.NEAREST):
160160

161161
output = Array()
162162
safe_call(backend.get().af_resize(ct.pointer(output.arr),
163-
image.arr, ct.c_longlong(odim0),
164-
ct.c_longlong(odim1), method.value))
163+
image.arr, c_dim_t(odim0),
164+
c_dim_t(odim1), method.value))
165165

166166
return output
167167

@@ -204,7 +204,7 @@ def transform(image, trans_mat, odim0 = 0, odim1 = 0, method=INTERP.NEAREST, is_
204204
output = Array()
205205
safe_call(backend.get().af_transform(ct.pointer(output.arr),
206206
image.arr, trans_mat.arr,
207-
ct.c_longlong(odim0), ct.c_longlong(odim1),
207+
c_dim_t(odim0), c_dim_t(odim1),
208208
method.value, is_inverse))
209209
return output
210210

@@ -277,7 +277,7 @@ def translate(image, trans0, trans1, odim0 = 0, odim1 = 0, method = INTERP.NEARE
277277
output = Array()
278278
safe_call(backend.get().af_translate(ct.pointer(output.arr),
279279
image.arr, trans0, trans1,
280-
ct.c_longlong(odim0), ct.c_longlong(odim1), method.value))
280+
c_dim_t(odim0), c_dim_t(odim1), method.value))
281281
return output
282282

283283
def scale(image, scale0, scale1, odim0 = 0, odim1 = 0, method = INTERP.NEAREST):
@@ -319,7 +319,7 @@ def scale(image, scale0, scale1, odim0 = 0, odim1 = 0, method = INTERP.NEAREST):
319319
output = Array()
320320
safe_call(backend.get().af_scale(ct.pointer(output.arr),
321321
image.arr, ct.c_float(scale0), ct.c_float(scale1),
322-
ct.c_longlong(odim0), ct.c_longlong(odim1), method.value))
322+
c_dim_t(odim0), c_dim_t(odim1), method.value))
323323
return output
324324

325325
def skew(image, skew0, skew1, odim0 = 0, odim1 = 0, method = INTERP.NEAREST, is_inverse=True):
@@ -364,7 +364,7 @@ def skew(image, skew0, skew1, odim0 = 0, odim1 = 0, method = INTERP.NEAREST, is_
364364
output = Array()
365365
safe_call(backend.get().af_skew(ct.pointer(output.arr),
366366
image.arr, ct.c_float(skew0), ct.c_float(skew1),
367-
ct.c_longlong(odim0), ct.c_longlong(odim1),
367+
c_dim_t(odim0), c_dim_t(odim1),
368368
method.value, is_inverse))
369369

370370
return output
@@ -647,8 +647,8 @@ def medfilt(image, w0 = 3, w1 = 3, edge_pad = PAD.ZERO):
647647
"""
648648
output = Array()
649649
safe_call(backend.get().af_medfilt(ct.pointer(output.arr),
650-
image.arr, ct.c_longlong(w0),
651-
ct.c_longlong(w1), edge_pad.value))
650+
image.arr, c_dim_t(w0),
651+
c_dim_t(w1), edge_pad.value))
652652
return output
653653

654654
def minfilt(image, w_len = 3, w_wid = 3, edge_pad = PAD.ZERO):
@@ -679,8 +679,8 @@ def minfilt(image, w_len = 3, w_wid = 3, edge_pad = PAD.ZERO):
679679
"""
680680
output = Array()
681681
safe_call(backend.get().af_minfilt(ct.pointer(output.arr),
682-
image.arr, ct.c_longlong(w_len),
683-
ct.c_longlong(w_wid), edge_pad.value))
682+
image.arr, c_dim_t(w_len),
683+
c_dim_t(w_wid), edge_pad.value))
684684
return output
685685

686686
def maxfilt(image, w_len = 3, w_wid = 3, edge_pad = PAD.ZERO):
@@ -711,8 +711,8 @@ def maxfilt(image, w_len = 3, w_wid = 3, edge_pad = PAD.ZERO):
711711
"""
712712
output = Array()
713713
safe_call(backend.get().af_maxfilt(ct.pointer(output.arr),
714-
image.arr, ct.c_longlong(w_len),
715-
ct.c_longlong(w_wid), edge_pad.value))
714+
image.arr, c_dim_t(w_len),
715+
c_dim_t(w_wid), edge_pad.value))
716716
return output
717717

718718
def regions(image, conn = CONNECTIVITY.FOUR, out_type = Dtype.f32):
@@ -996,9 +996,9 @@ def unwrap(image, wx, wy, sx, sy, px=0, py=0, is_column=True):
996996

997997
out = Array()
998998
safe_call(backend.get().af_unwrap(ct.pointer(out.arr), image.arr,
999-
ct.c_longlong(wx), ct.c_longlong(wy),
1000-
ct.c_longlong(sx), ct.c_longlong(sy),
1001-
ct.c_longlong(px), ct.c_longlong(py),
999+
c_dim_t(wx), c_dim_t(wy),
1000+
c_dim_t(sx), c_dim_t(sy),
1001+
c_dim_t(px), c_dim_t(py),
10021002
is_column))
10031003
return out
10041004

@@ -1078,10 +1078,10 @@ def wrap(a, ox, oy, wx, wy, sx, sy, px=0, py=0, is_column=True):
10781078

10791079
out = Array()
10801080
safe_call(backend.get().af_wrap(ct.pointer(out.arr), a.arr,
1081-
ct.c_longlong(ox), ct.c_longlong(oy),
1082-
ct.c_longlong(wx), ct.c_longlong(wy),
1083-
ct.c_longlong(sx), ct.c_longlong(sy),
1084-
ct.c_longlong(px), ct.c_longlong(py),
1081+
c_dim_t(ox), c_dim_t(oy),
1082+
c_dim_t(wx), c_dim_t(wy),
1083+
c_dim_t(sx), c_dim_t(sy),
1084+
c_dim_t(px), c_dim_t(py),
10851085
is_column))
10861086
return out
10871087

arrayfire/library.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,19 @@
1414
import platform
1515
import ctypes as ct
1616

17+
# Work around for unexpected architectures
18+
if 'c_dim_t_forced' in globals():
19+
global c_dim_t_forced
20+
c_dim_t = c_dim_t_forced
21+
else:
22+
# dim_t is long long by default
23+
c_dim_t = ct.c_longlong
24+
# Change to int for 32 bit x86 and amr architectures
25+
if (platform.architecture()[0][0:2] == '32' and
26+
(platform.machine()[-2:] == '86' or
27+
platform.machine()[0:3] == 'arm')):
28+
c_dim_t = ct.c_int
29+
1730
try:
1831
from enum import Enum as _Enum
1932
def _Enum_Type(v):

arrayfire/signal.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ def fft(signal, dim0 = None , scale = None):
127127
scale = 1.0
128128

129129
output = Array()
130-
safe_call(backend.get().af_fft(ct.pointer(output.arr), signal.arr, ct.c_double(scale), ct.c_longlong(dim0)))
130+
safe_call(backend.get().af_fft(ct.pointer(output.arr), signal.arr, ct.c_double(scale), c_dim_t(dim0)))
131131
return output
132132

133133
def fft2(signal, dim0 = None, dim1 = None , scale = None):
@@ -170,7 +170,7 @@ def fft2(signal, dim0 = None, dim1 = None , scale = None):
170170

171171
output = Array()
172172
safe_call(backend.get().af_fft2(ct.pointer(output.arr), signal.arr, ct.c_double(scale),
173-
ct.c_longlong(dim0), ct.c_longlong(dim1)))
173+
c_dim_t(dim0), c_dim_t(dim1)))
174174
return output
175175

176176
def fft3(signal, dim0 = None, dim1 = None , dim2 = None, scale = None):
@@ -220,7 +220,7 @@ def fft3(signal, dim0 = None, dim1 = None , dim2 = None, scale = None):
220220

221221
output = Array()
222222
safe_call(backend.get().af_fft3(ct.pointer(output.arr), signal.arr, ct.c_double(scale),
223-
ct.c_longlong(dim0), ct.c_longlong(dim1), ct.c_longlong(dim2)))
223+
c_dim_t(dim0), c_dim_t(dim1), c_dim_t(dim2)))
224224
return output
225225

226226
def ifft(signal, dim0 = None , scale = None):
@@ -261,7 +261,7 @@ def ifft(signal, dim0 = None , scale = None):
261261
scale = 1.0/float(dim0)
262262

263263
output = Array()
264-
safe_call(backend.get().af_ifft(ct.pointer(output.arr), signal.arr, ct.c_double(scale), ct.c_longlong(dim0)))
264+
safe_call(backend.get().af_ifft(ct.pointer(output.arr), signal.arr, ct.c_double(scale), c_dim_t(dim0)))
265265
return output
266266

267267
def ifft2(signal, dim0 = None, dim1 = None , scale = None):
@@ -312,7 +312,7 @@ def ifft2(signal, dim0 = None, dim1 = None , scale = None):
312312

313313
output = Array()
314314
safe_call(backend.get().af_ifft2(ct.pointer(output.arr), signal.arr, ct.c_double(scale),
315-
ct.c_longlong(dim0), ct.c_longlong(dim1)))
315+
c_dim_t(dim0), c_dim_t(dim1)))
316316
return output
317317

318318
def ifft3(signal, dim0 = None, dim1 = None , dim2 = None, scale = None):
@@ -370,7 +370,7 @@ def ifft3(signal, dim0 = None, dim1 = None , dim2 = None, scale = None):
370370

371371
output = Array()
372372
safe_call(backend.get().af_ifft3(ct.pointer(output.arr), signal.arr, ct.c_double(scale),
373-
ct.c_longlong(dim0), ct.c_longlong(dim1), ct.c_longlong(dim2)))
373+
c_dim_t(dim0), c_dim_t(dim1), c_dim_t(dim2)))
374374
return output
375375

376376
def fft_inplace(signal, scale = None):
@@ -539,7 +539,7 @@ def fft_r2c(signal, dim0 = None , scale = None):
539539
scale = 1.0
540540

541541
output = Array()
542-
safe_call(backend.get().af_fft_r2c(ct.pointer(output.arr), signal.arr, ct.c_double(scale), ct.c_longlong(dim0)))
542+
safe_call(backend.get().af_fft_r2c(ct.pointer(output.arr), signal.arr, ct.c_double(scale), c_dim_t(dim0)))
543543
return output
544544

545545
def fft2_r2c(signal, dim0 = None, dim1 = None , scale = None):
@@ -582,7 +582,7 @@ def fft2_r2c(signal, dim0 = None, dim1 = None , scale = None):
582582

583583
output = Array()
584584
safe_call(backend.get().af_fft2_r2c(ct.pointer(output.arr), signal.arr, ct.c_double(scale),
585-
ct.c_longlong(dim0), ct.c_longlong(dim1)))
585+
c_dim_t(dim0), c_dim_t(dim1)))
586586
return output
587587

588588
def fft3_r2c(signal, dim0 = None, dim1 = None , dim2 = None, scale = None):
@@ -632,7 +632,7 @@ def fft3_r2c(signal, dim0 = None, dim1 = None , dim2 = None, scale = None):
632632

633633
output = Array()
634634
safe_call(backend.get().af_fft3_r2c(ct.pointer(output.arr), signal.arr, ct.c_double(scale),
635-
ct.c_longlong(dim0), ct.c_longlong(dim1), ct.c_longlong(dim2)))
635+
c_dim_t(dim0), c_dim_t(dim1), c_dim_t(dim2)))
636636
return output
637637

638638
def _get_c2r_dim(dim, is_odd):

arrayfire/util.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import numbers
1212

1313
def dim4(d0=1, d1=1, d2=1, d3=1):
14-
c_dim4 = ct.c_longlong * 4
14+
c_dim4 = c_dim_t * 4
1515
out = c_dim4(1, 1, 1, 1)
1616

1717
for i, dim in enumerate((d0, d1, d2, d3)):
@@ -70,7 +70,7 @@ def to_str(c_str):
7070
def safe_call(af_error):
7171
if (af_error != ERR.NONE.value):
7272
err_str = ct.c_char_p(0)
73-
err_len = ct.c_longlong(0)
73+
err_len = c_dim_t(0)
7474
backend.get().af_get_last_error(ct.pointer(err_str), ct.pointer(err_len))
7575
raise RuntimeError(to_str(err_str))
7676

arrayfire/vision.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ def hamming_matcher(query, database, dim = 0, num_nearest = 1):
166166
dist = Array()
167167
safe_call(backend.get().af_hamming_matcher(ct.pointer(idx.arr), ct.pointer(dist.arr),
168168
query.arr, database.arr,
169-
ct.c_longlong(dim), ct.c_longlong(num_nearest)))
169+
c_dim_t(dim), c_dim_t(num_nearest)))
170170
return index, dist
171171

172172
def nearest_neighbour(query, database, dim = 0, num_nearest = 1, match_type=MATCH.SSD):
@@ -202,7 +202,7 @@ def nearest_neighbour(query, database, dim = 0, num_nearest = 1, match_type=MATC
202202
dist = Array()
203203
safe_call(backend.get().af_nearest_neighbour(ct.pointer(idx.arr), ct.pointer(dist.arr),
204204
query.arr, database.arr,
205-
ct.c_longlong(dim), ct.c_longlong(num_nearest),
205+
c_dim_t(dim), c_dim_t(num_nearest),
206206
match_type.value))
207207
return index, dist
208208

0 commit comments

Comments
 (0)