diff --git a/src/pystencilssfg/composer.py b/src/pystencilssfg/composer.py index fa1e8a81418bb50ac6ce064adb9b13cdc1cbe44f..efdef6679adb76e249d79f6ec734f248b4714915 100644 --- a/src/pystencilssfg/composer.py +++ b/src/pystencilssfg/composer.py @@ -1,5 +1,5 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Optional +from typing import TYPE_CHECKING, Optional, Sequence from abc import ABC, abstractmethod from pystencils import Field @@ -9,7 +9,7 @@ from .tree import SfgCallTreeNode, SfgKernelCallNode, SfgStatements, SfgSequence from .tree.deferred_nodes import SfgDeferredFieldMapping from .tree.conditional import SfgCondition, SfgCustomCondition, SfgBranch from .source_components import SfgFunction, SfgHeaderInclude, SfgKernelNamespace, SfgKernelHandle -from .source_concepts import SrcField, TypedSymbolOrObject +from .source_concepts import SrcField, TypedSymbolOrObject, SrcVector if TYPE_CHECKING: from .context import SfgContext @@ -92,6 +92,11 @@ class SfgComposer: def map_param(self, lhs: TypedSymbolOrObject, rhs: TypedSymbolOrObject, mapping: str): return SfgStatements(mapping, (lhs,), (rhs,)) + def map_vector(self, lhs_components: Sequence[TypedSymbolOrObject], rhs: SrcVector): + return make_sequence(*( + rhs.extract_component(dest, coord) for coord, dest in enumerate(lhs_components) + )) + class SfgNodeBuilder(ABC): @abstractmethod diff --git a/src/pystencilssfg/source_components.py b/src/pystencilssfg/source_components.py index 9c656ca66112cb51a095ba32b56c979db7125ee2..ee60b8ab63e0ce7b114dffbfd09c36a1dfcc72b6 100644 --- a/src/pystencilssfg/source_components.py +++ b/src/pystencilssfg/source_components.py @@ -75,7 +75,7 @@ class SfgKernelNamespace: def create(self, assignments, name: str | None = None, config: CreateKernelConfig | None = None): if config is None: config = CreateKernelConfig() - + if name is not None: if name in self._asts: raise ValueError(f"Duplicate ASTs: An AST with name {name} already exists in namespace {self._name}")