from __future__ import annotations import argparse from pathlib import Path from typing import Any import yaml ROOT = Path(__file__).resolve().parents[1] def _load(path: Path) -> dict[str, Any]: if not path.exists(): return {} payload = yaml.safe_load(path.read_text(encoding="utf-8")) return payload if isinstance(payload, dict) else {} def main() -> int: parser = argparse.ArgumentParser() parser.add_argument("--in", dest="input_dir", default="spec/formulas") parser.add_argument("--out", dest="out_path", default="spec/03_formulas/formula_registry.normalized.yaml") args = parser.parse_args() in_dir = ROOT / args.input_dir out_path = ROOT / args.out_path formulas: dict[str, Any] = {} for path in sorted(in_dir.glob("*.yaml")): if path.name == "manifest.yaml": continue doc = _load(path) domain_formulas = doc.get("formulas") if isinstance(doc.get("formulas"), dict) else {} for fid, row in domain_formulas.items(): formulas[str(fid)] = row normalized = { "schema_version": "2026-06-07-formula-registry-normalized-v2", "source": str(in_dir), "formula_count": len(formulas), "formulas": [{"formula_id": fid, **(row if isinstance(row, dict) else {})} for fid, row in sorted(formulas.items())], } out_path.parent.mkdir(parents=True, exist_ok=True) out_path.write_text(yaml.safe_dump(normalized, sort_keys=False, allow_unicode=True), encoding="utf-8") print(yaml.safe_dump({"formula_count": len(formulas), "out": str(out_path)}, sort_keys=False, allow_unicode=True).strip()) return 0 if __name__ == "__main__": raise SystemExit(main())