Skip to content

IMRPhenomHM (2,1) 1.5PN amplitude-ratio gate — 27 September 2026

The six-section source specification was frozen at cbfe4bb, before implementation or numerical comparison. London et al., arXiv:1708.00404v4, Eqs. (3)–(4) and the paragraph after Eq. (4) prescribe a (2,1) SPA ratio through relative 1.5PN. Mishra et al., arXiv:1601.05588v1, Eqs. (7), (11), (12a), (12b) fix the complete complex polynomial through \(V_1^4\). The independent SymPy source reduces the full SPA quotient to \((\sqrt2/3)P(v_g)P(v_x)/P(v_{2x})\) exactly; mpmath evaluates its magnitude and analytic one-sided Eq. (5) slopes. The test divides the public unprojected (2,1) mode magnitude by the separately evaluated public PhenomD carrier magnitude at the independently mapped frequency. Code and gates are in 91c7c19.

The source coefficient of \(V_1^4\) is \(\chi_a(4771/1344-11941\eta/336)+\delta\chi_s(4771/1344-2549\eta/336) +\delta[-\pi-i(1/2+2\log2)]\). With \(\delta^2=1-4\eta\), both native production implementations had used c_tail + c_spa - c_td, yielding \(\chi_a(3427/1344-2101\eta/336)+\delta\chi_s(3427/1344-965\eta/336)\) for the spin terms. The initial correction changed - c_td to + c_td in both frontends. Exact-head CI run 36294348734 then failed the strict binary-oracle gate only for IMRPhenomHM_diagnostic and IMRPhenomHM_holdout_5; all other catalog and holdout cases passed. The printed equation and the established binary behavior therefore need distinct claims. The public default now keeps - c_td as hm_21_pn_variant="binary_compatible", while hm_21_pn_variant="mishra_eq12b" selects the printed + c_td coefficient. The source gate explicitly selects the latter. Neither source coefficient, map, D carrier, nor tolerance changed.

Host len; original base b111a76; isolated branch codex/hm-leading-44-amplitude; source copied to /home/xangma/tmp/diffgw-hm21-source-gate-20260927. Python: /home/xangma/.cache/diffgw-taylorf2-hm-venv/bin/python; Python 3.12, mpmath 1.3.0, SymPy 1.14.0, NumPy 2.5.3, Torch 2.14.0+cpu, JAX 0.11.2, pytest 9.1.1, and PyCBC 2.11.0 from the compatible package directory. Every command used this prefix from its stated cwd:

JAX_ENABLE_X64=1 JAX_PLATFORMS=cpu OMP_NUM_THREADS=1 \
PYTHONPATH=/home/xangma/tmp/diffgw-pycbc-2.11.0-full/packages:src:tests \
/home/xangma/.cache/diffgw-taylorf2-hm-venv/bin/python -m pytest -q

The pre-fix red gate ran with the original native source and the new independent reference/tests, before the sign change. Exact suffix: tests/test_imrphenomhm_amplitude_ratio_math_reference.py --reference-device=cpu -ra -k beta21 -x. The original log is /home/xangma/tmp/diffgw-hm21-source-gate-20260927/hm21-red.log. For explicit process status the same pre-fix tree was replayed in /home/xangma/tmp/diffgw-hm21-red-replay-20260927 with that exact suffix and log hm21-red-replay.log: exit 1, 1 passed, 1 failed, 15 deselected in 24.35 s. The source reduction/scalar test passed. The first public failure was Torch, phenomd_runtime, \((m_1,m_2,\chi_1,\chi_2)=(35,20,0.2,-0.1)\): all nine points failed, maximum absolute discrepancy 0.05467972, maximum relative discrepancy 0.57887378; the first measured/expected ratio was 0.031046/0.025903.

After the initial two-line correction, the exact ratio-file suffix was tests/test_imrphenomhm_amplitude_ratio_math_reference.py --reference-device=cpu -ra. Log: /home/xangma/tmp/diffgw-hm21-source-gate-20260927/hm21-green.log; 32 passed in 44.14 s, no skips or warnings. This was before the binary-compatible default was restored; the tests now select mishra_eq12b explicitly. The independent source reduction and printed coefficients are exact symbolic checks. For the public quotient, the frozen tolerance is rtol=1e-10, atol=1e-12; for one-sided join secants at geometric step 1e-7, it is rtol=5e-5, atol=5e-8. Both Torch and JAX passed three mass/spin cases and both map settings. In particular, equal masses with unequal spins have nonzero ratios. At equal mass and equal spin, literal Eq. (4) is \(0/0\) and the scalar rejects it; the public (2,1) mode remained finite and identically zero across both map settings and frontends. The zero-mode branch is checked, but no path-independent quotient limit is claimed.

The neighboring HM suffix was tests/test_imrphenomhm_frequency_map_math_reference.py tests/test_imrphenomhm_phase_offsets_math_reference.py tests/test_imrphenom_hm.py tests/test_phenomhm_reconstruction.py --reference-device=cpu -ra. Log: /home/xangma/tmp/diffgw-hm21-source-gate-20260927/hm21-neighbors.log; exit 0, 88 passed in 27.64 s, no skips, one Torch JIT deprecation warning.

This is source fidelity for the printed 1.5PN (2,1) amplitude ratio and sampled implementation agreement through the public opt-in mode. The public quotient necessarily uses the native D carrier and QNM frequencies as supplied inputs; it is not an independent qualification of either. Higher PN terms, odd-mode phase/parity, projection, LAL agreement, physical accuracy, and the complete HM waveform remain unqualified. No LAL code, constants, or binary output entered these tests.

Binary-compatible default and explicit paper option

The integrated checkout at 9cbb2a2 initially put the printed coefficient on the default path. The strict binary oracle in CI run 36294348734 failed only IMRPhenomHM_diagnostic and IMRPhenomHM_holdout_5 (18/19 catalog and 15/16 holdout cases passed). The subsequent remedy restored the old - c_td default and named the printed + c_td path mishra_eq12b; the source gate explicitly selects the latter. This preserves the existing binary and paper gates with their original tolerances.

The remedy was checked on len in the isolated tree /home/xangma/tmp/diffgw-hm21-dual-variant-20260927, using the environment prefix above. The amplitude-ratio file passed 34 tests in 47.93 s, including a new public default-versus-explicit-default equality and paper option distinction for Torch and JAX; log hm21-dual-source.log. Direct strict replay through the frozen parity harness passed both formerly failing cases; log hm21-dual-binary.log. The diagnostic plus/cross complex L2 errors were 1.0523665e-7/1.0669251e-7; holdout_5 errors were 5.5745474e-7/5.4138847e-7, all below the unchanged 1e-6 gate. The corresponding PSD mismatches were at most 1.6432e-14 and 1.1969e-12, below the unchanged 1e-8 gate. This replay did not rerun the whole strict catalog; the earlier CI run already showed its other cases passing at the same integrated head.