core API
core 包是本仓库的代数门面包:它重新导出 Dual 以及 Dual[T] 所实现的 luna-generic 结构 trait,而不导出 arithmetic 中的任何内容。当你编写泛型的环层面代码、希望依赖集中不含算术 trait 时,就导入它。
导入
import {
"Luna-Flow/autodiff/core" @ad_core,
}
别名 @ad_core 可避免与其他名为 core 的包混淆;示例中都使用这个别名。
重新导出的类型
Dual
对偶数类型;见 dual API。
pub using @dual {type Dual}
重新导出的结构 trait
每个 trait 都是 luna-generic 中的原始定义;Dual[T] 在所示约束下实现它。
| Trait | 所需结构 | 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
}