[python-arrayfire] 243/250: BUGFIX: Fixing bug for 32 bit architectures

Ghislain Vaillant ghisvail-guest at moszumanska.debian.org
Mon Mar 28 22:59:53 UTC 2016


This is an automated email from the git hooks/post-receive script.

ghisvail-guest pushed a commit to branch debian/master
in repository python-arrayfire.

commit a6d78633185a588fbabd7d8ac3d4d8b99541f48f
Author: Pavan Yalamanchili <pavan at arrayfire.com>
Date:   Mon Mar 28 15:45:36 2016 -0400

    BUGFIX: Fixing bug for 32 bit architectures
---
 arrayfire/array.py    | 30 +++++++++++++++---------------
 arrayfire/device.py   |  6 +++---
 arrayfire/features.py |  4 ++--
 arrayfire/graphics.py |  2 +-
 arrayfire/image.py    | 38 +++++++++++++++++++-------------------
 arrayfire/library.py  | 13 +++++++++++++
 arrayfire/signal.py   | 18 +++++++++---------
 arrayfire/util.py     |  4 ++--
 arrayfire/vision.py   |  4 ++--
 9 files changed, 66 insertions(+), 53 deletions(-)

diff --git a/arrayfire/array.py b/arrayfire/array.py
index e539b05..74f78a6 100644
--- a/arrayfire/array.py
+++ b/arrayfire/array.py
@@ -36,7 +36,7 @@ def _create_strided_array(buf, numdims, idims, dtype, is_device, offset, strides
     c_dims = dim4(idims[0], idims[1], idims[2], idims[3])
     if offset is None:
         offset = 0
-    offset = ct.c_ulonglong(offset)
+    offset = c_dim_t(offset)
     if strides is None:
         strides = (1, idims[0], idims[0]*idims[1], idims[0]*idims[1]*idims[2])
     while len(strides) < 4:
@@ -85,10 +85,10 @@ def constant_array(val, d0, d1=None, d2=None, d3=None, dtype=Dtype.f32):
         safe_call(backend.get().af_constant_complex(ct.pointer(out), c_real, c_imag,
                                                     4, ct.pointer(dims), dtype))
     elif dtype.value == Dtype.s64.value:
-        c_val = ct.c_longlong(val.real)
+        c_val = c_dim_t(val.real)
         safe_call(backend.get().af_constant_long(ct.pointer(out), c_val, 4, ct.pointer(dims)))
     elif dtype.value == Dtype.u64.value:
-        c_val = ct.c_ulonglong(val.real)
+        c_val = c_dim_t(val.real)
         safe_call(backend.get().af_constant_ulong(ct.pointer(out), c_val, 4, ct.pointer(dims)))
     else:
         c_val = ct.c_double(val)
@@ -526,7 +526,7 @@ class Array(BaseArray):
         offset : int
                  The offset in number of elements
         """
-        offset = ct.c_longlong(0)
+        offset = c_dim_t(0)
         safe_call(backend.get().af_get_offset(ct.pointer(offset), self.arr))
         return offset.value
 
@@ -539,10 +539,10 @@ class Array(BaseArray):
         strides : tuple
                   The strides for each dimension
         """
-        s0 = ct.c_longlong(0)
-        s1 = ct.c_longlong(0)
-        s2 = ct.c_longlong(0)
-        s3 = ct.c_longlong(0)
+        s0 = c_dim_t(0)
+        s1 = c_dim_t(0)
+        s2 = c_dim_t(0)
+        s3 = c_dim_t(0)
         safe_call(backend.get().af_get_strides(ct.pointer(s0), ct.pointer(s1),
                                    ct.pointer(s2), ct.pointer(s3), self.arr))
         strides = (s0.value,s1.value,s2.value,s3.value)
@@ -552,7 +552,7 @@ class Array(BaseArray):
         """
         Return the number of elements in the array.
         """
-        num = ct.c_ulonglong(0)
+        num = c_dim_t(0)
         safe_call(backend.get().af_get_elements(ct.pointer(num), self.arr))
         return num.value
 
@@ -574,10 +574,10 @@ class Array(BaseArray):
         """
         Return the shape of the array as a tuple.
         """
-        d0 = ct.c_longlong(0)
-        d1 = ct.c_longlong(0)
-        d2 = ct.c_longlong(0)
-        d3 = ct.c_longlong(0)
+        d0 = c_dim_t(0)
+        d1 = c_dim_t(0)
+        d2 = c_dim_t(0)
+        d3 = c_dim_t(0)
         safe_call(backend.get().af_get_dims(ct.pointer(d0), ct.pointer(d1),
                                    ct.pointer(d2), ct.pointer(d3), self.arr))
         dims = (d0.value,d1.value,d2.value,d3.value)
@@ -994,7 +994,7 @@ class Array(BaseArray):
             inds = _get_indices(key)
 
             safe_call(backend.get().af_index_gen(ct.pointer(out.arr),
-                                    self.arr, ct.c_longlong(n_dims), inds.pointer))
+                                    self.arr, c_dim_t(n_dims), inds.pointer))
             return out
         except RuntimeError as e:
             raise IndexError(str(e))
@@ -1035,7 +1035,7 @@ class Array(BaseArray):
             inds  = _get_indices(key)
 
             safe_call(backend.get().af_assign_gen(ct.pointer(out_arr),
-                                                  self.arr, ct.c_longlong(n_dims), inds.pointer,
+                                                  self.arr, c_dim_t(n_dims), inds.pointer,
                                                   other_arr))
             safe_call(backend.get().af_release_array(self.arr))
             if del_other:
diff --git a/arrayfire/device.py b/arrayfire/device.py
index a33ba51..6336ea7 100644
--- a/arrayfire/device.py
+++ b/arrayfire/device.py
@@ -287,7 +287,7 @@ def alloc_device(num_bytes):
     Allocate a buffer on the device with specified number of bytes.
     """
     ptr = ct.c_void_p(0)
-    c_num_bytes = ct.c_longlong(num_bytes)
+    c_num_bytes = c_dim_t(num_bytes)
     safe_call(backend.get().af_alloc_device(ct.pointer(ptr), c_num_bytes))
     return ptr.value
 
@@ -296,7 +296,7 @@ def alloc_host(num_bytes):
     Allocate a buffer on the host with specified number of bytes.
     """
     ptr = ct.c_void_p(0)
-    c_num_bytes = ct.c_longlong(num_bytes)
+    c_num_bytes = c_dim_t(num_bytes)
     safe_call(backend.get().af_alloc_host(ct.pointer(ptr), c_num_bytes))
     return ptr.value
 
@@ -305,7 +305,7 @@ def alloc_pinned(num_bytes):
     Allocate a buffer on the host using pinned memory with specified number of bytes.
     """
     ptr = ct.c_void_p(0)
-    c_num_bytes = ct.c_longlong(num_bytes)
+    c_num_bytes = c_dim_t(num_bytes)
     safe_call(backend.get().af_alloc_pinned(ct.pointer(ptr), c_num_bytes))
     return ptr.value
 
diff --git a/arrayfire/features.py b/arrayfire/features.py
index 190bdde..04f725f 100644
--- a/arrayfire/features.py
+++ b/arrayfire/features.py
@@ -28,13 +28,13 @@ class Features(object):
         self.feat = ct.c_void_p(0)
         if num is not None:
             assert(isinstance(num, numbers.Number))
-            safe_call(backend.get().af_create_features(ct.pointer(self.feat), ct.c_longlong(num)))
+            safe_call(backend.get().af_create_features(ct.pointer(self.feat), c_dim_t(num)))
 
     def num_features():
         """
         Returns the number of features detected.
         """
-        num = ct.c_longlong(0)
+        num = c_dim_t(0)
         safe_call(backend.get().af_get_features_num(ct.pointer(num), self.feat))
         return num
 
diff --git a/arrayfire/graphics.py b/arrayfire/graphics.py
index 0597b83..ef5ef09 100644
--- a/arrayfire/graphics.py
+++ b/arrayfire/graphics.py
@@ -48,7 +48,7 @@ class Window(object):
     def __init__(self, width=1280, height=720, title="ArrayFire"):
         self._r = -1
         self._c = -1
-        self._wnd = ct.c_longlong(0)
+        self._wnd = ct.c_void_p(0)
         self._cmap = COLORMAP.DEFAULT
 
         _width  = 1280 if  width is None else  width
diff --git a/arrayfire/image.py b/arrayfire/image.py
index 8de53a6..c0c3d7c 100644
--- a/arrayfire/image.py
+++ b/arrayfire/image.py
@@ -160,8 +160,8 @@ def resize(image, scale=None, odim0=None, odim1=None, method=INTERP.NEAREST):
 
     output = Array()
     safe_call(backend.get().af_resize(ct.pointer(output.arr),
-                                      image.arr, ct.c_longlong(odim0),
-                                      ct.c_longlong(odim1), method.value))
+                                      image.arr, c_dim_t(odim0),
+                                      c_dim_t(odim1), method.value))
 
     return output
 
@@ -204,7 +204,7 @@ def transform(image, trans_mat, odim0 = 0, odim1 = 0, method=INTERP.NEAREST, is_
     output = Array()
     safe_call(backend.get().af_transform(ct.pointer(output.arr),
                                          image.arr, trans_mat.arr,
-                                         ct.c_longlong(odim0), ct.c_longlong(odim1),
+                                         c_dim_t(odim0), c_dim_t(odim1),
                                          method.value, is_inverse))
     return output
 
@@ -277,7 +277,7 @@ def translate(image, trans0, trans1, odim0 = 0, odim1 = 0, method = INTERP.NEARE
     output = Array()
     safe_call(backend.get().af_translate(ct.pointer(output.arr),
                                          image.arr, trans0, trans1,
-                                         ct.c_longlong(odim0), ct.c_longlong(odim1), method.value))
+                                         c_dim_t(odim0), c_dim_t(odim1), method.value))
     return output
 
 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):
     output = Array()
     safe_call(backend.get().af_scale(ct.pointer(output.arr),
                                      image.arr, ct.c_float(scale0), ct.c_float(scale1),
-                                     ct.c_longlong(odim0), ct.c_longlong(odim1), method.value))
+                                     c_dim_t(odim0), c_dim_t(odim1), method.value))
     return output
 
 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_
     output = Array()
     safe_call(backend.get().af_skew(ct.pointer(output.arr),
                                     image.arr, ct.c_float(skew0), ct.c_float(skew1),
-                                    ct.c_longlong(odim0), ct.c_longlong(odim1),
+                                    c_dim_t(odim0), c_dim_t(odim1),
                                     method.value, is_inverse))
 
     return output
@@ -647,8 +647,8 @@ def medfilt(image, w0 = 3, w1 = 3, edge_pad = PAD.ZERO):
     """
     output = Array()
     safe_call(backend.get().af_medfilt(ct.pointer(output.arr),
-                                       image.arr, ct.c_longlong(w0),
-                                       ct.c_longlong(w1), edge_pad.value))
+                                       image.arr, c_dim_t(w0),
+                                       c_dim_t(w1), edge_pad.value))
     return output
 
 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):
     """
     output = Array()
     safe_call(backend.get().af_minfilt(ct.pointer(output.arr),
-                                       image.arr, ct.c_longlong(w_len),
-                                       ct.c_longlong(w_wid), edge_pad.value))
+                                       image.arr, c_dim_t(w_len),
+                                       c_dim_t(w_wid), edge_pad.value))
     return output
 
 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):
     """
     output = Array()
     safe_call(backend.get().af_maxfilt(ct.pointer(output.arr),
-                                       image.arr, ct.c_longlong(w_len),
-                                       ct.c_longlong(w_wid), edge_pad.value))
+                                       image.arr, c_dim_t(w_len),
+                                       c_dim_t(w_wid), edge_pad.value))
     return output
 
 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):
 
     out = Array()
     safe_call(backend.get().af_unwrap(ct.pointer(out.arr), image.arr,
-                                      ct.c_longlong(wx), ct.c_longlong(wy),
-                                      ct.c_longlong(sx), ct.c_longlong(sy),
-                                      ct.c_longlong(px), ct.c_longlong(py),
+                                      c_dim_t(wx), c_dim_t(wy),
+                                      c_dim_t(sx), c_dim_t(sy),
+                                      c_dim_t(px), c_dim_t(py),
                                       is_column))
     return out
 
@@ -1078,10 +1078,10 @@ def wrap(a, ox, oy, wx, wy, sx, sy, px=0, py=0, is_column=True):
 
     out = Array()
     safe_call(backend.get().af_wrap(ct.pointer(out.arr), a.arr,
-                                    ct.c_longlong(ox), ct.c_longlong(oy),
-                                    ct.c_longlong(wx), ct.c_longlong(wy),
-                                    ct.c_longlong(sx), ct.c_longlong(sy),
-                                    ct.c_longlong(px), ct.c_longlong(py),
+                                    c_dim_t(ox), c_dim_t(oy),
+                                    c_dim_t(wx), c_dim_t(wy),
+                                    c_dim_t(sx), c_dim_t(sy),
+                                    c_dim_t(px), c_dim_t(py),
                                     is_column))
     return out
 
diff --git a/arrayfire/library.py b/arrayfire/library.py
index 5aa46ba..184bcc3 100644
--- a/arrayfire/library.py
+++ b/arrayfire/library.py
@@ -14,6 +14,19 @@ module containing enums and other constants from arrayfire library
 import platform
 import ctypes as ct
 
+# Work around for unexpected architectures
+if 'c_dim_t_forced' in globals():
+    global c_dim_t_forced
+    c_dim_t = c_dim_t_forced
+else:
+    # dim_t is long long by default
+    c_dim_t = ct.c_longlong
+    # Change to int for 32 bit x86 and amr architectures
+    if (platform.architecture()[0][0:2] == '32' and
+        (platform.machine()[-2:] == '86' or
+         platform.machine()[0:3] == 'arm')):
+        c_dim_t = ct.c_int
+
 try:
     from enum import Enum as _Enum
     def _Enum_Type(v):
diff --git a/arrayfire/signal.py b/arrayfire/signal.py
index b663869..f201a23 100644
--- a/arrayfire/signal.py
+++ b/arrayfire/signal.py
@@ -127,7 +127,7 @@ def fft(signal, dim0 = None , scale = None):
         scale = 1.0
 
     output = Array()
-    safe_call(backend.get().af_fft(ct.pointer(output.arr), signal.arr, ct.c_double(scale), ct.c_longlong(dim0)))
+    safe_call(backend.get().af_fft(ct.pointer(output.arr), signal.arr, ct.c_double(scale), c_dim_t(dim0)))
     return output
 
 def fft2(signal, dim0 = None, dim1 = None , scale = None):
@@ -170,7 +170,7 @@ def fft2(signal, dim0 = None, dim1 = None , scale = None):
 
     output = Array()
     safe_call(backend.get().af_fft2(ct.pointer(output.arr), signal.arr, ct.c_double(scale),
-                                    ct.c_longlong(dim0), ct.c_longlong(dim1)))
+                                    c_dim_t(dim0), c_dim_t(dim1)))
     return output
 
 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):
 
     output = Array()
     safe_call(backend.get().af_fft3(ct.pointer(output.arr), signal.arr, ct.c_double(scale),
-                                    ct.c_longlong(dim0), ct.c_longlong(dim1), ct.c_longlong(dim2)))
+                                    c_dim_t(dim0), c_dim_t(dim1), c_dim_t(dim2)))
     return output
 
 def ifft(signal, dim0 = None , scale = None):
@@ -261,7 +261,7 @@ def ifft(signal, dim0 = None , scale = None):
         scale = 1.0/float(dim0)
 
     output = Array()
-    safe_call(backend.get().af_ifft(ct.pointer(output.arr), signal.arr, ct.c_double(scale), ct.c_longlong(dim0)))
+    safe_call(backend.get().af_ifft(ct.pointer(output.arr), signal.arr, ct.c_double(scale), c_dim_t(dim0)))
     return output
 
 def ifft2(signal, dim0 = None, dim1 = None , scale = None):
@@ -312,7 +312,7 @@ def ifft2(signal, dim0 = None, dim1 = None , scale = None):
 
     output = Array()
     safe_call(backend.get().af_ifft2(ct.pointer(output.arr), signal.arr, ct.c_double(scale),
-                                     ct.c_longlong(dim0), ct.c_longlong(dim1)))
+                                     c_dim_t(dim0), c_dim_t(dim1)))
     return output
 
 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):
 
     output = Array()
     safe_call(backend.get().af_ifft3(ct.pointer(output.arr), signal.arr, ct.c_double(scale),
-                                     ct.c_longlong(dim0), ct.c_longlong(dim1), ct.c_longlong(dim2)))
+                                     c_dim_t(dim0), c_dim_t(dim1), c_dim_t(dim2)))
     return output
 
 def fft_inplace(signal, scale = None):
@@ -539,7 +539,7 @@ def fft_r2c(signal, dim0 = None , scale = None):
         scale = 1.0
 
     output = Array()
-    safe_call(backend.get().af_fft_r2c(ct.pointer(output.arr), signal.arr, ct.c_double(scale), ct.c_longlong(dim0)))
+    safe_call(backend.get().af_fft_r2c(ct.pointer(output.arr), signal.arr, ct.c_double(scale), c_dim_t(dim0)))
     return output
 
 def fft2_r2c(signal, dim0 = None, dim1 = None , scale = None):
@@ -582,7 +582,7 @@ def fft2_r2c(signal, dim0 = None, dim1 = None , scale = None):
 
     output = Array()
     safe_call(backend.get().af_fft2_r2c(ct.pointer(output.arr), signal.arr, ct.c_double(scale),
-                                        ct.c_longlong(dim0), ct.c_longlong(dim1)))
+                                        c_dim_t(dim0), c_dim_t(dim1)))
     return output
 
 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):
 
     output = Array()
     safe_call(backend.get().af_fft3_r2c(ct.pointer(output.arr), signal.arr, ct.c_double(scale),
-                                        ct.c_longlong(dim0), ct.c_longlong(dim1), ct.c_longlong(dim2)))
+                                        c_dim_t(dim0), c_dim_t(dim1), c_dim_t(dim2)))
     return output
 
 def _get_c2r_dim(dim, is_odd):
diff --git a/arrayfire/util.py b/arrayfire/util.py
index ae08e29..f5c37ee 100644
--- a/arrayfire/util.py
+++ b/arrayfire/util.py
@@ -11,7 +11,7 @@ from .library import *
 import numbers
 
 def dim4(d0=1, d1=1, d2=1, d3=1):
-    c_dim4 = ct.c_longlong * 4
+    c_dim4 = c_dim_t * 4
     out = c_dim4(1, 1, 1, 1)
 
     for i, dim in enumerate((d0, d1, d2, d3)):
@@ -70,7 +70,7 @@ def to_str(c_str):
 def safe_call(af_error):
     if (af_error != ERR.NONE.value):
         err_str = ct.c_char_p(0)
-        err_len = ct.c_longlong(0)
+        err_len = c_dim_t(0)
         backend.get().af_get_last_error(ct.pointer(err_str), ct.pointer(err_len))
         raise RuntimeError(to_str(err_str))
 
diff --git a/arrayfire/vision.py b/arrayfire/vision.py
index e605865..6cc6914 100644
--- a/arrayfire/vision.py
+++ b/arrayfire/vision.py
@@ -166,7 +166,7 @@ def hamming_matcher(query, database, dim = 0, num_nearest = 1):
     dist = Array()
     safe_call(backend.get().af_hamming_matcher(ct.pointer(idx.arr), ct.pointer(dist.arr),
                                                query.arr, database.arr,
-                                               ct.c_longlong(dim), ct.c_longlong(num_nearest)))
+                                               c_dim_t(dim), c_dim_t(num_nearest)))
     return index, dist
 
 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
     dist = Array()
     safe_call(backend.get().af_nearest_neighbour(ct.pointer(idx.arr), ct.pointer(dist.arr),
                                                  query.arr, database.arr,
-                                                 ct.c_longlong(dim), ct.c_longlong(num_nearest),
+                                                 c_dim_t(dim), c_dim_t(num_nearest),
                                                  match_type.value))
     return index, dist
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/python-arrayfire.git



More information about the debian-science-commits mailing list