lak-kernels 0.1.1

BLAS-like linear algebra kernels in fully-safe Rust.
Documentation
// axpy.rs

use std::ops::{AddAssign, Mul};

use crate::traits::Fma;
use crate::types::{VecRef, VecMut}; 
use crate::assert_length_eq; 

/// alpha x plus y 
///
/// y <- alpha * x + y 
///
/// args: 
/// * a: T - scales x 
/// * x: [VecRef] 
/// * y: [VecMut]
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(); 

    // no simd needed, already fast
    for (&xv, yv) in x_slice.iter().zip(y_slice.iter_mut()) { 
        *yv = a.fma(xv, *yv); 
    }
}