Skip to content
Snippets Groups Projects

Reduction Support

Merged Richard Angersbach requested to merge rangersbach/reductions into v2.0-dev
Compare and
5 files
+ 143
0
Compare changes
  • Side-by-side
  • Inline
Files
5
@@ -15,6 +15,7 @@ from ...sympyextensions import (
)
from ...sympyextensions.typed_sympy import TypedSymbol, CastFunc, DynamicType
from ...sympyextensions.pointers import AddressOf, mem_acc
from ...sympyextensions.reduction import ReducedAssignment
from ...field import Field, FieldType
from .context import KernelCreationContext
@@ -183,6 +184,32 @@ class FreezeExpressions:
return PsAssignment(lhs, op(lhs.clone(), rhs))
def map_ReducedAssignment(self, expr: ReducedAssignment):
lhs = self.visit(expr.lhs)
rhs = self.visit(expr.rhs)
assert isinstance(lhs, PsExpression)
assert isinstance(rhs, PsExpression)
match expr.op:
case "+=":
op = add
case "-=":
op = sub
case "*=":
op = mul
case "/=":
op = truediv
# TODO: unsure if sp.Min & sp.Max work here
case "min=":
op = sp.Min
case "max=":
op = sp.Max
case _:
raise FreezeError(f"Unsupported reduced assignment: {expr.op}.")
return PsAssignment(lhs, op(lhs.clone(), rhs)) # TODO: PsReducedAssignment?
def map_Symbol(self, spsym: sp.Symbol) -> PsSymbolExpr:
symb = self._ctx.get_symbol(spsym.name)
return PsSymbolExpr(symb)
Loading