Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
333 commits
Select commit Hold shift + click to select a range
a00c712
MultiApprox: cross-model marginalization on a shared grid
oshaughn Aug 27, 2026
ccbc9de
pseudo_pipe drives cross-approximant runs
oshaughn Aug 27, 2026
a35db05
jax_ile: exact (phi_ref,psi) marginalization schemes + selector (WIP:…
oshaughnessy-junior Aug 27, 2026
04beb6d
pseudo_pipe: four bugs found by actually running a synthetic-injectio…
oshaughn Aug 27, 2026
8e1fbfa
Merge pull request #174 from oshaughnessy-junior/feat/container-universe
oshaughn Aug 27, 2026
4d62e70
jax angle-marg: gate registration, calibration ladder, kernel pins, m…
oshaughnessy-junior Aug 27, 2026
3efdbf3
Address three P1 findings from adversarial review of #200
oshaughn Aug 27, 2026
2e32e48
test: count DAGs, not everything condor_submit_dag leaves beside them
Aug 27, 2026
6600060
anglemarg: fix the two external-review defects (root enumeration; dat…
oshaughnessy-junior Aug 27, 2026
5d3f9c2
gate: recount EXPECTED_TESTS 163 -> 168 by collection; ledger 24 -> 2…
oshaughnessy-junior Aug 27, 2026
cd9799f
anglemarg: second-review fixes -- branch-window blend, hardened AST g…
oshaughnessy-junior Aug 27, 2026
5906206
anglemarg: estimator reconstruction grid derived from mode content an…
oshaughnessy-junior Aug 27, 2026
d76cfad
gate: recount EXPECTED_TESTS 168 -> 169 (branch-window pin); ledger u…
oshaughnessy-junior Aug 27, 2026
d8dcf44
The generator route is per MODEL, not per run
oshaughn Aug 27, 2026
7fb34d5
checkpoint: band-limited time marginalization (pre-mutation-sweep)
oshaughnessy-junior Aug 27, 2026
8819a76
Time marginalization: derive the time grid from the integrand, not fr…
oshaughnessy-junior Aug 28, 2026
dae4fe6
anglemarg: third-review fixes -- m_max in the final quadrature, local…
oshaughnessy-junior Aug 28, 2026
8c87fc9
A row's value changes if and only if it was under-resolved
oshaughnessy-junior Aug 28, 2026
fd28eab
gate: move the two angle-marg VALIDATION tests out of the per-PR gate
oshaughnessy-junior Aug 28, 2026
34e3940
anglemarg: fail closed on undersizing; re-gate the m_max regression; …
oshaughnessy-junior Aug 28, 2026
268212e
Adversarial review fixes: odd-npts FFT split, GPU crash, and three fa…
oshaughnessy-junior Aug 28, 2026
a9def2c
anglemarg: label an undersized grid, do not NaN-poison and do not abort
oshaughnessy-junior Aug 28, 2026
102795f
Correct two overclaims in the docs, and add a collected-count guard
oshaughnessy-junior Aug 28, 2026
ba23ce7
DESIGN note: the measured record behind the quadrature, and the peak-…
oshaughnessy-junior Aug 28, 2026
3ba68be
Close the coverage holes an independent mutation sweep found
oshaughnessy-junior Aug 28, 2026
172fa5e
Two of my own new tests were imprecise; a re-run sweep caught both
oshaughnessy-junior Aug 28, 2026
6f37e16
anglemarg: label the EVIDENCE artifact too; cond-guard and barrier th…
oshaughnessy-junior Aug 28, 2026
45a9718
gate: exclude the angle-marg VALIDATION suite; keep the one test that…
oshaughnessy-junior Aug 28, 2026
29e5a02
Condor macros must never reach a shell script (third instance)
oshaughn Aug 28, 2026
65e9fff
Chunking cannot change the answer BEYOND floating-point reassociation
oshaughnessy-junior Aug 28, 2026
716d72d
Merge pull request #202 from oshaughnessy-junior/fix/dag-test-counts-…
oshaughn Aug 28, 2026
298558b
gate: restore mutation-bearing coverage of the angle-marg feature
oshaughnessy-junior Aug 28, 2026
97fe348
anglemarg: the standing label was INERT; smoke tests now execute both…
oshaughnessy-junior Aug 28, 2026
aeda7df
tests: state the Laplace coverage limit instead of overclaiming
oshaughnessy-junior Aug 28, 2026
273eb84
Classify --time-marginalization-quadrature in the LISA drift ledger
oshaughnessy-junior Aug 28, 2026
5ef3ca1
Merge pull request #201 from oshaughnessy-junior/claude/jax-exact-ang…
oshaughnessy-junior Aug 28, 2026
5fcfe9d
Address two P1 findings: route forwarding and coverage against the co…
oshaughn Aug 28, 2026
09b0213
jax_ile: band-limited time marginalization (opt-in), fixing an SNR-de…
oshaughnessy-junior Aug 28, 2026
104a629
Merge junior/rift_O4d (PR #201) into the JAX time-quadrature branch
oshaughnessy-junior Aug 28, 2026
3b40e99
LISA likelihood: stop dispatching host arrays to the cupy backend
oshaughnessy-junior Aug 28, 2026
ce8213d
anglemarg: roll the laplace path's unrolled loops into lax.scan/fori_…
oshaughnessy-junior Aug 28, 2026
1bcad19
The puffball read a filename nothing produces, so it never ran
oshaughn Aug 28, 2026
c5b81dd
anglemarg: cap the batched-eval chunk for anglemarg schemes (executio…
oshaughnessy-junior Aug 28, 2026
543679e
anglemarg: dispatch the laplace kernel per block; only the needed bra…
oshaughnessy-junior Aug 28, 2026
fbc8152
tests: pin the block-dispatch structure (ladder contract, per-branch …
oshaughnessy-junior Aug 28, 2026
b88f347
Merge pull request #207 from oshaughnessy-junior/claude/lisa-gpu-xpy-fix
oshaughn Aug 28, 2026
75382db
The skip guard must IDENTIFY, not count
oshaughnessy-junior Aug 28, 2026
761e579
Fix ChooseFDModes J-to-L frame rotation
oshaughn Aug 28, 2026
f9634df
Merge pull request #211 from oshaughnessy-junior/fix/xphm-fd-lframe-p…
oshaughnessy-junior Aug 28, 2026
81f2c7a
Address automated review findings for PR #208
Aug 28, 2026
3dcfb1c
Address automated review findings for PR #208
Aug 29, 2026
4573820
Fix remaining multi-approximant workflow failures
oshaughn Aug 29, 2026
d7456fc
Bound terminal extrinsic exports with fair draws
oshaughn Aug 29, 2026
56cca77
Merge pull request #208 from oshaughnessy-junior/claude/jax-tmarg-fft
oshaughn Aug 29, 2026
bea86a9
Merge remote-tracking branch 'junior/rift_O4d' into claude/anglemarg-…
oshaughnessy-junior Aug 29, 2026
f878184
anglemarg: close adversarial memory-cap and test gaps
oshaughnessy-junior Aug 29, 2026
8bcb583
test: pin odd-tail distance weights independently
oshaughnessy-junior Aug 29, 2026
7fcafae
Harden multi-approximant terminal marginalization
oshaughn Aug 29, 2026
e08ebc5
Classify fairdraw serialization in LISA drift ledger
oshaughn Aug 29, 2026
2f5e465
Merge pull request #200 from oshaughnessy-junior/claude/multiapprox-m…
oshaughnessy-junior Aug 29, 2026
0e6869d
anglemarg: preserve mixed-shape broadcast through rolled scan
oshaughnessy-junior Aug 29, 2026
a3ba47d
anglemarg: preserve broadcast axes across root slots
oshaughnessy-junior Aug 29, 2026
45f6c2f
Merge pull request #209 from oshaughnessy-junior/claude/anglemarg-com…
oshaughn Aug 29, 2026
01ba640
Merge PR209 and preserve anglemarg broadcasting
oshaughnessy-junior Aug 29, 2026
3748344
Merge pull request #210 from oshaughnessy-junior/claude/anglemarg-exe…
oshaughnessy-junior Aug 29, 2026
e4ed25c
Avoid Gibbs ringing in time marginalization
oshaughn Aug 29, 2026
0ef906f
Merge pull request #203 from oshaughnessy-junior/rift_O4d_tmarg_bandl…
oshaughnessy-junior Aug 29, 2026
00a3a92
Pipeline passthrough for --time-marginalization-quadrature, refused a…
oshaughnessy-junior Aug 28, 2026
ede6f74
Key the quadrature guard on the emitted bytes, and correct the GPU co…
oshaughnessy-junior Aug 28, 2026
80ef3c0
Harden pipeline guard after stacked rebase
oshaughn Aug 29, 2026
146307c
Merge pull request #206 from oshaughnessy-junior/rift_O4d_tmarg_pipeline
oshaughnessy-junior Aug 29, 2026
15612d6
Export continuous times with sub-sample interpolation
oshaughnessy-junior Aug 29, 2026
611766f
Apply continuous time export to LISA twin
oshaughnessy-junior Aug 29, 2026
693edde
jax ile: adaptively refine terminal time marginalization
oshaughnessy-junior Aug 29, 2026
bdb596c
jax ile: refine primitive time fields safely
oshaughnessy-junior Aug 29, 2026
4465aef
jax ile: use endpoint-safe even extension
oshaughnessy-junior Aug 29, 2026
ec5ec5a
jax ile: fail closed on time-window boundaries
oshaughnessy-junior Aug 29, 2026
9c81db5
jax ile: certify guarded primitive interpolation
oshaughnessy-junior Aug 29, 2026
9f323cb
jax ile: provision certified time support
oshaughnessy-junior Aug 29, 2026
3fe7bbb
jax ile: use Earth-scale delay support
oshaughnessy-junior Aug 29, 2026
8b94657
jax ile: validate banded time support
oshaughnessy-junior Aug 29, 2026
19b856e
Keep terminal multi-approx branch reachable after convergence
oshaughn Aug 29, 2026
ca30121
Size terminal intrinsic grids for scheduled extraction
oshaughn Aug 29, 2026
4c4e18d
Harden continuous time posterior sampling
oshaughnessy-junior Aug 29, 2026
af15317
Fix JAX quadrature CI compatibility
oshaughnessy-junior Aug 29, 2026
7e078f7
Sample the selected continuous time likelihood
oshaughnessy-junior Aug 29, 2026
dfbef32
Evaluate selected time stencil on refined grid
oshaughnessy-junior Aug 29, 2026
908a697
Merge pull request #218 from oshaughnessy-junior/fix/multiapprox-term…
oshaughnessy-junior Aug 29, 2026
0cb94b0
Fail closed on unsafe continuous time exports
oshaughnessy-junior Aug 29, 2026
36c6bf3
Bound explicit time interpolation memory
oshaughnessy-junior Aug 29, 2026
a1799c0
Merge remote-tracking branch 'junior/rift_O4d' into codex/continuous-…
oshaughnessy-junior Aug 29, 2026
2a97b5f
Merge pull request #216 from oshaughnessy-junior/codex/rift_O4d-jax-a…
oshaughnessy-junior Aug 29, 2026
186813a
Preserve LISA grid export in auto mode
oshaughn Aug 29, 2026
115efe0
Harden continuous export provenance and endpoints
oshaughn Aug 29, 2026
ad96534
Merge pull request #215 from oshaughnessy-junior/codex/continuous-tim…
oshaughnessy-junior Aug 29, 2026
d86eb6c
Export continuous draws from bandlimited time posterior
oshaughn Aug 29, 2026
2b861f1
Harden cross-ILE time export CLI compatibility
oshaughn Aug 30, 2026
77cd96a
Fix rebased time-marginalization gate count
oshaughn Aug 30, 2026
276863b
Refresh LISA drift ledger after time option port
oshaughn Aug 30, 2026
78507e2
calibration: resolve container-family fallback
oshaughnessy-junior Aug 30, 2026
8aad33a
Merge pull request #217 from oshaughnessy-junior/rift_O4d_tmarg_conti…
oshaughnessy-junior Aug 30, 2026
5243319
Merge pull request #219 from oshaughnessy-junior/codex/calib-containe…
oshaughnessy-junior Aug 30, 2026
2908888
Make two helpers reusable, and name the third quadrature
oshaughnessy-junior Aug 28, 2026
02770be
Peak-local time marginalization: enumerate the peaks, integrate only …
oshaughnessy-junior Aug 28, 2026
985b6ce
Chunking moves the last bits: correct the claim, and pin the real bar
oshaughnessy-junior Aug 28, 2026
546c1d3
Fix a critical bias: build the interval around the CREST, not the gri…
oshaughnessy-junior Aug 28, 2026
4643915
wip: G-fixes + test batch (pre-sweep checkpoint)
oshaughnessy-junior Aug 28, 2026
14045a7
The quantisation defect was a CLASS: fix every consumer of the enumer…
oshaughnessy-junior Aug 28, 2026
66e111d
Close Door 1 (the vertex is not the crest either) and Door 2 (ends de…
oshaughnessy-junior Aug 28, 2026
34f679c
Rebase onto rift_O4d: the reconstruction changed underneath this module
oshaughnessy-junior Aug 31, 2026
0e35a7a
Make the two rules share one row classification instead of agreeing b…
oshaughnessy-junior Aug 31, 2026
fa1dd68
Record round 5 in the design note, and re-measure the residual it cha…
oshaughnessy-junior Aug 31, 2026
004dcda
Door 4: the pre-filter's "upper bound" was not one, and cost -1849 nats
oshaughnessy-junior Aug 31, 2026
2395cde
Record round 6 in the design note
oshaughnessy-junior Aug 31, 2026
e03dde9
Door 5: a crest pinned at a window end is not a peak, and cost +4.38 …
oshaughnessy-junior Aug 31, 2026
32b33cf
Record round 7 in the design note
oshaughnessy-junior Aug 31, 2026
b88735c
Record round 8: the first independent YES on the quantisation class
oshaughnessy-junior Sep 1, 2026
66ee5ea
jax_ile: better-conditioned log-uniform distance quadrature (opt-in, …
oshaughn Aug 31, 2026
3929088
Re-run the mutation sweep against the current code, and close the gap…
oshaughnessy-junior Sep 1, 2026
5f1bc3f
The ceiling bounds the dense grid, and the Laplace model is for targe…
oshaughnessy-junior Sep 1, 2026
06ad323
ILE: --limit-distance, a sampling-only distance box (batchmode)
oshaughnessy-junior Sep 1, 2026
6866878
A real-data run: peak-local and bandlimited are byte-identical end to…
oshaughnessy-junior Sep 1, 2026
1769045
JAX ILE: --limit-distance on the differentiable arm
oshaughnessy-junior Sep 1, 2026
4d9772c
Answer the P1 on q_out_max with measurements, and drop the DRAFT marker
oshaughnessy-junior Sep 1, 2026
3b7eec3
Address automated review findings for PR #205
Sep 1, 2026
2085ac9
P1: evaluate the outside supremum off-grid instead of sampling near it
oshaughnessy-junior Sep 2, 2026
557eb45
The tail margin on a clean row is a design constant, not a measurement
oshaughnessy-junior Sep 2, 2026
2ffbdcb
Guard __all__ against exporting names the module does not define
oshaughnessy-junior Sep 2, 2026
27cc18d
jax_ile: close three uncovered guards in the log-uniform distance qua…
oshaughn Sep 2, 2026
f7e6787
Refuse time resampling under peak-local; fix and test the certificate…
oshaughnessy-junior Sep 2, 2026
6b4467e
Certify the outside supremum on sub-cell geometry
oshaughnessy-junior Sep 2, 2026
bef1dc2
Real data: certifying the tail bound left the answer bit-for-bit unch…
oshaughnessy-junior Sep 2, 2026
bd49c93
jax_ile: close the guard holes internal review found, and correct fou…
oshaughn Sep 2, 2026
2fc5a12
Record the costing lever as measured, dangerous, and out of scope for…
oshaughnessy-junior Sep 2, 2026
64df06b
anglemarg: let 'laplace' use the adaptive distance quadrature for m_m…
oshaughnessy-junior Sep 2, 2026
079400c
anglemarg: centre the psi-marginal bracket on the EXACT psi maximiser
oshaughnessy-junior Sep 2, 2026
87a7a98
Make peak-local certificate numerically robust
oshaughnessy-junior Sep 2, 2026
2b3cccd
Update peak-local CI collection gate
oshaughnessy-junior Sep 2, 2026
eb753be
devnotes: record the validation and gate results for the psi-marginal…
oshaughnessy-junior Sep 2, 2026
80652b2
anglemarg: correct the module docstring's 'exact scheme only' claim
oshaughnessy-junior Sep 2, 2026
6e5bd4b
Merge pull request #205 from oshaughnessy-junior/rift_O4d_tmarg_peakl…
oshaughnessy-junior Sep 2, 2026
e5c55f7
jax_ile: default --angle-marg-scheme from 'grid' to 'exact'
oshaughn Sep 2, 2026
226e372
anglemarg: let 'auto' reach 'laplace' under GH, gated on a MEASURED i…
oshaughn Sep 2, 2026
4480f2c
test_angle_marg_exact: shim np.trapezoid so the reference runs on num…
oshaughnessy-junior Sep 2, 2026
7e1280f
devnotes: label every test run with its interpreter and numpy version
oshaughnessy-junior Sep 2, 2026
e4334cb
records: put the design note beside its module, keep dev scratch out …
oshaughn Sep 2, 2026
bfb53f0
DESIGN_gh_laplace: replace the last carried-over cell with its measur…
oshaughn Sep 2, 2026
bbd54a0
Add Rimsky orchestration bridge
oshaughn Sep 2, 2026
6793bea
Scope frame caches to Rimsky analyses
oshaughn Sep 2, 2026
74f8ea0
DESIGN_gh_laplace: drop the stale 'carried over' claim, record the ga…
oshaughn Sep 2, 2026
75c97e9
Add automatic Rimsky follow-up and E2E test
oshaughn Sep 2, 2026
d322ecb
Run Rimsky integration against release and main
oshaughn Sep 2, 2026
ff76fbb
Require Asimov 0.7 in Rimsky E2E
oshaughn Sep 2, 2026
26cb016
Test Rimsky with Asimov 0.7 adapter
oshaughn Sep 2, 2026
cf5fcad
Install only E2E orchestration dependencies
oshaughn Sep 2, 2026
18be3ab
Retry transient Rimsky dependency downloads
oshaughn Sep 2, 2026
1a66c4f
Merge pull request #226 from oshaughnessy-junior/rift_O4d_rimsky_inte…
oshaughn Sep 2, 2026
40faec1
jax_ile: the new value pin used exact float equality; make it relative
oshaughn Sep 2, 2026
3ca8afd
anglemarg: drop an unmeasured claim about GH_PSI_IDENTITY_TOL
oshaughn Sep 2, 2026
dbbfd8d
Address automated review findings for PR #221
Sep 2, 2026
e4a82d0
Merge rift_O4d (1a66c4fe) into claude/limit-distance
oshaughnessy-junior Sep 2, 2026
4a3f51e
anglemarg: fix two review defects in the GH identity gate, and a thir…
oshaughn Sep 2, 2026
4df34f2
anglemarg: make the GH identity gate pointwise, and gate on the respo…
oshaughn Sep 2, 2026
0004db4
jax test: enable x64 explicitly instead of inheriting it from an import
oshaughnessy-junior Sep 2, 2026
ff8134d
anglemarg: enforce the response model inside the PUBLIC laplace kernel
oshaughn Sep 2, 2026
bf796d3
anglemarg: state the response allowlist positively, and bound the gat…
oshaughn Sep 2, 2026
63a6400
DESIGN_gh_laplace: document the response-model precondition and its p…
oshaughn Sep 2, 2026
b4284ef
Merge pull request #225 from oshaughnessy-junior/anglemarg_gh_laplace…
oshaughnessy-junior Sep 2, 2026
6692f1e
--limit-distance: say in the help what 'no correction' costs, measure…
oshaughnessy-junior Sep 2, 2026
03f78d0
lisa-check: classify --limit-distance in the drift ledger (this PR's …
oshaughnessy-junior Sep 2, 2026
69923b8
jax_ile: stop justifying the GH refusal with a selector outcome that …
oshaughn Sep 2, 2026
bd5c6fa
Merge rift_O4d (b4284ef0, incl. PR #225) into claude/limit-distance
oshaughnessy-junior Sep 2, 2026
0a56edc
Merge rift_O4d (#225) into the log-uniform distance quadrature
oshaughn Sep 2, 2026
788b73e
Peak-local as a framework: the measured half, and the warrant taxonomy
oshaughnessy-junior Sep 2, 2026
aa11997
The axis contract: supply a SPECTRUM, not an evaluator
oshaughnessy-junior Sep 2, 2026
9a0e3b8
Repair two stale claims in merged code, and correct an over-claim in …
oshaughnessy-junior Sep 2, 2026
d3244f4
Distance warrant: bounded-stationary-set, not unimodality
oshaughnessy-junior Sep 2, 2026
9026c3a
RETRACT the psi backstop's aliasing-bound claim; size N from amplitude
oshaughnessy-junior Sep 2, 2026
383d5b6
Per-axis {localize, dense}, and why the joint kernel must enumerate m…
oshaughnessy-junior Sep 2, 2026
c7d989b
Enumeration as a primitive: a certified COVER, and no on-circle toler…
oshaughnessy-junior Sep 2, 2026
54f1dec
The 2-D enumerator composes the 1-D one; the pencil may not be needed
oshaughnessy-junior Sep 2, 2026
6bbd338
jax_ile: endpoint term over every entry of a loud sky, not just its a…
oshaughn Sep 3, 2026
6565d68
Merge pull request #224 from oshaughnessy-junior/rift_O4d_peaklocal_f…
oshaughnessy-junior Sep 3, 2026
6771878
Joint (phi,psi) peak-local: numpy reference kernel
oshaughnessy-junior Sep 2, 2026
79cd690
Compose over the distance grid, and validate against the SHIPPED exac…
oshaughnessy-junior Sep 2, 2026
814e1c4
JAX port: a cell PARTITION replaces region merging, and two real bugs…
oshaughnessy-junior Sep 3, 2026
90ccf01
Adversarial review: two unchecked claims, and a filter that could not…
oshaughnessy-junior Sep 3, 2026
21a306f
Adversarial review: close two inert guards and one missing refusal
oshaughnessy-junior Sep 3, 2026
d793589
Review P1s: a straddling cell is OUTSIDE, and the dropped set aggregates
oshaughnessy-junior Sep 3, 2026
9a61c63
Register the new test files with the CI gates that would otherwise no…
oshaughnessy-junior Sep 3, 2026
e014b35
factored_likelihood: offset the vectorized time marginalization PER E…
oshaughnessy-junior Sep 3, 2026
3d9eb0c
--limit-distance: the benefit is a threshold in amplitude, and the he…
oshaughnessy-junior Sep 3, 2026
a498b9f
Merge pull request #234 from oshaughnessy-junior/claude/av-batchmax-o4d
oshaughnessy-junior Sep 3, 2026
eb91ae0
Merge pull request #230 from oshaughnessy-junior/rift_O4d_joint_angle…
oshaughnessy-junior Sep 3, 2026
bce711e
Default the batchmode Q_lm stencil to sinc, and downgrade rather than…
oshaughnessy-junior Sep 3, 2026
24ecb90
Merge rift_O4d (eb91ae04a) into the stencil-default branch
oshaughnessy-junior Sep 3, 2026
d5891b1
Record the timing provenance: the cost tables predate PR #234
oshaughnessy-junior Sep 3, 2026
61c7b5f
factored_likelihood: offset the in-loop calmarg log-sum-exp per extri…
oshaughnessy-junior Sep 3, 2026
0128a2e
Merge remote-tracking branch 'origin/rift_O4d' into work
oshaughn Sep 3, 2026
638467e
jax_ile: merge rift_O4d, and report the exterior-entry hole rather th…
oshaughn Sep 3, 2026
b53c768
Merge pull request #238 from oshaughnessy-junior/claude/av-batchmax-r…
oshaughnessy-junior Sep 3, 2026
5b69335
Merge pull request #221 from oshaughnessy-junior/adaptive_distance_qu…
oshaughnessy-junior Sep 3, 2026
b164b6c
DESIGN_jax_distance_quadrature: a node-count error is meaningless wit…
oshaughn Sep 3, 2026
02dde72
DESIGN_jax_distance_quadrature: attach the amplitude to the +46% too
oshaughn Sep 3, 2026
57f55dd
Merge rift_O4d (5b693355): keep ALL THREE q-window-stencil-check entries
oshaughnessy-junior Sep 3, 2026
5dc9e8f
Pin the FIFTH default-vs-request guard, and correct "exact reference"
oshaughnessy-junior Sep 3, 2026
fc8dd2b
Merge rift_O4d (5b693355, incl. #221 adaptive distance quadrature)
oshaughnessy-junior Sep 3, 2026
a9f09db
lisa-check: correct the --limit-distance rule -- LISA supports a prio…
oshaughnessy-junior Sep 3, 2026
df3b182
Merge pull request #241 from oshaughnessy-junior/claude/dgrid-amplitu…
oshaughnessy-junior Sep 3, 2026
b5283a8
ci: q-window-stencil-check membership by in-file marker + fail-closed…
oshaughnessy-junior Sep 3, 2026
7ebfb2f
Address three P2 review findings: narrow a guard, split a message, br…
oshaughnessy-junior Sep 3, 2026
4c4f649
Merge pull request #223 from oshaughnessy-junior/claude/limit-distance
oshaughnessy-junior Sep 3, 2026
9f80fc5
Wire 'peak-local' into ILE as an angle-marg scheme, explicit-only
oshaughnessy-junior Sep 3, 2026
95326af
Review P1s: the new scheme must join the failsafe, the memory cap and…
oshaughnessy-junior Sep 3, 2026
d87e4a1
Review P1s: make the kernel differentiable, and checkpoint the scan
oshaughnessy-junior Sep 3, 2026
475bbd6
Review P1s: the same peak gate in jax, and a cap whose model describe…
oshaughnessy-junior Sep 3, 2026
b7a4f8a
Restore the jax manifest entry the rebase dropped, and re-derive the …
oshaughnessy-junior Sep 3, 2026
e835d1b
phi-localization: BOTH axes localized, and the cost stops growing wit…
oshaughnessy-junior Sep 3, 2026
aa78cab
Adversarial review + real-data testing: a FALSE ACCEPT, and a fixed n…
oshaughnessy-junior Sep 3, 2026
9cb5297
Review P1: refine the u centre INSIDE each cell; the roots are seeds,…
oshaughnessy-junior Sep 3, 2026
d4bc9ce
Review P1: merge phi regions on the CIRCLE, not the line
oshaughnessy-junior Sep 3, 2026
96c0c24
Review P1s: a clipped Newton point is not a peak, and the cover radiu…
oshaughnessy-junior Sep 3, 2026
75646b7
CI: census every test file, and gate the 31 that were running nowhere
oshaughn Sep 3, 2026
26e21b1
test-core-units: record that the floors hold on a GitHub runner too
oshaughn Sep 3, 2026
06fe338
ILE batchmode: refuse calibration-option combinations that cannot work
oshaughnessy-junior Sep 3, 2026
5076ca0
Stop re-deriving "will the fused kernel run?" -- one definition, two …
oshaughnessy-junior Sep 3, 2026
54aebbc
Review P1: derive the fallback cell's node count, and correct a comme…
oshaughnessy-junior Sep 3, 2026
fb520dd
Merge pull request #239 from oshaughnessy-junior/rift_O4d_joint_angle…
oshaughnessy-junior Sep 3, 2026
892cb89
lisa-check: classify fused_calmarg_in_use as NA, with the reason
oshaughnessy-junior Sep 3, 2026
8502141
test-ci-roster: validate marker names, and stop counting prose as a r…
oshaughn Sep 3, 2026
cc85984
Merge pull request #235 from oshaughnessy-junior/rift_O4d_joint_phi_l…
oshaughnessy-junior Sep 3, 2026
15b29c9
calmarg gate: pin the 3G refusals as backend-independent
oshaughn Sep 3, 2026
926364e
test-ci-roster: prove consumption, require invocation, and give PENDI…
oshaughn Sep 3, 2026
1b2def2
Merge pull request #242 from oshaughnessy-junior/claude/ci-q-window-s…
oshaughn Sep 3, 2026
7fd39ea
Merge remote-tracking branch 'origin/rift_O4d' into claude/ci-test-ro…
oshaughn Sep 3, 2026
f35183f
Address automated review findings for PR #244
Sep 3, 2026
3737619
Merge rift_O4d (#242 landed) and discharge the three edits it owed
oshaughn Sep 3, 2026
a9202ba
Merge rift_O4d: take #242's discovery script, and register this PR's …
oshaughnessy-junior Sep 3, 2026
9185013
The cross-driver default check was skipped in the only job that runs it
oshaughnessy-junior Sep 3, 2026
dd960d0
calmarg gate: reject the two opt-ins whose consumers sit behind n_cal…
oshaughnessy-junior Sep 3, 2026
9dabb86
Merge pull request #244 from oshaughnessy-junior/rift_O4d_calmarg_opt…
oshaughnessy-junior Sep 3, 2026
3da73b9
Merge pull request #237 from oshaughnessy-junior/rift_O4d_batchmode_s…
oshaughnessy-junior Sep 3, 2026
34e7892
Merge remote-tracking branch 'origin/rift_O4d' into claude/ci-test-ro…
oshaughn Sep 3, 2026
94eeb69
Close the last PENDING escape, and make test-calmarg.sh test the chec…
oshaughn Sep 3, 2026
8194d81
Merge pull request #243 from oshaughnessy-junior/claude/ci-test-roste…
oshaughnessy-junior Sep 3, 2026
176405e
Merge remote-tracking branch 'upstream/rift_O4d' into rift_O4d_rimsky…
oshaughn Sep 4, 2026
9d9beac
Exercise Rimsky through Asimov submission
oshaughn Sep 4, 2026
1205480
Revert "Merge remote-tracking branch 'upstream/rift_O4d' into rift_O4…
oshaughn Sep 4, 2026
51931cb
Merge remote-tracking branch 'origin/rift_O4d' into rift_O4d_rimsky_i…
oshaughn Sep 4, 2026
c2f97ca
Merge pull request #249 from oshaughnessy-junior/rift_O4d_rimsky_inte…
oshaughn Sep 4, 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
208 changes: 179 additions & 29 deletions .github/workflows/ci.yml

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -53,4 +53,4 @@ cover/
# in the .venv directory. It is recommended not to include this directory in version control.
.pixi/*
!.pixi/config.toml

asimov.log
17 changes: 16 additions & 1 deletion .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ import_check:
- python -m pytest -q MonteCarloMarginalizeCode/Code/test/test_lisa_lalsimutils_compat.py
- python -m pytest -q MonteCarloMarginalizeCode/Code/test/test_lisa_operational_synthetic.py
- python -m pytest -q MonteCarloMarginalizeCode/Code/test/test_lisa_helper_contract.py
- python -m pytest -q MonteCarloMarginalizeCode/Code/test/test_spherical_harmonics_backend.py

dependency_compat_check:
stage: system tests
Expand Down Expand Up @@ -129,6 +130,20 @@ test_run:
# numpy/scipy, seconds). Runs before the heavy scripts so a wrong prior fails
# fast rather than after the end-to-end runs.
- python -m pytest -q MonteCarloMarginalizeCode/Code/test/test_cip_priors.py
# Per-extrinsic-sample time-marginalization offset in the vectorized NoLoop
# likelihood (issue #232). numpy + lal, ~9 s, and it fails SILENTLY in the worst
# way: a batch-wide log-sum-exp offset underflows every extrinsic sample more than
# ~745 nats below the loudest one to lnL = -inf, which above rho ~ 40 is the bulk of
# the prior and collapses mcsamplerAV. An unlisted test never runs in this CI, so
# the wiring ships with the fix.
- python -m pytest -q MonteCarloMarginalizeCode/Code/test/test_noloop_time_marg_row_offset.py
# Same defect on the in-loop calibration-marginalization reduction (n_cal>1,
# cal_method='loop', which is the DEFAULT: the fused kernel is opt-in behind
# --calibration-fused-kernel). Its streaming log-sum-exp offset was a SCALAR shared
# by every extrinsic sample, so rows more than ~745 nats below the loudest came back
# lnL = -inf (issue #232). numpy + lal, ~10 s. An unlisted test never runs in this
# CI, so the wiring ships with the fix.
- python -m pytest -q MonteCarloMarginalizeCode/Code/test/test_calmarg_running_max_row_offset.py
- . .travis/test-coord.sh
- bash .travis/test-integrate.sh
- . .travis/test-posterior.sh
Expand Down Expand Up @@ -160,7 +175,7 @@ gpu_integration:
--env GW_SURROGATE="$GW_SURROGATE"
--env RIFT_CI_REQUIRE_GPU="$RIFT_CI_REQUIRE_GPU"
"$RIFT_CI_APPTAINER_IMAGE"
bash -lc 'cd "$CI_PROJECT_DIR" && export PYTHONPATH="$CI_PROJECT_DIR/MonteCarloMarginalizeCode/Code${PYTHONPATH:+:$PYTHONPATH}" && bash .travis/test-integrate.sh && bash .travis/test-calmarg-gpu.sh'
bash -lc 'cd "$CI_PROJECT_DIR" && export PYTHONPATH="$CI_PROJECT_DIR/MonteCarloMarginalizeCode/Code${PYTHONPATH:+:$PYTHONPATH}" && bash .travis/test-integrate.sh && bash .travis/test-calmarg-gpu.sh && bash .travis/test-lisa-gpu.sh'
rules:
- if: '$CI_PIPELINE_SOURCE == "web"'
when: manual
Expand Down
136 changes: 136 additions & 0 deletions .travis/ci_roster.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
# CI roster -- every test file under MonteCarloMarginalizeCode/Code that is reachable from NO
# CI job, and the reason it is not. Enforced by .travis/test-ci-roster.py (job ci-roster-check).
#
# Format: <repo-relative path> <STATUS> <reason>
#
# STATUS is one of:
# HANDRUN a hand-run study or demo, not a pytest target. Most of these have a __main__
# and argparse, assert internally, and collect ZERO items under pytest -- which
# exits 5, "no tests ran", and reads as a pass in a log skim. Gating them as-is
# would buy a green tick over an empty run.
# LEGACY imports pre-package flat module names (factored_likelihood, lalsimutils, ourio,
# ourparams, xmlutils, common_cl, statutils, effectiveFisher, spokes) that have not
# existed since RIFT was packaged into RIFT.*. These cannot be IMPORTED, let alone
# run, in any current environment.
# OPTDEP needs a dependency CI does not install.
# GPU needs a GPU; the runners have none, so it would report as skipped.
# EXPENSIVE opt-in behind an env var by design.
# BROKEN collects but FAILS today. A debt, recorded as one.
# PENDING waiting on a named gate that is not live yet. The reason must say
# `gate:<name>`, and the entry is legal only while that gate is absent -- when
# it lands, the census errors on the entry by name. An earlier version was
# exempt from the staleness check unconditionally, which made it the one status
# nothing could ever force out. No entries currently: the last one, for
# test_noloop_time_interp.py on gate:q-window-stencil, expired when #242 merged.
#
# Everything here was collected and run individually on CIT with the IGWN conda python
# (3.11, numpy 1.26.4, lal 7.7.0) on 2026-09-03; the counts quoted are from that run.
#
# Adding a line here is a DECISION, not a way to silence the check. If a file belongs in CI,
# register it with a job instead -- then delete its line, which the check will demand anyway.

# ---------------------------------------------------------------------------------------
# LEGACY -- the pre-package driver suite. 28 files, none importable.
#
# These are the original hand-run RIFT test drivers from before the code became a package.
# `pytest --collect-only` on each reports a collection ERROR, not zero tests: e.g.
# test_likelihood.py -> ModuleNotFoundError: No module named 'factored_likelihood'. They are
# not a coverage gap, because there is no coverage to lose; they are a decision nobody has
# made. Recommendation, deliberately NOT taken in the PR that created this roster: delete
# them, or move them under Code/old/ where test_regions.py already sits. That is a judgment
# call about historical value, and it belongs to a maintainer, not to a CI audit.
MonteCarloMarginalizeCode/Code/old/test_regions.py LEGACY imports lalsimutils; also raises IndexError at collection on current numpy
MonteCarloMarginalizeCode/Code/test/factored_likelihood_test.py LEGACY imports factored_likelihood, lalsimutils
MonteCarloMarginalizeCode/Code/test/test_SpokesRefine.py LEGACY imports spokes
MonteCarloMarginalizeCode/Code/test/test_data_vs_template.py LEGACY imports factored_likelihood, lalsimutils, ourio, ourparams
MonteCarloMarginalizeCode/Code/test/test_effectiveFisher.py LEGACY imports effectiveFisher, lalsimutils
MonteCarloMarginalizeCode/Code/test/test_hlm.py LEGACY imports factored_likelihood
MonteCarloMarginalizeCode/Code/test/test_interpolation.py LEGACY imports factored_likelihood
MonteCarloMarginalizeCode/Code/test/test_like_and_samp.py LEGACY imports common_cl, factored_likelihood, lalsimutils, ourio, ourparams, xmlutils
MonteCarloMarginalizeCode/Code/test/test_like_and_samp_margPsi.py LEGACY imports factored_likelihood, lalsimutils, ourio
MonteCarloMarginalizeCode/Code/test/test_like_and_samp_noisydata.py LEGACY imports factored_likelihood, lalsimutils, ourio
MonteCarloMarginalizeCode/Code/test/test_like_and_samp_noisydata_margPsi.py LEGACY imports factored_likelihood, lalsimutils, ourio
MonteCarloMarginalizeCode/Code/test/test_like_and_samp_simplified.py LEGACY imports common_cl, factored_likelihood, lalsimutils, ourio, ourparams, xmlutils
MonteCarloMarginalizeCode/Code/test/test_like_and_samp_singleifo.py LEGACY imports factored_likelihood, lalsimutils, ourio
MonteCarloMarginalizeCode/Code/test/test_like_singletemplate_emcee.py LEGACY imports factored_likelihood, lalsimutils, ourio
MonteCarloMarginalizeCode/Code/test/test_like_singletemplate_emcee_pt.py LEGACY imports factored_likelihood, lalsimutils, ourio
MonteCarloMarginalizeCode/Code/test/test_likelihood.py LEGACY imports factored_likelihood
MonteCarloMarginalizeCode/Code/test/test_precompute.py LEGACY imports factored_likelihood, lalsimutils
MonteCarloMarginalizeCode/Code/test/test_precompute_noisydata.py LEGACY imports factored_likelihood
MonteCarloMarginalizeCode/Code/test/test_precompute_singleifo.py LEGACY imports factored_likelihood
MonteCarloMarginalizeCode/Code/test/test_profile_components.py LEGACY imports factored_likelihood, lalsimutils, ourparams
MonteCarloMarginalizeCode/Code/test/test_psd_xml_io.py LEGACY imports factored_likelihood, lalsimutils
MonteCarloMarginalizeCode/Code/test/test_response_functions_Q.py LEGACY imports factored_likelihood, lalsimutils, ourio, ourparams, xmlutils
MonteCarloMarginalizeCode/Code/test/test_rhotimeseries.py LEGACY imports factored_likelihood
MonteCarloMarginalizeCode/Code/test/test_runvar.py LEGACY imports statutils
MonteCarloMarginalizeCode/Code/test/test_sampler_visualization.py LEGACY imports lalsimutils
MonteCarloMarginalizeCode/Code/test/integrators/test_mcsamp.py LEGACY imports statutils and mpl_toolkits.basemap
MonteCarloMarginalizeCode/Code/test/integrators/test_mcsamp_pinned.py LEGACY imports statutils
MonteCarloMarginalizeCode/Code/test/integrators/test_mcsampler_gpu.py LEGACY imports ourio

# ---------------------------------------------------------------------------------------
# HANDRUN -- quantitative studies with real internal gates, run by hand.
#
# These are NOT dead. Each has a __main__, argparse, and its own pass/fail criterion (a
# 4-sigma bias gate, an efficiency ratio, a bias-ordering assertion). They collect ZERO items
# under pytest and exit 5, so wiring them into a pytest job as they stand would report a green
# tick over an empty run -- the exact trap .travis/test-slowrot.sh documents.
#
# The right move for the first six is to convert them the way the shape-recovery suite was
# converted: a pytest wrapper under test/expensive_before_merging/, skipped unless
# RIFT_RUN_EXPENSIVE=1, so the merge gate can invoke them and CI does not pay for them. That
# is a per-suite piece of work with a real cost, and it is not attempted here.
MonteCarloMarginalizeCode/Code/test/integrators/test_AV_bootstrap.py HANDRUN AV warm-start efficiency study with a 4-sigma bias gate; 0 collected, exit 5
MonteCarloMarginalizeCode/Code/test/integrators/test_AV_warmstart_safety.py HANDRUN anti-bias guard for reusing a proposal across problems; 0 collected, exit 5
MonteCarloMarginalizeCode/Code/test/integrators/test_portfolio_adaptive_alloc.py HANDRUN portfolio draw-allocation study vs standalone AV; 0 collected, exit 5
MonteCarloMarginalizeCode/Code/test/integrators/test_portfolio_balance_heuristic.py HANDRUN portfolio safety under a decoy member; 0 collected, exit 5
MonteCarloMarginalizeCode/Code/test/integrators/test_portfolio_oracle.py HANDRUN needle-target oracle study; 0 collected, exit 5
MonteCarloMarginalizeCode/Code/test/integrators/test_mcsamplerEnsemble.py HANDRUN GMM-vs-mcsampler comparison demo, prints results; 0 collected, exit 5
MonteCarloMarginalizeCode/Code/test/integrators/test_mcsamplerEnsemble_AdaptationDemo.py HANDRUN adaptation demo, plots and prints; 0 collected, exit 5
MonteCarloMarginalizeCode/Code/demo/rift/export_likelihoods/head_to_head/run_test.py HANDRUN GP-vs-RF figure driver for a demo; --stage picks a stage; 0 collected, exit 5

# ---------------------------------------------------------------------------------------
# OPTDEP / GPU -- would run, but not in the environment CI builds.
#
# The two jax_gp files are the strongest candidates for promotion: jax-ile-check already
# installs a CPU jax stack, so adding them there costs only optax and a raised EXPECTED_TESTS.
# Not done here because that job's counts are pinned and this PR does not own them.
MonteCarloMarginalizeCode/Code/RIFT/interpolators/jax_gp/test_coordinates.py OPTDEP needs jax; belongs in jax-ile-check, which already installs a CPU jax stack
MonteCarloMarginalizeCode/Code/RIFT/interpolators/jax_gp/test_interpolators.py OPTDEP needs jax and optax; 10 collected, all 10 error on ModuleNotFoundError optax rather than skipping
# The two cupy parity legs are NOT listed here. PR #242 landed, and its
# .travis/test-q-window-stencil.sh names both in an EXCLUDED array -- with the same reason,
# and with its own fail-closed check that an EXCLUDED path still exists and does not carry
# the marker. That is a better home than this file: the decision sits beside the gate it
# belongs to. Their roster lines were deleted when #242 merged, exactly as the census
# demanded ("listed as GPU but IS now reachable -- delete it").
MonteCarloMarginalizeCode/Code/test/backends/test_backends_lowlevel.py OPTDEP needs lscsoft-glue and htcondor; 15 collected, 15 pass where both are installed
MonteCarloMarginalizeCode/Code/test/hyperpipe/tests/test_hydra_integration.py OPTDEP needs hydra and omegaconf; skips cleanly without them
MonteCarloMarginalizeCode/Code/test/test_gwsignal_teob_mode_sign.py OPTDEP needs the gwsignal TEOB route; 2 collected, 1 passes and 1 skips without EOBRun_module
MonteCarloMarginalizeCode/Code/test/test_gwsignal_teob_near_aligned.py OPTDEP needs EOBRun_module; 1 collected, skips without it
MonteCarloMarginalizeCode/Code/test/test_teobresums_compat.py OPTDEP TEOBResumS compat shim; 15 collected and all pass on CIT, unverified on a runner
MonteCarloMarginalizeCode/Code/test/test_rimsky_integration.py OPTDEP companion to test_rimsky_end_to_end.py; belongs in the rimsky-integration job, whose env this PR does not own
MonteCarloMarginalizeCode/Code/test/integrators/test_NF_reuse.py OPTDEP needs nflows for the normalizing-flow store; collection errors without it
MonteCarloMarginalizeCode/Code/test/integrators/test_mcsamp_vegas.py OPTDEP needs the vegas package, commented out of requirements.txt; NameError at import without it
MonteCarloMarginalizeCode/Code/test/integrators/test_mcsampler_rosenbrock.py HANDRUN Rosenbrock sampler study; its docstring pairs it with plot_posterior_corner.py by hand
MonteCarloMarginalizeCode/Code/test/test_eosmanager_misc.py OPTDEP needs LALSIMULATION_DATADIR set; raises KeyError at import without it
MonteCarloMarginalizeCode/Code/test/test_skysamp.py LEGACY imports lalinference.bayestar.fits, removed upstream; cannot be imported
MonteCarloMarginalizeCode/Code/test/test_mcsampler_foridiots.py BROKEN NameError int_vals at import; a plotting demo that no longer runs at all

# ---------------------------------------------------------------------------------------
# EXPENSIVE -- correctly gated already, by an env var rather than by CI membership.
MonteCarloMarginalizeCode/Code/test/expensive_before_merging/integrators/test_shape_recovery.py EXPENSIVE 4 collected, all skip unless RIFT_RUN_EXPENSIVE=1
MonteCarloMarginalizeCode/Code/test/expensive_before_merging/integrators/test_escaped_mass_diagnostic.py EXPENSIVE 5 collected, all skip unless RIFT_RUN_EXPENSIVE=1

# ---------------------------------------------------------------------------------------
# BROKEN -- collects and FAILS on rift_O4d today. Found only because this audit ran them.
#
# test_replica_pooling.py is the clearest argument for the census. It loads six helpers out of
# bin/integrate_likelihood_extrinsic_batchmode by REGEX and exec()s them into a synthetic
# module. The driver has since been refactored so that _lnZ_of_rvs and _kish_neff_of_rvs
# delegate to a seventh helper, _lw_of, which the regex list does not extract. Inside the
# exec'd module _lw_of is undefined; the driver's own `except Exception: return None` swallows
# the NameError, both helpers return None, and 10 of 15 tests die on `None - float`. Adding
# "_lw_of" to the slice list in the test is the immediate fix. The reimplemented-harness shape
# is the real problem and outlives that fix.
MonteCarloMarginalizeCode/Code/test/integrators/test_replica_pooling.py BROKEN 10 of 15 fail; its regex helper-slicer misses _lw_of, added to the driver after the test was written
MonteCarloMarginalizeCode/Code/test/hyperpipe/tests/test_marg_list.py BROKEN 2 of 3 fail; _stage_event_file writes event-N.net into base_dir while the test and assemble_marg_list's own run_dir docstring say run_dir
34 changes: 33 additions & 1 deletion .travis/test-calmarg.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@
# reduction and the per-realization self-term fix: precompute time-alignment +
# identity-cal cross terms, the loop/fused reduction vs a brute-force reference
# (incl. n_cal==1), the low-rank SVD self-term basis vs a direct band integral, and
# the backtest of the cal reduction (default + distance-marginalization helpers).
# the backtest of the cal reduction (default + distance-marginalization helpers),
# and the driver's calibration OPTION-COMPATIBILITY gate (which flag combinations
# are refused at startup instead of silently degrading to the zero-calibration
# likelihood, and which must still be accepted).
# Any nonzero exit fails the job (set -e). GPU/CUDA paths are exercised separately
# on hardware; here every check runs on the numpy backend.
set -euo pipefail
Expand All @@ -13,6 +16,20 @@ command -v "$PY" >/dev/null 2>&1 || PY="$(command -v python3)"
CODE="MonteCarloMarginalizeCode/Code"
export OMP_NUM_THREADS=1

# INVARIANT: this gate tests THIS CHECKOUT, never an installed build. Must PREPEND --
# appending lets a caller's PYTHONPATH win.
#
# Without it the first check below runs as `python <path>/test_precompute_alignment.py`, which
# puts the SCRIPT'S directory on sys.path and not Code/, so bare `import RIFT` resolves to
# whatever is installed. In CI that happens to be the editable install of this checkout, so
# it passes; on a plain checkout with a real RIFT in the environment it silently tests the
# INSTALLED code, and reports its staleness as a failure of this branch -- observed on CIT,
# where the CVMFS IGWN RIFT predates a kwarg the checkout added:
# PrecomputeLikelihoodTerms() got an unexpected keyword argument 'calibration_realizations'
# The `python -m RIFT.calmarg.*` runs below are already safe (cwd is on sys.path under -m);
# this makes the whole script safe the same way its sibling gates are.
export PYTHONPATH="$PWD/$CODE${PYTHONPATH:+:$PYTHONPATH}"

# precompute alignment + identity-cal self-term cross terms == baseline
"$PY" "$CODE/RIFT/calmarg/test_precompute_alignment.py"

Expand All @@ -24,4 +41,19 @@ export OMP_NUM_THREADS=1
&& "$PY" -m RIFT.calmarg.backtest_calmarg --backend cpu --n-cal 8 --methods reference,in_loop_B \
&& "$PY" -m RIFT.calmarg.backtest_calmarg --backend cpu --n-cal 8 --loglikelihood distmarg --methods reference,in_loop_B )

# Option-compatibility gate: which calibration option combinations the ILE driver
# REFUSES at startup, and -- the load-bearing half -- which it must still ACCEPT.
# pytest here, not a bare module run: these are parametrized accept/refuse pairs plus
# real subprocess invocations of the driver, and `set -e` turns pytest's exit 5 ("no
# tests ran") into a job failure rather than a silent green. A collection floor is
# asserted for the same reason: a file that stops collecting is a lost gate.
_n=$( cd "$CODE" && "$PY" -m pytest -q --collect-only "RIFT/calmarg/test_option_compat.py" 2>/dev/null | grep -c '::' || true )
if [ "${_n:-0}" -lt 20 ]; then
echo "test-calmarg.sh: option-compat suite collected ${_n:-0} tests, expected >= 20." >&2
echo " Tests were renamed, removed, or the file stopped importing. Fix it; as is," >&2
echo " the gate covers less than it claims." >&2
exit 1
fi
( cd "$CODE" && PYTHONPATH="$PWD${PYTHONPATH:+:$PYTHONPATH}" "$PY" -m pytest -q "RIFT/calmarg/test_option_compat.py" )

echo "calmarg CPU regression gate: PASS"
Loading
Loading