Skip to content

Run unpreconditioned LSMR through mlsmr - #485

Merged
schroedk merged 5 commits into
mainfrom
refactor/one-mlsmr
Nov 1, 2026
Merged

schroedk merged 5 commits into
mainfrom
refactor/one-mlsmr

Conversation

@schroedk

Copy link
Copy Markdown
Collaborator

Stacked on #482.

schwarz_precond::lsmr and its plain Golub-Kahan stream are removed. mlsmr with the new IdentityPrecond { dim } runs LSMR without a preconditioner, and within's unpreconditioned path (PreconditionerConfig::Off, or Additive with no factor pair) now uses it.

IdentityPrecond has the same name and shape as faer's, so #365 can swap in faer's type without touching callers.

Breaking:

  • schwarz_precond::lsmr is removed.

Tests: all Rust tests pass (502), including doctests; clippy is clean. pytest not run (within-py's API is unchanged).

Benchmark (1M obs, 3 FE, best-of runs against the base, with a same-code control): unpreconditioned 200 iterations 0.825 s vs 0.833–0.846 s on 1 thread, parity on 8 threads; additive, batch and adaptive unchanged.

@schroedk
schroedk added this pull request to stack #487 October 31, 2026 20:59
Base automatically changed from feat/approx-chol-0.7 to main November 1, 2026 14:52
…lsmr

lsmr and its Golub-Kahan stream are deleted; within's unpreconditioned path runs mlsmr with the identity metric.
@schroedk
schroedk marked this pull request as ready for review November 1, 2026 14:57
…perator

With the plain Golub-Kahan stream gone, the lsmr-vs-mlsmr(identity) cases ran the
same path twice. Delete them, replace the IdentityOp fixture with IdentityPrecond,
and fix the module doc's dangling lsmr link.
@schroedk
schroedk merged commit 9e23466 into main Nov 1, 2026
5 checks passed
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