diff --git a/src/matrix_vector/ops.rs b/src/matrix_vector/ops.rs
index 6ca1053..d4239bd 100644
--- a/src/matrix_vector/ops.rs
+++ b/src/matrix_vector/ops.rs
@@ -12,6 +12,9 @@ use pointer::CPtr;
use scalar::Scalar;
use vector::Vector;
+/// General multiply with vector
+///
+/// A ← αAOPx + βy
pub trait Gemv: Sized {
fn gemv, W: ?Sized + Vector>(trans: Transpose, alpha: &Self, a: &Matrix, x: &V, beta: &Self, y: &mut W);
}
@@ -86,10 +89,16 @@ mod gemv_tests {
}
}
+/// Symmetric multiply with vector
+///
+/// A ← αAx + βy
pub trait Symv: Sized {
fn symv, W: ?Sized + Vector>(symmetry: Symmetry, alpha: &Self, a: &Matrix, x: &V, beta: &Self, y: &mut W);
}
+/// Hermitian multiply with vector
+///
+/// A ← αAx + βy
pub trait Hemv: Sized {
fn hemv, W: ?Sized + Vector>(symmetry: Symmetry, alpha: &Self, a: &Matrix, x: &V, beta: &Self, y: &mut W);
}
@@ -158,10 +167,16 @@ mod symv_tests {
}
}
+/// General rank-1 update
+///
+/// A ← A + αxyT
pub trait Ger: Sized {
fn ger, W: ?Sized + Vector>(alpha: &Self, x: &V, y: &W, a: &mut Matrix);
}
+/// General rank-1 update (using hermitian conjugate)
+///
+/// A ← A + αxyH
pub trait Gerc: Ger {
fn gerc, W: ?Sized + Vector>(alpha: &Self, x: &V, y: &W, a: &mut Matrix) {
Ger::ger(alpha, x, y, a);
@@ -214,10 +229,16 @@ mod ger_tests {
}
}
+/// Symmetric rank-1 update
+///
+/// A ← A + αxxT
pub trait Syr: Sized {
fn syr>(symmetry: Symmetry, alpha: &Self, x: &V, a: &mut Matrix);
}
+/// Hermitian rank-1 update
+///
+/// A ← A + αxxH
pub trait Her: Sized {
fn her>>(symmetry: Symmetry, alpha: &Self, x: &V, a: &mut Matrix>);
}
@@ -258,10 +279,16 @@ macro_rules! syr_impl(($($t: ident), +) => (
syr_impl!(f32, f64);
+/// Symmetric rank-2 update
+///
+/// A ← A + αxyT + αyxT
pub trait Syr2: Sized {
fn syr2, W: ?Sized + Vector>(symmetry: Symmetry, alpha: &Self, x: &V, y: &W, a: &mut Matrix);
}
+/// Hermitian rank-2 update
+///
+/// A ← A + αxyH + y(αx)H
pub trait Her2: Sized {
fn her2, W: ?Sized + Vector>(symmetry: Symmetry, alpha: &Self, x: &V, y: &W, a: &mut Matrix);
}
@@ -286,6 +313,9 @@ macro_rules! syr2_impl(($trait_name: ident, $fn_name: ident, $($t: ident), +) =>
syr2_impl!(Syr2, syr2, f32, f64);
syr2_impl!(Her2, her2, Complex32, Complex64);
+/// General band matrix multiply with vector.
+///
+/// A ← αAOPx + βy
pub trait Gbmv: Sized {
fn gbmv, W: ?Sized + Vector>(trans: Transpose, alpha: &Self, a: &BandMatrix, x: &V, beta: &Self, y: &mut W);
}
@@ -311,10 +341,16 @@ macro_rules! gbmv_impl(($($t: ident), +) => (
gbmv_impl!(f32, f64, Complex32, Complex64);
+/// Symmetric band matrix multiply with vector
+///
+/// A ← αAx + βy
pub trait Sbmv: Sized {
fn sbmv, W: ?Sized + Vector>(symmetry: Symmetry, alpha: &Self, a: &BandMatrix, x: &V, beta: &Self, y: &mut W);
}
+/// Hermitian band matrix multiply with vector
+///
+/// A ← αAx + βy
pub trait Hbmv: Sized {
fn hbmv, W: ?Sized + Vector>(symmetry: Symmetry, alpha: &Self, a: &BandMatrix, x: &V, beta: &Self, y: &mut W);
}
@@ -340,10 +376,16 @@ macro_rules! sbmv_impl(($trait_name: ident, $fn_name: ident, $($t: ident), +) =>
sbmv_impl!(Sbmv, sbmv, f32, f64);
sbmv_impl!(Hbmv, hbmv, Complex32, Complex64);
+/// Triangular band matrix multiply with vector
+///
+/// A ← AOPx
pub trait Tbmv: Sized {
fn tbmv>(symmetry: Symmetry, trans: Transpose, diagonal: Diagonal, a: &BandMatrix, x: &mut V);
}
+/// Solve triangular band matrix system
+///
+/// A ← A-1 OPx
pub trait Tbsv: Sized {
fn tbsv>(symmetry: Symmetry, trans: Transpose, diagonal: Diagonal, a: &BandMatrix, x: &mut V);
}
@@ -367,10 +409,16 @@ macro_rules! tbmv_impl(($trait_name: ident, $fn_name: ident, $($t: ident), +) =>
tbmv_impl!(Tbmv, tbmv, f32, f64, Complex32, Complex64);
tbmv_impl!(Tbsv, tbsv, f32, f64, Complex32, Complex64);
+/// Symmetric packed matrix multiply with vector
+///
+/// A ← αAx + βy
pub trait Spmv: Sized {
fn spmv, W: ?Sized + Vector>(symmetry: Symmetry, alpha: &Self, a: &Matrix, x: &V, beta: &Self, y: &mut W);
}
+/// Hermitian packed matrix multiply with vector
+///
+/// A ← αAx + βy
pub trait Hpmv: Sized {
fn hpmv, W: ?Sized + Vector>(symmetry: Symmetry, alpha: &Self, a: &Matrix, x: &V, beta: &Self, y: &mut W);
}
@@ -396,10 +444,16 @@ macro_rules! spmv_impl(($trait_name: ident, $fn_name: ident, $($t: ident), +) =>
spmv_impl!(Spmv, spmv, f32, f64);
spmv_impl!(Hpmv, hpmv, Complex32, Complex64);
+/// Triangular packed matrix multiply with vector
+///
+/// A ← AOPx
pub trait Tpmv: Sized {
fn tpmv>(symmetry: Symmetry, trans: Transpose, diagonal: Diagonal, a: &Matrix, x: &mut V);
}
+/// Solve triangular packed matrix system
+///
+/// A ← A-1 OPx
pub trait Tpsv: Sized {
fn tpsv>(symmetry: Symmetry, trans: Transpose, diagonal: Diagonal, a: &Matrix, x: &mut V);
}
@@ -423,6 +477,9 @@ macro_rules! tpmv_impl(($trait_name: ident, $fn_name: ident, $($t: ident), +) =>
tpmv_impl!(Tpmv, tpmv, f32, f64, Complex32, Complex64);
tpmv_impl!(Tpsv, tpsv, f32, f64, Complex32, Complex64);
+/// Hermitian packed matrix rank-1 update
+///
+/// A ← A + αxxH
pub trait Hpr: Sized {
fn hpr>>(symmetry: Symmetry, alpha: &Self, x: &V, a: &mut Matrix>);
}
@@ -445,6 +502,9 @@ macro_rules! hpr_impl(($($t: ident), +) => (
hpr_impl!(f32, f64);
+/// Symmetric packed matrix rank-1 update
+///
+/// A ← A + αxxT
pub trait Spr: Sized {
fn spr>(symmetry: Symmetry, alpha: &Self, x: &V, a: &mut Matrix);
}
@@ -467,10 +527,16 @@ macro_rules! spr_impl(($($t: ident), +) => (
spr_impl!(f32, f64);
+/// Symmetric packed matrix rank-2 update
+///
+/// A ← A + αxyT + αyxT
pub trait Spr2: Sized {
fn spr2, W: ?Sized + Vector>(symmetry: Symmetry, alpha: &Self, x: &V, y: &W, a: &mut Matrix);
}
+/// Hermitian packed matrix rank-2 update
+///
+/// A ← A + αxyH + y(αx)H
pub trait Hpr2: Sized {
fn hpr2, W: ?Sized + Vector>(symmetry: Symmetry, alpha: &Self, x: &V, y: &W, a: &mut Matrix);
}