From 2d6c0fdb2996d21a64b12fee39f5a34d9a7bcfaf Mon Sep 17 00:00:00 2001 From: Iris van der Werf Date: Mon, 28 Sep 2026 13:41:45 +0200 Subject: [PATCH] Check all the conduits after the ones which belong to the matching timelines --- ymmsl/v0_2/tests/test_timeline_resolver.py | 13 +++++++++++++ ymmsl/v0_2/timeline_resolver.py | 8 +++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/ymmsl/v0_2/tests/test_timeline_resolver.py b/ymmsl/v0_2/tests/test_timeline_resolver.py index 805049a..750167c 100644 --- a/ymmsl/v0_2/tests/test_timeline_resolver.py +++ b/ymmsl/v0_2/tests/test_timeline_resolver.py @@ -163,3 +163,16 @@ def test_interact_time_bridge_matching(timelines_configuration: Configuration) - assert model.components[Ref("A")].timeline == Timeline("A") assert model.components[Ref("bridge")].timeline == Timeline("bridge") + + +def test_matching_timelines_check_all_conduits( + timelines_configuration: Configuration, +) -> None: + model = timelines_configuration.models[Ref("interact_time_bridge")] + resolve_timelines(model) + + # The first conduit connects matching timelines, the next one should still be + # checked + model.conduits[-1].filters.append(ConduitFilter.LAST) + with pytest.raises(ConduitTimelineError, match="remove a reducer"): + resolve_timelines(model) diff --git a/ymmsl/v0_2/timeline_resolver.py b/ymmsl/v0_2/timeline_resolver.py index 5c54fe7..a850708 100644 --- a/ymmsl/v0_2/timeline_resolver.py +++ b/ymmsl/v0_2/timeline_resolver.py @@ -364,9 +364,11 @@ def check_consistent(self) -> None: filtered_tl1 = timeline1[:-num_reducers] if num_reducers else timeline1 filtered_tl2 = timeline2[:-num_repeaters] if num_repeaters else timeline2 if self._model.matching_timelines: - for mt in self._model.matching_timelines: - if filtered_tl1 in mt and filtered_tl2 in mt: - return + if any( + filtered_tl1 in mt and filtered_tl2 in mt + for mt in self._model.matching_timelines + ): + continue common_idx = len(timeline1) - num_reducers self._check_consistent_equal_length(