scimba_torch.numerical_solvers.pinn_preconditioners

Implementations of PINN preconditioners.

class AnagramPreconditioner(space, pde, **kwargs)[source]

Bases: MatrixPreconditionerPinn

Anagram preconditioner.

This preconditioner is based on the anagram method, which aims to improve convergence by transforming the problem into a more favorable form.

Parameters:
Keyword Arguments:

svd_threshold (float) – Threshold for singular value decomposition (default: 1e-6).

compute_preconditioning_matrix(labels, *args, **kwargs)[source]

Compute the preconditioning matrix using the main operator.

Parameters:
  • labels (Tensor) – The labels tensor.

  • *args (Tensor) – Additional arguments.

  • **kwargs – Additional keyword arguments.

Return type:

Tensor

Returns:

The preconditioning matrix.

compute_preconditioning_matrix_bc(labels, *args, **kwargs)[source]

Compute the boundary condition preconditioning matrix.

Parameters:
  • labels (Tensor) – The labels tensor.

  • *args (Tensor) – Additional arguments.

  • **kwargs – Additional keyword arguments.

Return type:

Tensor

Returns:

The boundary condition preconditioning matrix.

compute_preconditioning_matrix_ic(labels, *args, **kwargs)[source]

Compute the initial condition preconditioning matrix.

Parameters:
  • labels (Tensor) – The labels tensor.

  • *args (Tensor) – Additional arguments.

  • **kwargs – Additional keyword arguments.

Return type:

Tensor

Returns:

The initial condition preconditioning matrix.

compute_preconditioning_matrix_dl(*args, **kwargs)[source]

Computes the Gram matrix of the network for the given input tensors.

Parameters:
  • *args (Tensor) – Input tensors for computing the Gram matrix.

  • **kwargs – Additional keyword arguments.

Return type:

Tensor

Returns:

The computed Gram matrix.

assemble_right_member(data, res_l, res_r)[source]

Assemble the right-hand side of the equation.

Parameters:
  • data (tuple | dict) – Input data, either as a tuple or a dictionary.

  • res_l (tuple) – Left residuals.

  • res_r (tuple) – Right residuals.

Return type:

Tensor

Returns:

The assembled right-hand side tensor.

assemble_right_member_bc(data, res_l, res_r)[source]

Assemble the right-hand side for boundary conditions.

Parameters:
  • data (tuple | dict) – Input data, either as a tuple or a dictionary.

  • res_l (tuple) – Left residuals.

  • res_r (tuple) – Right residuals.

Return type:

Tensor

Returns:

The assembled right-hand side tensor for boundary conditions.

assemble_right_member_ic(data, res_l, res_r)[source]

Assemble the right-hand side for initial conditions.

Parameters:
  • data (tuple | dict) – Input data, either as a tuple or a dictionary.

  • res_l (tuple) – Left residuals.

  • res_r (tuple) – Right residuals.

Return type:

Tensor

Returns:

The assembled right-hand side tensor for initial conditions.

assemble_right_member_dl(data, res_l, res_r)[source]

Assembles the right member for the preconditioning.

Parameters:
  • data (tuple | dict) – The input data for assembling the right member.

  • res_l (tuple) – The left residuals.

  • res_r (tuple) – The right residuals.

Return type:

Tensor

Returns:

The assembled right member.

class EnergyNaturalGradientPreconditioner(space, pde, **kwargs)[source]

Bases: MatrixPreconditionerPinn

Energy-based natural gradient preconditioner.

Parameters:
Keyword Arguments:

matrix_regularization (float) – Regularization parameter for the preconditioning matrix (default: 1e-6).

compute_preconditioning_matrix(labels, *args, **kwargs)[source]

Compute the preconditioning matrix using the main operator.

Parameters:
  • labels (Tensor) – The labels tensor.

  • *args (Tensor) – Additional arguments.

  • **kwargs – Additional keyword arguments.

Return type:

Tensor

Returns:

The preconditioning matrix.

compute_preconditioning_matrix_bc(labels, *args, **kwargs)[source]

Compute the boundary condition preconditioning matrix.

Parameters:
  • labels (Tensor) – The labels tensor.

  • *args (Tensor) – Additional arguments.

  • **kwargs – Additional keyword arguments.

Return type:

Tensor

Returns:

The boundary condition preconditioning matrix.

compute_preconditioning_matrix_ic(labels, *args, **kwargs)[source]

Compute the initial condition preconditioning matrix.

Parameters:
  • labels (Tensor) – The labels tensor.

  • *args (Tensor) – Additional arguments.

  • **kwargs – Additional keyword arguments.

Return type:

Tensor

Returns:

The initial condition preconditioning matrix.

compute_preconditioning_matrix_dl(*args, **kwargs)[source]

Computes the Gram matrix of the network for the given input tensors.

Parameters:
  • *args (Tensor) – Input tensors for computing the Gram matrix.

  • **kwargs – Additional keyword arguments.

Return type:

Tensor

Returns:

The computed Gram matrix.

compute_full_preconditioning_matrix(data, **kwargs)[source]

Compute the full preconditioning matrix.

Include contributions from the main operator, boundary conditions, and initial conditions.

Parameters:
  • data (tuple | dict) – Input data, either as a tuple or a dictionary.

  • **kwargs – Additional keyword arguments.

Return type:

Tensor

Returns:

The full preconditioning matrix.

class NystromNaturalGradientPreconditioner(space, pde, **kwargs)[source]

Bases: MatrixPreconditionerPinn

Randomized matrix-free natural gradient preconditioner.

Implements [Bioli and al. 2025]

Parameters:
Keyword Arguments:
  • matrix_free (bool) – Use jvp and vjp to compute the matrix vector product function instead of Phi matrix. (default: False).

  • eps (float) – The eps for adaptive matrix regularization. (default: torch.finfo(torch.get_default_dtype()).eps).

  • debug (bool) – Debugging mode - check that gram matrices are coherent. (default: False).

Raises:

NotImplementedError – data loss and matrix free option not implemented

[Bioli and al. 2025] Accelerating Natural Gradient Descent for PINNs with

Randomized Nyström Preconditioning, I. Bioli, C. Marcati, G. Sangalli https://arxiv.org/abs/2505.11638v3

compute_preconditioning_matrix(labels, *args, **kwargs)[source]

Compute the preconditioning matrix using the main operator.

Parameters:
  • labels (Tensor) – The labels tensor.

  • *args (Tensor) – Additional arguments.

  • **kwargs – Additional keyword arguments.

Return type:

Tensor

Returns:

The preconditioning matrix.

compute_preconditioning_matrix_bc(labels, *args, **kwargs)[source]

Compute the boundary condition preconditioning matrix.

Parameters:
  • labels (Tensor) – The labels tensor.

  • *args (Tensor) – Additional arguments.

  • **kwargs – Additional keyword arguments.

Return type:

Tensor

Returns:

The boundary condition preconditioning matrix.

compute_preconditioning_matrix_ic(labels, *args, **kwargs)[source]

Compute the initial condition preconditioning matrix.

Parameters:
  • labels (Tensor) – The labels tensor.

  • *args (Tensor) – Additional arguments.

  • **kwargs – Additional keyword arguments.

Return type:

Tensor

Returns:

The initial condition preconditioning matrix.

compute_preconditioning_matrix_dl(*args, **kwargs)[source]

Computes the Gram matrix of the network for the given input tensors.

Parameters:
  • *args (Tensor) – Input tensors for computing the Gram matrix.

  • **kwargs – Additional keyword arguments.

Return type:

Tensor

Returns:

The computed Gram matrix.

class SketchyNaturalGradientPreconditioner(space, pde, **kwargs)[source]

Bases: MatrixPreconditionerPinn

Sketchy natural gradient preconditioner.

Implements [McKay and al. 2025].

Parameters:
Keyword Arguments:
  • tol (float) – The threshold for deciding the size of the sketch matrix, r in the paper. (default: 1e-13).

  • single_pass (bool) – single pass or two pass (default False, means two pass).

[McKay and al. 2025] Near-optimal Sketchy Natural Gradients

for Physics-Informed Neural Networks, M. B. McKay, A. Kaur, C. Greif, B. Wetton Proceedings of the 42 nd International Conference on Machine Learning, Vancouver, Canada. PMLR 267, 2025

compute_preconditioning_matrix(labels, *args, **kwargs)[source]

Compute the preconditioning matrix using the main operator.

Parameters:
  • labels (Tensor) – The labels tensor.

  • *args (Tensor) – Additional arguments.

  • **kwargs – Additional keyword arguments.

Return type:

Tensor

Returns:

The preconditioning matrix.

compute_preconditioning_matrix_bc(labels, *args, **kwargs)[source]

Compute the boundary condition preconditioning matrix.

Parameters:
  • labels (Tensor) – The labels tensor.

  • *args (Tensor) – Additional arguments.

  • **kwargs – Additional keyword arguments.

Return type:

Tensor

Returns:

The boundary condition preconditioning matrix.

compute_preconditioning_matrix_ic(labels, *args, **kwargs)[source]

Compute the initial condition preconditioning matrix.

Parameters:
  • labels (Tensor) – The labels tensor.

  • *args (Tensor) – Additional arguments.

  • **kwargs – Additional keyword arguments.

Return type:

Tensor

Returns:

The initial condition preconditioning matrix.

compute_preconditioning_matrix_dl(*args, **kwargs)[source]

Computes the Gram matrix of the network for the given input tensors.

Parameters:
  • *args (Tensor) – Input tensors for computing the Gram matrix.

  • **kwargs – Additional keyword arguments.

Return type:

Tensor

Returns:

The computed Gram matrix.

Modules

anagram_ng

Preconditioner for pinns.

energy_ng

Preconditioner for pinns.

nystrom_ng

Preconditioner for pinns.

sketchy_ng

Preconditioner for pinns.