From b5fc1dffd536ca1a6db10124b734df111eab9486 Mon Sep 17 00:00:00 2001 From: Florian Pfaff <6773539+FlorianPfaff@users.noreply.github.com> Date: Mon, 29 Jun 2026 11:45:17 +0200 Subject: [PATCH 1/2] Deduplicate expected backend names --- src/pyrecest/backend_tools.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pyrecest/backend_tools.py b/src/pyrecest/backend_tools.py index edb09ba5b..0703b8ad0 100644 --- a/src/pyrecest/backend_tools.py +++ b/src/pyrecest/backend_tools.py @@ -34,7 +34,7 @@ def _normalize_expected_backend_names( not isinstance(name, str) or not name or name.strip() != name for name in names ): raise ValueError(message) - return names + return tuple(dict.fromkeys(names)) def assert_backend(expected: str | tuple[str, ...]) -> None: From e5e2fddfdb57b573b0c8e3c2f51c146a24a1566e Mon Sep 17 00:00:00 2001 From: Florian Pfaff <6773539+FlorianPfaff@users.noreply.github.com> Date: Mon, 29 Jun 2026 11:45:37 +0200 Subject: [PATCH 2/2] Cover duplicate expected backend names --- tests/test_backend_tools.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/test_backend_tools.py b/tests/test_backend_tools.py index b02416994..85dfa1f99 100644 --- a/tests/test_backend_tools.py +++ b/tests/test_backend_tools.py @@ -19,6 +19,16 @@ def test_assert_backend_rejects_unexpected_backend(): pyrecest.assert_backend(unexpected) +def test_assert_backend_deduplicates_expected_names_in_error_message(): + active = pyrecest.get_backend_name() + unexpected = "jax" if active != "jax" else "numpy" + + with pytest.raises(RuntimeError) as excinfo: + pyrecest.assert_backend((unexpected, unexpected)) + + assert str(excinfo.value).count(unexpected) == 1 + + @pytest.mark.parametrize( "expected", [(), ("",), " ", (" numpy",), ("numpy ",), ("numpy", 1), 1] )