From 841e40eb6238cbef38d912a5055ee3f388fc7307 Mon Sep 17 00:00:00 2001
From: Frederik Hennig <frederik.hennig@fau.de>
Date: Tue, 28 Nov 2023 14:10:31 +0100
Subject: [PATCH] Added vector extraction to composer

---
 src/pystencilssfg/composer.py          | 9 +++++++--
 src/pystencilssfg/source_components.py | 2 +-
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/pystencilssfg/composer.py b/src/pystencilssfg/composer.py
index fa1e8a8..efdef66 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 9c656ca..ee60b8a 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}")
-- 
GitLab