use crate::DType;
use numr::algorithm::sparse_linalg::qr::{QrFactors, QrMetrics, QrOptions, QrSymbolic};
use numr::error::Result;
use numr::runtime::Runtime;
use numr::sparse::CscData;
use numr::tensor::Tensor;
pub trait SparseQrAlgorithms<R: Runtime<DType = DType>> {
fn sparse_qr(&self, a: &CscData<R>, options: &QrOptions) -> Result<QrFactors<R>>;
fn sparse_qr_with_symbolic(
&self,
a: &CscData<R>,
symbolic: &QrSymbolic,
options: &QrOptions,
) -> Result<QrFactors<R>>;
fn sparse_qr_with_metrics(
&self,
a: &CscData<R>,
symbolic: &QrSymbolic,
options: &QrOptions,
) -> Result<(QrFactors<R>, QrMetrics)>;
fn sparse_qr_symbolic(&self, a: &CscData<R>, options: &QrOptions) -> Result<QrSymbolic>;
fn sparse_qr_solve(&self, factors: &QrFactors<R>, b: &Tensor<R>) -> Result<Tensor<R>>;
fn sparse_least_squares(&self, factors: &QrFactors<R>, b: &Tensor<R>) -> Result<Tensor<R>>;
}