use crate::stdlib::StdlibValue;
pub fn get_attribute(attr: &str) -> Option<StdlibValue> {
match attr {
"pi" => Some(StdlibValue::Float(std::f64::consts::PI)),
"e" => Some(StdlibValue::Float(std::f64::consts::E)),
"tau" => Some(StdlibValue::Float(std::f64::consts::TAU)),
"inf" => Some(StdlibValue::Float(f64::INFINITY)),
"nan" => Some(StdlibValue::Float(f64::NAN)),
_ => None,
}
}
pub fn get_function(func: &str) -> Option<MathFunction> {
match func {
"sqrt" => Some(MathFunction::Sqrt),
"sin" => Some(MathFunction::Sin),
"cos" => Some(MathFunction::Cos),
"tan" => Some(MathFunction::Tan),
"asin" => Some(MathFunction::Asin),
"acos" => Some(MathFunction::Acos),
"atan" => Some(MathFunction::Atan),
"atan2" => Some(MathFunction::Atan2),
"sinh" => Some(MathFunction::Sinh),
"cosh" => Some(MathFunction::Cosh),
"tanh" => Some(MathFunction::Tanh),
"exp" => Some(MathFunction::Exp),
"log" => Some(MathFunction::Log),
"log10" => Some(MathFunction::Log10),
"log2" => Some(MathFunction::Log2),
"pow" => Some(MathFunction::Pow),
"floor" => Some(MathFunction::Floor),
"ceil" => Some(MathFunction::Ceil),
"trunc" => Some(MathFunction::Trunc),
"round" => Some(MathFunction::Round),
"abs" => Some(MathFunction::Abs),
"fabs" => Some(MathFunction::Fabs),
"copysign" => Some(MathFunction::Copysign),
"fmod" => Some(MathFunction::Fmod),
"remainder" => Some(MathFunction::Remainder),
"degrees" => Some(MathFunction::Degrees),
"radians" => Some(MathFunction::Radians),
"hypot" => Some(MathFunction::Hypot),
"factorial" => Some(MathFunction::Factorial),
"gcd" => Some(MathFunction::Gcd),
"isnan" => Some(MathFunction::Isnan),
"isinf" => Some(MathFunction::Isinf),
"isfinite" => Some(MathFunction::Isfinite),
_ => None,
}
}
#[derive(Debug, Clone)]
pub enum MathFunction {
Sqrt,
Sin,
Cos,
Tan,
Asin,
Acos,
Atan,
Atan2,
Sinh,
Cosh,
Tanh,
Exp,
Log,
Log10,
Log2,
Pow,
Floor,
Ceil,
Trunc,
Round,
Abs,
Fabs,
Copysign,
Fmod,
Remainder,
Degrees,
Radians,
Hypot,
Factorial,
Gcd,
Isnan,
Isinf,
Isfinite,
}