immut API
Luna-Flow/luna-poly/immut はイミュータブルな多項式層のファサードです。自前の定義は持たず、共有の core の語彙、Luna-Flow/luna-generic の共通代数トレイト、4 つのイミュータブル表現を再エクスポートするため、1 回のインポートで値指向の 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}
能力トレイト
観測トレイトとそのバンドルです。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 の代数トレイト
Zero, One, AddMonoid, MulMonoid, AddGroup, MulGroup, Semiring, Ring, Field, Num
Luna-Flow/luna-generic の代数的能力トレイトです。2 つ目のインポートなしで係数の制約を書けるように再エクスポートされています。
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")
}