opensrdk_symbolic_computation/expression/matrix_expression/
size.rs1use crate::{MatrixExpression, Size};
2
3impl MatrixExpression {
4 pub fn sizes(&self) -> Vec<Size> {
5 match self {
6 MatrixExpression::T(v) => {
7 let sizes = v.sizes();
8 vec![sizes[1], sizes[0]]
9 }
10 MatrixExpression::Inv(v) => v.sizes(),
11 MatrixExpression::Det(_) => vec![Size::One, Size::One],
12 }
13 }
14}
15
16#[cfg(test)]
17mod tests {
18 use std::{collections::HashMap, collections::HashSet, ops::Add};
19
20 use opensrdk_linear_algebra::Matrix;
21
22 use crate::{new_variable, new_variable_tensor, Expression, MatrixExpression, Size};
23
24 #[test]
25 fn it_works() {
26 let id = "x";
27 let ea = new_variable_tensor((id).to_string(), vec![Size::Many, Size::Many]);
28
29 let size = ea.sizes();
30
31 let ea_t = ea.clone().t();
32 let size_t = ea_t.sizes();
33
34 assert_eq!(vec![size[1], size[0]], size_t);
35
36 let ea_inv = ea.clone().inv();
37 let size_inv = ea_inv.sizes();
38
39 assert_eq!(size, size_inv);
40
41 let ea_det = ea.clone().det();
42 let size_det = ea_det.sizes();
43
44 assert_eq!(vec![Size::One, Size::One], size_det);
45 }
46}