ad
ad copied to clipboard
Fast, transparent calculations of first and second-order automatic differentiation
ad Package Documentation
.. image:: https://travis-ci.org/tisimst/ad.png?branch=master
Overview
The ad package allows you to easily and transparently perform
first and second-order automatic differentiation. Advanced math
involving trigonometric, logarithmic, hyperbolic, etc. functions can also
be evaluated directly using the admath sub-module.
All base numeric types are supported (int, float, complex,
etc.). This package is designed so that the underlying numeric types will
interact with each other as they normally do when performing any
calculations. Thus, this package acts more like a "wrapper" that simply helps
keep track of derivatives while maintaining the original functionality of
the numeric calculations.
From the Wikipedia entry on Automatic differentiation_ (AD):
"AD exploits the fact that every computer program, no matter how
complicated, executes a sequence of elementary arithmetic operations
(addition, subtraction, multiplication, division, etc.) and elementary
functions (exp, log, sin, cos, etc.). By applying the chain rule
repeatedly to these operations, derivatives of arbitrary order can be
computed automatically, and accurate to working precision."
See the package documentation_ for details and examples.
Main Features
-
Transparent calculations with derivatives: no or little modification of existing code is needed, including when using the
Numpy_ module. -
Almost all mathematical operations are supported, including functions from the standard math_ module (sin, cos, exp, erf, etc.) and cmath_ module (phase, polar, etc.) with additional convenience trigonometric, hyperbolic, and logarithmic functions (csc, acoth, ln, etc.). Comparison operators follow the same rules as the underlying numeric types.
-
Real and complex arithmetic handled seamlessly. Treat objects as you normally would using the
math_ andcmath_ functions, but with their newadmathcounterparts. -
Automatic gradient and hessian function generator for optimization studies using
scipy.optimize_ routines withgh(your_func_here). -
Compatible Linear Algebra Routines in the
ad.linalgsubmodule, similar to those found in NumPy'slinalgsubmodule, that are not dependent on LAPACK. There are currently:a. Decompositions
chol: Cholesky Decompositionlu: LU Decompositionqr: QR Decomposition
b. Solving equations and inverting matrices
solve: General solver for linear systems of equationslstsq: Least-squares solver for linear systems of equationsinv: Solve for the (multiplicative) inverse of a matrix
Installation
You have several easy, convenient options to install the ad package
(administrative privileges may be required):
-
Download the package files below, unzip to any directory, and run
python setup.py installfrom the command-line. -
Simply copy the unzipped
ad-XYZdirectory to any other location that python can find it and rename itad. -
If
setuptoolsis installed, runeasy_install --upgrade adfrom the command-line. -
If
pipis installed, runpip install --upgrade adfrom the command-line. -
Download the bleeding-edge version on GitHub_
Contact
Please send feature requests, bug reports, or feedback to
Abraham Lee_.
Acknowledgements
The author expresses his thanks to :
Eric O. LEBIGOT (EOL), author of theuncertaintiespackage, for providing code insight and inspiration- Stephen Marks, professor at Pomona College, for useful feedback concerning
the interface with optimization routines in
scipy.optimize. - Wendell Smith, for updating testing functionality and numerous other useful function updates
- Jonathan Terhorst, for catching a bug that made derivatives of logarithmic functions (base != e) give the wrong answers.
- GitHub user
fhgdfor catching a mis-calculation inadmath.atan2
.. _NumPy: http://numpy.scipy.org/ .. _math: http://docs.python.org/library/math.html .. _cmath: http://docs.python.org/library/cmath.html .. _Automatic differentiation: http://en.wikipedia.org/wiki/Automatic_differentiation .. _Eric O. LEBIGOT (EOL): http://www.linkedin.com/pub/eric-lebigot/22/293/277 .. _uncertainties: http://pypi.python.org/pypi/uncertainties .. _scipy.optimize: http://docs.scipy.org/doc/scipy/reference/optimize.html .. _Abraham Lee: mailto:[email protected] .. _package documentation: http://pythonhosted.org/ad .. _GitHub: https://github.com/tisimst/ad