From 43383acead845c197df5e1cdeaa6b8775f5213dc Mon Sep 17 00:00:00 2001 From: Fabian Joswig Date: Tue, 6 Feb 2024 17:54:33 +0100 Subject: [PATCH 1/2] [ci] Update actions to use Node.js 20 (#228) --- .github/workflows/docs.yml | 4 ++-- .github/workflows/examples.yml | 4 ++-- .github/workflows/flake8.yml | 4 ++-- .github/workflows/pytest.yml | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 9b204da6..03ca7c23 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -11,10 +11,10 @@ jobs: steps: - name: Set up Python environment - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: "3.10" - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Updated documentation run: | git config --global user.email "${{ github.actor }}@users.noreply.github.com" diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml index dd2fc4cf..67636577 100644 --- a/.github/workflows/examples.yml +++ b/.github/workflows/examples.yml @@ -21,10 +21,10 @@ jobs: steps: - name: Checkout source - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/flake8.yml b/.github/workflows/flake8.yml index d931f241..c6625b37 100644 --- a/.github/workflows/flake8.yml +++ b/.github/workflows/flake8.yml @@ -13,9 +13,9 @@ jobs: name: Lint steps: - name: Check out source repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set up Python environment - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: "3.10" - name: flake8 Lint diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml index e6bfe427..1bdd412d 100644 --- a/.github/workflows/pytest.yml +++ b/.github/workflows/pytest.yml @@ -24,10 +24,10 @@ jobs: steps: - name: Checkout source - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} From b930fab9c223b3d19042d06df141a0c51fea93ee Mon Sep 17 00:00:00 2001 From: Justus Kuhlmann <82444481+jkuhl-uni@users.noreply.github.com> Date: Sun, 18 Feb 2024 13:39:35 +0100 Subject: [PATCH 2/2] Fix keyword files with list of lists (#226) * first impl. handle reps with list of lists * implement explicit type checks --- pyerrors/input/sfcf.py | 19 +++++++++++++--- tests/sfcf_in_test.py | 49 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 3 deletions(-) diff --git a/pyerrors/input/sfcf.py b/pyerrors/input/sfcf.py index 82957552..94aa1948 100644 --- a/pyerrors/input/sfcf.py +++ b/pyerrors/input/sfcf.py @@ -121,7 +121,7 @@ def read_sfcf_multi(path, prefix, name_list, quarks_list=['.*'], corr_type_list= String that separates the ensemble identifier from the configuration number (default 'n'). replica: list list of replica to be read, default is all - files: list + files: list[list[int]] list of files to be read per replica, default is all. for non-compact output format, hand the folders to be read here. check_configs: list[list[int]] @@ -236,6 +236,16 @@ def read_sfcf_multi(path, prefix, name_list, quarks_list=['.*'], corr_type_list= rep_path = path + '/' + item if "files" in kwargs: files = kwargs.get("files") + if isinstance(files, list): + if all(isinstance(f, list) for f in files): + files = files[i] + elif all(isinstance(f, str) for f in files): + files = files + else: + raise TypeError("files has to be of type list[list[str]] or list[str]!") + else: + raise TypeError("files has to be of type list[list[str]] or list[str]!") + else: files = [] sub_ls = _find_files(rep_path, prefix, compact, files) @@ -248,7 +258,7 @@ def read_sfcf_multi(path, prefix, name_list, quarks_list=['.*'], corr_type_list= else: rep_idl.append(int(cfg[3:])) except Exception: - raise Exception("Couldn't parse idl from directroy, problem with file " + cfg) + raise Exception("Couldn't parse idl from directory, problem with file " + cfg) rep_idl.sort() # maybe there is a better way to print the idls if not silent: @@ -309,7 +319,10 @@ def read_sfcf_multi(path, prefix, name_list, quarks_list=['.*'], corr_type_list= w = specs[3] w2 = specs[4] if "files" in kwargs: - ls = kwargs.get("files") + if isinstance(kwargs.get("files"), list) and all(isinstance(f, str) for f in kwargs.get("files")): + name_ls = kwargs.get("files") + else: + raise TypeError("In append mode, files has to be of type list[str]!") else: name_ls = ls for exc in name_ls: diff --git a/tests/sfcf_in_test.py b/tests/sfcf_in_test.py index ac05dc04..f92126f9 100644 --- a/tests/sfcf_in_test.py +++ b/tests/sfcf_in_test.py @@ -50,6 +50,18 @@ def test_o_bi(tmp_path): assert f_A[2].value == -41.025094911185185 +def test_o_bi_files(tmp_path): + build_test_environment(str(tmp_path), "o", 10, 3) + f_A = sfin.read_sfcf(str(tmp_path) + "/data_o", "test", "f_A", quarks="lquark lquark", wf=0, version="2.0", + files=[["cfg" + str(i) for i in range(1, 11, 2)], ["cfg" + str(i) for i in range(2, 11, 2)], ["cfg" + str(i) for i in range(1, 11, 2)]]) + print(f_A) + assert len(f_A) == 3 + assert list(f_A[0].shape.keys()) == ["test_|r0", "test_|r1", "test_|r2"] + assert f_A[0].value == 65.4711887279723 + assert f_A[1].value == 1.0447210336915187 + assert f_A[2].value == -41.025094911185185 + + def test_o_bib(tmp_path): build_test_environment(str(tmp_path), "o", 5, 3) f_V0 = sfin.read_sfcf(str(tmp_path) + "/data_o", "test", "F_V0", quarks="lquark lquark", wf=0, wf2=0, version="2.0", corr_type="bib") @@ -120,6 +132,25 @@ def test_c_bi(tmp_path): assert f_A[2].value == -41.025094911185185 +def test_c_bi_files(tmp_path): + build_test_environment(str(tmp_path), "c", 10, 3) + f_A = sfin.read_sfcf(str(tmp_path) + "/data_c", "data_c", "f_A", quarks="lquark lquark", wf=0, version="2.0c", + files=[["data_c_r0_n" + str(i) for i in range(1, 11, 2)], ["data_c_r1_n" + str(i) for i in range(2, 11, 2)], ["data_c_r2_n" + str(i) for i in range(1, 11, 2)]]) + print(f_A) + assert len(f_A) == 3 + assert list(f_A[0].shape.keys()) == ["data_c_|r0", "data_c_|r1", "data_c_|r2"] + assert f_A[0].value == 65.4711887279723 + assert f_A[1].value == 1.0447210336915187 + assert f_A[2].value == -41.025094911185185 + + +def test_c_bi_files_int_fail(tmp_path): + build_test_environment(str(tmp_path), "c", 10, 3) + with pytest.raises(TypeError): + sfin.read_sfcf(str(tmp_path) + "/data_c", "data_c", "f_A", quarks="lquark lquark", wf=0, version="2.0c", + files=[[range(1, 11, 2)], [range(2, 11, 2)], [range(1, 11, 2)]]) + + def test_c_bib(tmp_path): build_test_environment(str(tmp_path), "c", 5, 3) f_V0 = sfin.read_sfcf(str(tmp_path) + "/data_c", "data_c", "F_V0", quarks="lquark lquark", wf=0, wf2=0, version="2.0c", corr_type="bib") @@ -256,6 +287,24 @@ def test_a_bi(tmp_path): assert f_A[2].value == -41.025094911185185 +def test_a_bi_files(tmp_path): + build_test_environment(str(tmp_path), "a", 5, 3) + f_A = sfin.read_sfcf(str(tmp_path) + "/data_a", "data_a", "f_A", quarks="lquark lquark", wf=0, version="2.0a", files=["data_a_r0.f_A", "data_a_r1.f_A", "data_a_r2.f_A"]) + print(f_A) + assert len(f_A) == 3 + assert list(f_A[0].shape.keys()) == ["data_a_|r0", "data_a_|r1", "data_a_|r2"] + assert f_A[0].value == 65.4711887279723 + assert f_A[1].value == 1.0447210336915187 + assert f_A[2].value == -41.025094911185185 + + +def test_a_bi_files_int_fail(tmp_path): + build_test_environment(str(tmp_path), "a", 10, 3) + with pytest.raises(TypeError): + sfin.read_sfcf(str(tmp_path) + "/data_a", "data_a", "f_A", quarks="lquark lquark", wf=0, version="2.0a", + files=[[range(1, 11, 2)], [range(2, 11, 2)], [range(1, 11, 2)]]) + + def test_a_bib(tmp_path): build_test_environment(str(tmp_path), "a", 5, 3) f_V0 = sfin.read_sfcf(str(tmp_path) + "/data_a", "data_a", "F_V0", quarks="lquark lquark", wf=0, wf2=0, version="2.0a", corr_type="bib")