cagpjax.solvers
AbstractLinearSolver
Bases: Module
Base class for linear solvers.
These solvers are used to exactly or approximately solve the linear system \(Ax = b\) for \(x\), where \(A\) is a positive (semi-)definite (PSD) linear operator.
Solvers should always be constructed by a AbstractLinearSolverMethod
.
Source code in src/cagpjax/solvers/base.py
inv_congruence_transform(B)
abstractmethod
Compute the inverse congruence transform \(B^T x\) for \(x\) in \(Ax = B\).
Parameters:
Name | Type | Description | Default |
---|---|---|---|
B
|
LinearOperator | Float[Array, 'N K']
|
Linear operator or array to be applied. |
required |
Returns:
Type | Description |
---|---|
LinearOperator | Float[Array, 'K K']
|
Linear operator or array resulting from the congruence transform. |
Source code in src/cagpjax/solvers/base.py
inv_quad(b)
Compute the inverse quadratic form \(b^T x\), for \(x\) in \(Ax = b\).
Parameters:
Name | Type | Description | Default |
---|---|---|---|
b
|
Float[Array, N]
|
Right-hand side of the linear system. |
required |
Source code in src/cagpjax/solvers/base.py
logdet()
abstractmethod
solve(b)
abstractmethod
Compute a solution to the linear system \(Ax = b\).
Parameters:
Name | Type | Description | Default |
---|---|---|---|
b
|
Float[Array, N]
|
Right-hand side of the linear system. |
required |
trace_solve(B)
abstractmethod
Compute \(\mathrm{trace}(X)\) in \(AX=B\) for PSD \(B\).
Parameters:
Name | Type | Description | Default |
---|---|---|---|
B
|
Self
|
An |
required |
Source code in src/cagpjax/solvers/base.py
AbstractLinearSolverMethod
Bases: Module
Base class for linear solver methods.
These methods are used to construct AbstractLinearSolver
instances.
Source code in src/cagpjax/solvers/base.py
__call__(A)
abstractmethod
Cholesky
Bases: AbstractLinearSolverMethod
Solve a linear system using the Cholesky decomposition.
Due to numerical imprecision, Cholesky factorization may fail even for
positive-definite \(A\). Optionally, a small amount of jitter
(\(\epsilon\)) can
be added to \(A\) to ensure positive-definiteness. Note that the resulting system
solved is slightly different from the original system.
Attributes:
Name | Type | Description |
---|---|---|
jitter |
ScalarFloat | None
|
Small amount of jitter to add to \(A\) to ensure positive-definiteness. |
Source code in src/cagpjax/solvers/cholesky.py
PseudoInverse
Bases: AbstractLinearSolverMethod
Solve a linear system using the Moore-Penrose pseudoinverse.
This solver computes the least-squares solution \(x = A^+ b\) for any \(A\), where \(A^+\) is the Moore-Penrose pseudoinverse. This is equivalent to the exact solution for non-singular \(A\) but generalizes to singular \(A\) and improves stability for almost-singular \(A\); note, however, that if the rank of \(A\) is dependent on hyperparameters being optimized, because the pseudoinverse is discontinuous, the optimization problem may be ill-posed.
Note that if \(A\) is (almost-)degenerate (some eigenvalues repeat), then
the gradient of its solves in JAX may be non-computable or numerically unstable
(see jax#669).
For degenerate operators, it may be necessary to increase grad_rtol
to improve
stability of gradients.
See cagpjax.linalg.eigh
for more details.
Attributes:
Name | Type | Description |
---|---|---|
rtol |
ScalarFloat | None
|
Specifies the cutoff for small eigenvalues.
Eigenvalues smaller than |
grad_rtol |
float | None
|
Specifies the cutoff for similar eigenvalues, used to improve gradient computation for (almost-)degenerate matrices. If not provided, the default is 0.0. If None or negative, all eigenvalues are treated as distinct. |
alg |
Algorithm
|
Algorithm for eigenvalue decomposition passed to |