Kerr 220 source-spectral angular composition
Specification ID: kerr-220-source-spectral-angular-composition/v1.
Scope and status
This is a selected-input, direct-call composition gate for Torch and JAX
kerr220_td/fd with angular_convention="source_spectral". It checks the
physical-energy (2,2,0) carrier with an equation-defined angular factor.
The default "public_compat" route and its public-clean whole-waveform
blocker are unchanged. This gate makes
no binary-parity, dispatcher, spin-gradient, or full-domain claim.
Inputs, conventions, and options
The frozen (spin, mass/Msun, distance/Mpc, energy fraction, inclination,
phic, tc/s) cases are (0.35,53,230,0.017,1.1,0.41,0.002) and
(0.7,92,430,0.005,0.55,-0.27,-0.001). The TD grid is
tc+(-0.001,0,0.002,0.008) seconds; the signed FD grid is
(-130,0,35,110,270) Hz. CPU FP64 is required. The angular solution has
spin weight -2, exp(+2i phic), unit-sphere norm, and a phase rotation
making its value at (theta,phi)=(pi/2,0) positive real. The other factor
uses pi-inclination. The TD step has H(0)=1, and the FD kernel is
exp(-2 pi i f t).
Mathematics and components
The independent frequency is the continued-fraction 220 root specified in
scalar QNM qualification. With
c=spin*(M omega) for complex M omega, the angular function solves
Cook and Zalutskiy, arXiv:1410.7698v2
Eq. (4) by the convergent spherical expansion of Eqs. (49)–(57). Its
complex phase is arbitrary; the equatorial-positive rule above fixes it
without using a public binary. The same paper's Eq. (15b) gives a
convergent Frobenius expansion, but it does not prescribe the absolute
0.01 first-small-term stop in the inferred compatibility path. The
conditional carrier specifies the single-mode energy
amplitude, causal polarization pair, and analytic two-pole FD transform.
Implementation mapping
The source-spectral option evaluates the existing native spherical
eigensolver in torchwave.approximants.kerr_angular or
jaxwave.approximants.kerr_ringdown, then applies the equatorial phase
rotation before calling the existing carrier. The independent reference
uses diffgw_reference.kerr_qnm, diffgw_reference.kerr_angular, and
diffgw_reference.kerr_ringdown; it does not take native QNM or angular
values as inputs. The angular_convention option is explicit and leaves
the inferred public-compatible default unchanged.
Evidence and limitations
For each case and backend, the predeclared gates are 3e-10 maximum
absolute error for either complex angular factor and 3e-9 relative L2
error across both polarizations on each TD and FD grid. The scalar reference
uses 40-digit mpmath, radial depth 400, Galerkin ell_max=10, and
Gauss–Legendre order 32. Its angular convergence check compares
ell_max=10 with 12 and must be below 1e-11. Native ell_max=18 is
fixed. The grid checks a composition at selected spins, not a continuous
spin domain or every angle. JAX's spectral eigenvector callback has no
derivative through spin; no intrinsic-gradient claim is made. A separate
fresh pinned binary holdout and applicable gradients would be needed to
qualify a public waveform route.
The isolated len CPU FP64 run at commit da4c687 passed the focused
reference test. For spins 0.35 and 0.7, respectively, scalar angular
ell_max=10 versus 12 changed by 3.47e-18 and 3.02e-14. Across both
backends and both factors, the maximum absolute angular error was
3.04e-14; the maximum TD and FD polarization relative L2 errors were
7.93e-14 and 5.23e-14. The environment used Python 3.12.3, Torch
2.14.0+cpu, JAX 0.11.2, NumPy 2.5.3, mpmath 1.3.0 and pytest 9.1.1.
Reproduce the checks
On len with Torch/JAX CPU FP64, SymPy, mpmath and pytest:
JAX_PLATFORMS=cpu JAX_ENABLE_X64=1 OMP_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1 \
PYTHONPATH=src:tests python -m pytest -q -ra \
--reference-device=cpu tests/test_kerr_source_angular_math_reference.py
This focused selection omits --require-math-reference, whose full-suite
contract requires all reference files.
The diagnostic script prints per-case errors and source hashes with
python scripts/audit_kerr220_public_angular_gate.py
--angular-convention source_spectral under the same environment.