Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
539 commits
Select commit Hold shift + click to select a range
17228ca
Adjust phases in custom kernel after normalizing time stamps
astrobatty Jun 30, 2026
e28c5cf
Add optimized option to transit_gpu function
astrobatty Jun 30, 2026
3b5175e
Add tests for optimized kernels
astrobatty Jun 30, 2026
b2d4ba2
Merge branch 'bugfix/BLS-kernel' of https://github.com/johnh2o2/cuvar…
astrobatty Jul 3, 2026
4e0d414
Update eebls_gpu_custom's docstring to match results
astrobatty Jul 3, 2026
a578d6d
Adjust phase offset in sparse_bls_cpu to use input time scale
astrobatty Jul 3, 2026
e9c34b0
Adjust phase offset in single_bls to use input time scale
astrobatty Jul 3, 2026
290ade5
Test fixture: non-zero T0 (t += 4.5) in data(); update CPU tests to o…
johnh2o2 Jul 4, 2026
8942477
Add v0.2.6-vs-v1.0 head-to-head benchmark + summarizer (protocol S4 f…
johnh2o2 Jul 4, 2026
c76db0f
Fix PR #65 GPU/CPU parity: single_bls fold order, custom-kernel fold …
johnh2o2 Jul 4, 2026
cfcf125
Head-to-head raw results checkpoint: BLS cold/warm/loop/correctness +…
johnh2o2 Jul 4, 2026
fa7cf2c
v0.2.6 vs v1.0.0 head-to-head: full results, LS/PDM, SUMMARY (RTX A50…
johnh2o2 Jul 4, 2026
a7110c0
PR #65 resolution: CHANGELOG, analysis archive (root cause + evidence…
johnh2o2 Jul 4, 2026
ed545da
PR #65 resolution: force-add raw validation logs (gitignored *.log)
johnh2o2 Jul 4, 2026
462a483
Merge pull request #65 from johnh2o2/bugfix/BLS-kernel
johnh2o2 Jul 4, 2026
1944bbb
Merge v0.2.6 head-to-head benchmark campaign (measured baseline for v…
johnh2o2 Jul 4, 2026
ff326c2
Release prep: outward docs sweep
johnh2o2 Jul 4, 2026
f332e05
Add survey-scale BLS benchmark + profiler driver scripts
johnh2o2 Jul 4, 2026
2aef7dc
profile driver: --freq-stride to keep ncu replay affordable
johnh2o2 Jul 4, 2026
2e335e0
Add parity gate comparator (corr>0.999 + identical peak, bit-eq flag)
johnh2o2 Jul 4, 2026
af1db85
profile driver: add naive variant (full public path for host-overhead…
johnh2o2 Jul 4, 2026
f677a15
Kernel hygiene: resolve the float32 PI literals flagged by the A3 dia…
johnh2o2 Jul 4, 2026
e132f59
Docs: BLS data-hygiene note on near-zero uncertainties
johnh2o2 Jul 4, 2026
4bec10e
bench: pin BLAS threadpools + record CFS throttle counters
johnh2o2 Jul 4, 2026
e88741d
Profile evidence + measured bottleneck ranking (RTX A5000)
johnh2o2 Jul 4, 2026
4970430
Opt 1: fused-noverlap BLS kernels (1.8-2.7x kernel time at survey scale)
johnh2o2 Jul 4, 2026
3c9e6f7
Opt 2: conflict-scatter permutation of staged LC data (TESS kernel 3.0x)
johnh2o2 Jul 4, 2026
95f335b
Opt 3: host-path overhead -- einsum, np.max, reusable batch memory
johnh2o2 Jul 4, 2026
f7d336b
Opt 4: occupancy-aware frequency chunking (Kepler kernel 1.32x)
johnh2o2 Jul 4, 2026
aef8e90
Campaign deliverables: SUMMARY.md, CHANGELOG, opt2-4 benchmark evidence
johnh2o2 Jul 4, 2026
8e872b9
Archive per-change full-suite + release-gate logs (opt1-opt4; force-a…
johnh2o2 Jul 4, 2026
bcf4710
TLS: survey-scale fast path (batch-native phase-binned kernel + exact…
johnh2o2 Jul 6, 2026
052e69a
TLS: measured fidelity — SDE parity with reference, matched-fidelity …
johnh2o2 Jul 6, 2026
7e30192
TLS: apples-to-apples GTLS Fig.7 reproduction (30-171x faster at equa…
johnh2o2 Jul 7, 2026
4ebf681
TLS/GTLS: add cold single-shot (one-star, compile-included) comparison
johnh2o2 Jul 7, 2026
0f7917a
docs: README performance pass — TLS-vs-GTLS + corrected BLS vs-0.2.6 …
johnh2o2 Jul 7, 2026
78f1965
TLS: fix UnboundLocalError in tls_search_batch refinement fallback (P…
johnh2o2 Jul 7, 2026
82f321f
Merge pull request #67 from johnh2o2/fix/kernel-hygiene-jul2026
johnh2o2 Jul 7, 2026
610a72a
Merge pull request #66 from johnh2o2/feature/bls-survey-speed
johnh2o2 Jul 7, 2026
d0f7a8c
Merge pull request #68 from johnh2o2/feature/tls-fast-survey
johnh2o2 Jul 7, 2026
dca5de6
TLS audit (PR #68 pre-release): findings doc + fix-now items
johnh2o2 Jul 11, 2026
c566add
Docs: repair the Sphinx source tree (first buildable state since 2017)
johnh2o2 Jul 11, 2026
08c13cb
Release content: TLS becomes the v1.0.0 headline; claims-trace correc…
johnh2o2 Jul 11, 2026
6f467e8
Release staging: runbook, issue-sweep drafts, coordination message
johnh2o2 Jul 11, 2026
865bede
Release gate PASSED: 796/796 zero-skip suite + 14/14 gate on merged tip
johnh2o2 Jul 11, 2026
ca24a80
README: cut to a third of its length (401 -> 132 lines)
johnh2o2 Jul 11, 2026
8d7ff50
Runbook: post-publish README install flip + consistency-test update
johnh2o2 Jul 11, 2026
648a901
NUFFT-LRT audit (Taaki contribution): findings doc + fix-now items
johnh2o2 Jul 11, 2026
ac8b0ec
NUFFT-LRT validation harness: null-calibrated injection-recovery vs B…
johnh2o2 Jul 11, 2026
335914b
Validation harness: adaptive epoch grids, on-grid injection, flat-PSD…
johnh2o2 Jul 11, 2026
c8a93a6
NUFFT-LRT: implement Detector A (marginalized joint detector) + seque…
johnh2o2 Jul 11, 2026
7c99ea9
NUFFT-LRT: drop the Lomb-Scargle arm from the validation analysis
johnh2o2 Jul 11, 2026
89ad23b
Validation harness: 32 trial periods (4h -> ~1.5h campaign at equal c…
johnh2o2 Jul 11, 2026
0d436c8
Add Sep-2026 release-readiness + algorithm audits and merged executio…
johnh2o2 Sep 4, 2026
dd80c35
runpod-create.sh: try a list of GPU types, print API errors instead o…
johnh2o2 Sep 4, 2026
e059bdc
PDM: wrap the bin index in var_step_function's variance loop (audit i…
johnh2o2 Sep 4, 2026
e8c70bc
PDM: normalize the weights of the deprecated (t, y, w, freqs) format …
johnh2o2 Sep 4, 2026
5c8e0ce
PDM: document the statistic actually computed (audit id 110, no dof c…
johnh2o2 Sep 4, 2026
50483f2
PDM docs: dphi semantics, _fast speed claim, float32 fold criterion (…
johnh2o2 Sep 4, 2026
8e0cd98
LS/NFFT: own psi tables for the w grid, FLT-typed floor() in fast_gau…
johnh2o2 Sep 4, 2026
72477fd
LS/NFFT: size the NFFT grids from the top mode, pad to 7-smooth lengt…
johnh2o2 Sep 4, 2026
9fa478c
NFFT: subtract a float64 epoch in NFFTMemory.fromdata before the floa…
johnh2o2 Sep 4, 2026
ab1a78b
PDM docs: the post-centering |t| bound is of order T/2, up to T for u…
johnh2o2 Sep 4, 2026
f8c6eab
Merge p1-pdm: PDM binned_step OOB read, legacy-weight normalization, …
johnh2o2 Sep 4, 2026
0bf3156
CHANGELOG: PDM Phase 1 fixes (binned_step OOB read, legacy weight nor…
johnh2o2 Sep 4, 2026
b1da736
TLS grids: per-period duration_window() with a Keplerian default and …
johnh2o2 Sep 4, 2026
fd6ae1e
TLS: Keplerian duration window, absolute T0 and reference SDE on all …
johnh2o2 Sep 4, 2026
a2414fb
CE: clamp the brightest point into the last magnitude bin (defect 9, …
johnh2o2 Sep 4, 2026
d6035e9
CE: symmetric max_phi truncation in the weighted histogram (defect 16…
johnh2o2 Sep 4, 2026
ce957a7
CE: fix shared-memory alignment of the double-precision fast kernels …
johnh2o2 Sep 4, 2026
d87b25a
CE: forward balanced_magbins/widen_mag_range from the constructor, va…
johnh2o2 Sep 4, 2026
0e3a803
BLS: 64-bit thread index and per-batch bin-buffer sizing (defect 1, b…
johnh2o2 Sep 4, 2026
318d4b9
CE: preallocate() uploads the frequency grid and binds process stream…
johnh2o2 Sep 4, 2026
6456ac9
CE: compile once per process, zero bins_g on every call, accept any 1…
johnh2o2 Sep 4, 2026
06928dd
CE docs: returned value, log_prob sign, option matrix, defaults (id 1…
johnh2o2 Sep 4, 2026
e4aa9a6
NFFT: zero the grid and synchronize on the memory-reuse path; docstri…
johnh2o2 Sep 4, 2026
f681f9f
NUFFT-LRT: sigma=4 default so the full returned band is accurate (def…
johnh2o2 Sep 4, 2026
38e80f8
NUFFT-LRT: sequential detector fits the basis with an intercept (defe…
johnh2o2 Sep 4, 2026
92c102c
NUFFT-LRT: float64 epoch subtraction before any float32 cast (defect …
johnh2o2 Sep 4, 2026
425765d
BLS: per-frequency q bounds in eebls_gpu; eebls_transit default = fas…
johnh2o2 Sep 4, 2026
b905806
LS: validate the whole frequency grid and the first mode, dy=None uni…
johnh2o2 Sep 4, 2026
32411f6
LS: multiharmonic direct sums on the host and amplitude_prior on the …
johnh2o2 Sep 4, 2026
0991206
LS: preallocate() puts its memories on self.streams so finish() waits…
johnh2o2 Sep 4, 2026
aea8f7f
LS: batched_run_const_nfreq returns the Baluev FAP of the best peak w…
johnh2o2 Sep 4, 2026
0966eeb
LS: cufinufft backend follows the memory precision (complex128 for us…
johnh2o2 Sep 4, 2026
afc236a
NFFT: integer first mode and phases reduced modulo one cycle in nfft_…
johnh2o2 Sep 4, 2026
d5c9a99
LS docs: grid, convention and precision notes in lomb.rst and run(); …
johnh2o2 Sep 4, 2026
56333e2
NUFFT-LRT: epochs=None scans an automatic epoch grid and returns (max…
johnh2o2 Sep 4, 2026
8f31bae
NUFFT-LRT: Detector A estimates the PSD from the basis-projected resi…
johnh2o2 Sep 4, 2026
803fdbf
NUFFT-LRT: floor and validate the PSD once per run, PSD-safe prior in…
johnh2o2 Sep 4, 2026
594e1ad
BLS: centre the flux in float64 before the sparse kernels and single_…
johnh2o2 Sep 4, 2026
91cc34a
NUFFT-LRT: one NFFT buffer set per run(), reused for the data, basis …
johnh2o2 Sep 4, 2026
4515c69
BLS: delete the sparse_bls_simple kernel; kernel-drift guard for ever…
johnh2o2 Sep 4, 2026
db765a1
NUFFT-LRT docs: rewrite docs/NUFFT_LRT_README.md for the fixed module…
johnh2o2 Sep 4, 2026
3117a6b
TLS: verifier nits (q-window error guidance, integer fap_null_draws, …
johnh2o2 Sep 4, 2026
0c917a2
Merge p1-tls: Keplerian duration window, absolute T0, reference SDE, …
johnh2o2 Sep 4, 2026
cdcf362
CHANGELOG: TLS Phase 1 fixes (duration window, T0, SDE/SNR definition…
johnh2o2 Sep 4, 2026
df3f1b6
CE: upload the frequency grid to a memory that never received one, an…
johnh2o2 Sep 4, 2026
b7c9cbf
CE: integer group boundaries for balanced magnitude bins (defect 18 f…
johnh2o2 Sep 4, 2026
9c76697
CE docs: the density offset is bin-dependent when mag_overlap > 0 (id…
johnh2o2 Sep 4, 2026
e358ba9
NUFFT-LRT: close the remaining audit doc items (ids 143, 107); tighte…
johnh2o2 Sep 4, 2026
137e45a
BLS: shared-memory guard for sparse_bls_gpu, BLSMemory keywords, docs…
johnh2o2 Sep 4, 2026
dfea493
BLS: include the qmax box in the fast-path q ladder; validate noverla…
johnh2o2 Sep 4, 2026
c1331ed
Merge p1-ls: NFFT psi tables, grid sizing, epoch subtraction, multiha…
johnh2o2 Sep 4, 2026
80c166b
Merge p1-lrt: NUFFT-LRT epoch handling, automatic epoch grid, Detecto…
johnh2o2 Sep 4, 2026
1649567
Merge p1-ce: brightest-bin clamp, symmetric weighted truncation, doub…
johnh2o2 Sep 4, 2026
81f5ca6
Merge p1-bls: 64-bit fold index, per-batch bin sizing, per-frequency …
johnh2o2 Sep 4, 2026
b756bb1
CHANGELOG: BLS, Lomb-Scargle/NFFT, conditional entropy and NUFFT-LRT …
johnh2o2 Sep 4, 2026
56530b9
CHANGELOG: quote the |ghat| and |GPU - reference| notation so rst doe…
johnh2o2 Sep 4, 2026
ad7681a
LS/NFFT: raw NFFTMemory docstring and a term-wise check_k0 first-mode…
johnh2o2 Sep 4, 2026
28099cb
CE: preallocate + large_run/run(freqs=None), shared-memory limit chec…
johnh2o2 Sep 4, 2026
1a1b762
BLS/LRT/docs: fold-precision section, ignored-kwarg warning, LRT dura…
johnh2o2 Sep 4, 2026
323a895
Input validation on every public entry point (defect 23, input-valida…
johnh2o2 Sep 4, 2026
7d9c8f9
NFFT: validate nfft_adjoint_async's own scalars (defect 23 follow-up)
johnh2o2 Sep 4, 2026
f92c677
Input validation: skip the redundant grid re-check, tidy the new tests
johnh2o2 Sep 4, 2026
f36c013
Docs: cross-reference the new input-validation rules from every metho…
johnh2o2 Sep 4, 2026
1494945
CE test: use a positive trial frequency in the weighted-histogram check
johnh2o2 Sep 4, 2026
9c5b0f3
NFFT: minimum_frequency may be negative (fix the defect-23 follow-up …
johnh2o2 Sep 4, 2026
7aabd6d
tests: do not import pycuda.autoinit (it fights cuvarbase's lazy prim…
johnh2o2 Sep 4, 2026
4ff828c
Merge p1-final: cross-cutting input validation (defect 23) and the ve…
johnh2o2 Sep 4, 2026
945d5f0
Phase 1 close-out: the seven minor items from the final verification
johnh2o2 Sep 4, 2026
e02d8f4
BLS: route compile_bls and compile_sparse_bls through the kernel LRU …
johnh2o2 Sep 4, 2026
2eff9f6
BLS: eebls_gpu_fast_adaptive and eebls_transit(use_optimized=True) us…
johnh2o2 Sep 4, 2026
585d656
CE: size the use_fast grid from the device, not from the shared-memor…
johnh2o2 Sep 4, 2026
61ab589
BLS: page-lock only the transfer buffers and pool BLSMemory on the na…
johnh2o2 Sep 5, 2026
21161a9
LS: numpy reductions instead of Python builtins on the host path (LS-1)
johnh2o2 Sep 5, 2026
c2fa53f
CE/PDM: no unused histogram on the fast path, reuse PDM's device buff…
johnh2o2 Sep 5, 2026
4a03f46
BLS: einsum instead of np.dot in the remaining per-light-curve prolog…
johnh2o2 Sep 5, 2026
42516b8
TLS-1: tls_transit builds only the duration bounds, not the table
johnh2o2 Sep 5, 2026
a7d0960
TLS-2: run tls_search_batch's per-lightcurve statistics sequentially
johnh2o2 Sep 5, 2026
435d29e
TLS-3: memoize the fast kernel's template tables
johnh2o2 Sep 5, 2026
3d07ae2
LS: reuse memory, plans and the grid check across batched calls (LS-4)
johnh2o2 Sep 5, 2026
fdb847b
LS: one stacked (nf, 2H, 2H) solve for the multiharmonic power (LS-5)
johnh2o2 Sep 5, 2026
a87d1be
BLS: vectorized solution re-phasing, chi2_0 from yy, cached scatter p…
johnh2o2 Sep 5, 2026
dce8c0b
BLS: solve the Keplerian frequency-grid recursion with numpy (BLS-4) …
johnh2o2 Sep 5, 2026
6e1cf0c
LS: key the batched memory cache off the per-call kwargs (LS-4 fix ro…
johnh2o2 Sep 5, 2026
bad3010
docs: memory reuse and float32 reproducibility in the Lomb-Scargle guide
johnh2o2 Sep 5, 2026
6b0d11f
Merge p2-bls: kernel-cache routing, fused adaptive path, memory pooli…
johnh2o2 Sep 5, 2026
bdab67b
Merge p2-tls: q_transit in tls_transit, no thread pool in the batch p…
johnh2o2 Sep 5, 2026
43026de
LS: close the two majors from the Phase 2 verification
johnh2o2 Sep 5, 2026
93c1059
Merge p2-ls: numpy host reductions, cached memory sets, stacked multi…
johnh2o2 Sep 5, 2026
58820f8
Merge p2-cepdm: occupancy-sized CE fast grid, skipped CE histogram, p…
johnh2o2 Sep 5, 2026
5e2890d
CE/PDM: the code-level minors from the Phase 2 verification
johnh2o2 Sep 5, 2026
2dd12d4
CHANGELOG: Phase 2 performance work, with the verifiers' corrections …
johnh2o2 Sep 5, 2026
1a532c7
Repo prune: delete the pre-1.0 process material listed in RELEASE_REA…
johnh2o2 Sep 5, 2026
fd25ce9
Repo prune: move the GTLS/TLS-cost writeups to docs/, PROFILE_RANKING…
johnh2o2 Sep 5, 2026
1a2e234
Repo prune: keep only the base_envfix/opt4_chunk parity dumps (8 of 2…
johnh2o2 Sep 5, 2026
ef752c2
docs: delete the TLS_GPU process docs and the Dockerfile with its men…
johnh2o2 Sep 5, 2026
47c49f2
scripts: merge the benchmark and RunPod how-tos into scripts/README.m…
johnh2o2 Sep 5, 2026
c21a93c
Repo prune: analysis/README.md index and the exec bit on every sheban…
johnh2o2 Sep 5, 2026
b1cbafa
docs: phi0 is reported on the original input timescale (bls.rst)
johnh2o2 Sep 5, 2026
1e563e3
docs: INSTALL/CONTRIBUTING/README consistency (CUDA 12.4, 3.9-3.14, p…
johnh2o2 Sep 5, 2026
b937ecf
NFFT: precomp_psi=False grids with the inline-psi kernel instead of r…
johnh2o2 Sep 5, 2026
09eaed7
LS: Baluev d_K in batched_run_const_nfreq follows the per-call nharmo…
johnh2o2 Sep 5, 2026
68d03a8
CHANGELOG: the two Phase 2 verification carry-over fixes (NFFT, LS)
johnh2o2 Sep 5, 2026
68cf407
Packaging: pyproject.toml is the single source of metadata
johnh2o2 Sep 5, 2026
d518780
Remove the orphan wavelet.cu kernel and guard the kernel inventory
johnh2o2 Sep 5, 2026
7015bbb
Repo metadata: track the gate logs, add .gitattributes and .mailmap
johnh2o2 Sep 5, 2026
f3bc3bf
CI: 3.9-3.14 matrix, read-only permissions, wheel/sdist legs, docs job
johnh2o2 Sep 5, 2026
8cdd2aa
CHANGELOG/release notes: Phase 3 packaging, CI and repo-metadata entries
johnh2o2 Sep 5, 2026
9986ae3
analysis: point the two kept records at the moved GTLS/TLS-cost docs …
johnh2o2 Sep 5, 2026
1c55f0d
tests: move the pycuda-stub conftest into cuvarbase/tests (ships in t…
johnh2o2 Sep 5, 2026
f4de96d
Runbook: rewrite for the Sep-2026 release sequence (Phases 4-7)
johnh2o2 Sep 5, 2026
00c93d1
Release staging: refresh the @astrobatty coordination draft for Septe…
johnh2o2 Sep 5, 2026
bd1ee3c
Release staging: draft the @xiaziyna message about NUFFT-LRT in 1.0
johnh2o2 Sep 5, 2026
9a48799
Release staging: update the issue-sweep drafts for the Sep-2026 state
johnh2o2 Sep 5, 2026
d6ea7bb
API freeze: frozen top-level namespace, NUFFT-LRT quarantined
johnh2o2 Sep 5, 2026
972dbb5
tests: wheel-safe layout checks, scoped nfft importorskip, no swallow…
johnh2o2 Sep 5, 2026
b26b37a
docs: release notes -- Ada/V100 TLS ratios, measured cache numbers, L…
johnh2o2 Sep 5, 2026
da0fbcf
docs: BENCHMARK_RESULTS -- July 2026 BLS survey-throughput table, 5-1…
johnh2o2 Sep 5, 2026
652253e
docs: Sphinx -- nufft_lrt (experimental) and base.context on the API …
johnh2o2 Sep 5, 2026
f3fa360
docs: NUFFT-LRT page as docs/source/nufft_lrt.rst; CHANGELOG line edi…
johnh2o2 Sep 5, 2026
24b45db
API freeze: compatibility shims per decision D3 (kept for 1.x, remove…
johnh2o2 Sep 5, 2026
d1134ba
API freeze: remove what never shipped (decision D3) + the three 0.2.5…
johnh2o2 Sep 5, 2026
8aef1e1
docs: do not index the lazily re-exported package members on the API …
johnh2o2 Sep 5, 2026
a6a8b15
Repo prune: verifier fixes (NUFFT-LRT run pointer, archive notes, not…
johnh2o2 Sep 5, 2026
680fada
API freeze: keyword-only markers on the 1.0-new signatures (finding 136)
johnh2o2 Sep 5, 2026
d6fcc33
API freeze: explicit __all__ in every user-facing module (finding 135)
johnh2o2 Sep 5, 2026
082c8a7
tests: port the stranded script checks, new entry-point tests, cufinu…
johnh2o2 Sep 5, 2026
3fba9fc
Source hygiene: unused imports/locals, 'resource', shebang, mutable d…
johnh2o2 Sep 5, 2026
3923e95
API freeze: docstring defaults pinned against signatures, tls_transit…
johnh2o2 Sep 6, 2026
3963260
Merge p3-api: API freeze, NUFFT-LRT quarantine, shims, removals, keyw…
johnh2o2 Sep 6, 2026
71f4da3
Merge p3-carry: precomp_psi=False uses the inline-psi kernel; Baluev …
johnh2o2 Sep 6, 2026
b28c7e9
Merge p3-tests: packaged conftest, wheel-safe tests, ported script ch…
johnh2o2 Sep 6, 2026
7691ab2
Merge p3-pkg: pyproject-only packaging (setuptools>=77, SPDX license,…
johnh2o2 Sep 6, 2026
09a264b
Merge p3-docs: docs consistency, NUFFT-LRT rst page, Sphinx landing/A…
johnh2o2 Sep 6, 2026
1779e62
Merge p3-runbook: runbook rewritten for the Sep-2026 sequence; contri…
johnh2o2 Sep 6, 2026
d644fc7
Merge p3-prune: repo prune per RELEASE_READINESS section 3 (archive t…
johnh2o2 Sep 6, 2026
66203c8
Repo prune: drop the three gate logs that landed in directories the p…
johnh2o2 Sep 6, 2026
1553165
Phase 3 integration: tests for the frozen signatures, docstring rst f…
johnh2o2 Sep 6, 2026
0f88e68
NUFFT-LRT: reject an empty systematics basis before device work (find…
johnh2o2 Sep 6, 2026
4d345e9
ci_wheel_smoke: compare the imported package against the checkout roo…
johnh2o2 Sep 6, 2026
3ff42e9
NUFFT-LRT: one matched-filter reduction shared by run() and the tests…
johnh2o2 Sep 6, 2026
2a9f9e9
NUFFT-LRT validation harness: the null std is a calibration constant,…
johnh2o2 Sep 6, 2026
d313d12
docs: the pre-fix LRT campaign also ran at the old sigma=2 default (f…
johnh2o2 Sep 6, 2026
0420dcd
analysis: mark the archived vsu.py repro as no longer runnable at the…
johnh2o2 Sep 6, 2026
690e950
CHANGELOG: NUFFT-LRT sub-bullets for findings 31, 32, 34
johnh2o2 Sep 6, 2026
bd1cb33
LS: validate the shared grid before the kernel compile in batched_run…
johnh2o2 Sep 6, 2026
579e9a7
test_kernel_drift: see extern "C"/prefixed/indented kernels; prove th…
johnh2o2 Sep 6, 2026
3d1a999
TLS: require dy, validate n_durations on both paths, reject unknown k…
johnh2o2 Sep 6, 2026
e99d7af
TLS: state precisely what the template-table cache does without batma…
johnh2o2 Sep 6, 2026
345ac1e
LS/NFFT: reject a per-call use_double that differs from the process p…
johnh2o2 Sep 6, 2026
c06e2a6
BLS: host q ladder mirrors the device's float32 dnbins (review findin…
johnh2o2 Sep 6, 2026
e0f0665
CE: reject use_fast=True with compute_log_prob=True (review idx 6)
johnh2o2 Sep 6, 2026
e7bb23f
TLS docs: one consistent account of the shipped statistics (review id…
johnh2o2 Sep 6, 2026
0a08f2b
CE: reject per-call option kwargs that disagree with a supplied memor…
johnh2o2 Sep 6, 2026
b477546
BLS: eebls_transit solution re-scan walks the kernel's own bin ladder…
johnh2o2 Sep 6, 2026
51183ef
test_input_validation: compare against the validator-free computation…
johnh2o2 Sep 6, 2026
f6a9d1d
scripts/check_release_gate.py: executable bit (shebang'd script conve…
johnh2o2 Sep 6, 2026
8e2c6fb
Release notes: 'git fetch --tags --force' line; the test count is wri…
johnh2o2 Sep 6, 2026
9d4439e
Release runbook + staging drafts: the runbook verifier's open issues
johnh2o2 Sep 6, 2026
95d8473
BLS tests: tighten the top-K q bound to the floor ladder and assert t…
johnh2o2 Sep 6, 2026
6e653f4
PDM/CE: keep a private copy of the grid used for re-upload detection …
johnh2o2 Sep 6, 2026
422a052
PDM: reject a (t, y) 2-tuple with a message naming the expected shape…
johnh2o2 Sep 6, 2026
5056341
NFFT: compute the integer first mode k0 on the host and pass it to nf…
johnh2o2 Sep 6, 2026
0261ee0
LS: document why the memory-reuse test is bitwise, and the python_dir…
johnh2o2 Sep 6, 2026
20d9a9f
BLS: single_bls rejects q outside [0, 1] (review finding 38)
johnh2o2 Sep 6, 2026
8d30db3
BLS docs/CHANGELOG: one set of grid-vectorization numbers, CE atomics…
johnh2o2 Sep 6, 2026
8a69cd2
CE/PDM: reject a constant y in the input validators (review idx 17)
johnh2o2 Sep 6, 2026
6268df5
PDM: disclose that zero legacy weights are rejected (review idx 10)
johnh2o2 Sep 6, 2026
e07c6fb
Merge p3fix-bls: review findings on the Sep-4 work folded in (Phase 3)
johnh2o2 Sep 6, 2026
9699113
Merge p3fix-ls: review findings on the Sep-4 work folded in (Phase 3)
johnh2o2 Sep 6, 2026
cd4097e
Merge p3fix-cepdm: review findings on the Sep-4 work folded in (Phase 3)
johnh2o2 Sep 6, 2026
2944c32
Merge p3fix-tls: review findings on the Sep-4 work folded in (Phase 3)
johnh2o2 Sep 6, 2026
cd5fe5e
Merge p3fix-lrt: review findings on the Sep-4 work folded in (Phase 3)
johnh2o2 Sep 6, 2026
5bc2471
Merge p3fix-meta: review findings on the Sep-4 work folded in (Phase 3)
johnh2o2 Sep 6, 2026
09fd819
Phase 3 integration: cross-cutting follow-ups from the review-fix ver…
johnh2o2 Sep 6, 2026
ded69f0
README flip for the 1.0.0 release (last Phase 3 content commit)
johnh2o2 Sep 6, 2026
3c44cf0
Runbook: the Phase 3 GPU follow-ups Phase 5 must run on the pod
johnh2o2 Sep 6, 2026
0acebc5
Phase 4: NUFFT-LRT validation harness for the re-validation campaign
johnh2o2 Sep 6, 2026
a3ff64f
Phase 4: NUFFT-LRT re-validation campaign of 2026-09-06 (A40), archived
johnh2o2 Sep 6, 2026
652cdbf
Phase 4 / D1: NUFFT-LRT stays EXPERIMENTAL in 1.0 -- validated, API n…
johnh2o2 Sep 6, 2026
200c6ba
Queue: NUFFT-LRT promotion path (Phase 4 option C) and the deferred P…
johnh2o2 Sep 6, 2026
8d7eebf
Release notes: record Phase 4 GPU counts before the 1.0 freeze
johnh2o2 Sep 6, 2026
6700286
Release gate record for v1.0.0 at 8d7eebf (2026-09-06)
johnh2o2 Sep 6, 2026
97284b9
Document measured transit speedups and recovery benchmarks
johnh2o2 Sep 9, 2026
1c3d681
Clean release repository and simplify benchmark figure
johnh2o2 Sep 9, 2026
884be76
Publish independent TLS sensitivity study and qualified speed benchmarks
johnh2o2 Sep 9, 2026
b29a417
Optimize sparse TLS traversal and document measured accuracy limits
johnh2o2 Sep 9, 2026
b834d4e
Make observation-level TLS the default and publish audited benchmarks
johnh2o2 Sep 10, 2026
fc77206
Retain baseline TLS and archive the reviewed survey results
johnh2o2 Sep 28, 2026
504db5c
Monitor background jobs and resume actionable failures
johnh2o2 Sep 28, 2026
3c1b5c8
Prepare version 1.0.1 and its verified release artifacts
johnh2o2 Sep 28, 2026
56a71d2
Merge master into the validated 1.0.1 release candidate
johnh2o2 Sep 28, 2026
938e687
Document the 1.0.1 source review and deferred publication
johnh2o2 Sep 28, 2026
a03eb75
Read complete process commands when monitoring services on Linux
johnh2o2 Sep 28, 2026
cc09f33
Move complete benchmark evidence to verified external archives
johnh2o2 Sep 28, 2026
e8f90d2
Document the preserved history and verify archive safeguards
johnh2o2 Sep 28, 2026
720039c
Link the historical timing figure to its preserved source history
johnh2o2 Sep 28, 2026
6b6c489
Point publication handoff to the current history-cleanup delivery
johnh2o2 Sep 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
53 changes: 53 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# EditorConfig is awesome: https://EditorConfig.org

# top-most EditorConfig file
root = true

# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true
charset = utf-8
trim_trailing_whitespace = true

# Python files
[*.py]
indent_style = space
indent_size = 4
max_line_length = 88

# CUDA files
[*.cu]
indent_style = space
indent_size = 4
max_line_length = 100

# Markdown files
[*.md]
trim_trailing_whitespace = false
max_line_length = off

# YAML files
[*.{yml,yaml}]
indent_style = space
indent_size = 2

# Configuration files
[*.{json,toml,cfg}]
indent_style = space
indent_size = 2

# Shell scripts
[*.sh]
indent_style = space
indent_size = 2

# Makefiles require tabs
[Makefile]
indent_style = tab

# reStructuredText
[*.rst]
indent_style = space
indent_size = 3
max_line_length = off
10 changes: 10 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
* text=auto eol=lf
*.npz binary
*.png binary
*.jpg binary
*.whl binary
*.tar.gz binary

# Frozen receipts include byte hashes; retain their line endings and whitespace.
benchmarks/results/tls_survey_2026-09-10/** -text -whitespace
docs/validation/release-prepared-20260927/** -text -whitespace
186 changes: 186 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,186 @@
name: Tests

on:
push:
pull_request:

permissions:
contents: read

jobs:
# CPU test suite: cuvarbase/tests/conftest.py stubs pycuda when it is
# not installed, so the pure-CPU tests (sparse BLS ground truth, TLS
# grids/models/stats, NUFFT-LRT algorithm, frequency grids, kernel
# inventory, lazy-import contract, input validation) run and every
# test that touches a device skips. GPU kernels are validated on a
# CUDA pod before releases (see tools/README.md).
test-cpu:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]

steps:
- uses: actions/checkout@v4

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

# The `test` extra of pyproject.toml is listed by hand here because
# installing `.[test]` would pull in the runtime dependency pycuda,
# which cannot build without a CUDA toolkit (no binary wheels), so
# the runners have no way to satisfy it. Keep this line in step with
# [project.optional-dependencies] test. batman-package is a small C
# extension that builds from sdist in well under a minute.
- name: Install test dependencies
run: |
python -m pip install --upgrade pip
pip install "numpy>=1.22" "scipy>=1.8" pytest nfft astropy batman-package transitleastsquares

- name: Run CPU test suite (GPU tests skip via stubbed pycuda)
run: |
# testpaths / -rs / --strict-markers come from [tool.pytest.ini_options]
python -m pytest -rs -v --tb=short

release-tools:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Install host dependencies
run: python -m pip install numpy scipy matplotlib pytest batman-package
- name: Check benchmark qualification and monitoring recovery
run: python -m pytest -q benchmarks/tls_survey tools/test_watch_jobs.py tools/test_benchmark_archive.py
- name: Keep raw benchmark evidence out of Git
run: python tools/check_repository_artifacts.py

# Packaging smoke test: build the sdist and wheel, check the metadata,
# install each artifact into a clean environment (pycuda absent) and
# import/run it from OUTSIDE the source tree. This catches
# missing-subpackage, missing-package-data and metadata bugs that
# source-tree testing hides.
package-smoke:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.11"

- name: Build sdist and wheel
run: |
python -m pip install --upgrade pip build twine
python -m build
ls -l dist/
# setup.cfg's universal=1 once mis-tagged the wheel py2.py3
ls dist/cuvarbase-*-py3-none-any.whl

- name: Check metadata (twine)
run: |
python -m twine check --strict dist/*

- name: Install wheel (no deps), smoke-import, run the shipped tests
run: |
python -m venv /tmp/smoke-wheel
/tmp/smoke-wheel/bin/pip install --upgrade pip
/tmp/smoke-wheel/bin/pip install "numpy>=1.22" "scipy>=1.8" astropy nfft pytest
/tmp/smoke-wheel/bin/pip install --no-deps dist/*.whl
/tmp/smoke-wheel/bin/python tools/ci_wheel_smoke.py
# The shipped test package must pass from the installed wheel,
# away from the checkout (the command INSTALL.rst advertises).
mkdir -p /tmp/pyargs-run && cd /tmp/pyargs-run
/tmp/smoke-wheel/bin/python -m pytest --pyargs cuvarbase -rs -p no:cacheprovider

- name: Install sdist (no deps) and smoke-import
run: |
python -m venv /tmp/smoke-sdist
/tmp/smoke-sdist/bin/pip install --upgrade pip
/tmp/smoke-sdist/bin/pip install "numpy>=1.22" "scipy>=1.8"
/tmp/smoke-sdist/bin/pip install --no-deps dist/*.tar.gz
/tmp/smoke-sdist/bin/python tools/ci_wheel_smoke.py

- name: Upload dist/
uses: actions/upload-artifact@v4
with:
name: dist
path: dist/
if-no-files-found: error

# Docs build: autodoc imports the package with pycuda mocked
# (conf.py autodoc_mock_imports), so the API pages build without a
# GPU. The plot-directive figures DO need a CUDA device; on the runner
# they fail as "Exception occurred in plotting ..." warnings and the
# pages keep their source listings. Those are the only warnings
# tolerated -- any other WARNING/ERROR (bad docstring markup, broken
# cross-references, missing toctree entries) fails the job.
docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.11"

- name: Install docs dependencies
run: |
python -m pip install --upgrade pip
pip install "numpy>=1.22" "scipy>=1.8" -r docs/requirements.txt

- name: Build HTML docs
run: |
python -m sphinx -b html -E -a -w warnings.log docs/source docs/build/html

- name: Fail on any warning other than the expected plot-directive GPU failures
run: |
# -w logs each warning as "<file>:<line>: WARNING: <text>" (or
# ERROR:/CRITICAL:); the plot directive's traceback continuation
# lines carry no such prefix. Keep only the diagnostic lines that
# are not the GPU-less "Exception occurred in plotting <name>".
grep -E ': (WARNING|ERROR|CRITICAL): ' warnings.log \
| grep -v -E ': WARNING: Exception occurred in plotting ' > unexpected.log || true
if [ -s unexpected.log ]; then
echo "::error::unexpected Sphinx warnings:"
cat unexpected.log
exit 1
fi
echo "docs build clean (plot-directive GPU failures only)"

- name: Upload HTML
uses: actions/upload-artifact@v4
with:
name: docs-html
path: docs/build/html/

lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.11"

- name: Install linting tools
run: |
python -m pip install --upgrade pip
pip install flake8

- name: Lint with flake8 (errors only)
run: |
# Syntax errors, undefined names and invalid escape sequences
# (W605: a SyntaxError on future Pythons) are real failures
flake8 cuvarbase --count --select=E9,F63,F7,F82,W605 --show-source --statistics

- name: Lint with flake8 (style, advisory)
run: |
flake8 cuvarbase --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
25 changes: 18 additions & 7 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ coverage.xml
*.mo
*.pot

# Django stuff:
# Runtime logs
*.log

# Sphinx documentation
Expand All @@ -63,22 +63,33 @@ target/

.ipynb_checkpoints
.idea/*
tools/repos
Untitled*.ipynb

# vim backups
*.swp

# LaTeX
*.aux
*.pdf
!docs/figures/*.pdf

# misc
scripts/saved_results
.DS_Store
work/
*.png
# ... except published documentation and benchmark figures
!docs/**/*.png
*.gif
*HAT*txt
testing/*
custom_test_ce.py

# RunPod configuration (contains credentials)
.runpod.env

# Local service credentials
.env
.env.*
!.env.example
!.env.sample

# Downloaded benchmark archives and restored validation output
.benchmark-archives/
docs/validation/**/*.log
docs/validation/**/*.xml
11 changes: 11 additions & 0 deletions .mailmap
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Canonical author identities for git shortlog / blame.
John Hoffman <johnh2o2@gmail.com> John Hoffman <johnhoffman@Johns-MacBook-Pro.local>
John Hoffman <johnh2o2@gmail.com> John <johnh2o2@gmail.com>
John Hoffman <johnh2o2@gmail.com> John Hoffman <jah5@princeton.edu>
John Hoffman <johnh2o2@gmail.com> John <jah5@princeton.edu>
John Hoffman <johnh2o2@gmail.com> John Hoffman <johnhoffman@fb.com>
John Hoffman <johnh2o2@gmail.com> John <johnhoffman@fb.com>
John Hoffman <johnh2o2@gmail.com> John Hoffman <john.hoffman@xaxis.com>
John Hoffman <johnh2o2@gmail.com> John Hoffman <john.hoffman@strong.io>
Attila Bódi <astrobatty@gmail.com> astrobatty <astrobatty@gmail.com>
Michael Coughlin <coughlim@carleton.edu> Michael Coughlin <michael.coughlin@ligo.org>
21 changes: 21 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Long-running cuvarbase work

The user has requested automatic monitoring so they do not have to return to
ask whether a background job failed. Follow [docs/JOB_MONITORING.md](docs/JOB_MONITORING.md).

- Before leaving a long-running or paid cloud job unattended, register it with
the persistent job monitor and verify its budget guard and collector are live.
- A process exiting, an archive copying, or a finalizer completing is not enough
to call the work successful. Inspect required step results and scientific
qualifications separately from preservation and shutdown receipts.
- Handle queued monitoring events in this conversation: acknowledge receipt,
inspect the checkpoint, and continue already-authorized work. No new permission
is required for routine fixes within existing scope and budgets.
- Preserve completed and partial experiments. Never silently replace failed
numerical results, weaken their gates, or rerun them until they pass. Record
operational repairs separately and resume from verified checkpoints.
- Verify the actual command's environment and package import before expensive
stages. Source-tree pytest and a standalone script can have different import
paths; install the intended wheel or explicitly use the intended source path.
- Keep final release review open until required validation and backup checks
have been reviewed. Acknowledge failures honestly rather than marking them done.
Loading
Loading