[Fix] Fix off-by-one in Covobs pos bounds check (#288)

* [Fix] Fix off-by-one in Covobs pos bounds check

* [Fix] Also reject negative pos values
This commit is contained in:
Fabian Joswig 2026-07-15 09:34:10 +02:00 committed by GitHub
commit c58467aa11
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 15 additions and 2 deletions

View file

@ -31,8 +31,8 @@ class Covobs:
else: else:
raise ValueError('Have to specify position of cov-element belonging to mean!') raise ValueError('Have to specify position of cov-element belonging to mean!')
else: else:
if pos > self.N: if pos < 0 or pos >= self.N:
raise ValueError(f'pos {pos} too large for covariance matrix with dimension {self.N}x{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 = np.zeros((self.N, 1))
self._grad[pos] = 1. self._grad[pos] = 1.
else: else:

View file

@ -1,6 +1,7 @@
import autograd.numpy as np import autograd.numpy as np
import pyerrors as pe import pyerrors as pe
import pytest import pytest
from pyerrors.covobs import Covobs
np.random.seed(0) np.random.seed(0)
@ -108,3 +109,15 @@ def test_covobs_exceptions():
covobs = pe.cov_Obs([1.5, 0.1], [[1., .2,], [.3, .5]] , 'test') covobs = pe.cov_Obs([1.5, 0.1], [[1., .2,], [.3, .5]] , 'test')
with pytest.raises(Exception): with pytest.raises(Exception):
covobs = pe.cov_Obs([1.5, 0.1], [[8, 4,], [4, -2]] , 'test') 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)
def test_covobs_pos_negative():
cov = [[1, 0], [0, 1]]
with pytest.raises(ValueError):
Covobs(1.0, cov, 'test', pos=-1)