What’s new in v0.3.1#

Added in version v0.3.1.

v0.3.1 (2026-06-22) is a small point release. It adds one function, early, for a downstream project that needed a differentiable linear solve from a pip install before 0.4.0. Nothing else changed: no existing surface moved.

What is new#

  • maddening.core.solver_utils.ift_linear_solve (EXPERIMENTAL): a differentiable linear solve. It wraps lineax.linear_solve, so a node that solves a linear system in update() gets gradients through the solve without a custom_vjp of its own. The solvers are "gmres" (the default, with its restart set to min(N, 50)), "cg" (for a symmetric positive-definite matrix) and "dense". A preconditioner is passed on to lineax.

Dependencies#

  • A new [ift] extra installs lineax>=0.0.7. lineax is imported only when ift_linear_solve is called, so the base install did not change.

Its status in 0.4.0#

  • ift_linear_solve is still EXPERIMENTAL. 0.3.1 said it would become STABLE with AdaptiveNode; 0.4.0 promoted nothing to STABLE.

  • lineax is a base dependency in 0.4.0, and the [ift] extra installs nothing.

  • Its default atol is relative to the right-hand side (MADD-ANO-123). It was an absolute 1e-8.

  • 0.4.0 fixes two of its defects. With solver="cg" or "gmres", 0.3.1 could return a value that was not the solution, with no error (MADD-ANO-283), and for a right-hand side with a NaN or infinite entry it returned zeros with no error (MADD-ANO-155).

  • With solver="cg" it can still return NaN where lineax’s CG breaks down (MADD-ANO-264, partly resolved). Use solver="gmres".

The 0.4.0 release notes have the rest. The changelog’s [0.3.1] entry is the itemised list.