1#![cfg_attr(
2 test,
3 allow(
4 clippy::expect_used,
5 clippy::unwrap_used,
6 clippy::disallowed_methods,
7 clippy::float_cmp,
8 clippy::panic,
9 clippy::useless_vec
10 )
11)]
12mod blas3;
36mod cholesky;
37mod error;
38mod lu;
39mod qr;
40mod svd;
41mod trsm;
42
43#[cfg(test)]
44mod tests;
45
46pub use blas3::{
47 f32_to_f16, gemm_ex, gemm_ex_epilogue, gemm_strided_batched, symm, syr2k, syrk, trmm, Epilogue,
48};
49pub use cholesky::{cholesky, CholeskyFactorization};
50pub use error::SolverError;
51pub use lu::{lu_factorize, LuFactorization};
52pub use qr::{qr_factorize, QrFactorization};
53pub use svd::{svd, SvdResult};
54pub use trsm::{trsm, DiagonalType, TriangularSide, TrsmResult};
55
56pub trait Solver {
60 fn solve(&self, b: &[f32]) -> Result<Vec<f32>, SolverError>;
66
67 fn dimension(&self) -> usize;
69}
70
71impl Solver for LuFactorization {
72 fn solve(&self, b: &[f32]) -> Result<Vec<f32>, SolverError> {
73 self.solve(b)
74 }
75 fn dimension(&self) -> usize {
76 self.n
77 }
78}
79
80impl Solver for QrFactorization {
81 fn solve(&self, b: &[f32]) -> Result<Vec<f32>, SolverError> {
82 self.solve(b)
83 }
84 fn dimension(&self) -> usize {
85 self.n
86 }
87}
88
89impl Solver for CholeskyFactorization {
90 fn solve(&self, b: &[f32]) -> Result<Vec<f32>, SolverError> {
91 self.solve(b)
92 }
93 fn dimension(&self) -> usize {
94 self.n
95 }
96}