Skip to content
Snippets Groups Projects
test_classes.py 1.86 KiB
Newer Older
Frederik Hennig's avatar
Frederik Hennig committed
# type: ignore
from pystencilssfg import SourceFileGenerator, SfgConfiguration, SfgComposer
from pystencilssfg.configuration import SfgCodeStyle
from pystencilssfg.types import SrcType
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 ctx:
    sfg = SfgComposer(ctx)
Frederik Hennig's avatar
Frederik Hennig committed

    @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),
Frederik Hennig's avatar
Frederik Hennig committed
        visibility=SfgVisibility.PUBLIC
    ))

    cls.add_method(SfgMethod(
        "inlineConst",
        sfg.seq(
            "return -1.0;"
        ),
        cls,
        visibility=SfgVisibility.PUBLIC,
        return_type=SrcType("double"),
        inline=True,
        const=True
    ))

    cls.add_method(SfgMethod(
        "awesomeMethod",
        sfg.seq(
            "return 2.0f;"
        ),
        cls,
        visibility=SfgVisibility.PRIVATE,
        return_type=SrcType("float"),
        inline=False,
        const=True
    ))

Frederik Hennig's avatar
Frederik Hennig committed
    cls.add_member_variable(
        SfgMemberVariable(
            "stuff", "std::vector< int >",
Frederik Hennig's avatar
Frederik Hennig committed
            SfgVisibility.PRIVATE
        )
    )

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

    sfg.context.add_class(cls)