From fe351db3f5ba72447daee0d2b918747367f4dc7b Mon Sep 17 00:00:00 2001 From: Florian Pfaff <6773539+FlorianPfaff@users.noreply.github.com> Date: Thu, 2 Jul 2026 20:03:54 +0200 Subject: [PATCH 1/2] Validate hypertoroidal uniform integration order --- .../hypertorus/hypertoroidal_uniform_distribution.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/pyrecest/distributions/hypertorus/hypertoroidal_uniform_distribution.py b/src/pyrecest/distributions/hypertorus/hypertoroidal_uniform_distribution.py index cb2008479..c39c8ca62 100644 --- a/src/pyrecest/distributions/hypertorus/hypertoroidal_uniform_distribution.py +++ b/src/pyrecest/distributions/hypertorus/hypertoroidal_uniform_distribution.py @@ -3,6 +3,7 @@ # pylint: disable=no-name-in-module,no-member import numpy as np from pyrecest.backend import ( + all as backend_all, asarray, int32, int64, @@ -113,6 +114,11 @@ def _validate_boundary(name: str, value, dim: int): return value +def _validate_boundary_order(left, right) -> None: + if not bool(backend_all(right >= left)): + raise ValueError("integration boundaries must be increasing in every dimension") + + class HypertoroidalUniformDistribution( AbstractUniformDistribution, AbstractHypertoroidalDistribution ): @@ -199,6 +205,7 @@ def integrate(self, integration_boundaries=None) -> float: left, right = integration_boundaries left = _validate_boundary("left", left, self.dim) right = _validate_boundary("right", right, self.dim) + _validate_boundary_order(left, right) volume = prod(right - left) return 1.0 / (2.0 * pi) ** self.dim * volume From c70bb58188dc398b9d9f88d6e0842766c5a39743 Mon Sep 17 00:00:00 2001 From: Florian Pfaff <6773539+FlorianPfaff@users.noreply.github.com> Date: Thu, 2 Jul 2026 20:04:07 +0200 Subject: [PATCH 2/2] Add hypertoroidal uniform reversed-boundary test --- .../test_hypertoroidal_uniform_distribution.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/distributions/test_hypertoroidal_uniform_distribution.py b/tests/distributions/test_hypertoroidal_uniform_distribution.py index 8671221fe..2cb2fa139 100644 --- a/tests/distributions/test_hypertoroidal_uniform_distribution.py +++ b/tests/distributions/test_hypertoroidal_uniform_distribution.py @@ -74,6 +74,13 @@ def test_integrate_validates_boundary_shapes(): dist.integrate((zeros((2,)), ones((1,)))) +def test_integrate_rejects_reversed_boundaries(): + dist = HypertoroidalUniformDistribution(2) + + with pytest.raises(ValueError, match="increasing"): + dist.integrate((array([0.0, 1.0]), array([1.0, 0.5]))) + + def test_integrate_accepts_scalar_boundaries_for_one_dimension(): dist = HypertoroidalUniformDistribution(1)