Skip to content

Quickstart

Symmetric eigendecomposition

import torch
import trnsolver

A = torch.randn(64, 64)
A = A @ A.T  # symmetric

eigenvalues, eigenvectors = trnsolver.eigh(A)

# Reconstruction check
recon = eigenvectors @ torch.diag(eigenvalues) @ eigenvectors.T
assert torch.allclose(A, recon, atol=1e-5)

Generalized eigenproblem

The SCF problem FC = SCε is a generalized symmetric eigenvalue problem. eigh_generalized reduces it to standard form via Cholesky of the overlap matrix S:

F = build_fock_matrix(...)   # symmetric
S = build_overlap_matrix(...)  # SPD

eigenvalues, eigenvectors = trnsolver.eigh_generalized(F, S)

Factorizations

L = trnsolver.cholesky(A_spd)        # A = LL^T
P, L, U = trnsolver.lu(A)             # PA = LU
Q, R = trnsolver.qr(A)                # A = QR

Direct solvers

x = trnsolver.solve(A, b)              # LU-based
x = trnsolver.solve_spd(A, b)          # Cholesky — faster for SPD A
A_inv_sqrt = trnsolver.inv_sqrt_spd(A) # density-fitting metric inverse

Iterative solvers

x, iters, residual = trnsolver.cg(A_spd, b, tol=1e-8)
x, iters, residual = trnsolver.gmres(A, b, tol=1e-6)

Backend selection

trnsolver.set_backend("auto")     # NKI if available, else PyTorch (default)
trnsolver.set_backend("pytorch")  # force PyTorch fallback
trnsolver.set_backend("nki")      # require NKI; raises if unavailable

Run the SCF demo end-to-end:

python examples/scf_eigen.py --demo