mutable API
Luna-Flow/luna-poly/mutable 是可变多项式层的门面包。它自身不定义任何内容:它重新导出共享的 core 词汇、Luna-Flow/luna-generic 的通用代数 trait 以及四种可变表示,因此一次导入即可访问整个面向执行的 API。它导出的名字与 immut 门面包相同。
import {
"Luna-Flow/luna-poly/mutable",
}
下列每个名字都是 pub using 别名:@mutable.DensePolynomial 就是 @mutable/dense.DensePolynomial,@mutable.ExponentVector 就是 @core.ExponentVector,与 @immut.ExponentVector 是同一类型。方法在定义该类型的包的页面中说明。
多项式类型
DensePolynomial
可变稠密一元多项式。参见 mutable/dense API。
pub using @dense {type DensePolynomial}
TermPolynomial
以有序项数组表示的可变多元多项式。参见 mutable/term API。
pub using @term {type TermPolynomial}
SparsePolynomial
以有序映射表示的可变多元多项式。参见 mutable/sparse API。
pub using @sparse {type SparsePolynomial}
ContextPolynomial, ContextSubstitutionValue
具名变量上下文上的可变多项式,以及其代换的载荷。参见 mutable/context API。
pub using @context {type ContextPolynomial}
pub using @context {type ContextSubstitutionValue}
别名重新导出的是类型,而不是作为独立值的构造器:在期望类型已知时写 Scalar(v) 和 Polynomial(p),否则写全称 @mutable.ContextSubstitutionValue::Polynomial(p)。
来自 core 的共享词汇
ExponentVector, Variable, VariableContext, PolynomialShape
单项式、具名变量、变量上下文和形状元数据。参见 core API。
pub using @core {type ExponentVector}
pub using @core {type Variable}
pub using @core {type VariableContext}
pub using @core {type PolynomialShape}
UnivariateOps, MultivariateOps, ContextOps
用于字典传递式泛型代码的操作记录。参见 core API。
pub using @core {type UnivariateOps}
pub using @core {type MultivariateOps}
pub using @core {type ContextOps}
能力 trait
观察 trait 及其组合。参见 core API。
pub using @core {trait HasLength}
pub using @core {trait HasDegree}
pub using @core {trait IsZero}
pub using @core {trait HasTermCount}
pub using @core {trait HasArity}
pub using @core {trait HasTotalDegree}
pub using @core {trait HasContext}
pub using @core {trait HasShape}
pub using @core {trait Clearable}
pub using @core {trait Copyable}
pub using @core {trait UnivariatePolynomial}
pub using @core {trait MultivariatePolynomial}
pub using @core {trait ContextualPolynomial}
pub using @core {trait MutablePolynomial}
每个可变容器除了实现其所属族的观察组合外,还实现 Clearable、Copyable 和 MutablePolynomial。
来自 luna-generic 的代数 trait
Zero, One, AddMonoid, MulMonoid, AddGroup, MulGroup, Semiring, Ring, Field, Num
Luna-Flow/luna-generic 的代数能力 trait,重新导出后,书写系数约束无需第二次导入。
pub using @luna-generic {trait Zero}
pub using @luna-generic {trait One}
pub using @luna-generic {trait AddMonoid}
pub using @luna-generic {trait MulMonoid}
pub using @luna-generic {trait AddGroup}
pub using @luna-generic {trait MulGroup}
pub using @luna-generic {trait Semiring}
pub using @luna-generic {trait Ring}
pub using @luna-generic {trait Field}
pub using @luna-generic {trait Num}
fn[P : @mutable.MutablePolynomial + @mutable.IsZero] reset(p : P) -> Bool {
@mutable.Clearable::clear(p)
@mutable.IsZero::is_zero(p)
}
test "one import" {
let p = @mutable.DensePolynomial::from_coefficients([1, 1])
inspect(reset(p), content="true")
let s = @mutable.SparsePolynomial::from_array([([1U], 2)])
inspect(reset(s), content="true")
}