pub trait ScalarMath {
fn clip(&self, min_thresh: Self, max_thresh: Self) -> Self;
fn logsafe(&self) -> Self;
}
pub trait VectorMath<T> {
fn copy_from(&mut self, src: &Self) -> &mut Self;
fn select(&self, index: &[bool]) -> Vec<T>;
fn scalarop(&mut self, op: impl Fn(T) -> T) -> &mut Self;
fn scalarop_from(&mut self, op: impl Fn(T) -> T, v: &Self) -> &mut Self;
fn translate(&mut self, c: T) -> &mut Self;
fn set(&mut self, c: T) -> &mut Self;
fn scale(&mut self, c: T) -> &mut Self;
fn recip(&mut self) -> &mut Self;
fn sqrt(&mut self) -> &mut Self;
fn rsqrt(&mut self) -> &mut Self;
fn negate(&mut self) -> &mut Self;
fn hadamard(&mut self, y: &Self) -> &mut Self;
fn clip(&mut self, min_thresh: T, max_thresh: T) -> &mut Self;
fn normalize(&mut self) -> T;
fn dot(&self, y: &Self) -> T;
fn dot_shifted(z: &[T], s: &[T], dz: &[T], ds: &[T], α: T) -> T;
fn dist(&self, y: &Self) -> T;
fn sum(&self) -> T;
fn sumsq(&self) -> T;
fn norm(&self) -> T;
fn norm_scaled(&self, v: &Self) -> T;
fn norm_shifted(&self, dz: &[T], α: T) -> T;
fn norm_inf(&self) -> T;
fn norm_one(&self) -> T;
fn norm_inf_scaled(&self, v: &Self) -> T;
fn norm_one_scaled(&self, v: &Self) -> T;
fn norm_inf_diff(&self, b: &Self) -> T;
fn minimum(&self) -> T;
fn maximum(&self) -> T;
fn mean(&self) -> T;
fn is_finite(&self) -> bool;
fn axpby(&mut self, a: T, x: &Self, b: T) -> &mut Self;
fn waxpby(&mut self, a: T, x: &Self, b: T, y: &Self) -> &mut Self;
}
pub(crate) trait MatrixVectorMultiply<T> {
fn gemv(&self, y: &mut [T], x: &[T], a: T, b: T);
}
pub(crate) trait SymMatrixMath<T> {
fn symv(&self, y: &mut [T], x: &[T], a: T, b: T);
fn quad_form(&self, y: &[T], x: &[T]) -> T;
}
pub trait MatrixMath<T> {
fn col_sums(&self, sums: &mut [T]);
fn row_sums(&self, sums: &mut [T]);
fn col_norms(&self, norms: &mut [T]);
fn col_norms_no_reset(&self, norms: &mut [T]);
fn col_norms_sym(&self, norms: &mut [T]);
fn col_norms_sym_no_reset(&self, norms: &mut [T]);
fn row_norms(&self, norms: &mut [T]);
fn row_norms_no_reset(&self, norms: &mut [T]);
}
pub trait MatrixMathMut<T> {
fn scale(&mut self, c: T);
fn negate(&mut self);
fn lscale(&mut self, l: &[T]);
fn rscale(&mut self, r: &[T]);
fn lrscale(&mut self, l: &[T], r: &[T]);
}