From 720c5c0242e3b769674c6804f4a8a64bd932f1f8 Mon Sep 17 00:00:00 2001 From: Luke Campagnola Date: Mon, 13 May 2013 14:46:53 -0400 Subject: [PATCH] Fixed handling of non-native dtypes when optimizing with weave --- pyqtgraph/functions.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/pyqtgraph/functions.py b/pyqtgraph/functions.py index 5f820a9a..6c52e775 100644 --- a/pyqtgraph/functions.py +++ b/pyqtgraph/functions.py @@ -619,7 +619,15 @@ def rescaleData(data, scale, offset, dtype=None): if not USE_WEAVE: raise Exception('Weave is disabled; falling back to slower version.') - newData = np.empty((data.size,), dtype=dtype) + ## require native dtype when using weave + if not data.dtype.isnative(): + data = data.astype(data.dtype.newbyteorder('=')) + if not dtype.isnative(): + weaveDtype = dtype.newbyteorder('=') + else: + weaveDtype = dtype + + newData = np.empty((data.size,), dtype=weaveDtype) flat = np.ascontiguousarray(data).reshape(data.size) size = data.size @@ -631,6 +639,8 @@ def rescaleData(data, scale, offset, dtype=None): } """ scipy.weave.inline(code, ['flat', 'newData', 'size', 'offset', 'scale'], compiler='gcc') + if dtype != weaveDtype: + newData = newData.astype(dtype) data = newData.reshape(data.shape) except: if USE_WEAVE: @@ -839,7 +849,6 @@ def makeARGB(data, lut=None, levels=None, scale=None, useRGBA=False): if minVal == maxVal: maxVal += 1e-16 data = rescaleData(data, scale/(maxVal-minVal), minVal, dtype=int) - prof.mark('2') @@ -849,7 +858,6 @@ def makeARGB(data, lut=None, levels=None, scale=None, useRGBA=False): else: if data.dtype is not np.ubyte: data = np.clip(data, 0, 255).astype(np.ubyte) - prof.mark('3')