Two scientific inverse problems on real survey cadences. In both, the thing a diffusion prior is asked to supply is exactly the thing the data cannot determine — so the usual worry about hallucination becomes a quantity you can compute rather than a caveat you write.
starry, the field-standard forward modelWhat a starspot is, and why a rotating spotted star produces a periodic light curve. Drag a spot around a live star, change the inclination, and watch the brightness respond — including the case where the spot sits on the cap that never rotates into view.
Why two different periods can fit the same photometry exactly: folding at half the period when the star has two dips, and the one-cycle-per-day beat that ground-based observing bakes in. Includes what a periodogram is actually showing you.
Recover a stellar surface map from a rotational light curve. The degeneracy is analytically known, so every posterior splits exactly into what the data determined and what only the prior could supply.
The alias family is a genuinely multimodal posterior, and its mode positions are
predicted in advance by the survey's own measured lattice
f = a·f_sid + (b/4)·f_sol.
Correlation between a posterior's null-space component and the true null-space component, on identical data (PnP-DM). Read across the rows.
| true surface | generic prior | spot-informed prior | verdict |
|---|---|---|---|
| spotted | +0.017 | +0.436 | legitimate — real hidden structure recovered |
| generic | −0.035 | +0.036 | inert — nothing recovered, no harm |
| out-of-distribution | −0.012 | −0.146 | hallucination — anti-correlated with truth |
conda env create -f environment.yml # torch 2.11+cu128 (RTX 5070 = sm_120) python scripts/nullspace_analysis.py # what the data can and cannot constrain python -m starspot.train --kind spotted # ~25 min each on an RTX 5070 python -m starspot.train --kind generic python scripts/prior_experiment.py # the prior swap python scripts/make_starspot_figures.py ./notebooks/render.sh # execute notebooks -> HTML + PDF ./scripts/build_site.sh # assemble this site under docs/
Both problems are registered in InverseBench's own interface — patches in
inversebench_patch/. The starspot problem runs against their
stock VPPrecond + SongUNet with no wrapper, and its
evaluator reports frac_null_power, rmse_constrained and
rmse_null so their harness can report how much of any reconstruction is
data-driven.
The surfaces and light-curve shapes are synthetic; the cadence and per-epoch uncertainties are real. No comparison against a published Doppler-imaging map has been made, so there is no external ground truth here. Nothing in this work resolves a spot map in the sense a reader might hope — that is the finding, not a shortfall of method. Every "fraction constrained" is a statement about a stated SNR threshold and a stated inner product (area-weighted L² on the sphere), both reported with the numbers.
Two claims were corrected during the work and the corrections are kept in the repository rather than quietly dropped: irregular sampling does not itself cost modes (diurnal clustering does), and the alias mask does not improve period recovery (the dominant failure is a harmonic, which no window mask can remove).