A fully working version of the scheduling language with added examples
This commit is contained in:
parent
ec42f74960
commit
ebfd85a666
126 changed files with 7235 additions and 981 deletions
60
transformation/schedule/templates/schedule_dot.j2
Normal file
60
transformation/schedule/templates/schedule_dot.j2
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
digraph G {
|
||||
rankdir=LR;
|
||||
compound=true;
|
||||
node [shape=rect];
|
||||
{% for node in nodes %}
|
||||
{{ node }}
|
||||
{% endfor %}
|
||||
|
||||
{% for edge in edges %}
|
||||
{{ edge }}
|
||||
{% endfor %}
|
||||
}
|
||||
|
||||
{% macro Node(label, id, ports_exec=[], ports_data=[]) %}
|
||||
subgraph cluster_{{ id }} {
|
||||
label = "{{ id }}__{{ label }}";
|
||||
style = rounded;
|
||||
input_{{ id }} [
|
||||
shape=rect;
|
||||
label= {{ Gate_Table(ports_exec[0], ports_data[0]) }}
|
||||
];
|
||||
output_{{ id }} [
|
||||
shape=rect;
|
||||
label= {{ Gate_Table(ports_exec[1], ports_data[1]) }}
|
||||
];
|
||||
input_{{ id }}->output_{{ id }} [style=invis];
|
||||
}
|
||||
{%- endmacro %}
|
||||
|
||||
{%- macro Edge(from_id, to_id, from_gate, to_gate, prefix, color) %}
|
||||
output_{{ from_id }}:{{ prefix }}_{{ from_gate }} -> input_{{ to_id }}:{{ prefix }}_{{ to_gate }} [color = {{ color }}]
|
||||
{%- endmacro %}
|
||||
|
||||
{%- macro Gate_Table(ports_exec, ports_data) %}
|
||||
|
||||
<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0">
|
||||
{% if ports_exec or ports_data %}
|
||||
{% if ports_exec %}
|
||||
<TR><TD>
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" COLOR="darkblue">
|
||||
{% for port_e in ports_exec %}
|
||||
<TR><TD PORT="e_{{ port_e }}">{{ port_e }}</TD></TR>
|
||||
{% endfor %}
|
||||
</TABLE>
|
||||
</TD></TR>
|
||||
{% endif %}
|
||||
{% if ports_data %}
|
||||
<TR><TD>
|
||||
<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="0" COLOR="green">
|
||||
{% for port_d in ports_data %}
|
||||
<TR><TD PORT="d_{{ port_d }}">{{ port_d }}</TD></TR>
|
||||
{% endfor %}
|
||||
</TABLE>
|
||||
</TD></TR>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<TR><TD>X</TD></TR>
|
||||
{% endif %}
|
||||
</TABLE>>
|
||||
{%- endmacro %}
|
||||
28
transformation/schedule/templates/schedule_muMLE.j2
Normal file
28
transformation/schedule/templates/schedule_muMLE.j2
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
{% for id, param in nodes.items() -%}
|
||||
{{ param[0] }}:{{ param[1].pop("type") }}
|
||||
{%- if param[1] %}
|
||||
{
|
||||
{% for key, value in param[1].items() %}
|
||||
{% if value %}
|
||||
{% if key in ["file"] %}
|
||||
{% set value = '"' ~ value ~ '"' %}
|
||||
{% elif key in ["custom"] %}
|
||||
{% set value = '`"' ~ value.replace('\n', '\\n') ~ '"`' %}
|
||||
{% elif key in ["action", "init"] %}
|
||||
{% set value = '\n```\n' ~ value ~ '\n```' %}
|
||||
{% elif key in ["ports", "ports_exec_in", "ports_exec_out", "ports_data_in", "ports_data_out", "rename", "delete"] %}
|
||||
{% set value = '`' ~ value.replace('\n', '\\n') ~ '`' %}
|
||||
{% endif %}
|
||||
{{ key }} = {{ value }};
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
}
|
||||
{% endif %}
|
||||
|
||||
{% endfor %}
|
||||
|
||||
{%- for edge in edges %}
|
||||
{% set source = edge[0] %}
|
||||
{% set target = edge[1] %}
|
||||
:Conn_{{ source[2] }} ({{ source[0] }} -> {{ target[0] }}) {from="{{ source[1] }}"; to="{{ target[1] }}";}
|
||||
{% endfor -%}
|
||||
51
transformation/schedule/templates/schedule_template.j2
Normal file
51
transformation/schedule/templates/schedule_template.j2
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
{% macro Start(name, ports_exec_out, ports_data_out) %}
|
||||
{{ name }} = Start({{ ports_exec_out }}, {{ ports_data_out }})
|
||||
{%- endmacro %}
|
||||
|
||||
{% macro End(name, ports_exec_in, ports_data_in) %}
|
||||
{{ name }} = End({{ ports_exec_in }}, {{ ports_data_in }})
|
||||
{%- endmacro %}
|
||||
|
||||
{% macro Match(name, file, n) %}
|
||||
{{ name }} = Match("{{ file }}", {{ n }})
|
||||
{%- endmacro %}
|
||||
|
||||
{% macro Rewrite(name, file) %}
|
||||
{{ name }} = Rewrite("{{ file }}")
|
||||
{%- endmacro %}
|
||||
|
||||
{% macro Action(name, ports_exec_in, ports_exec_out, ports_data_in, ports_data_out, action, init) %}
|
||||
{{ name }} = Action({{ ports_exec_in }}, {{ ports_exec_out }}, {{ ports_data_in }}, {{ ports_data_out }}, {{ action }}, {{ init }})
|
||||
{%- endmacro %}
|
||||
|
||||
{% macro Modify(name, rename, delete) %}
|
||||
{{ name }} = Modify({{ rename }}, {{ delete }})
|
||||
{%- endmacro %}
|
||||
|
||||
{% macro Merge(name, ports_data_in) %}
|
||||
{{ name }} = Merge({{ ports_data_in }})
|
||||
{%- endmacro %}
|
||||
|
||||
{% macro Store(name, ports) %}
|
||||
{{ name }} = Store({{ ports }})
|
||||
{%- endmacro %}
|
||||
|
||||
{% macro Schedule(name, file) %}
|
||||
{{ name }} = SubSchedule(schedular, "{{ file }}")
|
||||
{%- endmacro %}
|
||||
|
||||
{% macro Loop(name) %}
|
||||
{{ name }} = Loop()
|
||||
{%- endmacro %}
|
||||
|
||||
{% macro Print(name, label, custom) %}
|
||||
{{ name }} = Print("{{ label }}", {{ custom }})
|
||||
{%- endmacro %}
|
||||
|
||||
{% macro Conn_exec(name_from, name_to, from, to) %}
|
||||
{{ name_from }}.connect({{ name_to }},"{{ from }}","{{ to }}")
|
||||
{%- endmacro %}
|
||||
|
||||
{% macro Conn_data(name_from, name_to, from, to, event) %}
|
||||
{{ name_from }}.connect_data({{ name_to }}, "{{ from }}", "{{ to }}", {{ event }})
|
||||
{%- endmacro %}
|
||||
48
transformation/schedule/templates/schedule_template_wrap.j2
Normal file
48
transformation/schedule/templates/schedule_template_wrap.j2
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
#generated from somewhere i do not now but it here so live with it
|
||||
|
||||
from transformation.schedule.schedule_lib import *
|
||||
|
||||
class Schedule:
|
||||
def __init__(self):
|
||||
self.start: Start | None = None
|
||||
self.end: End | None = None
|
||||
self.nodes: list[DataNode] = []
|
||||
|
||||
@staticmethod
|
||||
def get_matchers():
|
||||
return [
|
||||
{% for file in match_files %}
|
||||
"{{ file }}",
|
||||
{% endfor %}
|
||||
]
|
||||
|
||||
def init_schedule(self, schedular, rule_executer, matchers):
|
||||
{% for block in blocks_start_end%}
|
||||
{{ block }}
|
||||
{% endfor %}
|
||||
self.start = {{ start }}
|
||||
self.end = {{ end }}
|
||||
{% for block in blocks%}
|
||||
{{ block }}
|
||||
{% endfor %}
|
||||
|
||||
{% for conn in exec_conn%}
|
||||
{{ conn }}
|
||||
{% endfor %}
|
||||
{% for conn_d in data_conn%}
|
||||
{{ conn_d }}
|
||||
{% endfor %}
|
||||
|
||||
{% for match in matchers %}
|
||||
{{ match["name"] }}.init_rule(matchers["{{ match["file"] }}"], rule_executer)
|
||||
{% endfor %}
|
||||
|
||||
self.nodes = [
|
||||
{% for name in blocks_name%}
|
||||
{{ name }},
|
||||
{% endfor %}
|
||||
]
|
||||
return None
|
||||
|
||||
def generate_dot(self, *args, **kwargs):
|
||||
return self.start.generate_dot(*args, **kwargs)
|
||||
Loading…
Add table
Add a link
Reference in a new issue