Fast, transparent calculations of first and second-order automatic differentiation package

## Project description

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.

Automatic differentiation_ is different from numerical and symbolic
differentiation in that it uses prior knowledge of how derivatives
are calculated, but that's the part you don't need to worry about
while using this package. They are then transmitted through subsequent
calculations (using the generalized chain rule_).

Basic examples
==============
::

>>> x

>>> square = x**2
>>> square
>>> square.d(x) # get the first derivative wrt x
4.0
>>> square.d2(x) # get the second derivative wrt x
2.0

>>> from ad.admath import * # sin, cos, log, exp, sqrt, etc.
>>> sin(1 + x**2)

>>> print (2*x + 1000).d() # no inputs shows dict of all derivatives

>>> y = adfloat(3, tag='y') # tags are useful for tracking original variables
>>> y
>>> y.d(x) # returns zero if the derivative doesn't exist
0.0

>>> z = x*y**2
>>> z
[9.0, 12.0]
>>> z.d2c(x, y) # second cross-derivatives, order doesn't matter -> (x,y) or (y,x)
6.0
>>> z.hessian([x, y])
[[0.0, 6.0], [6.0, 4.0]]

>>> import numpy as np # most numpy functions work out of the box
>>> arr = np.array(adfloat([1, 2, 3])) # multiple input support
>>> arr.sum()
>>> arr.max()
>>> arr.mean()
>>> arr.var() # array variance
>>> sqrt(arr) # vectorized operations supported with ad operators

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.) with additional convenience trigonometric, hyperbolic,
and logarithmic functions (csc, acoth, ln, etc.). Comparison
operators follow the same rules as float types.
- Nearly all derivative calculations are performed **analytically**
(only the gamma and lgamma functions use a high-accuracy
finite difference formula).

Installation
============

You have several easy, convenient options to install the ad package

1. Download the package files below, unzip to any directory, and run
python setup.py install from the command-line
2. Simply copy the unzipped ad-XYZ directory to any other location
that python can find it and rename it ad
3. If setuptools is installed, run easy_install --upgrade ad
from the command-line
4. If pip is installed, run pip --upgrade ad from the command-line

Contact
=======

Please send **feature requests, bug reports, or feedback** to
Abraham Lee_.

.. _NumPy: http://numpy.scipy.org/
.. _math: http://docs.python.org/library/math.html
.. _Automatic differentiation: http://en.wikipedia.org/wiki/Automatic_differentiation
.. _chain rule: http://en.wikipedia.org/wiki/Chain_rule
.. _Abraham Lee: mailto:tisimst@gmail.com

## Project details

### Source Distributions

Uploaded Source

Uploaded Source