///|
test "symcore builds structured expressions" {
let x = Expr::Symbol("x")
let expr = add([x, int(1)])
inspect(@symprint.pretty_string(expr), content="x + 1")
}test {
let map = { 3: "three", 8: "eight", 1: "one" }
assert_eq(map.get(2), None)
assert_eq(map.get(3), Some("three"))
map.set(3, "updated")
assert_eq(map.get(3), Some("updated"))
}impl Add for ComplexFloatimpl Mul for ComplexFloatimpl Neg for ComplexFloatimpl Show for ComplexFloatfn ComplexFloat::from_exact_parts(real : BigRational, imag : BigRational, prec? : Int) -> ComplexFloatfn ComplexFloat::to_rational_parts(self : ComplexFloat) -> ((BigInt, BigInt), (BigInt, BigInt)) raise MpfErrorpub(all) enum Expr {
Number(BigRational)
Float(Float)
ComplexFloat(ComplexFloat)
NumberSymbol(NumberSymbolKind)
Boolean(Bool)
IdentityFunction
Symbol(String)
Dummy(String, Int)
Wild(String, Array[Expr], Array[WildProperty])
WildFunction(String, Array[Int])
FunctionHead(String)
UndefinedFunction(String)
Apply(Expr, Array[Expr])
Add(Array[Expr])
Mul(Array[Expr])
Pow(Expr, Expr)
Mod(Expr, Expr)
Tuple(Array[Expr])
Dict(Array[(Expr, Expr)])
Relational(RelOp, Expr, Expr)
Derivative(Expr, Array[Expr])
Subs(Expr, Expr, Expr)
Lambda(Expr, Expr)
Function(String, Array[Expr])
}pub enum ExprForm {
Number(BigRational)
Float(Float)
ComplexFloat(ComplexFloat)
NumberSymbol(NumberSymbolKind)
Symbol(String)
Dummy(String, Int)
Wild(String, Array[Expr], Array[WildProperty])
WildFunction(String, Array[Int])
IdentityFunction
FunctionHead(String)
UndefinedFunction(String)
Apply(Expr, Array[Expr])
Boolean(Bool)
Add(Array[Expr])
Mul(Array[Expr])
Pow(Expr, Expr)
Mod(Expr, Expr)
Tuple(Array[Expr])
Dict(Array[(Expr, Expr)])
Relational(RelOp, Expr, Expr)
Derivative(Expr, Array[Expr])
Subs(Expr, Expr, Expr)
Lambda(Expr, Expr)
}pub(all) enum NumberSymbolKind {
ImaginaryUnit
Pi
Exp1
EulerGamma
GoldenRatio
Catalan
Infinity
NegativeInfinity
ComplexInfinity
NaN
}pub(all) enum SympifyInput {
FromExpr(Expr)
FromBool(Bool)
FromInt(Int)
FromRational(BigRational)
FromFloat(Float)
FromComplexFloat(ComplexFloat)
NumberSymbol(NumberSymbolKind)
SymbolName(String)
DummyName(String)
WildName(String)
WildSpec(String, Array[SympifyInput], Array[WildProperty])
FunctionHeadName(String)
UndefinedFunctionName(String)
Application(SympifyInput, Array[SympifyInput])
Tuple(Array[SympifyInput])
Dict(Array[(SympifyInput, SympifyInput)])
}pub(all) enum WildProperty {
Symbol
Integer
Rational
Real
Positive
Negative
Finite
Nonzero
}test "symcore add constructs readable sums" {
let x = Expr::Symbol("x")
inspect(@symprint.pretty_string(add([x, int(1)])), content="x + 1")
}fn complex_float_from_exact_parts(real : BigRational, imag : BigRational, prec? : Int) -> ComplexFloattest "symcore function builds named applications" {
let x = Expr::Symbol("x")
inspect(@symprint.pretty_string(function("sin", [x])), content="sin(x)")
}test "symcore int builds an exact integer expression" {
inspect(@symprint.pretty_string(int(3)), content="3")
}fn standalone_function_head_display_name(name : String) -> Stringtest "symcore subs_expr performs structural replacement" {
let x = Expr::Symbol("x")
let expr = add([x, int(1)])
inspect(
@symprint.pretty_string(subs_expr(expr, x, int(3))),
content="Subs(x + 1, x, 3)",
)
}test "symcore sympify lifts typed inputs into expr" {
let expr = sympify(
SympifyInput::Tuple([
SympifyInput::FromInt(1),
SympifyInput::SymbolName("x"),
]),
)
inspect(@symprint.pretty_string(expr), content="(1, x)")
}fn[T] with_distribute_raise(value : Bool, thunk : () -> T raise) -> T raisefn[T] with_exp_is_pow_raise(value : Bool, thunk : () -> T raise) -> T raiseA symbolic mathematics library for Moonbit.
Dependencies