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")
}