| |
| """CPU-only scope expansion for the generalized-convex audit. |
| |
| This file deliberately performs new work rather than copying the original |
| eight-point result. The finite-transform, leanness, auction, and transport |
| checks are all evaluated again on larger or denser exact grids. The script |
| writes only the requested JSON report; it does not modify the packaged |
| artifacts used by the original reproduction. |
| """ |
|
|
| from __future__ import annotations |
|
|
| import argparse |
| import itertools |
| import json |
| import re |
| import sys |
| from fractions import Fraction |
| from pathlib import Path |
|
|
|
|
| def finite_transform(x: Fraction, ys: list[Fraction]) -> Fraction: |
| return max(x * y - y * y / 2 for y in ys) |
|
|
|
|
| def transform_scope() -> dict: |
| rows = [] |
| for k in (128, 256, 512): |
| h = Fraction(1, k) |
| ys = [Fraction(j, k) for j in range(-k, k + 1)] |
| errors = [] |
| gradient_errors = [] |
| gradient_checks = 0 |
| for left, right in zip(ys, ys[1:]): |
| midpoint = (left + right) / 2 |
| x = midpoint |
| errors.append(x * x / 2 - finite_transform(x, ys)) |
| for offset in (Fraction(-1, 1000), Fraction(-1, 4), Fraction(1, 4), Fraction(1, 1000)): |
| sample = midpoint + offset * h |
| values = [sample * y - y * y / 2 for y in ys] |
| best = max(range(len(ys)), key=values.__getitem__) |
| assert values.count(values[best]) == 1 |
| gradient_errors.append(abs(ys[best] - sample)) |
| gradient_checks += 1 |
| maximum = max(errors) |
| observed_gradient = max(gradient_errors) |
| assert min(errors) >= 0 and maximum == h * h / 8 |
| assert observed_gradient == Fraction(499, 1000) * h |
| rows.append( |
| { |
| "k": k, |
| "finite_atoms": len(ys), |
| "cells_exhausted": len(errors), |
| "exact_uniform_error": f"{maximum.numerator}/{maximum.denominator}", |
| "uniform_error": float(maximum), |
| "gradient_points_checked": gradient_checks, |
| "exact_gradient_error": f"{observed_gradient.numerator}/{observed_gradient.denominator}", |
| "gradient_error": float(observed_gradient), |
| } |
| ) |
| return { |
| "new_k_values": [128, 256, 512], |
| "rows": rows, |
| "claim1_scope": "all cells of three grids through 1,025 finite atoms", |
| "claim2_scope": "four non-tie points in every cell of the same three grids", |
| } |
|
|
|
|
| def lean_scope() -> dict: |
| ys = [Fraction(j, 4) for j in range(-8, 9)] |
| a_values = [Fraction(1, 4), Fraction(1, 2), Fraction(1), Fraction(3, 2), Fraction(2), Fraction(4)] |
| b_values = [Fraction(-2), Fraction(-1), Fraction(-1, 2), Fraction(0), Fraction(1, 2), Fraction(1), Fraction(2)] |
| parameters = [(a, b, (a + b) / 17) for a in a_values for b in b_values] |
| pair_count = 0 |
| combination_count = 0 |
| inequality_count = 0 |
| for p, q in itertools.combinations(parameters, 2): |
| pair_count += 1 |
| for lam in (Fraction(1, 5), Fraction(2, 5), Fraction(3, 5), Fraction(4, 5)): |
| a = (1 - lam) * p[0] + lam * q[0] |
| b = (1 - lam) * p[1] + lam * q[1] |
| c = (1 - lam) * p[2] + lam * q[2] |
| assert a > 0 |
| for yi in ys: |
| x = 2 * a * yi + b |
| chosen = x * yi - (a * yi * yi + b * yi + c) |
| for yj in ys: |
| competitor = x * yj - (a * yj * yj + b * yj + c) |
| assert chosen - competitor >= 0 |
| inequality_count += 1 |
| combination_count += 1 |
| return { |
| "a_values": [str(x) for x in a_values], |
| "b_values": [str(x) for x in b_values], |
| "y_grid": [str(x) for x in ys], |
| "parameterizations": len(parameters), |
| "unordered_pairs": pair_count, |
| "convex_combinations_checked": combination_count, |
| "exact_activation_inequalities": inequality_count, |
| } |
|
|
|
|
| def transport_scope() -> dict: |
| rows = [] |
| for n in (8, 9, 10): |
| denominator = n * (n - 1) ** 2 |
| best_numerator = -1 |
| best_perm = None |
| permutations_checked = 0 |
| for perm in itertools.permutations(range(n)): |
| numerator = sum(i * perm[i] for i in range(n)) |
| if numerator > best_numerator: |
| best_numerator = numerator |
| best_perm = perm |
| permutations_checked += 1 |
| identity = tuple(range(n)) |
| identity_numerator = sum(i * i for i in range(n)) |
| reverse = tuple(reversed(identity)) |
| reverse_numerator = sum(i * reverse[i] for i in range(n)) |
| dual_slacks = [(i - j) ** 2 for i in range(n) for j in range(n)] |
| assert best_perm == identity |
| assert best_numerator == identity_numerator |
| assert min(dual_slacks) == 0 |
| rows.append( |
| { |
| "grid_points": n, |
| "permutations_exhausted": permutations_checked, |
| "optimal_permutation": list(best_perm), |
| "primal_numerator": best_numerator, |
| "dual_numerator": identity_numerator, |
| "exact_primal_dual_gap": "0/1", |
| "dual_constraints_checked": len(dual_slacks), |
| "minimum_dual_slack_numerator": min(dual_slacks), |
| "reverse_numerator": reverse_numerator, |
| "reverse_gap_numerator": identity_numerator - reverse_numerator, |
| "normalization_denominator": denominator, |
| } |
| ) |
| return { |
| "surplus": "Phi(x,y)=xy", |
| "grid_sizes": [8, 9, 10], |
| "new_larger_grids": [9, 10], |
| "rows": rows, |
| "interpretation": "The identity map remains exactly optimal after exhaustive enumeration through 10 points; dual equality and zero minimum slack hold on every grid.", |
| } |
|
|
|
|
| def auction_scope(author_root: Path) -> dict: |
| sys.path.insert(0, str(author_root)) |
| import torch |
| from mech_design.mechanism import Mechanism |
|
|
| def dot_kernel(x, y): |
| return (x * y).sum(dim=-1) |
|
|
| model = Mechanism( |
| npoints=1, |
| kernel=dot_kernel, |
| y_dim=1, |
| temp=1.0, |
| is_Y_parameter=False, |
| is_there_default=True, |
| y_min=0.0, |
| y_max=1.0, |
| ) |
| with torch.no_grad(): |
| model.Y_rest_raw.fill_(1.0) |
| model.intercept_rest.fill_(0.5) |
| rows = [] |
| with torch.no_grad(): |
| for points in (16001, 32001): |
| xs = torch.linspace(0.0, 1.0, points)[:, None] |
| choices, _ = model.forward(xs, selection_mode="hard") |
| allocation = choices[:, 0] |
| below = allocation[xs[:, 0] < 0.499] |
| above = allocation[xs[:, 0] > 0.501] |
| assert float(below.max()) == 0.0 and float(above.min()) == 1.0 |
| rows.append( |
| { |
| "grid_points": points, |
| "max_allocation_below_0.499": float(below.max()), |
| "min_allocation_above_0.501": float(above.min()), |
| "below_points": int(below.numel()), |
| "above_points": int(above.numel()), |
| } |
| ) |
| return { |
| "author_commit": "85a5da444a146ea28945173e22e3d130163dae42", |
| "fresh_grid_rows": rows, |
| "interpretation": "The released Mechanism preserves the exact threshold on two additional dense CPU grids, independently of the original 4,001-point run.", |
| } |
|
|
|
|
| def table_scope(source_root: Path) -> dict: |
| """Re-read every registered table row and recompute the printed gaps.""" |
| text = (source_root / "src/sections/_VII_experiments.tex").read_text(encoding="utf-8") |
| pattern = re.compile(r"^(1|2|5|10|20)\s*&\s*([0-9.]+)\s*&\s*(---|[0-9.]+)", re.MULTILINE) |
| rows = [] |
| for n, learned, benchmark in pattern.findall(text): |
| gap = None if benchmark == "---" else abs(Fraction(learned) - Fraction(benchmark)) |
| rows.append( |
| { |
| "n": int(n), |
| "learned": learned, |
| "straight_jacket": benchmark, |
| "exact_gap": None if gap is None else f"{gap.numerator}/{gap.denominator}", |
| "within_printed_0.001": None if gap is None else gap <= Fraction(1, 1000), |
| } |
| ) |
| assert [row["n"] for row in rows] == [1, 2, 5, 10, 20] |
| assert [row["within_printed_0.001"] for row in rows if row["within_printed_0.001"] is not None] == [True, True, True, True] |
| return { |
| "rows_reparsed": rows, |
| "comparable_rows": 4, |
| "exact_match_rows": [row["n"] for row in rows if row["exact_gap"] == "0/1"], |
| "nonzero_exact_gap_rows": [row["n"] for row in rows if row["exact_gap"] not in (None, "0/1")], |
| "scope": "all five registered n rows, with exact Fraction arithmetic and a separate 0.001 printed-precision check", |
| } |
|
|
|
|
| def main() -> None: |
| parser = argparse.ArgumentParser() |
| parser.add_argument("--author-root", type=Path, required=True) |
| parser.add_argument("--source-root", type=Path, required=True) |
| parser.add_argument("--output", type=Path, required=True) |
| args = parser.parse_args() |
| report = { |
| "transform": transform_scope(), |
| "lean": lean_scope(), |
| "transport": transport_scope(), |
| "auction": auction_scope(args.author_root), |
| "table": table_scope(args.source_root), |
| } |
| args.output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") |
| print(json.dumps({"transform_rows": len(report["transform"]["rows"]), "transport_rows": len(report["transport"]["rows"]), "auction_rows": len(report["auction"]["fresh_grid_rows"])}, sort_keys=True)) |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|