"""Poisson-kernel random-attractor regularizer for complex latent ensembles.""" import numpy as np def poisson_density(phases, x, eps=1e-8): phases = np.asarray(phases) x = complex(x) r2 = min(abs(x) ** 2, 1.0 - eps) u = np.exp(1j * phases) den = 1.0 + r2 - 2.0 * np.real(np.conj(x) * u) return (1.0 - r2) / np.maximum(den, eps) def poisson_nll(phases, x, eps=1e-8): return float(-np.mean(np.log(poisson_density(phases, x, eps)))) def compose_affine(maps, z): """Apply maps in chronological order; each map is (q, a), T(z)=q*z+a.""" for q, a in maps: z = q * z + a return z def estimate_attractor(maps, probes): """Finite backward-composition estimate, with stopped-gradient semantics in numpy.""" vals = [compose_affine(maps, complex(p)) for p in probes] return complex(np.mean(vals)) def pk_loss(phases, xhat, eps=1e-8): return poisson_nll(phases, xhat, eps) def sample_poisson_phases(x, n, rng): """Exact boundary sampling via the disk automorphism of uniform circle points.""" u = np.exp(2j * np.pi * rng.random(n)) x = complex(x) w = (u + x) / (1.0 + np.conj(x) * u) return np.angle(w)