diff --git a/gpyfft/fft.py b/gpyfft/fft.py index be20b5b..2c886a1 100644 --- a/gpyfft/fft.py +++ b/gpyfft/fft.py @@ -25,7 +25,7 @@ def __init__(self, context, queue, in_array, out_array=None, axes = None, t_inplace = False t_strides_out, t_distance_out, t_batchsize_out, t_shape_out, foo = self.calculate_transform_strides( axes, out_array) - if in_array.base_data is out_array.base_data: + if in_array.base_data is out_array.base_data and in_array.offset == out_array.offset: t_inplace = True #assert t_batchsize_out == t_batchsize_in and t_shape == t_shape_out, 'input and output size does not match' #TODO: fails for real-to-complex @@ -196,13 +196,23 @@ def enqueue_arrays(self, data = None, result = None, forward = True, wait_for_ev # get buffer for data if data.offset != 0: - data = data._new_with_changes(data=data.base_data[data.offset:], offset=0) + buf = data.base_data + if hasattr(buf, 'buf'): + # PooledBuffer (probably) + buf = buf.buf + data = data._new_with_changes(data=buf[data.offset:], offset=0) + del buf data_buffer = data.base_data if result is not None: # get buffer for result if result.offset != 0: - result = result._new_with_changes(data=result.base_data[result.offset:], offset=0) + buf = result.base_data + if hasattr(buf, 'buf'): + # PooledBuffer (probably) + buf = buf.buf + result = result._new_with_changes(data=buf[result.offset:], offset=0) + del buf result_buffer = result.base_data events = self.plan.enqueue_transform((self.queue,), (data_buffer,), (result_buffer),