Skip to content
Snippets Groups Projects
test_classes.py 1.24 KiB
Newer Older
Frederik Hennig's avatar
Frederik Hennig committed
# type: ignore
from pystencilssfg import SourceFileGenerator, SfgConfiguration
from pystencilssfg.configuration import SfgCodeStyle
Frederik Hennig's avatar
Frederik Hennig committed
from pystencilssfg.source_concepts import SrcObject
from pystencilssfg.source_components import SfgClass, SfgMemberVariable, SfgConstructor, SfgMethod, SfgVisibility

from pystencils import fields, kernel

sfg_config = SfgConfiguration(
    output_directory="out/test_classes",
    outer_namespace="gen_code",
    codestyle=SfgCodeStyle(
        code_style="Mozilla",
        force_clang_format=True
    )
Frederik Hennig's avatar
Frederik Hennig committed
)

f, g = fields("f, g(1): double[2D]")

with SourceFileGenerator(sfg_config) as sfg:

    @kernel
    def assignments():
        f[0,0] @= 3 * g[0,0]

    khandle = sfg.kernels.create(assignments)

    cls = SfgClass("MyClass")
    cls.add_method(SfgMethod(
        "callKernel",
        sfg.call(khandle),
        visibility=SfgVisibility.PUBLIC
    ))

    cls.add_member_variable(
        SfgMemberVariable(
            "stuff", "std::vector< int >",
            SfgVisibility.PRIVATE
        )
    )

    cls.add_constructor(
        SfgConstructor(
            [SrcObject("std::vector< int > &", "stuff")],
            ["stuff_(stuff)"],
            visibility=SfgVisibility.PUBLIC
        )
    )

    sfg.context.add_class(cls)