| 224 // Self: std::ops::MulAssign<F> + std::ops::DivAssign<F>, |
224 // Self: std::ops::MulAssign<F> + std::ops::DivAssign<F>, |
| 225 // Self::Unwrapped: std::ops::MulAssign<F> + std::ops::DivAssign<F>, |
225 // Self::Unwrapped: std::ops::MulAssign<F> + std::ops::DivAssign<F>, |
| 226 { |
226 { |
| 227 fn axpy<I: $crate::instance::Instance<Self>>(&mut self, α: $F, x: I, β: $F) { |
227 fn axpy<I: $crate::instance::Instance<Self>>(&mut self, α: $F, x: I, β: $F) { |
| 228 x.eval_decompose(|v| { |
228 x.eval_decompose(|v| { |
| 229 self.get_view_mut().axpy(α, (*v).get_view(), β) |
229 $crate::linops::AXPY::axpy(&mut self.get_view_mut(), α, v.get_view(), β) |
| 230 }) |
230 }) |
| 231 } |
231 } |
| 232 |
232 |
| 233 fn copy_from<I: $crate::instance::Instance<Self>>(&mut self, x: I) { |
233 fn copy_from<I: $crate::instance::Instance<Self>>(&mut self, x: I) { |
| 234 x.eval_decompose(|v| { |
234 x.eval_decompose(|v| { |
| 235 self.get_view_mut().copy_from((*v).get_view()) |
235 $crate::linops::AXPY::copy_from(&mut self.get_view_mut(), v.get_view()) |
| 236 }) |
236 }) |
| 237 } |
237 } |
| 238 |
238 |
| 239 fn scale_from<I: $crate::instance::Instance<Self>>(&mut self, α: $F, x: I) { |
239 fn scale_from<I: $crate::instance::Instance<Self>>(&mut self, α: $F, x: I) { |
| 240 x.eval_decompose(|v| { |
240 x.eval_decompose(|v| { |
| 241 self.get_view_mut().scale_from(α, (*v).get_view()) |
241 $crate::linops::AXPY::scale_from(&mut self.get_view_mut(), α, v.get_view()) |
| 242 }) |
242 }) |
| 243 } |
243 } |
| 244 |
244 |
| 245 /// Set self to zero. |
245 /// Set self to zero. |
| 246 fn set_zero(&mut self) { |
246 fn set_zero(&mut self) { |