"""Capture golden scroll event sequences from current torch implementation.""" from __future__ import annotations import random import sys from pathlib import Path # Allow running as `uv run python scripts/build_golden_scroll.py` from project root. sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) import numpy as np import torch from ai_mouse import generate_scroll CASES: list[tuple[int, int, str]] = [ (0, 1500, "target"), (0, 500, "precise"), (0, 5000, "fast"), (2000, 0, "target"), # upward (0, 800, "precise"), (0, 3500, "fast"), (1000, 1200, "precise"), # tiny scroll (0, 10000, "fast"), # very long ] SEEDS = (0, 1, 2, 3) def main() -> None: out: dict[str, np.ndarray] = {} for case_idx, (start_y, end_y, mode) in enumerate(CASES): for seed in SEEDS: random.seed(seed) np.random.seed(seed) torch.manual_seed(seed) events = generate_scroll(start_y, end_y, mode=mode) arr = np.array( [[e["deltaY"], e["deltaMode"], e["t"]] for e in events], dtype=np.int64, ) out[f"case{case_idx}_seed{seed}"] = arr out_path = Path("tests/unit/data/golden_scroll.npz") np.savez_compressed(out_path, **out) print(f"Wrote {len(out)} scroll golden traces to {out_path}") if __name__ == "__main__": main()