TeX 53.6%
Python 46.2%
1"""Command-line entry points (CLAUDE.md §4.1).23Usage:4 python -m intraday_fragility.cli probe-data5 python -m intraday_fragility.cli download --start 1992-01 --end 2026-03 [--dry-run] [--shard k/n]6 python -m intraday_fragility.cli verify-download7 python -m intraday_fragility.cli audit-raw8"""910from __future__ import annotations1112import argparse13import json14import sys151617def cmd_probe(args: argparse.Namespace) -> int:18 from huggingface_hub import HfApi19 from . import paths20 cfg = paths.base_config()["dataset"]21 info = HfApi().dataset_info(cfg["id"], revision=cfg["revision"], files_metadata=True)22 pq = [s for s in info.siblings if s.rfilename.endswith(".parquet")]23 print(json.dumps({24 "dataset": cfg["id"], "revision": cfg["revision"],25 "n_parquet": len(pq),26 "total_gb": round(sum(s.size or 0 for s in pq) / 1e9, 2),27 "first": min(s.rfilename for s in pq),28 "last": max(s.rfilename for s in pq),29 }, indent=1))30 return 0313233def cmd_download(args: argparse.Namespace) -> int:34 from .download import download35 download(args.start, args.end, dry_run=args.dry_run, shard=args.shard)36 return 0373839def cmd_verify(args: argparse.Namespace) -> int:40 from .download import verify41 return 0 if verify(args.start, args.end) else 1424344def cmd_audit_raw(args: argparse.Namespace) -> int:45 from . import paths46 from .manifest import Manifest47 from .schema import file_audit_summary, validate_schema48 man = Manifest(paths.get("manifests") / "raw_files.json")49 failures = 050 for rec in sorted(man.records.values(), key=lambda r: (r.year, r.month)):51 if rec.status != "complete":52 continue53 p = paths.repo_root() / rec.local_path54 problems = validate_schema(p)55 if problems:56 print(f"{rec.remote_path}: SCHEMA PROBLEMS {problems}", file=sys.stderr)57 failures += 158 continue59 summary = file_audit_summary(p)60 for k, v in summary.items():61 if hasattr(rec, k):62 setattr(rec, k, v)63 man.upsert(rec)64 man.save()65 man.export_tabular()66 print(f"audit complete; {failures} schema failures")67 return 1 if failures else 0686970def main() -> int:71 ap = argparse.ArgumentParser(prog="ifrag")72 sub = ap.add_subparsers(dest="cmd", required=True)7374 sub.add_parser("probe-data").set_defaults(fn=cmd_probe)7576 d = sub.add_parser("download")77 d.add_argument("--start", default="1992-01")78 d.add_argument("--end", default="2026-03")79 d.add_argument("--dry-run", action="store_true")80 d.add_argument("--shard", default=None, help="k/n node sharding")81 d.set_defaults(fn=cmd_download)8283 v = sub.add_parser("verify-download")84 v.add_argument("--start", default="1992-01")85 v.add_argument("--end", default="2026-03")86 v.set_defaults(fn=cmd_verify)8788 sub.add_parser("audit-raw").set_defaults(fn=cmd_audit_raw)8990 args = ap.parse_args()91 return args.fn(args)929394if __name__ == "__main__":95 raise SystemExit(main())96