From 06a80d06e8451eb7f2ff5208bb5d53332c03279a Mon Sep 17 00:00:00 2001 From: Florian Pfaff <6773539+FlorianPfaff@users.noreply.github.com> Date: Sat, 27 Jun 2026 12:02:42 +0200 Subject: [PATCH 1/3] Keep von Mises pdf stable after norm_const access --- src/pyrecest/distributions/circle/von_mises_distribution.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pyrecest/distributions/circle/von_mises_distribution.py b/src/pyrecest/distributions/circle/von_mises_distribution.py index df4a11db9..04ce5c5db 100644 --- a/src/pyrecest/distributions/circle/von_mises_distribution.py +++ b/src/pyrecest/distributions/circle/von_mises_distribution.py @@ -49,6 +49,7 @@ def __init__( self.mu = mu self.kappa = kappa self._norm_const = norm_const + self._norm_const_is_explicit = norm_const is not None def get_params(self): return self.mu, self.kappa @@ -61,7 +62,7 @@ def norm_const(self): def pdf(self, xs): xs = array(xs) - if self._norm_const is None: + if not self._norm_const_is_explicit: p = exp(self.kappa * (cos(xs - self.mu) - 1.0)) / ( 2.0 * pi * ive(0, self.kappa) ) From 59d07030f8196841a8ad28ebb5a862a2aa9ed79d Mon Sep 17 00:00:00 2001 From: Florian Pfaff <6773539+FlorianPfaff@users.noreply.github.com> Date: Sat, 27 Jun 2026 12:03:47 +0200 Subject: [PATCH 2/3] Handle cached von Mises normalizers robustly --- src/pyrecest/distributions/circle/von_mises_distribution.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pyrecest/distributions/circle/von_mises_distribution.py b/src/pyrecest/distributions/circle/von_mises_distribution.py index 04ce5c5db..5f6709b04 100644 --- a/src/pyrecest/distributions/circle/von_mises_distribution.py +++ b/src/pyrecest/distributions/circle/von_mises_distribution.py @@ -62,7 +62,7 @@ def norm_const(self): def pdf(self, xs): xs = array(xs) - if not self._norm_const_is_explicit: + if not getattr(self, "_norm_const_is_explicit", False): p = exp(self.kappa * (cos(xs - self.mu) - 1.0)) / ( 2.0 * pi * ive(0, self.kappa) ) From 13deb4b4802bdc383f889f55ddf299a9bb851247 Mon Sep 17 00:00:00 2001 From: Florian Pfaff <6773539+FlorianPfaff@users.noreply.github.com> Date: Sat, 27 Jun 2026 12:04:08 +0200 Subject: [PATCH 3/3] Add von Mises norm_const stability regression --- tests/distributions/test_von_mises_distribution.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/distributions/test_von_mises_distribution.py b/tests/distributions/test_von_mises_distribution.py index f7736977d..406e2fe20 100644 --- a/tests/distributions/test_von_mises_distribution.py +++ b/tests/distributions/test_von_mises_distribution.py @@ -41,6 +41,16 @@ def test_large_concentration_pdf_and_entropy_are_finite(self): self.assertGreater(float(mode_pdf[0]), 0.0) self.assertTrue(np.isfinite(float(entropy))) + def test_large_concentration_pdf_stays_stable_after_norm_const_access(self): + dist = VonMisesDistribution(0.3, 1000.0) + expected = VonMisesDistribution(0.3, 1000.0).pdf(array([0.3])) + + _ = dist.norm_const + mode_pdf = dist.pdf(array([0.3])) + + self.assertTrue(np.isfinite(float(mode_pdf[0]))) + npt.assert_allclose(mode_pdf, expected) + def test_pdf(self): dist = VonMisesDistribution(2, 1) xs = linspace(1, 7, 7)