use crate::MutVecg;
use indxvec::Vecops;
impl MutVecg for &mut [f64] {
fn mutsmult<U:PartialOrd+Into<f64>>(self, s: U)
{
let sf = s.into();
self.iter_mut().for_each(|x| *x *= sf);
}
fn mutvsub<U:Clone+PartialOrd+Into<f64>>(self, v: &[U])
{
self.iter_mut()
.zip(v)
.for_each(|(x, vi)| *x -= vi.clone().into())
}
fn mutvadd<U:Clone+PartialOrd+Into<f64>>(self, v: &[U])
{
self.iter_mut()
.zip(v)
.for_each(|(x, vi)| *x += vi.clone().into())
}
fn minvert(self) {
let recmag2 = 1.0 / self.iter().map(|&x| x.powi(2)).sum::<f64>();
for c in self.iter_mut() {
*c *= recmag2
}
}
fn mneg(self) {
for c in self.iter_mut() {
*c *= -1_f64
}
}
fn munit(self) {
let m = (1.0 / self.iter().map(|&x| x.powi(2)).sum::<f64>()).sqrt();
for c in self.iter_mut() {
*c *= m
}
}
fn mlintrans(self) {
let mm = self.minmax();
let range = mm.max - mm.min;
for c in self.iter_mut() {
*c = (*c - mm.min) / range
}
}
}