1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
use crate::{ConstantValue, Expression, MatrixExpression};
use std::collections::HashMap;

impl MatrixExpression {
    pub fn assign(self, variables: &HashMap<&str, ConstantValue>) -> Expression {
        match self {
            MatrixExpression::T(v) => v.assign(variables).t(),
            MatrixExpression::Inv(v) => v.assign(variables).inv(),
            MatrixExpression::Det(v) => v.assign(variables).det(),
        }
    }
}

#[cfg(test)]
mod tests {
    use std::collections::HashMap;

    use opensrdk_linear_algebra::{sparse::SparseTensor, Matrix};

    use crate::{
        new_variable, new_variable_tensor, AbstractSize, ConstantValue, Expression,
        MatrixExpression, Size,
    };

    #[test]
    fn it_works1() {
        let id = "x";
        let ea = new_variable_tensor((id).to_string(), vec![Size::Many, Size::Many]);

        let ea_t = ea.clone().t();
        let mut hash1 = HashMap::new();

        let len = 7usize;
        let a = Matrix::from(len, vec![1.0; len * len]).unwrap();

        hash1.insert(id, ConstantValue::Matrix(a.clone()));

        let result = ea_t.assign(&hash1);

        assert_eq!(result, Expression::from(ConstantValue::Matrix(a.t())))
    }
}