iris-pressure-studio / scripts /validate_gate.py
Codex
Deploy submission links to Hugging Face Space
200cb0b
Raw
History Blame Contribute Delete
2.58 kB
#!/usr/bin/env python3
"""Run Iris seed spirals and print automated gate scores."""
from __future__ import annotations
import argparse
from pathlib import Path
import sys
REPO_ROOT = Path(__file__).resolve().parents[1]
if str(REPO_ROOT) not in sys.path:
sys.path.insert(0, str(REPO_ROOT))
from iris.cli import print_spiral, print_spiral_header
from iris.engine import IrisEngine
from iris.errors import IrisError
from iris.gate import GateReport, score_spiral
from iris.seeds import DEFAULT_IDEAS
from iris.spiral import run_spiral
def main(argv: list[str] | None = None) -> int:
parser = argparse.ArgumentParser(
description="Run Iris spirals and score the Day 1 validation gate."
)
parser.add_argument(
"ideas",
nargs="*",
help="Idea(s) to validate. If omitted, use the seeded Day 1 ideas.",
)
parser.add_argument(
"--all",
action="store_true",
help="Run the seeded Day 1 validation ideas.",
)
parser.add_argument(
"--rings",
type=int,
default=4,
help="Number of pressure rings before the center distillation.",
)
args = parser.parse_args(argv)
if args.rings < 1:
parser.error("--rings must be at least 1")
ideas = DEFAULT_IDEAS if args.all or not args.ideas else args.ideas
engine = IrisEngine()
reports: list[GateReport] = []
for index, idea in enumerate(ideas, start=1):
print_spiral_header(index, len(ideas), idea)
try:
spiral = run_spiral(engine, idea, args.rings)
except IrisError as exc:
print(f"ERROR: {exc}", file=sys.stderr)
return 1
print_spiral(spiral)
report = score_spiral(spiral)
reports.append(report)
print_gate_report(report)
passed = sum(1 for report in reports if report.ok)
print("=" * 72)
status = "PASS" if passed == len(reports) else "FAIL"
print(f"Overall gate: {status} ({passed}/{len(reports)} spirals passed)")
return 0 if passed == len(reports) else 2
def print_gate_report(report: GateReport) -> None:
status = "PASS" if report.ok else "FAIL"
print("Gate")
print(f"Result: {status} ({report.passed}/{report.total} criteria passed)")
for criterion in report.criteria:
criterion_status = "PASS" if criterion.ok else "FAIL"
print(
f"- {criterion.name}: {criterion_status} "
f"({criterion.passed}/{criterion.total}) - {criterion.detail}"
)
print()
if __name__ == "__main__":
raise SystemExit(main())