From 9b8750b507ab104526dbf6fc241c57c47e5dcb0d Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Sun, 16 May 2021 13:34:29 -0500
Subject: [PATCH] Array._new_with_changes: Use array constructor fast path if
 possible

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

diff --git a/pyopencl/array.py b/pyopencl/array.py
index 7f6f1cb5..40187cb8 100644
--- a/pyopencl/array.py
+++ b/pyopencl/array.py
@@ -585,8 +585,14 @@ class Array:
         """
         :arg data: *None* means allocate a new array.
         """
+        fast = True
+        size = self.size
         if shape is None:
             shape = self.shape
+        else:
+            fast = False
+            size = None
+
         if dtype is None:
             dtype = self.dtype
         if strides is None:
@@ -605,14 +611,10 @@ class Array:
         else:
             events = self.events
 
-        if queue is not None:
-            return Array(queue, shape, dtype, allocator=allocator,
-                    strides=strides, data=data, offset=offset,
-                    events=events)
-        else:
-            return Array(self.context, shape, dtype,
-                    strides=strides, data=data, offset=offset,
-                    events=events, allocator=allocator)
+        return Array(None, shape, dtype, allocator=allocator,
+                strides=strides, data=data, offset=offset,
+                events=events,
+                _fast=fast, _context=self.context, _queue=queue, _size=size)
 
     def with_queue(self, queue):
         """Return a copy of *self* with the default queue set to *queue*.
-- 
GitLab