From 22fef1f4cc28f7581777085d42c72e7208f21ac2 Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Sun, 16 May 2021 13:33:39 -0500
Subject: [PATCH] Array._new_like_me: Use constructor fast path if possible

---
 pyopencl/array.py | 24 ++++++++++++++----------
 1 file changed, 14 insertions(+), 10 deletions(-)

diff --git a/pyopencl/array.py b/pyopencl/array.py
index 15979e15..7f6f1cb5 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
-- 
GitLab