From 2da5c294102053fdbd05c13b8d4464d5ae5828e9 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Wed, 1 Jul 2020 15:49:51 -0500 Subject: [PATCH] Implement minimum/maximum in PyOpenCL fake numpy --- meshmode/array_context.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/meshmode/array_context.py b/meshmode/array_context.py index a0087ea1..4c049ead 100644 --- a/meshmode/array_context.py +++ b/meshmode/array_context.py @@ -53,7 +53,7 @@ def make_loopy_program(domains, statements, kernel_data=["..."], # {{{ ArrayContext -class _FakeNumpyNamespace: +class _BaseFakeNumpyNamespace: def __init__(self, array_context): self._array_context = array_context @@ -104,7 +104,10 @@ class ArrayContext: """ def __init__(self): - self.np = _FakeNumpyNamespace(self) + self.np = self._get_fake_numpy_namespace() + + def _get_fake_numpy_namespace(self): + return _BaseFakeNumpyNamespace(self) def empty(self, shape, dtype): raise NotImplementedError @@ -204,6 +207,15 @@ class ArrayContext: # {{{ PyOpenCLArrayContext +class _PyOpenCLFakeNumpyNamespace(_BaseFakeNumpyNamespace): + def __getattr__(self, name): + if name in ["minimum", "maximum"]: + import pyopencl.array as cl_array + return getattr(cl_array, name) + + return super().__getattr__(name) + + class PyOpenCLArrayContext(ArrayContext): """ A :class:`ArrayContext` that uses :class:`pyopencl.array.Array` instances @@ -226,6 +238,9 @@ class PyOpenCLArrayContext(ArrayContext): self.queue = queue self.allocator = allocator + def _get_fake_numpy_namespace(self): + return _PyOpenCLFakeNumpyNamespace(self) + # {{{ ArrayContext interface def empty(self, shape, dtype): -- GitLab