#!/usr/bin/env python3 """Independent exact check of (max distance / min distance)^2 for a point set (stdlib only, integers). python3 verify_minratio.py FILE DIM [--record VALUE] (lower is better; exit 0 iff below the record) """ import decimal import sys from fractions import Fraction def main(): f, dim = sys.argv[1], int(sys.argv[2]) rec = sys.argv[sys.argv.index("--record") + 1] if "--record" in sys.argv else None toks = [] for line in open(f): line = line.split("#", 1)[0] toks += [decimal.Decimal(t) for t in line.replace(",", " ").split()] E = max(-t.as_tuple().exponent for t in toks) V = [int(t.scaleb(E)) for t in toks] P = [V[i:i + dim] for i in range(0, len(V), dim)] n = len(P) D = [sum((a - b) ** 2 for a, b in zip(P[i], P[j])) for i in range(n) for j in range(i + 1, n)] lo, hi = min(D), max(D) if lo == 0: print("coincident points") return 1 q = Fraction(hi, lo) s = decimal.Decimal(q.numerator) / decimal.Decimal(q.denominator) with decimal.localcontext() as c: c.prec = 40 s = decimal.Decimal(q.numerator) / decimal.Decimal(q.denominator) print(f"points {n} dim {dim} ratio^2 = {s} (exact fraction {q.numerator.bit_length()}-bit / " f"{q.denominator.bit_length()}-bit)") if rec: r = decimal.Decimal(rec) print(f"record {rec} margin (record - ours) = {r - s}") return 0 if q < Fraction(rec) else 1 return 0 if __name__ == "__main__": sys.exit(main())