From 7568275d5d6f1ae48b938c6cc604dadf43e8395f Mon Sep 17 00:00:00 2001 From: Fabian Joswig Date: Wed, 9 Feb 2022 14:05:44 +0000 Subject: [PATCH 1/2] refactor: io tests split up in several files --- tests/{io_test.py => json_io_test.py} | 45 ------------------------ tests/openQCD_in_test.py | 49 +++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 45 deletions(-) rename tests/{io_test.py => json_io_test.py} (80%) create mode 100644 tests/openQCD_in_test.py diff --git a/tests/io_test.py b/tests/json_io_test.py similarity index 80% rename from tests/io_test.py rename to tests/json_io_test.py index 92e97902..f5546d9f 100644 --- a/tests/io_test.py +++ b/tests/json_io_test.py @@ -242,48 +242,3 @@ def test_json_dict_io(): jsonio.dump_dict_to_json(od, fname, description=desc) os.remove(fname + '.json.gz') - - -def test_openqcd(): - path = './tests//data/openqcd_test/' - prefix = 'sfqcd' - postfix = '.rwms' - - # sfqcd-1.6: Trajectories instead of confignumbers are printed to file. - rwfo = pe.input.openQCD.read_rwms(path, prefix, version='1.6', postfix=postfix) - repname = list(rwfo[0].idl.keys())[0] - assert(rwfo[0].idl[repname] == range(1, 13)) - rwfo = pe.input.openQCD.read_rwms(path, prefix, version='1.6', postfix=postfix, r_start=[1], r_stop=[12]) - assert(rwfo[0].idl[repname] == range(1, 13)) - rwfo = pe.input.openQCD.read_rwms(path, prefix, version='1.6', postfix=postfix, r_start=[3], r_stop=[8]) - assert(rwfo[0].idl[repname] == range(3, 9)) - rwfo = pe.input.openQCD.read_rwms(path, prefix, version='1.6', postfix=postfix, r_start=[2], r_stop=[6]) - assert(rwfo[0].idl[repname] == range(2, 7)) - rwfs = pe.input.openQCD.read_rwms(path, prefix, version='1.6', postfix=postfix, r_start=[1], r_stop=[12], r_step=2) - assert(rwfs[0].idl[repname] == range(1, 12, 2)) - rwfs = pe.input.openQCD.read_rwms(path, prefix, version='1.6', postfix=postfix, r_start=[2], r_stop=[12], r_step=2) - assert(rwfs[0].idl[repname] == range(2, 13, 2)) - rwfo = pe.input.openQCD.read_rwms(path, prefix, version='1.6', postfix=postfix) - assert((rwfo[0].r_values[repname] + rwfo[0].deltas[repname][1]) == (rwfs[0].r_values[repname] + rwfs[0].deltas[repname][0])) - - o = pe.pseudo_Obs(1., .01, repname, samples=12) - pe.reweight(rwfo[0], [o]) - - o = pe.pseudo_Obs(1., .01, repname, samples=6) - pe.reweight(rwfo[0], [o]) - o.idl[repname] = range(2, 13, 2) - pe.reweight(rwfo[0], [o]) - pe.reweight(rwfs[0], [o]) - - files = ['openqcd2r1.ms1.dat'] - names = ['openqcd2|r1'] - - # TM with 2 Hasenbusch factors and 2 sources each + RHMC with one source, openQCD 2.0 - rwfo = pe.input.openQCD.read_rwms(path, prefix, version='2.0', files=files, names=names) - assert(len(rwfo) == 2) - assert(rwfo[0].value == 0.9999974970236312) - assert(rwfo[1].value == 1.184681251089919) - repname = list(rwfo[0].idl.keys())[0] - assert(rwfo[0].idl[repname] == range(1, 10)) - rwfo = pe.input.openQCD.read_rwms(path, prefix, version='2.0', files=files, names=names, r_start=[1], r_stop=[8]) - assert(rwfo[0].idl[repname] == range(1, 9)) diff --git a/tests/openQCD_in_test.py b/tests/openQCD_in_test.py new file mode 100644 index 00000000..d1dc999d --- /dev/null +++ b/tests/openQCD_in_test.py @@ -0,0 +1,49 @@ +import os +import numpy as np +import pyerrors as pe +import pytest + + +def test_openqcd(): + path = './tests//data/openqcd_test/' + prefix = 'sfqcd' + postfix = '.rwms' + + # sfqcd-1.6: Trajectories instead of confignumbers are printed to file. + rwfo = pe.input.openQCD.read_rwms(path, prefix, version='1.6', postfix=postfix) + repname = list(rwfo[0].idl.keys())[0] + assert(rwfo[0].idl[repname] == range(1, 13)) + rwfo = pe.input.openQCD.read_rwms(path, prefix, version='1.6', postfix=postfix, r_start=[1], r_stop=[12]) + assert(rwfo[0].idl[repname] == range(1, 13)) + rwfo = pe.input.openQCD.read_rwms(path, prefix, version='1.6', postfix=postfix, r_start=[3], r_stop=[8]) + assert(rwfo[0].idl[repname] == range(3, 9)) + rwfo = pe.input.openQCD.read_rwms(path, prefix, version='1.6', postfix=postfix, r_start=[2], r_stop=[6]) + assert(rwfo[0].idl[repname] == range(2, 7)) + rwfs = pe.input.openQCD.read_rwms(path, prefix, version='1.6', postfix=postfix, r_start=[1], r_stop=[12], r_step=2) + assert(rwfs[0].idl[repname] == range(1, 12, 2)) + rwfs = pe.input.openQCD.read_rwms(path, prefix, version='1.6', postfix=postfix, r_start=[2], r_stop=[12], r_step=2) + assert(rwfs[0].idl[repname] == range(2, 13, 2)) + rwfo = pe.input.openQCD.read_rwms(path, prefix, version='1.6', postfix=postfix) + assert((rwfo[0].r_values[repname] + rwfo[0].deltas[repname][1]) == (rwfs[0].r_values[repname] + rwfs[0].deltas[repname][0])) + + o = pe.pseudo_Obs(1., .01, repname, samples=12) + pe.reweight(rwfo[0], [o]) + + o = pe.pseudo_Obs(1., .01, repname, samples=6) + pe.reweight(rwfo[0], [o]) + o.idl[repname] = range(2, 13, 2) + pe.reweight(rwfo[0], [o]) + pe.reweight(rwfs[0], [o]) + + files = ['openqcd2r1.ms1.dat'] + names = ['openqcd2|r1'] + + # TM with 2 Hasenbusch factors and 2 sources each + RHMC with one source, openQCD 2.0 + rwfo = pe.input.openQCD.read_rwms(path, prefix, version='2.0', files=files, names=names) + assert(len(rwfo) == 2) + assert(rwfo[0].value == 0.9999974970236312) + assert(rwfo[1].value == 1.184681251089919) + repname = list(rwfo[0].idl.keys())[0] + assert(rwfo[0].idl[repname] == range(1, 10)) + rwfo = pe.input.openQCD.read_rwms(path, prefix, version='2.0', files=files, names=names, r_start=[1], r_stop=[8]) + assert(rwfo[0].idl[repname] == range(1, 9)) From 471eabeb8cfe034fb5eee62a0de200cd27ed243b Mon Sep 17 00:00:00 2001 From: Fabian Joswig Date: Wed, 9 Feb 2022 14:18:36 +0000 Subject: [PATCH 2/2] fix: Bug in export of derivative of correlator containing covobs fixed, test added. --- pyerrors/input/json.py | 3 +++ tests/json_io_test.py | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/pyerrors/input/json.py b/pyerrors/input/json.py index 6b854874..cdf203f2 100644 --- a/pyerrors/input/json.py +++ b/pyerrors/input/json.py @@ -171,6 +171,9 @@ def create_json_string(ol, description='', indent=1): names.append(key) idl.append(value) my_obs = Obs(samples, names, idl) + my_obs._covobs = obs._covobs + for name in obs._covobs: + my_obs.names.append(name) my_obs.reweighted = obs.reweighted my_obs.is_merged = obs.is_merged return my_obs diff --git a/tests/json_io_test.py b/tests/json_io_test.py index f5546d9f..04ccfd9f 100644 --- a/tests/json_io_test.py +++ b/tests/json_io_test.py @@ -242,3 +242,12 @@ def test_json_dict_io(): jsonio.dump_dict_to_json(od, fname, description=desc) os.remove(fname + '.json.gz') + + +def test_renorm_deriv_of_corr(tmp_path): + c = pe.Corr([pe.pseudo_Obs(i, .1, 'test') for i in range(10)]) + c *= pe.cov_Obs(1., .1, '#ren') + c = c.deriv() + pe.input.json.dump_to_json(c, (tmp_path / 'test').as_posix()) + recover = pe.input.json.load_json((tmp_path / 'test').as_posix()) + assert np.all([o == 0 for o in (c - recover)[1:-1]])