nalgebra_sparse/
matrixcompare.rs

1//! Implements core traits for use with `matrixcompare`.
2use 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}
OSZAR »