# Newly provided analysis recipe, not a recovered historical shell command.
# Reads saved results only; does not invoke a solver.
# Reads the adjacent public archive by default; optionally pass its path.
python3 - "${1:-$(dirname "$0")/gecode-final.json.gz}" <<'PY'
import gzip
import json
import sys

with gzip.open(sys.argv[1], 'rt') as stream:
    projection = json.load(stream)['projection']
print('| Problem | Before → after | Size increase | Speedup at original maximum |')
print('|---|---:|---:|---:|')
for family in projection['families']:
    before = family['before_boundary']['confirmed_size']
    after = max(family[c + '_boundary']['confirmed_size']
                for c in ('auto', 'configured'))
    point = next(case for case in family['cases'] if case['size'] == before)
    improved = min(point[c]['median_solve_ms'] for c in ('auto', 'configured'))
    speed = point['before']['median_solve_ms'] / improved
    size_label = '1' if after == before else f'{after / before:.2f}'
    speed_label = f'{speed:,.0f}' if speed >= 10 else f'{speed:.3f}'
    print(f"| {family['name']} | {before:,} → {after:,} | {size_label}× | {speed_label}× |")
PY
