immut API

Luna-Flow/luna-poly/immut 是不可变多项式层的门面包。它自身不定义任何内容:它重新导出共享的 core 词汇、Luna-Flow/luna-generic 的通用代数 trait 以及四种不可变表示,因此一次导入即可访问整个面向值的 API。

import {
  "Luna-Flow/luna-poly/immut",
}

下列每个名字都是 pub using 别名:@immut.DensePolynomial 就是 @immut/dense.DensePolynomial,@immut.ExponentVector 就是 @core.ExponentVector。方法在定义该类型的包的页面中说明。

多项式类型

DensePolynomial

不可变稠密一元多项式。参见 immut/dense API。

pub using @dense {type DensePolynomial}

TermPolynomial

以有序项数组表示的不可变多元多项式。参见 immut/term API。

pub using @term {type TermPolynomial}

SparsePolynomial

以有序映射表示的不可变多元多项式。参见 immut/sparse API。

pub using @sparse {type SparsePolynomial}

ContextPolynomial, ContextSubstitutionValue

具名变量上下文上的不可变多项式,以及其代换的载荷。参见 immut/context API。

pub using @context {type ContextPolynomial}
pub using @context {type ContextSubstitutionValue}

别名重新导出的是类型,而不是作为独立值的构造器:在期望类型已知时写 Scalar(v) 和 Polynomial(p),否则写全称 @immut.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,以便两个门面包导出相同的 trait 集合,尽管没有任何不可变类型实现它们。

来自 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[A : @immut.Ring + Eq] cube_at(p : @immut.DensePolynomial[A], a : A) -> A {
  p.pow(3).eval(a)
}

test "one import" {
  let p = @immut.DensePolynomial::from_coefficients([1, 1])
  inspect(cube_at(p, 1), content="8")
  let v : @immut.ExponentVector = @immut.ExponentVector::from_array([1U])
  let s = @immut.SparsePolynomial::from_terms([(v, 2)])
  inspect(@immut.HasTermCount::term_count(s), content="1")
}