From 0623bca4e5650a071957be6c185e6610f25393cf Mon Sep 17 00:00:00 2001 From: christopherngutierrez Date: Fri, 23 May 2025 10:09:29 -0700 Subject: [PATCH 01/18] modified Poly.__repr__ to print out more details. --- kerngen/high_parser/types.py | 2 +- kerngen/kernel_parser/__init__.py | 4 + kerngen/kernel_parser/parser.py | 135 +++++++++++++++++ kerngen/kerngraph.py | 67 +++++++++ kerngen/tests/test_kerngraph_parser.py | 200 +++++++++++++++++++++++++ 5 files changed, 407 insertions(+), 1 deletion(-) create mode 100644 kerngen/kernel_parser/__init__.py create mode 100644 kerngen/kernel_parser/parser.py create mode 100755 kerngen/kerngraph.py create mode 100644 kerngen/tests/test_kerngraph_parser.py diff --git a/kerngen/high_parser/types.py b/kerngen/high_parser/types.py index d618741c..f6a6ead1 100644 --- a/kerngen/high_parser/types.py +++ b/kerngen/high_parser/types.py @@ -46,7 +46,7 @@ def __call__(self, *args) -> str: return self.expand(*args) def __repr__(self) -> str: - return self.name + return f"Polys(name={self.name}, parts={self.parts}, rns={self.rns})" @classmethod def from_polys(cls, poly: "Polys", *, mode: str | None = None) -> "Polys": diff --git a/kerngen/kernel_parser/__init__.py b/kerngen/kernel_parser/__init__.py new file mode 100644 index 00000000..b4afc4c6 --- /dev/null +++ b/kerngen/kernel_parser/__init__.py @@ -0,0 +1,4 @@ +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +# Copyright (C) 2024 Intel Corporation diff --git a/kerngen/kernel_parser/parser.py b/kerngen/kernel_parser/parser.py new file mode 100644 index 00000000..f07f13c1 --- /dev/null +++ b/kerngen/kernel_parser/parser.py @@ -0,0 +1,135 @@ +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +"""Module for parsing kernel commands from Kerngen""" + +import re +from high_parser.types import Immediate, KernelContext, Polys, Context +from pisa_generators.basic import Copy, HighOp, Add, Sub, Mul, Muli +from pisa_generators.ntt import NTT, INTT +from pisa_generators.square import Square +from pisa_generators.relin import Relin +from pisa_generators.rotate import Rotate +from pisa_generators.mod import Mod, ModUp +from pisa_generators.rescale import Rescale + + +class KernelParser: + """Parser for kernel operations.""" + + @staticmethod + def parse_context(context_str: str) -> KernelContext: + """Parse the context string and return a KernelContext object.""" + context_match = re.search( + r"KernelContext\(scheme='(?P\w+)', " + + r"poly_order=(?P\w+), key_rns=(?P\w+), " + r"current_rns=(?P\w+), .*? label='(?P