|
5 | 5 | [](https://travis-ci.org/JuliaDiff/ChainRules.jl)
|
6 | 6 | [](https://coveralls.io/github/JuliaDiff/ChainRules.jl?branch=master)
|
7 | 7 |
|
8 |
| -**Docs:* |
| 8 | +**Docs:** |
9 | 9 | [](https://JuliaDiff.github.io/ChainRules.jl/dev)
|
10 | 10 | [](https://JuliaDiff.github.io/ChainRules.jl/stable)
|
11 | 11 |
|
12 | 12 | The ChainRules package provides a variety of common utilities that can be used by downstream automatic differentiation (AD) tools to define and execute forward-, reverse-, and mixed-mode primitives.
|
13 | 13 |
|
14 |
| -This package is a WIP; the framework is essentially there, but there are a bunch of TODOs, virtually no tests, etc. PRs welcome! Documentation is incoming, which should help if you'd like to contribute. |
| 14 | +The core logic of ChainRules is implemented in [ChainRulesCore.jl](https://github.com/JuliaDiff/ChainRulesCore.jl). |
| 15 | +To add ChainRules support to your package, by defining new `rrule`s or `frules`, you only need to depend on the very light-weight package ChainRulesCore.jl. |
| 16 | +This repository contains ChainRules.jl, which is what people actually use directly. |
| 17 | +ChainRules reexports all the ChainRulesCore functionality, and has all the rules for the Julia standard library. |
| 18 | +and has all the rules for the julia standard library. |
15 | 19 |
|
16 |
| -Here are some of the basic goals for the package: |
17 | 20 |
|
18 |
| -- First-class support for complex differentiation via Wirtinger derivatives. |
| 21 | +Here are some of the core features of the package: |
19 | 22 |
|
20 | 23 | - Mixed-mode composability without being coupled to a specific AD implementation.
|
21 |
| - |
| 24 | +- Extensible rules: package authors can add rules (and thus AD support) to the functions in their packages, without needing to make a PR to ChainRules.jl . |
| 25 | +- Control-inverted design: rule authors can fully specify derivatives in a concise manner that supports computational efficiencies, so we will only compute as much as the user requests. |
22 | 26 | - Propagation semantics built-in, with default implementations that allow rule authors to easily opt-in to common optimizations (fusion, increment elision, memoization, etc.).
|
23 | 27 |
|
24 |
| -- Control-inverted design: rule authors can fully specify derivatives in a concise manner while naturally allowing the caller to compute only what they need. |
25 | 28 |
|
26 | 29 | The ChainRules source code follows the [YASGuide](https://github.com/jrevels/YASGuide).
|
0 commit comments