From cef3c3e793f58dd2280d5c8bf08895134d9039fa Mon Sep 17 00:00:00 2001 From: Justus Kuhlmann <82444481+jkuhl-uni@users.noreply.github.com> Date: Wed, 8 Feb 2023 15:52:29 +0100 Subject: [PATCH] Impr/refactor find files (#151) * wrote small test for ms5_xsf read method * small bug in ms5_xsf found * first version of refactoring with test * built _find_files into openQCD module * postfix can now be used as before * altered test data to be smaller * read_rwms throws better Exception now * typo corrected * better tests for postfixes, also added similar solution for ext variable --- pyerrors/input/openQCD.py | 136 ++++++++++-------- .../ms5_xsf_T24L16r1.ms5_xsf_dd.dat | Bin 0 -> 38800 bytes .../ms5_xsf_T24L16r2.ms5_xsf_dd.dat | Bin 0 -> 38800 bytes .../ms5_xsf_T24L16r3.ms5_xsf_dd.dat | Bin 0 -> 38800 bytes tests/openQCD_in_test.py | 63 +++++++- 5 files changed, 139 insertions(+), 60 deletions(-) create mode 100644 tests/data/openqcd_test/ms5_xsf_T24L16r1.ms5_xsf_dd.dat create mode 100644 tests/data/openqcd_test/ms5_xsf_T24L16r2.ms5_xsf_dd.dat create mode 100644 tests/data/openqcd_test/ms5_xsf_T24L16r3.ms5_xsf_dd.dat diff --git a/pyerrors/input/openQCD.py b/pyerrors/input/openQCD.py index 1ec33141..c77cb92f 100644 --- a/pyerrors/input/openQCD.py +++ b/pyerrors/input/openQCD.py @@ -12,6 +12,46 @@ from ..obs import CObs from ..correlators import Corr +def _find_files(path, prefix, postfix, ext, known_files=[]): + found = [] + files = [] + + if postfix != "": + if postfix[-1] != ".": + postfix = postfix + "." + if postfix[0] != ".": + postfix = "." + postfix + + if ext[0] == ".": + ext = ext[1:] + + pattern = prefix + "*" + postfix + ext + + for (dirpath, dirnames, filenames) in os.walk(path + "/"): + found.extend(filenames) + break + + if known_files != []: + for kf in known_files: + if kf not in found: + raise FileNotFoundError("Given file " + kf + " does not exist!") + + return known_files + + if not found: + raise FileNotFoundError(f"Error, directory '{path}' not found") + + for f in found: + if fnmatch.fnmatch(f, pattern): + files.append(f) + + if files == []: + raise Exception("No files found after pattern filter!") + + files.sort(key=lambda x: int(re.findall(r'\d+', x[len(prefix):])[0])) + return files + + def read_rwms(path, prefix, version='2.0', names=None, **kwargs): """Read rwms format from given folder structure. Returns a list of length nrw @@ -56,21 +96,14 @@ def read_rwms(path, prefix, version='2.0', names=None, **kwargs): postfix = kwargs.get('postfix') else: postfix = '' - ls = [] - for (dirpath, dirnames, filenames) in os.walk(path): - ls.extend(filenames) - break - if not ls: - raise Exception(f"Error, directory '{path}' not found") if 'files' in kwargs: - ls = kwargs.get('files') + known_files = kwargs.get('files') else: - for exc in ls: - if not fnmatch.fnmatch(exc, prefix + '*' + postfix + '.dat'): - ls = list(set(ls) - set([exc])) - if len(ls) > 1: - ls.sort(key=lambda x: int(re.findall(r'\d+', x[len(prefix):])[0])) + known_files = [] + + ls = _find_files(path, prefix, postfix, 'dat', known_files=known_files) + replica = len(ls) if 'r_start' in kwargs: @@ -154,7 +187,7 @@ def read_rwms(path, prefix, version='2.0', names=None, **kwargs): nsrc.append(struct.unpack('i', t)[0]) if version == '2.0': if not struct.unpack('i', fp.read(4))[0] == 0: - print('something is wrong!') + raise Exception("You are using the input for openQCD version 2.0, this is not correct.") configlist.append([]) while True: @@ -297,22 +330,13 @@ def extract_t0(path, prefix, dtr_read, xmin, spatial_extent, fit_range=5, **kwar Extracted t0 """ - ls = [] - for (dirpath, dirnames, filenames) in os.walk(path): - ls.extend(filenames) - break - - if not ls: - raise Exception('Error, directory not found') - if 'files' in kwargs: - ls = kwargs.get('files') + known_files = kwargs.get('files') else: - for exc in ls: - if not fnmatch.fnmatch(exc, prefix + '*.ms.dat'): - ls = list(set(ls) - set([exc])) - if len(ls) > 1: - ls.sort(key=lambda x: int(re.findall(r'\d+', x[len(prefix):])[0])) + known_files = [] + + ls = _find_files(path, prefix, 'ms', 'dat', known_files=known_files) + replica = len(ls) if 'r_start' in kwargs: @@ -721,31 +745,23 @@ def _read_flow_obs(path, prefix, c, dtr_cnfg=1, version="openQCD", obspos=0, sum supposed_L = kwargs.get("L") else: supposed_L = None - postfix = ".gfms.dat" + postfix = "gfms" else: if "L" not in kwargs: raise Exception("This version of openQCD needs you to provide the spatial length of the lattice as parameter 'L'.") else: L = kwargs.get("L") - postfix = ".ms.dat" + postfix = "ms" if "postfix" in kwargs: postfix = kwargs.get("postfix") if "files" in kwargs: - files = kwargs.get("files") - postfix = '' + known_files = kwargs.get("files") else: - found = [] - files = [] - for (dirpath, dirnames, filenames) in os.walk(path + "/"): - found.extend(filenames) - break - for f in found: - if fnmatch.fnmatch(f, prefix + "*" + postfix): - files.append(f) + known_files = [] - files = sorted(files) + files = _find_files(path, prefix, postfix, "dat", known_files=known_files) if 'r_start' in kwargs: r_start = kwargs.get('r_start') @@ -1058,28 +1074,34 @@ def read_ms5_xsf(path, prefix, qc, corr, sep="r", **kwargs): If there is an error unpacking binary data. """ - found = [] + # found = [] files = [] names = [] + # test if the input is correct + if qc not in ['dd', 'ud', 'du', 'uu']: + raise Exception("Unknown quark conbination!") + + if corr not in ["gS", "gP", "gA", "gV", "gVt", "lA", "lV", "lVt", "lT", "lTt", "g1", "l1"]: + raise Exception("Unknown correlator!") + + if "files" in kwargs: + known_files = kwargs.get("files") + else: + known_files = [] + files = _find_files(path, prefix, "ms5_xsf_" + qc, "dat", known_files=known_files) + if "names" in kwargs: names = kwargs.get("names") - - for (dirpath, dirnames, filenames) in os.walk(path + "/"): - found.extend(filenames) - break - - for f in found: - if fnmatch.fnmatch(f, prefix + "*.ms5_xsf_" + qc + ".dat"): - files.append(f) - if "names" not in kwargs: - if not sep == "": - se = f.split(".")[0] - for s in f.split(".")[1:-1]: - se += "." + s - names.append(se.split(sep)[0] + "|r" + se.split(sep)[1]) - else: - names.append(prefix) + else: + for f in files: + if not sep == "": + se = f.split(".")[0] + for s in f.split(".")[1:-2]: + se += "." + s + names.append(se.split(sep)[0] + "|r" + se.split(sep)[1]) + else: + names.append(prefix) names = sorted(names) files = sorted(files) diff --git a/tests/data/openqcd_test/ms5_xsf_T24L16r1.ms5_xsf_dd.dat b/tests/data/openqcd_test/ms5_xsf_T24L16r1.ms5_xsf_dd.dat new file mode 100644 index 0000000000000000000000000000000000000000..578d29c6204563d4ea45607c6483bf0c49adf25d GIT binary patch literal 38800 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 MMQe6_x7O_XKj(vVbN~PV literal 0 HcmV?d00001 diff --git a/tests/data/openqcd_test/ms5_xsf_T24L16r2.ms5_xsf_dd.dat b/tests/data/openqcd_test/ms5_xsf_T24L16r2.ms5_xsf_dd.dat new file mode 100644 index 0000000000000000000000000000000000000000..578d29c6204563d4ea45607c6483bf0c49adf25d GIT binary patch literal 38800 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 MMQe6_x7O_XKj(vVbN~PV literal 0 HcmV?d00001 diff --git a/tests/data/openqcd_test/ms5_xsf_T24L16r3.ms5_xsf_dd.dat b/tests/data/openqcd_test/ms5_xsf_T24L16r3.ms5_xsf_dd.dat new file mode 100644 index 0000000000000000000000000000000000000000..578d29c6204563d4ea45607c6483bf0c49adf25d GIT binary patch literal 38800 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 MMQe6_x7O_XKj(vVbN~PV literal 0 HcmV?d00001 diff --git a/tests/openQCD_in_test.py b/tests/openQCD_in_test.py index 9039e5e0..57f7c8a5 100644 --- a/tests/openQCD_in_test.py +++ b/tests/openQCD_in_test.py @@ -7,7 +7,7 @@ import pytest def test_rwms(): path = './tests//data/openqcd_test/' prefix = 'sfqcd' - postfix = '.rwms' + 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) @@ -87,7 +87,7 @@ def test_Qtop(): assert (np.isclose(2.745865e-01, qtop.r_values[repname] + qtop.deltas[repname][1])) qtop = pe.input.openQCD.read_qtop(path, prefix, c=0.40, version='sfqcd', Zeuthen_flow=True, r_start=[2]) - assert(qtop.idl[repname] == range(2, 7)) + assert (qtop.idl[repname] == range(2, 7)) assert (np.isclose(2.745865e-01, qtop.r_values[repname] + qtop.deltas[repname][0])) qtop = pe.input.openQCD.read_qtop(path, prefix, c=0.40, version='sfqcd', Zeuthen_flow=True, r_stop=[5]) @@ -97,7 +97,7 @@ def test_Qtop(): files = ['sfqcdr1.gfms.dat'] qs = pe.input.openQCD.read_qtop_sector(path, '', 0.3, target=0, Zeuthen_flow=True, version='sfqcd') - assert((pe.input.openQCD.qtop_projection(qi, target=0) - qs).is_zero()) + assert ((pe.input.openQCD.qtop_projection(qi, target=0) - qs).is_zero()) def test_gf_coupling(): @@ -108,3 +108,60 @@ def test_gf_coupling(): pe.input.openQCD.read_gf_coupling(path, prefix, c=0.35) with pytest.raises(Exception): pe.input.openQCD.read_gf_coupling(path, prefix, c=0.3, Zeuthen_flow=False) + + +def test_read_ms5_xsf(): + path = './tests//data/openqcd_test/' + prefix = "ms5_xsf_T24L16" + corr = "gA" + qc = 'dd' + + c = pe.input.openQCD.read_ms5_xsf(path, prefix, qc, corr) + + assert c.real[12].names == ['ms5_xsf_T24L16|r1', 'ms5_xsf_T24L16|r2', 'ms5_xsf_T24L16|r3'] + + assert (c.real[12].shape['ms5_xsf_T24L16|r1'] == 10) + assert (c.real[12].shape['ms5_xsf_T24L16|r2'] == 10) + assert (c.real[12].shape['ms5_xsf_T24L16|r3'] == 10) + + assert (c.real[12].value == -3.0000000000001923) + + fqc = "rq" + with pytest.raises(Exception): + pe.input.openQCD.read_ms5_xsf(path, prefix, fqc, corr) + + fcorr = "gX" + with pytest.raises(Exception): + pe.input.openQCD.read_ms5_xsf(path, prefix, qc, fcorr) + + +def test_find_files(): + path = './tests//data/openqcd_test/' + prefix = "ms5_xsf_T24L16" + qc = 'dd' + + files = pe.input.openQCD._find_files(path, prefix, "ms5_xsf_" + qc, "dat") + assert (len(files) == 3) + + files = pe.input.openQCD._find_files(path, prefix, ".ms5_xsf_" + qc, "dat") + assert (len(files) == 3) + + files = pe.input.openQCD._find_files(path, prefix, "ms5_xsf_" + qc + ".", "dat") + assert (len(files) == 3) + + files = pe.input.openQCD._find_files(path, prefix, ".ms5_xsf_" + qc + ".", "dat") + assert (len(files) == 3) + + files = pe.input.openQCD._find_files(path, prefix, ".ms5_xsf_" + qc + ".", ".dat") + assert (len(files) == 3) + + with pytest.raises(FileNotFoundError): + pe.input.openQCD._find_files(path, prefix, "ms5_xsf_" + qc, "dat", known_files="egg") + + fpath = './tests//data/openqc_test/' + with pytest.raises(FileNotFoundError): + pe.input.openQCD._find_files(fpath, prefix, "ms5_xsf_" + qc, "dat") + + fpre = "tune62" + with pytest.raises(Exception): + pe.input.openQCD._find_files(path, fpre, "ms5_xsf_" + qc, "dat")