faer/operator/operator_impl/
csr_matref.rs1use super::*;
2
3impl<T: ComplexField, I: Index, ViewT: Conjugate<Canonical = T>> LinOp<T> for SparseRowMatRef<'_, I, ViewT> {
4 #[inline]
5 fn nrows(&self) -> usize {
6 (**self).nrows()
7 }
8
9 #[inline]
10 fn ncols(&self) -> usize {
11 (**self).ncols()
12 }
13
14 #[inline]
15 fn apply_scratch(&self, rhs_ncols: usize, par: Par) -> StackReq {
16 _ = (rhs_ncols, par);
17 StackReq::EMPTY
18 }
19
20 #[inline]
21 #[track_caller]
22 fn apply(&self, out: MatMut<'_, T>, rhs: MatRef<'_, T>, par: Par, stack: &mut MemStack) {
23 self.rb().transpose().transpose_apply(out, rhs, par, stack)
24 }
25
26 #[inline]
27 #[track_caller]
28 fn conj_apply(&self, out: MatMut<'_, T>, rhs: MatRef<'_, T>, par: Par, stack: &mut MemStack) {
29 self.rb().transpose().adjoint_apply(out, rhs, par, stack)
30 }
31}
32
33impl<T: ComplexField, I: Index, ViewT: Conjugate<Canonical = T>> BiLinOp<T> for SparseRowMatRef<'_, I, ViewT> {
34 #[inline]
35 fn transpose_apply_scratch(&self, rhs_ncols: usize, par: Par) -> StackReq {
36 _ = (rhs_ncols, par);
37 StackReq::EMPTY
38 }
39
40 #[inline]
41 #[track_caller]
42 fn transpose_apply(&self, out: MatMut<'_, T>, rhs: MatRef<'_, T>, par: Par, stack: &mut MemStack) {
43 self.rb().transpose().apply(out, rhs, par, stack)
44 }
45
46 #[inline]
47 #[track_caller]
48 fn adjoint_apply(&self, out: MatMut<'_, T>, rhs: MatRef<'_, T>, par: Par, stack: &mut MemStack) {
49 self.rb().transpose().conj_apply(out, rhs, par, stack)
50 }
51}
52
53impl<T: ComplexField, I: Index, ViewT: Conjugate<Canonical = T>> Precond<T> for SparseRowMatRef<'_, I, ViewT> {}
54impl<T: ComplexField, I: Index, ViewT: Conjugate<Canonical = T>> BiPrecond<T> for SparseRowMatRef<'_, I, ViewT> {}