From 69e8ca3f9ee2e3abd75b6f154e15c450ad34a889 Mon Sep 17 00:00:00 2001
From: Stephan Seitz <stephan.seitz@fau.de>
Date: Tue, 17 Sep 2019 19:43:48 +0200
Subject: [PATCH] Sort fields in tf-mad

---
 src/pystencils_autodiff/_autodiff.py | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/src/pystencils_autodiff/_autodiff.py b/src/pystencils_autodiff/_autodiff.py
index b9755a4..b8f16fe 100644
--- a/src/pystencils_autodiff/_autodiff.py
+++ b/src/pystencils_autodiff/_autodiff.py
@@ -206,17 +206,17 @@ Backward:
             forward_assignments = ps.AssignmentCollection(
                 forward_assignments, [])
 
-        read_field_accesses = [
-            a for a in forward_assignments.free_symbols if isinstance(a, ps.Field.Access)]
-        write_field_accesses = [a.lhs for a in forward_assignments]
+        read_field_accesses = sorted([
+            a for a in forward_assignments.free_symbols if isinstance(a, ps.Field.Access)], key=lambda x: str(x))
+        write_field_accesses = sorted([a.lhs for a in forward_assignments], key=lambda x: str(x))
         read_fields = {s.field for s in read_field_accesses}
         write_fields = {s.field for s in write_field_accesses}
 
         self._forward_assignments = forward_assignments
         self._forward_read_accesses = read_field_accesses
         self._forward_write_accesses = write_field_accesses
-        self._forward_input_fields = list(read_fields)
-        self._forward_output_fields = list(write_fields)
+        self._forward_input_fields = sorted(list(read_fields), key=lambda x: str(x))
+        self._forward_output_fields = sorted(list(write_fields), key=lambda x: str(x))
 
         read_field_accesses = [
             a for a in forward_assignments.free_symbols if isinstance(a, ps.Field.Access)]
@@ -373,24 +373,28 @@ Backward:
     def forward_ast_cpu(self):
         if not self._forward_ast_cpu:
             self._forward_ast_cpu = ps.create_kernel(self._forward_assignments, **self._kwargs)
+        self._forward_ast_cpu.function_name = self.op_name + '_forward_cpu'
         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)
+        self._forward_ast_gpu.function_name = self.op_name + '_forward_gpu'
         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)
+        self._backward_ast_cpu.function_name = self.op_name + '_backward_cpu'
         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)
+        self._backward_ast_gpu.function_name = self.op_name + '_backward_gpu'
         return self._backward_ast_gpu
 
     @property
-- 
GitLab