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