TODO for GluCat 0.7.3 with PyClical
===================================

Documentation:
o Write a programmer's guide with descriptions of usage via use cases.
o Provide better user documentation for PyCliCal.

Packaging:
o Simplify and improve the use of Autotools in configuring, building and
  installing GluCat and PyClical. Essentially a complete overhaul is needed.
o Improve the packaging of the example and test programs.

Portability:
o Build and test GluCat and PyClical using Intel C++, and Cygwin on Windows
  (requested by Alan Bromborsky).
o Port to other architectures and compilers which support template template
  parameters.

Interfaces:
  Downwards:
o Try using Eigen as a replacement for uBLAS, Boost numeric bindngs and Alglib.
o Alternatively, support later versions of Alglib (requested by John Fletcher).

  Upwards:
o Expand the Cython-based Python extension module PyCliCal into a Sage interface.
o Try defining Boost concepts and more numeric traits so that GluCat can
  eventually become a Boost library.

Transcendental functions:
o Devise better algorithms and better implementations of existing algorithms for
  the transcendental functions. In particular, pay more attention to radius of
  convergence, condition number of matrices and poking out of the subalgebra.
o Investigate the use of matrix decompositions in the evaluation of
  transcendental functions. See N. J. Higham, Functions of Matrices: Theory and
  Computation, 2008.
o Try automatically increasing the precision of intermediate floating point
  operations for transcendental functions.

Experimental:
o Investigate the use of expression templates in GluCat.
o Try refactoring the relationship between matrix_multi, framed_multi and
  clifford_algebra to allow more flexibility with template parameters.
  Possibly use enable_if and SFINAE to do this.
o Try adding a Matrix_Tag template parameter to framed_multi and matrix_multi,
  to determine if matrix_t is compressed, dense, etc.
o Try removing the template parameters LO and HI from framed_multi and
  matrix_multi, and using DEFAULT_LO and DEFAULT_HI where these are needed in
  framed_multi.h, matrx_multi.h, etc.
o Try making Tune_P into a mixin policy class template parameter.
o Add convenience constructors to index_set<>: index_set<>(int, int),
  index_set<>(int, int, int), ... etc.
o Try replacing multiplication by +/-1 within inner products by addition and
  subtraction.
o Try creating a class, vector_multi<>, which uses std::vector rather than
  std::map. This should be faster than framed_multi<>, if tuned properly, for
  full multivectors. For sparse multivectors, it may be slower.
o Try automatically increasing the precision of intermediate floating point
  operations, particularly for conversions between matrix_multi and framed_multi.