Compare commits

...

4 commits

Author SHA1 Message Date
4516ca3149
better type annotation fir id lookup
Some checks failed
Mypy / mypy (push) Successful in 1m11s
Pytest / pytest (3.14) (push) Successful in 1m18s
Pytest / pytest (3.12) (push) Successful in 1m19s
Pytest / pytest (3.13) (push) Successful in 1m15s
Ruff / ruff (push) Failing after 1m1s
2026-03-24 18:39:00 +01:00
3fe8e28a68
customtFilter after general filters 2026-03-24 09:25:21 +01:00
3fd557f3ee
add customtFilter 2026-03-24 09:24:12 +01:00
c431145a23
some more db lookup 2026-03-24 09:23:30 +01:00
2 changed files with 48 additions and 9 deletions

View file

@ -6,9 +6,10 @@ import numpy as np
from .input.implementations import codes from .input.implementations import codes
from .tools import k2m, get_db_file from .tools import k2m, get_db_file
from .tracker import get from .tracker import get
from typing import Any, Optional from typing import Any, Optional, Union
from pathlib import Path from pathlib import Path
import datetime as dt import datetime as dt
from collections.abc import Callable
def _project_lookup_by_alias(db: Path, alias: str) -> str: def _project_lookup_by_alias(db: Path, alias: str) -> str:
@ -39,7 +40,7 @@ def _project_lookup_by_alias(db: Path, alias: str) -> str:
return str(results[0][0]) return str(results[0][0])
def _project_lookup_by_id(db: Path, uuid: str) -> list[tuple[str, str]]: def _project_lookup_by_id(db: Path, uuid: str) -> list[tuple[str, ...]]:
""" """
Return the project information available in the database by UUID. Return the project information available in the database by UUID.
@ -251,22 +252,31 @@ def sfcf_filter(results: pd.DataFrame, **kwargs: Any) -> pd.DataFrame:
return results.drop(drops) return results.drop(drops)
def openQCD_filter(results:pd.DataFrame, **kwargs: Any) -> pd.DataFrame:
return results
def find_record(path: Path, ensemble: str, correlator_name: str, code: str, project: Optional[str]=None, parameters: Optional[str]=None, def find_record(path: Path, ensemble: str, correlator_name: str, code: str, project: Optional[str]=None, parameters: Optional[str]=None,
created_before: Optional[str]=None, created_after: Optional[str]=None, updated_before: Optional[str]=None, updated_after: Optional[str]=None, revision: Optional[str]=None, **kwargs: Any) -> pd.DataFrame: created_before: Optional[str]=None, created_after: Optional[str]=None, updated_before: Optional[str]=None, updated_after: Optional[str]=None,
revision: Optional[str]=None,
customFilter: Optional[Callable[[pd.DataFrame], pd.DataFrame]] = None,
**kwargs: Any) -> pd.DataFrame:
db_file = get_db_file(path) db_file = get_db_file(path)
db = path / db_file db = path / db_file
if code not in codes: if code not in codes:
raise ValueError("Code " + code + "unknown, take one of the following:" + ", ".join(codes)) raise ValueError("Code " + code + "unknown, take one of the following:" + ", ".join(codes))
get(path, db_file) get(path, db_file)
results = _db_lookup(db, ensemble, correlator_name,code, project, parameters=parameters) results = _db_lookup(db, ensemble, correlator_name,code, project, parameters=parameters)
if any(arg is not None for arg in [created_before, created_after, updated_before, updated_after]): if any([arg is not None for arg in [created_before, created_after, updated_before, updated_after]]):
results = _time_filter(results, created_before, created_after, updated_before, updated_after) results = _time_filter(results, created_before, created_after, updated_before, updated_after)
if code == "sfcf": if code == "sfcf":
results = sfcf_filter(results, **kwargs) results = sfcf_filter(results, **kwargs)
elif code == "openQCD": elif code == "openQCD":
pass results = openQCD_filter(results, **kwargs)
else: else:
raise Exception raise ValueError(f"Code {code} is not known.")
if customFilter is not None:
results = customFilter(results)
print("Found " + str(len(results)) + " result" + ("s" if len(results)>1 else "")) print("Found " + str(len(results)) + " result" + ("s" if len(results)>1 else ""))
return results.reset_index() return results.reset_index()

View file

@ -70,7 +70,6 @@ def test_db_lookup(tmp_path: Path) -> None:
c.execute("INSERT INTO backlogs (name, ensemble, code, path, project, parameters, parameter_file, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, datetime('now'), datetime('now'))", c.execute("INSERT INTO backlogs (name, ensemble, code, path, project, parameters, parameter_file, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, datetime('now'), datetime('now'))",
(corr, ensemble, code, meas_path, uuid, pars, parameter_file)) (corr, ensemble, code, meas_path, uuid, pars, parameter_file))
conn.commit() conn.commit()
conn.close()
results = find._db_lookup(db, ensemble, corr, code) results = find._db_lookup(db, ensemble, corr, code)
assert len(results) == 1 assert len(results) == 1
@ -88,8 +87,38 @@ def test_db_lookup(tmp_path: Path) -> None:
assert len(results) == 1 assert len(results) == 1
results = find._db_lookup(db, ensemble, corr, code, parameters = "{par_A: 3.0, par_B: 4.0}") results = find._db_lookup(db, ensemble, corr, code, parameters = "{par_A: 3.0, par_B: 4.0}")
assert results.empty assert results.empty
#results = find._db_lookup(db, ensemble, corr, code, project, parameters, created_before, created_after, updated_before, updated_after)
#results = find._db_lookup(db, ensemble, corr, code, project, parameters, created_before, created_after, updated_before, updated_after) corr = "g_A"
ensemble = "SF_A"
code = "openQCD"
meas_path = "archive/SF_A/f_A/Project_A.json.gz::asdfasdfasdf"
uuid = "Project_A"
pars = "{par_A: 3.0, par_B: 4.0}"
parameter_file = "projects/Project_A/myinput.in"
c.execute("INSERT INTO backlogs (name, ensemble, code, path, project, parameters, parameter_file, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, datetime('now'), datetime('now'))",
(corr, ensemble, code, meas_path, uuid, pars, parameter_file))
conn.commit()
corr = "f_A"
results = find._db_lookup(db, ensemble, corr, code)
assert len(results) == 1
results = find._db_lookup(db, "SF_B", corr, code)
assert results.empty
results = find._db_lookup(db, ensemble, "g_A", code)
assert len(results) == 1
results = find._db_lookup(db, ensemble, corr, "sfcf")
assert results.empty
results = find._db_lookup(db, ensemble, corr, code, project = "Project_A")
assert len(results) == 1
results = find._db_lookup(db, ensemble, "g_A", code, project = "Project_A")
assert len(results) == 1
results = find._db_lookup(db, ensemble, corr, code, project = "Project_B")
assert results.empty
results = find._db_lookup(db, ensemble, "g_A", code, project = "Project_B")
assert results.empty
results = find._db_lookup(db, ensemble, corr, code, parameters = pars)
assert results.empty
results = find._db_lookup(db, ensemble, "g_A", code, parameters = "{par_A: 3.0, par_B: 4.0}")
assert len(results) == 1
conn.close()