From 71cee19ead281fbf0b6637b8d97ddba7e40f71bd Mon Sep 17 00:00:00 2001
From: Michael Kuron <mkuron@icp.uni-stuttgart.de>
Date: Tue, 12 May 2020 19:56:12 +0200
Subject: [PATCH] pystencils_walberla: sort generated field extractions and
 parameter access

That way, their order is deterministic and the generated code does not change every time the generation is run.
---
 python/pystencils_walberla/jinja_filters.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/python/pystencils_walberla/jinja_filters.py b/python/pystencils_walberla/jinja_filters.py
index ee79ef903..680da5398 100644
--- a/python/pystencils_walberla/jinja_filters.py
+++ b/python/pystencils_walberla/jinja_filters.py
@@ -163,18 +163,18 @@ def generate_block_data_to_field_extraction(ctx, kernel_info, parameters_to_igno
     }
     result = "\n".join(
         field_extraction_code(field=field, is_temporary=False, update_member=update_member, **args) for field in
-        normal_fields) + "\n"
+        normal_fields)
     result += "\n".join(
         field_extraction_code(field=field, is_temporary=True, update_member=update_member, **args) for field in
         temporary_fields)
-    return result
+    return "\n".join(sorted(result.split("\n")))
 
 
 def generate_refs_for_kernel_parameters(kernel_info, prefix, parameters_to_ignore=(), ignore_fields=False):
     symbols = {p.field_name for p in kernel_info.parameters if p.is_field_pointer and not ignore_fields}
     symbols.update(p.symbol.name for p in kernel_info.parameters if not p.is_field_parameter)
     symbols.difference_update(parameters_to_ignore)
-    return "\n".join("auto & %s = %s%s_;" % (s, prefix, s) for s in symbols)
+    return "\n".join(sorted("auto & %s = %s%s_;" % (s, prefix, s) for s in symbols))
 
 
 @jinja2.contextfilter
@@ -365,7 +365,7 @@ def generate_members(ctx, kernel_info, parameters_to_ignore=(), only_fields=Fals
     if hasattr(kernel_info, 'varying_parameters'):
         result.extend(["%s %s_;" % e for e in kernel_info.varying_parameters])
 
-    return "\n".join(result)
+    return "\n".join(sorted(result))
 
 
 def generate_destructor(kernel_info, class_name):
-- 
GitLab