Skill Tracer
Skills › Scientific Agent Skills › pylabrobot › check_deck_geometry.py

check_deck_geometry.py

52 lines · skills/pylabrobot/scripts/check_deck_geometry.py at 5f2bc03

1#!/usr/bin/env python3
2"""Check bounded static deck geometry without importing PyLabRobot."""
3
4from __future__ import annotations
5
6import argparse
7from typing import Sequence
8
9if __package__:
10 from ._common import (
11 ValidationError,
12 emit_error,
13 emit_json,
14 geometry_report,
15 load_json,
16 validate_manifest,
17 )
18else:
19 from _common import (
20 ValidationError,
21 emit_error,
22 emit_json,
23 geometry_report,
24 load_json,
25 validate_manifest,
26 )
29def build_parser() -> argparse.ArgumentParser:
30 parser = argparse.ArgumentParser(
31 description=(
32 "Check resource bounds and static axis-aligned collisions in an offline "
33 "manifest. No hardware, serial, USB, or network access occurs."
34 )
35 )
36 parser.add_argument("--input", required=True, help="Local UTF-8 .json manifest")
37 return parser
40def main(argv: Sequence[str] | None = None) -> int:
41 args = build_parser().parse_args(argv)
42 try:
43 manifest = validate_manifest(load_json(args.input))
44 report = geometry_report(manifest)
45 except (OSError, ValidationError) as error:
46 return emit_error(error)
47 emit_json({"protocol_id": manifest["protocol_id"], **report})
48 return 0 if report["ok"] else 3
51if __name__ == "__main__":
52 raise SystemExit(main())