File size: 2,913 Bytes
7f59fb7 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | #!/usr/bin/env python3
"""Export compact tables from CBU-VQA summary JSON files."""
from __future__ import annotations
import argparse
import json
from pathlib import Path
from typing import Any
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--summary", action="append", required=True, help="CBU-VQA summary JSON")
parser.add_argument("--output-md", required=True)
parser.add_argument("--output-tex", default=None)
return parser.parse_args()
def load_rows(paths: list[str]) -> list[dict[str, Any]]:
rows: list[dict[str, Any]] = []
for path in paths:
data = json.loads(Path(path).read_text(encoding="utf-8"))
for surface, stats in sorted(data.get("surfaces", {}).items()):
rows.append(
{
"source": path,
"surface": surface,
"responses": stats.get("responses", 0),
"ok": stats.get("ok", 0),
"questions": stats.get("questions", 0),
"support": stats.get("support_rate", 0.0),
"risk": stats.get("risk_rate", 0.0),
"uncertain": stats.get("uncertainty_rate", 0.0),
}
)
return rows
def write_markdown(rows: list[dict[str, Any]], path: Path) -> None:
lines = [
"| Surface | Resp | OK | Q | Support ↑ | Risk ↓ | Uncertain ↓ |",
"|---|---:|---:|---:|---:|---:|---:|",
]
for row in rows:
lines.append(
"| {surface} | {responses:,} | {ok:,} | {questions:,} | {support:.4f} | {risk:.4f} | {uncertain:.4f} |".format(
**row
)
)
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text("\n".join(lines) + "\n", encoding="utf-8")
def write_latex(rows: list[dict[str, Any]], path: Path) -> None:
lines = [
r"\begin{tabular}{lrrrrrr}",
r"\toprule",
r"Surface & Resp. & OK & Q & Support $\uparrow$ & Risk $\downarrow$ & Uncertain $\downarrow$ \\",
r"\midrule",
]
for row in rows:
lines.append(
"{surface} & {responses:,} & {ok:,} & {questions:,} & {support:.4f} & {risk:.4f} & {uncertain:.4f} \\\\".format(
**row
).replace("_", r"\_")
)
lines.extend([r"\bottomrule", r"\end{tabular}"])
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text("\n".join(lines) + "\n", encoding="utf-8")
def main() -> int:
args = parse_args()
rows = load_rows(args.summary)
write_markdown(rows, Path(args.output_md))
if args.output_tex:
write_latex(rows, Path(args.output_tex))
print(json.dumps({"rows": len(rows), "output_md": args.output_md, "output_tex": args.output_tex}, indent=2))
return 0
if __name__ == "__main__":
raise SystemExit(main())
|