From afbecbe5c3febd9e94adb97caf45deef164adaf9 Mon Sep 17 00:00:00 2001 From: jacoterh <54140851+jacoterh@users.noreply.github.com> Date: Mon, 3 Nov 2025 15:04:17 +0000 Subject: [PATCH 1/2] adding pos def check exp covmat --- .github/workflows/unittests.yml | 10 +++++++ tests/test_covariance.py | 47 +++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 tests/test_covariance.py diff --git a/.github/workflows/unittests.yml b/.github/workflows/unittests.yml index 9bdf50e0..253f72b1 100644 --- a/.github/workflows/unittests.yml +++ b/.github/workflows/unittests.yml @@ -21,3 +21,13 @@ jobs: pip install smefit - name: Run tests run: pytest + - name: Install smefit + run: | + pip install smefit + - name: Test with pytest + run: | + # add test packages + pip install pytest + pip install pytest-cov + pip install pytest-env + pytest diff --git a/tests/test_covariance.py b/tests/test_covariance.py new file mode 100644 index 00000000..8d933469 --- /dev/null +++ b/tests/test_covariance.py @@ -0,0 +1,47 @@ +# python +import pathlib +import numpy as np +import pytest +from smefit.loader import Loader +from smefit.covmat import covmat_from_systematics + +COMMONDATA_DIRS = ["../commondata", "../commondata_projections_L0"] + + +def get_yaml_files(directories): + files = [] + for directory in directories: + if pathlib.Path(directory).is_dir(): + files.extend( + (f.stem, directory) + for f in pathlib.Path(directory).iterdir() + if f.suffix == ".yaml" + ) + return files + + +@pytest.mark.parametrize("dataset,commondata_dir", get_yaml_files(COMMONDATA_DIRS)) +def test_experimental_covmat(dataset, commondata_dir): + Loader.commondata_path = pathlib.Path(commondata_dir) + Loader.theory_path = pathlib.Path("../theory") + + loaded_dataset = Loader( + setname=dataset, + operators_to_keep=[], + order="LO", + use_quad="False", + use_theory_covmat="False", + use_multiplicative_prescription="False", + rot_to_fit_basis=None, + cutoff_scale=None, + ) + + stat_error = loaded_dataset.stat_error + sys_error = loaded_dataset.sys_error + + exp_covmat = covmat_from_systematics([stat_error], [sys_error]) + + eigvals = np.linalg.eigvalsh(exp_covmat) + assert np.all( + eigvals > 0 + ), f"Experimental covariance matrix for {dataset} is not positive definite." From e1adf239139a0762871c3e366398eb597d5ffdb2 Mon Sep 17 00:00:00 2001 From: jacoterh <54140851+jacoterh@users.noreply.github.com> Date: Mon, 3 Nov 2025 15:17:15 +0000 Subject: [PATCH 2/2] updating paths --- tests/test_covariance.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/tests/test_covariance.py b/tests/test_covariance.py index 8d933469..2ea8091d 100644 --- a/tests/test_covariance.py +++ b/tests/test_covariance.py @@ -1,11 +1,15 @@ # python -import pathlib +import pathlib, os import numpy as np import pytest from smefit.loader import Loader from smefit.covmat import covmat_from_systematics -COMMONDATA_DIRS = ["../commondata", "../commondata_projections_L0"] +BASE_DIR = os.path.dirname(__file__) +COMMONDATA_DIRS = [ + pathlib.Path(BASE_DIR + "/../commondata"), + pathlib.Path(BASE_DIR + "/../commondata_projections_L0"), +] def get_yaml_files(directories): @@ -22,8 +26,8 @@ def get_yaml_files(directories): @pytest.mark.parametrize("dataset,commondata_dir", get_yaml_files(COMMONDATA_DIRS)) def test_experimental_covmat(dataset, commondata_dir): - Loader.commondata_path = pathlib.Path(commondata_dir) - Loader.theory_path = pathlib.Path("../theory") + Loader.commondata_path = commondata_dir + Loader.theory_path = pathlib.Path(BASE_DIR + "/../theory") loaded_dataset = Loader( setname=dataset,