From 575ce0516037f0a5ab83e69dda768544a960ba19 Mon Sep 17 00:00:00 2001 From: Florian Pfaff <6773539+FlorianPfaff@users.noreply.github.com> Date: Wed, 5 Aug 2026 23:48:41 +0800 Subject: [PATCH 1/2] Fix overflow-safe ellipse symmetrization --- 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 968b217707aba267a9fed6200507820d6d2ac7ef Mon Sep 17 00:00:00 2001 From: Florian Pfaff <6773539+FlorianPfaff@users.noreply.github.com> Date: Wed, 5 Aug 2026 23:49:04 +0800 Subject: [PATCH 2/2] Add regression for ellipse symmetrization overflow --- ..._ellipse_geometry_symmetrization_overflow.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 tests/tracking/test_ellipse_geometry_symmetrization_overflow.py diff --git a/tests/tracking/test_ellipse_geometry_symmetrization_overflow.py b/tests/tracking/test_ellipse_geometry_symmetrization_overflow.py new file mode 100644 index 0000000000..4709ed92c9 --- /dev/null +++ b/tests/tracking/test_ellipse_geometry_symmetrization_overflow.py @@ -0,0 +1,17 @@ +from __future__ import annotations + +import numpy as np +import numpy.testing as npt + +from pyrecest.tracking.ellipse_geometry import symmetrize + + +def test_ellipse_geometry_symmetrization_avoids_intermediate_overflow() -> None: + 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))