Merge remote-tracking branch 'origin/master' into development

# Conflicts:
#	api/od.py
This commit is contained in:
Inte Vleminckx 2025-06-03 16:25:24 +02:00
commit 9475b1fdc5
38 changed files with 1028 additions and 15 deletions

View file

@ -0,0 +1,66 @@
start:Start
end:End
transitions:Match{
file = "operational_semantics/transition";
}
d:Data_modify
{
modify_dict = '
{
"tr": "t"
}';
}
nac_input_without:Match{
file = "operational_semantics/all_input_have_token";
n = "1";
}
inputs:Match{
file = "operational_semantics/all_inputs";
}
rewrite_incoming:Rewrite
{
file = "operational_semantics/remove_incoming";
}
loop_trans:Loop
loop_input:Loop
p:Print
{
event = True;
label = "transition: ";
}
p2:Print
{
event = True;
label = "inputs: ";
}
:Exec_con(start -> transitions){gate_from = 0;gate_to = 0;}
:Exec_con(transitions -> end){gate_from = 1;gate_to = 0;}
:Exec_con(transitions -> loop_trans){gate_from = 0;gate_to = 0;}
:Exec_con(loop_trans -> nac_input_without){gate_from = 0;gate_to = 0;}
[//]: # (:Exec_con(nac_input_without -> loop_trans){gate_from = 0;gate_to = 0;})
:Exec_con(nac_input_without -> inputs){gate_from = 1;gate_to = 0;}
:Exec_con(inputs -> loop_input){gate_from = 0;gate_to = 0;}
:Exec_con(inputs -> loop_trans){gate_from = 1;gate_to = 0;}
:Exec_con(loop_trans -> end){gate_from = 1;gate_to = 0;}
:Data_con(transitions -> loop_trans)
:Data_con(nac_input_without -> p)
:Data_con(d -> nac_input_without)
:Data_con(loop_trans -> d)
:Data_con(loop_trans -> rewrite_incoming)

View file

@ -0,0 +1,13 @@
# A place with no tokens:
p:RAM_PNPlace
ps:RAM_PNPlaceState {
RAM_numTokens = `get_value(this) == 0`;
}
:RAM_pn_of (ps -> p)
# An incoming arc from that place to our transition:
t:RAM_PNTransition
:RAM_arc (p -> t)

View file

@ -0,0 +1,13 @@
# A place with no tokens:
p:RAM_PNPlace
ps:RAM_PNPlaceState {
RAM_numTokens = `True`;
}
:RAM_pn_of (ps -> p)
# An incoming arc from that place to our transition:
t:RAM_PNTransition
:RAM_arc (p -> t)

View file

@ -0,0 +1,13 @@
# A place with no tokens:
p:RAM_PNPlace
ps:RAM_PNPlaceState {
RAM_numTokens = `True`;
}
:RAM_pn_of (ps -> p)
# An incoming arc from that place to our transition:
t:RAM_PNTransition
:RAM_arc (t -> p)

View file

@ -0,0 +1,13 @@
# A place with no tokens:
p:RAM_PNPlace
ps:RAM_PNPlaceState {
RAM_numTokens = `set_value(this, get_value(this) + 1)`;
}
:RAM_pn_of (ps -> p)
# An incoming arc from that place to our transition:
t:RAM_PNTransition
:RAM_arc (t -> p)

View file

@ -1 +1 @@
t:RAM_PNTransition
t:RAM_PNTransition

View file

@ -0,0 +1 @@
tr:RAM_PNTransition

View file

@ -1,3 +1,4 @@
from examples.schedule.RuleExecuter import RuleExecuter
from state.devstate import DevState
from api.od import ODAPI
from concrete_syntax.textual_od.renderer import render_od
@ -9,6 +10,10 @@ from transformation.ramify import ramify
from examples.semantics.operational import simulator
from examples.petrinet.renderer import show_petri_net
from examples.schedule.ScheduledActionGenerator import *
from examples.schedule.RuleExecuter import *
if __name__ == "__main__":
import os
@ -46,20 +51,25 @@ if __name__ == "__main__":
mm_rt_ramified,
["fire_transition"]) # only 1 rule :(
matcher_rewriter = RuleMatcherRewriter(state, mm_rt, mm_rt_ramified)
action_generator = ActionGenerator(matcher_rewriter, rules)
# matcher_rewriter = RuleMatcherRewriter(state, mm_rt, mm_rt_ramified)
# action_generator = ActionGenerator(matcher_rewriter, rules)
matcher_rewriter2 = RuleExecuter(state, mm_rt, mm_rt_ramified)
action_generator = ScheduleActionGenerator(matcher_rewriter2, f"models/schedule.od")
def render_callback(od):
show_petri_net(od)
# return render_od(state, od.m, od.mm)
return render_od_jinja2(state, od.m, od.mm)
sim = simulator.Simulator(
action_generator.generate_dot()
sim = simulator.MinimalSimulator(
action_generator=action_generator,
decision_maker=simulator.InteractiveDecisionMaker(auto_proceed=False),
# decision_maker=simulator.RandomDecisionMaker(seed=0),
renderer=render_callback,
termination_condition=action_generator.termination_condition,
# renderer=lambda od: render_od(state, od.m, od.mm),
)
sim.run(ODAPI(state, m_rt_initial, mm_rt))
sim.run(ODAPI(state, m_rt_initial, mm_rt))