From bb34f753767b301f0c02bda5825c7984f083b507 Mon Sep 17 00:00:00 2001 From: Fabian Joswig Date: Wed, 15 Jul 2026 09:24:00 +0200 Subject: [PATCH 1/2] [Fix] Fix off-by-one in Covobs pos bounds check --- pyerrors/covobs.py | 2 +- tests/covobs_test.py | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/pyerrors/covobs.py b/pyerrors/covobs.py index 006c6aae..d84a274c 100644 --- a/pyerrors/covobs.py +++ b/pyerrors/covobs.py @@ -31,7 +31,7 @@ def __init__(self, mean, cov, name, pos=None, grad=None): else: raise ValueError('Have to specify position of cov-element belonging to mean!') else: - if pos > self.N: + if pos >= self.N: raise ValueError(f'pos {pos} too large for covariance matrix with dimension {self.N}x{self.N}!') self._grad = np.zeros((self.N, 1)) self._grad[pos] = 1. diff --git a/tests/covobs_test.py b/tests/covobs_test.py index f0a53e89..4302dd20 100644 --- a/tests/covobs_test.py +++ b/tests/covobs_test.py @@ -1,6 +1,7 @@ import autograd.numpy as np import pyerrors as pe import pytest +from pyerrors.covobs import Covobs np.random.seed(0) @@ -108,3 +109,9 @@ def test_covobs_exceptions(): covobs = pe.cov_Obs([1.5, 0.1], [[1., .2,], [.3, .5]] , 'test') with pytest.raises(Exception): covobs = pe.cov_Obs([1.5, 0.1], [[8, 4,], [4, -2]] , 'test') + + +def test_covobs_pos_too_large(): + cov = [[1, 0], [0, 1]] + with pytest.raises(ValueError): + Covobs(1.0, cov, 'test', pos=2) From a1dc9c628e9500f672e6a431c6f16110db660517 Mon Sep 17 00:00:00 2001 From: Fabian Joswig Date: Wed, 15 Jul 2026 09:29:37 +0200 Subject: [PATCH 2/2] [Fix] Also reject negative pos values --- pyerrors/covobs.py | 4 ++-- tests/covobs_test.py | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/pyerrors/covobs.py b/pyerrors/covobs.py index d84a274c..d64907de 100644 --- a/pyerrors/covobs.py +++ b/pyerrors/covobs.py @@ -31,8 +31,8 @@ def __init__(self, mean, cov, name, pos=None, grad=None): else: raise ValueError('Have to specify position of cov-element belonging to mean!') else: - if pos >= self.N: - raise ValueError(f'pos {pos} too large for covariance matrix with dimension {self.N}x{self.N}!') + if pos < 0 or pos >= self.N: + raise ValueError(f'pos {pos} not valid for covariance matrix with dimension {self.N}x{self.N}!') self._grad = np.zeros((self.N, 1)) self._grad[pos] = 1. else: diff --git a/tests/covobs_test.py b/tests/covobs_test.py index 4302dd20..a3f76349 100644 --- a/tests/covobs_test.py +++ b/tests/covobs_test.py @@ -115,3 +115,9 @@ def test_covobs_pos_too_large(): cov = [[1, 0], [0, 1]] with pytest.raises(ValueError): Covobs(1.0, cov, 'test', pos=2) + + +def test_covobs_pos_negative(): + cov = [[1, 0], [0, 1]] + with pytest.raises(ValueError): + Covobs(1.0, cov, 'test', pos=-1)