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):
self._original_input_signals_indexes = {}
self._original_output_signals_indexes = {}
# Setup input operations and signals.
for i, s in enumerate(input_signals):
# Setup input signals.
for sig_ind, sig in enumerate(input_signals):
self._input_operations.append(
self._add_component_copy_unconnected(Input()))
self._original_input_signals_indexes[s] = i
for i, op in enumerate(inputs, len(input_signals)):
self._original_input_signals_indexes[sig] = sig_ind
# Setup input operations, starting from indexes ater input signals.
for sig_ind, op in enumerate(inputs, len(input_signals)):
self._input_operations.append(
self._add_component_copy_unconnected(op))
for s in op.output(0).signals:
self._original_input_signals_indexes[s] = i
for sig in op.output(0).signals:
self._original_input_signals_indexes[sig] = sig_ind
# Setup output operations and signals.
for i, s in enumerate(output_signals):
# Setup output signals.
for sig_ind, sig in enumerate(output_signals):
self._output_operations.append(
self._add_component_copy_unconnected(Output()))
self._original_output_signals_indexes[s] = i
for i, op in enumerate(outputs, len(output_signals)):
self._original_output_signals_indexes[sig] = sig_ind
# Setup output operations, starting from indexes after output signals.
for sig_ind, op in enumerate(outputs, len(output_signals)):
self._output_operations.append(
self._add_component_copy_unconnected(op))
for s in op.input(0).signals:
self._original_output_signals_indexes[s] = i
for sig in op.input(0).signals:
self._original_output_signals_indexes[sig] = sig_ind
output_operations_set = set(outputs)
# Search the graph inwards from each input signal.
for s, i in self._original_input_signals_indexes.items():
if s.destination is None:
for sig, sig_ind in self._original_input_signals_indexes.items():
if sig.destination is None:
raise ValueError(
f"Input signal #{i} is missing destination in SFG")
if s.destination.operation not in self._added_components_mapping:
f"Input signal #{sig_ind} is missing destination in SFG")
if sig.destination.operation not in self._added_components_mapping:
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.
for s, i in self._original_output_signals_indexes.items():
if s.source is None:
for sig, sig_ind in self._original_output_signals_indexes.items():
if sig.source is None:
raise ValueError(
f"Output signal #{i} is missing source in SFG")
if s.source.operation not in self._added_components_mapping:
self._copy_structure_from_operation_bfs(s.source.operation)
f"Output signal #{sig_ind} is missing source in SFG")
if sig.source.operation not in self._added_components_mapping:
self._copy_structure_from_operation_bfs(sig.source.operation)
@property
def type_name(self) -> TypeName:
......@@ -176,7 +188,6 @@ class SFG(AbstractOperation):
while op_queue:
original_op = op_queue.popleft()
print("CURRENT:", original_op.name, "-------------------")
# Add a copy of the operation without any connections.
new_op = None
if original_op not in self._added_components_mapping:
......@@ -271,11 +282,6 @@ class SFG(AbstractOperation):
new_signal.set_destination(new_connected_op.input(
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
op_queue.append(original_connected_op)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment