Overview

The module angularmomentum provides routines for computing
Clebsch-Gordan coefficients, Wigner 3jm symbols and Wigner 6j symbols.

This code is primarily intended for practical calculations, not
teaching, which has led to the following design decisions:

- All functions accept numpy arrays as inputs, and do proper numpy
  broadcasting over multi-dimensional input arrays.

- All functions compute their results in floating point, not exact
  root-rational arithmetic.  Note that the use of floating-point
  inputs entails no loss of accuracy, since integers and half-integers
  up to around a quadrillion are exactly representable in binary
  floating point.

- All functions return 0 when inputs do not satisfy selection rules,
  rather than producing an error.  This allows the idiom, common in
  atomic physics calculations, of summing over a complete set of states
  and letting the angular-momentum coefficients select the relevant ones.

The algorithms used are direct implementations of the Racah formulas, given at
http://mathworld.wolfram.com/Wigner3j-Symbol.html
http://mathworld.wolfram.com/Wigner6j-Symbol.html
The only optimisation is the use of numpy broadcasting and
array-at-a-time functions to avoid executing loops in the python
interpreter.

See https://idleroux@bitbucket.org/idleroux/angularmomentum for updates.