use algebraeon::nzq::Integer;
use algebraeon::rings::matrix::Matrix;
let a = Matrix::<Integer>::from_rows(vec![
vec![Integer::from(1), Integer::from(2), Integer::from(3)],
vec![Integer::from(0), Integer::from(1), Integer::from(4)],
]);
let b = Matrix::<Integer>::from_rows(vec![
vec![Integer::from(1), Integer::from(0)],
vec![Integer::from(0), Integer::from(1)],
vec![Integer::from(2), Integer::from(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::nzq::Integer;
use algebraeon::rings::matrix::Matrix;
let v = Matrix::<Integer>::from_rows(vec![vec![
Integer::from(1),
Integer::from(2),
Integer::from(3),
]]);
let w = Matrix::<Integer>::from_rows(vec![vec![
Integer::from(4),
Integer::from(5),
Integer::from(6),
]]);
assert_eq!(Matrix::dot(&v, &w), Integer::from(32));