Skip to content

Commit 9ff34c2

Browse files
authored
Fix/sfcf ensname (#253)
* correct strings in _get_rep_names, add option for rep_sep * doc * add test for rep name getters
1 parent 997d360 commit 9ff34c2

File tree

2 files changed

+40
-9
lines changed

2 files changed

+40
-9
lines changed

pyerrors/input/sfcf.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,8 @@ def read_sfcf_multi(path, prefix, name_list, quarks_list=['.*'], corr_type_list=
127127
check_configs: list[list[int]]
128128
list of list of supposed configs, eg. [range(1,1000)]
129129
for one replicum with 1000 configs
130-
130+
rep_string: str
131+
Separator of ensemble name and replicum. Example: In "ensAr0", "r" would be the separator string.
131132
Returns
132133
-------
133134
result: dict[list[Obs]]
@@ -199,9 +200,9 @@ def read_sfcf_multi(path, prefix, name_list, quarks_list=['.*'], corr_type_list=
199200
else:
200201
ens_name = kwargs.get("ens_name")
201202
if not appended:
202-
new_names = _get_rep_names(ls, ens_name)
203+
new_names = _get_rep_names(ls, ens_name, rep_sep=(kwargs.get('rep_string', 'r')))
203204
else:
204-
new_names = _get_appended_rep_names(ls, prefix, name_list[0], ens_name)
205+
new_names = _get_appended_rep_names(ls, prefix, name_list[0], ens_name, rep_sep=(kwargs.get('rep_string', 'r')))
205206
new_names = sort_names(new_names)
206207

207208
idl = []
@@ -646,22 +647,22 @@ def _read_append_rep(filename, pattern, b2b, cfg_separator, im, single):
646647
return T, rep_idl, data
647648

648649

649-
def _get_rep_names(ls, ens_name=None):
650+
def _get_rep_names(ls, ens_name=None, rep_sep='r'):
650651
new_names = []
651652
for entry in ls:
652653
try:
653-
idx = entry.index('r')
654+
idx = entry.index(rep_sep)
654655
except Exception:
655656
raise Exception("Automatic recognition of replicum failed, please enter the key word 'names'.")
656657

657658
if ens_name:
658-
new_names.append('ens_name' + '|' + entry[idx:])
659+
new_names.append(ens_name + '|' + entry[idx:])
659660
else:
660661
new_names.append(entry[:idx] + '|' + entry[idx:])
661662
return new_names
662663

663664

664-
def _get_appended_rep_names(ls, prefix, name, ens_name=None):
665+
def _get_appended_rep_names(ls, prefix, name, ens_name=None, rep_sep='r'):
665666
new_names = []
666667
for exc in ls:
667668
if not fnmatch.fnmatch(exc, prefix + '*.' + name):
@@ -670,12 +671,12 @@ def _get_appended_rep_names(ls, prefix, name, ens_name=None):
670671
for entry in ls:
671672
myentry = entry[:-len(name) - 1]
672673
try:
673-
idx = myentry.index('r')
674+
idx = myentry.index(rep_sep)
674675
except Exception:
675676
raise Exception("Automatic recognition of replicum failed, please enter the key word 'names'.")
676677

677678
if ens_name:
678-
new_names.append('ens_name' + '|' + entry[idx:])
679+
new_names.append(ens_name + '|' + entry[idx:])
679680
else:
680681
new_names.append(myentry[:idx] + '|' + myentry[idx:])
681682
return new_names

tests/sfcf_in_test.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,3 +387,33 @@ def test_find_correlator():
387387
found_start, found_T = sfin._find_correlator(file, "2.0", "name f_A\nquarks lquark lquark\noffset 0\nwf 0", False, False)
388388
assert found_start == 21
389389
assert found_T == 3
390+
391+
392+
def test_get_rep_name():
393+
names = ['data_r0', 'data_r1', 'data_r2']
394+
new_names = sfin._get_rep_names(names)
395+
assert len(new_names) == 3
396+
assert new_names[0] == 'data_|r0'
397+
assert new_names[1] == 'data_|r1'
398+
assert new_names[2] == 'data_|r2'
399+
names = ['data_q0', 'data_q1', 'data_q2']
400+
new_names = sfin._get_rep_names(names, rep_sep='q')
401+
assert len(new_names) == 3
402+
assert new_names[0] == 'data_|q0'
403+
assert new_names[1] == 'data_|q1'
404+
assert new_names[2] == 'data_|q2'
405+
406+
407+
def test_get_appended_rep_name():
408+
names = ['data_r0.f_1', 'data_r1.f_1', 'data_r2.f_1']
409+
new_names = sfin._get_appended_rep_names(names, 'data', 'f_1')
410+
assert len(new_names) == 3
411+
assert new_names[0] == 'data_|r0'
412+
assert new_names[1] == 'data_|r1'
413+
assert new_names[2] == 'data_|r2'
414+
names = ['data_q0.f_1', 'data_q1.f_1', 'data_q2.f_1']
415+
new_names = sfin._get_appended_rep_names(names, 'data', 'f_1', rep_sep='q')
416+
assert len(new_names) == 3
417+
assert new_names[0] == 'data_|q0'
418+
assert new_names[1] == 'data_|q1'
419+
assert new_names[2] == 'data_|q2'

0 commit comments

Comments
 (0)