Dual-Rail Ratio Arithmetic Layer / mini_benchmark.py

Mechanism failed

Raw ⬇ ZIP
 1import json
 2import numpy as np
 3from dual_rail_experiment import norm_pair, tensor, val
 4
 5def run_chain(factors, mode, dtype=np.float32):
 6    if mode == 'scalar':
 7        z = np.array(1.0, dtype=dtype)
 8        for f in factors:
 9            z = z * np.array(f, dtype=dtype)
10        return float(z), bool(np.isfinite(z))
11    p = np.array([1.0, 1.0], dtype=dtype)
12    for f in factors:
13        p = tensor(p, np.array([1.0, f], dtype=dtype)).astype(dtype)
14        if mode == 'normalized':
15            s = np.max(np.abs(p))
16            if np.isfinite(s) and s > 0:
17                p = p / s
18    decoded = p[1] / p[0] if p[0] != 0 else np.inf
19    return float(decoded), bool(np.all(np.isfinite(p)) and np.isfinite(decoded))
20
21def main():
22    np.seterr(all='ignore')
23    rng = np.random.default_rng(123)
24    rows = []
25    for depth, center in [(20, 1.05), (100, 1.1), (200, 1.25), (500, 1.1), (1000, 1.1), (1000, 1.25)]:
26        factors = rng.uniform(center * .99, center * 1.01, depth).astype(np.float64)
27        truth = float(np.prod(factors, dtype=np.float64))
28        row = {'depth': depth, 'truth': truth}
29        for mode in ('scalar', 'normalized', 'unnormalized'):
30            got, finite = run_chain(factors, mode)
31            row[mode + '_finite'] = finite
32            row[mode + '_relerr'] = abs(got - truth) / max(abs(truth), 1e-30) if np.isfinite(got) else None
33        rows.append(row)
34    print(json.dumps(rows, indent=2, allow_nan=False))
35
36if __name__ == '__main__':
37    main()