Immutable and mutable polynomial libraries for MoonBit with canonical dense, sparse, and context-aware representations.
Dependencies
moon add Luna-Flow/luna-poly@0.4.0import {
"Luna-Flow/luna-poly/immut",
}test "readme example" {
// 1 + 2x + 3x^2, squared and evaluated at 2
let p = @immut.DensePolynomial::from_coefficients([1, 2, 3])
inspect(p.pow(2).eval(2), content="289")
// in-place updates
let buffer = @mutable.DensePolynomial::from_coefficients([1, 2, 3])
buffer.set_coefficient(1, 5)
buffer.add_inplace(@mutable.DensePolynomial::from_coefficients([-1, -5, -3]))
assert_true(buffer.is_zero())
// named variables, partial evaluation and substitution
let ctx = @immut.VariableContext::from_names(["x", "y"])
let x = ctx.require_variable("x")
let y = ctx.require_variable("y")
let q = @immut.ContextPolynomial::from_named_terms_as_sparse(ctx, [
([(x, 2U)], 1),
([(x, 1U), (y, 1U)], 3),
([], 4),
])
inspect(q.eval_named([(x, 2), (y, 5)]), content="38")
inspect(q.eval_partial_named([(x.to_type_theory_name(), 2)]), content="8 + 6 * y")
let y_plus_1 = @immut.ContextPolynomial::from_named_terms_as_sparse(ctx, [([(y, 1U)], 1), ([], 1)])
inspect(q.substitute([(x, Polynomial(y_plus_1))]), content="5 + 5 * y + 4 * y^2")
}| Package | Contents |
|---|---|
| Luna-Flow/luna-poly/core | ExponentVector, Variable, VariableContext, PolynomialShape, capability traits, operation records |
| Luna-Flow/luna-poly/immut | facade: immutable DensePolynomial, TermPolynomial, SparsePolynomial, ContextPolynomial, plus core and luna-generic re-exports |
| Luna-Flow/luna-poly/immut/{dense,term,sparse,context} | the immutable implementations |
| Luna-Flow/luna-poly/mutable | facade: the same names as mutable containers |
| Luna-Flow/luna-poly/mutable/{dense,term,sparse,context} | the mutable implementations |
Install
Download zipImmutable and mutable polynomial libraries for MoonBit with canonical dense, sparse, and context-aware representations.
Dependencies