Source code for femorph_solver.solvers.eigen._base
"""Common base class for eigen-solver backends."""
from __future__ import annotations
from typing import ClassVar
import numpy as np
import scipy.sparse as sp
[docs]
class EigenSolverBase:
"""Every eigen solver implements ``solve(K, M, n_modes, ...)``."""
name: ClassVar[str] = ""
kind: ClassVar[str] = "sparse"
spd_only: ClassVar[bool] = True
install_hint: ClassVar[str] = ""
@staticmethod
def available() -> bool:
return True
[docs]
@staticmethod
def solve(
K: sp.spmatrix | sp.sparray,
M: sp.spmatrix | sp.sparray,
n_modes: int,
*,
sigma: float = 0.0,
linear_solver: str = "auto",
tol: float = 0.0,
) -> tuple[np.ndarray, np.ndarray]:
"""Return ``(eigenvalues, eigenvectors)`` sorted ascending by λ."""
raise NotImplementedError