mod arithmetic;
mod cholesky;
mod condition;
mod determinant;
mod lu;
mod qr;
mod rank;
mod svd;
use crate::scalar::Scalar;
pub use arithmetic::{add, mul_matrix, mul_scalar, mul_vector, sub, transpose};
pub use cholesky::{CholeskyError, cholesky, cholesky_decompose};
pub use condition::{ConditionNumberError, condition_number, condition_number_svd};
pub use determinant::{DeterminantError, determinant, determinant_cofactor, determinant_lu};
pub use lu::{lu, lu_partial_pivot};
pub use qr::{qr, qr_gram_schmidt, qr_householder};
pub use rank::{rank, rank_with_tolerance};
pub(in crate::algorithm::matrix) use svd::QR_ITERATIONS;
pub use svd::{svd, svd_qr_iteration};
pub(crate) fn abs<T: Scalar + PartialOrd>(x: T) -> T {
if x < T::zero() { T::zero().sub(x) } else { x }
}
pub(super) fn n_as_scalar<T: Scalar>(n: usize) -> T {
let mut value = T::zero();
for _ in 0..n {
value = value.add(T::one());
}
value
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct DimensionMismatch;