88e86b3faccd
Rebuild benchmarks as a clean single-root reposi
2 months ago
| 1 | #!/usr/bin/env python3
|
| 2 | """Print smallest-detectable-delta and required-n guidance for benchmark cells."""
|
| 3 |
|
| 4 | from __future__ import annotations
|
| 5 |
|
| 6 | import argparse
|
| 7 | import json
|
| 8 | import sys
|
| 9 | from pathlib import Path
|
| 10 | from typing import Any
|
| 11 |
|
| 12 | ROOT = Path(__file__).resolve().parents[1]
|
| 13 | sys.path.insert(0, str(ROOT / "scripts"))
|
| 14 |
|
| 15 | from oakbench.stats import required_n_for_relative_delta # noqa: E402
|
| 16 |
|
| 17 |
|
| 18 | def parse_args() -> argparse.Namespace:
|
| 19 | parser = argparse.ArgumentParser(description=__doc__)
|
| 20 | parser.add_argument("--noise-floor-pct", type=float, required=True)
|
| 21 | parser.add_argument("--target-delta-pct", type=float, required=True)
|
| 22 | parser.add_argument("--current-n", type=int, required=True)
|
| 23 | parser.add_argument("--json", action="store_true")
|
| 24 | return parser.parse_args()
|
| 25 |
|
| 26 |
|
| 27 | def main() -> int:
|
| 28 | args = parse_args()
|
| 29 | required = required_n_for_relative_delta(args.noise_floor_pct, args.target_delta_pct, args.current_n)
|
| 30 | row: dict[str, Any] = {
|
| 31 | "noise_floor_pct": args.noise_floor_pct,
|
| 32 | "target_delta_pct": args.target_delta_pct,
|
| 33 | "current_n": args.current_n,
|
| 34 | "required_n": required,
|
| 35 | "undecidable": required is None,
|
| 36 | }
|
| 37 | if args.json:
|
| 38 | print(json.dumps(row, sort_keys=True))
|
| 39 | else:
|
| 40 | if required is None:
|
| 41 | print("Target delta must be positive; cell is undecidable.")
|
| 42 | elif required <= args.current_n:
|
| 43 | print(f"current n={args.current_n} can resolve target delta {args.target_delta_pct:.2f}%")
|
| 44 | else:
|
| 45 | print(
|
| 46 | f"current n={args.current_n} is underpowered for target delta "
|
| 47 | f"{args.target_delta_pct:.2f}%; estimated required n={required}"
|
| 48 | )
|
| 49 | return 0
|
| 50 |
|
| 51 |
|
| 52 | if __name__ == "__main__":
|
| 53 | raise SystemExit(main())
|