A generic polynomial lib, a part of LunaFlow.
type ExpVectype MultiPoly[A]type Polynomial[V]impl Compare for Polynomial[V]impl Eq for Polynomial[V]fn[A : HomomorphismNat + Eq + Semiring + AddMonoid + Add + Zero + MulMonoid + Mul + One] Polynomial::derivative(self : Polynomial[A]) -> Polynomial[A]fn[A : Semiring + AddMonoid + Add + Zero + MulMonoid + Mul + One] Polynomial::empty(cap~ : Int) -> Polynomial[A]fn[A : Semiring + AddMonoid + Add + Zero + MulMonoid + Mul + One] Polynomial::eval(self : Polynomial[A], init : A) -> Afn[A : Eq + Ring + Semiring + AddMonoid + Add + Zero + MulMonoid + Mul + One + Neg] Polynomial::karatsuba(self : Polynomial[A], other : Polynomial[A]) -> Polynomial[A]fn[A : Eq + Semiring + AddMonoid + Add + Zero + MulMonoid + Mul + One] Polynomial::scale(self : Polynomial[A], power : Int, coefficient : A) -> Polynomial[A]fn[A, B : Semiring + AddMonoid + Add + Zero + MulMonoid + Mul + One] Polynomial::substitute(self : Polynomial[A], f : (B, A) -> B, init~ : B) -> Bfn[A : Eq + Semiring + AddMonoid + Add + Zero + MulMonoid + Mul + One] Polynomial::substitute_poly(self : Polynomial[A], x : Polynomial[A]) -> Polynomial[A]type SparsePolynomial[V]impl Zero for SparsePolynomial[V]impl Add for SparsePolynomial[V]fn[V : Eq + AddMonoid + Add + Zero] op_add(self : SparsePolynomial[V], other : SparsePolynomial[V]) -> SparsePolynomial[V]impl Eq for SparsePolynomial[V]impl Mul for SparsePolynomial[A]fn[A : Semiring + Eq + AddMonoid + Add + Zero + MulMonoid + Mul + One] op_mul(self : SparsePolynomial[A], other : SparsePolynomial[A]) -> SparsePolynomial[A]impl Show for SparsePolynomial[V]fn[V : Eq + AddMonoid + Add + Zero] SparsePolynomial::add(self : SparsePolynomial[V], other : SparsePolynomial[V]) -> Unitfn[V : Eq + AddMonoid + Add + Zero] SparsePolynomial::add_term(self : SparsePolynomial[V], exp_vec : ExpVec, coefficient : V) -> SparsePolynomial[V]fn[V : Eq + AddMonoid + Add + Zero] SparsePolynomial::add_term_inplace(self : SparsePolynomial[V], exp_vec : ExpVec, coefficient : V) -> Unitfn[V : Eq + AddMonoid + Add + Zero] SparsePolynomial::copy(self : SparsePolynomial[V]) -> SparsePolynomial[V]fn[V : Show + Eq + Semiring + AddMonoid + Add + Zero + MulMonoid + Mul + One] SparsePolynomial::eval_at(self : SparsePolynomial[V], var_index : Int, val : V) -> SparsePolynomial[V]fn[V : Show + Eq + Semiring + AddMonoid + Add + Zero + MulMonoid + Mul + One] SparsePolynomial::eval_at_many(self : SparsePolynomial[V], vars : Array[(Int, V)]) -> SparsePolynomial[V]fn[V : Eq + AddMonoid + Add + Zero] SparsePolynomial::from_array(arr : Array[(ExpVec, V)]) -> SparsePolynomial[V]fn[V : Eq + AddMonoid + Add + Zero] SparsePolynomial::from_iter(iter : Iter[(ExpVec, V)]) -> SparsePolynomial[V]fn[V : Eq + Semiring + AddMonoid + Add + Zero + MulMonoid + Mul + One] SparsePolynomial::mul_term(self : SparsePolynomial[V], exp_vec : ExpVec, coefficient : V) -> SparsePolynomial[V]fn[V] SparsePolynomial::op_set(self : SparsePolynomial[V], exp_vec : ExpVec, coefficient : V) -> Unitfn[A : Semiring + Eq + AddMonoid + Add + Zero + MulMonoid + Mul + One] SparsePolynomial::pow(self : SparsePolynomial[A], expon : UInt) -> SparsePolynomial[A]fn[V] SparsePolynomial::range(self : SparsePolynomial[V], low : ExpVec, hight : ExpVec) -> Iter2[ExpVec, V]fn[A : Semiring + Eq + AddMonoid + Add + Zero + MulMonoid + Mul + One] SparsePolynomial::replace_const(self : SparsePolynomial[A], index : Int, coeff : A) -> SparsePolynomial[A]fn[A : Semiring + Eq + AddMonoid + Add + Zero + MulMonoid + Mul + One] SparsePolynomial::replace_poly(self : SparsePolynomial[A], index : Int, other : SparsePolynomial[A]) -> SparsePolynomial[A]fn[A : Semiring + Eq + AddMonoid + Add + Zero + MulMonoid + Mul + One] SparsePolynomial::replace_term(self : SparsePolynomial[A], index : Int, exp : ExpVec, coeff : A) -> SparsePolynomial[A]fn[A : Semiring + Eq + AddMonoid + Add + Zero + MulMonoid + Mul + One] SparsePolynomial::replace_variable(self : SparsePolynomial[A], index1 : Int, index2 : Int) -> SparsePolynomial[A]fn[A : Eq + Semiring + HomomorphismNat + AddMonoid + Add + Zero + MulMonoid + Mul + One] coe(n : Int) -> Polynomial[A]Install
Download zipA generic polynomial lib, a part of LunaFlow.