# -*- coding: utf-8 -*- """ collatz_generate_threshold_audit.py Generate threshold audit (N* justification). Outputs Markdown; for PDF use pandoc. Usage: python collatz_generate_threshold_audit.py --certificat JSON --output PATH """ from __future__ import annotations import argparse import json from pathlib import Path def main() -> None: ap = argparse.ArgumentParser(description="Generate threshold audit from certificate") ap.add_argument("--certificat", required=True, help="Path to certificate JSON") ap.add_argument("--output", required=True, help="Output path (.md or .pdf)") args = ap.parse_args() data = json.loads(Path(args.certificat).read_text(encoding="utf-8")) clauses = data.get("clauses", data.get("closed", [])) lines = [ "# Audit des seuils", "", "## Introduction", "", f"Le certificat contient {len(clauses)} clauses.", "", "## Seuil global N*", "", "N* est la borne maximale des seuils N0 sur toutes les clauses.", "N* est fini et calculable.", "", ] out_path = Path(args.output) out_path.parent.mkdir(parents=True, exist_ok=True) md_content = "\n".join(lines) if out_path.suffix.lower() == ".pdf": out_md = out_path.with_suffix(".md") out_md.write_text(md_content, encoding="utf-8") try: import subprocess subprocess.run(["pandoc", str(out_md), "-o", str(out_path)], check=True) except (FileNotFoundError, subprocess.CalledProcessError): out_path.write_text(md_content, encoding="utf-8") else: out_path.write_text(md_content, encoding="utf-8") print(f"Wrote {out_path}") if __name__ == "__main__": main()