SPB Git forge

spb/wp15_uqo

Public MIT
3commits 1branches 1releases
7.6 MBsize
maindefault branch
4 h agolast push
TeX 53.6% Python 46.2%
3.0 KB · 96 lines python
Raw Blame History
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