# ad: Automatic Differentiation

Forward-, reverse- and mixed- mode automatic differentiation combinators with a common API.

Type-level "branding" is used to both prevent the end user from confusing infinitesimals and to limit unsafe access to the implementation details of each Mode.

Each mode has a separate module full of combinators.

`Numeric.AD.Mode.Forward`

provides basic forward-mode AD. It is good for computing simple derivatives.`Numeric.AD.Mode.Reverse`

uses benign side-effects to compute reverse-mode AD. It is good for computing gradients in one pass.`Numeric.AD.Mode.Sparse`

computes a sparse forward-mode AD tower. It is good for higher derivatives or large numbers of outputs.`Numeric.AD.Mode.Tower`

computes a dense forward-mode AD tower useful for higher derivatives of single input functions.`Numeric.AD.Mode.Mixed`

computes using whichever mode or combination thereof is suitable to each individual combinator. This mode is the default, re-exported by`Numeric.AD`

While not every mode can provide all operations, the following basic operations are supported, modified as appropriate by the suffixes below:

`grad`

computes the gradient (partial derivatives) of a function at a point.`jacobian`

computes the Jacobian matrix of a function at a point.`diff`

computes the derivative of a function at a point.`du`

computes a directional derivative of a function at a point.`hessian`

computes the Hessian matrix (matrix of second partial derivatives) of a function at a point.

The following suffixes alter the meanings of the functions above as follows:

`'`

-- also return the answer`With`

lets the user supply a function to blend the input with the output`F`

is a version of the base function lifted to return a`Traversable`

(or`Functor`

) result`s`

means the function returns all higher derivatives in a list or f-branching`Stream`

`T`

means the result is transposed with respect to the traditional formulation.`0`

means that the resulting derivative list is padded with 0s at the end.

Changes since 0.45.0

Converted

`Stream`

to use the external`comonad`

package

Changes since 0.44.5

Added Halley's method

Changes since 0.40.0

Fixed bug fix for

`'(/)' :: (Mode s, Fractional a) => AD s a`

Improved documentation

Regularized naming conventions

Exposed

`Id`

, probe, and lower methods via`Numeric.AD.Types`

Removed monadic combinators

Retuned the

`Mixed`

mode jacobian calculations to only require a`Functor`

-based result.Added unsafe variadic

`vgrad`

,`vgrad'`

, and`vgrads`

combinators

Versions [faq] | 0.12, 0.13, 0.15, 0.17, 0.18, 0.19, 0.20, 0.21, 0.22, 0.23, 0.24, 0.27, 0.28, 0.30.0, 0.31.0, 0.32.0, 0.33.0, 0.40, 0.40.1, 0.44.0, 0.44.1, 0.44.2, 0.44.3, 0.44.4, 0.45.0, 0.46.0, 0.46.1, 0.46.2, 0.47.0, 1.0.0, 1.0.1, 1.0.2, 1.0.3, 1.0.4, 1.0.5, 1.0.6, 1.1.0, 1.1.0.1, 1.1.1, 1.1.3, 1.2.0, 1.2.0.1, 1.2.0.2, 1.3, 1.3.0.1, 1.3.1, 1.4, 1.5, 1.5.0.1, 1.5.0.2, 3.0, 3.0.1, 3.1.1, 3.1.2, 3.1.3, 3.1.4, 3.2, 3.2.1, 3.2.2, 3.3.0.1, 3.3.1, 3.3.1.1, 3.4, 4.0, 4.0.0.1, 4.1, 4.2, 4.2.0.1, 4.2.1, 4.2.1.1, 4.2.2, 4.2.3, 4.2.4, 4.3, 4.3.1, 4.3.2, 4.3.2.1, 4.3.3, 4.3.4, 4.3.5, 4.3.6, 4.4, 4.4.1 |
---|---|

Dependencies | array (>=0.2 && <0.4), base (==4.*), comonad (==1.0.*), containers (>=0.2 && <0.5), data-reify (==0.6.*), streams (==0.6.*), template-haskell (==2.4.*) [details] |

License | BSD-3-Clause |

Copyright | (c) Edward Kmett 2010-2011, (c) Barak Pearlmutter and Jeffrey Mark Siskind 2008-2009 |

Author | Edward Kmett |

Maintainer | ekmett@gmail.com |

Revised | Revision 1 made by HerbertValerioRiedel at 2015-01-25T11:26:01Z |

Category | Math |

Home page | http://github.com/ekmett/ad |

Uploaded | by EdwardKmett at 2011-02-05T21:31:07Z |

Distributions | LTSHaskell:4.3.6, NixOS:4.4.1, Stackage:4.3.6 |

Downloads | 70572 total (122 in the last 30 days) |

Rating | 2.5 (votes: 3) [estimated by Bayesian average] |

Your Rating | |

Status | Docs not available [build log] All reported builds failed as of 2016-12-11 [all 7 reports] |

## Modules

*Numeric*- Numeric.AD
- Numeric.AD.Classes
- Numeric.AD.Halley
*Internal*- Numeric.AD.Internal.Classes
- Numeric.AD.Internal.Combinators
- Numeric.AD.Internal.Composition
- Numeric.AD.Internal.Dense
- Numeric.AD.Internal.Forward
- Numeric.AD.Internal.Reverse
- Numeric.AD.Internal.Sparse
- Numeric.AD.Internal.Tower

*Mode*- Numeric.AD.Mode.Directed
- Numeric.AD.Mode.Forward
- Numeric.AD.Mode.Mixed
- Numeric.AD.Mode.Reverse
- Numeric.AD.Mode.Sparse
- Numeric.AD.Mode.Tower

- Numeric.AD.Newton
- Numeric.AD.Types

- Numeric.AD

## Downloads

- ad-1.0.1.tar.gz [browse] (Cabal source package)
- Package description (revised from the package)

Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.