use mdarray::{Array, Dim, Layout, Slice};
use thiserror::Error;
#[derive(Debug, Error)]
pub enum SolveError {
#[error("Backend error code: {0}")]
BackendError(i32),
#[error("Matrix is singular: U({diagonal},{diagonal}) is exactly zero")]
SingularMatrix { diagonal: i32 },
#[error("Invalid matrix dimensions")]
InvalidDimensions,
}
pub trait Solve<T, D: Dim> {
fn solve_write<R: Dim, La: Layout, Lb: Layout>(
&self,
a: &mut Slice<T, (D, D), La>,
b: &mut Slice<T, (D, R), Lb>,
) -> Result<(), SolveError>;
fn solve<R: Dim, La: Layout, Lb: Layout>(
&self,
a: &mut Slice<T, (D, D), La>,
b: &Slice<T, (D, R), Lb>,
) -> Result<Array<T, (D, R)>, SolveError>;
}