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

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
@Jammy2211 Jammy2211 removed the pending-release PR queued for the next release build label Sep 4, 2026
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