From 05af3c4b89ce9f50760e37da03dc6763f2486dc0 Mon Sep 17 00:00:00 2001 From: Florian Pfaff <6773539+FlorianPfaff@users.noreply.github.com> Date: Sun, 30 Aug 2026 16:55:53 +0800 Subject: [PATCH 1/2] Reject non-finite inputs in angular_error --- .../hypertorus/abstract_hypertoroidal_distribution.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pyrecest/distributions/hypertorus/abstract_hypertoroidal_distribution.py b/src/pyrecest/distributions/hypertorus/abstract_hypertoroidal_distribution.py index 82431c09d..d618af2cc 100644 --- a/src/pyrecest/distributions/hypertorus/abstract_hypertoroidal_distribution.py +++ b/src/pyrecest/distributions/hypertorus/abstract_hypertoroidal_distribution.py @@ -21,7 +21,7 @@ cos, int32, int64, - isnan, + isfinite, linspace, log, meshgrid, @@ -171,8 +171,8 @@ def angular_error(alpha, beta): Returns: float or numpy array: The angular error(s) in radians. """ - if bool(isnan(alpha).any()) or bool(isnan(beta).any()): - raise ValueError("Angles must not contain NaN values.") + if bool(backend_any(~isfinite(alpha))) or bool(backend_any(~isfinite(beta))): + raise ValueError("Angles must contain only finite values.") # Ensure the angles are between 0 and 2*pi alpha = mod(alpha, 2.0 * pi) beta = mod(beta, 2.0 * pi) From 1a88ea2f483a66b57c36edbf9e3c6c232ff1fb68 Mon Sep 17 00:00:00 2001 From: Florian Pfaff <6773539+FlorianPfaff@users.noreply.github.com> Date: Sun, 30 Aug 2026 16:56:01 +0800 Subject: [PATCH 2/2] Add regression test for non-finite angular_error inputs --- ..._hypertoroidal_angular_error_validation.py | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 tests/distributions/test_hypertoroidal_angular_error_validation.py diff --git a/tests/distributions/test_hypertoroidal_angular_error_validation.py b/tests/distributions/test_hypertoroidal_angular_error_validation.py new file mode 100644 index 000000000..57d6c0f89 --- /dev/null +++ b/tests/distributions/test_hypertoroidal_angular_error_validation.py @@ -0,0 +1,20 @@ +import pytest + +from pyrecest.backend import array +from pyrecest.distributions.hypertorus.abstract_hypertoroidal_distribution import ( + AbstractHypertoroidalDistribution, +) + + +@pytest.mark.parametrize("bad_value", [float("nan"), float("inf"), float("-inf")]) +@pytest.mark.parametrize("argument", ["alpha", "beta"]) +def test_angular_error_rejects_nonfinite_angles(bad_value, argument): + alpha = array([0.0]) + beta = array([0.0]) + if argument == "alpha": + alpha = array([bad_value]) + else: + beta = array([bad_value]) + + with pytest.raises(ValueError, match="finite"): + AbstractHypertoroidalDistribution.angular_error(alpha, beta)