nPC7M7XLEv / current /code /run.py
DineshAI's picture
Add current claim verification evidence (part 1)
c6eaad2 verified
Raw
History Blame Contribute Delete
5.26 kB
"""Fixed cumulative reproduction entrypoint inherited by every experiment."""
from __future__ import annotations
import hashlib
import json
import os
import platform
import subprocess
import time
from pathlib import Path
from threadpoolctl import threadpool_limits
from . import __version__
from .claim1 import run as run_claim_1
from .claim1_checker import check as check_claim_1
from .claim2 import run as run_claim_2
from .claim2_checker import check as check_claim_2
from .claim3 import run as run_claim_3
from .claim3_checker import check as check_claim_3
from .claim4 import run as run_claim_4
from .claim4_checker import check as check_claim_4
from .claim5 import run as run_claim_5
from .claim5_checker import check as check_claim_5
from .claim6 import run as run_claim_6
from .claim6_checker import check as check_claim_6
def sha256(path: Path) -> str:
digest = hashlib.sha256()
with path.open("rb") as handle:
for block in iter(lambda: handle.read(1 << 20), b""):
digest.update(block)
return digest.hexdigest()
def git_sha() -> str:
return subprocess.check_output(
["git", "rev-parse", "HEAD"], text=True
).strip()
def main() -> None:
started = time.perf_counter()
config = json.loads(Path("campaign.json").read_text())
runtime_dir = Path(config["output_directory"])
runtime_dir.mkdir(parents=True, exist_ok=True)
results: dict[str, object] = {}
with threadpool_limits(limits=config["compute_contract"]["thread_limit"]):
if 1 in config["active_claims"]:
claim_dir = runtime_dir / "claim_1"
primary = run_claim_1(claim_dir)
independent = check_claim_1(claim_dir)
results["claim_1"] = {
"primary": primary,
"independent_checker": independent,
}
if 2 in config["active_claims"]:
claim_dir = runtime_dir / "claim_2"
primary = run_claim_2(claim_dir)
independent = check_claim_2(claim_dir)
results["claim_2"] = {
"primary": primary,
"independent_checker": independent,
}
if 6 in config["active_claims"]:
claim_dir = runtime_dir / "claim_6"
primary = run_claim_6(claim_dir)
independent = check_claim_6(claim_dir)
results["claim_6"] = {
"primary": primary,
"independent_checker": independent,
}
if 4 in config["active_claims"]:
claim_dir = runtime_dir / "claim_4"
primary = run_claim_4(claim_dir)
independent = check_claim_4(claim_dir)
results["claim_4"] = {
"primary": primary,
"independent_checker": independent,
}
if 5 in config["active_claims"]:
claim_dir = runtime_dir / "claim_5"
primary = run_claim_5(claim_dir)
independent = check_claim_5(claim_dir)
results["claim_5"] = {
"primary": primary,
"independent_checker": independent,
}
if 3 in config["active_claims"]:
claim_dir = runtime_dir / "claim_3"
primary = run_claim_3(claim_dir)
independent = check_claim_3(claim_dir)
results["claim_3"] = {
"primary": primary,
"independent_checker": independent,
}
elapsed = time.perf_counter() - started
provenance = {
"package_version": __version__,
"git_sha": git_sha(),
"python": platform.python_version(),
"platform": platform.platform(),
"allocated_logical_cpus": os.cpu_count(),
"enforced_thread_limit": config["compute_contract"]["thread_limit"],
"estimated_cores": config["compute_contract"]["estimated_cores"],
"selected_backend": config["compute_contract"]["selected_backend"],
"selected_flavor": config["compute_contract"]["selected_flavor"],
"runtime_seconds": elapsed,
"active_claims": config["active_claims"],
}
summary = {
"all_gates_pass": all(
claim["primary"]["all_gates_pass"]
and claim["independent_checker"]["all_gates_pass"]
for claim in results.values()
),
"results": results,
"provenance": provenance,
}
summary_path = runtime_dir / "run_summary.json"
summary_path.write_text(json.dumps(summary, indent=2) + "\n", encoding="utf-8")
print("=== CDOT_REPRODUCTION_SUMMARY ===")
print(json.dumps(summary, indent=2))
print("=== CDOT_REPRODUCTION_RAW_ARTIFACTS ===")
for path in sorted(runtime_dir.rglob("*.json")):
print(
json.dumps(
{
"path": str(path),
"sha256": sha256(path),
"bytes": path.stat().st_size,
}
)
)
if path.stat().st_size <= 100_000:
print(f"=== RAW_JSON_BEGIN {path} ===")
print(path.read_text(encoding="utf-8"), end="")
print(f"=== RAW_JSON_END {path} ===")
if not summary["all_gates_pass"]:
raise SystemExit(1)
if __name__ == "__main__":
main()