Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
174 commits
Select commit Hold shift + click to select a range
3655ae6
DRAFT: give the retained set and the export resample separate names
oshaughnessy-junior Aug 14, 2026
346b731
DRAFT review answers: underscore the name, measure the memory, correc…
oshaughnessy-junior Aug 14, 2026
c4baefb
DRAFT: classify the record's own _rvs read in the audit ledger
oshaughnessy-junior Aug 14, 2026
0324ce7
DRAFT: record the A/B decision -- A is the direction, B parked in iss…
oshaughnessy-junior Aug 14, 2026
ea55b92
Option A, step 1: reference the reserve, and migrate the first consumer
oshaughnessy-junior Aug 14, 2026
0f71886
Option A, steps 2 and 3: every consumer asks the record, all seven sa…
oshaughnessy-junior Aug 15, 2026
b775c6d
DRAFT: make the backend divergence visible, since the record does not…
oshaughnessy-junior Aug 15, 2026
937252e
likelihood: add a band-limited (Lanczos) Q-window stencil, opt-in
oshaughnessy-junior Aug 15, 2026
2db91e6
likelihood: wire time_interp='sinc' through the CPU paths, with the g…
oshaughnessy-junior Aug 15, 2026
c9fa0ce
LISA ILE driver: make the fork's drift visible, and port the fair-dra…
oshaughnessy-junior Aug 16, 2026
4e4f305
likelihood: GPU kernel for the band-limited (sinc) Q-window stencil
oshaughnessy-junior Aug 16, 2026
e429267
pipeline: choose the Q_lm stencil from the run's own fNyq/fmax
oshaughnessy-junior Aug 16, 2026
c070e5c
likelihood: drop a per-call device sync in the sinc GPU wrapper
oshaughnessy-junior Aug 16, 2026
739dcbe
LISA ILE driver: port the L0 auto-rescue and its warm-pass state disc…
oshaughnessy-junior Aug 16, 2026
383bd33
docs: replace the estimated sinc cost with the measured one, and drop…
oshaughnessy-junior Aug 16, 2026
8a3b901
test: cover the baseline NoLoop GPU sites, calmarg gating, and run th…
oshaughnessy-junior Aug 16, 2026
840865f
LISA ILE driver: port the portfolio freeze/allocation policy and NF f…
oshaughnessy-junior Aug 16, 2026
4c93afb
test: record that the sinc kernel is architecture-insensitive, and ho…
oshaughnessy-junior Aug 16, 2026
8d58ce8
LISA ILE driver: port AV state persistence, anisotropic bins and the …
oshaughnessy-junior Aug 16, 2026
bfa7774
pipeline: make the stencil threshold backend-dependent
oshaughnessy-junior Aug 16, 2026
fd9319f
pipeline: state which stencil threshold is actually reachable in prod…
oshaughnessy-junior Aug 16, 2026
16e0219
Fix a CRITICAL defect and four unguarded conjuncts found by adversari…
oshaughnessy-junior Aug 16, 2026
a37aae1
Merge branch 'claude/lisa-l0-rescue' into claude/lisa-sampler-plumbing
oshaughnessy-junior Aug 16, 2026
e7fbcd7
Merge branch 'claude/lisa-sampler-plumbing' into claude/lisa-av-state
oshaughnessy-junior Aug 16, 2026
025a884
LISA ILE driver: AV + --internal-use-lnL was a silent no-op
oshaughnessy-junior Aug 16, 2026
959bd65
test: make the GPU tests SKIP rather than silently pass without a GPU
oshaughnessy-junior Aug 16, 2026
69532bb
chore: remove three audit scratch scripts committed by accident
oshaughnessy-junior Aug 16, 2026
1e1635b
chore: untrack study_stencil_lnL_sensitivity.py (swept in by mistake)
oshaughnessy-junior Aug 16, 2026
ff5b47f
pipeline: choose the stencil from the srate the run is ACTUALLY on
oshaughnessy-junior Aug 16, 2026
e4ce91e
docs: the stencil decision does not use `srate` directly any more
oshaughnessy-junior Aug 16, 2026
c1ee897
likelihood: choose the stencil from Q's BANDWIDTH, not fmax; refuse t…
oshaughnessy-junior Aug 16, 2026
acea808
pipeline: remove automatic stencil selection; require an explicit name
oshaughnessy-junior Aug 16, 2026
5e81e6a
misc: PSD-based signal-bandwidth estimator, with a safe fallback
oshaughnessy-junior Aug 16, 2026
0358cad
ILE: make --seed actually reproducible on GPU
oshaughnessy-junior Aug 16, 2026
82aec75
misc: model IMR content, not an approximant's termination; stop claim…
oshaughnessy-junior Aug 16, 2026
139ba32
likelihood: hoist the sinc weight construction out of the CPU window …
oshaughnessy-junior Aug 16, 2026
95bbc14
lalsimutils hlmoft: route TD-only IMRPhenomT/THM through ChooseTDModes
oshaughnessy-junior Aug 16, 2026
7eb1610
tracer_placement: add gp_linmean fit and an optional lnL floor
Aug 16, 2026
a17856f
test: add a pixi environment for the tracer_placement suite
Aug 16, 2026
b0e0f55
Fix consolidated LISA sampler state plumbing
oshaughnessy-junior Aug 16, 2026
0fb14c6
guidance: replace the TaylorT4 table with IMR; the crossover moves 4 …
oshaughnessy-junior Aug 16, 2026
a89069c
Merge remote-tracking branch 'junior/claude/lisa-av-use-lnL' into cla…
oshaughnessy-junior Aug 16, 2026
e886a9e
Merge remote-tracking branch 'junior/rift_O4d' into claude/lisa-drive…
oshaughnessy-junior Aug 16, 2026
a4a8b25
Classify the LISA driver's ported _rvs reads in the fair-draw audit
oshaughnessy-junior Aug 16, 2026
06cdb33
Merge pull request #104 from oshaughnessy-junior/claude/td-dispatch-i…
oshaughn Aug 16, 2026
5a91a4b
review: fix four findings on #97 -- bare flag, honoured-path predicat…
oshaughnessy-junior Aug 16, 2026
a789bc1
test: stop tracking the tracer_placement pixi.lock
Aug 16, 2026
22670b5
helper: drop --internal-ile-srate-internal, which no longer had a con…
oshaughnessy-junior Aug 16, 2026
0b3b8e7
test: make the stencil regressions actually exercise the wiring, not …
oshaughnessy-junior Aug 16, 2026
fef4556
Address self-review of the GPU seeding fix
oshaughnessy-junior Aug 16, 2026
2a7cc00
Drop cdf.png: a pytest artifact swept in by git add -A, not part of t…
oshaughnessy-junior Aug 16, 2026
d35fa1e
tracer_placement: fix four defects found in adversarial review
Aug 16, 2026
a9bbade
simulation_manager: fix dedup silently breaking after archive reopen
Aug 16, 2026
86bf68f
simulation_manager: canonicalize dict lookup_key keys as strings too
Aug 16, 2026
c1a2e2d
Merge pull request #97: band-limited (sinc) Q-window stencil, GPU ker…
oshaughnessy-junior Aug 16, 2026
5f97b21
docs: repair the time_interp docstring spliced during the #97 merge
oshaughnessy-junior Aug 16, 2026
0bdd17a
guidance: the stencil crossover moves with fmin; #97's rule is wrong …
oshaughnessy-junior Aug 16, 2026
4f9c29c
Portfolio construction clobbered opts.sampler_method, silently disabl…
oshaughnessy-junior Aug 16, 2026
f3554c9
Merge remote-tracking branch 'junior/rift_O4d' into claude/lisa-drive…
oshaughnessy-junior Aug 16, 2026
5691b3b
Portfolio member dispatch: elif chain + reject unknown names; classif…
oshaughnessy-junior Aug 16, 2026
9c5bb54
Merge pull request #106 from oshaughnessy-junior/claude/lisa-driver-c…
oshaughnessy-junior Aug 16, 2026
b64329d
LISA ILE driver: port MC-error replicas and replica pooling (driver s…
oshaughnessy-junior Aug 16, 2026
df0fa41
Tests for the LISA MC-error replica path
oshaughnessy-junior Aug 16, 2026
ef2d01c
Address automated review findings for PR #108
Aug 16, 2026
4c70e98
Ledger: record RO's answers to all 11 PHYSICS items (0 remain)
oshaughnessy-junior Aug 16, 2026
3057175
DRAFT: a universal output API, so _rvs can stay internal and return_l…
oshaughnessy-junior Aug 16, 2026
7fb5e3c
Cosmology: one named source via the framework helper, in the MAIN dri…
oshaughnessy-junior Aug 16, 2026
9e8e37a
simulation_manager: canonicalize via a real JSON round-trip
Aug 16, 2026
d5f1c61
DRAFT: consumers call samples(); _rvs_record is private to the sample…
oshaughnessy-junior Aug 16, 2026
1dcabd2
DRAFT: validation plan for the weight-path migration, written BEFORE …
oshaughnessy-junior Aug 16, 2026
b9aa1db
Fix nine findings from the adversarial review of this branch
oshaughnessy-junior Aug 17, 2026
1080290
simulation_manager: normalize lookup_key on the way in, not just at b…
Aug 17, 2026
effcecc
simulation_manager: append-only hook for extra transfer_input_files
Aug 17, 2026
9187eb3
Merge pull request #105 from oshaughnessy-junior/claude/great-newton-…
oshaughn Aug 17, 2026
e6a569c
Merge pull request #108 from oshaughnessy-junior/claude/sinc-docstrin…
oshaughn Aug 17, 2026
554c3f3
docs: drop the limitation this PR discharges, and name the unswept axes
oshaughnessy-junior Aug 17, 2026
5a61afa
simulation_manager: extra transfer_output_files, plus review fixes
Aug 17, 2026
e83dabb
Address automated review findings for PR #110
Aug 17, 2026
7ae8332
Add ASIMOV 0.7 compatibility and PESummary assets
oshaughnessy-junior Aug 17, 2026
6ed3d58
Harden ASIMOV asset and bootstrap contracts
oshaughnessy-junior Aug 17, 2026
9c3e220
simulation_manager: make the transfer guards survive attribute assign…
Aug 17, 2026
45908fa
simulation_manager: guard the read path, not just the write path
Aug 17, 2026
962f359
simulation_manager: make the output-side read check actually symmetric
Aug 17, 2026
cc2ead7
simulation_manager: match protected submit commands case-insensitively
Aug 17, 2026
a035289
simulation_manager: normalize in rebuild_index; validate before writing
Aug 17, 2026
51cb5a0
review: bound the fmin recommendation to what was measured, and recon…
oshaughnessy-junior Aug 17, 2026
0201581
docs: move the investigation record out of the code, into a DESIGN doc
oshaughnessy-junior Aug 17, 2026
3da3775
review: fix ten findings -- the worst rendered the RETRACTED rule to …
oshaughnessy-junior Aug 17, 2026
3ed0909
Merge rift_O4d; keep #108's fixes, drop its now-retracted rule; IMR-d…
oshaughnessy-junior Aug 17, 2026
8d4992d
Merge pull request #109 from oshaughnessy-junior/claude/stencil-fmin-…
oshaughnessy-junior Aug 17, 2026
f00a60a
Address automated review findings for PR #103
Aug 17, 2026
fbf3e74
Merge PR #111: append-only transfer hooks for DualCondorRunQueue
oshaughnessy-junior Aug 17, 2026
99dab13
Merge rift_O4d (with #111) into the lookup_key normalization branch
Aug 17, 2026
68eb23d
Merge PR #107: lookup_key JSON contract and dedup-across-reopen fix
oshaughnessy-junior Aug 17, 2026
52bb718
followup: repair the study script I broke, and a guard that could not…
oshaughnessy-junior Aug 17, 2026
4884388
Merge remote-tracking branch 'junior/rift_O4d' into rift_O4d_gpu_seed…
oshaughnessy-junior Aug 17, 2026
bb981f9
test_slowrot_pathB_bruteforce: opt-in JSON output, for the INFL onset…
oshaughnessy-junior Aug 15, 2026
277941b
test_slowrot_pathB_bruteforce: TINTERP / SRATE / FMAXHZ knobs
oshaughnessy-junior Aug 15, 2026
9771646
test_slowrot_pathB_bruteforce: SEGLEN/FMINHZ/EDGE knobs + peak-oversh…
oshaughnessy-junior Aug 15, 2026
b89ee02
test_slowrot_pathB_bruteforce: APPROX knob; the merger placement is t…
oshaughnessy-junior Aug 15, 2026
38213d3
test_slowrot_pathB_bruteforce: anchor Omega*T to the SIGNAL, not the …
oshaughnessy-junior Aug 15, 2026
c42e6ea
test_slowrot_pathB_bruteforce: band-limited peak estimator (exact, no…
oshaughnessy-junior Aug 15, 2026
cf74f6c
test_slowrot_pathB_bruteforce: gwsignal path, for SEOBNRv5PHM + lmax_…
oshaughnessy-junior Aug 16, 2026
cf3d51a
test_slowrot_pathB_bruteforce: gwsignal/v5 path, diagnostics, and a c…
oshaughnessy-junior Aug 16, 2026
dd759c0
followup: a "fix" in this very PR had silently no-opped -- the lesson…
oshaughnessy-junior Aug 17, 2026
3f930c5
lisa drift ledger: classify _cal_rng (NA), fixing lisa-check
oshaughnessy-junior Aug 17, 2026
d1fcb12
Merge pull request #103 from oshaughnessy-junior/rift_O4d_gpu_seed_re…
oshaughnessy-junior Aug 17, 2026
36a0daf
followup: one shared skip path, and empty runs stop reporting success
oshaughnessy-junior Aug 17, 2026
a7284dd
slowrot: make the NoLoop brute-force reference convention-free
oshaughnessy-junior Aug 17, 2026
e74152f
slowrot: restore the arrival-time post-phase; lnL was exceeding 0.5<d|d>
oshaughnessy-junior Aug 17, 2026
fa8f84b
DRAFT: migrate the weight path to rec.log_weights(), validated per th…
oshaughnessy-junior Aug 17, 2026
fce2af2
followup: the third mode still swallowed a typo -- validate once, bef…
oshaughnessy-junior Aug 17, 2026
a5ea707
seeding: close the remaining unseeded-RNG sites reachable under --seed
oshaughnessy-junior Aug 17, 2026
177262a
Merge pull request #115 from oshaughnessy-junior/claude/stencil-follo…
oshaughnessy-junior Aug 17, 2026
6f94e44
Address automated review findings for PR #110
Aug 17, 2026
da91c9d
Merge pull request #110 from oshaughnessy-junior/claude/lisa-mc-error…
oshaughn Aug 18, 2026
9359a2f
review: fix 6 findings from an adversarial pass, one of them a droppe…
oshaughnessy-junior Aug 18, 2026
9649c3c
DRAFT: make the lnZ and Kish estimators record-aware, through one sha…
oshaughnessy-junior Aug 18, 2026
af11517
Merge pull request #119 from oshaughnessy-junior/claude/seed-followup
oshaughn Aug 18, 2026
a177eed
seeding: one counter registry, not two -- fold _cal_rng into next_der…
oshaughnessy-junior Aug 17, 2026
64b92dd
Merge pull request #127 from oshaughnessy-junior/claude/cal-rng-fold
oshaughn Aug 18, 2026
16009d2
slowrot: mark the jax_ile rotation gap; scope this PR to the NoLoop +…
oshaughnessy-junior Aug 18, 2026
136ad2f
slowrot: record the jax_ile gap in the handoff's validation status
oshaughnessy-junior Aug 18, 2026
49339b9
Add ASIMOV 0.7 integration lane
oshaughn Aug 18, 2026
63b5006
DRAFT: thread per-replica records into pooling, marked INTERNAL so th…
oshaughnessy-junior Aug 18, 2026
1fe9ccb
jax_ile: port the slow-rotation arrival-time post-phase (closes #131)
oshaughnessy-junior Aug 18, 2026
36ec85a
Merge pull request #112 from oshaughnessy-junior/agent/asimov-070-com…
oshaughnessy-junior Aug 18, 2026
89562a4
slowrot: correct a mis-annotated jax_ile site -- the baseline accumul…
oshaughnessy-junior Aug 18, 2026
41a7d6f
jax_ile slowrot post-phase: Path B coverage, exact nearest sample, me…
oshaughnessy-junior Aug 18, 2026
1a210f9
tier 3: full GPU ILE run, base vs candidate, 300 runs
claude Aug 18, 2026
6c45a8f
Merge the jax_ile post-phase port (#132) into the post-phase fix
oshaughnessy-junior Aug 18, 2026
2bca84a
Merge rift_O4d into claude/rvs-record-naming
claude Aug 18, 2026
ad9d409
test/jax: compare the JAX and numpy likelihoods on the SAME time grid
oshaughnessy-junior Aug 18, 2026
3275bea
LISA driver: carry the record accessors across, and wire test_rvs_rec…
claude Aug 18, 2026
9f8ddcb
Drop the DRAFT markers: this is the implementation, not a proposal
claude Aug 18, 2026
f03dea9
simulation_manager: make the OOM hold policy an argument, not a constant
Aug 18, 2026
1710e13
Review: make the LISA pooling path record-less on purpose, not by acc…
claude Aug 18, 2026
c9dae2b
Re-validate against the new base: tier 0 bit-identical, tier 3 to rou…
claude Aug 18, 2026
1fa3b48
test/jax: address the adversarial review of this PR
oshaughnessy-junior Aug 18, 2026
6166cf0
Address automated review findings for PR #117
Aug 18, 2026
e1f11fe
simulation_manager: fix the review findings on the OOM policy arguments
Aug 18, 2026
dbf93dd
Merge pull request #117 from oshaughnessy-junior/claude/slowrot-cauch…
oshaughnessy-junior Aug 18, 2026
98becce
Merge pull request #144 from oshaughnessy-junior/claude/jax-endtoend-fix
oshaughn Aug 18, 2026
3655c56
Address automated review findings for PR #116
Aug 18, 2026
88959ef
Merge pull request #116 from oshaughnessy-junior/claude/slowrot-brute…
oshaughn Aug 18, 2026
371dfa7
SLOWROT_HANDOFF: retract the catastrophic-cancellation and resolution…
oshaughnessy-junior Aug 18, 2026
68a2d0a
slowrot: the precompute must carry every harmonic the response coeffi…
oshaughnessy-junior Aug 18, 2026
f53962a
ci: run test/jax/ (jax_ile) with a pinned floor on the collected test…
oshaughnessy-junior Aug 18, 2026
26df38a
CI: harden the jax gate against green-while-broken (adversarial revie…
oshaughnessy-junior Aug 18, 2026
7ecf10e
test/jax: track the harmonic widening from #142; scope the p_max=1 bo…
oshaughnessy-junior Aug 18, 2026
2b1e1ab
Merge pull request #151 from oshaughnessy-junior/claude/jax-ci
oshaughn Aug 18, 2026
58d16d7
Address automated review findings for PR #138
Aug 18, 2026
a69e973
Address automated review findings for PR #94
Aug 18, 2026
78b4573
Merge pull request #138 from oshaughnessy-junior/feat/extra-periodic-…
oshaughn Aug 18, 2026
c7941ff
Address automated review findings for PR #94
Aug 18, 2026
76c4ac2
tvals: one window-grid constructor for both ILE drivers (issue #146)
oshaughnessy-junior Aug 19, 2026
ba2f426
Address automated review findings for PR #94
Aug 19, 2026
93bf47c
Address adversarial review of the tvals grid fix
oshaughnessy-junior Aug 19, 2026
5a40c8c
Merge pull request #162 from oshaughnessy-junior/claude/tvals-grid-unify
oshaughn Aug 19, 2026
07a5531
Address automated review findings for PR #94
Aug 19, 2026
d2e05aa
Merge pull request #94 from oshaughnessy-junior/claude/rvs-record-naming
oshaughn Aug 19, 2026
bac1c81
slowrot: fix the Nyquist bin of the FD derivative weight; restore the…
oshaughnessy-junior Aug 19, 2026
54e759e
Merge pull request #163 from oshaughnessy-junior/claude/slowrot-cs-pm…
oshaughn Aug 19, 2026
3175b2a
slowrot Path D: make the response weights Hermitian at the unpaired N…
oshaughnessy-junior Aug 19, 2026
081d52c
Merge pull request #165 from oshaughnessy-junior/claude/slowrot-freqr…
oshaughn Aug 19, 2026
1fe4768
slowrot: gate the numpy slow-rotation suite in CI (issue #169)
oshaughnessy-junior Aug 19, 2026
ef36077
slowrot: apply the adversarial review of this PR (F1-F8)
oshaughnessy-junior Aug 19, 2026
0ff16db
slowrot_freqresponse: distil the Nyquist docstrings; route the eviden…
oshaughnessy-junior Aug 19, 2026
7e847c7
slowrot: route the gate's records instead of patching them again
oshaughnessy-junior Aug 20, 2026
f914236
Merge pull request #171 from oshaughnessy-junior/claude/slowrot-recor…
oshaughn Aug 20, 2026
d73b8a1
slowrot: the cleanup asserted a gating path this gate does not have
oshaughnessy-junior Aug 20, 2026
61d53c6
slowrot: gate the Nyquist parity guard in CI; stop config_for guessin…
oshaughnessy-junior Aug 20, 2026
05ece91
Merge rift_O4d (#166, #171): drop the duplicate fd_ops line, raise th…
oshaughnessy-junior Aug 20, 2026
4c1da52
Merge pull request #172 from oshaughnessy-junior/claude/slowrot-ci-gate
oshaughn Aug 20, 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
182 changes: 180 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,170 @@ jobs:
run: |
python -m pytest -q \
MonteCarloMarginalizeCode/Code/test/expensive_before_merging/integrators/test_probe_confirm.py \
MonteCarloMarginalizeCode/Code/test/test_cip_priors.py
MonteCarloMarginalizeCode/Code/test/test_cip_priors.py \
MonteCarloMarginalizeCode/Code/test/test_cosmology_single_source.py

q-window-stencil-check:
needs: install
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.10'
cache: 'pip'
cache-dependency-path: requirements.txt
- name: Enable symlink
run: sudo ln -sf $(which python3) /usr/bin/python
- name: Install dependencies
run: |
python -m pip install --upgrade pip --break-system-packages
python -m pip install -r requirements.txt --break-system-packages
python -m pip install coverage pytest --break-system-packages
python -m pip install --editable . --break-system-packages
- name: Run Q_lm sub-sample stencil accuracy and selection gates
# numpy-only, runs in seconds, but it guards a CORE LIKELIHOOD choice that fails
# SILENTLY: picking the wrong sub-sample stencil raises nothing, it just makes Q_lm(t)
# less accurate, which surfaces only as a slightly wrong likelihood surface.
#
# test_q_window_interp asserts the cubic/sinc crossover in BOTH directions on purpose.
# sinc winning everywhere would mean the Lanczos window had been widened until it was no
# longer a local stencil, so neither direction may be relaxed to make a change pass.
# test_time_interp_choice pins the pipeline thresholds inside the measured ambiguous
# band, and checks the decision uses the sampling rate the run is actually on.
#
# test_calmarg_stencil_gating runs its CPU arms without a GPU (its GPU arm is additive),
# so it belongs here: it is what stops cubic/sinc being routed to the fused calibration
# kernel, which is implemented for 'nearest' only.
#
# test_interpolate_time_cli runs the three scripts as real SUBPROCESSES (~30 s). That
# cost is the point: the unit tests exercise the resolver and the gate predicate, but
# neither can see whether the SCRIPTS are still wired to them. Reverting a parser to
# const=None, or deleting a script's resolver call, leaves every unit test green while
# restoring a bare flag that silently does nothing. All three mutations were checked to
# fail these tests before they landed.
#
# The GPU parity files (test_q_window_interp_gpu, test_noloop_gpu_stencils) are
# deliberately NOT here -- there is no GPU on these runners, and they would report as
# skipped. They are run by hand on a GPU node; the numbers are in PR #97.
#
# test_slowrot_* files do NOT belong here. They are gated by slowrot-check, whose
# manifest requires every test_slowrot_*.py in this directory to be listed or
# explicitly excluded; a copy in this job's list is invisible to that manifest and
# would simply run the file twice (issue #169).
run: |
python -m pytest -q \
MonteCarloMarginalizeCode/Code/RIFT/likelihood/test_q_window_interp.py \
MonteCarloMarginalizeCode/Code/RIFT/likelihood/test_time_interp_choice.py \
MonteCarloMarginalizeCode/Code/RIFT/likelihood/test_calmarg_stencil_gating.py \
MonteCarloMarginalizeCode/Code/RIFT/misc/test_psd_bandwidth.py \
MonteCarloMarginalizeCode/Code/RIFT/likelihood/test_interpolate_time_cli.py

slowrot-check:
needs: install
runs-on: ubuntu-latest
# RIFT/likelihood/test_slowrot_*.py was run by NOTHING in this workflow until this
# job landed: `grep -rn slowrot .github/workflows/ci.yml` returned a single hit and
# it was a comment (issue #169). That gap is worse than an ordinary one, because
# the two most recent changes to this code are changes whose DELIVERABLE IS THE
# GUARD -- #163 (the Nyquist derivative weight at both parities) and #165 (the
# Hermitian Nyquist response weight, which provably moves no number). Neither
# leaves anything behind if its guard never runs.
#
# See .travis/test-slowrot.sh for why the gate counts tests and runs three files
# outside pytest: five test_slowrot_*.py files collect ZERO items and exit 5, "no
# tests ran", which reads as a pass, and three of those five carry asserts pytest
# cannot count.
#
# SEPARATE FROM jax-ile-check ON PURPOSE. This suite is numpy + lal: no GPU, no
# jax, no numpyro. Folding it into the jax gate would put a 1-2 minute numpy
# regression behind that job's jax/numpyro install and its ~5-15 minute run, and
# would couple a numpy failure's diagnosis to an unpinned upstream jax release.
# Python 3.10 to match the sibling numpy jobs, NOT the 3.11 jax-ile-check needs.
#
# timeout-minutes is a runaway backstop, not a budget: it is more than an order of
# magnitude above the observed job wall. Measured cost, and the host-by-host numbers
# behind it, are in PR #172 (2026-08) -- deliberately not restated here, because a
# wall-clock table in a comment rots silently and nothing imports it.
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.10'
cache: 'pip'
cache-dependency-path: requirements.txt
- name: Enable symlink
run: sudo ln -sf $(which python3) /usr/bin/python
- name: Install dependencies
run: |
python -m pip install --upgrade pip --break-system-packages
python -m pip install -r requirements.txt --break-system-packages
python -m pip install coverage pytest --break-system-packages
python -m pip install --editable . --break-system-packages
- name: Run slow-rotation / finite-size CPU regression gate
env:
OMP_NUM_THREADS: 1
run: bash .travis/test-slowrot.sh

jax-ile-check:
needs: install
runs-on: ubuntu-latest
# test/jax/ was run by NOTHING in this workflow until this job landed (the file had
# zero matches for "jax"), and two real defects survived a month each behind that
# gap. See .travis/test-jax.sh for why the gate counts tests instead of just
# invoking pytest: most files in test/jax/ are __main__ scripts, and pytest exits 5
# ("no tests ran") on those -- a green tick over an empty run.
#
# Python 3.11 rather than the 3.10 used by the sibling jobs: current jax wheels
# require >=3.11. jax/numpyro are installed UNPINNED and deliberately so (CI should
# see what a user gets). NOTE: RIFT.likelihood.jax_ile declares its dependencies
# NOWHERE in setup.py -- extras_require['jax-apps'] is for RIFT.interpolators.jax_gp
# and lists a different set -- so this job is their de-facto declaration. An
# extras_require['jax-ile'] would be the right home for them
# and means a breaking upstream jax release can redden this job outside any PR's
# control. If that becomes noisy, pin here rather than deleting the job.
#
# Cost. CURRENT (EXPECTED_TESTS=27 in .travis/test-jax.sh): 27 tests, measured
# 578-834 s of pytest across repeat runs on quiet CPU nodes (ldas-pcdev11/13, jax
# 0.9.2, JAX_PLATFORMS=cpu, JAX_ENABLE_X64=1, OMP_NUM_THREADS=1).
# test_jax_slowrot.py dominates (the p_max=0/p_max=1 rotation ladders and
# freqresponse, each followed by the AD/jit/vmap/hessian checks); it is the first
# thing to trim if CI minutes ever bite. timeout-minutes is generous so a slower
# runner does not flake, but a hang still ends.
#
# HISTORICAL, and left here only as a runner-vs-local calibration: when this job
# collected 14 tests it measured 964 s wall locally and ran 14 passed in 285.96 s on
# the actual runner (job 95750869285, python 3.11.15, jax 0.10.2, numpyro 0.21.0) --
# ~10x headroom, with the unpinned install already a jax minor version ahead of the
# 0.9.2 measured locally. Do NOT read the 14 as a current count; the file list has
# grown since and the gate asserts 27.
timeout-minutes: 60
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
cache: 'pip'
cache-dependency-path: requirements.txt
- name: Enable symlink
run: sudo ln -sf $(which python3) /usr/bin/python
- name: Install dependencies and the CPU JAX stack
# ONE pip invocation on purpose: pip does not co-resolve across invocations, so
# installing jax separately lets a jax-driven numpy bump past numba's ceiling land
# as a dependency-conflict WARNING with exit 0, and surface later as a collection
# error (factored_likelihood imports numba) that looks like a RIFT bug.
# numpyro is needed by test_nuts_phimarg (the NUTS phase-marginalized sampler).
# flowMC is deliberately NOT installed -- see test-jax.sh for the exclusions.
run: |
python -m pip install --upgrade pip --break-system-packages
python -m pip install -r requirements.txt coverage pytest "jax[cpu]" numpyro --break-system-packages
python -m pip install --editable . --break-system-packages
- name: Run jax_ile CPU regression gate
env:
JAX_PLATFORMS: cpu
OMP_NUM_THREADS: 1
run: bash .travis/test-jax.sh

lisa-check:
needs: install
Expand Down Expand Up @@ -279,6 +442,8 @@ jobs:
include:
- asimov-series: '0.5'
asimov-spec: 'asimov>=0.5,<0.6'
- asimov-series: '0.7'
asimov-spec: 'asimov>=0.7,<0.8'
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
Expand All @@ -299,6 +464,9 @@ jobs:
python -m pip install htcondor --only-binary=:all: --break-system-packages
- name: Install Asimov
run: python -m pip install '${{ matrix.asimov-spec }}' 'asimov-gwdata>=0.4,<0.5' --break-system-packages
- name: Install Asimov 0.7 pipeline plugins
if: matrix.asimov-series == '0.7'
run: python -m pip install 'asimov-bayeswave>=0.2,<0.3' 'pe-configurator>=1,<2' --break-system-packages
- name: Run Asimov integration test
run: bash .travis/test-asimov.sh

Expand Down Expand Up @@ -370,7 +538,8 @@ jobs:
MonteCarloMarginalizeCode/Code/test/test_l0_rescue_seed.py \
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_portfolio_fairdraw_backend.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
# separate defects have come from a consumer reading it afterwards as though it were
Expand All @@ -380,6 +549,15 @@ jobs:
# whoever happens to edit the surrounding code.
run: |
python MonteCarloMarginalizeCode/Code/test/expensive_before_merging/integrators/audit_rvs_fairdraw.py --check
- name: Audit sampler backend contracts
# (DESIGN_rvs_naming.md) The backends are structurally different in ways
# nothing states -- _rvs['integrand'] holds lnL on three of them, linear L on two, and
# EITHER on mcsamplerEnsemble depending on a kwarg -- and a consumer that guesses wrong
# gets a plausible number rather than an error. This does not forbid the differences;
# it fails when one CHANGES without the recorded table changing with it, so the next
# developer meets a diff instead of a landmine.
run: |
python MonteCarloMarginalizeCode/Code/test/expensive_before_merging/integrators/audit_backend_contracts.py --check
- name: Run test scripts
run: |
. .travis/test-coord.sh
Expand Down
7 changes: 3 additions & 4 deletions .travis/test-asimov.sh
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
#! /bin/bash
set -euo pipefail

# The RIFT Asimov plugin is currently developed and validated against the
# Asimov 0.5 series. This test skips cleanly for unsupported/future series
# from inside pytest, so developers can preflight 0.6/0.7 environments without
# editing the test.
# The RIFT Asimov plugin is validated against the legacy 0.5 series and the
# plugin-based 0.7 series. Unsupported API series skip cleanly in pytest.
# Bootstrap-source selection ("scheduler: bootstrap file:") is driven against a stub
# production rather than a project on disk, so it lives outside asimov_integration/.
# It still needs asimov importable, and this is the only lane that installs it, so run
# it here: otherwise the suite is never invoked and the behaviour can regress while the
# required checks stay green.
python -m pytest -q \
MonteCarloMarginalizeCode/Code/test/asimov_integration \
MonteCarloMarginalizeCode/Code/test/test_asimov_compatibility.py \
MonteCarloMarginalizeCode/Code/test/test_asimov_bootstrap_source.py
Loading
Loading