From cc1f674974a0b5cfd17dafa423d8e40a4257aa6e Mon Sep 17 00:00:00 2001 From: Florian Pfaff <6773539+FlorianPfaff@users.noreply.github.com> Date: Thu, 2 Jul 2026 09:05:24 +0200 Subject: [PATCH] Reject text covariance feature control scalars - reject text and bytes control scalar values before float coercion - keep boolean and nonscalar control rejection unchanged - extend covariance feature regression coverage --- src/pyrecest/utils/pairwise_covariance_features.py | 2 ++ tests/test_pairwise_covariance_features.py | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/pyrecest/utils/pairwise_covariance_features.py b/src/pyrecest/utils/pairwise_covariance_features.py index 89193b808..7c333ae0e 100644 --- a/src/pyrecest/utils/pairwise_covariance_features.py +++ b/src/pyrecest/utils/pairwise_covariance_features.py @@ -196,6 +196,8 @@ def _validate_control_scalar(value: Any, name: str, *, allow_zero: bool) -> floa if isinstance(scalar_value, bool): raise ValueError(f"{name} must be numeric, not boolean") + if isinstance(scalar_value, (str, bytes, bytearray)): + raise ValueError(f"{name} must be numeric") try: value_float = float(scalar_value) diff --git a/tests/test_pairwise_covariance_features.py b/tests/test_pairwise_covariance_features.py index b9aa8b3aa..87dca587f 100644 --- a/tests/test_pairwise_covariance_features.py +++ b/tests/test_pairwise_covariance_features.py @@ -67,7 +67,7 @@ def test_pairwise_mahalanobis_distances_rejects_ambiguous_regularization(self): means = array([[0.0], [0.0]]) covariance = zeros((2, 2, 1)) - for bad_regularization in (True, array([1.0])): + for bad_regularization in (True, "1.0", b"1.0", array([1.0])): with self.subTest(bad_regularization=bad_regularization): with self.assertRaisesRegex(ValueError, "regularization"): pairwise_mahalanobis_distances( @@ -134,7 +134,7 @@ def test_pairwise_covariance_shape_components_support_empty_stacks(self): def test_pairwise_covariance_shape_components_rejects_ambiguous_epsilon(self): covariances = zeros((2, 2, 1)) - for bad_epsilon in (True, array([1e-6])): + for bad_epsilon in (True, "1e-6", b"1e-6", array([1e-6])): with self.subTest(bad_epsilon=bad_epsilon): with self.assertRaisesRegex(ValueError, "epsilon"): pairwise_covariance_shape_components(