Skip to content

feat!: point-source position fit defaults to FitPositionsImagePairAllSolved (#678 phase C) - #686

Merged
Jammy2211 merged 2 commits into
mainfrom
feature/point-source-defaults-campaign
Aug 3, 2026
Merged

feat!: point-source position fit defaults to FitPositionsImagePairAllSolved (#678 phase C)#686
Jammy2211 merged 2 commits into
mainfrom
feature/point-source-defaults-campaign

Conversation

@Jammy2211

Copy link
Copy Markdown
Collaborator

Phase C of #678 — the defaults decision, driven by the phase B truth-anchored A100 evidence (autolens_profiling/results/notes/point_source_defaults_campaign.md).

API Changes

  • AnalysisPoint.fit_positions_cls default: FitPositionsImagePairRepeatFitPositionsImagePairAllSolved (all-to-all image pairing + analytically-solved source centre).
  • FitPointDataset.fit_positions_cls default: FitPositionsImagePair (Hungarian) → FitPositionsImagePairAllSolved (reconciled with the analysis default).
  • Models composing a centre-bearing profile (ps.Point / ps.PointFlux) with the new default now raise PointProfileMismatchException at likelihood evaluation, directing users to pair ps.PointSolved with the default or pass a free-centre fit class explicitly. Migration: ps.Pointps.PointSolved (recommended), or add fit_positions_cls=al.FitPositionsImagePairAll.

Also includes: register_tracer_classes now registers Galaxy with redshift as no_flatten aux (mirrors the cosmology registration) so jitted multi-plane PointSolver.solve(..., plane_redshift=...) can derive its static plane index — needed by the workspace cluster simulator's per-source solve.

Evidence for the default (headline numbers)

  • Missing-image discriminator (decisive): on a quad with one true image removed, PairAllSolved recovers truth (Δ=+1.3) while PairRepeatSolved mis-ranks it by +1.8×10⁵ logL — nearest-image pairing cannot leave an unobserved model image unmatched. On clean data the two are equivalent (Δ +2.85 vs +2.88; walls 147 s vs 163 s).
  • Solved centres: converge under gradient searches where free centres plateau (Prodigy Δ +1.95 solved vs −75.7 free post-logsumexp); posteriors not overconfident (einstein_radius σ 0.038 solved vs 0.027 free).

Gate status

The complementary spurious-extra-position arms are rerunning on the A100s at 8h walls (jobs 331885/331886) after 2h timeouts — hold merge until they land and the exp-3 verdict is confirmed on the issue. The missing-image arm alone already rules out repeat pairing as a default.

Verification

Full test_autolens/: 510 passed (3 new tests pin the new default and the loud mismatch). Downstream: autolens_workspace migration is ready as the phase D PR (pending-release); workspace_test scripts all pass explicit fit classes and are unaffected.

🤖 Generated with Claude Code

https://claude.ai/code/session_01DnTmLoJjJgMTze5uAbg1Jd

Jammy2211 and others added 2 commits August 1, 2026 13:57
…Solved

AnalysisPoint (was FitPositionsImagePairRepeat) and FitPointDataset (was
FitPositionsImagePair) now default to all-to-all pairing with the
analytically-solved source centre, per the #678 phase B truth-anchored A100
evidence: repeat pairing catastrophically mis-ranks truth when an observed
image is missing (delta +1.8e5 logL on the simple_missing discriminator)
while the all-to-all Occam mixture absorbs it; solved centres converge
under gradient searches where free centres plateau; solved posteriors are
not overconfident (einstein_radius sigma 0.038 vs 0.027 free).

Centre-bearing profiles (ps.Point / ps.PointFlux) used with the new default
raise PointProfileMismatchException loudly, directing users to pair
ps.PointSolved with the default or pass a free-centre fit class explicitly.
Tests pinning free-centre literals now pass their fit class explicitly; new
tests pin the default and the loud mismatch.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DnTmLoJjJgMTze5uAbg1Jd
…asses

Plane bookkeeping (Tracer.plane_index_via_redshift_from, reached by any
jitted PointSolver.solve(..., plane_redshift=...) on a multi-plane tracer)
compares redshifts to derive a static plane index, which is impossible when
redshift enters the trace as a leaf. Mirrors the cosmology no_flatten
registration; found fixing autolens_workspace cluster/simulator.py's
per-source plane_redshift solve (#678 phase D).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DnTmLoJjJgMTze5uAbg1Jd
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant