Skip to content

unwrap(whirlwind): expose the options added since the backend landed - #742

Open
scottstanie wants to merge 2 commits into
isce-framework:mainfrom
scottstanie:upstream-ww-options
Open

unwrap(whirlwind): expose the options added since the backend landed#742
scottstanie wants to merge 2 commits into
isce-framework:mainfrom
scottstanie:upstream-ww-options

Conversation

@scottstanie

@scottstanie scottstanie commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

WhirlwindOptions has not kept up with whirlwind's own API, so several knobs have been unreachable from a dolphin config. This adds them, each keeping whirlwind's own default, so behavior is unchanged unless a config sets one.

Connected components

Components are now always grown by whirlwind's SNAPHU-style ambiguity-wiggle algorithm with ThickenCosts on, which is what production SNAPHU does. That is pinned at the call site rather than left to whirlwind's defaults, so a change upstream cannot silently alter dolphin's labels, and the algorithm is deliberately not a config option.

conncomp_min_coherence and conncomp_reliability are new and tune how conservatively that grow cuts.

This does mean the pre-existing cost_threshold, conncomp_sigma and conncomp_cycle_prob have nothing left to tune — they only ever fed whirlwind's legacy coherence-cost labeling, which dolphin no longer selects. They are kept on the model so existing configs still load, and documented as unused. Happy to delete them outright instead if a breaking config change is acceptable.

Phase solve

  • bridge — give disjoint components a consistent integer cycle.
  • connect_gaps / connect_gaps_max_px — draw phase paths across bounded runs of invalid pixels before the solve, then drop those synthetic pixels from both outputs, so the solver can pick a relative 2π level between regions that would otherwise be solved independently. Off by default. This is what levels NISAR's fixed-PRF sub-swaths.
  • goldstein_alpha / goldstein_psize — whirlwind's internal Goldstein filter.

Double pre-processing fix

whirlwind runs Goldstein filtering and PS interpolation itself, in Rust. run_goldstein / run_interpolation were running dolphin's Python pre-process and leaving whirlwind's own pass available, so a config that asked for Goldstein filtered the same interferogram twice. Those requests now route into whirlwind's versions instead, with preprocess_options.alpha taking precedence over goldstein_alpha.

Notes

🤖 Generated with Claude Code

https://claude.ai/code/session_01GZgYKTv2qVefPeX9S7a6BN

`WhirlwindOptions` has not kept up with whirlwind's own API, so several
knobs were unreachable from a dolphin config. Adds them, with whirlwind's
own defaults:

- `conncomp_algorithm`, `conncomp_min_coherence`, `conncomp_reliability`,
  `conncomp_thicken` - the SNAPHU-style component grow (ww's default)
  and how conservatively it cuts. The older coherence-cost grow is still
  reachable as `conncomp_algorithm="linear"`, which is what the existing
  `cost_threshold` / `conncomp_sigma` / `conncomp_cycle_prob` apply to.
- `bridge` - give disjoint components a consistent integer cycle.
- `connect_gaps` / `connect_gaps_max_px` - draw phase paths across
  bounded runs of invalid pixels before the solve, then drop those
  synthetic pixels from both outputs, so the solver can pick a relative
  2pi level between otherwise-independent regions. Off by default.
- `goldstein_alpha` / `goldstein_psize` - ww's internal Goldstein filter.

whirlwind runs Goldstein filtering and PS interpolation itself, in Rust,
so `run_goldstein` / `run_interpolation` now route through those instead
of dolphin's Python pre-process. Previously both ran, filtering the same
interferogram twice.

Requires whirlwind >= 0.10.0 for `connect_gaps`; whirlwind stays an
optional dependency.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GZgYKTv2qVefPeX9S7a6BN
dolphin always wants ww's SNAPHU-style ambiguity-wiggle grow with
ThickenCosts on, which is what production SNAPHU does, so there is no
reason to let a config pick anything else. Drops `conncomp_algorithm`
and `conncomp_thicken` from `WhirlwindOptions` and pins both at the call
site, rather than relying on ww's defaults, so a change upstream cannot
silently alter dolphin's labels.

That leaves `cost_threshold`, `conncomp_sigma` and `conncomp_cycle_prob`
with nothing to tune: they only ever fed ww's legacy coherence-cost
labeling. They are kept on the model so existing configs still load, but
are documented as unused and are no longer passed through.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GZgYKTv2qVefPeX9S7a6BN
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