matter-os / simulation /benchmarks.py
tmepass000's picture
MATTER OS v0.1.0
87b48de verified
Raw History Blame Contribute Delete
3.73 kB
"""Trusted benchmark reproduction (decision 45; Phase 3 exit gate).
Each benchmark builds its reference system, runs the registered solver through the normal
SimulationService (so it produces immutable run records), and compares with the registered
reference value and tolerance from configs/solver_registry.yaml. Results are reported as-is:
a failed benchmark is reported as failed.
"""
from __future__ import annotations
from typing import Any
from ase.cluster import Icosahedron
from core.representation import MatterStructure
from discovery.generators import known_family
def _system(bid: str) -> tuple[MatterStructure, str, dict]:
if bid == "emt_cu_lattice_constant":
ms = known_family("fcc", element="Cu", a=3.6, cubic=True); ms.environment["lattice_type"] = "fcc"
return ms, "lattice_constant", {"n_points": 11, "span": 0.05}
if bid == "lj13_global_minimum":
ms = MatterStructure.from_ase(Icosahedron("Ar", noshells=2, latticeconstant=1.55), boundary_profile="cluster")
return ms, "relaxed_energy", {"fmax": 1e-5, "steps": 5000}
if bid == "lj38_global_minimum":
from ase.cluster import Octahedron
atoms = Octahedron("Ar", length=4, cutoff=1, latticeconstant=1.55) # 38-atom truncated octahedron
ms = MatterStructure.from_ase(atoms, boundary_profile="cluster")
return ms, "relaxed_energy", {"fmax": 1e-5, "steps": 5000}
if bid == "h2_rhf_sto3g":
from ase.units import Bohr
ms = MatterStructure(["H", "H"], [[0, 0, 0], [0, 0, 1.4 * Bohr]])
return ms, "energy", {"basis": "sto-3g"}
raise KeyError(bid)
def run_benchmark(app, bid: str, project_id: str) -> dict[str, Any]:
bm = app.registry.benchmarks[bid]
ms, observable, params = _system(bid)
cand = app.candidates.register(ms, project_id, generation_method=f"benchmark:{bid}", screen=True)
rec = app.simulation.submit_run(cand.candidate_id, bm["solver"], observable, params, priority="validation",
router_rationale=f"trusted benchmark {bid}")
ref = bm["reference"]
key = {"lattice_constant": "lattice_constant", "relaxed_energy": "relaxed_energy", "energy": "energy"}[observable]
if bid == "h2_rhf_sto3g":
key = "energy_hartree"
val = (rec.observables.get(key) or {}).get("value")
passed = None; dev = None
if rec.exit_status == "SUCCESS" and val is not None:
dev = val - ref["value"]
if "tolerance_relative" in bm:
passed = abs(dev / ref["value"]) <= bm["tolerance_relative"]
else:
passed = abs(dev) <= bm["tolerance_absolute"]
else:
passed = False
result = {"benchmark": bid, "solver": bm["solver"], "run_id": rec.run_id, "candidate_id": cand.candidate_id,
"computed": val, "unit": (rec.observables.get(key) or {}).get("unit"), "reference": ref,
"deviation": dev, "relative_deviation": (dev / ref["value"]) if dev is not None else None,
"tolerance": bm.get("tolerance_relative", bm.get("tolerance_absolute")),
"tolerance_kind": "relative" if "tolerance_relative" in bm else "absolute",
"passed": bool(passed), "exit_status": rec.exit_status, "convergence": rec.convergence_status}
app.db.audit("validation_agent", "benchmark_run", bid, result)
return result
def run_all(app, project_id: str, ids: list[str] | None = None) -> list[dict]:
ids = ids or list(app.registry.benchmarks)
out = []
for b in ids:
try:
out.append(run_benchmark(app, b, project_id))
except Exception as e: # report, don't hide
out.append({"benchmark": b, "passed": False, "error": repr(e)})
return out