muMLE/examples/schedule/RuleExecuter.py
2025-04-24 12:23:07 +02:00

49 lines
1.7 KiB
Python

from concrete_syntax.textual_od.renderer import render_od
import pprint
from typing import Generator, Callable, Any
from uuid import UUID
import functools
from api.od import ODAPI
from concrete_syntax.common import indent
from transformation.matcher import match_od
from transformation.rewriter import rewrite
from transformation.cloner import clone_od
from util.timer import Timer
from util.loader import parse_and_check
class RuleExecuter:
def __init__(self, state, mm: UUID, mm_ramified: UUID, eval_context={}):
self.state = state
self.mm = mm
self.mm_ramified = mm_ramified
self.eval_context = eval_context
# Generates matches.
# Every match is a dictionary with entries LHS_element_name -> model_element_name
def match_rule(self, m: UUID, lhs: UUID, *, pivot:dict[Any, Any]):
lhs_matcher = match_od(self.state,
host_m=m,
host_mm=self.mm,
pattern_m=lhs,
pattern_mm=self.mm_ramified,
eval_context=self.eval_context,
pivot= pivot,
)
return lhs_matcher
def rewrite_rule(self, m: UUID, rhs: UUID, *, pivot:dict[Any, Any]):
yield rewrite(self.state,
rhs_m=rhs,
pattern_mm=self.mm_ramified,
lhs_match=pivot,
host_m=m,
host_mm=self.mm,
eval_context=self.eval_context,
)
def load_match(self, file: str):
with open(file, "r") as f:
return parse_and_check(self.state, f.read(), self.mm_ramified, file)