#![cfg_attr(
test,
allow(
clippy::expect_used,
clippy::unwrap_used,
clippy::disallowed_methods,
clippy::float_cmp,
clippy::panic,
clippy::useless_vec
)
)]
mod blas3;
mod cholesky;
mod error;
mod lu;
mod qr;
mod svd;
mod trsm;
#[cfg(test)]
mod tests;
pub use blas3::{
f32_to_f16, gemm_ex, gemm_ex_epilogue, gemm_strided_batched, symm, syr2k, syrk, trmm, Epilogue,
};
pub use cholesky::{cholesky, CholeskyFactorization};
pub use error::SolverError;
pub use lu::{lu_factorize, LuFactorization};
pub use qr::{qr_factorize, QrFactorization};
pub use svd::{svd, SvdResult};
pub use trsm::{trsm, DiagonalType, TriangularSide, TrsmResult};
pub trait Solver {
fn solve(&self, b: &[f32]) -> Result<Vec<f32>, SolverError>;
fn dimension(&self) -> usize;
}
impl Solver for LuFactorization {
fn solve(&self, b: &[f32]) -> Result<Vec<f32>, SolverError> {
self.solve(b)
}
fn dimension(&self) -> usize {
self.n
}
}
impl Solver for QrFactorization {
fn solve(&self, b: &[f32]) -> Result<Vec<f32>, SolverError> {
self.solve(b)
}
fn dimension(&self) -> usize {
self.n
}
}
impl Solver for CholeskyFactorization {
fn solve(&self, b: &[f32]) -> Result<Vec<f32>, SolverError> {
self.solve(b)
}
fn dimension(&self) -> usize {
self.n
}
}