diff --git a/b_asic/signal_flow_graph.py b/b_asic/signal_flow_graph.py index 74df86d034a567202fab9fecd96a26dc58b35abb..d927801b5890306f97049257a986302f314413a8 100644 --- a/b_asic/signal_flow_graph.py +++ b/b_asic/signal_flow_graph.py @@ -133,21 +133,23 @@ class SFG(AbstractOperation): for sig, input_index in self._original_input_signals_indexes.items(): # Check if already added destination. new_sig = self._added_components_mapping[sig] - if new_sig.destination is not None and new_sig.destination.operation in output_operations_set: - # Add directly connected input to output to dfs order list - self._components_in_dfs_order.extend([ - new_sig.source.operation, new_sig, new_sig.destination.operation]) - elif sig.destination is None: - raise ValueError( - f"Input signal #{input_index} is missing destination in SFG") - elif sig.destination.operation not in self._added_components_mapping: - self._copy_structure_from_operation_dfs( - sig.destination.operation) + if new_sig.destination is None: + if sig.destination is None: + raise ValueError( + f"Input signal #{input_index} is missing destination in SFG") + elif sig.destination.operation not in self._added_components_mapping: + self._copy_structure_from_operation_dfs( + sig.destination.operation) + else: + if new_sig.destination.operation in output_operations_set: + # Add directly connected input to output to dfs order list + self._components_in_dfs_order.extend([ + new_sig.source.operation, new_sig, new_sig.destination.operation]) # Search the graph inwards from each output signal. for sig, output_index in self._original_output_signals_indexes.items(): # Check if already added source. - mew_sig = self._added_components_mapping[sig] + new_sig = self._added_components_mapping[sig] if new_sig.source is None: if sig.source is None: raise ValueError( @@ -156,6 +158,9 @@ class SFG(AbstractOperation): self._copy_structure_from_operation_dfs( sig.source.operation) + def __call__(self): + return self.deep_copy() + @property def type_name(self) -> TypeName: return "sfg"