アーキテクチャ
このガイドでは、autodiff のパッケージが互いに、また Luna Flow の他の部分にどのように依存しているか、そしてどの不変条件がレイヤーを分離しているかを示します。
レイヤー
Dual[T] は dual で一度だけ定義されるので、そのメソッドとトレイトインスタンスは型とともに置かれます。それ以外はすべて、これを再エクスポートするか利用します:
luna-generic arithmetic
\ /
+-- dual --+
|
+-- forward -- autodiff (root facade, also re-exports dual)
+-- core
+-- elementary
+-- checked
+-- linalg (+ linear-algebra/immut)
+-- poly (+ luna-poly/immut/dense, sparse)
| パッケージ | 依存先 | 種類 |
|---|---|---|
dual | luna-generic, arithmetic | 実装 |
forward | dual, luna-generic | 実装 |
core | dual, luna-generic | ファサード |
elementary | dual, arithmetic | ファサード |
checked | dual, arithmetic | ファサード |
autodiff | dual, forward, luna-generic, arithmetic | ファサード |
linalg | dual, luna-generic, linear-algebra/immut | ブリッジ |
poly | dual, luna-generic, luna-poly/immut/{dense,sparse} | ブリッジ |
examples | dual, linalg, poly, linear-algebra, luna-poly | 例 |
tests | 上記すべて(テストでのインポートのみ) | テスト |
不変条件
- 軽量パッケージのうち振る舞いを含むのは
dualとforwardだけです。ファサードはpub usingの行だけを含みます。 - 軽量パッケージ(
dual、forward、core、elementary、checked、ルート)はいずれもlinear-algebra、luna-poly、floating、type_theoryをインポートしません。スカラーの導関数だけが必要なユーザーがコンテナを取り込むことはありません。 - ブリッジは軽量パッケージに依存し、その逆はありません。
- トレイト名は再エクスポートされるだけで再定義されないため、インスタンスはエコシステム全体で共有されます。
Dual[T]は環レベルの構造トレイトのみを実装します。dual の設計 を参照してください。