nalgebra_sparse/
matrixcompare.rs1use crate::coo::CooMatrix;
3use crate::csc::CscMatrix;
4use crate::csr::CsrMatrix;
5use matrixcompare_core;
6use matrixcompare_core::{Access, SparseAccess};
7
8macro_rules! impl_matrix_for_csr_csc {
9 ($MatrixType:ident) => {
10 impl<T: Clone> SparseAccess<T> for $MatrixType<T> {
11 fn nnz(&self) -> usize {
12 $MatrixType::nnz(self)
13 }
14
15 fn fetch_triplets(&self) -> Vec<(usize, usize, T)> {
16 self.triplet_iter()
17 .map(|(i, j, v)| (i, j, v.clone()))
18 .collect()
19 }
20 }
21
22 impl<T: Clone> matrixcompare_core::Matrix<T> for $MatrixType<T> {
23 fn rows(&self) -> usize {
24 self.nrows()
25 }
26
27 fn cols(&self) -> usize {
28 self.ncols()
29 }
30
31 fn access(&self) -> Access<'_, T> {
32 Access::Sparse(self)
33 }
34 }
35 };
36}
37
38impl_matrix_for_csr_csc!(CsrMatrix);
39impl_matrix_for_csr_csc!(CscMatrix);
40
41impl<T: Clone> SparseAccess<T> for CooMatrix<T> {
42 fn nnz(&self) -> usize {
43 CooMatrix::nnz(self)
44 }
45
46 fn fetch_triplets(&self) -> Vec<(usize, usize, T)> {
47 self.triplet_iter()
48 .map(|(i, j, v)| (i, j, v.clone()))
49 .collect()
50 }
51}
52
53impl<T: Clone> matrixcompare_core::Matrix<T> for CooMatrix<T> {
54 fn rows(&self) -> usize {
55 self.nrows()
56 }
57
58 fn cols(&self) -> usize {
59 self.ncols()
60 }
61
62 fn access(&self) -> Access<'_, T> {
63 Access::Sparse(self)
64 }
65}