Files
QuantEngineByItz/tools/validate_formula_registry.py

31 lines
1.4 KiB
Python

from __future__ import annotations
import argparse
from pathlib import Path
import yaml
ROOT = Path(__file__).resolve().parents[1]
def main() -> int:
parser = argparse.ArgumentParser()
parser.add_argument("--strict", action="store_true")
args = parser.parse_args()
manifest = yaml.safe_load((ROOT / "spec" / "formulas" / "manifest.yaml").read_text(encoding="utf-8"))
normalized = yaml.safe_load((ROOT / "spec" / "03_formulas" / "formula_registry.normalized.yaml").read_text(encoding="utf-8"))
domain_files = manifest.get("domains") or {}
formulas = normalized.get("formulas") or []
missing_owner = [row.get("formula_id") for row in formulas if not str((row or {}).get("owner") or "").strip()]
missing_status = [row.get("formula_id") for row in formulas if not str((row or {}).get("status") or "").strip()]
missing_outputs = [row.get("formula_id") for row in formulas if not (row or {}).get("output_fields")]
ok = bool(domain_files) and len(formulas) > 0 and not missing_owner and not missing_status and not missing_outputs
print("FORMULA_REGISTRY_OK" if ok else "FORMULA_REGISTRY_FAIL")
print(f"domain_count={len(domain_files)} formula_count={len(formulas)} missing_owner={len(missing_owner)} missing_status={len(missing_status)} missing_outputs={len(missing_outputs)}")
return 0 if ok or not args.strict else 1
if __name__ == "__main__":
raise SystemExit(main())