diff --git a/b_asic/__init__.py b/b_asic/__init__.py index e69f04987f4ff2921e57d7f0274e1c8c1e5c3ebd..7f4b9555595310ce90afde48576bef59012912b3 100644 --- a/b_asic/__init__.py +++ b/b_asic/__init__.py @@ -16,4 +16,4 @@ from b_asic.signal import * from b_asic.simulation import * from b_asic.special_operations import * from b_asic.save_load_structure import * -from b_asic.schema import * +from b_asic.schedule import * diff --git a/b_asic/schema.py b/b_asic/schedule.py similarity index 96% rename from b_asic/schema.py rename to b_asic/schedule.py index 63829e8300c319da662bdbcb5729c25fa1ed96a4..d0bb566850353bb12681b34ef0dbc12030e11eb7 100644 --- a/b_asic/schema.py +++ b/b_asic/schedule.py @@ -1,6 +1,6 @@ -"""B-ASIC Schema Module. +"""B-ASIC Schedule Module. -Contains the schema class for scheduling operations in an SFG. +Contains the schedule class for scheduling operations in an SFG. """ from collections import defaultdict @@ -17,8 +17,8 @@ from b_asic.graph_component import GraphID from b_asic.special_operations import Delay, Output -class Schema: - """Schema of an SFG with scheduled Operations.""" +class Schedule: + """Schedule of an SFG with scheduled Operations.""" _sfg: SFG _start_times: Dict[GraphID, int] @@ -28,7 +28,7 @@ class Schema: _resolution: int def __init__(self, sfg: SFG, schedule_time: Optional[int] = None, cyclic: bool = False, resolution: int = 1, scheduling_alg: str = "ASAP"): - """Construct a Schema from an SFG.""" + """Construct a Schedule from an SFG.""" self._sfg = sfg self._start_times = dict() self._laps = defaultdict(lambda: 0) @@ -54,7 +54,7 @@ class Schema: def start_time_of_operation(self, op_id: GraphID) -> int: """Get the start time of the operation with the specified by the op_id.""" - assert op_id in self._start_times, "No operation with the specified op_id in this schema." + assert op_id in self._start_times, "No operation with the specified op_id in this schedule." return self._start_times[op_id] def _get_max_end_time(self) -> int: @@ -67,7 +67,7 @@ class Schema: return max_end_time def forward_slack(self, op_id: GraphID) -> int: - assert op_id in self._start_times, "No operation with the specified op_id in this schema." + assert op_id in self._start_times, "No operation with the specified op_id in this schedule." slack = sys.maxsize output_slacks = self._forward_slacks(op_id) # Make more pythonic @@ -93,7 +93,7 @@ class Schema: return ret def backward_slack(self, op_id: GraphID) -> int: - assert op_id in self._start_times, "No operation with the specified op_id in this schema." + assert op_id in self._start_times, "No operation with the specified op_id in this schedule." slack = sys.maxsize input_slacks = self._backward_slacks(op_id) # Make more pythonic @@ -120,13 +120,13 @@ class Schema: def slacks(self, op_id: GraphID) -> Tuple[int, int]: - assert op_id in self._start_times, "No operation with the specified op_id in this schema." + assert op_id in self._start_times, "No operation with the specified op_id in this schedule." return (self.backward_slack(op_id), self.forward_slack(op_id)) def print_slacks(self) -> None: raise NotImplementedError - def set_schedule_time(self, time: int) -> "Schema": + def set_schedule_time(self, time: int) -> "Schedule": assert self._get_max_end_time() < time, "New schedule time to short." self._schedule_time = time return self @@ -135,14 +135,14 @@ class Schema: def schedule_time(self) -> int: return self._schedule_time - def increase_time_resolution(self, factor: int) -> "Schema": + def increase_time_resolution(self, factor: int) -> "Schedule": raise NotImplementedError - def decrease_time_resolution(self, factor: int) -> "Schema": + def decrease_time_resolution(self, factor: int) -> "Schedule": raise NotImplementedError - def move_operation(self, op_id: GraphID, time: int) -> "Schema": - assert op_id in self._start_times, "No operation with the specified op_id in this schema." + def move_operation(self, op_id: GraphID, time: int) -> "Schedule": + assert op_id in self._start_times, "No operation with the specified op_id in this schedule." (backward_slack, forward_slack) = self.slacks(op_id) if time < 0: diff --git a/test/test_schema.py b/test/test_schedule.py similarity index 64% rename from test/test_schema.py rename to test/test_schedule.py index 0527e7bb40160ac9b562ceeccf5accd07f5be47f..10c0913fe2de24a21df062bbb6f52488a417bac9 100644 --- a/test/test_schema.py +++ b/test/test_schedule.py @@ -1,9 +1,9 @@ """ -B-ASIC test suite for the schema module and Schema class. +B-ASIC test suite for the schedule module and Schedule class. """ import pytest -from b_asic import Schema, Addition, ConstantMultiplication +from b_asic import Schedule, Addition, ConstantMultiplication class TestInit: @@ -11,21 +11,21 @@ class TestInit: sfg_simple_filter.set_latency_of_type(Addition.type_name(), 5) sfg_simple_filter.set_latency_of_type(ConstantMultiplication.type_name(), 4) - schema = Schema(sfg_simple_filter) + schedule = Schedule(sfg_simple_filter) - assert schema._start_times == {"in1": 0, "add1": 4, "cmul1": 0, "out1": 0} + assert schedule._start_times == {"in1": 0, "add1": 4, "cmul1": 0, "out1": 0} def test_complicated_single_outputs_normal_latency(self, precedence_sfg_delays): precedence_sfg_delays.set_latency_of_type(Addition.type_name(), 4) precedence_sfg_delays.set_latency_of_type(ConstantMultiplication.type_name(), 3) - schema = Schema(precedence_sfg_delays, scheduling_alg="ASAP") + schedule = Schedule(precedence_sfg_delays, scheduling_alg="ASAP") - for op in schema._sfg.get_operations_topological_order(): + for op in schedule._sfg.get_operations_topological_order(): print(op.latency_offsets) start_times_names = dict() - for op_id, start_time in schema._start_times.items(): + for op_id, start_time in schedule._start_times.items(): op_name = precedence_sfg_delays.find_by_id(op_id).name start_times_names[op_name] = start_time @@ -47,10 +47,10 @@ class TestInit: precedence_sfg_delays.find_by_name("ADD3")[0].set_latency_offsets({'in0': 2, 'in1': 1, 'out0': 4}) precedence_sfg_delays.find_by_name("ADD4")[0].set_latency_offsets({'in0': 6, 'in1': 7, 'out0': 9}) - schema = Schema(precedence_sfg_delays, scheduling_alg="ASAP") + schedule = Schedule(precedence_sfg_delays, scheduling_alg="ASAP") start_times_names = dict() - for op_id, start_time in schema._start_times.items(): + for op_id, start_time in schedule._start_times.items(): op_name = precedence_sfg_delays.find_by_id(op_id).name start_times_names[op_name] = start_time @@ -58,10 +58,10 @@ class TestInit: 'A1': 0, 'A2': 0, 'ADD3': 3, 'ADD4': 8, 'OUT1': 17} def test_independent_sfg(self, sfg_two_inputs_two_outputs_independent_with_cmul): - schema = Schema(sfg_two_inputs_two_outputs_independent_with_cmul, scheduling_alg="ASAP") + schedule = Schedule(sfg_two_inputs_two_outputs_independent_with_cmul, scheduling_alg="ASAP") start_times_names = dict() - for op_id, start_time in schema._start_times.items(): + for op_id, start_time in schedule._start_times.items(): op_name = sfg_two_inputs_two_outputs_independent_with_cmul.find_by_id(op_id).name start_times_names[op_name] = start_time @@ -74,20 +74,20 @@ class TestSlacks: precedence_sfg_delays.set_latency_of_type(Addition.type_name(), 1) precedence_sfg_delays.set_latency_of_type(ConstantMultiplication.type_name(), 3) - schema = Schema(precedence_sfg_delays, scheduling_alg="ASAP") - assert schema.forward_slack(precedence_sfg_delays.find_by_name("ADD3")[0].graph_id) == 7 - assert schema.backward_slack(precedence_sfg_delays.find_by_name("ADD3")[0].graph_id) == 0 + schedule = Schedule(precedence_sfg_delays, scheduling_alg="ASAP") + assert schedule.forward_slack(precedence_sfg_delays.find_by_name("ADD3")[0].graph_id) == 7 + assert schedule.backward_slack(precedence_sfg_delays.find_by_name("ADD3")[0].graph_id) == 0 - assert schema.forward_slack(precedence_sfg_delays.find_by_name("A2")[0].graph_id) == 0 - assert schema.backward_slack(precedence_sfg_delays.find_by_name("A2")[0].graph_id) == 16 + assert schedule.forward_slack(precedence_sfg_delays.find_by_name("A2")[0].graph_id) == 0 + assert schedule.backward_slack(precedence_sfg_delays.find_by_name("A2")[0].graph_id) == 16 def test_slacks_normal_latency(self, precedence_sfg_delays): precedence_sfg_delays.set_latency_of_type(Addition.type_name(), 1) precedence_sfg_delays.set_latency_of_type(ConstantMultiplication.type_name(), 3) - schema = Schema(precedence_sfg_delays, scheduling_alg="ASAP") - assert schema.slacks(precedence_sfg_delays.find_by_name("ADD3")[0].graph_id) == (0, 7) - assert schema.slacks(precedence_sfg_delays.find_by_name("A2")[0].graph_id) == (16, 0) + schedule = Schedule(precedence_sfg_delays, scheduling_alg="ASAP") + assert schedule.slacks(precedence_sfg_delays.find_by_name("ADD3")[0].graph_id) == (0, 7) + assert schedule.slacks(precedence_sfg_delays.find_by_name("A2")[0].graph_id) == (16, 0) class TestRescheduling: @@ -95,13 +95,13 @@ class TestRescheduling: precedence_sfg_delays.set_latency_of_type(Addition.type_name(), 4) precedence_sfg_delays.set_latency_of_type(ConstantMultiplication.type_name(), 3) - schema = Schema(precedence_sfg_delays, scheduling_alg="ASAP") + schedule = Schedule(precedence_sfg_delays, scheduling_alg="ASAP") - schema.move_operation(precedence_sfg_delays.find_by_name("ADD3")[0].graph_id, 4) - schema.move_operation(precedence_sfg_delays.find_by_name("A2")[0].graph_id, 2) + schedule.move_operation(precedence_sfg_delays.find_by_name("ADD3")[0].graph_id, 4) + schedule.move_operation(precedence_sfg_delays.find_by_name("A2")[0].graph_id, 2) start_times_names = dict() - for op_id, start_time in schema._start_times.items(): + for op_id, start_time in schedule._start_times.items(): op_name = precedence_sfg_delays.find_by_id(op_id).name start_times_names[op_name] = start_time @@ -112,36 +112,36 @@ class TestRescheduling: precedence_sfg_delays.set_latency_of_type(Addition.type_name(), 1) precedence_sfg_delays.set_latency_of_type(ConstantMultiplication.type_name(), 3) - schema = Schema(precedence_sfg_delays, scheduling_alg="ASAP") + schedule = Schedule(precedence_sfg_delays, scheduling_alg="ASAP") add3_id = precedence_sfg_delays.find_by_name("ADD3")[0].graph_id - schema.move_operation(add3_id, 4) - assert schema.forward_slack(add3_id) == 3 - assert schema.backward_slack(add3_id) == 4 + schedule.move_operation(add3_id, 4) + assert schedule.forward_slack(add3_id) == 3 + assert schedule.backward_slack(add3_id) == 4 a2_id = precedence_sfg_delays.find_by_name("A2")[0].graph_id - assert schema.forward_slack(a2_id) == 4 - assert schema.backward_slack(a2_id) == 16 + assert schedule.forward_slack(a2_id) == 4 + assert schedule.backward_slack(a2_id) == 16 - schema.move_operation(a2_id, 2) + schedule.move_operation(a2_id, 2) - assert schema.forward_slack(add3_id) == 3 - assert schema.backward_slack(add3_id) == 2 + assert schedule.forward_slack(add3_id) == 3 + assert schedule.backward_slack(add3_id) == 2 - assert schema.forward_slack(a2_id) == 2 - assert schema.backward_slack(a2_id) == 18 + assert schedule.forward_slack(a2_id) == 2 + assert schedule.backward_slack(a2_id) == 18 def test_move_operation_incorrect_move_backward(self, precedence_sfg_delays): precedence_sfg_delays.set_latency_of_type(Addition.type_name(), 1) precedence_sfg_delays.set_latency_of_type(ConstantMultiplication.type_name(), 3) - schema = Schema(precedence_sfg_delays, scheduling_alg="ASAP") + schedule = Schedule(precedence_sfg_delays, scheduling_alg="ASAP") with pytest.raises(ValueError): - schema.move_operation(precedence_sfg_delays.find_by_name("ADD3")[0].graph_id, -4) + schedule.move_operation(precedence_sfg_delays.find_by_name("ADD3")[0].graph_id, -4) def test_move_operation_incorrect_move_forward(self, precedence_sfg_delays): precedence_sfg_delays.set_latency_of_type(Addition.type_name(), 1) precedence_sfg_delays.set_latency_of_type(ConstantMultiplication.type_name(), 3) - schema = Schema(precedence_sfg_delays, scheduling_alg="ASAP") + schedule = Schedule(precedence_sfg_delays, scheduling_alg="ASAP") with pytest.raises(ValueError): - schema.move_operation(precedence_sfg_delays.find_by_name("ADD3")[0].graph_id, 10) + schedule.move_operation(precedence_sfg_delays.find_by_name("ADD3")[0].graph_id, 10)