From 14998d294ce59cc26f6aa137c29f0d5a631b0884 Mon Sep 17 00:00:00 2001 From: Florian Pfaff <6773539+FlorianPfaff@users.noreply.github.com> Date: Wed, 5 Aug 2026 17:18:38 +0800 Subject: [PATCH 1/3] Avoid overflow when symmetrizing ellipse matrices --- src/pyrecest/tracking/ellipse_geometry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pyrecest/tracking/ellipse_geometry.py b/src/pyrecest/tracking/ellipse_geometry.py index 163e55f633..489ca72306 100644 --- a/src/pyrecest/tracking/ellipse_geometry.py +++ b/src/pyrecest/tracking/ellipse_geometry.py @@ -37,7 +37,7 @@ def symmetrize(matrix): """Return the symmetric part of ``matrix``.""" matrix = asarray(matrix) - return 0.5 * (matrix + matrix.T) + return 0.5 * matrix + 0.5 * matrix.T def project_symmetric_covariance(covariance, minimum_eigenvalue=0.0): From 63d770d2b8db5a9b198720e88d6d0921ba9ccba9 Mon Sep 17 00:00:00 2001 From: Florian Pfaff <6773539+FlorianPfaff@users.noreply.github.com> Date: Wed, 5 Aug 2026 17:18:53 +0800 Subject: [PATCH 2/3] Add regression test for ellipse symmetrization overflow --- tests/tracking/test_ellipse_geometry_overflow.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 tests/tracking/test_ellipse_geometry_overflow.py diff --git a/tests/tracking/test_ellipse_geometry_overflow.py b/tests/tracking/test_ellipse_geometry_overflow.py new file mode 100644 index 0000000000..79c9c43531 --- /dev/null +++ b/tests/tracking/test_ellipse_geometry_overflow.py @@ -0,0 +1,16 @@ +from __future__ import annotations + +import numpy as np +import numpy.testing as npt + +from pyrecest.tracking import symmetrize + + +def test_symmetrize_large_finite_entries_without_intermediate_overflow() -> None: + matrix = np.full((2, 2), 1.0e308) + + with np.errstate(over="raise", invalid="raise"): + result = symmetrize(matrix) + + npt.assert_array_equal(result, matrix) + assert np.all(np.isfinite(result)) From ad7c5979c5b8d6ee45e3be1c0c1db6f4635caeff Mon Sep 17 00:00:00 2001 From: Florian Pfaff <6773539+FlorianPfaff@users.noreply.github.com> Date: Wed, 5 Aug 2026 17:20:49 +0800 Subject: [PATCH 3/3] Make symmetrization overflow regression backend-portable --- tests/tracking/test_ellipse_geometry_overflow.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/tracking/test_ellipse_geometry_overflow.py b/tests/tracking/test_ellipse_geometry_overflow.py index 79c9c43531..cb9a14ae69 100644 --- a/tests/tracking/test_ellipse_geometry_overflow.py +++ b/tests/tracking/test_ellipse_geometry_overflow.py @@ -7,10 +7,11 @@ def test_symmetrize_large_finite_entries_without_intermediate_overflow() -> None: - matrix = np.full((2, 2), 1.0e308) + matrix = np.full((2, 2), np.finfo(np.float32).max, dtype=np.float32) with np.errstate(over="raise", invalid="raise"): result = symmetrize(matrix) + result = np.asarray(result) npt.assert_array_equal(result, matrix) assert np.all(np.isfinite(result))