Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
fa3d84d
jax_ile: multipeak is host-side, so do not trace it
oshaughn Sep 9, 2026
b757fbf
Merge branch 'rift_O4d' of https://github.com/oshaughnessy-junior/res…
oshaughn Sep 9, 2026
6ad9fb5
test-jax: re-measure the floor after the #315 merge
oshaughn Sep 9, 2026
c14c1fb
Match JAX AV production ILE precompute settings
oshaughnessy-junior Sep 11, 2026
d97fe03
Merge remote-tracking branch 'junior/rift_O4d' into codex/jax-av-pseu…
oshaughnessy-junior Sep 11, 2026
6ec18a8
Allow platform roundoff in slowrot coefficients
oshaughnessy-junior Sep 11, 2026
f96cb1c
Merge pull request #321 from oshaughnessy-junior/codex/jax-av-pseudo-…
oshaughnessy-junior Sep 11, 2026
d30c888
Convert JAX fairdraw sidecars in terminal pipeline
oshaughnessy-junior Sep 11, 2026
80b6009
Register JAX fairdraw tests in CI
oshaughnessy-junior Sep 11, 2026
d8e171a
ile: add opt-in response-order selection
oshaughnessy-junior Sep 11, 2026
964e551
ci: gate response-order unit tests
oshaughnessy-junior Sep 11, 2026
b3b4dc6
Classify response-order controls for LISA drift
oshaughnessy-junior Sep 11, 2026
f660a50
Merge pull request #323 from oshaughnessy-junior/codex/response-order…
oshaughnessy-junior Sep 11, 2026
02d13a7
Merge pull request #322 from oshaughnessy-junior/codex/jax-fairdraw-p…
oshaughnessy-junior Sep 11, 2026
63294ab
Merge rift_O4d into claude/multipeak-hostside
oshaughn Sep 12, 2026
3ee682f
Merge pull request #317 from oshaughnessy-junior/claude/multipeak-hos…
oshaughnessy-junior Sep 12, 2026
f20db49
Add bounded JAX multipeak marginalization
oshaughn Sep 12, 2026
dbc5842
Fix JAX intrinsic-template loading to reset sampled angles
oshaughn Sep 12, 2026
8eb362e
Merge pull request #326 from oshaughnessy-junior/codex/jax-template-e…
oshaughnessy-junior Sep 12, 2026
27d77e4
Repair bounded multipeak defaults, decline handling, and validation
oshaughnessy-junior Sep 12, 2026
3ce33e5
Isolate bounded coefficient guards in regression tests
oshaughnessy-junior Sep 12, 2026
c81fdb1
Choose measured compact defaults for bounded multipeak
oshaughnessy-junior Sep 12, 2026
b853617
Fix JAX AV sampling outside requested bounds
oshaughn Sep 12, 2026
c86d2cb
Merge pull request #327 from oshaughnessy-junior/codex/jax-av-enforce…
oshaughnessy-junior Sep 12, 2026
ecf5383
Clarify bounded decline audit scope and close review coverage gaps
oshaughnessy-junior Sep 12, 2026
27f19ff
Merge pull request #324 from oshaughnessy-junior/codex/multipeak-jit-…
oshaughnessy-junior Sep 12, 2026
7bc9425
Native waveform conditioning building blocks (fail-closed) (#328)
oshaughnessy-junior Sep 12, 2026
c2ec6a6
GPU compound precompute and device-resident likelihood handoff (#325)
oshaughnessy-junior Sep 12, 2026
da91a09
Score bounded GMM draws with component-wise normalization (#331)
oshaughnessy-junior Sep 13, 2026
bd6b6c6
Count zero-likelihood walkers in SMC evidence ratios (#332)
oshaughnessy-junior Sep 13, 2026
3c94c24
Use conservative compound GPU precompute workspace defaults (#330)
oshaughnessy-junior Sep 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -534,6 +534,16 @@ jobs:
except Exception:
print('%-10s (absent)' % n)
"
- name: Run GPU precompute CPU regression gate
if: matrix.shard == 1
run: bash .travis/test-gpu-precompute.sh
- name: Run optional waveform conditioning CPU tests
if: matrix.shard == 1
env:
JAX_ENABLE_X64: "1"
JAX_PLATFORM_NAME: cpu
JAX_PLATFORMS: cpu
run: python -m pytest -q MonteCarloMarginalizeCode/Code/test/waveforms/test_gpu_waveform.py
- name: Run jax_ile CPU regression gate
env:
JAX_PLATFORMS: cpu
Expand Down Expand Up @@ -778,6 +788,7 @@ jobs:
MonteCarloMarginalizeCode/Code/test/test_seq_warmstart_seed.py \
MonteCarloMarginalizeCode/Code/test/test_fairdraw_double_weighting.py \
MonteCarloMarginalizeCode/Code/test/test_portfolio_fairdraw_backend.py \
MonteCarloMarginalizeCode/Code/test/test_gmm_truncated_score.py \
MonteCarloMarginalizeCode/Code/test/test_rvs_record.py
- name: Audit _rvs consumers against the fair-draw rebind
# sampler._rvs is rebound to an EXPORT resample at the end of integrate_log, and five
Expand Down Expand Up @@ -810,7 +821,9 @@ jobs:
# --use-jax-ile and --ile-exe land in ILE.sub/ILE_puff.sub/ILE_extr.sub,
# and --use-jax-ile is refused at DAG-build time with --calmarg-envelope-directory.
run: |
python -m pytest -q MonteCarloMarginalizeCode/Code/test/test_jax_ile_selectable.py
python -m pytest -q \
MonteCarloMarginalizeCode/Code/test/test_jax_ile_selectable.py \
MonteCarloMarginalizeCode/Code/test/test_jax_fairdraw_postprocess.py
- name: Run q-time-pregrid DAG-build test (--internal-ile-q-time-pregrid-factor)
# Full subprocess DAG build against the same reference ini/coinc, same reason as
# the step above (PR #281 follow-up review, MAJOR #1): asserts
Expand Down
9 changes: 7 additions & 2 deletions .travis/test-core-units.sh
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@ FILES=(
# -- likelihood dispatch
"$C/RIFT/likelihood/test_td_dispatch_epoch.py"
"$C/RIFT/likelihood/test_precompute_crossterm_batching.py"
"$C/test/test_jax_template_finalization.py"
"$C/test/test_response_order.py"
"$C/test/test_ile_scalar_edge_cases.py"
"$C/test/test_mcsamplerGPU_cdf_inverse_scalar_probe.py"
"$C/test/test_srate_resample_time_marginalization.py"
Expand Down Expand Up @@ -159,6 +161,8 @@ done
# found it passing 15/15 on a runner with htcondor absent)
# 358/346 + test_mcsamplerGPU_cdf_inverse_scalar_probe.py (11 tests: mcsamplerGPU.cdf_inverse
# fed odeint's float probe to len(x) pdfs; the t_ref wiring in all three ILE drivers)
# 378/366 + test_response_order.py (8 tests: SNR tightening, Halton independence,
# compound-axis semantics, reference resolution/tail charging, and bank preflight)
#
# RAISE these when files are added: a floor left at the old value passes while covering less,
# which is the failure this gate exists to catch.
Expand All @@ -173,12 +177,13 @@ done
# direction that matters: 350 >= 347 passes today, and if pytest-subtests ever leaves the
# runner's closure the count falls back to 347 and still passes. Pinning 350 would turn an
# unrelated dependency change into a red gate.
EXPECTED_TESTS=370
# Two XML/grid template-finalization regressions, with no added skips.
EXPECTED_TESTS=380
# Outcomes, not just exit status: a collection floor cannot see a test that collects, runs and
# asserts nothing, and a pytest.skip can quietly absorb a lost gate. The 12 skips are
# environment legs -- cupy in test_seeding_reproducibility, device legs in
# test_dslice_device_native, and the xfail in test_uv_symmetry.
EXPECTED_PASSED=358
EXPECTED_PASSED=368
MAX_SKIPPED=12

# The floors must be INTEGERS, and this is checked rather than assumed. `[ 347 -lt FOO ]` does
Expand Down
41 changes: 41 additions & 0 deletions .travis/test-gpu-precompute.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#!/usr/bin/env bash
# CPU coverage of the optional GPU path: run each file in a fresh process so
# synthetic import stubs and directory-local conftest modules cannot leak.
set -euo pipefail
cd "$(dirname "$0")/.."
PYTHON_BIN="${RIFT_JAX_PYTHON:-${PYTHON:-python}}"
export PYTHONPATH="$PWD/MonteCarloMarginalizeCode/Code${PYTHONPATH:+:$PYTHONPATH}"
export JAX_PLATFORM_NAME=cpu JAX_PLATFORMS=cpu JAX_ENABLE_X64=1
export OMP_NUM_THREADS="${OMP_NUM_THREADS:-1}"
C="MonteCarloMarginalizeCode/Code/test"
FILES=(
"$C/gpu_precompute/test_array_contract.py"
"$C/gpu_precompute/test_basis_reuse.py"
"$C/gpu_precompute/test_classic_compound_waveform_forwarding.py"
"$C/gpu_precompute/test_cross_driver_parity.py"
"$C/gpu_precompute/test_device_handoff_adversarial.py"
"$C/gpu_precompute/test_dispatch_contract.py"
"$C/gpu_precompute/test_highlevel_integration.py"
"$C/gpu_precompute/test_lal_fft_oracle.py"
"$C/gpu_precompute/test_smoke_config_contract.py"
"$C/gpu_precompute/test_streamed_v_weighting.py"
"$C/test_gpu_jax_handoff.py"
"$C/waveforms/test_gpu_legacy_compat.py"
"$C/waveforms/test_gpu_waveform.py"
)
report_dir="$(mktemp -d)"
for file in "${FILES[@]}"; do
report="$report_dir/$(basename "$file").xml"
"${PYTHON_BIN}" -m pytest -q -p no:cacheprovider --junit-xml="$report" "$file"
# CUDA and optional waveform backends may skip; every file must still run
# at least one CPU assertion. Pytest success alone also permits all-skipped.
"${PYTHON_BIN}" - "$report" <<'PY'
import sys
import xml.etree.ElementTree as ET
cases = list(ET.parse(sys.argv[1]).iter("testcase"))
passed = sum(not any(case.find(tag) is not None
for tag in ("skipped", "failure", "error")) for case in cases)
if passed < 1:
raise SystemExit("GPU precompute CPU gate ran no passing tests: " + sys.argv[1])
PY
done
16 changes: 15 additions & 1 deletion .travis/test-jax.sh
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ fi
|| { echo "test-jax.sh: numpyro unavailable (needed by test_nuts_phimarg)" >&2; exit 1; }

export JAX_PLATFORMS="${JAX_PLATFORMS:-cpu}"
export JAX_ENABLE_X64="${JAX_ENABLE_X64:-1}"
export OMP_NUM_THREADS="${OMP_NUM_THREADS:-1}"

JAXDIR="MonteCarloMarginalizeCode/Code/test/jax"
Expand Down Expand Up @@ -93,6 +94,9 @@ JAXDIR="MonteCarloMarginalizeCode/Code/test/jax"
# result write order) because the defects
# they pin live at call sites, where a
# helper-level assertion cannot see them.
# test_smc_evidence.py 2 the SMC evidence product averages over
# every walker, including zero-likelihood
# walkers, and keeps the all-finite case.
# test_jax_tempering_chooser.py 45 the --adapt-weight-exponent chooser and the
# tempering-cost law
# ESS/N = [beta(2-beta)]^(dim/2) it rests on.
Expand Down Expand Up @@ -509,6 +513,7 @@ FILES=(
"${JAXDIR}/test_jax_time_quadrature.py"
"${JAXDIR}/test_jax_terminal_time_marginalization.py"
"${JAXDIR}/test_jax_likelihood.py"
"${JAXDIR}/test_jax_banded_data_term.py"
"${JAXDIR}/test_jax_endtoend.py"
"${JAXDIR}/test_jax_slowrot_coeffs.py"
"${JAXDIR}/test_jax_slowrot_wrapper.py"
Expand All @@ -518,6 +523,7 @@ FILES=(
"${JAXDIR}/test_nuts_phimarg.py"
"${JAXDIR}/test_jax_av.py"
"${JAXDIR}/test_jax_fairdraw_export.py"
"${JAXDIR}/test_smc_evidence.py"
"${JAXDIR}/test_jax_tempering_chooser.py"
"${JAXDIR}/test_tvals_grid_convention.py"
"${JAXDIR}/test_interp_choices.py"
Expand All @@ -535,6 +541,7 @@ FILES=(
"${JAXDIR}/test_joint_anglemarg_peaklocal.py"
"${JAXDIR}/test_angle_marg_peaklocal_wiring.py"
"${JAXDIR}/test_angle_marg_multipeak_wiring.py"
"${JAXDIR}/test_angle_marg_multipeak_jax.py"
"${JAXDIR}/test_limit_distance_jax.py"
"${JAXDIR}/test_direct_marginalization_planner.py"
"${JAXDIR}/test_time_first_peaklocal.py"
Expand Down Expand Up @@ -1067,7 +1074,14 @@ fi
# three EXPECTED_TESTS= assignments (761, 755, 762; last wins); this is the single one.
# 2026-09-10: +22 value-only AV/portfolio, prior-window, wrapper, and driver
# contract tests in test_jax_av.py.
EXPECTED_TESTS=785
# The multipeak host-side fix (#317) adds two more tests in
# test_angle_marg_multipeak_wiring.py, for 787 tests total.
# The bounded multipeak suite has 53 tests, including real acceptance/AD,
# CLI configuration, invalid guards, and explicit drop/refuse publication.
# 787 + 53 = 840.
# 2026-09-12: +15 compact banded-data contraction value, AD, tile/padding,
# scratch-budget, empty-batch, and graph-size tests. 840 + 15 = 855.
EXPECTED_TESTS=857

echo "== collection floor check (expect >= ${EXPECTED_TESTS} tests) =="
collect_out="$("${PYTHON_BIN}" -m pytest --collect-only -q -p no:cacheprovider "${DESELECT[@]}" "${FILES[@]}" 2>&1)"
Expand Down
11 changes: 11 additions & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
0.0.18.0
------------
development tree is rift_O4d; PRs refer to oshaughn/research-projects-RIT.

** BUG FIX, jax ILE AV/portfolio: production pseudo-pipe controls for the
distance prior, internal sample rate, mode retention, detector cutoffs, PSD
conditioning, and time interpolation are now honored by the JAX driver.
Previously accepted compatibility options could silently change a real-data
likelihood. The AV distance prior now supports Euclidean/volumetric and
``pseudo_cosmo`` and refuses unsupported choices before construction.
- (rc0) O4d base refresh: modern Python/numpy support, portable GPU execution, generic workflow
backends, hyperpipe and simulation-manager support; distance-likelihood export, parsimonious
placement preview, waveform utilities and diagnostics (PRs #129, #132, #135, #143).
Expand All @@ -24,6 +31,10 @@ development tree is rift_O4d; PRs refer to oshaughn/research-projects-RIT.
publication. Extend slow-rotation/finite-size response support and cross-term batching; expand
CPU/JAX regression and CI-roster coverage (fork PRs #214, #245, #247, #255, #268, #270,
#274, #280--#285, #294, #301--#315, #319).
The terminal pseudo-pipe stage now recognizes JAX-ILE's tabular fair-draw
sidecars and joins them to the paired intrinsic likelihood records. It no
longer sends JAX output through the XML-only converter, which could exit
successfully while producing a header-only posterior.

0.0.17.12
---------
Expand Down
Loading
Loading