use faer::Mat;
cfg_if::cfg_if! {
if #[cfg(feature = "faer_v0_20")] {
use faer::ComplexField;
} else if #[cfg(feature = "faer_v0_21")] {
use faer_traits::ComplexField;
} else if #[cfg(feature = "faer_v0_22")] {
use faer_traits::ComplexField;
} else if #[cfg(feature = "faer_v0_23")] {
use faer_traits::ComplexField;
}
}
pub fn column_vector_from_vec<E: ComplexField + Copy>(vec: Vec<E>) -> Mat<E> {
column_vector_from_slice(vec.as_slice())
}
pub fn column_vector_from_slice<E: ComplexField + Copy>(slice: &[E]) -> Mat<E> {
Mat::<E>::from_fn(slice.len(), 1, |ir, _ic| slice[ir])
}
pub fn vector3_new<E: ComplexField + Copy>(a: E, b: E, c: E) -> Mat<E> {
let v = column_vector_from_slice(&[a, b, c]);
assert_eq!(v.nrows(), 3);
assert_eq!(v.ncols(), 1);
v
}
pub fn row_vector3_new<E: ComplexField>(a: E, b: E, c: E) -> Mat<E> {
let v = faer::mat![[a, b, c]];
assert_eq!(v.nrows(), 1);
assert_eq!(v.ncols(), 3);
v
}
pub fn vector2_new<E: ComplexField + Copy>(a: E, b: E) -> Mat<E> {
let v = column_vector_from_slice(&[a, b]);
assert_eq!(v.nrows(), 2);
assert_eq!(v.ncols(), 1);
v
}
pub fn matrix2x3_new<E: ComplexField>(a: E, b: E, c: E, d: E, e: E, f: E) -> Mat<E> {
let m = faer::mat![[a, b, c], [d, e, f]];
assert_eq!(m.nrows(), 2);
assert_eq!(m.ncols(), 3);
m
}
pub fn matrix2_new<E: ComplexField>(a: E, b: E, c: E, d: E) -> Mat<E> {
let m = faer::mat![[a, b], [c, d]];
assert_eq!(m.nrows(), 2);
assert_eq!(m.ncols(), 2);
m
}
pub fn matrix3_new<E: ComplexField>(
a: E,
b: E,
c: E,
d: E,
e: E,
f: E,
g: E,
h: E,
i: E,
) -> Mat<E> {
let m = faer::mat![[a, b, c], [d, e, f], [g, h, i]];
assert_eq!(m.nrows(), 3);
assert_eq!(m.ncols(), 3);
m
}
pub fn matrix_element_at<E: ComplexField + Copy>(
mat: &Mat<E, usize, usize>,
index: (usize, usize),
) -> E {
cfg_if::cfg_if! {
if #[cfg(feature = "faer_v0_20")] {
mat.read(index.0,index.1)
} else {
mat[index]
}
}
}