From c8ec5909f14e760bf6bab17140eb52729eafb721 Mon Sep 17 00:00:00 2001 From: Fabian Joswig Date: Wed, 19 Jan 2022 10:46:33 +0000 Subject: [PATCH 1/3] fix: io tests for corr now properly clean up --- tests/io_test.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/io_test.py b/tests/io_test.py index b9726130..6b5c0917 100644 --- a/tests/io_test.py +++ b/tests/io_test.py @@ -105,6 +105,7 @@ def test_json_corr_io(): my_corr.tag = corr_tag pe.input.json.dump_to_json(my_corr, 'corr') recover = pe.input.json.load_json('corr') + os.remove('corr.json.gz') assert np.all([o.is_zero() for o in [x for x in (my_corr - recover) if x is not None]]) assert my_corr.tag == recover.tag assert my_corr.reweighted == recover.reweighted @@ -120,5 +121,6 @@ def test_json_corr_2d_io(): my_corr.tag = tag pe.input.json.dump_to_json(my_corr, 'corr') recover = pe.input.json.load_json('corr') + os.remove('corr.json.gz') assert np.all([np.all([o.is_zero() for o in q]) for q in [x.ravel() for x in (my_corr - recover) if x is not None]]) assert my_corr.tag == recover.tag From 78ff4bb1173ab32dda873d7b9d2f328f05ba1869 Mon Sep 17 00:00:00 2001 From: Fabian Joswig Date: Wed, 19 Jan 2022 10:55:51 +0000 Subject: [PATCH 2/3] refactor: moved _assert_equal_properties from input.json to misc --- pyerrors/input/json.py | 15 +-------------- pyerrors/misc.py | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/pyerrors/input/json.py b/pyerrors/input/json.py index 816be57e..1214019f 100644 --- a/pyerrors/input/json.py +++ b/pyerrors/input/json.py @@ -9,6 +9,7 @@ import warnings from ..obs import Obs from ..covobs import Covobs from ..correlators import Corr +from ..misc import _assert_equal_properties from .. import version as pyerrorsversion @@ -104,20 +105,6 @@ def create_json_string(ol, description='', indent=1): dl.append(ed) return dl - def _assert_equal_properties(ol, otype=Obs): - for o in ol: - if not isinstance(o, otype): - raise Exception("Wrong data type in list.") - for o in ol[1:]: - if not ol[0].is_merged == o.is_merged: - raise Exception("All Obs in list have to be defined on the same set of configs.") - if not ol[0].reweighted == o.reweighted: - raise Exception("All Obs in list have to have the same property 'reweighted'.") - if not ol[0].e_content == o.e_content: - raise Exception("All Obs in list have to be defined on the same set of configs.") - if not ol[0].idl == o.idl: - raise Exception("All Obs in list have to be defined on the same set of configurations.") - def write_Obs_to_dict(o): d = {} d['type'] = 'Obs' diff --git a/pyerrors/misc.py b/pyerrors/misc.py index e3bfbc33..edbdc369 100644 --- a/pyerrors/misc.py +++ b/pyerrors/misc.py @@ -70,3 +70,19 @@ def gen_correlated_data(means, cov, name, tau=0.5, samples=1000): data.append(np.sqrt(1 - a ** 2) * rand[i] + a * data[-1]) corr_data = np.array(data) - np.mean(data, axis=0) + means return [Obs([dat], [name]) for dat in corr_data.T] + + +def _assert_equal_properties(ol, otype=Obs): + for o in ol: + if not isinstance(o, otype): + raise Exception("Wrong data type in list.") + for o in ol[1:]: + if not ol[0].is_merged == o.is_merged: + raise Exception("All Obs in list have to be defined on the same set of configs.") + if not ol[0].reweighted == o.reweighted: + raise Exception("All Obs in list have to have the same property 'reweighted'.") + if not ol[0].e_content == o.e_content: + raise Exception("All Obs in list have to be defined on the same set of configs.") + if not ol[0].idl == o.idl: + raise Exception("All Obs in list have to be defined on the same set of configurations.") + From c3ba07280b51bc3a31476349fc1a4d0a489a2346 Mon Sep 17 00:00:00 2001 From: Fabian Joswig Date: Wed, 19 Jan 2022 11:03:45 +0000 Subject: [PATCH 3/3] feat: When initializing 1d correlators it is now checked whether all obs are defined on the same ensembles. --- pyerrors/correlators.py | 6 ++---- pyerrors/misc.py | 1 - tests/correlators_test.py | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/pyerrors/correlators.py b/pyerrors/correlators.py index 9262d08d..2209c431 100644 --- a/pyerrors/correlators.py +++ b/pyerrors/correlators.py @@ -4,7 +4,7 @@ import autograd.numpy as anp import matplotlib.pyplot as plt import scipy.linalg from .obs import Obs, reweight, correlate, CObs -from .misc import dump_object +from .misc import dump_object, _assert_equal_properties from .fits import least_squares from .linalg import eigh, inv, cholesky from .roots import find_root @@ -42,10 +42,8 @@ class Corr: if not isinstance(data_input, list): raise TypeError('Corr__init__ expects a list of timeslices.') - # data_input can have multiple shapes. The simplest one is a list of Obs. - # We check, if this is the case if all([(isinstance(item, Obs) or isinstance(item, CObs)) for item in data_input]): - + _assert_equal_properties(data_input) self.content = [np.asarray([item]) for item in data_input] self.N = 1 diff --git a/pyerrors/misc.py b/pyerrors/misc.py index edbdc369..740aff9a 100644 --- a/pyerrors/misc.py +++ b/pyerrors/misc.py @@ -85,4 +85,3 @@ def _assert_equal_properties(ol, otype=Obs): raise Exception("All Obs in list have to be defined on the same set of configs.") if not ol[0].idl == o.idl: raise Exception("All Obs in list have to be defined on the same set of configurations.") - diff --git a/tests/correlators_test.py b/tests/correlators_test.py index 155fc61b..55d0a977 100644 --- a/tests/correlators_test.py +++ b/tests/correlators_test.py @@ -120,6 +120,24 @@ def test_padded_correlator(): [o for o in my_corr] +def test_corr_exceptions(): + obs_a = pe.Obs([np.random.normal(0.1, 0.1, 100)], ['test']) + obs_b= pe.Obs([np.random.normal(0.1, 0.1, 99)], ['test']) + with pytest.raises(Exception): + pe.Corr([obs_a, obs_b]) + + obs_a = pe.Obs([np.random.normal(0.1, 0.1, 100)], ['test']) + obs_b= pe.Obs([np.random.normal(0.1, 0.1, 100)], ['test'], idl=[range(1, 200, 2)]) + with pytest.raises(Exception): + pe.Corr([obs_a, obs_b]) + + obs_a = pe.Obs([np.random.normal(0.1, 0.1, 100)], ['test']) + obs_b= pe.Obs([np.random.normal(0.1, 0.1, 100)], ['test2']) + with pytest.raises(Exception): + pe.Corr([obs_a, obs_b]) + + + def test_utility(): corr_content = [] for t in range(8):