#![cfg_attr(not(feature = "std"), no_std)]
pub mod prelude {
pub use crate::solver_error::SolverErrors;
pub use crate::compute_tridiag_determinant;
#[cfg(feature = "alloc")]
pub use crate::alloc::{TridiagonalSystemPrecomputed, precompute_givens, solve_givens};
#[cfg(not(feature = "alloc"))]
pub use crate::no_alloc::{TridiagonalSystemPrecomputed, precompute_givens, solve_givens};
}
use num_traits::Float;
pub mod solver_error;
mod solver_parts;
#[cfg(test)]
mod tests;
#[cfg(any(doc, feature = "alloc", feature = "std"))]
pub mod alloc;
#[cfg(any(doc, not(any(feature = "alloc", feature = "std"))))]
pub mod no_alloc;
pub fn compute_tridiag_determinant<T: Float>(sup: &[T], diag: &[T], sub: &[T]) -> T{
let mut dpp;
let mut dp = T::one();
let mut d = diag[0];
for ((&a, &b), &c) in diag.iter().skip(1).zip(sup).zip(sub){
dpp = dp;
dp = d;
d = a * dp - b * c * dpp;
}
d
}