restruct for easier tests, test drop of sfcf params
This commit is contained in:
parent
3a1e41808b
commit
e95edcb093
2 changed files with 103 additions and 113 deletions
147
corrlib/find.py
147
corrlib/find.py
|
|
@ -162,6 +162,78 @@ def _db_lookup(db: Path, ensemble: str, correlator_name: str, code: str, project
|
|||
return results
|
||||
|
||||
|
||||
def _sfcf_drop(param, **kwargs):
|
||||
if 'offset' in kwargs:
|
||||
if kwargs.get('offset') != param['offset']:
|
||||
return True
|
||||
if 'quark_kappas' in kwargs:
|
||||
kappas = kwargs['quark_kappas']
|
||||
if (not np.isclose(kappas[0], param['quarks'][0]['mass']) or not np.isclose(kappas[1], param['quarks'][1]['mass'])):
|
||||
return True
|
||||
if 'quark_masses' in kwargs:
|
||||
masses = kwargs['quark_masses']
|
||||
if (not np.isclose(masses[0], k2m(param['quarks'][0]['mass'])) or not np.isclose(masses[1], k2m(param['quarks'][1]['mass']))):
|
||||
return True
|
||||
if 'qk1' in kwargs:
|
||||
quark_kappa1 = kwargs['qk1']
|
||||
if not isinstance(quark_kappa1, list):
|
||||
if (not np.isclose(quark_kappa1, param['quarks'][0]['mass'])):
|
||||
return True
|
||||
else:
|
||||
if len(quark_kappa1) == 2:
|
||||
if (quark_kappa1[0] > param['quarks'][0]['mass']) or (quark_kappa1[1] < param['quarks'][0]['mass']):
|
||||
return True
|
||||
else:
|
||||
raise ValueError("quark_kappa1 has to have length 2")
|
||||
if 'qk2' in kwargs:
|
||||
quark_kappa2 = kwargs['qk2']
|
||||
if not isinstance(quark_kappa2, list):
|
||||
if (not np.isclose(quark_kappa2, param['quarks'][1]['mass'])):
|
||||
return True
|
||||
else:
|
||||
if len(quark_kappa2) == 2:
|
||||
if (quark_kappa2[0] > param['quarks'][1]['mass']) or (quark_kappa2[1] < param['quarks'][1]['mass']):
|
||||
return True
|
||||
else:
|
||||
raise ValueError("quark_kappa2 has to have length 2")
|
||||
if 'qm1' in kwargs:
|
||||
quark_mass1 = kwargs['qm1']
|
||||
if not isinstance(quark_mass1, list):
|
||||
if (not np.isclose(quark_mass1, k2m(param['quarks'][0]['mass']))):
|
||||
return True
|
||||
else:
|
||||
if len(quark_mass1) == 2:
|
||||
if (quark_mass1[0] > k2m(param['quarks'][0]['mass'])) or (quark_mass1[1] < k2m(param['quarks'][0]['mass'])):
|
||||
return True
|
||||
else:
|
||||
raise ValueError("quark_mass1 has to have length 2")
|
||||
if 'qm2' in kwargs:
|
||||
quark_mass2 = kwargs['qm2']
|
||||
if not isinstance(quark_mass2, list):
|
||||
if (not np.isclose(quark_mass2, k2m(param['quarks'][1]['mass']))):
|
||||
return True
|
||||
else:
|
||||
if len(quark_mass2) == 2:
|
||||
if (quark_mass2[0] > k2m(param['quarks'][1]['mass'])) or (quark_mass2[1] < k2m(param['quarks'][1]['mass'])):
|
||||
return True
|
||||
else:
|
||||
raise ValueError("quark_mass2 has to have length 2")
|
||||
if 'quark_thetas' in kwargs:
|
||||
quark_thetas = kwargs['quark_thetas']
|
||||
if (quark_thetas[0] != param['quarks'][0]['thetas'] and quark_thetas[1] != param['quarks'][1]['thetas']) or (quark_thetas[0] != param['quarks'][1]['thetas'] and quark_thetas[1] != param['quarks'][0]['thetas']):
|
||||
return True
|
||||
# careful, this is not save, when multiple contributions are present!
|
||||
if 'wf1' in kwargs:
|
||||
wf1 = kwargs['wf1']
|
||||
if not (np.isclose(wf1[0][0], param['wf1'][0][0], 1e-8) and np.isclose(wf1[0][1][0], param['wf1'][0][1][0], 1e-8) and np.isclose(wf1[0][1][1], param['wf1'][0][1][1], 1e-8)):
|
||||
return True
|
||||
if 'wf2' in kwargs:
|
||||
wf2 = kwargs['wf2']
|
||||
if not (np.isclose(wf2[0][0], param['wf2'][0][0], 1e-8) and np.isclose(wf2[0][1][0], param['wf2'][0][1][0], 1e-8) and np.isclose(wf2[0][1][1], param['wf2'][0][1][1], 1e-8)):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def sfcf_filter(results: pd.DataFrame, **kwargs: Any) -> pd.DataFrame:
|
||||
r"""
|
||||
Filter method for the Database entries holding SFCF calculations.
|
||||
|
|
@ -191,84 +263,13 @@ def sfcf_filter(results: pd.DataFrame, **kwargs: Any) -> pd.DataFrame:
|
|||
results: pd.DataFrame
|
||||
The filtered DataFrame, only holding the records that fit to the parameters given.
|
||||
"""
|
||||
|
||||
drops = []
|
||||
for ind in range(len(results)):
|
||||
result = results.iloc[ind]
|
||||
param = json.loads(result['parameters'])
|
||||
if 'offset' in kwargs:
|
||||
if kwargs.get('offset') != param['offset']:
|
||||
if _sfcf_drop(param, **kwargs):
|
||||
drops.append(ind)
|
||||
continue
|
||||
if 'quark_kappas' in kwargs:
|
||||
kappas = kwargs['quark_kappas']
|
||||
if (not np.isclose(kappas[0], param['quarks'][0]['mass']) or not np.isclose(kappas[1], param['quarks'][1]['mass'])):
|
||||
drops.append(ind)
|
||||
continue
|
||||
if 'quark_masses' in kwargs:
|
||||
masses = kwargs['quark_masses']
|
||||
if (not np.isclose(masses[0], k2m(param['quarks'][0]['mass'])) or not np.isclose(masses[1], k2m(param['quarks'][1]['mass']))):
|
||||
drops.append(ind)
|
||||
continue
|
||||
if 'qk1' in kwargs:
|
||||
quark_kappa1 = kwargs['qk1']
|
||||
if not isinstance(quark_kappa1, list):
|
||||
if (not np.isclose(quark_kappa1, param['quarks'][0]['mass'])):
|
||||
drops.append(ind)
|
||||
continue
|
||||
else:
|
||||
if len(quark_kappa1) == 2:
|
||||
if (quark_kappa1[0] > param['quarks'][0]['mass']) or (quark_kappa1[1] < param['quarks'][0]['mass']):
|
||||
drops.append(ind)
|
||||
continue
|
||||
if 'qk2' in kwargs:
|
||||
quark_kappa2 = kwargs['qk2']
|
||||
if not isinstance(quark_kappa2, list):
|
||||
if (not np.isclose(quark_kappa2, param['quarks'][1]['mass'])):
|
||||
drops.append(ind)
|
||||
continue
|
||||
else:
|
||||
if len(quark_kappa2) == 2:
|
||||
if (quark_kappa2[0] > param['quarks'][1]['mass']) or (quark_kappa2[1] < param['quarks'][1]['mass']):
|
||||
drops.append(ind)
|
||||
continue
|
||||
if 'qm1' in kwargs:
|
||||
quark_mass1 = kwargs['qm1']
|
||||
if not isinstance(quark_mass1, list):
|
||||
if (not np.isclose(quark_mass1, k2m(param['quarks'][0]['mass']))):
|
||||
drops.append(ind)
|
||||
continue
|
||||
else:
|
||||
if len(quark_mass1) == 2:
|
||||
if (quark_mass1[0] > k2m(param['quarks'][0]['mass'])) or (quark_mass1[1] < k2m(param['quarks'][0]['mass'])):
|
||||
drops.append(ind)
|
||||
continue
|
||||
if 'qm2' in kwargs:
|
||||
quark_mass2 = kwargs['qm2']
|
||||
if not isinstance(quark_mass2, list):
|
||||
if (not np.isclose(quark_mass2, k2m(param['quarks'][1]['mass']))):
|
||||
drops.append(ind)
|
||||
continue
|
||||
else:
|
||||
if len(quark_mass2) == 2:
|
||||
if (quark_mass2[0] > k2m(param['quarks'][1]['mass'])) or (quark_mass2[1] < k2m(param['quarks'][1]['mass'])):
|
||||
drops.append(ind)
|
||||
continue
|
||||
if 'quark_thetas' in kwargs:
|
||||
quark_thetas = kwargs['quark_thetas']
|
||||
if (quark_thetas[0] != param['quarks'][0]['thetas'] and quark_thetas[1] != param['quarks'][1]['thetas']) or (quark_thetas[0] != param['quarks'][1]['thetas'] and quark_thetas[1] != param['quarks'][0]['thetas']):
|
||||
drops.append(ind)
|
||||
continue
|
||||
# careful, this is not save, when multiple contributions are present!
|
||||
if 'wf1' in kwargs:
|
||||
wf1 = kwargs['wf1']
|
||||
if not (np.isclose(wf1[0][0], param['wf1'][0][0], 1e-8) and np.isclose(wf1[0][1][0], param['wf1'][0][1][0], 1e-8) and np.isclose(wf1[0][1][1], param['wf1'][0][1][1], 1e-8)):
|
||||
drops.append(ind)
|
||||
continue
|
||||
if 'wf2' in kwargs:
|
||||
wf2 = kwargs['wf2']
|
||||
if not (np.isclose(wf2[0][0], param['wf2'][0][0], 1e-8) and np.isclose(wf2[0][1][0], param['wf2'][0][1][0], 1e-8) and np.isclose(wf2[0][1][1], param['wf2'][0][1][1], 1e-8)):
|
||||
drops.append(ind)
|
||||
continue
|
||||
return results.drop(drops)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -211,62 +211,51 @@ def test_db_lookup(tmp_path: Path) -> None:
|
|||
conn.close()
|
||||
|
||||
|
||||
def test_sfcf_filter() -> None:
|
||||
record_0 = ["f_A", "ensA", "sfcf", "archive/SF_A/f_A/Project_A.json.gz::asdfasdfasdf", "SF_A", '{"par_A": 5.0, "par_B": 5.0}', "projects/SF_A/input.in",
|
||||
'2025-03-26 12:55:18.229966', '2025-03-26 12:55:18.229966']
|
||||
record_1 = ["f_A", "ensA", "sfcf", "archive/SF_A/f_A/Project_A.json.gz::asdfasdfasdf", "SF_A", '{"par_A": 5.0, "par_B": 5.0}', "projects/SF_A/input.in",
|
||||
'2025-03-26 12:55:18.229966', '2025-03-26 12:55:18.229966']
|
||||
record_2 = ["f_P", "ensA", "sfcf", "archive/SF_A/f_A/Project_A.json.gz::asdfasdfasdf", "SF_A", '{"par_A": 5.0, "par_B": 5.0}', "projects/SF_A/input.in",
|
||||
'2025-03-26 12:55:18.229966', '2025-03-26 12:55:18.229966']
|
||||
record_3 = ["f_P", "ensA", "sfcf", "archive/SF_A/f_A/Project_A.json.gz::asdfasdfasdf", "SF_A", '{"par_A": 5.0, "par_B": 5.0}', "projects/SF_A/input.in",
|
||||
'2025-03-26 12:55:18.229966', '2025-03-26 12:55:18.229966']
|
||||
data = [
|
||||
record_0,
|
||||
record_1,
|
||||
record_2,
|
||||
record_3,
|
||||
]
|
||||
cols = ["name",
|
||||
"ensemble",
|
||||
"code",
|
||||
"path",
|
||||
"project",
|
||||
"parameters",
|
||||
"parameter_file",
|
||||
"created_at",
|
||||
"updated_at"]
|
||||
df = pd.DataFrame(data,columns=cols)
|
||||
def test_sfcf_drop() -> None:
|
||||
parameters0 = {
|
||||
'offset': [0,0,0],
|
||||
'quarks': [{'mass': 1, 'thetas': [0,0,0]}, {'mass': 2, 'thetas': [0,0,1]}], # m0s = -3.5, -3.75
|
||||
'wf1': [[1, [0, 0]], [0.5, [1, 0]], [.75, [.5, .5]]],
|
||||
'wf2': [[1, [2, 1]], [2, [0.5, -0.5]], [.5, [.75, .72]]],
|
||||
}
|
||||
|
||||
assert True
|
||||
assert not find._sfcf_drop(parameters0, offset=[0,0,0])
|
||||
assert find._sfcf_drop(parameters0, offset=[1,0,0])
|
||||
|
||||
assert not find._sfcf_drop(parameters0, quark_kappas = [1, 2])
|
||||
assert find._sfcf_drop(parameters0, quark_kappas = [-3.1, -3.72])
|
||||
|
||||
assert not find._sfcf_drop(parameters0, quark_masses = [-3.5, -3.75])
|
||||
assert find._sfcf_drop(parameters0, quark_masses = [-3.1, -3.72])
|
||||
|
||||
assert not find._sfcf_drop(parameters0, qk1 = 1)
|
||||
assert not find._sfcf_drop(parameters0, qk2 = 2)
|
||||
assert find._sfcf_drop(parameters0, qk1 = 2)
|
||||
assert find._sfcf_drop(parameters0, qk2 = 1)
|
||||
|
||||
assert not find._sfcf_drop(parameters0, qk1 = [0.5,1.5])
|
||||
assert not find._sfcf_drop(parameters0, qk2 = [1.5,2.5])
|
||||
assert find._sfcf_drop(parameters0, qk1 = 2)
|
||||
assert find._sfcf_drop(parameters0, qk2 = 1)
|
||||
with pytest.raises(ValueError):
|
||||
assert not find._sfcf_drop(parameters0, qk1 = [0.5,1,5])
|
||||
with pytest.raises(ValueError):
|
||||
assert not find._sfcf_drop(parameters0, qk2 = [1,5,2.5])
|
||||
|
||||
assert find._sfcf_drop(parameters0, qm1 = 1.2)
|
||||
assert find._sfcf_drop(parameters0, qm2 = 2.2)
|
||||
assert not find._sfcf_drop(parameters0, qm1 = -3.5)
|
||||
assert not find._sfcf_drop(parameters0, qm2 = -3.75)
|
||||
|
||||
assert find._sfcf_drop(parameters0, qm2 = 1.2)
|
||||
assert find._sfcf_drop(parameters0, qm1 = 2.2)
|
||||
with pytest.raises(ValueError):
|
||||
assert not find._sfcf_drop(parameters0, qm1 = [0.5,1,5])
|
||||
with pytest.raises(ValueError):
|
||||
assert not find._sfcf_drop(parameters0, qm2 = [1,5,2.5])
|
||||
|
||||
|
||||
def test_openQCD_filter() -> None:
|
||||
record_0 = ["f_A", "ensA", "sfcf", "archive/SF_A/f_A/Project_A.json.gz::asdfasdfasdf", "SF_A", '{"par_A": 5.0, "par_B": 5.0}', "projects/SF_A/input.in",
|
||||
'2025-03-26 12:55:18.229966', '2025-03-26 12:55:18.229966']
|
||||
record_1 = ["f_A", "ensA", "sfcf", "archive/SF_A/f_A/Project_A.json.gz::asdfasdfasdf", "SF_A", '{"par_A": 5.0, "par_B": 5.0}', "projects/SF_A/input.in",
|
||||
'2025-03-26 12:55:18.229966', '2025-03-26 12:55:18.229966']
|
||||
record_2 = ["f_P", "ensA", "sfcf", "archive/SF_A/f_A/Project_A.json.gz::asdfasdfasdf", "SF_A", '{"par_A": 5.0, "par_B": 5.0}', "projects/SF_A/input.in",
|
||||
'2025-03-26 12:55:18.229966', '2025-03-26 12:55:18.229966']
|
||||
record_3 = ["f_P", "ensA", "sfcf", "archive/SF_A/f_A/Project_A.json.gz::asdfasdfasdf", "SF_A", '{"par_A": 5.0, "par_B": 5.0}', "projects/SF_A/input.in",
|
||||
'2025-03-26 12:55:18.229966', '2025-03-26 12:55:18.229966']
|
||||
data = [
|
||||
record_0,
|
||||
record_1,
|
||||
record_2,
|
||||
record_3,
|
||||
]
|
||||
cols = ["name",
|
||||
"ensemble",
|
||||
"code",
|
||||
"path",
|
||||
"project",
|
||||
"parameters",
|
||||
"parameter_file",
|
||||
"created_at",
|
||||
"updated_at"]
|
||||
df = pd.DataFrame(data,columns=cols)
|
||||
|
||||
find.openQCD_filter(df)
|
||||
assert True
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue