Skip to main content

faer/operator/operator_impl/
csr_matref.rs

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