From 918896467dc09beebfb64dbcb5e569146391efd5 Mon Sep 17 00:00:00 2001 From: Frederik Hennig <frederik.hennig@fau.de> Date: Wed, 16 Oct 2024 22:44:22 +0200 Subject: [PATCH] bugfixes + more AugExpr in interfaces --- src/pystencilssfg/composer/basic_composer.py | 5 ++++- src/pystencilssfg/ir/source_components.py | 2 +- src/pystencilssfg/lang/expressions.py | 22 +++++++++++++++++++- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/pystencilssfg/composer/basic_composer.py b/src/pystencilssfg/composer/basic_composer.py index 5993802..9796624 100644 --- a/src/pystencilssfg/composer/basic_composer.py +++ b/src/pystencilssfg/composer/basic_composer.py @@ -407,7 +407,10 @@ def make_sequence(*args: SequencerArg) -> SfgSequence: class SfgInplaceInitBuilder(SfgNodeBuilder): - def __init__(self, lhs: SfgVar) -> None: + def __init__(self, lhs: SfgVar | AugExpr) -> None: + if isinstance(lhs, AugExpr): + lhs = lhs.as_variable() + self._lhs: SfgVar = lhs self._depends: set[SfgVar] = set() self._rhs: str | None = None diff --git a/src/pystencilssfg/ir/source_components.py b/src/pystencilssfg/ir/source_components.py index 06788cf..351c989 100644 --- a/src/pystencilssfg/ir/source_components.py +++ b/src/pystencilssfg/ir/source_components.py @@ -197,7 +197,7 @@ class SfgKernelHandle: @property def fields(self): - return self.fields + return self._fields def get_kernel_function(self) -> KernelFunction: return self._namespace.get_kernel_function(self) diff --git a/src/pystencilssfg/lang/expressions.py b/src/pystencilssfg/lang/expressions.py index c456194..579646f 100644 --- a/src/pystencilssfg/lang/expressions.py +++ b/src/pystencilssfg/lang/expressions.py @@ -48,16 +48,27 @@ class DependentExpression: def __add__(self, other: DependentExpression): return DependentExpression(self.expr + other.expr, self.depends | other.depends) + + +class VarExpr(DependentExpression): + def __init__(self, var: SfgVar): + self._var = var + super().__init__(var.name, (var,)) + + @property + def variable(self) -> SfgVar: + return self._var class AugExpr: def __init__(self, dtype: PsType | None = None): self._dtype = dtype self._bound: DependentExpression | None = None + self._is_variable = False def var(self, name: str): v = SfgVar(name, self.get_dtype(), self.required_includes) - expr = DependentExpression(name, (v,)) + expr = VarExpr(v) return self._bind(expr) @staticmethod @@ -98,6 +109,15 @@ class AugExpr: raise SfgException("This AugExpr has no known data type.") return self._dtype + + @property + def is_variable(self) -> bool: + return isinstance(self._bound, VarExpr) + + def as_variable(self) -> SfgVar: + if not isinstance(self._bound, VarExpr): + raise SfgException("This expression is not a variable") + return self._bound.variable @property def required_includes(self) -> set[SfgHeaderInclude]: -- GitLab