core API
core パッケージはこのリポジトリの代数的ファサードです。Dual と、Dual[T] が実装する luna-generic の構造トレイトを再エクスポートし、arithmetic からは何も再エクスポートしません。環レベルのジェネリックなコードを書き、算術トレイトを含まない依存関係にしたい場合にインポートします。
ソース:src/core/alias.mbt。
インポート
import {
"Luna-Flow/autodiff/core" @ad_core,
}
エイリアス @ad_core を使うと、core という名前の他のパッケージとの混同を避けられます。例ではこのエイリアスを使います。
再エクスポートされる型
Dual
双対数型です。dual API を参照してください。
pub using @dual {type Dual}
再エクスポートされる構造トレイト
各トレイトは luna-generic のオリジナルです。Dual[T] は表に示す境界のもとでそれを実装します。
| トレイト | 必要な構造 | Dual[T] がインスタンスを持つ条件 |
|---|---|---|
Zero | zero() | T : Zero |
One | one() | T : One + Zero |
AddMonoid | Add + Zero | T : AddMonoid |
AddGroup | AddMonoid + Neg + Sub | T : AddGroup |
MulMonoid | Mul + One | T : Semiring |
Semiring | AddMonoid + MulMonoid | T : Semiring |
Ring | Semiring + Neg + Sub | T : Ring |
IntegralHomomorphism | 整数型からの from_integral | T : IntegralHomomorphism + Zero |
pub using @luna-generic {trait Zero}
pub using @luna-generic {trait One}
pub using @luna-generic {trait AddMonoid}
pub using @luna-generic {trait AddGroup}
pub using @luna-generic {trait MulMonoid}
pub using @luna-generic {trait Semiring}
pub using @luna-generic {trait Ring}
pub using @luna-generic {trait IntegralHomomorphism}
Zero
加法単位元。
One
乗法単位元。
AddMonoid
単位元を持つ加法。
AddGroup
符号反転と減算を備えた加法。
MulMonoid
単位元を持つ乗法。
Semiring
分配法則を満たす両モノイド。
Ring
加法逆元を持つ半環。
IntegralHomomorphism
整数からの標準的な写像です。ジェネリックコード中の整数定数に使います。
fn[T : @ad_core.Ring + @ad_core.IntegralHomomorphism] f(x : T) -> T {
let five : T = @ad_core.IntegralHomomorphism::from_integral(5)
x * x - five * x
}
test "ring-level generic code" {
let y = f(@ad_core.Dual::variable(4.0))
assert_eq(y.value(), -4.0)
assert_eq(y.tangent(), 3.0) // 2x - 5
}