use super::nalgebra_sparse;
use nalgebra_sparse::CsrMatrix;
use crate::{MatrixShape, Scalar, SparseRows};
impl<F> MatrixShape for CsrMatrix<F> {
fn nrows(&self) -> usize {
CsrMatrix::nrows(self)
}
fn ncols(&self) -> usize {
CsrMatrix::ncols(self)
}
}
impl<F: Scalar> SparseRows<F> for CsrMatrix<F> {
fn sparse_row(&self, i: usize) -> (&[usize], &[F]) {
assert!(i < self.nrows(), "row index out of bounds");
let (offsets, columns, values) = self.csr_data();
let range = offsets[i]..offsets[i + 1];
(&columns[range.clone()], &values[range])
}
}