faer/operator/operator_impl/
csr_matref.rs1use super::*;
2impl<T: ComplexField, I: Index, ViewT: Conjugate<Canonical = T>> LinOp<T>
3 for SparseRowMatRef<'_, I, ViewT>
4{
5 #[inline]
6 fn nrows(&self) -> usize {
7 (**self).nrows()
8 }
9
10 #[inline]
11 fn ncols(&self) -> usize {
12 (**self).ncols()
13 }
14
15 #[inline]
16 fn apply_scratch(&self, rhs_ncols: usize, par: ParShape) -> StackReq {
17 _ = (rhs_ncols, par);
18 StackReq::EMPTY
19 }
20
21 #[inline]
22 #[track_caller]
23 fn apply(
24 &self,
25 out: MatMut<'_, T>,
26 rhs: MatRef<'_, T>,
27 par: Par,
28 stack: &mut MemStack,
29 ) {
30 self.rb().transpose().transpose_apply(out, rhs, par, stack)
31 }
32
33 #[inline]
34 #[track_caller]
35 fn conj_apply(
36 &self,
37 out: MatMut<'_, T>,
38 rhs: MatRef<'_, T>,
39 par: Par,
40 stack: &mut MemStack,
41 ) {
42 self.rb().transpose().adjoint_apply(out, rhs, par, stack)
43 }
44}
45impl<T: ComplexField, I: Index, ViewT: Conjugate<Canonical = T>> BiLinOp<T>
46 for SparseRowMatRef<'_, I, ViewT>
47{
48 #[inline]
49 fn transpose_apply_scratch(&self, rhs_ncols: usize, par: ParShape) -> StackReq {
50 _ = (rhs_ncols, par);
51 StackReq::EMPTY
52 }
53
54 #[inline]
55 #[track_caller]
56 fn transpose_apply(
57 &self,
58 out: MatMut<'_, T>,
59 rhs: MatRef<'_, T>,
60 par: Par,
61 stack: &mut MemStack,
62 ) {
63 self.rb().transpose().apply(out, rhs, par, stack)
64 }
65
66 #[inline]
67 #[track_caller]
68 fn adjoint_apply(
69 &self,
70 out: MatMut<'_, T>,
71 rhs: MatRef<'_, T>,
72 par: Par,
73 stack: &mut MemStack,
74 ) {
75 self.rb().transpose().conj_apply(out, rhs, par, stack)
76 }
77}
78impl<T: ComplexField, I: Index, ViewT: Conjugate<Canonical = T>> Precond<T>
79 for SparseRowMatRef<'_, I, ViewT>
80{
81}
82impl<T: ComplexField, I: Index, ViewT: Conjugate<Canonical = T>> BiPrecond<T>
83 for SparseRowMatRef<'_, I, ViewT>
84{
85}