From f0a4b08a313e36efc6e98629eb9b5432b2e12627 Mon Sep 17 00:00:00 2001 From: Jan Petykiewicz Date: Wed, 1 Apr 2026 22:49:35 -0700 Subject: [PATCH] [PortList] find_transform requires a non-empty connection map --- masque/ports.py | 4 ++++ masque/test/test_ports.py | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/masque/ports.py b/masque/ports.py index 3a695fb..ab1b93b 100644 --- a/masque/ports.py +++ b/masque/ports.py @@ -581,6 +581,8 @@ class PortList(metaclass=ABCMeta): The rotation should be performed before the translation. """ + if not map_in: + raise PortError('Must provide at least one port connection') s_ports = self[map_in.keys()] o_ports = other[map_in.values()] return self.find_port_transform( @@ -632,6 +634,8 @@ class PortList(metaclass=ABCMeta): The rotation should be performed before the translation. """ + if not map_in: + raise PortError('Must provide at least one port connection') s_offsets = numpy.array([p.offset for p in s_ports.values()]) o_offsets = numpy.array([p.offset for p in o_ports.values()]) s_types = [p.ptype for p in s_ports.values()] diff --git a/masque/test/test_ports.py b/masque/test/test_ports.py index 4e7d097..fa19bab 100644 --- a/masque/test/test_ports.py +++ b/masque/test/test_ports.py @@ -257,3 +257,14 @@ def test_pattern_plug_rejects_map_out_on_connected_ports_atomically() -> None: host.plug(other, {"A": "X"}, map_out={"X": "renamed", "Y": "out"}, append=True) assert set(host.ports) == {"A"} + + +def test_find_transform_requires_connection_map() -> None: + host = Pattern(ports={"A": Port((0, 0), 0)}) + other = Pattern(ports={"X": Port((0, 0), pi)}) + + with pytest.raises(PortError, match="at least one port connection"): + host.find_transform(other, {}) + + with pytest.raises(PortError, match="at least one port connection"): + Pattern.find_port_transform({}, {}, {})