From 53fc7ca4c0ad2e601a09050b3273781ded65542a Mon Sep 17 00:00:00 2001
From: zy69guqi <richard.angersbach@fau.de>
Date: Wed, 15 Jan 2025 17:50:51 +0100
Subject: [PATCH] Add dictionary of reduced symbols to codegen context

---
 .../backend/kernelcreation/context.py           | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/src/pystencils/backend/kernelcreation/context.py b/src/pystencils/backend/kernelcreation/context.py
index 4b4604a21..b9df6f682 100644
--- a/src/pystencils/backend/kernelcreation/context.py
+++ b/src/pystencils/backend/kernelcreation/context.py
@@ -75,7 +75,7 @@ class KernelCreationContext:
         self._symbol_ctr_pattern = re.compile(r"__[0-9]+$")
         self._symbol_dup_table: defaultdict[str, int] = defaultdict(lambda: 0)
 
-        # TODO: add list of reduction symbols
+        self._symbols_with_reduction: dict[PsSymbol, ReductionSymbolProperty] = dict()
 
         self._fields_and_arrays: dict[str, FieldArrayPair] = dict()
         self._fields_collection = FieldsInKernel()
@@ -170,6 +170,21 @@ class KernelCreationContext:
 
         self._symbols[old.name] = new
 
+    def add_reduction_to_symbol(self, symbol: PsSymbol, reduction: ReductionSymbolProperty):
+        """Adds a reduction property to a symbol.
+
+        The symbol ``symbol`` should not have a reduction property and must exist in the symbol table.
+        """
+        if self.find_symbol(symbol.name) is None:
+            raise PsInternalCompilerError(
+                "add_reduction_to_symbol: Symbol does not exist in the symbol table"
+            )
+
+        if symbol not in self._symbols_with_reduction and not symbol.get_properties(ReductionSymbolProperty):
+            self._symbols_with_reduction[symbol] = reduction
+        else:
+            raise PsInternalCompilerError(f"add_reduction_to_symbol: Symbol {symbol.name} already has a reduction property")
+
     def duplicate_symbol(
         self, symb: PsSymbol, new_dtype: PsType | None = None
     ) -> PsSymbol:
-- 
GitLab