From 3c3fd70ce506a5935032ee1372b73082fb69a405 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ruaidhr=C3=AD?= Date: Fri, 17 Oct 2025 19:52:08 +0100 Subject: [PATCH 1/3] pyerrors/correlators.py: Allowing for None values in pe.Corr.prune Closes: fjosw#271 --- pyerrors/correlators.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/pyerrors/correlators.py b/pyerrors/correlators.py index 0375155f..fb14d6d1 100644 --- a/pyerrors/correlators.py +++ b/pyerrors/correlators.py @@ -1405,13 +1405,15 @@ def prune(self, Ntrunc, tproj=3, t0proj=2, basematrix=None): tmpmat = np.empty((Ntrunc, Ntrunc), dtype=object) rmat = [] for t in range(basematrix.T): - for i in range(Ntrunc): - for j in range(Ntrunc): - tmpmat[i][j] = evecs[i].T @ self[t] @ evecs[j] - rmat.append(np.copy(tmpmat)) + if self.content[t] is None: + rmat.append(None) + else: + for i in range(Ntrunc): + for j in range(Ntrunc): + tmpmat[i][j] = evecs[i].T @ self[t] @ evecs[j] + rmat.append(np.copy(tmpmat)) - newcontent = [None if (self.content[t] is None) else rmat[t] for t in range(self.T)] - return Corr(newcontent) + return Corr(rmat) def _sort_vectors(vec_set_in, ts): From bff1e4ca8c8fba05ec8a08c49f1e0413c4fa49f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ruaidhr=C3=AD?= Date: Sat, 18 Oct 2025 18:53:27 +0100 Subject: [PATCH 2/3] wip --- tests/correlators_test.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tests/correlators_test.py b/tests/correlators_test.py index fc3528d2..cb8517fa 100644 --- a/tests/correlators_test.py +++ b/tests/correlators_test.py @@ -781,3 +781,27 @@ def test_complex_add_and_mul(): cc += 2j cc = cc * 4j cc.real + cc.imag + + +def test_prune_with_Nones(): + N = 3 + T = 10 + + front_padding = 1 + back_padding = T // 2 + + Ntrunc = N - 1 + t0proj = 2 + tproj = 3 + + corr_content = np.array([[[pe.pseudo_Obs((i+j+1)**(-t), .01, "None_prune_test") for i in range(N)] for j in range(N)] for t in range(T // 2 - front_padding)]) + unpadded_corr = pe.Corr(corr_content) + padded_corr = pe.Corr(corr_content, padding=[front_padding, back_padding]) + + tmp_corr = unpadded_corr.prune(Ntrunc, t0proj=t0proj-front_padding, tproj=tproj-front_padding) + pruned_then_padded = pe.Corr(tmp_corr.content, padding=[front_padding, back_padding]) + with pytest.raises(ValueError): + padded_then_pruned = padded_corr.prune(Ntrunc, t0proj=t0proj, tproj=tproj) + + for t in range(T): + assert np.all(pruned_then_padded.content[t] == padded_then_pruned.content[t]) From ff03d8a06ce899c1bacc633c7ceeb7b97dafec63 Mon Sep 17 00:00:00 2001 From: campioru Date: Sat, 18 Oct 2025 19:07:43 +0100 Subject: [PATCH 3/3] test/correlators_test.py: Adding test for updated prune method. Closes #271 --- tests/correlators_test.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/correlators_test.py b/tests/correlators_test.py index cb8517fa..cd629275 100644 --- a/tests/correlators_test.py +++ b/tests/correlators_test.py @@ -800,8 +800,7 @@ def test_prune_with_Nones(): tmp_corr = unpadded_corr.prune(Ntrunc, t0proj=t0proj-front_padding, tproj=tproj-front_padding) pruned_then_padded = pe.Corr(tmp_corr.content, padding=[front_padding, back_padding]) - with pytest.raises(ValueError): - padded_then_pruned = padded_corr.prune(Ntrunc, t0proj=t0proj, tproj=tproj) + padded_then_pruned = padded_corr.prune(Ntrunc, t0proj=t0proj, tproj=tproj) for t in range(T): assert np.all(pruned_then_padded.content[t] == padded_then_pruned.content[t])