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
pub mod assign;
pub mod differential;
pub mod operators;
pub mod rust_code;
pub mod symbol;
pub mod tensor_expression;
pub mod tex_code;
pub mod transcendental_expression;

pub use assign::*;
pub use differential::*;
pub use rust_code::*;
pub use symbol::*;
pub use tensor_expression::*;
pub use tex_code::*;
pub use transcendental_expression::*;

use num_rational::*;

#[derive(Clone, Debug, PartialEq)]
pub enum Expression {
    Symbol(String),
    Constant(f64),
    Add(Box<Expression>, Box<Expression>),
    Sub(Box<Expression>, Box<Expression>),
    Mul(Box<Expression>, Box<Expression>),
    Div(Box<Expression>, Box<Expression>),
    Neg(Box<Expression>),
    Pow(Box<Expression>, Ratio<u32>),
    Transcendental(Box<TranscendentalExpression>),
    DegeneratedTensor(Box<TensorExpression>),
    DiffResultTensor(Box<TensorExpression>),
}

impl From<f64> for Expression {
    fn from(v: f64) -> Self {
        Expression::Constant(v)
    }
}