import argparse from pathlib import Path import subprocess import sys def run(cmd: list[str]) -> None: print("\n$ " + " ".join(cmd)) r = subprocess.run(cmd) if r.returncode != 0: raise SystemExit(r.returncode) def main() -> None: ap = argparse.ArgumentParser(description="End-to-end: config -> IR -> logic -> validate") ap.add_argument("--config", required=True, help="Path to configuration.json") ap.add_argument("--ir-out", default="outputs/ir/ir_v1.json", help="IR output path") ap.add_argument("--logic-out", default="outputs/logic_ir", help="Logic output directory") ap.add_argument("--model", default="tank", choices=["tank"], help="Heuristic model for IR draft") ap.add_argument("--overwrite", action="store_true", help="Overwrite outputs") args = ap.parse_args() Path(args.ir_out).parent.mkdir(parents=True, exist_ok=True) Path(args.logic_out).mkdir(parents=True, exist_ok=True) cmd1 = [ sys.executable, "-m", "tools.make_ir_from_config", "--config", args.config, "--out", args.ir_out, "--model", args.model, ] if args.overwrite: cmd1.append("--overwrite") run(cmd1) cmd2 = [ sys.executable, "-m", "tools.compile_ir", "--ir", args.ir_out, "--out-dir", args.logic_out, ] if args.overwrite: cmd2.append("--overwrite") run(cmd2) cmd3 = [ sys.executable, "-m", "tools.validate_logic", "--config", args.config, "--logic-dir", args.logic_out, "--check-callbacks", "--check-hil-init", ] run(cmd3) print("\nOK: pipeline completed successfully") if __name__ == "__main__": main()