From 0747e2bf9c8ff720c080fcf70f753098816583a4 Mon Sep 17 00:00:00 2001 From: Hugo Winbladh <hugwi268@student.liu.se> Date: Mon, 26 Jun 2023 13:18:32 +0000 Subject: [PATCH] Change connect_external_signals_to_components() to work with branching input signals --- b_asic/signal_flow_graph.py | 6 ++++++ test/test_sfg.py | 15 +++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/b_asic/signal_flow_graph.py b/b_asic/signal_flow_graph.py index b4c55607..405681ea 100644 --- a/b_asic/signal_flow_graph.py +++ b/b_asic/signal_flow_graph.py @@ -431,6 +431,12 @@ class SFG(AbstractOperation): raise ValueError("Missing destination in signal.") destination.clear() input_port.signals[0].set_destination(destination) + for signal in input_operation.output(0).signals[1:]: + other_destination = signal.destination + if other_destination is None: + raise ValueError("Missing destination in signal.") + other_destination.clear() + other_destination.add_signal(Signal(destination.signals[0])) # For each output_signal, connect it to the corresponding operation for output_port, output_operation in zip(self.outputs, self.output_operations): src = output_operation.input(0).signals[0].source diff --git a/test/test_sfg.py b/test/test_sfg.py index df775bc8..cf97709c 100644 --- a/test/test_sfg.py +++ b/test/test_sfg.py @@ -25,6 +25,7 @@ from b_asic.save_load_structure import python_to_sfg, sfg_to_python from b_asic.signal_flow_graph import SFG, GraphID from b_asic.simulation import Simulation from b_asic.special_operations import Delay +from b_asic.sfg_generators import wdf_allpass class TestInit: @@ -814,6 +815,20 @@ class TestConnectExternalSignalsToComponentsSoloComp: assert test_sfg.evaluate_output(0, []) == 14 assert not test_sfg.connect_external_signals_to_components() + def test_connect_external_signals_to_components_multiple_operations_after_input( + self + ): + """ + Replaces an SFG with a symmetric two-port adaptor to test when the input + port goes to multiple operations + """ + sfg1 = wdf_allpass(0.5) + sfg2 = sfg1.replace_operation(sfg1.find_by_id('sym2p0').to_sfg(), 'sym2p0') + sfg2.find_by_id('sfg0').connect_external_signals_to_components() + test_sfg = SFG(sfg2.input_operations, sfg2.output_operations) + assert sfg1.evaluate(1) == -0.5 + assert test_sfg.evaluate(1) == -0.5 + assert not test_sfg.connect_external_signals_to_components() class TestConnectExternalSignalsToComponentsMultipleComp: def test_connect_external_signals_to_components_operation_tree( -- GitLab