faer/operator/operator_impl/
csr_matref.rs

1use 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> {}