diff --git a/src/pyrecest/distributions/hypertorus/abstract_hypertoroidal_distribution.py b/src/pyrecest/distributions/hypertorus/abstract_hypertoroidal_distribution.py index 9ea50d739..82431c09d 100644 --- a/src/pyrecest/distributions/hypertorus/abstract_hypertoroidal_distribution.py +++ b/src/pyrecest/distributions/hypertorus/abstract_hypertoroidal_distribution.py @@ -108,7 +108,7 @@ def integrate_numerically(self, integration_boundaries=None): ) integration_boundaries = atleast_2d(integration_boundaries) - if self.dim not in (1, integration_boundaries.shape[0]): + if integration_boundaries.shape[0] != self.dim: raise ValueError( "integration_boundaries must contain one row per dimension." ) diff --git a/tests/distributions/test_hypertoroidal_numerical_integration_boundary_count.py b/tests/distributions/test_hypertoroidal_numerical_integration_boundary_count.py new file mode 100644 index 000000000..ed8a28fe3 --- /dev/null +++ b/tests/distributions/test_hypertoroidal_numerical_integration_boundary_count.py @@ -0,0 +1,23 @@ +import unittest + +import pyrecest.backend +from pyrecest.backend import array +from pyrecest.distributions.circle.wrapped_normal_distribution import ( + WrappedNormalDistribution, +) + + +@unittest.skipIf( + pyrecest.backend.__backend_name__ != "numpy", + reason="Numerical hypertoroidal integration is supported only on NumPy.", +) +class TestHypertoroidalNumericalIntegrationBoundaryCount(unittest.TestCase): + def test_one_dimensional_distribution_rejects_extra_boundary_rows(self): + dist = WrappedNormalDistribution(array(0.0), array(1.0)) + + with self.assertRaisesRegex(ValueError, "one row per dimension"): + dist.integrate_numerically(array([[0.0, 1.0], [0.0, 1.0]])) + + +if __name__ == "__main__": + unittest.main()