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
use crate::TensorExpression;
impl TensorExpression {
pub(crate) fn _rust_code(&self, parentheses: bool) -> String {
match self {
TensorExpression::Symbol(symbol, _) => TensorExpression::rust_code_symbol(symbol),
TensorExpression::Constant(_) => todo!(),
TensorExpression::Zero => "0.0".to_owned(),
TensorExpression::Add(l, r) => TensorExpression::rust_code_add(l, r, parentheses),
TensorExpression::Sub(l, r) => TensorExpression::rust_code_sub(l, r, parentheses),
TensorExpression::MulScalarLhs(l, r) => {
TensorExpression::rust_code_mul_scalar_lhs(l, r, parentheses)
}
TensorExpression::MulScalarRhs(l, r) => {
TensorExpression::rust_code_mul_scalar_rhs(l, r, parentheses)
}
TensorExpression::Neg(v) => TensorExpression::rust_code_neg(v),
TensorExpression::KroneckerDeltas(rank_pairs) => {
TensorExpression::rust_code_kronecker_deltas(rank_pairs, parentheses)
}
TensorExpression::InnerProd {
terms,
rank_combinations,
} => TensorExpression::rust_code_inner_prod(terms, rank_combinations, parentheses),
}
}
pub fn rust_code(&self) -> String {
Self::_rust_code(&self, false)
}
}