Spaces:
Running
Running
| #!/usr/bin/env python3 | |
| """Standalone fail-closed checker for the Space's retained Claim 1–3 evidence. | |
| This intentionally uses only Python's standard library and files reachable | |
| from the Space entrypoint. It recomputes the row-level ONNX and independent | |
| CodeNet correlations, and integrity-checks the retained APPS/KBSS summary. | |
| """ | |
| from __future__ import annotations | |
| import csv | |
| import hashlib | |
| import json | |
| import math | |
| import statistics | |
| from collections import defaultdict | |
| from pathlib import Path | |
| ROOT = Path(__file__).resolve().parents[1] | |
| EVIDENCE = ROOT / "evidence/cumulative" | |
| EXPECTED_HASHES = { | |
| "full_n512.csv": | |
| "3016dfb245deb56b3d0d3d06f902471bc415f80196d61ecf4d49eb773f1edd76", | |
| "full_gpu_n200.csv": | |
| "7843f75c38b9ee0bf3f15d796f151808fc01a526c704f429049016d57538f390", | |
| "table3_results.json": | |
| "173dbce239ca51269d3b231dd851b7fb299dffc82d2b0eede75f61ae6a835dc2", | |
| } | |
| EXPECTED_ACCURACY = { | |
| "NASBench101": 0.4065993610622034, | |
| "ENAS": 0.24946117751369043, | |
| "NASNet": 0.20673752343866375, | |
| } | |
| EXPECTED_LANGUAGES = { | |
| "C++", "Python", "Java", "C", "Ruby", "C#", "Rust", "Go", "Haskell", | |
| "Kotlin", "JavaScript", "PHP", "D", "Scala", "OCaml", "Perl", "Fortran", | |
| } | |
| def sha256(path: Path) -> str: | |
| return hashlib.sha256(path.read_bytes()).hexdigest() | |
| def ranks(values: list[float]) -> list[float]: | |
| """Average ranks for ties, equivalent to scipy.stats.rankdata.""" | |
| order = sorted(range(len(values)), key=values.__getitem__) | |
| output = [0.0] * len(values) | |
| start = 0 | |
| while start < len(order): | |
| end = start + 1 | |
| while end < len(order) and values[order[end]] == values[order[start]]: | |
| end += 1 | |
| rank = (start + 1 + end) / 2 | |
| for index in order[start:end]: | |
| output[index] = rank | |
| start = end | |
| return output | |
| def spearman(xs: list[float], ys: list[float]) -> float: | |
| rx, ry = ranks(xs), ranks(ys) | |
| mx, my = statistics.fmean(rx), statistics.fmean(ry) | |
| numerator = sum((x - mx) * (y - my) for x, y in zip(rx, ry)) | |
| denominator = math.sqrt( | |
| sum((x - mx) ** 2 for x in rx) * sum((y - my) ** 2 for y in ry) | |
| ) | |
| if denominator == 0: | |
| raise AssertionError("undefined Spearman correlation") | |
| return numerator / denominator | |
| def check_hashes() -> dict[str, str]: | |
| observed = {} | |
| for filename, expected in EXPECTED_HASHES.items(): | |
| path = EVIDENCE / filename | |
| if not path.is_file(): | |
| raise AssertionError(f"missing retained artifact: {filename}") | |
| observed[filename] = sha256(path) | |
| if observed[filename] != expected: | |
| raise AssertionError(f"SHA-256 mismatch: {filename}") | |
| return observed | |
| def check_accuracy() -> dict: | |
| grouped: dict[str, list[tuple[float, float]]] = defaultdict(list) | |
| identifiers = set() | |
| with (EVIDENCE / "full_n512.csv").open(newline="") as handle: | |
| for row in csv.DictReader(handle): | |
| identifier = row["identifier"] | |
| if identifier in identifiers: | |
| raise AssertionError(f"duplicate identifier: {identifier}") | |
| identifiers.add(identifier) | |
| draws = [float(row[f"draw_{index}"]) for index in range(8)] | |
| prediction = float(row["prediction"]) | |
| if not math.isclose( | |
| prediction, statistics.median(draws), abs_tol=1e-12 | |
| ): | |
| raise AssertionError(f"prediction is not median: {identifier}") | |
| grouped[row["space"]].append((float(row["target"]), prediction)) | |
| if set(grouped) != set(EXPECTED_ACCURACY): | |
| raise AssertionError("accuracy spaces changed") | |
| observed = {} | |
| for space, expected in EXPECTED_ACCURACY.items(): | |
| pairs = grouped[space] | |
| if len(pairs) != 512: | |
| raise AssertionError(f"{space}: expected 512 rows") | |
| xs, ys = map(list, zip(*pairs)) | |
| rho = spearman(xs, ys) | |
| if not math.isclose(rho, expected, abs_tol=1e-12): | |
| raise AssertionError(f"{space}: Spearman changed: {rho}") | |
| observed[space] = rho | |
| return {"rows": len(identifiers), "raw_draws": len(identifiers) * 8, | |
| "spearman": observed} | |
| def check_codenet() -> dict: | |
| grouped: dict[str, list[tuple[float, float]]] = defaultdict(list) | |
| with (EVIDENCE / "full_gpu_n200.csv").open(newline="") as handle: | |
| for row in csv.DictReader(handle): | |
| grouped[row["language"]].append( | |
| (float(row["y_true"]), float(row["y_pred"])) | |
| ) | |
| if set(grouped) != EXPECTED_LANGUAGES: | |
| raise AssertionError("CodeNet language set changed") | |
| observed = {} | |
| for language, pairs in grouped.items(): | |
| if len(pairs) != 200: | |
| raise AssertionError(f"{language}: expected 200 rows") | |
| xs, ys = map(list, zip(*pairs)) | |
| observed[language] = spearman(xs, ys) | |
| average = statistics.fmean(observed.values()) | |
| if not math.isclose(average, 0.5234034026121069, abs_tol=1e-12): | |
| raise AssertionError(f"CodeNet mean changed: {average}") | |
| return {"languages": len(observed), "rows_per_language": 200, | |
| "average_spearman": average, "per_language": observed} | |
| def check_table3() -> dict: | |
| summary = json.loads((EVIDENCE / "table3_results.json").read_text())["table3"] | |
| apps, kbss = summary["APPS"], summary["KBSS"] | |
| if apps["n"] != 512 or not math.isclose( | |
| apps["spearman"], 0.9268067718469594, abs_tol=1e-15 | |
| ): | |
| raise AssertionError("APPS retained summary changed") | |
| if kbss["n"] != 512 or not math.isclose( | |
| kbss["spearman"], 0.5352789637599933, abs_tol=1e-15 | |
| ): | |
| raise AssertionError("KBSS retained summary changed") | |
| return {"APPS": apps, "KBSS": kbss} | |
| def verify() -> dict: | |
| return { | |
| "status": "PASS", | |
| "scope": ( | |
| "row-level recomputation for ONNX accuracy and independent CodeNet; " | |
| "hash and summary integrity for APPS/KBSS" | |
| ), | |
| "sha256": check_hashes(), | |
| "claim_1": check_accuracy(), | |
| "claim_2": check_table3(), | |
| "claim_3": check_codenet(), | |
| "limitation": ( | |
| "The judged repository did not retain paper-scale APPS/KBSS rows; " | |
| "this checker cannot independently recompute those two correlations." | |
| ), | |
| } | |
| if __name__ == "__main__": | |
| print("SPACE_CUMULATIVE_RESULT " + json.dumps(verify(), sort_keys=True)) | |