use super::CscData;
use crate::dtype::DType;
use crate::error::Result;
use crate::runtime::Runtime;
use crate::sparse::CsrData;
use crate::tensor::Tensor;
impl<R: Runtime<DType = DType>> CscData<R> {
pub fn spmv(&self, x: &Tensor<R>) -> Result<Tensor<R>>
where
R::Client: crate::sparse::SparseOps<R>,
{
let csr = self.to_csr()?;
csr.spmv(x)
}
pub fn spmm(&self, b: &Tensor<R>) -> Result<Tensor<R>>
where
R::Client: crate::sparse::SparseOps<R>,
{
let csr = self.to_csr()?;
csr.spmm(b)
}
pub fn transpose(&self) -> CsrData<R> {
let [nrows, ncols] = self.shape;
CsrData {
row_ptrs: self.col_ptrs.clone(),
col_indices: self.row_indices.clone(),
values: self.values.clone(),
shape: [ncols, nrows],
}
}
}