From 34c303c5af442d1f7c1a5fb8e33573547529cb12 Mon Sep 17 00:00:00 2001
From: Stephan Seitz <stephan.seitz@fau.de>
Date: Mon, 16 Sep 2019 13:06:01 +0200
Subject: [PATCH] Add ast properties to pystencils_autodiff.AutoDiffOp

---
 src/pystencils_autodiff/_autodiff.py | 36 +++++++++++++++++++++-------
 1 file changed, 28 insertions(+), 8 deletions(-)

diff --git a/src/pystencils_autodiff/_autodiff.py b/src/pystencils_autodiff/_autodiff.py
index 1195b30..7735dcc 100644
--- a/src/pystencils_autodiff/_autodiff.py
+++ b/src/pystencils_autodiff/_autodiff.py
@@ -365,32 +365,52 @@ Backward:
     def backward_read_accesses(self):
         return [a for a in self.backward_assignments.free_symbols if isinstance(a, ps.Field.Access)]
 
+    @property
+    def forward_ast_cpu(self):
+        if not self._forward_ast_cpu:
+            self._forward_ast_cpu = ps.create_kernel(self._forward_assignments, **self._kwargs)
+        return self._forward_ast_cpu
+
+    @property
+    def forward_ast_gpu(self):
+        if not self._forward_ast_gpu:
+            self._forward_ast_gpu = ps.create_kernel(self._forward_assignments, target='gpu', **self._kwargs)
+        return self._forward_ast_gpu
+
+    @property
+    def backward_ast_cpu(self):
+        if not self._backward_ast_cpu:
+            self._backward_ast_cpu = ps.create_kernel(self._backward_assignments, target='cpu', **self._kwargs)
+        return self._backward_ast_cpu
+
+    @property
+    def backward_ast_gpu(self):
+        if not self._backward_ast_gpu:
+            self._backward_ast_gpu = ps.create_kernel(self._backward_assignments, target='gpu', **self._kwargs)
+        return self._backward_ast_gpu
+
     @property
     def forward_kernel_cpu(self):
         if not self._forward_kernel_cpu:
-            self._forward_kernel_cpu = ps.create_kernel(
-                self._forward_assignments, **self._kwargs).compile()
+            self._forward_kernel_cpu = self.forward_ast_cpu.compile()
         return self._forward_kernel_cpu
 
     @property
     def forward_kernel_gpu(self):
         if not self._forward_kernel_gpu:
-            self._forward_kernel_gpu = ps.create_kernel(
-                self._forward_assignments, target='gpu', **self._kwargs).compile()
+            self._forward_kernel_gpu = self.forward_ast_gpu.compile()
         return self._forward_kernel_gpu
 
     @property
     def backward_kernel_cpu(self):
         if not self._backward_kernel_cpu:
-            self._backward_kernel_cpu = ps.create_kernel(
-                self._backward_assignments, target='cpu', **self._kwargs).compile()
+            self._backward_kernel_cpu = self.backward_ast_cpu.compile()
         return self._backward_kernel_cpu
 
     @property
     def backward_kernel_gpu(self):
         if not self._backward_kernel_gpu:
-            self._backward_kernel_gpu = ps.create_kernel(
-                self._backward_assignments, target='gpu', **self._kwargs).compile()
+            self._backward_kernel_gpu = self.backward_ast_gpu.compile()
         return self._backward_kernel_gpu
 
     @property
-- 
GitLab