diff --git a/pyopencl/array.py b/pyopencl/array.py index 15979e153e1198bc64222e59e7fc348f751d89be..7f6f1cb599bacf966adb46c0c06ca2b5cfc90967 100644 --- a/pyopencl/array.py +++ b/pyopencl/array.py @@ -983,22 +983,26 @@ class Array: dest.context, dest.dtype, src.dtype) def _new_like_me(self, dtype=None, queue=None): - strides = None - flags = None if dtype is None: dtype = self.dtype - - if dtype == self.dtype: strides = self.strides flags = self.flags + fast = True + else: + strides = None + flags = None + if dtype == self.dtype: + strides = self.strides + flags = self.flags + fast = True + else: + fast = False queue = queue or self.queue - if queue is not None: - return self.__class__(queue, self.shape, dtype, - allocator=self.allocator, strides=strides, _flags=flags) - else: - return self.__class__(self.context, self.shape, dtype, - strides=strides, allocator=self.allocator, _flags=flags) + return self.__class__(None, self.shape, dtype, + allocator=self.allocator, strides=strides, _flags=flags, + _fast=fast, + _size=self.size, _queue=queue, _context=self.context) @staticmethod @elwise_kernel_runner