LICENSE=BSD-3-ClauseCGO_ENABLED=0go-autodiff is the planned home of automatic differentiation for go-scikit: forward and reverse modes, with Jacobian and Hessian helpers that feed go-numerics/optimize gradients and the JacFunc of go-numerics/integrate, both of which take user-supplied derivatives or finite differences today. It is in wave 2 (PLAN.md item 8). There is no library and no release yet: this page says what is planned, in which wave, and against which references it will be validated.
org go-autodiff domain automatic differentiation status planned (wave 2) release none yet oracles JAX, finite differences plan go-scikit/roadmap: PLAN.md, STATUS.md
go-autodiff is the planned home of automatic differentiation for go-scikit: forward and reverse modes, with Jacobian and Hessian helpers that feed go-numerics/optimize gradients and the JacFunc of go-numerics/integrate, both of which take user-supplied derivatives or finite differences today. It is in wave 2 (PLAN.md item 8). Everything below is planned, not released.
Dual and hyper-dual numbers: one sweep per Jacobian-vector product, simple and exact to rounding.
A tape (Wengert list) recorded by calling tape methods: one sweep per gradient.
Helpers for Jacobians and Hessians, with forward-over-reverse Hessian-vector products.
Gradients for optimize, and an AD-built Jacobian for the stiff solvers' JacFunc in integrate.
Against analytic derivatives, against finite differences (CheckGrad), and against JAX as an oracle.
Go has no operator overloading, so user code is written against an AD type; the design weighs duals, a tape, source transformation and generics.
No cgo, the same results on every architecture the fleet tests.
GPL implementations (pbenner/autodiff) are read-only; Tapenade, Enzyme and JAX are design references and oracles.
Every go-scikit library is validated against the tool that is the reference of its domain, run as an oracle from Go. These are the criteria planned for go-autodiff.
Forward and reverse results must be exact to rounding; the report is the maximum relative error and ULPs.
CheckGrad agrees to O(h), the truncation order of the difference.
Jacobians and Hessians from JAX (uv run --with jax) serve as reference values, driven from Go with JSON on a pipe.
Planned (wave 2). Forward (dual) and reverse (tape) automatic differentiation with Jacobian and Hessian helpers for `optimize` and `integrate`. The repository name `ad` is proposed, not created.
The documentation (Hugo + Hextra): the scope, the plan and the references of each planned library. Source โ
Logos and icons for the organization, in SVG / PNG / JPG / ICO / ICNS across colour, white and black variants.
go-autodiff is planned, wave 2. The documentation holds its scope, its plan and its references; the roadmap is PLAN.md.
Read the source on GitHub โ