Compatible Libraries ==================== A list of Python libraries, beyond just `numpy `_ and `pandas `_, providing mathematical algorithms that are compatible with grapp's :py:class:`LinearOperator` interface. scipy ----- Many of the functions in the `scipy.sparse.linalg `_ module are compatible with ``LinearOperator``. Of particular note are: * The conjugate gradient method `scipy.sparse.linalg.cg `_ * Least squares solver `scipy.sparse.linalg.lsqr `_ * Eigenvalue decomposition via `scipy.sparse.linalg.eigs `_ * The preconditioned eigensolver `scipy.sparse.linalg.lobpcg `_ PyLops ------ `PyLops `_ is a library focused on matrix-free methods, primarily focused on signal processing, but with some general purpose methods as well. The grapp ``LinearOperator`` classes are compatible with PyLops. Of particular note are: * The HutchPP estimator for the trace of a matrix, `pylops.utils.estimators.trace_hutchpp `_ * Combining multiple ``LinearOperator`` via `pylops.HStack `_, `pylops.VStack `_, and `pylops.BlockDiag `_ * Kronecker product of ``LinearOperator`` via `pylops.Kronecker `_ * Various optimization solvers with forced sparsity, such as `pylops.optimization.cls_sparsity.FISTA `_ spgl1 ----- `spgl1 `_ is a regularized least-squares solver (e.g., LASSO) that is compatible with ``LinearOperator``.