Skip to content

HM SPA/SXS native convention — 2026-09-28

The opt-in hm_phase_convention="spa_sxs_v1" implements the source-derived SPA factor and signed-pair transport in both native frontends. The canonical specification contains the derivation, supported combinations and test tolerances. Default output and all historical receipts remain unchanged.

Mathematical implementation

Composition imrphenomhm-independent-waveform/v3 adds two components under imrphenomhm-spa-sxs-carrier/v1: hm.waveform.spa_sxs.polarizations.v1 and hm.waveform.spa_sxs.derivatives.v1. Each intrinsic mode receives \(\exp[i(m/2-1)3\pi/4]\) once before projection; both \(m=2\) modes remain bitwise unchanged. Native D is required. Either reference-phase origin and mapping choice is supported. Applying this leading-SPA constant through merger/ringdown is an explicit model convention, not a PN accuracy theorem. No coefficient was fitted to NR or a binary oracle.

The independent scalar composition reuses the signed-pair symbolic factor, independent printed D fits and existing QNM assets. The native implementations use tensor operations and import no reference evaluator. The maintained waveform-reference module checks all six complex modes, individual and summed polarizations around mapped joins, both hemispheres and both phase origins. Smooth derivatives, primary-mass/reference-frequency derivatives, batching, JAX JIT, dispatch, masks, exchange symmetry and default preservation are also checked. Claims cover only the explicitly tested parameter tuples; the canonical specification records their numerical tolerances.

The focused CPU FP64 run passed 191 tests in 711.64 seconds, with no failures, skips or expected failures. This includes the complete waveform module, existing signed/SPA/projection references and catalog checks. The command below is a focused run, not the whole-project strict reference gate; its result does not replace that gate or imply accelerator/FP32 coverage. The new catalog entries record eleven bounded implementation claims and preserve the eleven previous claims with explicit legacy phase convention.

Ruff passes for the changed reference, catalog and test files. Whole-file checks of the two native modules report ten pre-existing unused-import/local findings; comparison with d90d697 confirms the same findings in the baseline. After adding the scoped catalog claims, catalog tests, generated library and coverage checks, and strict MkDocs build passed on len. Full reference CI on the pushed revision remains a separate gate.

Seen-NR diagnostic

This is a before/after diagnostic on already examined SXS:BBH:2374 and 2163, not a prospective physical qualification. Both sides use hm_reference_phase="orbital"; the historical published-NR receipt used "legacy". Thus the fresh baseline below is not a reproduction of that historical receipt. Both use published calibration and Mishra Eq.12b/d/g PN options, 100 solar masses, 500 Mpc, f_ref=30 Hz, and 30–1024 Hz at 1 Hz. View 0 has \((\iota,\psi)=(0.7,0)\); view 1 has \((1.2,0.4)\).

The frozen manifests, raw files, conditioning, fixtures, PSD and original metrics were hash-checked. Historical NR-resolution screens were reused only after those identity checks; they were not recomputed. Both pass. The original four optimizer seeds (17,23,41,67), time/orbital/polarization search, match floor 0.980, norm interval [0.85,1.15] and seed-spread ceiling \(10^{-5}\) are retained. The runtime mapping is a separate diagnostic, not a change to the frozen published mapping. There was no new data acquisition or fit.

The table reports Torch values; JAX gives the same gate outcomes. Norm is the PSD-weighted candidate/reference norm ratio. “Pass” here means these numerical gates on seen data, not a new qualification claim.

SXS Mapping Phase convention View Match Norm Seed spread Result
2374 London legacy 0 0.988641 0.937321 2.14e-4 Fail: spread
2374 London legacy 1 0.971789 0.811100 5.13e-11 Fail: match, norm
2374 London SPA 0 0.988881 0.956175 8.11e-12 Pass
2374 London SPA 1 0.975269 1.112126 3.90e-11 Fail: match
2374 runtime legacy 0 0.995016 0.962849 8.18e-11 Pass
2374 runtime legacy 1 0.979583 0.984981 5.63e-6 Fail: match
2374 runtime SPA 0 0.995329 0.984803 8.07e-12 Pass
2374 runtime SPA 1 0.983052 1.143848 5.92e-12 Pass
2163 London legacy 0 0.990156 0.976356 1.86e-11 Pass
2163 London legacy 1 0.977392 0.824196 3.11e-11 Fail: match, norm
2163 London SPA 0 0.990120 0.972344 1.13e-4 Fail: spread
2163 London SPA 1 0.974579 0.941365 6.36e-12 Fail: match
2163 runtime legacy 0 0.993991 0.976669 9.85e-12 Pass
2163 runtime legacy 1 0.984505 0.933009 7.78e-11 Pass
2163 runtime SPA 0 0.994074 0.999716 1.01e-11 Pass
2163 runtime SPA 1 0.981391 1.292795 1.12e-5 Fail: norm, spread

Across all cases/options, the maximum Torch/JAX intrinsic-mode relative L2 error is \(6.28\times10^{-13}\). Direct native polarizations evaluated at the optimized orbital/time settings reproduce the independent projection within \(5.41\times10^{-16}\) relative L2. Mode magnitudes and support are preserved, with exact equality for \(m=2\). The changed interference between modes can nevertheless change the total projected norm substantially.

The seed-spread failures remain failures. Periodic optimizer boundaries and local optima mean these scores do not certify a global optimum. Separate optimizer robustness and intrinsic mode-shape investigations are required; a phase convention alone does not cure the remaining amplitude and frequency-dependent phase discrepancies. Any later physical claim needs a frozen model/domain and suitable untouched validation data. No existing red receipt or threshold is reclassified.

A subsequent periodic optimizer and residual audit explains the poorer seeds and reproduces these best scores within \(10^{-11}\). It leaves every match/norm outcome unchanged and preserves this receipt, including its seed-spread failures. Common-alignment residuals narrow the physical investigation without establishing an intrinsic-mode cause.

Execution and replay

Both tests and rescore used CPU FP64 on len in /tmp/diffgw-hm-spa-native-20260928/repo, an archive of d90d697 with reviewed changes overlaid. The rescore ran 09:24:42–09:26:37 UTC with PID 811774, returned zero, and recorded qualification_promoted=false. Its preserved scratch runner, log and JSON are in the parent directory. Scratch diagnostic files are not packaged as maintained production tools.

Artifact SHA-256
Torch HM source c7e012f095e1396bc3220bcec60e665bcd8a630525e6a2f43d55b6c87ed829ef
JAX HM source 0bc379d180abc3f98d52e3bc829c644d8051853a0a6df8cc1f555f8d3b246869
Independent waveform reference fc231f36d5c778165a5981b1817c4e9ec7e66bab484a2a7b7df85cb712842eb3
Waveform-reference tests ffbbff1b690f43c1d115b5db1f694fe0734e569081f4de253c30339582dfce72
Scratch hm_spa_native_rescore.py 0426a424e853e71ccd6f6111279c6647954e32f336f1dc103b0009e9859c58bb
rescore.json f3fad6cf7693ac26d4645a2f2305b9382635e9ed364ba8bbe8ac48ca8e14b659

The JSON also records the full native source-tree hash, frozen runners, manifests, raw inputs, preparation, fixtures, historical metrics and PSD, all seed outcomes, boundary flags, projection rechecks and invariants. Original data and receipts remain under /tmp/diffgw-hm-published-nr-20260927.

Environment: Python 3.12.3, NumPy 2.3.5, SciPy 1.16.3, Torch 2.14.0, JAX/JAXlib 0.11.2, SymPy 1.14.0, mpmath 1.3.0, pytest 9.1.1, PyCBC 2.11.0, MkDocs 1.6.1 and Ruff 0.16.8. Use /tmp/diffgw-waveform-library-1315f6e/venv-latest/bin on PATH on len.

export PYTHONPATH=src JAX_ENABLE_X64=1 JAX_PLATFORMS=cpu
export OPENBLAS_NUM_THREADS=1 OMP_NUM_THREADS=1
python -m pytest -q \
  tests/test_imrphenomhm_waveform_math_reference.py \
  tests/test_imrphenomhm_signed_projection_math_reference.py \
  tests/test_imrphenomhm_spa_conventions_math_reference.py \
  tests/test_imrphenomhm_projection_math_reference.py \
  tests/test_waveform_definitions.py
python scripts/generate_waveform_library_table.py --check
python scripts/generate_waveform_coverage.py --check
python -m mkdocs build --strict

To replay the scratch NR diagnostic with the same pinned inputs and a new output path, use the environment above and:

cd /tmp/diffgw-hm-spa-native-20260928/repo
python ../hm_spa_native_rescore.py --repo "$PWD" \
  --source-revision YOUR_CHECKOUT --output /tmp/new-hm-spa-rescore.json

The runner rejects modified historical inputs and existing output paths. It records the current source-tree hash; it does not itself freeze a new qualification protocol.