Skip to content

fix: interferometer LM objective double-counting + warm start (mid-tier certified)#629

Merged
Jammy2211 merged 1 commit into
mainfrom
feature/potential-correction-uv-campaign
Jul 17, 2026
Merged

fix: interferometer LM objective double-counting + warm start (mid-tier certified)#629
Jammy2211 merged 1 commit into
mainfrom
feature/potential-correction-uv-campaign

Conversation

@Jammy2211

Copy link
Copy Markdown
Collaborator

Summary

Campaign-driven fix (#627, parent #623): the interferometer iterative engine's normal-equation objective double-counted the state's δψ — once through the re-traced lens, once as the linear G·δψ model term. Invisible from cold starts (second-order small at δψ≈0); a warm start from the certified one-shot solution exposed it as active cancellation (δκ corr −0.83). Three-part fix: χ² and the Gauss–Newton gradient use the source block only (residual d − T·f(ψ₀+δψ)·s; JᵀC⁻¹r = D − F·[s|0]); the evidence re-optimization's linear δψ output is applied as an increment on the lens state; solve_joint_optimization(x0=) adds the warm start.

Certification result (mid tier, 9,920 vis, regime gate 3.19): warm-started iterative corr 0.839 / local 0.679 / peak 0.34″ / 9.2σ — statistically identical to the one-shot (0.841 / 0.682 / 0.34″ / 9.3σ). The visibility-space iterative engine now recovers at two tiers.

API Changes

Added x0= on solve_joint_optimization; behaviour fix in the LM objective (cold-start results change slightly — they were computed under the inconsistent objective).
See commit for detail.

Test Plan

  • Full test_autolens: 439 passed (identity test updated to the source-block model).
  • Campaign warm-start run: anti-correlation −0.83 → recovery +0.84.

Generated by the PyAutoLabs agent workflow.

…rm start

The normal-equation translation of the iterative objective treated the
state's dpsi as BOTH a lens perturbation (via the re-trace) and a
linear model term (G dpsi in chi2/gradient) — double-counting that a
warm start exposes as active cancellation of a correct correction
(dkappa corr -0.83). Fixed: chi2 and the Gauss-Newton gradient use the
source block only (residual d - T f(psi0+dpsi) s; J^T C^-1 r =
D - F [s|0]); the reg-optimization's linear dpsi output is applied as
an increment on the lens state. Adds solve_joint_optimization(x0=)
warm start. Campaign mid-tier certification: warm-started iterative
corr 0.839 / peak 0.34" / 9.2 sigma == one-shot (0.841/0.34"/9.3).

Part of PyAutoLens#627 (parent #623).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Jammy2211 Jammy2211 added the pending-release PR queued for the next release build label Jul 17, 2026
@Jammy2211
Jammy2211 merged commit 5659460 into main Jul 17, 2026
4 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pending-release PR queued for the next release build

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant