Prototype U,V/Q-guided multi-peak JAX marginalization - #270
Conversation
# Conflicts: # .travis/test-jax.sh
…rder branch Only .travis/test-jax.sh conflicted, in the two places its own comments predict. FILES: union, per the rule written in that file -- both test_multipeak_planner.py and test_jax_phase_marg_mode_order.py. DESELECTED_TESTS merged cleanly and keeps all five entries (#270's four real-table regressions plus the GPU stencil leg). EXPECTED_TESTS: the fourth time this constant has conflicted. Each side carried a number the other had already invalidated -- 475 (this branch) vs 472 (#270) -- which is the exact failure mode that file's comment block describes. Re-measured after resolving rather than computed: the script's own line reads "collected 486 tests from 33 files" with the DESELECT loop applied. 472+14 also gives 486; recorded as a coincidence to distrust, not as corroboration. #270 is additive and does not interact with this change: it adds one standalone module, multipeak_planner.py, which imports nothing from core and references neither phase_marginalization, _accumulate_unit, nor the packed lms/U/V (verified with a positive control on the grep). core.py itself is untouched on that side. Re-verified on the merged tree, against gh/rift_O4d at 750ca04 as the new base: the 64-array fingerprint is unchanged, sha256 aa4ff26be9967f333e1da8b12010b90ef483 09695fa7328788fc21e9961cc3fd on both sides, 0 differing arrays. The 14 mode-order tests pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Two notes from testing #273's algebraic phi enumeration against this PR's planner. Neither asks for a change here; the first is a finding in your favour, the second is an availability problem. 1. The U,V/Q lattice is sufficient — a much better start set changes nothing. At fixed time and distance the exponent
18-27x better coverage of the true phi-maxima, identical retained mode count, identical One caveat on how far to take that: 2. The real-table regressions cannot run outside your host.
|
…he Q pregrid branch Two conflicts, both in .travis/test-jax.sh, both the same recurring one. FILES array: took the union. The three test files each side registered are independent; none replaces another. EXPECTED_TESTS: each side carried a number the other had already invalidated (480 on this branch, 486 on rift_O4d). Resolved by MEASUREMENT, not by adding the two. Read off this job's own collection line on the merged tree, with the DESELECT loop applied: "collected 505 tests from 34 files". core.py auto-merged and was re-read rather than trusted, because this module has placed an incoming docstring above a contradicting implementation before. The two sides are disjoint by axis: #272 permutes the packed MODE axis of Q/U/V before the phase-marginalization reduction, this branch rescales indices along the TIME axis of the stored Q. In the merged _accumulate_unit the permutation runs first (mode axis, Q.shape[1]) and _check_stored_q_length then reads Q.shape[0], which the permutation does not touch. README.md's new phase-marg section describes only #272's code and this branch does not touch it. Also, while re-reading: * _check_stored_q_length's docstring lost the end of a sentence ("... and they are" ran straight into the next paragraph). Completed; no code change. * test_jax_q_time_pregrid.py had no entry in the per-file manifest comment that every other gated file has. Added.
Scope
Adds an opt-in diagnostic seam for genuinely local joint marginalization over reflected time, two angles, and inverse distance. It does not change production likelihood dispatch.
Adversarial fixes
Real-table gate (1e-3 nat policy)
The HM regression preserves the relevant second mode: sampled proxy rank 15 at -37.14 nat, refined contribution at -11.671 nat. No sampled-height pruning is used before refinement.
Validation
15 passed in 56.09sin the focused CPU JAX suite, including full real-table 22 low/high-SNR and HM integrals, symmetry-cap, overlap, endpoint, finite-reserve, and frozen-cover regressionspy_compile,flake8 --ignore=E501,W503, and diff checks passGPU device high-water validation remains infrastructure-blocked: the available CUDA/JAX container aborts while creating its client thread under current host thread pressure. The result field therefore labels only modeled explicit arrays, not measured GPU RSS.