Skip to content
Snippets Groups Projects
Commit 17ff7b41 authored by angloth's avatar angloth
Browse files

Add code that allows for constructing from directly connected input to output sfg

parent 78cd30f0
No related branches found
No related tags found
5 merge requests!31Resolve "Specify internal input/output dependencies of an Operation",!25Resolve "System tests iteration 1",!24Resolve "System tests iteration 1",!23Resolve "Simulate SFG",!21Resolve "Print SFG"
...@@ -67,44 +67,56 @@ class SFG(AbstractOperation): ...@@ -67,44 +67,56 @@ class SFG(AbstractOperation):
self._original_input_signals_indexes = {} self._original_input_signals_indexes = {}
self._original_output_signals_indexes = {} self._original_output_signals_indexes = {}
# Setup input operations and signals. # Setup input signals.
for i, s in enumerate(input_signals): for sig_ind, sig in enumerate(input_signals):
self._input_operations.append( self._input_operations.append(
self._add_component_copy_unconnected(Input())) self._add_component_copy_unconnected(Input()))
self._original_input_signals_indexes[s] = i self._original_input_signals_indexes[sig] = sig_ind
for i, op in enumerate(inputs, len(input_signals)): # Setup input operations, starting from indexes ater input signals.
for sig_ind, op in enumerate(inputs, len(input_signals)):
self._input_operations.append( self._input_operations.append(
self._add_component_copy_unconnected(op)) self._add_component_copy_unconnected(op))
for s in op.output(0).signals: for sig in op.output(0).signals:
self._original_input_signals_indexes[s] = i self._original_input_signals_indexes[sig] = sig_ind
# Setup output operations and signals. # Setup output signals.
for i, s in enumerate(output_signals): for sig_ind, sig in enumerate(output_signals):
self._output_operations.append( self._output_operations.append(
self._add_component_copy_unconnected(Output())) self._add_component_copy_unconnected(Output()))
self._original_output_signals_indexes[s] = i self._original_output_signals_indexes[sig] = sig_ind
for i, op in enumerate(outputs, len(output_signals)): # Setup output operations, starting from indexes after output signals.
for sig_ind, op in enumerate(outputs, len(output_signals)):
self._output_operations.append( self._output_operations.append(
self._add_component_copy_unconnected(op)) self._add_component_copy_unconnected(op))
for s in op.input(0).signals: for sig in op.input(0).signals:
self._original_output_signals_indexes[s] = i self._original_output_signals_indexes[sig] = sig_ind
output_operations_set = set(outputs)
# Search the graph inwards from each input signal. # Search the graph inwards from each input signal.
for s, i in self._original_input_signals_indexes.items(): for sig, sig_ind in self._original_input_signals_indexes.items():
if s.destination is None: if sig.destination is None:
raise ValueError( raise ValueError(
f"Input signal #{i} is missing destination in SFG") f"Input signal #{sig_ind} is missing destination in SFG")
if s.destination.operation not in self._added_components_mapping: if sig.destination.operation not in self._added_components_mapping:
self._copy_structure_from_operation_bfs( self._copy_structure_from_operation_bfs(
s.destination.operation) sig.destination.operation)
elif sig.destination.operation in output_operations_set:
# Add direct signal between the input and output.
new_signal = self._add_component_copy_unconnected(sig)
new_signal.set_source(
self._input_operations[sig_ind].output(0))
new_signal.set_destination(
self._output_operations[
self._original_output_signals_indexes[sig]].input(0))
# Search the graph inwards from each output signal. # Search the graph inwards from each output signal.
for s, i in self._original_output_signals_indexes.items(): for sig, sig_ind in self._original_output_signals_indexes.items():
if s.source is None: if sig.source is None:
raise ValueError( raise ValueError(
f"Output signal #{i} is missing source in SFG") f"Output signal #{sig_ind} is missing source in SFG")
if s.source.operation not in self._added_components_mapping: if sig.source.operation not in self._added_components_mapping:
self._copy_structure_from_operation_bfs(s.source.operation) self._copy_structure_from_operation_bfs(sig.source.operation)
@property @property
def type_name(self) -> TypeName: def type_name(self) -> TypeName:
...@@ -176,7 +188,6 @@ class SFG(AbstractOperation): ...@@ -176,7 +188,6 @@ class SFG(AbstractOperation):
while op_queue: while op_queue:
original_op = op_queue.popleft() original_op = op_queue.popleft()
print("CURRENT:", original_op.name, "-------------------")
# Add a copy of the operation without any connections. # Add a copy of the operation without any connections.
new_op = None new_op = None
if original_op not in self._added_components_mapping: if original_op not in self._added_components_mapping:
...@@ -271,11 +282,6 @@ class SFG(AbstractOperation): ...@@ -271,11 +282,6 @@ class SFG(AbstractOperation):
new_signal.set_destination(new_connected_op.input( new_signal.set_destination(new_connected_op.input(
original_signal.destination.index)) original_signal.destination.index))
print("Adding signal:", new_signal.name,
"to op:", new_connected_op.name)
print(
[inport.signals for inport in new_connected_op.inputs])
# Add connected operation to the queue of operations to visist # Add connected operation to the queue of operations to visist
op_queue.append(original_connected_op) op_queue.append(original_connected_op)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment