Files
RoRD-Layout-Recognation/tools/smoke_test.py

77 lines
2.8 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
"""
Minimal smoke test:
1) Generate a tiny synthetic set (num=8) and rasterize to PNG
2) Validate H consistency (n=4, with/without elastic)
3) Run a short training loop (epochs=1-2) to verify end-to-end pipeline
Prints PASS/FAIL with basic stats.
"""
from __future__ import annotations
import argparse
import subprocess
import os
import sys
from pathlib import Path
def run(cmd: list[str]) -> int:
print("[RUN]", " ".join(cmd))
env = os.environ.copy()
# Ensure project root on PYTHONPATH for child processes
root = Path(__file__).resolve().parents[1]
env["PYTHONPATH"] = f"{root}:{env.get('PYTHONPATH','')}" if env.get("PYTHONPATH") else str(root)
return subprocess.call(cmd, env=env)
def main() -> None:
parser = argparse.ArgumentParser(description="Minimal smoke test for E2E pipeline")
parser.add_argument("--root", type=str, default="data/smoke", help="Root dir for smoke test outputs")
parser.add_argument("--config", type=str, default="configs/base_config.yaml")
args = parser.parse_args()
root = Path(args.root)
gds_dir = root / "gds"
png_dir = root / "png"
gds_dir.mkdir(parents=True, exist_ok=True)
png_dir.mkdir(parents=True, exist_ok=True)
rc = 0
# 1) Generate a tiny set
rc |= run([sys.executable, "tools/generate_synthetic_layouts.py", "--out_dir", gds_dir.as_posix(), "--num", "8", "--seed", "123"])
if rc != 0:
print("[FAIL] generate synthetic")
sys.exit(2)
# 2) Rasterize
rc |= run([sys.executable, "tools/layout2png.py", "--in", gds_dir.as_posix(), "--out", png_dir.as_posix(), "--dpi", "600"])
if rc != 0:
print("[FAIL] layout2png")
sys.exit(3)
# 3) Validate H (n=4, both no-elastic and elastic)
rc |= run([sys.executable, "tools/validate_h_consistency.py", "--dir", png_dir.as_posix(), "--out", (root/"validate_no_elastic").as_posix(), "--n", "4"])
rc |= run([sys.executable, "tools/validate_h_consistency.py", "--dir", png_dir.as_posix(), "--out", (root/"validate_elastic").as_posix(), "--n", "4", "--elastic"])
if rc != 0:
print("[FAIL] validate H")
sys.exit(4)
# 4) Write back config via synth_pipeline and run short training (1 epoch)
rc |= run([sys.executable, "tools/synth_pipeline.py", "--out_root", root.as_posix(), "--num", "0", "--dpi", "600", "--config", args.config, "--ratio", "0.3", "--enable_elastic", "--no_preview"])
if rc != 0:
print("[FAIL] synth_pipeline config update")
sys.exit(5)
# Train 1 epoch to smoke the loop
rc |= run([sys.executable, "train.py", "--config", args.config, "--epochs", "1" ])
if rc != 0:
print("[FAIL] train 1 epoch")
sys.exit(6)
print("[PASS] Smoke test completed successfully.")
if __name__ == "__main__":
main()