use algebraeon::structures::Integer;
use algebraeon::rings::matrix::Matrix;
let a = Matrix::<Integer>::from_rows(vec![
vec![1, 2, 3],
vec![0, 1, 4],
]);
let b = Matrix::<Integer>::from_rows(vec![
vec![1, 0],
vec![0, 1],
vec![2, 3],
]);
let sum = Matrix::add(&a, &a).unwrap();
let product = Matrix::mul(&a, &b).unwrap();
assert_eq!(
sum.get_row(0),
vec![Integer::from(2), Integer::from(4), Integer::from(6)]
);
assert_eq!(
product.get_row(0),
vec![Integer::from(7), Integer::from(11)]
);
assert_eq!(
product.get_row(1),
vec![Integer::from(8), Integer::from(13)]
);
let scaled = a.clone().mul_scalar(&Integer::from(3));
let transposed = b.clone().transpose();
assert_eq!(
scaled.get_row(1),
vec![Integer::from(0), Integer::from(3), Integer::from(12)]
);
assert_eq!(
transposed.get_row(0),
vec![Integer::from(1), Integer::from(0), Integer::from(2)]
);
use algebraeon::structures::Integer;
use algebraeon::rings::matrix::Matrix;
let v = Matrix::<Integer>::from_rows(vec![vec![1, 2, 3]]);
let w = Matrix::<Integer>::from_rows(vec![vec![4, 5, 6]]);
assert_eq!(Matrix::dot(&v, &w), Integer::from(32));