use std::ops::{AddAssign, Mul};
use crate::traits::Fma;
use crate::types::{VecRef, VecMut};
use crate::assert_length_eq;
pub fn axpy<T>(
a: T,
x: VecRef<'_, T>,
mut y: VecMut<'_, T>,
)
where
T: Copy
+ AddAssign
+ Mul<Output=T>
+ Fma,
{
assert_length_eq!(x, y);
let x_slice = x.as_slice();
let y_slice = y.as_slice_mut();
for (&xv, yv) in x_slice.iter().zip(y_slice.iter_mut()) {
*yv = a.fma(xv, *yv);
}
}