Skip to content

research: root-cause the measure-thin solver branch flips in pixelized likelihoods #377

Description

@Jammy2211

Overview

Pixelized-source likelihoods contain deterministic single-float-input branch flips (width < 1e-15 in the parameter; ΔLL ≈ 1.577e-3 on the interferometer sparse 8×8 config, ~14 on imaging 28×28; same ΔLL for orthogonal parameter directions on a config; present under reg.Constant AND reg.Adapt; surface exactly linear elsewhere). Discovered during the kernel-CDF certification (#373, probes in that thread); they poison single-step FD (the jax_grad harness now runs an FD-step-sweep) and perturb any sampler landing on a bad float. Prime suspect: positive-only solver (PDIP/fnnls) iteration/tie-break knife-edges; related knob: nnls_solver_tol (Settings, default off, PR#371).

Plan

  • Reproduce at the known bad input on current main (interferometer sparse variant-D config, gamma_2 = base − 1e-8; probe pattern on feat: kernel-density CDF transform for adaptive rectangular mesh #373).
  • Instrument the solve: diff iteration count / active set / solution vector / residual between the bad float and adjacent clean floats; locate the branch point.
  • Mechanism tests: does nnls_solver_tol move/remove the flips; does the unconstrained solve show any; does flip magnitude track tolerance.
  • Deliverable: mechanism + recommendation here (tolerance/tie-break fix, documented LL accuracy floor, or won't-fix-documented). Small clearly-safe fix may ship behind the normal gates; anything larger files as its own task.

Read-only research on main (no worktree claim); probes in scratch; findings land here.

Original Prompt

PyAutoMind/research/autoarray/solver_branch_flips.md (verbatim in repo).

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions