use scirs2_core::ndarray::{Array1, Array2};
use scirs2_core::numeric::Float;
#[derive(Debug, Clone)]
pub struct LuFactors<F: Float> {
pub p: Array2<F>,
pub l: Array2<F>,
pub u: Array2<F>,
}
#[derive(Debug, Clone)]
pub struct QrFactors<F: Float> {
pub q: Array2<F>,
pub r: Array2<F>,
}
#[derive(Debug, Clone)]
pub struct CholeskyFactors<F: Float> {
pub l: Array2<F>,
}
#[derive(Debug, Clone)]
pub struct SvdFactors<F: Float> {
pub u: Array2<F>,
pub s: Array1<F>,
pub vt: Array2<F>,
}
#[derive(Debug, Clone)]
pub struct BatchMatmulResult<F: Float> {
pub results: Vec<Array2<F>>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ExecutionBackend {
Gpu,
CpuFallback,
}
impl std::fmt::Display for ExecutionBackend {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
ExecutionBackend::Gpu => write!(f, "GPU"),
ExecutionBackend::CpuFallback => write!(f, "CPU (fallback)"),
}
}
}