use super::backend_tensor::TensorBackend;
use super::tensor_data::TensorData;
pub trait LinearAlgebraBackend: TensorBackend {
fn matmul<T>(a: &Self::Tensor<T>, b: &Self::Tensor<T>) -> Self::Tensor<T>
where
T: TensorData + deep_causality_num::Ring + Default + PartialOrd;
fn qr<T>(input: &Self::Tensor<T>) -> (Self::Tensor<T>, Self::Tensor<T>)
where
T: TensorData + deep_causality_num::RealField + core::iter::Sum + PartialEq;
fn svd<T>(input: &Self::Tensor<T>) -> (Self::Tensor<T>, Self::Tensor<T>, Self::Tensor<T>)
where
T: TensorData + deep_causality_num::RealField + core::iter::Sum + PartialEq;
fn inverse<T>(input: &Self::Tensor<T>) -> Self::Tensor<T>
where
T: TensorData + deep_causality_num::RealField + core::iter::Sum + PartialEq;
fn cholesky_decomposition<T>(input: &Self::Tensor<T>) -> Self::Tensor<T>
where
T: TensorData + deep_causality_num::RealField + core::iter::Sum + PartialEq;
fn solve_least_squares_cholsky<T>(a: &Self::Tensor<T>, b: &Self::Tensor<T>) -> Self::Tensor<T>
where
T: TensorData + deep_causality_num::RealField + core::iter::Sum + PartialEq;
fn tensor_product<T>(lhs: &Self::Tensor<T>, rhs: &Self::Tensor<T>) -> Self::Tensor<T>
where
T: TensorData + deep_causality_num::Ring + Default + PartialOrd;
}