// Copyright (C) 2026 Kiyotsugu Arai
// SPDX-License-Identifier: LGPL-3.0-or-later

// linalg.hpp — linear-algebra module umbrella header
//
// Public API included here (sangi-pro):
//
//   Foundations:
//     <math/linalg/static_dims.hpp>            — static dimension-check helpers
//
//   Basic operations:
//     <math/linalg/blas.hpp>                   — Level 1/2/3 BLAS (incl. SIMD path)
//     <math/linalg/vector_space_utilities.hpp> — vector-space utilities
//
//   Systems of equations:
//     <math/linalg/solvers.hpp>                — direct methods (LU / Cholesky / QR / SVD solves)
//     <math/linalg/iterative_solvers.hpp>      — iterative methods (CG / GMRES / BiCGSTAB / MINRES)
//     <math/linalg/sparse_lu.hpp>              — sparse LU factorization
//     <math/linalg/sparse_qr.hpp>              — sparse QR factorization
//     <math/linalg/simplicial_cholesky.hpp>    — sparse Cholesky factorization
//     <math/linalg/sparse_ordering.hpp>        — fill-reducing ordering (minimum-degree / AMD)
//
//   Matrix decompositions:
//     <math/linalg/decomposition.hpp>          — LU / QR / SVD / Cholesky / Schur / Hessenberg
//
//   Eigenvalues / singular values:
//     <math/linalg/eigenvalues.hpp>            — symmetric / non-symmetric eigenvalues, generalized eigenvalues
//     <math/linalg/balance.hpp>                — Parlett-Reinsch balancing + equilibration
//     <math/linalg/balance_sparse.hpp>         — equilibration for sparse matrices
//     <math/linalg/RandomizedSVD.hpp>          — Randomized SVD (Halko-Martinsson-Tropp)
//
//   Matrix functions / matrix equations:
//     <math/linalg/matrix_functions.hpp>       — expm / logm / sqrtm / mat_power
//     <math/linalg/sylvester.hpp>              — Sylvester / Lyapunov equations
//
//   Integer / rational / polynomial / Boolean linear algebra:
//     <math/linalg/BoolMatrix.hpp>             — Boolean matrices (operations over {0,1})
//     <math/linalg/HNF.hpp>                    — Hermite normal form
//     <math/linalg/LLL.hpp>                    — LLL lattice basis reduction
//     <math/linalg/PolyMatrix.hpp>             — polynomial matrices (Smith normal form)
//     <math/linalg/RationalMatrix.hpp>         — rational matrices (common-denominator representation)
//     <math/linalg/dixon_solve.hpp>            — integer linear systems via Dixon p-adic lifting
//
// Experimental (unreleased, requires a direct include):
//   <math/linalg/TotalLeastSquares_experimental.hpp> — TLS / structured LS
//
// Note: experimental headers are not included by this header (planned for integration once the API stabilizes).

#ifndef SANGI_LINALG_HPP
#define SANGI_LINALG_HPP

#include <math/linalg/static_dims.hpp>

#include <math/linalg/blas.hpp>
#include <math/linalg/vector_space_utilities.hpp>

#include <math/linalg/solvers.hpp>
#include <math/linalg/iterative_solvers.hpp>
#include <math/linalg/sparse_ordering.hpp>
#include <math/linalg/sparse_lu.hpp>
#include <math/linalg/sparse_qr.hpp>
#include <math/linalg/simplicial_cholesky.hpp>

#include <math/linalg/decomposition.hpp>

#include <math/linalg/eigenvalues.hpp>
#include <math/linalg/balance.hpp>
#include <math/linalg/balance_sparse.hpp>
#include <math/linalg/RandomizedSVD.hpp>

#include <math/linalg/matrix_functions.hpp>
#include <math/linalg/sylvester.hpp>

// NOTE: pro-only headers (BoolMatrix / LLL / PolyMatrix) are intentionally
// excluded from this umbrella so it stays buildable in the free distribution.
// Pro users include those headers directly.
#include <math/linalg/HNF.hpp>
#include <math/linalg/RationalMatrix.hpp>
#include <math/linalg/dixon_solve.hpp>

#endif // SANGI_LINALG_HPP
