Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Impr/refactor find files #153

Merged
merged 11 commits into from Feb 17, 2023
38 changes: 36 additions & 2 deletions pyerrors/input/openQCD.py
Expand Up @@ -48,10 +48,39 @@ def _find_files(path, prefix, postfix, ext, known_files=[]):
if files == []:
raise Exception("No files found after pattern filter!")

files.sort(key=lambda x: int(re.findall(r'\d+', x[len(prefix):])[0]))
files = _sort_names(files)
return files


def _sort_names(ll):
r_pattern = r'r(\d+)'
id_pattern = r'id(\d+)'

# sort list by id first
if all([re.search(id_pattern, entry) for entry in ll]):
ll.sort(key=lambda x: int(re.findall(id_pattern, x)[0]))
# then by replikum
if all([re.search(r_pattern, entry) for entry in ll]):
ll.sort(key=lambda x: int(re.findall(r_pattern, x)[0]))
# as the rearrangements by one key let the other key untouched, the list is sorted now

else:
# fallback
sames = ''
if len(ll) > 1:
for i in range(len(ll[0])):
checking = ll[0][i]
for rn in ll[1:]:
is_same = (rn[i] == checking)
if is_same:
sames += checking
else:
break
print(ll[0][len(sames):])
ll.sort(key=lambda x: int(re.findall(r'\d+', x[len(sames):])[0]))
return ll


def read_rwms(path, prefix, version='2.0', names=None, **kwargs):
"""Read rwms format from given folder structure. Returns a list of length nrw

Expand Down Expand Up @@ -142,6 +171,8 @@ def read_rwms(path, prefix, version='2.0', names=None, **kwargs):
else:
rep_names = names

rep_names = _sort_names(rep_names)

print_err = 0
if 'print_err' in kwargs:
print_err = 1
Expand Down Expand Up @@ -936,12 +967,15 @@ def _read_flow_obs(path, prefix, c, dtr_cnfg=1, version="openQCD", obspos=0, sum
if "names" not in kwargs:
raise Exception("Automatic recognition of replicum failed, please enter the key word 'names'.")
ens_name = truncated_file[:idx]
rep_names.append(ens_name + '|' + truncated_file[idx:])
rep_names.append(ens_name + '|' + truncated_file[idx:].split(".")[0])
else:
names = kwargs.get("names")
rep_names = names

deltas.append(Q_top)

rep_names = _sort_names(rep_names)

idl = [range(int(configlist[rep][r_start_index[rep]]), int(configlist[rep][r_stop_index[rep]]) + 1, 1) for rep in range(len(deltas))]
deltas = [deltas[nrep][r_start_index[nrep]:r_stop_index[nrep] + 1] for nrep in range(len(deltas))]
result = Obs(deltas, rep_names, idl=idl)
Expand Down
8 changes: 8 additions & 0 deletions tests/openQCD_in_test.py
Expand Up @@ -165,3 +165,11 @@ def test_find_files():
fpre = "tune62"
with pytest.raises(Exception):
pe.input.openQCD._find_files(path, fpre, "ms5_xsf_" + qc, "dat")


def test_sort_names():
my_list = ['sfqcd_r1_id5', 'sfqcd_r10_id5', 'sfqcd_r7_id5', 'sfqcd_r2_id5', 'sfqcd_r2_id9', 'sfqcd_r10_id4']
presorted_list = ['sfqcd_r1_id5', 'sfqcd_r2_id5', 'sfqcd_r2_id9', 'sfqcd_r7_id5', 'sfqcd_r10_id4', 'sfqcd_r10_id5']

sorted_list = pe.input.openQCD._sort_names(my_list)
assert (all([sorted_list[i] == presorted_list[i] for i in range(len(sorted_list))]))