opensrdk_symbolic_computation/expression/matrix_expression/
size.rs

1use 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}