Dual-Rail Ratio Arithmetic Layer / mini_benchmark.py
Mechanism failed
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()