2012-11-10 20:36  leopardi

	* NEWS, TODO: Update to version 0.7.1.

2012-11-10 20:24  leopardi

	* ChangeLog: ChangeLog for version 0.7.1.

2012-11-10 20:19  leopardi

	* test_runtime/: gfft_test-11.out, products-8.out, squaring-11.out,
	  transforms-8.out: Test results for version 0.7.1.

2012-11-10 20:18  leopardi

	* INSTALL: Update list of successful builds to include a case with
	  "./configure ... --with-map=map ..." Update to version 0.7.1.

2012-11-10 20:16  leopardi

	* AUTHORS, Doxyfile, README, configure.in, configure.in.in,
	  glucat.lsm: Update to version 0.7.1.

2012-11-10 20:15  leopardi

	* aclocal.m4: Generated file.  Update to version 0.7.1.

2012-11-07 08:43  leopardi

	* glucat/framed_multi_imp.h: Change initialization of
	  'multivector_t result' so that multivector_t based on std::map
	  compiles and works correctly.

2012-10-11 01:23  leopardi

	* ChangeLog: Update to version 0.7.0.

2012-10-11 00:03  leopardi

	* glucat/random.h: Include header dependencies.

	  Use optional preprocessor symbols to control inclusions in this
	  file.

	  Use "#if defined()" instead of "#ifdef".

	  Cosmetic: Make brackets adhere to coding conventions

2012-10-11 00:02  leopardi

	* glucat/qd.h: Include header dependencies.

	  Use optional preprocessor symbols to control inclusions in this
	  file.

	  Use "#if defined()" instead of "#ifdef".

2012-10-11 00:01  leopardi

	* glucat/portability.h: Include header dependencies.

	  Cosmetic: Indent preprocessor defines consistently.

2012-10-11 00:01  leopardi

	* glucat/matrix_multi_imp.h: Include header dependencies.

	  Use "#if defined()" instead of "#ifdef".

	  Rewrite basis_element() so that the basis_cache uses pointers to
	  matrices instead of matrices.  Make the use of the basis_cache
	  depend on the actual frame count().

	  Overhaul the implementation of sqrt() and log() so that the Pade'
	  approximation depends on the numeric precision.

	  Implement exp(): exponential of multivector, using
	  clifford_exp().

	  Cosmetic: Use traits_t consistently.

2012-10-10 23:59  leopardi

	* glucat/matrix_multi.h: Include header dependencies.

	  Use optional preprocessor symbols to control inclusions in this
	  file.

	  Use "#if defined()" instead of "#ifdef".

	  Define namepace ublas as boost::numeric::ublas in this file.

2012-10-10 23:58  leopardi

	* glucat/matrix_imp.h: Include header dependencies.

	  Use optional preprocessor symbols to control inclusions in this
	  file.

	  Use "#if defined()" instead of "#ifdef".

	  Change the definitions of epsilon and norm_tol to improve the
	  detection of real negative and imaginary eigenvalues.

2012-10-10 23:56  leopardi

	* glucat/long_double.h: Use "#if defined()" instead of "#ifdef".

2012-10-10 23:55  leopardi

	* glucat/: glucat.h, glucat_imp.h: Include only GluCat headers as
	  dependencies.

	  Let the GluCat header files include their own dependencies and
	  deal with their own relevant preprocessor symbols.

2012-10-10 23:55  leopardi

	* glucat/global.h: Include header dependencies.

	  Tweak tuning policy default constants.

2012-10-10 23:53  leopardi

	* glucat/framed_multi_imp.h: Include header dependencies.

	  Use optional preprocessor symbols to control inclusions in this
	  file.

	  Use "#if defined()" instead of "#ifdef".

	  If a hash_map or an unordered_map is being used, as indicated by
	  the symbol _GLUCAT_MAP_IS_HASH, define the macros
	  _GLUCAT_HASH_N() and _GLUCAT_HASH_SIZE_T().

	  Use _GLUCAT_HASH_N() to construct framed_multi_t from map_t with
	  an assumed or inferred minimum number of initial buckets..

	  In the constructor from matrix_multi_t, and in operators *, ^, &,
	  and %  use _GLUCAT_HASH_SIZE_T() to construct framed_multi_t from
	  map_t with an inferred minimum number of initial buckets.

	  Use clifford_exp(). to implement exp(): exponential of
	  multivector.

	  Define a new member function nbr_terms(): number of terms.

	  Cosmetic: Use traits_t consistently.

2012-10-10 23:49  leopardi

	* glucat/framed_multi.h: Include header dependencies.

	  Use optional preprocessor symbols to control inclusions in this
	  file.

	  Use "#if defined()" instead of "#ifdef".

	  Declare exp(): exponential of multivector, and make it a friend
	  of framed_multi<>.

	  Change hash() to index_set_hash().

	  Define hash_size_t.

	  Declare a private constructor that uses a hash size.	This is to
	  try to optimize the allocation for the hash and unordered_map
	  implementations of framed_multi<>.

	  Declare a new member function nbr_terms(): number of terms.

2012-10-10 23:45  leopardi

	* glucat/clifford_algebra_imp.h: Include header dependencies.

	  Define clifford_exp(): exponential of multivector, with
	  implementation moved from exp() in matrix_multi_imp.h to this
	  function, and optimized for varying numeric precision given by
	  limits_t::digits.

	  In acosh() and asinh() distinguish two cases to give a more
	  accurate result.

2012-10-10 23:44  leopardi

	* glucat/clifford_algebra.h: Include header dependencies.

	  Declare clifford_exp(): exponential of multivector.

2012-10-10 23:43  leopardi

	* glucat/: errors.h, generation.h, generation_imp.h, index_set.h,
	  index_set_imp.h, matrix.h, scalar.h: Include header dependencies.

2012-10-10 23:42  leopardi

	* products/tuning.h, squaring/tuning.h: Tweak tuning policy
	  constants.

2012-10-10 23:41  leopardi

	* test11/peg11.h: Tweak tolerances and set the value of "relative"
	  differently, to give a better idea of when the algorithms really
	  lose precision.

	  Output norm of difference to low precision, but output A and B to
	  high precision when a test fails.

	  Use complexifier() instead of elliptic().

	  Cosmetic: use Multivector_T instead of m_.

2012-10-10 23:40  leopardi

	* test11/peg11.cpp: Use "#if defined()" instead of "#ifdef".

2012-10-10 23:39  leopardi

	* pyclical/PyClical.pyx: Update to version 0.7.0.

	  Add a reference to Doran and Lasenby 2003.

	  Use integers and sets rather than strings to construct
	  index_sets.

	  Define __contains__ and __iter__ for index_set and clifford (for
	  clifford these raise TypeError.)

	  Fix some doctests for '**' and pow.

2012-10-10 23:35  leopardi

	* pyclical/PyClical.h: Use set notation instead of string notation
	  for repr of index_set.

2012-10-10 23:34  leopardi

	* test_runtime/: gfft_test-11.out, products-8.out, squaring-11.out,
	  test.out, transforms-8.out: Test results for version 0.7.0.

2012-10-10 23:33  leopardi

	* INSTALL, README: Complete rewrite.

2012-10-10 23:32  leopardi

	* glucat.lsm: Use SourceForge email address.

	  Update to version 0.7.0.

2012-10-10 23:32  leopardi

	* Doxyfile, NEWS, TODO: Update to version 0.7.0.

2012-10-10 23:25  leopardi

	* configure.in, configure.in.in: Make "--enable-debug=no
	  --enable-pyclical" the default.

	  Check for $GXX before adding "-std=c++11" to CFLAGS.

	  Check for <qd/qd_real.h> instead of <qd/qd_config.h>.

	  Update to version 0.7.0.

2012-10-10 23:24  leopardi

	* AUTHORS: Use SourceForge email address.

	  Move references from README to here.

	  Update to version 0.7.0.

2012-10-10 23:18  leopardi

	* pyclical/demos/pyclical_tutorial_utils.py: Move to
	  pyclical/demos/.

	  Move is_near() after print_fill().

	  Remove exercise_str.

	  Use a sandbox in input_exec() and check_exec() so that incorrect
	  execution does not affect the state. Copy the current state to
	  the sandbox before the exec.

	  Allow check_exec() and check_eval() to pass on KeyboardInterrupt.

2012-10-10 23:18  leopardi

	* pyclical/demos/pyclical_tutorials.py: Move to pyclical/demos/.

	  Rename from pyclical_tutorial.py to pyclical_tutorials.py.

	  Add new tutorials.

2012-10-10 23:17  leopardi

	* pyclical/demos/: pyclical_tutorial_1_0_plane.py,
	  pyclical_tutorial_1_1_complex.py, pyclical_tutorial_1_2_space.py,
	  pyclical_tutorial_1_3_lorentz.py,
	  pyclical_tutorial_1_4_fourth.py,
	  pyclical_tutorial_1_5_conformal.py: New tutorials.

2012-10-10 23:17  leopardi

	* pyclical/demos/pyclical_tutorial_0_4_transcendental.py: Move to
	  pyclical/demos/.

	  Use the CC-by-SA licence for tutorials.

	  Call the tutorial() function within "try ... except" so that
	  CRTL-c can interrupt the tutorial.

2012-10-10 23:12  leopardi

	* pyclical/demos/: pyclical_tutorial_0_2_operations.py,
	  pyclical_tutorial_0_3_functions.py: Move to pyclical/demos/.

	  Use the CC-by-SA licence for tutorials.

	  Call the tutorial() function within "try ... except" so that
	  CRTL-c can interrupt the tutorial.

2012-10-10 23:11  leopardi

	* pyclical/demos/pyclical_tutorial_0_1_index_sets.py: Move to
	  pyclical/demos/.

	  Use the CC-by-SA licence for tutorials.

	  Add descriptions for set membership and iteration.

	  Call the tutorial() function within "try ... except" so that
	  CRTL-c can interrupt the tutorial.

2012-10-10 23:11  leopardi

	* pyclical/demos/pyclical_tutorial_0_0_notation.py: Move to
	  pyclical/demos/.

	  Use the CC-by-SA licence for tutorials.

	  Change the description of subscripting [] notation.

	  Call the tutorial() function within "try ... except" so that
	  CRTL-c can interrupt the tutorial.

2012-10-10 23:10  leopardi

	* pyclical/demos/: pyclical_demo.py, sqrt_log_demo.py: Move to
	  pyclical/demos/.

	  Define demo() function and use it within "try ... except" so that
	  CRTL-c can interrupt the demo.

2012-10-10 23:09  leopardi

	* pyclical/demos/: pyclical_demo.out, sqrt_log_demo.out: Move to
	  pyclical/demos/.

	  Demo output.

2012-10-10 23:07  leopardi

	* pyclical/demos/plotting_demo.py: Move to pyclical/demos/.

	  New parameters: figheight and figwidth, defaulting to 12 and 15
	  respectively.

	  Change plotting_demo() to demo().

	  Cosmetic: use punctuation consistently in comments and output.

2012-10-10 23:06  leopardi

	* pyclical/: plotting_demo.py, pyclical_demo.out, pyclical_demo.py,
	  pyclical_tutorial.py, pyclical_tutorial_0_0_notation.py,
	  pyclical_tutorial_0_1_index_sets.py,
	  pyclical_tutorial_0_2_operations.py,
	  pyclical_tutorial_0_3_functions.py,
	  pyclical_tutorial_0_4_transcendental.py,
	  pyclical_tutorial_utils.py, sqrt_log_demo.out, sqrt_log_demo.py:
	  Move to pyclical/demos.

2012-07-15 10:59  leopardi

	* pyclical/: pyclical_tutorial.py,
	  pyclical_tutorial_0_0_notation.py,
	  pyclical_tutorial_0_1_index_sets.py,
	  pyclical_tutorial_0_2_operations.py,
	  pyclical_tutorial_0_3_functions.py,
	  pyclical_tutorial_0_4_transcendental.py: First set of interactive
	  tutorials for PyClical.  Run separately or via
	  pyclical_tutorial.py.

2012-07-15 09:59  leopardi

	* pyclical/: sqrt_log_demo.out, sqrt_log_demo.py: Use demo
	  utilities from pyclical_tutorial_utils.py, e.g. print_exec(),
	  print_fill().

2012-07-15 09:58  leopardi

	* pyclical/PyClical.pyx: Interim version number "0.6.0 + cvs".	Use
	  ixt rather than ist to name parameters of class index_set.  New
	  member function reframe(self, ixt):  Put self into a larger
	  frame, defined by index set ixt.  Ensure that __richcmp__ for
	  clifford raises TypeError for unimplemented comparisons.  Test
	  member function inv() properly.  Member functions __pow__() and
	  pow(), and ordinary function pow() can now take clifford powers
	  as well as integer powers.  Member function vector_part() now has
	  optional parameter frm.  The name cl is now an abbreviation for
	  clifford.  The name ist is now an abbreviation for index_set.
	  The name tau is an abbreviation for pi*2.

	  Cosmetic changes: o Tidy up some expressions in doctests.  o Fix
	  typos in comments.

2012-07-15 09:57  leopardi

	* pyclical/PyClical.h: Function agc3() no longer reframes its
	  output into {1,2,3}.	Functions cga3() and cga3std() no longer
	  reframe their output into {-1,1,2,3,4}.  (PyClical now includes
	  an explicit reframe() member function.)

2012-07-15 09:57  leopardi

	* pyclical/: pyclical_demo.out, pyclical_demo.py: Use demo
	  utilities from pyclical_tutorial_utils.py, e.g. print_exec(),
	  print_fill().  Reformat remarks: remove double spaces between
	  words, and end sentences with full stops.

2012-07-15 09:57  leopardi

	* pyclical/plotting_demo.py: Overhaul plotting demo: Split demo
	  function into demo() and draw_orbit().  Use two rotors, randomly
	  choosing between them.  Exponentiate each of two bivectors only
	  once, in demo().  In draw_orbit(), use successive multiplication.
	  Improve point plotting and colouring.  Remove parameter d: demo
	  uses d=4 exclusively.  Use appropriate default values.  Fix
	  typos.

2012-07-15 09:56  leopardi

	* pyclical/glucat.pxd: Include constructor Clifford (Clifford Clf,
	  IndexSet ist) except+.  New member function vector[scalar_t]
	  vector_part(IndexSet frm) except+.  Functions agc3(), cga3() and
	  cga3std() no longer throw exceptions.

2012-07-15 09:56  leopardi

	* pyclical/pyclical_tutorial_utils.py: New file. Utilities for
	  tutorials and demos.

2012-07-15 09:52  leopardi

	* glucat/portability.h: For Cygwin: check for HAVE_BITS_WORDSIZE_H
	  and include bits/wordsize.h.

2012-07-15 09:52  leopardi

	* glucat/: glucat_imp.h, random.h: If flag _GLUCAT_USE_STD_RANDOM
	  is set, use C++11 std random number generation.

2012-07-15 09:52  leopardi

	* glucat/: framed_multi.h, glucat.h: New type of map:
	  _GLUCAT_USE_STD_UNORDERED_MAP for C++11 std::unordered_map.

2012-07-15 09:50  leopardi

	* glucat/: clifford_algebra.h, framed_multi_imp.h,
	  matrix_multi_imp.h: New member function  vector_part(frm,
	  prechecked):	vector part of multivector, as a vector_t with
	  respect to frm.

2012-07-15 09:49  leopardi

	* config.h.in: Generated file.

2012-07-15 09:48  leopardi

	* configure.in, configure.in.in: New type of map: stdunordered for
	  C++11 std::unordered_map:  sets _GLUCAT_USE_STD_UNORDERED_MAP
	  Previous map type unordered is now tr1unordered for
	  std::tr1::unordered_map.  New random generator type std for C++11
	  std random number generation:  sets _GLUCAT_USE_STD_RANDOM.  If
	  either stdunordered or std random is chosen successfully, this
	  sets glucat_cxx_std="cxx11" which sets -std=c++11 compiler
	  option.  For Cygwin: check for bits/wordsize.h and set
	  HAVE_BITS_WORDSIZE_H.

2012-05-28 09:16  leopardi

	* pyclical/: sqrt_log_demo.out, sqrt_log_demo.py: Split the
	  expression for atanh2 over multiple input lines (not visible in
	  output).  Use the pseudoscalar i = e({-1,1,2,3,4}) to obtain the
	  log of -R or R.

2012-05-26 21:49  leopardi

	* pyclical/: sqrt_log_demo.out, sqrt_log_demo.py: Overhaul.  Use
	  print_exec to execute lines of Python code.  Compare PyClical
	  sqrt and log with the sqrt and log of Dorst and Valkenburg in the
	  case of rotors in Conformal Geometric Algebra.

2012-05-26 21:46  leopardi

	* pyclical/: pyclical_demo.out, pyclical_demo.py: Overhaul.  Use
	  print_exec to execute lines of Python code.  Use e(int) rather
	  than special names for generators.  Use generators in canonical
	  order and use e(set) where this makes sense.

2012-05-23 10:12  leopardi

	* pyclical/plotting_demo.py: Overhaul to make more useful.

	  New function draw_orbit(r, nbr_points, segment_len, azimuth,
	  rot_angle, jitter) allows the user to explore the use of their
	  own rotor r and see what happens when r is a multivector other
	  than a rotor.

	  Share common default values between draw_orbit and demo
	  functions.  Give these defaults more useful values.

	  Draw the origin as a white point to work around a bug in
	  Matplotlib.

	  Ensure that the initial point is on the unit sphere in Euclidean
	  space.

	  Now that agc3 has been fixed to ensure that the result is in
	  ist({1,2,3}), use agc3(u).vector_part().

	  Use the norms of each point in p to make the points of the
	  scatter plot more colourful without oversaturating them.  The
	  variable arena_width and replotting of the points are no longer
	  used.

	  For each plot, the demo function now just generates a random
	  bivector in istpq(d,0), exponentiates it to obtain the rotor and
	  and then simply calls draw_orbit.

	  Cosmetic: Clean up comment header.

2012-05-20 12:52  leopardi

	* pyclical/glucat.pxd: The last change in PyClical.h to namespace
	  cga3 functions cga3(), cga3std() and agc3() mean that these
	  functions can throw exceptions.  Ensure that Cython know this.

2012-05-16 12:17  leopardi

	* pyclical/plotting_demo.py: This script is now more usable as a
	  demo. Many changes have been made, including:

	  o New arguments: - azimuth : Angle about a vertical axis used to
	  define the viewpoint.  - jitter : Angle in degrees to use for
	  each step in the rotation.

	  o More sensible default values for arguments.

	  o Do not use the twisted adjoint action |=, but instead calculate
	  ir, the inverse of the rotor r once, and use the adjoint action u
	  = r * u * ir. This works because r must be even, since it is th
	  exponential of a bivector.

	  o Do not plot lines. The code is now fast enough that this is no
	  longer useful, since the hull of the scattered points can now
	  more easily be seen.

	  o Do not use plt.show(). This caused the plots to corrupt when
	  the next figure was started.

	  o Ensure the points lie within the arena by doubling the arena
	  width and  recolouring existing points when necessary.

2012-05-14 22:13  leopardi

	* pyclical/PyClical.h: In namespace cga3, ensure that cga3(),
	  cga3std() return a multivector within frame {-1,1,2,3,4}, and
	  agc3() returns a multivector within frame {1,2,3}.

2012-05-13 00:45  leopardi

	* pyclical/plotting_demo.py: Fix bug in plotting demo due to use of
	  vector_part() on result of cga3().  Extract individual
	  coordinates instead, until cga3() is fixed to return a vector
	  with frame ist("{1,2,3}").

2012-05-12 23:02  leopardi

	* ChangeLog: ChangeLog for version 0.6.0.

2012-05-12 22:29  leopardi

	* INSTALL: Specify versions of Boost numeric bindings, Python and
	  Cython used for testing.

2012-05-12 22:27  leopardi

	* squaring/squaring.h: In mult_test(), do not define outer_frame,
	  because it is not used.

2012-05-12 16:04  leopardi

	* AUTHORS, INSTALL, NEWS, README, TODO: Update for version 0.6.0.

2012-05-12 16:03  leopardi

	* pyclical/PyClical.pyx: Set __version__ to "0.6.0".

2012-05-12 16:02  leopardi

	* glucat/matrix_multi_imp.h: Remove spurious static property from
	  definition of sqrt().  This fixes problem w reported by John
	  Fletcher in email of	2012-04-07.

2012-05-11 19:54  leopardi

	* config.h.in, configure.in, configure.in.in: Use
	  GLUCAT_CHECK_HEADERS instead of AC_CHECK_HEADERS for non-system
	  headers.

2012-05-11 10:31  leopardi

	* pyclical/: PyCliCal.h, PyCliCal.pyx: Change module name from
	  PyCliCal to PyClical.

2012-05-11 10:30  leopardi

	* pyclical/pyclical_demo.out: Output from pyclical_demo.py.

2012-05-11 10:27  leopardi

	* config.h.in: Auto-generated from configure.in.

2012-05-11 10:26  leopardi

	* glucat.lsm: Version 0.6.0.

2012-05-11 10:25  leopardi

	* Doxyfile: Version 0.6.0.  Document ./pyclical and ./test as well
	  as ./glucat.	Treat *.pxd and *.pyx as Python source -- really
	  Cython, but Doyxgen doesn't know about Cython.  Change output
	  directory from ./glucat-api to ./doc/api.  Change tabbing to 2
	  spaces.

2012-05-11 10:25  leopardi

	* configure.in.end: Conditionally set CXXFLAGS using
	  $glucat_extra_cxxflags_pyclical before AC_CONFIG_FILES([
	  pyclical/Makefile ]).  No longer call KDE_CREATE_SUBDIRSLIST.

2012-05-11 10:25  leopardi

	* configure.in: Version 0.6.0.	Explicitly name m4 macro dir.  Use
	  AC_INT(aclocal.m4) rather than AC_INIT(acinclude.m4) Move various
	  AC_DEFUN declarations from acinclude.m4 to here, with GLUCAT_*
	  and glucat_* names.  Rename KDE_* and kde_* to GLUCAT_* and
	  glucat_* respectively.

	  To assist PyClical build and installation: o Do not define or use
	  GLUCAT_PROG_LIBTOOL:	o do not patch libtool or create a
	  libtool-script.  o If the flag $glucat_use_pyclical is set, use
	  AM_PATH_PYTHON   and add -fno-strict-aliasing to
	  $glucat_extra_cxxflags_pyclical.  Do not use
	  AC_VALIDIFY_CXXFLAGS, KDE_CHECK_FINAL, KDE_FAST_CONFIGURE,
	  KDE_CONF_FILES.  Conditionally set CXXFLAGS using
	  $glucat_extra_cxxflags_pyclical before AC_CONFIG_FILES([
	  pyclical/Makefile ]).  No longer call KDE_CREATE_SUBDIRSLIST.

2012-05-11 10:24  leopardi

	* configure.in.in: Version 0.6.0.  Explicitly name m4 macro dir.
	  Use AC_INT(aclocal.m4) rather than AC_INIT(acinclude.m4) Move
	  various AC_DEFUN declarations from acinclude.m4 to here, with
	  GLUCAT_* and glucat_* names.	Rename KDE_* and kde_* to GLUCAT_*
	  and glucat_* respectively.

	  To assist PyClical build and installation: o Do not define or use
	  GLUCAT_PROG_LIBTOOL:	o do not patch libtool or create a
	  libtool-script.  o If the flag $glucat_use_pyclical is set, use
	  AM_PATH_PYTHON   and add -fno-strict-aliasing to
	  $glucat_extra_cxxflags_pyclical.  Do not use
	  AC_VALIDIFY_CXXFLAGS, KDE_CHECK_FINAL, KDE_FAST_CONFIGURE,
	  KDE_CONF_FILES.

2012-05-11 10:24  leopardi

	* aclocal.m4: Update Autottools.  Define AM_PATH_PYTHON for use by
	  PyClical.

2012-05-11 10:23  leopardi

	* test_runtime/: gfft_test-11.out, products-8.out, squaring-11.out,
	  test.out, transforms-8.out: Test results for version 0.6.0.

2012-05-11 10:22  leopardi

	* test05/peg05.h, test07/peg07.h: Change operator|(lhs,rhs) to
	  operator||(lhs,rhs), since operator|() is now used for twisted
	  adjoint action.

2012-05-11 10:22  leopardi

	* test00/peg00.h: New function is_error(lhs, rhs) : o test for
	  relative and absolute error between lhs and rhs

	  Use random(frm, fill) with fill factor 0.5.

2012-05-11 10:22  leopardi

	* admin/ltmain.sh: Update Libtool.  (Libtool is not needed for
	  installation.)

2012-05-11 10:20  leopardi

	* pyclical/: sqrt_log_demo.out, sqrt_log_demo.py: Add comment block
	  header.  Do not define pq here - istpq is now defined in
	  PyClical.  In print statements where output is small, use abs().

2012-05-11 10:20  leopardi

	* pyclical/pyclical_demo.py: Add comment block header.	Do not
	  define pi here - pi is now defined in PyClical.  In function
	  pause(), check if __name__ == __main__.  Print output header
	  lines citing Lounesto et al.	In print statements where output is
	  small, use abs().

2012-05-11 10:19  leopardi

	* pyclical/plotting_demo.py: New file.	Plot curves obtained by
	  exponentiating a bivector in Conformal Geometric Algebra.  Based
	  on agacse_demo.py demonstrated at AGACSE 2010 in Amsterdam.

2012-05-11 10:18  leopardi

	* pyclical/PyClical.pyx: New name for PyCliCal.pyx Complete
	  overhaul.  Wrap most of the member functions of classes
	  glucat::index_set<> as Python class index_set and
	  glucat::matrix_multi<> as Python class clifford, as well as most
	  glucat:: functions operating on these classes.  Provide Doctests
	  for all functions and member functions where this works.
	  Functions index_set_hidden_doctests() and
	  clifford_hidden_doctests() provide tests for functions that
	  Doctest cannot see.

2012-05-11 10:18  leopardi

	* pyclical/setup_nocython.py: New file.  Build PyClical.so from
	  PyCliCal.cpp and PyClical.h without using Cython.

2012-05-11 10:17  leopardi

	* pyclical/setup.py: Add comment block header.	Use
	  Cython.Build.cythonize New environment variables: o ext_name :
	  name of extension o sources  : filename of our Cython source

2012-05-11 10:17  leopardi

	* pyclical/: PyClical.pxd, glucat.pxd: New file.  Cython
	  translation of C++ class and function definitions corresponding
	  to glucat/glucat.h, especially index_set<> as IndexSet and
	  matrix_multi<> as Clifford.

2012-05-11 10:16  leopardi

	* pyclical/PyClical.h: New name for PyCliCal.h Complete overhaul to
	  support new PyClical.

	  New namespace cga3 for 3D Conformal Geometric Algebra based on
	  definitions in Doran and Lasenby: o cga3() :	Convert Euclidean
	  3D vector to	 Conformal Geometric Algebra null vector.  o
	  cga3std() : Convert CGA3 null vector to   standard Conformal
	  Geometric Algebra  null vector.  o agc3() : Convert CGA3 null
	  vector to Euclidean 3D vector.

	  Cosmetics: o Add comment header block.  o Add Doxygen comments.
	  o Put definitions in a more logical order.

2012-05-11 10:15  leopardi

	* pyclical/Makefile.am: Ensure that PyClical.so builds and installs
	  correctly.  Use setup_nocython.py when PyClical.cpp already
	  exists, so that Cython is not needed in this case.

2012-05-11 10:14  leopardi

	* glucat/matrix_multi_imp.h: New member functions for
	  matrix_multi<>: o operator|=(rhs) : Transformation via twisted
	  adjoint action.  o grade() : Maximum of the grades of each term.
	  o pure() : Pure part.

	  New operator|(lhs, rhs): o Transformation via twisted adjoint
	  action.

	  Function real(val) is now a synonym for val.scalar().

	  Cosmetics: o Put matrix_multi<> member functions in same order as
	  per clifford_algebra<>.  o Neaten up ? : expressions.  o Fix
	  comment for operator+=(term).

2012-05-11 10:14  leopardi

	* glucat/matrix_multi.h: For matrix_multi<>, make double the
	  default for Scalar_T.

	  New operator|(lhs, rhs): o Transformation via twisted adjoint
	  action.

2012-05-11 10:13  leopardi

	* glucat/index_set_imp.h: In constructor index_set_imp(str): o
	  Check state of stream ss and throw error_t if in failure state.
	  o Use peek() to see if the end of the string has been reached,
	  and throw error_t if not.

	  Overhaul operator>>(s, ist): o Parsing errors now set
	  std::istream::failbit.

	  In function hash(), leave neg_part unshifted.

	  Cosmetic: o Put min_neg() before max_pos().

2012-05-11 10:13  leopardi

	* glucat/index_set.h: Make compare<>(lhs, rhs) a friend of
	  index_set<>.

	  Cosmetics: o Put count_neg() before count_pos().  o Put min_neg()
	  before max_pos().  o Fix some comments.

2012-05-11 10:13  leopardi

	* glucat/global.h: Global timing constant MS_PER_S is now
	  deprecated: moved to test/timing.h

2012-05-11 10:12  leopardi

	* glucat/framed_multi_imp.h: In constructor framed_multi(str): o
	  Check state of stream ss and throw error_t if in failure state.
	  o Use peek() to see if the end of the string has been reached,
	  and throw error_t if not.

	  New member functions for framed_multi<>: o operator|=(rhs) :
	  Transformation via twisted adjoint action.  o grade() : Maximum
	  of the grades of each term.  o pure() : Pure part.

	  New operator|(lhs, rhs): o Transformation via twisted adjoint
	  action.

	  Function real(val) is now a synonym for val.scalar().  In
	  operator<<(os,term), output as double where possible.

	  Overhaul operator>>(s, val): o Parsing errors now set
	  std::istream::failbit.

	  Cosmetics: o Put framed_multi<> member functions in same order as
	  per clifford_algebra<>.  o Neaten up ? : expressions.  o Fix
	  comment for operator+=(term).

2012-05-11 10:12  leopardi

	* glucat/framed_multi.h: For framed_multi<>, make double the
	  default for Scalar_T.  Explicitly use std::equal_to<> in
	  std::tr1:unordered_map<>.

	  New operator|(lhs, rhs): o Transformation via twisted adjoint
	  action.

2012-05-11 10:12  leopardi

	* glucat/: clifford_algebra.h, clifford_algebra_imp.h: New member
	  functions for clifford_algebra<>: o operator|=(rhs) :
	  Transformation via twisted adjoint action.  o grade() : Maximum
	  of the grades of each term.  o pure() : Pure part.

	  New operator|(lhs, rhs): o Transformation via twisted adjoint
	  action.

	  Function real(val) is now a synonym for val.scalar().  Function
	  imag(val) now always returns 0.

	  New function complexifier(val) : o Square root of -1 which
	  commutes with all members of the frame of the multivector val.  o
	  The name "elliptic" is now deprecated: use "complexifier"
	  instead.

	  New function sqrt(val,i,prechecked) : o Square root of
	  multivector with specified complexifier.

	  New function log(val,i,prechecked) : o Natural logarithm of
	  multivector with specified complexifier.

	  Cosmetics: o Fix comments for member functions max_abs(),
	  truncated() and involute().  o Put member functions in a more
	  sensible order.

2012-05-10 00:26  leopardi

	* products/products.cpp, squaring/squaring.cpp: Remove #define
	  GLUCAT_TEST_REPEAT. Equivalent define is now in header file.

2012-05-10 00:25  leopardi

	* products/products.h, squaring/squaring.h: Use common definitions
	  from test/timing.h to standardize timing test.  Define
	  _GLUCAT_TEST_REPEAT.	Repeated trials in timing tests now
	  increase by the factor EXTRA_TRIALS until the elapsed time is
	  non-zero.  Random multivector generation uses
	  multivector_t::random() with fill values 0.5 and 1.0.

2012-05-10 00:24  leopardi

	* gfft_test/gfft_test.h, transforms/transforms.h: Use common
	  definitions from test/timing.h to standardize timing test.
	  Define _GLUCAT_TEST_REPEAT.  Repeated trials in timing tests now
	  increase by the factor EXTRA_TRIALS until the elapsed time is
	  non-zero.  Function relative() chooses between relative and
	  absolute error consistently.	Random multivector generation uses
	  multivector_t::random() with fill values 0.5 and 1.0.

2012-05-09 10:03  leopardi

	* test/timing.h: Common definitions to support timing tests.

2012-05-03 10:06  leopardi

	* glucat/: framed_multi.h, framed_multi_imp.h, matrix_multi.h,
	  matrix_multi_imp.h: Add fill parameter to random(), with default
	  1.0: Probability that the coefficient of each basis element of a
	  frame is a non-zero normal random scalar rather than 0.  This
	  gives an average fill factor for the multivector, and is useful
	  for testing.

2010-06-01 01:04  leopardi

	* ChangeLog: ChangeLog for version 0.5.1.

2010-06-01 00:57  leopardi

	* pyclical/: pyclical_demo.out, sqrt_log_demo.out: PyCliCal demo
	  output for version 0.5.1.

2010-06-01 00:51  leopardi

	* test_runtime/: gfft_test-11.out, products-8.out, squaring-11.out,
	  test.out, transforms-8.out: Test results for version 0.5.1.

2010-06-01 00:49  leopardi

	* INSTALL, NEWS, README, TODO, glucat.lsm: Update to version 0.5.1.

2010-06-01 00:48  leopardi

	* Doxyfile: Update to version 0.5.1.  Append
	  "_GLUCAT_USE_EIGENVALUES _GLUCAT_USE_BINDINGS" to PREDEFINED.

2010-06-01 00:48  leopardi

	* configure.in.in: Update to version 0.5.1:

	  Define new macro GLUCAT_CHECK_LIB, which saves LDFLAGS, appends
	  $all_libraries to LDFLAGS before calling AC_CHECK_LIB, then
	  restores LDFLAGS.  This allows AC_CHECK_LIB to find libraries
	  whose location is defined via the configure option
	  --with-extra-libs.

	  Use GLUCAT_CHECK_LIB instead of AC_CHECK_LIB throughout the rest
	  of the file.

	  Change name of all "AC_GLUCAT_*" macros to just "GLUCAT_*" for
	  consistency.

	  Set all_includes to "-I. -I.. $all_includes $USER_INCLUDES"
	  before calling GLUCAT_CHECK_COMPILERS. This ensures that
	  compilation always has "-I. -I.." before other includes, and
	  specifically helps when both uBLAS and Boost numeric bindings are
	  being used.

	  New configure option --with-eig[=ARG]:  library to use for
	  eigenvalues ARG can be (no|alglib|bindingsv1|bindings). This sets
	  glucat_use_eigenvalues to the corresponding value.

	  If $glucat_use_eigenvalues is "alglib", check for the gamma()
	  function in libalglib.a (there is apparently no "main" function),
	  check for <alglib/evd.h> and if both are found, append
	  "-D_GLUCAT_USE_EIGENVALUES -D_GLUCAT_USE_ALGLIB" to CXXFLAGS and
	  append "-lalglib" to all_libraries.

	  If $glucat_use_eigenvalues is "bindingsv1" or "bindings", check
	  liblapack.a and libblas.a.  If both are found, append "-llapack
	  -lblas" to all_libraries.  If $glucat_use_eigenvalues is
	  "bindingsv1", check for <boost/numeric/bindings/lapack/gees.hpp>,
	  and if found, append "-D_GLUCAT_USE_EIGENVALUES
	  -D_GLUCAT_USE_BINDINGS_V1" to CXXFLAGS.  If
	  $glucat_use_eigenvalues is "bindings", check for
	  <boost/numeric/bindings/lapack/driver/gees.hpp>, and if found,
	  append "-D_GLUCAT_USE_EIGENVALUES -D_GLUCAT_USE_BINDINGS" to
	  CXXFLAGS.

2010-06-01 00:48  leopardi

	* configure.in: See changes for ./configure.in.in

2010-06-01 00:47  leopardi

	* glucat/matrix_multi_imp.h: Move static function definitions from
	  clifford_algebra.h to here: o pade_approx(): Pade' approximation
	  o db_step(): Single step of product form of Denman-Beavers square
	  root iteration o db_sqrt(): Product form of Denman-Beavers square
	  root iteration o pade_log(): Pade' approximation of log o
	  cascade_log(): Incomplete square root cascade and Pade'
	  approximation of log

	  Move function definitions from clifford_algebra.h to here (and to
	  framed_multi_imp.h): o sqrt(val, i, prechecked): square root of
	  multivector with specified complexifier o log(val, i,
	  prechecked): natural logarithm of multivector with specified
	  complexifier o exp(): exponential function

	  In sqrt() and log(), _GLUCAT_USE_EIGENVALUES is not defined,
	  proceed as per GluCat 0.5.0, including detection of special cases
	  of negative eigenvalues.

	  If _GLUCAT_USE_EIGENVALUES is defined, call set genus to the
	  struct returned by matrix::classify_eigenvalues(unitval.m_matrix)
	  and switch on genus.m_eig_case (the classification of eigenvalues
	  of unitval.m_matrix):

	  In sqrt(): o negative_eig_case: (unitval.m_matrix has negative
	  eigenvalues)	 scaled_result = sqrt(-i * unitval, i, prechecked)
	  * (i + Scalar_T(1)) / sqrt_2; o both_eig_case: (unitval.m_matrix
	  has both negative and imaginary eigenvalues)	 scaled_result =
	  sqrt(exp(i*safe_arg) * unitval, i, prechecked) *
	  exp(-i*safe_arg/2); o otherwise (no negative eigenvalues),
	  proceed as per GluCat 0.5.0.

	  In log(): o negative_eig_case: (unitval.m_matrix has negative
	  eigenvalues)	 scaled_result = log(-i * unitval, i, prechecked) +
	  i * pi/Scalar_T(2); o both_eig_case: (unitval.m_matrix has both
	  negative and imaginary eigenvalues)	scaled_result =
	  log(exp(i*safe_arg) * unitval, i, prechecked) - i * safe_arg; o
	  otherwise (no negative eigenvalues), proceed as per GluCat 0.5.0.

	  In exp(), remove the specific test for Scalar_T(0) and let the
	  Scalar_T exp() handle it.

2010-06-01 00:47  leopardi

	* glucat/matrix_multi.h: Move function declarations from
	  clifford_algebra.h to here (and to framed_multi.h): o sqrt(val,
	  i, prechecked): square root of multivector with specified
	  complexifier o log(val, i, prechecked): natural logarithm of
	  multivector with specified complexifier o exp(): exponential
	  function

	  Make sqrt() and log() friends of class matrix_multi<>.

	  Cosmetic improvements.

2010-06-01 00:46  leopardi

	* glucat/matrix_imp.h: Include headers for external eigenvalue
	  functions depending on whether _GLUCAT_USE_ALGLIB,
	  _GLUCAT_USE_BINDINGS_V1 or _GLUCAT_USE_BINDINGS is defined.

	  Define new static functions: * Functions needed for interface to
	  external eigenvalue functions:   o to_alglib(const Matrix_T&
	  val): Convert matrix to ALGLIB format.    o to_lapack(const
	  Matrix_T& val): Convert matrix to LAPACK format.

	  * Functions declared in matrix.h:   o eigenvalues(const Matrix_T&
	  val): Eigenvalues of a matrix.      The implementation differs
	  depending on whether _GLUCAT_USE_ALGLIB,
	  _GLUCAT_USE_BINDINGS_V1 or _GLUCAT_USE_BINDINGS is defined.	 o
	  classify_eigenvalues(const Matrix_T& val): Classify the
	  eigenvalues of a matrix.

	  Include <set> so that classify_eigenvalues() can use a set of
	  eigenvalues.

2010-06-01 00:46  leopardi

	* glucat/matrix.h: New data structures: o eig_case_t:
	  Classification of eigenvalues of a matrix.  o eig_genus:
	  Structure containing classification of eigenvalues.

	  Declare new functions: o eigenvalues(const Matrix_T& val):
	  Eigenvalues of a matrix.  o classify_eigenvalues(const Matrix_T&
	  val): Classify the eigenvalues of a matrix.

2010-06-01 00:45  leopardi

	* glucat/framed_multi_imp.h: Move function definitions from
	  clifford_algebra_imp.h to here (and to matrix_multi_imp.h): o
	  sqrt(val, i, prechecked): square root of multivector with
	  specified complexifier o log(val, i, prechecked): natural
	  logarithm of multivector with specified complexifier o exp():
	  exponential function In the general case, these functions call
	  the corresponding functions for matri_multi<>.

2010-06-01 00:44  leopardi

	* glucat/framed_multi.h: Move function declarations from
	  clifford_algebra.h to here (and to matrix_multi.h): o sqrt(val,
	  i, prechecked): square root of multivector with specified
	  complexifier o log(val, i, prechecked): natural logarithm of
	  multivector with specified complexifier o exp(): exponential
	  function

	  Cosmetic improvements.

2010-06-01 00:44  leopardi

	* glucat/clifford_algebra_imp.h: Move static function definitions
	  to matrix_multi_imp.h: o pade_approx(): Pade' approximation o
	  db_step(): Single step of product form of Denman-Beavers square
	  root iteration o db_sqrt(): Product form of Denman-Beavers square
	  root iteration o pade_log(): Pade' approximation of log o
	  cascade_log(): Incomplete square root cascade and Pade'
	  approximation of log

	  Move function definitions to framed_multi_imp.h and
	  matrix_multi_imp.h: o sqrt(val, i, prechecked): square root of
	  multivector with specified complexifier o log(val, i,
	  prechecked): natural logarithm of multivector with specified
	  complexifier o exp(): exponential function

	  For functions f() == cosh(), cos(), sinh(), sin(), tanh(), tan(),
	  atan(): If val is scalar, return value of scalar version of f().

	  For functions f() == acos(), asin(): If val is real and abs(val)
	  <= 1, return value of scalar version of f().

	  Make comments more accurate.

2010-06-01 00:43  leopardi

	* glucat/clifford_algebra.h: Move function declarations to
	  framed_multi.h and matrix_multi.h: o sqrt(val, i, prechecked):
	  square root of multivector with specified complexifier o log(val,
	  i, prechecked): natural logarithm of multivector with specified
	  complexifier o exp(): exponential function

2010-06-01 00:38  leopardi

	* AUTHORS: Add acknowledgements for QD and PyClical.

2010-05-28 01:12  leopardi

	* ChangeLog: ChangeLog for version 0.5.0.

2010-05-28 01:08  leopardi

	* ChangeLog: ChangeLog for version 0.5.0.

2010-05-28 01:01  leopardi

	* test11/peg11.h: In all functions: o Do not use explicit std::,
	  since we already are "using namespace std;" o Use typenames
	  scalar_t instead of s_, and index_set_t instead of e_,   for
	  greater clarity.

	  In check(): o Set squared tolerance tol2 to either 0 (if
	  test_control.m_verbose_output is true)   or otherwise to the
	  larger of std::numeric_limits<scalar_t>::epsilon(), and the
	  square of numeric_limits<double>::epsilon(). When nonzero,
	  tolerance is then the   larger of
	  sqrt(std::numeric_limits<scalar_t>::epsilon()) and
	  numeric_limits<double>::epsilon().  o Use relative norm of A-B if
	  norm(A) > tol2, otherwise use absolute norm of A-B.  o Use
	  numeric_traits<scalar_t>::sqrt() to obtain the size of the error.
	   o If test failed but norm of A-B <= tol2, print B.

	  In rand_transcendtest(): o For p from 0 to max_index (==n), for q
	  from the greater of 0 and p-2 to p, call   transcendtest() twice
	  with a random multivector in the Clifford algebra R_{p,q}.  o Use
	  m_::random() to obtain the random multivector.

	  In do_test11(): o Print the value of
	  numeric_limits<scalar_t>::epsilon(), for better   comparison of
	  errors.  o Call rand_transcendtest<m_>(n) with n==3 rather than
	  4, to reduce test runtime.

2010-05-28 01:01  leopardi

	* test11/peg11.cpp: Use program arguments "--help" and "--verbose":
	  Create the object test_control, of type control_t, constructed
	  from the program arguments, argc and argv.  Call test11() only if
	  test_control.m_valid is true, that is, only if the program
	  arguments are valid.

2010-05-28 01:00  leopardi

	* test00/peg00.h: Change print_a_b_lhs_rhs() to
	  print_error_lhs_rhs(), delete print_a_b_c_lhs_rhs(): o The new
	  routine print_error_lhs_rhs() prints only the relative error
	  (assuming   rhs is not 0) and the error tolerance, if this is not
	  0. The previous routines   produced output which was too verbose.

	  In test_idents(): o Change last parameter from multivector_t e to
	  index_set_t e: the frame   containing a, b and c.  o Set
	  tolerance tol to either 0 (if test_control.m_verbose_output is
	  true)   or otherwise to
	  512.0*std::numeric_limits<scalar_t>::epsilon().  o Change most
	  tests to call print_error_lhs_rhs() if abs(lhs - rhs) >
	  abs(rhs)*tol.    When test_control.m_verbose_output is true, this
	  calls print_error_lhs_rhs()	 whenever lhs != rhs.  o Those
	  tests which create scalar expressions call print_error_lhs_rhs()
	  if   scalar_diff*scalar_diff > tol*tol. When
	  test_control.m_verbose_output is true,   this calls
	  print_error_lhs_rhs() whenever scalar_diff != 0.

	  In do_test00(): o Use new static multivector_t::random() function
	  to give random values to   multivector_t variables a, b and c,
	  instead of calling rand().  o Call test_idents() with paramaters
	  a, b, c, and e: the frame containing	 a, b and c.

2010-05-28 01:00  leopardi

	* test00/peg00.cpp: Use program arguments "--help" and "--verbose":
	  Create the object test_control, of type control_t, constructed
	  from the program arguments, argc and argv.  Call test00() only if
	  test_control.m_valid is true, that is, only if the program
	  arguments are valid.

2010-05-28 00:59  leopardi

	* glucat/matrix_multi_imp.h: New static member function
	  random(const index_set_t frm).

	  Add missing comments.

2010-05-28 00:59  leopardi

	* glucat/matrix_multi.h: New static member function random(const
	  index_set_t frm).

	  Add comments for some groups of declarations.

2010-05-28 00:59  leopardi

	* glucat/framed_multi_imp.h: Define new static member function
	  random(const index_set_t frm).  This uses
	  random_generator_t::generator(), defined in glucat/random.h.

	  Move definition of var_term from here to framed_multi.h: this
	  improves standard C++ compliance and allows Intel C++ to work.

	  Add some missing comments.

2010-05-28 00:58  leopardi

	* glucat/framed_multi.h: New static member function random(const
	  index_set_t frm).

	  Move definition of var_term from framed_multi_imp.h to here: this
	  improves standard C++ compliance and allows Intel C++ to work.

	  Add comments for some groups of declarations.

2010-05-28 00:58  leopardi

	* glucat/qd.h: Separate the definitions for dd_real and qd_real,
	  rather than interleaving them.

	  Define macro _GLUCAT_QD_F(_T, _F) to reduce duplication in this
	  file.  Here _T is a type and _F is a function.

	  For numeric_traits<dd_real> and numeric_traits<qd_real>: o Use
	  _GLUCAT_QD_F() to define new functions cos(), acos(), cosh(),
	  sin(),   asin(), sinh(), tan(), atan(), tanh().  o Also use
	  _GLUCAT_QD_F() to define log() and exp() functions.  o Define new
	  function to_double().

2010-05-28 00:57  leopardi

	* glucat/scalar.h: For numeric_traits<Scalar_T>isInf(), use the
	  macro _GLUCAT_ISINF().  For numeric_traits<Scalar_T>isNaN(), use
	  the macro _GLUCAT_ISNAN().

	  Define new functions to_double(), cos(), acos(), cosh(), sin(),
	  asin(), sinh(), tan(), atan(), tanh() for
	  numeric_traits<Scalar_T>.

2010-05-28 00:57  leopardi

	* glucat/portability.h: Recognize the __INTEL_COMPILER macro name.

	  Disable warning 858: type qualifier on return type is
	  meaningless.	Disable warning 2259: non-pointer conversion from
	  "double" to "...={float}" may lose significant bits.

	  Define macros _GLUCAT_ISNAN() and _GLUCAT_ISINF(), because icpc
	  does not have std::tr1::isnan() or std:tr1::isinf().

2010-05-28 00:57  leopardi

	* glucat/glucat_imp.h: If _GLUCAT_USE_GSL_RANDOM is defined, then
	  include <gsl/gsl_rng.h> and  <gsl/gsl_randist.h>, otherwise
	  include  <tr1/random>.

	  Include new file "glucat/random.h".

2010-05-28 00:56  leopardi

	* glucat/glucat.h: If _GLUCAT_USE_GNU_CXX_HASH_MAP is defined, if
	  _GLUCAT_USE_BACKWARD_HASH_MAP is also defined, then include
	  <backward/hash_map> otherwise include <ext/hash_map>.

2010-05-28 00:55  leopardi

	* test/try_catch.h: Fix initial comment which names the file.

2010-05-28 00:54  leopardi

	* test_runtime/: gfft_test-11.out, products-8.out, squaring-11.out,
	  test.out, transforms-8.out: Test results for version 0.5.0.

2010-05-28 00:54  leopardi

	* README: Update README file to version 0.5.0:

	  Describe problems with the current sqrt() and log() functions,
	  and their effects.

	  The PDF version of the API documentation is now called
	  ./glucat-api/glucat-api-refman.pdf.

	  Describe the new --enable-pyclical, --with-map[=ARG],
	  --with-random[=ARG] options to ./configure, and their associated
	  macro definitions.

	  Describe PyCliCal.

2010-05-28 00:53  leopardi

	* INSTALL: Update installation instructions to version 0.5.0:

	  Include a description and installation instructions for PyCliCal.

	  Describe test/test_optional.sh and the program arguments --help
	  and --verbose for ./test00 and ./test11.

	  Describe the new --with-map[=ARG], --with-random[=ARG] options to
	  ./configure.

2010-05-28 00:53  leopardi

	* NEWS: NEWS for version 0.5.0.

2010-05-28 00:52  leopardi

	* TODO: TODO for version 0.5.0.

2010-05-28 00:52  leopardi

	* glucat.lsm: Update to version 0.5.0.

2010-05-28 00:51  leopardi

	* Doxyfile: Update to version 0.5.0.  Add  _GLUCAT_USE_TR1_RANDOM
	  to "PREDFINED".  This allows doxygen to see code in
	  glucat/random.h.

2010-05-28 00:49  leopardi

	* Makefile.am: Append pyclical to SUBDIRS (and therefor build
	  pyclical) only if the conditional make_pyclical is set.  Remove
	  obsolete comments mentioning kdevelop.

2010-05-28 00:49  leopardi

	* config.h.in: Add macro defines: HAVE_BACKWARD_HASH_MAP for
	  <backward/hash_map> HAVE_GSL_GSL_RNG_H for <gsl/gsl_rng.h>
	  HAVE_QD_QD_CONFIG_H for <qd/qd_config.h> HAVE_TR1_RANDOM for
	  <tr1/random>

2010-05-28 00:47  leopardi

	* configure.in.end: Create pyclical/Makefile if
	  "$glucat_use_pyclical" == "yes".

2010-05-28 00:47  leopardi

	* configure.in.in: Update to version 0.5.0.

	  Options for framed_multi map: Make these more sensible: Change
	  options "--with-hash-map" and "--with-unordered-map" to
	  "--with-map=(map|hash|unordered)". Make "unordered" the default
	  value.  When "hash" is selected, check and add compiler flag
	  "-Wno-deprecated", check header files <ext/hash_map> and define
	  _GLUCAT_USE_GNU_CXX_HASH_MAP.  If <backward/hash_map> is also
	  found, define _GLUCAT_USE_BACKWARD_HASH_MAP.

	  Options for random number generation: Add new option
	  "--with-random=(tr1|gsl)", with "tr1" the default value.  This
	  selects the type of random number generator to use.  If "gsl" was
	  selected, use AC_CHECK_LIB to check for libgsl.a and
	  libgslcblas.a, if found, check header file <gsl/gsl_rng.h>, and
	  if that is found, define _GLUCAT_USE_GSL_RANDOM and append "-lgsl
	  -lgslcblas" to the variable all_libraries. If "tr1" was selected,
	  or in the default case, check headr file <tr1/random>, but do not
	  define any macros.

	  Option for PyCliCal: Add new option "--enable-pyclical". This
	  uses Cython to build the PyCliCal prototype. If
	  "--disable-pyclical" was selected, or in the default case, append
	  "pyclical" to the variable DO_NOT_COMPILE. If "-enable-pyclical"
	  was selected, use AM_CONDITIONAL to set the condition
	  make_pyclical.

	  Compilation with Intel C++: For icpc version 11 or greater, check
	  and add compiler flag "-fp-model precise" rather than "-mp1".

	  Option for QD: Make this more consistent with others: If
	  "--with-qd" was selected, use AC_CHECK_LIB to check for libqd.a,
	  if found, check header file <qd/qd_config.h>, and if that is
	  found, define _GLUCAT_USE_QD and append "-lqd" to the variable
	  all_libraries.

	  Do not append USER_INCLUDES to all_includes twice.  Do not append
	  USER_LDFLAGS to all_libraries twice.

	  Move parentheses on a separate line back to the end of the
	  previous line.

2010-05-28 00:46  leopardi

	* configure.in: See changes to configure.in.in and
	  configure.in.end.

2010-05-28 00:32  leopardi

	* subdirs: New in CVS: Include only those directories for which
	  Makefiles can be created.

2010-05-28 00:31  leopardi

	* test/test_optional.sh: New file: Shell script which passes
	  program arguments to each test.

2010-05-28 00:31  leopardi

	* test/control.h: New file: Define and set parameters to control
	  tests.  Defines struct control_t, constructed from the program
	  arguments, argc and argv.

2010-05-28 00:27  leopardi

	* glucat/random.h: New file: Random number generator with single
	  instance per Scalar_T.  Uses either TR1 or GSL random numbers.

2010-05-28 00:24  leopardi

	* pyclical/sqrt_log_demo.out: New file for PyCliCal: prototype
	  Clifford algebra extension to Python.  Output from
	  sqrt_log_demo.py: Demonstration of sqrt and log using PyCliCal.

2010-05-28 00:24  leopardi

	* pyclical/sqrt_log_demo.py: New file for PyCliCal: prototype
	  Clifford algebra extension to Python.  Demonstration of sqrt and
	  log using PyCliCal.

2010-05-28 00:24  leopardi

	* pyclical/pyclical_demo.out: New file for PyCliCal: prototype
	  Clifford algebra extension to Python.  Output from
	  pyclical_demo.py: Python version of CLICAL demo, using PyCliCal.

2010-05-28 00:23  leopardi

	* pyclical/pyclical_demo.py: New file for PyCliCal: prototype
	  Clifford algebra extension to Python.  Python version of CLICAL
	  demo, using PyCliCal.

2010-05-28 00:22  leopardi

	* pyclical/setup.py: New file for PyCliCal: prototype Clifford
	  algebra extension to Python.	Python setup script for PyCliCal.
	  Designed to be run from make.  Uses distutils and Cython.

2010-05-28 00:22  leopardi

	* pyclical/PyCliCal.pyx: New file for PyCliCal: prototype Clifford
	  algebra extension to Python.	Python extension file for use with
	  Cython.  Wraps most of the C++ interface for classes IndexSet and
	  Clifford.

2010-05-28 00:19  leopardi

	* pyclical/PyCliCal.h: New file for PyCliCal: prototype Clifford
	  algebra extension to Python.	C++ header file for Cython to use
	  with PyCliCal.pyx.  Specifies that class IndexSet is
	  index_set<DEFAULT_LO,DEFAULT_HI>, scalar_t is double, and class
	  Clifford is framed_multi<scalar_t>.

2010-05-28 00:18  leopardi

	* pyclical/Makefile.am: New file for PyCliCal: prototype Clifford
	  algebra extension to Python.	Automake input file to create
	  Makefile for PyCliCal.

2010-04-09 19:02  leopardi

	* ChangeLog: ChangeLog for version 0.4.4.

2010-04-04 23:47  leopardi

	* ChangeLog: ChangeLog for version 0.4.4.

2010-04-04 23:42  leopardi

	* INSTALL: Describe the use of -with-qd and _GLUCAT_USE_QD to
	  control the use of QD.  Remove reference to www.garloff.de web
	  page, now possibly obsolete.	Update to version 0.4.4.

2010-04-04 23:39  leopardi

	* README: Describe the use of _GLUCAT_USE_QD to control the use of
	  QD.  Fix various grammatical errors.	Make references to header
	  files more consistent.  Update to version 0.4.4.

2010-04-04 23:34  leopardi

	* TODO: Add some TODO items describing the use of random numbers
	  with normal distribution.  Rearrange some of the existing TODO
	  items.

2010-04-04 23:33  leopardi

	* NEWS: NEWS for version 0.4.4.

2010-04-04 21:18  leopardi

	* test_runtime/: gfft_test-11.out, products-8.out, squaring-11.out,
	  test.out, transforms-8.out: Test results for version 0.4.4.

2010-04-04 21:17  leopardi

	* glucat.lsm: Update to Version 0.4.4.

2010-04-04 21:17  leopardi

	* Doxyfile: Define _GLUCAT_USE_DENSE_MAT _GLUCAT_USE_QD
	  _GLUCAT_USE_TR1_UNORDERED_MAP Expand
	  _GLUCAT_CLIFFORD_ALGEBRA_OPERATIONS macro.  Define include path
	  so that glucat/clifford_algebra.h is used for definition of
	  _GLUCAT_CLIFFORD_ALGEBRA_OPERATIONS.	Update to Version 0.4.4.

2010-04-04 21:16  leopardi

	* configure.in: Generated from configure.in.in and
	  configure.in.end.  See changes to configure.in.in.

2010-04-04 21:16  leopardi

	* configure.in.in: Support QD classes dd_real and qd_real: Add
	  option --with-qd which sets glucat_use_qd, checks qd/qd_config.h,
	  defines _GLUCAT_USE_QD, and adds -ldq to all_libraries.  Quote
	  help comments properly.  Append $USER_LDFLAGS to all_libraries,
	  and $USER_INCLUDES to all_includes before calling
	  AC_GLUCAT_CHECK_COMPILERS to allow user definition of extra
	  libraries and includes before checking starts.  Update to Version
	  0.4.4.

2010-04-04 21:16  leopardi

	* aclocal.m4: Generated automatically by aclocal-1.11.	See changes
	  to acinclude.m4.

2010-04-04 21:15  leopardi

	* acinclude.m4: Update to aclocal-1.11.  Avoid warning messages
	  about serial.  Use _cv_ in names to avoid a warning message.

2010-04-04 21:14  leopardi

	* test11/peg11.cpp: Support QD classes dd_real and qd_real: If
	  _GLUCAT_USE_QD is defined, test using dd_real and qd_real.

2010-04-04 21:14  leopardi

	* test00/peg00.h: Use value scalar_t(1) instead of 1.0 to ensure
	  correct use of scalar values.

2010-04-04 21:13  leopardi

	* test00/peg00.cpp: Support QD classes dd_real and qd_real: If
	  _GLUCAT_USE_QD is defined, test using dd_real and qd_real.  Test
	  using long_double.

2010-04-04 21:11  leopardi

	* glucat/: framed_multi.h, matrix_multi.h: Include
	  glucat/clifford_algebra.h so that Doxygen can see definition of
	  _GLUCAT_CLIFFORD_ALGEBRA_OPERATIONS.

2010-04-04 21:11  leopardi

	* glucat/long_double.h: Remove unneeded definitions of std::conj,
	  std::real and std::imag.  The equivalent functions are available
	  via numeric_traits defined in scalar.h.

2010-04-04 21:10  leopardi

	* glucat/qd.h: New source file to support QD classes dd_real and
	  qd_real.  Define specializations for numeric_traits<dd_real> and
	  numeric_traits<qd_real>.

2010-04-04 21:09  leopardi

	* glucat/glucat.h: Support QD classes dd_real and qd_real: If
	  _GLUCAT_USE_QD is defined, include qd/qd_real.h and glucat/qd.h.
	  Improve comment for glucat/scalar.h.

2009-12-21 11:06  leopardi

	* ChangeLog: ChangeLog for version 0.4.3.

2009-12-21 11:03  leopardi

	* test_runtime/test.out: Test results for version 0.4.3.

2009-12-21 11:02  leopardi

	* test14/peg14.cpp: For operator!= (const Scalar_T& scr, const
	  Multivector<Scalar_T,LO,HI>& rhs), there was essentially the same
	  bug as was fixed in GluCat 0.4.2, but this was missed by Bug
	  2847758. This change add more tests to test14 to check this case
	  as well.

2009-12-21 11:01  leopardi

	* glucat/clifford_algebra_imp.h: For operator!= (const Scalar_T&
	  scr, const Multivector<Scalar_T,LO,HI>& rhs), there was
	  essentially the same bug as was fixed in GluCat 0.4.2, but this
	  was missed by Bug 2847758. This change fixes this operator.

2009-12-21 10:58  leopardi

	* NEWS: NEWS for version 0.4.3.

2009-12-21 10:57  leopardi

	* configure.in, Doxyfile, INSTALL, configure.in.in, glucat.lsm:
	  Update to Version 0.4.3.

2009-12-14 23:47  leopardi

	* ChangeLog: Update to version 0.4.2.

2009-12-14 23:43  leopardi

	* test_runtime/: gfft_test-11.out, products-8.out, squaring-11.out,
	  test.out, transforms-8.out: Test results for version 0.4.2.

2009-12-14 23:42  leopardi

	* TODO: Add some TODO items, including investigating the use of
	  Eigen as a replacement for uBLAS.  Rearrange some of the existing
	  TODO items.

2009-12-14 23:41  leopardi

	* NEWS: News for version 0.4.2.

2009-12-14 23:39  leopardi

	* configure.in.in, Doxyfile, INSTALL, glucat.lsm: Update to version
	  0.4.2.

2009-12-14 23:39  leopardi

	* configure.in: File created by cat configure.in.in
	  configure.in.end Update to version 0.4.2.

2009-12-14 23:38  leopardi

	* test14/peg14.cpp: Test bug fix 2847758: "operator!=(lhs,scr)
	  sometimes wrongly returns true".

	  Add tests to test14 to ensure that operator==(lhs,scr) and
	  operator!=(lhs,scr) return the correct values.

2009-12-14 23:35  leopardi

	* glucat/clifford_algebra_imp.h: Fix bug 2847758:
	  "operator!=(lhs,scr) sometimes wrongly returns true".

	  In operator!= (const Multivector<Scalar_T,LO,HI>& lhs, const
	  Scalar_T& scr)., with GluCat 0.4.1 and earlier, when lhs is of
	  type matrix_multi_t, it is possible that lhs.frame().count() !=0
	  and yet the matrix is scr times the identity matrix.	In this
	  case operator!=() returns false when it should return true.

2009-07-28 23:09  leopardi

	* ChangeLog: Update to version 0.4.1.

2009-07-28 22:52  leopardi

	* INSTALL, TODO: Update to version 0.4.1.

2009-07-28 22:52  leopardi

	* NEWS: News for version 0.4.1.

2009-07-27 11:05  leopardi

	* Doxyfile: Updated to Doxygen version 1.5.9.

2009-07-27 11:00  leopardi

	* test_runtime/: gfft_test-11.out, products-8.out, squaring-11.out,
	  test.out, transforms-8.out: Test results for version 0.4.1.

2009-07-27 10:59  leopardi

	* gfft_test/Makefile.in, products/Makefile.in,
	  squaring/Makefile.in, test/Makefile.in, test00/Makefile.in,
	  test01/Makefile.in, test02/Makefile.in, test03/Makefile.in,
	  test04/Makefile.in, test05/Makefile.in, test06/Makefile.in,
	  test07/Makefile.in, test08/Makefile.in, test09/Makefile.in,
	  test10/Makefile.in, test11/Makefile.in, test12/Makefile.in,
	  test13/Makefile.in, test14/Makefile.in, test15/Makefile.in,
	  test16/Makefile.in, transforms/Makefile.in: Files created
	  automatically by automake.

2009-07-27 10:56  leopardi

	* configure.in: File created by cat configure.in.in
	  configure.in.end Update to version 0.4.1.  Change ./Makefile to
	  Makefile to prevent error message.

2009-07-27 10:54  leopardi

	* Doxyfile, configure.in.in, glucat.lsm: Update to version 0.4.1.

2009-07-27 10:51  leopardi

	* aclocal.m4: Update autotools.

2009-07-27 10:50  leopardi

	* configure.in.end: Change ./Makefile to Makefile to prevent
	  warning message.

2009-07-27 10:48  leopardi

	* test11/peg11.h: Set tol to sqrt(epsilon()).  If tests fails,
	  always print absolute norm of difference, and also print relative
	  norm when this makes sense.  In transcendtest():    New bool
	  parameter random,    use exp() rather than std::exp().  New
	  function rand_transcendtest(): test using random values.  In
	  do_test11():	  Use numeric_traits<s_>::pi(),    use
	  rand_transcendtest().

2009-07-27 10:47  leopardi

	* test11/peg11.cpp: Test using framed_multi<float>,
	  matrix_multi<float>, framed_multi<long double> and
	  matrix_multi<long double>, as well as framed_multi<double> and
	  matrix_multi<double>.

2009-07-27 10:45  leopardi

	* glucat/clifford_algebra_imp.h: Consistently use Scalar_T to cast
	  integer constants.  Use static consts where possible.  Reorder
	  expressions for more efficiency.  Use new form of
	  check_complex().  Use numeric_traits<Scalar_T>:: abs(), exp(),
	  fmod(), log(), pi(), pow(), to_int().  Use traits_t for
	  numeric_traits<Scalar_T>.

	  Make transcendental functions more accurate: In check_complex():
	  add a bool parameter prechecked, defaulting to false.

	  In pade_approx(): use arrays a and b of length 14 rather than 10.

	  In db_sqrt(): reduce tolerance tol from epsilon()/2 to
	  epsilon()/1024; use variable norm_M_1 = norm(M - 1); check
	  Y.isnan() inside loop and leave early if true.

	  In sqrt(): use Pade approximation produced by
	  Pade1(sqrt(1+x),x,13,13); if val*val is real and val is not real
	  then the matrix for val has negative eigenvalues, so return
	  sqrt(-i*val)*(i+1)/sqrt_2; scale val towards val == 1 or towards
	  abs(val) == 1 as appropriate: if norm(val/real(val) - 1) < 1,
	  then scale by real(val) [towards val == 1], else if real(val)<0
	  then scale by -abs(val) otherwise scale by abs(val) [towards
	  circle abs(val) == 1]; use unitval=val/scale with either Pade'
	  approximation or product form of Denman-Beavers square root
	  iteration to obtain scaled_result, if scaled_result.isnan() then
	  try again, this time multiplying unitval by -i to try to rotate
	  eigenvalues away from negative real axis.

	  In exp(): make 0 a special case; test for NaN earlier; test for
	  pure_scale==0;

	  In pade_log(): use Pade approximation produced by
	  Pade1(log(1-x),x,13,13); do not scale val towards circle abs(A)
	  == 1 (now done in log() instead);

	  In cascade_log(): use variable norm_Y_1 = norm(Y - 1); use
	  pow_2_outer_step [==pow(2,outer-step)], pow_4_outer_step
	  [==pow(4,outer-step)], max_outer_norm and max_inner_norm to
	  control the nested loops; remove "Warning: log iteration did not
	  converge..." and instead return NaN if iteration does not
	  converge;

	  In log(): check for special case where val is not scalar but
	  val*val is positive scalar, and return log(-i*val)+i*pi/2; scale
	  val towards val == 1 or towards abs(val) == 1 as appropriate: if
	  norm(val/real(val) - 1) < 1.0/9.0, then scale by real(val)
	  [towards val == 1], else if real(val)<0 then scale by -abs(val)
	  otherwise scale by abs(val) [towards circle abs(val) == 1]; check
	  for special case where scale==0, and return NaN;
	  [log_scale==log(abs(scale))]: check for special case where
	  scale<0, and set rescale=i*pi+log_scale, otherwise
	  rescale=log_scale; [scaled_result==cascade_log(val/scale)]: if
	  scaled_result.isnan() just return NaN, otherwise return
	  scaled_result+rescale.

	  In sin(): use pi() and fmod() to bring real part of val into the
	  interval [0, 2*pi), defining z, and return i * (exp(-z)-exp(z)) /
	  Scalar_T(2).

	  In atan(): if val is closer to 1 than it is to -1, return
	  (log(val+1) - log(-val+1)))/2, otherwise return log((val+1) /
	  (-val+1))/2.

2009-07-27 10:44  leopardi

	* glucat/framed_multi_imp.h: Use traits_t for
	  numeric_traits<Scalar_T>.  Use traits_t::real() rather than
	  std::real().

2009-07-27 10:42  leopardi

	* glucat/global.h: Increase DEFAULT_Sqrt_Max_Steps from 16 to 64;
	  Increase DEFAULT_Fast_Size_Threshold from 6 to 7.

2009-07-27 10:40  leopardi

	* glucat/glucat.h: Include long_double.h after scalar.h.

2009-07-27 10:40  leopardi

	* glucat/long_double.h: Specializations of numeric_traits<long
	  double>::pi() and ln_2().

2009-07-27 10:39  leopardi

	* glucat/matrix_imp.h: In nork(): explicitly cast the expression
	  for nnz_lhs to double before casting to Scalar_T.

2009-07-27 10:38  leopardi

	* glucat/: framed_multi.h, matrix_multi.h: Construct a multivector
	  from a char*; Construct a multivector, within a given frame, from
	  a char*.

2009-07-27 10:37  leopardi

	* glucat/matrix_multi_imp.h: In scalar() and norm(): explicitly
	  cast dim to double before casting to Scalar_T.

2009-07-27 10:36  leopardi

	* glucat/scalar.h: Use const Scalar_T& instead of Scalar_T for
	  parameters where possible.  Fix comment describing IsInf().  New
	  static member functions for numeric_traits<Scalar_T>:
	  to_int(), fmod(), conj(), real(), imag(), pi(), ln_2(), log2(),
	  pow(), exp().  Existing log2() function now uses static member
	  function log2().

2007-11-06 23:01  leopardi

	* NEWS: Fix typos.

2007-11-06 20:47  leopardi

	* ChangeLog: Update to version 0.4.0.

2007-11-06 20:44  leopardi

	* NEWS: News for version 0.4.0.

2007-11-06 20:23  leopardi

	* glucat/generation_imp.h: Make initialization of generators more
	  consistent.

2007-11-06 20:22  leopardi

	* test/timing_tests.sh: Shell script for timing tests.

2007-11-06 20:21  leopardi

	* AUTHORS, INSTALL, README, TODO: Update for version 0.4.0.

2007-11-06 20:21  leopardi

	* glucat.lsm: Update entered date.

2007-11-06 20:16  leopardi

	* test_runtime/test.out: Test results for version 0.4.0.

2007-11-05 01:29  leopardi

	* glucat/scalar.h: Work around change in
	  <boost/numeric/ublas/traits.hpp>.  Use UBLAS_ABS and UBLAS_SQRT
	  as per portability.h, rather than type_abs and type_sqrt.

2007-11-05 01:26  leopardi

	* glucat/portability.h: Work around change in
	  <boost/numeric/ublas/traits.hpp>.  If BOOST_VERSION is at least
	  103400 (ie. Boost 1.34.0) then set UBLAS_ABS to type_abs and
	  UBLAS_SQRT to type_sqrt, otherwise use abs and sqrt respectively.

2007-11-05 01:11  leopardi

	* glucat/glucat.h: Include <boost/version.hpp>.

2007-11-04 12:42  leopardi

	* glucat.directory, glucat.kdevelop: These files are no longer
	  used.

2007-11-04 11:19  leopardi

	* test_runtime/products-8.out: Timing test for *, ^, &, % products.

2007-11-04 10:36  leopardi

	* glucat/scalar.h: New member functions abs(), sqrt(), log().
	  Functions abs() and sqrt() use ublas::type_traits<>.	Function
	  log2() uses log().  Cosmetics.

2007-11-04 10:35  leopardi

	* glucat/matrix_multi_imp.h: New member function scalar().  New
	  function star() and new operators *, ^, &, %, / based on code for
	  *=, ^=, etc.	Make operators *=, ^=, &=, %=, /= depend on new
	  operators *, ^, &, %, / respectively.  Use this-> more
	  consistently.

	  In operator ==: o ensure that there is no aliasing; o convert
	  *this and rhs to a common frame, if necessary; o
	  if_GLUCAT_USE_DENSE_MATRICES is defined, use ublas::norm_inf().

	  In operator ==(Scalar_T), treat 0 and NaN as special cases.

	  Other optimizations for speed: o Inline functions pow(), write(),
	  isnan(), fast_matrix_multi() and operators +=, -=, *=, /=, (),
	  >>.  o In operators += and -=, ensure there is no aliasing, and
	  use noalias() assignment.  o In operator *, use
	  ublas::axpy_prod() if _GLUCAT_USE_DENSE_MATRICES is defined,
	  otherwise use ublas::sparse_prod().  o In operators * and /,
	  check isnan() only if _GLUCAT_USE_DENSE_MATRICES is not defined.
	  o In operator /, treat rhs == 0 as a special case; convert *this
	  and rhs to a common frame, if necessary.  o In function inv(),
	  use / rather than /=.  o In function isnan(), use new function
	  matrix::isnan().  o In function fast(), use 3 parameter
	  constructor for J.  o In operator +=(term_t), use plus_assign().
	  o In function norm() use new fnction matrix::norm_frob2() rather
	  than matrix::inner().

	  Cosmetics.

2007-11-04 10:34  leopardi

	* glucat/matrix_multi.h: Optimizations for speed: o Make function
	  star() and operators *, ^, &, %, / friends of class
	  matrix_multi<>.

2007-11-04 10:34  leopardi

	* glucat/matrix_imp.h: New functions: o mono_kron(): sparse
	  Kronecker tensor product of monomial matrices; o norm_frob2():
	  square of Frobenius norm; o trace(): Matrix trace.

	  Optimizations for speed: o Functions mono_kron() and mono_prod()
	  assume that their arguments are sparse and use the ublas 3
	  parameter constructor.  o Function nork() only checks number of
	  rows, columns etc. if mono is false.

	  Remove inline from functions nnz() and isnan(): they contain
	  double loops.

	  Cosmetic changes.

2007-11-04 10:33  leopardi

	* glucat/matrix.h: New functions: o mono_kron(): sparse Kronecker
	  tensor product of monomial matrices; o norm_frob2(): square of
	  Frobenius norm; o trace(): Matrix trace.

2007-11-04 10:33  leopardi

	* glucat/index_set_imp.h: Optimzations for speed: o In constructor
	  from index_pair_t, use masks instead of a loop.  o Consolidate
	  templates for functions test(), count(), count_pos(), use
	  bitset_t::to_ulong().  o In functions min() and max(), if
	  _GLUCAT_BITS_PER_ULONG is 32 or 64,	 use the "bit wizardry"
	  version of the function for all LO, HI, but only include all
	  cases if HI-LO > 8.  o In function compare(), use
	  lex_less_than().  o In function lex_less_than() use,
	  bitset_t::to_ulong().  o Inline functions classname() and
	  value_of_fold().  o Consolidate templates for sign_of_mult(). Use
	  bitset_t::to_ulong().    If HI-LO > 8, use "bit wizardry": new
	  static functions inverse_gray() and inverse_reversed_gray().
	  Otherwise use slightly faster loops.	o Consolidate templates for
	  hash_fn().	Shift neg_part into high bits of result, to reduce
	  collisions.  o Inline short index_set<>::reference functions.

	  Use static_cast<> where appropriate.

	  New member function sign_of_square(): sign of geometric square of
	  a Clifford basis element.

	  Remove deprecated function index_range().

	  Cosmetics.

2007-11-04 10:32  leopardi

	* glucat/index_set.h: Make operators ^, & and | friends of class
	  index_set<>.	Use BOOST_STATIC_ASSERT to enforce (LO <= 0) && (HI
	  >= 0) && (HI > LO) && (-LO < _GLUCAT_BITS_PER_ULONG) && (HI <
	  _GLUCAT_BITS_PER_ULONG) && (HI-LO <= _GLUCAT_BITS_PER_ULONG).
	  New typedef index_pair_t for use with index_set<> constructor for
	  index range.	New member function sign_of_square(): sign of
	  geometric square of a Clifford basis element.  Remove deprecated
	  function index_range().

2007-11-04 10:31  leopardi

	* glucat/glucat_imp.h: Use the Boost pool allocator.  Include
	  <boost/pool/pool_alloc.hpp>

2007-11-04 10:31  leopardi

	* glucat/glucat.h: Include <boost/static_assert.hpp>

	  Include <boost/numeric/ublas/traits.hpp>

	  Use the appropriate type of map, depending on
	  _GLUCAT_USE_GNU_CXX_HASH_MAP and _GLUCAT_USE_TR1_UNORDERED_MAP.
	  If neither is defined, define _GLUCAT_MAP_IS_ORDERED.

	  Use the Boost pool allocator.  Include <boost/pool/poolfwd.hpp>

2007-11-04 10:30  leopardi

	* glucat/global.h: Change _GLUCAT_CTAssert so that it does not
	  generate spurious warnings with gcc 4.2.2.  New tuning parameter
	  Products_Size_Threshold, default 1UL << 22, to control operators
	  ^, & and %.  Change defaults for the other tuning parameters:
	  DEFAULT_Div_Max_Steps 	  =	    4;
	  DEFAULT_Sqrt_Max_Steps	  =	   16;
	  DEFAULT_Log_Max_Outer_Steps	  =	   16;
	  DEFAULT_Log_Max_Inner_Steps	  =	   16;
	  DEFAULT_Basis_Max_Count	  =	   10;
	  DEFAULT_Fast_Size_Threshold	  = 1UL <<  6;
	  DEFAULT_Inv_Fast_Dim_Threshold  = 1UL <<  6;

2007-11-04 10:29  leopardi

	* glucat/generation_imp.h: Optimizations for speed: o Make
	  generator_table<> operator() inline; o In function
	  gen_from_pm1_qm1(), use 3 parameter constructor for neg and dup,
	  copy pos from neg and use function mono_kron().

2007-11-04 10:29  leopardi

	* glucat/framed_multi_imp.h: Inline function classname().

	  In constructor from matrix_multi<>, do not add a term if its
	  relative contribution to the norm is <= eps*eps.

	  In operator ==, fix the loop so that it terminates if either
	  this_it or rhs_it has reached its respective end().

	  Use function numeric_traits<Scalar_T>::abs() rather than
	  std::abs() or ublas::type_traits<Scalar_T>::norm_2().

	  New function star() and new operators *, ^, &, %, / based on code
	  for *=, ^=, etc.  Make operators *=, ^=, &=, %=, /= depend on new
	  operators *, ^, &, %, / respectively.

	  In operator *, use _GLUCAT_MAP_IS_ORDERED rather than
	  _GLUCAT_USE_GNU_CXX_HASH_MAP for conditional compilation.

	  For operators ^, & and %, use an asymptotically faster algorithm
	  for large sizes, controlled by Tune_P::products_size_threshold.

	  For operator % if _GLUCAT_MAP_IS_ORDERED is defined then use an
	  algorithm which knows that both lhs and rhs are sorted by
	  increasing grade, then lexicographically, and a "larger" index
	  set cannot be a subset of a "smaller" one.

	  New member function scalar().

	  Do not inline functions fold() and unfold(): they contain loops.

	  New non-member function crd_of_mult() gives the coordinate of a
	  product of terms.  In operator * for product of terms, use
	  crd_of_mult().

	  Other optimizations for speed: o Use initialization list in copy
	  constructor.	o In constructor from matrix_multi<>, use shortcuts
	  for 0 and scalars.  o In operator ==, use _GLUCAT_MAP_IS_ORDERED
	  rather than an if().	o Use constants this_begin, this_end,
	  lhs_begin, lhs_end, rhs_begin, rhs_end, with iterators in
	  operators ==, *, o Inline operators += and -=.  o In function
	  quad(), use count_neg().  o In functions centre_pm4_qp4() and
	  centre_pp4_qm4() use the index_set_t constructor which takes an
	  index range ddefined using an index_pair_t.  o Inline
	  fast_framed_multi().	o In function fast(), if *this is empty,
	  return a zero matrix of the appropriate size.    This cuts out
	  multiple levels of unnecessary recursion.  o In function fast(),
	  use 3 parameter constructor for J.

	  Cosmetics.

2007-11-04 10:27  leopardi

	* glucat/framed_multi.h: Optimizations for speed: o Make function
	  star() and operators *, ^, &, %, / friends of class
	  framed_multi<>; o Use boost::fast_pool_allocator<> with
	  std::map<>.

	  If _GLUCAT_USE_GNU_CXX_HASH_MAP is not defined and
	  _GLUCAT_USE_TR1_UNORDERED_MAP is defined, then use
	  std::tr1::unordered_map<> for map_t.

	  New non-member function crd_of_mult() gives the coordinate of a
	  product of terms.

2007-11-04 10:26  leopardi

	* glucat/clifford_algebra_imp.h: Optimizations for speed: (1) For
	  operators *, ^, &, %, use the new corresponding operator for the
	  left hand side type in preferenece to *=, ^=, &=, %=.  (2) The
	  function star() uses the corresponding function for the left hand
	  side type.  (3) The functions scalar() and pure() use the member
	  function scalar().  The function pow() with int right hand side
	  is no longer inlined.

	  Overhaul transcendental functions to make them more correct and
	  more precise:

	  New references: [H] Nicholas J. Higham, "The Scaling and Squaring
	  Method for the Matrix Exponential Revisited", 2005.  [Z] Doron
	  Zeilberger, "PADE" (Maple code), 2002.  Make order of products
	  more consistent: geometric, outer, inner, contraction.

	  New function check_complex(val, i) checks that i is a valid
	  complexifier for val, ie. checks that i and elliptic(val) are
	  consistent.

	  New versions of sqrt, log, acosh, cos, acos, asinh, sin, asin,
	  atanh, tan, atan, with a second parameter i, which is a specified
	  complexifier and a third parameter prechecked which controls
	  check_complex.  The functions F(val), where F == sqrt, ... atan
	  call F(val, elliptic(val), true).

	  Increase degree of pade_approx() from 8 to 10; cosmetic changes.

	  In function abs(), use numeric_traits<Scalar_T>::sqrt rather than
	  std::sqrt().

	  In function db_sqrt(): o use the tolerance tol = epsilon()/2; o
	  check norm(1-M) > tol*tol rather than norm(1-M) > 0; o remove the
	  warning if convergence fails and return NaN instead.

	  In function sqrt(val, i, prechecked): o use a degree 10 Pade
	  approximation obtained using [Z]; o use pade_approx() only for
	  norm(unitval-1) < 1/4 rather than norm(unitval-1) < 1; o if
	  db_sqrt(unitval) returns NaN, try db_sqrt(-unival),  if this does
	  not return NaN, multiply result by i; o Use
	  numeric_traits<Scalar_T>::sqrt rather than std::sqrt().

	  In function exp(): o use norm() rather than max_abs(); o change
	  ilog2_scale to take the A.frame() into account; o increase the
	  degree of Pade approximation from 8 to 13, per [H].

	  In function pade_log() use a degree 10 Pade approximation
	  obtained using [Z].  In function cascade_log(): o try to iterate
	  until norm(1-Y) > 1/8 rather than norm(1-Y) > 1/2; o check
	  Y.isnan() rather than val.isnan().  In function log(), if
	  cascade_log(unitval) returns NaN, try cascade_log(-unitval) and
	  add i * l_pi to the result.

	  Function acosh() uses log(val + sqrt(val*val-1,i,true),i,true).
	  Function acos() uses acosh(val,i,true).  Function asinh() uses
	  log(val + sqrt(val*val+1,i,true),i,true).  Function sin uses
	  i*(cos(val)-exp(i*val)).  Function asin() uses
	  -i*asinh(i*val,i,true).  Function atanh() uses
	  log((1+val)/(1-val),i,true)/2.  Function tan() uses
	  sin(val,i,true)/cos(val,i,true).  Function atan() uses
	  -i*atanh(i*val,i,true).

2007-11-04 10:24  leopardi

	* glucat/clifford_algebra.h: New const member function scalar().
	  Make order of products more consistent: geometric, outer, inner,
	  contraction.	New versions of sqrt, log, cos, acos, acosh, sin,
	  asin, asinh, tan, atan, atanh with a second parameter i, which is
	  a specified complexifier and a third parameter prechecked which
	  controls check_complex.

2007-11-04 10:08  leopardi

	* transforms/transforms.cpp: Remove the test for
	  matrix_multi<double>.

2007-11-04 10:07  leopardi

	* test11/peg11.h: Make test11 into a regression test which uses the
	  new function check() to compare results.  Use many more test
	  cases with function transcendtest().

2007-11-04 10:07  leopardi

	* test04/: peg04.cpp, peg04.h: Correct the URL of the Clical demo.

2007-11-04 10:07  leopardi

	* test00/peg00.h: Tighten tol from eps*4 to eps*2.  Do not use
	  std::abs(). It is not needed when Scalar_T is float or double.

2007-11-04 10:06  leopardi

	* test00/peg00.cpp: Use more test cases with function do_test00():
	  < *_multi<float,-3,4> >(3),  < *_multi<float,-5,6> >(5), <
	  *_multi<double> >(5).

2007-11-04 10:05  leopardi

	* products/products.h, squaring/squaring.cpp, squaring/squaring.h:
	  Use GLUCAT_TEST_REPEAT to control whether to repeat the timing
	  tests.

2007-11-04 10:05  leopardi

	* products/products.cpp: Use GLUCAT_TEST_REPEAT to control whether
	  to repeat the timing tests.  Remove the tests for
	  *_multi<double,-4,4>, and *_multi<float>.

2007-11-04 10:04  leopardi

	* products/tuning.h, squaring/tuning.h: Change
	  Driver_Fast_Size_Threshold and Driver_Inv_Fast_Dim_Threshold for
	  _GLUCAT_SQUARING_OPT to match the default value of 1 << 6.

2007-11-04 10:01  leopardi

	* configure.in, configure.in.in: Update to version 0.4.0.  New
	  configure option --with-unordered-map which controls
	  -D_GLUCAT_USE_TR1_UNORDERED_MAP.  Reorder compiler flags for the
	  sake of consistency.	Remove some commands which were commented
	  out.	For gcc between 4 and 4.0.2, move the test for and use of
	  the flag -fno-strict-aliasing.  Confine the test for and use of
	  -fabi-version=0 to gcc between 4 and 4.0.2 only.  Confine the
	  test for and use of -Wstrict-aliasing=2 to gcc between 4 and 4.1
	  only.  If --enable-strict is selected, for gcc later than 4.1,
	  test and use the flags  -pedantic  -Wextra -Wno-unused-parameter.
	  If --enable-debug=no is selected: (1) For gcc 4.1 and later,
	  test and use the flags  -O3 --param max-inline-insns-single=5400
	  --param large-function-insns=5400  -funroll-loops
	  -fvariable-expansion-in-unroller -fno-math-errno
	  -fno-trapping-math.  (2) For gcc later than 4.2.1, for host
	  x86_64-*-*, also use the flag -march=k8.

2007-11-04 10:01  leopardi

	* config.h.in: HAVE_TR1_UNORDERED_MAP is to be defined to 1 if
	  <tr1/unordered_map> exists.

2007-11-04 09:59  leopardi

	* Doxyfile, glucat.lsm: Update to version 0.4.0.

2007-09-10 07:38  leopardi

	* ChangeLog: Changes for version 0.3.0.

2007-09-10 07:34  leopardi

	* test_runtime/: gfft_test-11.out, squaring-11.out, test.out,
	  transforms-8.out: Test results for version 0.3.0.

2007-09-09 18:16  leopardi

	* squaring/squaring.cpp: Add an extra line after the tests for each
	  different template class, to make output easier to read.

2007-09-09 18:14  leopardi

	* squaring/squaring.h: Clean up based on products test.  Increase
	  precision of output and increase number of repetitions to get
	  more accurate timings for small frame sizes.	Use new
	  index_set(range) constructor.

2007-09-09 18:12  leopardi

	* gfft_test/gfft_test.h: Increase precision of output and increase
	  number of repetitions to get more accurate timings for small
	  frame sizes.

2007-09-09 18:09  leopardi

	* transforms/transforms.h: Use new index_set(range) constructor.

2007-09-09 18:08  leopardi

	* test/test.sh: Add 00 to list of tests.

2007-09-09 18:06  leopardi

	* products/: Makefile.am, Makefile.in, products.cpp, products.h,
	  tuning.h: New timing test which measures the speed of the *, ^, &
	  and % products.

2007-09-09 18:04  leopardi

	* test00/: Makefile.am, Makefile.in, peg00.cpp, peg00.h: New
	  regression test which checks many Geometric Algebra identities.

2007-09-09 17:58  leopardi

	* glucat/framed_multi_imp.h: In operator&(), ensure that the inner
	  product implements the definition given in Hestenes and Sobczyk,
	  1984.  According to the definition, a & b == 0 if either a or b
	  is a scalar.

2007-09-09 17:53  leopardi

	* glucat/index_set_imp.h: Add a new constructor,  index_set(range),
	  where range is a pair of index_t values.  This is intended to
	  replace the function index_range(), which is now deprecated and
	  will be removed from GluCat 0.4.0.  The new constructor is needed
	  because of differences between the current GNU and Intel
	  compilers.

	  In lex_less_than(), fix the lexicographical ordering of index
	  sets.  This affects the ordering of terms both in output and
	  internally in framed_multi<> when framed multivectors use map<>
	  rather than hash_map<>, ie. when _GLUCAT_USE_GNU_CXX_HASH_MAP is
	  not defined.

2007-09-09 17:50  leopardi

	* glucat/index_set.h: Add a new constructor,  index_set(range),
	  where range is a pair of index_t values.  This is intended to
	  replace the function index_range(), which is now deprecated and
	  will be removed from GluCat 0.4.0.  The new constructor is needed
	  because of differences between the current GNU and Intel
	  compilers.

2007-09-09 17:18  leopardi

	* configure.in, configure.in.in: Correctly obtain the version of
	  icpc versions 8 through 10 (and hopefully later versions)

2007-09-09 15:45  leopardi

	* AUTHORS: Update email address.  Fix references to framed_multi<>
	  and matrix_multi<>.  Add references for identities.

2007-09-09 15:43  leopardi

	* NEWS: Fix typos.

2007-09-09 15:41  leopardi

	* configure.in: Update to version 0.3.0.  New test directories:
	  ./products, ./test00.

2007-09-09 15:40  leopardi

	* Makefile.am, configure.in.end: New test directories: ./products,
	  ./test00

2007-09-09 15:39  leopardi

	* Doxyfile, INSTALL, NEWS, configure.in.in, glucat.lsm: Update to
	  version 0.3.0

2007-08-22 22:18  leopardi

	* ChangeLog: Update to version 0.2.3.

2007-08-22 22:09  leopardi

	* test_runtime/: gfft_test-10.out, squaring-8.out,
	  transforms-6.out: Remove old, redundant test results to avoid
	  confusion.

2007-08-22 22:06  leopardi

	* test_runtime/: gfft_test-11.out, squaring-11.out,
	  transforms-8.out: Test results for version 0.2.3.

2007-08-22 22:03  leopardi

	* test_runtime/test.out: Update to test results for version 0.2.3.

2007-08-22 22:01  leopardi

	* gfft_test/gfft_test.cpp, gfft_test/gfft_test.h,
	  glucat/clifford_algebra.h, glucat/errors.h, glucat/errors_imp.h,
	  glucat/framed_multi.h, glucat/generation.h, glucat/glucat.h,
	  glucat/glucat_imp.h, glucat/index_set.h, glucat/index_set_imp.h,
	  glucat/long_double.h, squaring/squaring.cpp, squaring/squaring.h,
	  test01/peg01.cpp, test01/peg01.h, test02/peg02.cpp,
	  test02/peg02.h, test03/peg03.cpp, test03/peg03.h,
	  test04/peg04.cpp, test04/peg04.h, test05/peg05.cpp,
	  test05/peg05.h, test06/peg06.cpp, test06/peg06.h,
	  test07/peg07.cpp, test07/peg07.h, test08/peg08.cpp,
	  test08/peg08.h, test09/peg09.cpp, test09/peg09.h,
	  test10/peg10.cpp, test10/peg10.h, test11/peg11.cpp,
	  test11/peg11.h, test12/peg12.cpp, test12/peg12.h, test/driver.h,
	  test/try_catch.h, test13/peg13.cpp, test13/peg13.h,
	  test14/peg14.cpp, test14/peg14.h, test15/peg15.cpp,
	  test15/peg15.h, test16/peg16.cpp, test16/peg16.h,
	  transforms/transforms.cpp, transforms/transforms.h: Relicense
	  under LGPLv3.

2007-08-22 21:58  leopardi

	* squaring/tuning.h: Relicense under LGPLv3.  Tweak test tuning
	  policies.  Try new tuning policies using new define
	  _GLUCAT_SQUARING_OPT.

2007-08-22 21:58  leopardi

	* glucat/scalar.h: Relicense under LGPLv3.  Move definition of
	  numeric_traits<> here.  Define smart isInf(), smart
	  isNaN_or_isInf() and NaN().

2007-08-22 21:57  leopardi

	* glucat/portability.h: Relicense under LGPLv3.  Disable Intel
	  warning "zero used for undefined preprocessing identifier"

2007-08-22 21:57  leopardi

	* glucat/matrix_multi_imp.h: Relicense under LGPLv3.  Correctly
	  initialize matrices.	Use ublas noalias assignment where
	  appropriate.	Improve the use of IEEE NaN.  Use IEEE Inf where
	  appropriate.	Use matrix::prod() in operator*=().  Use
	  ublas::axpy_prod() in operator/=().  Fix the pow() functions to
	  yield the correct powers of 0.  Use basis_matrix_t for generator
	  and basis matrices.

2007-08-22 21:57  leopardi

	* glucat/matrix_multi.h: Relicense under LGPLv3.  If
	  _GLUCAT_USE_DENSE_MATRICES is defined, matrix_multi<> uses a a
	  dense matrix.  Otherwise matrix_multi<> uses a compressed matrix
	  type.  Basis matrices always use a compressed matrix type.

2007-08-22 21:56  leopardi

	* glucat/matrix_imp.h: Relicense under LGPLv3.	For functions
	  kron(), nork(), inner(), allow LHS_T and RHS_T to differ.  New
	  function isnan() for matrices.  New function prod() for both
	  dense and compressed matrices.  Correctly initialize matrices.

2007-08-22 21:56  leopardi

	* glucat/matrix.h: Relicense under LGPLv3.  For functions kron(),
	  nork(), inner(), allow LHS_T and RHS_T to differ.  New function
	  isnan() for matrices.  New function prod() for both dense and
	  compressed matrices.

2007-08-22 21:55  leopardi

	* glucat/global.h: Relicense under LGPLv3.  Optimize default tuning
	  policy for both dense and compressed matrices.  Move definition
	  of numeric_traits<> to scalar.h.

2007-08-22 21:55  leopardi

	* glucat/generation_imp.h: Relicense under LGPLv3.  Remove
	  redundant initializations.  Use ublas noalias assignment where
	  appropriate.

2007-08-22 21:55  leopardi

	* glucat/framed_multi_imp.h: Relicense under LGPLv3.  Improve the
	  use of IEEE NaN.  Use IEEE Inf where appropriate.  Fix the pow()
	  functions to yield the correct powers of 0.  Use basis_matrix_t
	  for generators I, J, K, JK in fast().

2007-08-22 21:54  leopardi

	* glucat/clifford_algebra_imp.h: Relicense under LGPLv3.  Fix the
	  pow() functions to yield the correct powers of 0.  Improve the
	  use of IEEE NaN.  Use IEEE Inf where appropriate.

2007-08-22 21:53  leopardi

	* COPYING: Relicense under LGPLv3.

2007-08-22 21:53  leopardi

	* configure.in.in: Remove option --with-dense-mult controlling
	  _GLUCAT_USE_DENSE_MATRIX_MULT.  Add new option --with-dense-mat
	  controlling _GLUCAT_USE_DENSE_MATRICES.  For g++ 4.1 and later
	  use --param max-inline-insns-single=2700 instead of
	  -finline-limit=2400.	Update to version 0.2.3.

2007-08-22 21:52  leopardi

	* configure.in: This file is now redundant and will be removed from
	  CVS at a later date.

2007-08-22 21:50  leopardi

	* configure.in.end: New file: To use, cat configure.in.in
	  configure.in.end > configure.in

2007-08-22 21:48  leopardi

	* Doxyfile, INSTALL, glucat.kdevelop, glucat.lsm, NEWS, README,
	  TODO: Update to version 0.2.3.

2007-03-19 21:57  leopardi

	* glucat/framed_multi_imp.h: Fix fold() and unfold(). The test
	  which determines whether to short-circuit the function should
	  depend on the frame only and not on *this.

2007-03-19 21:55  leopardi

	* glucat/index_set_imp.h: Correct is_contiguous() so that it
	  matches the requirements of framed_multi<>::fold() and
	  framed_multi<>::unfold(). The set which is tested for contiguity
	  is *this with the index value 0 (notionally) added, so that
	  {1,2,3} is contiguous, but {2,3} is not.

2007-02-28 01:39  leopardi

	* ChangeLog: Update to version 0.2.2.

2007-02-28 01:33  leopardi

	* glucat/index_set_imp.h: Bit wizardry. Hand optimize various
	  functions.

2007-02-28 01:31  leopardi

	* glucat/long_double.h: Remove definition of abs for long double -
	  no longer needed.  Cosmetics.

2007-02-28 01:29  leopardi

	* glucat/portability.h: Cosmetics.

2007-02-28 01:29  leopardi

	* glucat/global.h: Define and use _GLUCAT_BITS_PER_ULONG.  Update
	  references to disambiguate Alexandrescu from Arndt.

2007-02-28 01:26  leopardi

	* glucat/glucat.h: Add #include <boost/cstdint.hpp> Move #include
	  <boost/limits.hpp> before #include "glucat/portability.h"

2007-02-28 01:21  leopardi

	* NEWS: Correct file name in latest NEWS item.

2007-02-28 01:19  leopardi

	* glucat/clifford_algebra_imp.h: Fix comments for Doxygen.

2007-02-28 01:18  leopardi

	* test_runtime/: gfft_test-10.out, squaring-8.out,
	  transforms-6.out: Update test results to match GluCat 0.2.2.

2007-02-28 01:18  leopardi

	* TODO: Add new things to do after GluCat 0.2.2, such as splitting
	  matrix_t into basis_matrix_t and matrix_t.

2007-02-28 01:16  leopardi

	* AUTHORS, Doxyfile, configure.in, configure.in.in,
	  glucat.kdevelop, glucat.lsm, INSTALL, NEWS: Update to version
	  0.2.2.

2007-01-14 20:43  leopardi

	* ChangeLog: Update to GluCat version 0.2.1.

2007-01-14 20:34  leopardi

	* glucat/portability.h: Disable 593 "variable was set but never
	  used".  Drop ISNAN macro -- never used.  Update copyright notice.
	  Drop old email address.

2007-01-14 20:34  leopardi

	* glucat/matrix_multi_imp.h: In operator= drop call to resize() --
	  it was redundant.  Make operator*= faster: In operator*=
	  recursively call *= to "represent rhs in our_frame via conversion
	  through framed_multi_t".  In operator*= use dense ublas::prod
	  based on _GLUCAT_USE_DENSE_MATRIX_MULT but only if both *this and
	  rhs are both "dense enough" -- defined as nnz is at least half
	  the number of entries in the matrix.	Make fast() faster: In
	  fast() define I_x, j_x, k_x, jk_x to be Scalar_T when possible.
	  In fast() use framed_multi_t operator+= with term_t. and use
	  framed_multi_t operator+= with framed_multi_t.  Cosmetic: Prefer
	  T a = T(..) form of non-default construction; the form T a(..) is
	  sometimes confused with a function declaration.  Prefer const
	  index_set_t to const index_set_t& - ie. pass index_set_t by value
	  rather than reference.  Prefer const matrix_t& to const matrix_t,
	  ie. use const references for constant matrices.  Cosmetic: In
	  constructors which use the constant frame parameter frm, prefer
	  using this parameter to using m_frame.  Cosmetic: Rename pair_t
	  to term_t.  Cosmetic: Prefer Scalar_T to scalar_t.  Cosmetic:
	  Prefer Scalar_T(1) to 1 etc., where applicable.  Cosmetic: Use
	  this-> more consistently.  Update copyright notice.  Drop old
	  email address.

2007-01-14 20:33  leopardi

	* glucat/matrix_multi.h: Give "Construct a multivector from an
	  index set and a scalar coordinate" a default value of Scalar_T(1)
	  for the coordinate.  Define the type dense_matrix_t to use for
	  dense matrices.  Rename pair_t to term_t.  Prefer const
	  index_set_t to const index_set_t& - ie. pass index_set_t by value
	  rather than reference.  Update copyright notice.  Drop old email
	  address.

2007-01-14 20:33  leopardi

	* glucat/matrix_imp.h: Make nork faster: iterate over sparse
	  rhs_range rather than scaling and adding whole range.  Make kron
	  and inner match naming conventions used by nork.  Prefer const
	  Scalar_T& to const Scalar_T, ie. use const references for
	  constant scalars.  Cosmetic: Prefer T a = T(..) form of
	  non-default construction; the form T a(..) is sometimes confused
	  with a function declaration.	Cosmetic: Prefer Scalar_T to
	  scalar_t.  Cosmetic: Prefer Scalar_T(-1) to Scalar_T(-1.0) etc.
	  Cosmetic: In nork, using "ublas::range" rather than "using
	  namespace ublas".  Update copyright notice.  Drop old email
	  address.

2007-01-14 20:33  leopardi

	* glucat/index_set_imp.h: Add bool member function is_contiguous
	  ("Determine if the index set is contiguous, ie. has no gaps").
	  Use more efficient form of construcor from bitset_t.	Update
	  copyright notice.  Drop old email address.  Cosmetics.

2007-01-14 20:33  leopardi

	* glucat/index_set.h: Add bool member function is_contiguous
	  ("Determine if the index set is contiguous, ie. has no gaps").
	  Update copyright notice.  Drop old email address.

2007-01-14 20:32  leopardi

	* glucat/generation_imp.h: Drop calls to resize() -- these were
	  redundant.  Cosmetic: Prefer T a = T(..) form of non-default
	  construction; the form T a(..) is sometimes confused with a
	  function declaration.  Update copyright notice.  Drop old email
	  address.

2007-01-14 20:32  leopardi

	* glucat/framed_multi_imp.h: "Construct a multivector from an index
	  set and a scalar coordinate" now has a default value of
	  Scalar_T(1) for the coordinate.  Cosmetic: Rename pair_t to
	  term_t.  Make var_pair_t into the nested class var_term_t,
	  including operator*= which multiplies by a term_t.  Delete
	  operator* for var_pair_t.  Make operator*= faster: use direct
	  multiply whenever product is sparse and hash_map is being used;
	  use this->clear() in array mult; In operator*= rename array_size
	  to algebra_dim and rename result_pair to result_term.  Make
	  operator== ("Test for equality of multivector and scalar")
	  faster: Switch on this->size() and avoid calling this->frame().
	  Make fold and unfold faster: test if frame is contiguous and
	  return *this if it is.  Make centre_pm4_qp4, centre_pp4_qm4,
	  centre_qp1_pm1 faster: use var_pair_t, operator*=, and const
	  references.  Make fast_matrix_multi faster: use bott_offset
	  rather than bott, use a constructor rather than a variable to
	  return result.  In fast_matrix_multi, use correct function name
	  in error messages.  Prefer const index_set_t to const
	  index_set_t& - ie. pass index_set_t by value rather than
	  reference.  Prefer const Scalar_T& to const Scalar_T, ie. use
	  const references for constant scalars.  Prefer const matrix_t& to
	  const matrix_t, ie. use const references for constant matrices.
	  Prefer index_t to int where applicable.  Rely on default
	  contruction of multivector_t as 0, where applicable.	Prefer
	  const const_iterator& to const_iterator where applicable.  Use a
	  more efficient form of constructor for sorted_range.	Cosmetic:
	  Prefer T a = T(..) form of non-default construction; the form T
	  a(..) is sometimes confused with a function declaration.
	  Cosmetic: Prefer Scalar_T(-1) to Scalar_T(-1.0) etc.	Cosmetic:
	  Prefer Scalar_T(1) to 1 etc., where applicable.  Cosmetic: Use
	  Map_T and Sorted_Map_T as template parameter names.  Cosmetic:
	  Use this-> more consistently.  Update copyright notice.  Drop old
	  email address.  Cosmetics.

2007-01-14 20:32  leopardi

	* glucat/framed_multi.h: Give "Construct a multivector from an
	  index set and a scalar coordinate" a default value of Scalar_T(1)
	  for the coordinate.  Cosmetic: Rename pair_t to term_t.  Make
	  var_pair_t into the nested class var_term_t, including operator*=
	  which multiplies by a term_t.  Delete operator* for var_pair_t.
	  Define size_type.  Make operator+= ("Add a term, if non-zero")
	  public rather than private, to allow fast() in matrix_multi_imp.h
	  to use this operator.  Prefer const index_set_t to const
	  index_set_t& - ie. pass index_set_t by value rather than
	  reference.  Update copyright notice.	Drop old email address.

2007-01-14 20:31  leopardi

	* glucat/clifford_algebra_imp.h: Prefer const Scalar_T& to const
	  Scalar_T, ie. use const references for scalars.  Update copyright
	  notice.  Drop old email address.

2007-01-14 20:31  leopardi

	* glucat/clifford_algebra.h: Prefer const index_set_t to const
	  index_set_t& - ie. pass index_set_t by value rather than
	  reference.  Update copyright notice.	Drop old email address.

2007-01-14 20:30  leopardi

	* gfft_test/gfft_test.cpp, glucat/errors.h, glucat/errors_imp.h,
	  glucat/generation.h, glucat/global.h, glucat/glucat.h,
	  glucat/glucat_imp.h, glucat/long_double.h, glucat/matrix.h,
	  glucat/scalar.h, squaring/squaring.cpp, squaring/tuning.h,
	  test01/peg01.cpp, test01/peg01.h, test02/peg02.cpp,
	  test02/peg02.h, test03/peg03.cpp, test03/peg03.h,
	  test04/peg04.cpp, test05/peg05.cpp, test05/peg05.h,
	  test06/peg06.cpp, test06/peg06.h, test07/peg07.cpp,
	  test08/peg08.cpp, test08/peg08.h, test09/peg09.cpp,
	  test09/peg09.h, test10/peg10.cpp, test10/peg10.h,
	  test11/peg11.cpp, test11/peg11.h, test12/peg12.cpp,
	  test12/peg12.h, test13/peg13.cpp, test13/peg13.h,
	  test14/peg14.cpp, test14/peg14.h, test15/peg15.cpp,
	  test15/peg15.h, test/driver.h, test/try_catch.h,
	  test16/peg16.cpp, test16/peg16.h, transforms/transforms.cpp,
	  transforms/transforms.h: Update copyright notice.  Drop old email
	  address.

2007-01-14 20:29  leopardi

	* test07/peg07.h: Correct write statement to read "u*x*reverse(u) |
	  u*y*reverse(u) =".  Update copyright notice.	Drop old email
	  address.

2007-01-14 20:28  leopardi

	* test04/peg04.h: Move declaration of F into block to prevent
	  shadowing.  Update copyright notice.	Drop old email address.

2007-01-14 20:28  leopardi

	* squaring/squaring.h: Use only one cpu_time variable to prevent
	  shadowing.  Update copyright notice.	Drop old email address.

2007-01-14 20:27  leopardi

	* gfft_test/gfft_test.h: Test GFFT with frames which are not
	  contiguous.

2007-01-14 20:26  leopardi

	* test_runtime/: gfft_test-10.out, squaring-8.out, test.out,
	  transforms-6.out: Update to GluCat 0.2.1.

2007-01-14 20:25  leopardi

	* Makefile.am: Remove glucat.kdevelop from EXTRA_DIST.

2007-01-14 20:24  leopardi

	* NEWS, TODO, glucat.kdevelop, glucat.lsm: Update to GluCat version
	  0.2.1.

2007-01-14 20:24  leopardi

	* INSTALL, README: Update to GluCat version 0.2.1.  Describe
	  --with-dense-mult and _GLUCAT_USE_DENSE_MATRIX_MULT.

2007-01-14 20:23  leopardi

	* Doxyfile: Update to GluCat version 0.2.1.  Clean up paths.

2007-01-14 20:22  leopardi

	* configure.in, configure.in.in: Extensive changes: Update to
	  GluCat version 0.2.1.  Quote names used in AC_DEFUN.	Add
	  optional argument --with-dense-mult corresponding to variable
	  glucat_use_dense_matrix_mult.  Use variable
	  glucat_use_dense_matrix_mult to decide when to add
	  -D_GLUCAT_USE_DENSE_MATRIX_MULT to CXXFLAGS.	Drop support for
	  KAI C++. GluCat was never tested with KAI C++, and Intel has
	  effectively replaced it with Intel C++.  Change preferred name
	  for Intel C++ from "icc" to "icpc" as per Intel documentation.
	  Check Intel C++ version and store it in icpcversion.	When
	  icpcversion is between "8" and "9" use -fabi-version=1 rather
	  than -fabi-version=0.  Use AC_CONFIG_HEADERS rather than obsolete
	  AM_CONFIG_HEADER.  Change name of GLUCAT_PROG_LIBTOOL to
	  AC_GLUCAT_PROG_LIBTOOL.  Move AC_PROG_PP after test for
	  kde_use_debug_code.  Remove -I/usr/local/include from CXXFLAGS.
	  GluCat configure has never checked if this include helped.
	  Change references to $GCC to $GXX in tests which affect CXXFLAGS.
	  Clean up lines which were commented out.

2007-01-14 20:22  leopardi

	* aclocal.m4: (auto generated file) Remove reference to
	  AM_CONFIG_HEADER.

2007-01-14 20:21  leopardi

	* acinclude.m4: Quote names used in AC_DEFUN.

2006-12-06 02:28  leopardi

	* ChangeLog: Update to GluCat 0.2.0.

2006-12-06 02:22  leopardi

	* test01/peg01.cpp, test02/peg02.cpp, test03/peg03.cpp,
	  test04/peg04.cpp, test05/peg05.cpp, test06/peg06.cpp,
	  test07/peg07.cpp, test08/peg08.cpp, test09/peg09.cpp,
	  test10/peg10.cpp, test12/peg12.cpp, test13/peg13.cpp,
	  test15/peg15.cpp, test16/peg16.cpp: Move test function from
	  header file to source file.

2006-12-06 02:19  leopardi

	* transforms/transforms.h: Move test function from header to source
	  file.  Define template functions as static.  Use streamsize.	Use
	  cout.precision().

2006-12-06 02:19  leopardi

	* transforms/transforms.cpp: Move test function from header to
	  source file.

2006-12-06 02:18  leopardi

	* test_runtime/: gfft_test-10.out, squaring-8.out, test.out,
	  transforms-6.out: Update test results.

2006-12-06 02:17  leopardi

	* test11/peg11.cpp: Move test function from header to source file.
	  Force NDEBUG to be defined, to turn off spurious checking in
	  uBLAS sparse_prod().

2006-12-06 02:17  leopardi

	* test01/peg01.h, test02/peg02.h, test03/peg03.h, test04/peg04.h,
	  test05/peg05.h, test06/peg06.h, test07/peg07.h, test08/peg08.h,
	  test09/peg09.h, test10/peg10.h, test11/peg11.h, test12/peg12.h,
	  test13/peg13.h, test14/peg14.h, test15/peg15.h, test16/peg16.h:
	  Move test function from header to source file.  Define template
	  functions as static.

2006-12-06 02:16  leopardi

	* test14/peg14.cpp: Move test function from header file to source
	  file.

2006-12-06 02:14  leopardi

	* test/try_catch.h: Define function prototypes.

2006-12-06 02:14  leopardi

	* squaring/squaring.h: Move test function from header to source
	  file.  Define template functions as static.  Define and use const
	  RAND_SCALE.  Use streamsize.

2006-12-06 02:14  leopardi

	* squaring/squaring.cpp: Move test function from header to source
	  file.

2006-12-06 02:14  leopardi

	* glucat/scalar.h: Add Doxygen description of log2().  Do not use
	  const for results of functions which return a scalar.

2006-12-06 02:13  leopardi

	* glucat/portability.h: Remove workarounds for old compilers.
	  Suppress spurious Intel compiler warnings.  Define ISNAN(x) macro
	  which uses isnan(x) macro if available, and otherwise uses
	  std:isnan(x).

2006-12-06 02:13  leopardi

	* glucat/matrix_multi_imp.h: Use index_t for bott.  Define template
	  functions as static if they are intended to be used only within
	  the header file.  In calls to resize, use third parameter set to
	  false.  Use std::numeric_limits<Scalar_T>::has_quiet_NaN and
	  numeric_traits<Scalar_T>::isNaN().  Use index_t for variables p,
	  q, orig_p, orig_q, old_p.  Use explicit casts to index_t.
	  Cosmetics.

2006-12-06 02:13  leopardi

	* glucat/matrix_multi.h: Do not use friend_maker.  Define
	  numeric_limits< glucat::matrix_multi<Scalar_T,LO,HI> >.
	  Cosmetics.

2006-12-06 02:12  leopardi

	* glucat/matrix_imp.h: Do not use const for results of functions
	  which return a scalar.

2006-12-06 02:12  leopardi

	* glucat/matrix.h: Do not use const for results of functions which
	  return a scalar.  Cosmetics.

2006-12-06 02:12  leopardi

	* glucat/long_double.h: Cosmetics.

2006-12-06 02:11  leopardi

	* glucat/index_set_imp.h: Pass bitset_t, index_t, index_set_t and
	  set_value_t by value.  Consistently use index_set_t rather than
	  index_set.  Use const parameters where appropriate.  Use explicit
	  casts to index_t.  Cosmetics.

2006-12-06 02:11  leopardi

	* glucat/index_set.h: Pass bitset_t, index_t, index_set_t and
	  set_value_t by value.  Consistently use index_set_t rather than
	  index_set.  Use const parameters where appropriate.

2006-12-06 02:11  leopardi

	* glucat/glucat_imp.h: Move ublas includes from glucat/glucat.h.

2006-12-06 02:10  leopardi

	* glucat/glucat.h: Include <boost/config.hpp>.	Include <cmath>
	  rather than <math.h> Move includes for glucat/long_double.h and
	  glucat/scalar.h closer to the start.	Move ublas includes to
	  glucat/glucat_imp.h and replace with include for
	  <boost/numeric/ublas/fwd.hpp>.

2006-12-06 02:10  leopardi

	* glucat/global.h: Use glucat::CTAssertion<(expr)> instead of
	  CTAssertion<(expr)>.	Define template class bool_to_type<>.
	  Define template class numeric_traits<T>, including function
	  isNaN().  Define type index_t to be int rather than short.
	  Cosmetics.

2006-12-06 02:09  leopardi

	* glucat/generation_imp.h: Use index_t for offset_to_super[].  In
	  calls to resize, use third parameter set to false.

2006-12-06 02:08  leopardi

	* glucat/generation.h: Use index_t for offset_to_super[].

2006-12-06 02:08  leopardi

	* glucat/framed_multi_imp.h: In operator<<(), use isnan() and
	  std::numeric_limits<Scalar_T>::quiet_NaN().  In isnan(), use
	  std::numeric_limits<Scalar_T>::has_quiet_NaN and
	  numeric_traits<Scalar_T>::isNaN().  In operator>>(), use int c to
	  hold the result of s.peek().	In truncated(), use isnan().  In
	  centre_pm4_qp4(), centre_pp4_qm4(), centre_qp1_pm1(), use index_t
	  for arguments p and q.  Consistently use Scalar_T rather than
	  scalar_t.  Cosmetics.

2006-12-06 02:08  leopardi

	* glucat/framed_multi.h: Do not use friend_maker.  In
	  centre_pm4_qp4(), centre_pp4_qm4(), centre_qp1_pm1(), use index_t
	  for arguments p and q.  Tidy use of _GLUCAT_USE_GNU_CXX_HASH_MAP.
	  Define numeric_limits< glucat::framed_multi<Scalar_T,LO,HI> >.
	  Cosmetics.

2006-12-06 02:07  leopardi

	* glucat/clifford_algebra_imp.h: Define template functions as
	  static if they are intended to be used only within the header
	  file.

2006-12-06 02:07  leopardi

	* glucat/clifford_algebra.h: Cosmetics.

2006-12-06 02:06  leopardi

	* gfft_test/gfft_test.h: Move test function from header to source
	  file.  Define template functions as static.  Use
	  std::numeric_limits<int>.  Use streamsize.

2006-12-06 02:06  leopardi

	* gfft_test/gfft_test.cpp: Move test function from header to source
	  file.

2006-12-06 02:05  leopardi

	* gfft_test/Makefile.in, squaring/Makefile.in, test01/Makefile.in,
	  test02/Makefile.in, test03/Makefile.in, test04/Makefile.in,
	  test05/Makefile.in, test06/Makefile.in, test07/Makefile.in,
	  test08/Makefile.in, test09/Makefile.in, test10/Makefile.in,
	  test11/Makefile.in, test/Makefile.in, test12/Makefile.in,
	  test13/Makefile.in, test14/Makefile.in, test15/Makefile.in,
	  test16/Makefile.in, transforms/Makefile.in: Update to automake
	  1.9.6.

2006-12-06 02:04  leopardi

	* glucat.lsm: Update to GluCat 0.2.0.  Update author contact.

2006-12-06 02:03  leopardi

	* glucat.kdevelop: Update to GluCat 0.2.0.  Update author contact.
	  Set main program to gfft_test/gfft_test.

2006-12-06 02:02  leopardi

	* aclocal.m4: Update to aclocal 1.9.6, automake 1.9.6.

2006-12-06 02:01  leopardi

	* INSTALL, NEWS, README, TODO, configure.in, configure.in.in:
	  Update to GluCat 0.2.0.

2006-12-06 02:00  leopardi

	* Doxyfile: Update to GluCat 0.2.0.  Use source browser.  Generate
	  LaTeX.

2005-08-31 08:24  leopardi

	* ChangeLog: Re-add changes logged prior to the use of CVS.

2005-08-31 08:16  leopardi

	* ChangeLog: Log changes for version 0.1.9.

2005-08-31 08:14  leopardi

	* glucat/ublas_imp.h: Ensure this file is removed.

2005-08-31 00:50  leopardi

	* README: Remove references to	_GLUCAT_HAS_UBLAS_LU_H

2005-08-31 00:34  leopardi

	* NEWS: News for version 0.1.9.

2005-08-31 00:27  leopardi

	* INSTALL: Bring instructions up to date with changes to g++ and
	  Boost.

2005-08-30 22:20  leopardi

	* glucat/ublas.h: Ensure this file has been removed.

2005-08-30 22:18  leopardi

	* config.h.in: Remove reference to HAVE_BOOST_NUMERIC_UBLAS_LU_HPP

2005-08-30 22:15  leopardi

	* configure.in, configure.in.in: Only use -fno-strict-aliasing with
	  g++ 4.0.0 and g++ 4.0.1. Gcc bug 23599 has apparently been fixed
	  for g++ 4.0.2.  Remove tests for and references to
	  _GLUCAT_HAVE_UBLAS_LU_H

2005-08-30 22:10  leopardi

	* glucat/glucat_imp.h: Remove reference to ublas_imp.h

2005-08-30 22:10  leopardi

	* glucat/glucat.h: Remove references to ublas.h and
	  _GLUCAT_HAVE_UBLAS_LU_H

2005-08-28 22:41  leopardi

	* test_runtime/: gfft_test-10.out, squaring-8.out, test.out,
	  transforms-6.out: Update tests using g++ 3.3.5 and Boost 1.31.0.

2005-08-28 22:36  leopardi

	* Makefile.am: Update to current KDevelop.

2005-08-28 22:35  leopardi

	* glucat.lsm: Update to version 0.1.9.

2005-08-28 22:35  leopardi

	* glucat.kdevelop: Update to version 0.1.9.  Update to current
	  KDevelop.

2005-08-28 22:34  leopardi

	* Doxyfile: Fix project name to read "glucat".	Fix
	  STRIP_FROM_PATH.  Update to version 0.1.9.

2005-08-28 22:31  leopardi

	* configure.in, configure.in.in: Use -fno-strict-aliasing with g++
	  4.0.X.  Use Wstrict-aliasing=2 with g++ 4.X.	Update to version
	  0.1.9.

2005-08-28 22:26  leopardi

	* test02/Makefile.in, test03/Makefile.in, test04/Makefile.in,
	  test05/Makefile.in, test06/Makefile.in, test07/Makefile.in,
	  test08/Makefile.in, test09/Makefile.in, test10/Makefile.in,
	  test11/Makefile.in, test12/Makefile.in, test13/Makefile.in,
	  test14/Makefile.in, test15/Makefile.in, aclocal.m4,
	  test16/Makefile.in, transforms/Makefile.in,
	  gfft_test/Makefile.in, squaring/Makefile.in, test/Makefile.in,
	  test01/Makefile.in: Use new version of automake (1.9.5).

2005-08-28 22:23  leopardi

	* test16/peg16.cpp: Add #include required for Boost 1.33.0.

2005-08-28 22:22  leopardi

	* glucat/framed_multi_imp.h: In constructor from matrix_multi,
	  invoke basis_element() as a member function of matrix_multi, and
	  remove unnecessary <Scalar_T> qualifier.  In operator==(), use
	  the name this_it consistently.  In operator*=(), do not assume
	  that stv gives an index_set within our_frame.  In operator>>(),
	  define multivector_t and pair_t, and add terms by using pair_t
	  rather than multivector_t.  Make frame(), fold() and unfold()
	  into inline functions.  Cosmetic changes.

2005-08-28 21:58  leopardi

	* glucat/framed_multi.h: Use private rather than public / private
	  workaround.  Cosmetic changes.

2005-08-28 21:56  leopardi

	* glucat/clifford_algebra.h: Make some comments visible to Doxygen.

2005-08-28 21:56  leopardi

	* glucat/matrix_multi_imp.h: Interface changes: Make
	  basis_element() into a private member function of matrix_multi,
	  remove the parameter m_frame and replace with this->m_frame.	Add
	  the template parameter Matrix_T to basis_table.  Implementation
	  changes.  In constructor from matrix_multi, remove the
	  unnecessary call to resize.  In operator==(), since Boost 1.33.0
	  no longer defines ublas::equals, use iterators to compare
	  matrices.  In operator+=(), if neither this nor rhs has same
	  frame as the common frame, then do the addition using
	  framed_multi.  Similarly for operator-=().  In operator[](),
	  vector_part() and operator+=(const pair_t&), remove the
	  unnecessary <Scalar_T> qualifier from basis_element().

2005-08-28 21:55  leopardi

	* glucat/matrix_multi.h: Make basis_element() into a private member
	  function of matrix_multi, remove the parameter m_frame and
	  replace with this->m_frame.  Cosmetic changes.

2005-08-28 21:30  leopardi

	* glucat/index_set_imp.h: In hash_fn(), change the definition of
	  lo_mask to match the shift given to pos_part.

2005-08-28 21:26  leopardi

	* glucat/matrix_multi.h: Rearrange declarations to avoid problems
	  with public / private.

2005-08-28 21:23  leopardi

	* glucat/portability.h: Remove incorrect workaround for public /
	  private with different compiler versions.  Restrict workaround
	  for g++ 3.2 typename bug to g++ 3.X only.

2005-08-28 21:20  leopardi

	* glucat/glucat.h: Add #includes for compatibility with Boost
	  1.33.0.

2005-08-28 21:15  leopardi

	* glucat/generation_imp.h: In generator_table<Matrix_T>::operator()
	  delete superfluous break statements from switch: these gave
	  warning messages in g++ 4.XX.

2005-07-17 18:23  leopardi

	* config.h.in: Re-add forgotten file

2004-08-11 00:04  leopardi

	* ChangeLog: Changes for GluCat 0.1.8

2004-08-11 00:03  leopardi

	* NEWS: Reflect chage in inlining

2004-08-11 00:03  leopardi

	* configure.in, configure.in.in: For g++ versions before 3.3 use an
	  inline limit of 1200 rather than 2400

2004-08-09 22:59  leopardi

	* ChangeLog: Changes for GluCat 0.1.8

2004-08-09 22:59  leopardi

	* NEWS: Reflect recent changes

2004-08-09 22:55  leopardi

	* configure.in, configure.in.in: Check for g++ version.  Do nothing
	  with version for now

2004-08-09 22:54  leopardi

	* test_runtime/: gfft_test-10.out, squaring-8.out,
	  transforms-6.out: Bring test results up to date

2004-08-09 22:54  leopardi

	* glucat/index_set_imp.h: Revert changes to operator==, operator!=.
	  Streamline sign_of_mult

2004-08-09 22:52  leopardi

	* glucat/framed_multi_imp.h: Small speedup in geometric product

2004-08-06 22:56  leopardi

	* glucat/index_set_imp.h: Minor optimizations to sign_of_mult().
	  Clean up some constructors, operator==, operator!=

2004-08-02 07:45  leopardi

	* test_runtime/: gfft_test-10.out, squaring-8.out,
	  transforms-6.out: Update timing test results to reflect changes

2004-08-02 07:04  leopardi

	* ChangeLog: Changes for GluCat 0.1.8

2004-08-02 07:03  leopardi

	* NEWS: Remove news of reverted changes

2004-08-01 22:24  leopardi

	* configure.in, configure.in.in: Change -finline-limit back to
	  2400. The value 3000 was too high for g++ 3.2 on Red Hat.

2004-08-01 22:23  leopardi

	* glucat/matrix_multi_imp.h: Revert changes to operator+= and
	  operator-=

2004-08-01 12:15  leopardi

	* ChangeLog: Changes for GluCat 0.1.8

2004-08-01 12:13  leopardi

	* test_runtime/: gfft_test-10.out, squaring-8.out,
	  transforms-6.out: Update timing test output to reflect change to
	  constructor for matrix_multi<>

2004-08-01 12:11  leopardi

	* configure.in, configure.in.in: Update to GluCat version 0.1.8

2004-07-31 20:41  leopardi

	* ChangeLog: Changes for GluCat 0.1.8

2004-07-31 20:40  leopardi

	* glucat/matrix_multi_imp.h: Use resize() in constructor to ensure
	  that matrix has correct size

2004-07-31 18:15  leopardi

	* NEWS: News items for GluCat 0.1.8

2004-07-31 18:15  leopardi

	* test_runtime/: gfft_test-10.out, squaring-6.out, squaring-8.out,
	  test.out, transforms-6.out: Test output for GluCat 0.1.8

2004-07-31 18:13  leopardi

	* glucat/matrix_multi_imp.h: The subscripting operator [] for
	  matrix_multi<> now works properly for index sets not contained in
	  m_frame.  Minor speed improvements for some constructors and for
	  the operators += and -=

2004-07-31 18:12  leopardi

	* glucat/index_set_imp.h: The stream input operator >> now works
	  properly with strings of the form "1,2" as well as "{1,2}".

2004-07-31 18:07  leopardi

	* glucat/framed_multi_imp.h: Minor speed improvement in left
	  contraction

2004-07-31 18:06  leopardi

	* gfft_test/gfft_test.h, glucat/errors.h, glucat/errors_imp.h,
	  squaring/squaring.h, test/Makefile.am, test/Makefile.in,
	  test/driver.h, test/try_catch.h, transforms/transforms.h: Move
	  the try_catch functions from glucat/errors.h and
	  glucat/errors_imp.h to the new file test/try_catch.h

2004-07-31 18:04  leopardi

	* configure.in, configure.in.in: Inline more agressively

2004-07-31 18:03  leopardi

	* Doxyfile, glucat.kdevelop, glucat.lsm: GluCat version 0.1.8

2004-06-20 19:58  leopardi

	* ChangeLog: Update for version 1.7 continued

2004-06-20 19:58  leopardi

	* glucat.kdevelop: Cosmetic changes resulting form quitting
	  kdevelop

2004-06-20 19:57  leopardi

	* INSTALL: Update list of tested systems

2004-06-20 19:55  leopardi

	* README: Move Dependencies section to INSTALL

2004-06-20 19:16  leopardi

	* ChangeLog: Update for version 0.1.7

2004-06-20 19:09  leopardi

	* README: New URL for John Fletcher

2004-06-20 19:08  leopardi

	* test11/Makefile.in: Update autotools to 1.8.3

2004-06-20 19:04  leopardi

	* configure.in, configure.in.in: Use AC_CHECK_HEADERS to check
	  headers

2004-06-20 19:03  leopardi

	* gfft_test/Makefile.in, squaring/Makefile.in, test/Makefile.in,
	  test01/Makefile.in, test02/Makefile.in, test03/Makefile.in,
	  test04/Makefile.in, test05/Makefile.in, test06/Makefile.in,
	  test07/Makefile.in, aclocal.m4, test08/Makefile.in,
	  test09/Makefile.in, test10/Makefile.in, test12/Makefile.in,
	  test13/Makefile.in, test14/Makefile.in, test15/Makefile.in,
	  test16/Makefile.in, transforms/Makefile.in: Update autotools to
	  version 1.8.3

2004-06-20 18:59  leopardi

	* NEWS: News for version 0.1.7

2004-06-20 18:58  leopardi

	* Doxyfile, glucat.kdevelop, glucat.lsm: Update to version 0.1.7

2004-05-10 21:28  leopardi

	* glucat/: framed_multi.h, matrix_multi.h, portability.h: Use
	  _GLUCAT_USE_STRUCT_NAME to work around bug in g++ 3.2

2004-05-10 21:27  leopardi

	* ChangeLog: Update using cvs2cl

2004-05-10 21:26  leopardi

	* glucat.kdevelop: Keep kdevelop3 project file up to date.

2004-05-10 21:24  leopardi

	* INSTALL, NEWS, README: GluCat 0.1.6 now compiles under g++ 3.4.
	  Update files to reflect this, update list of tested
	  configurations.

2004-05-09 11:00  leopardi

	* configure.in, configure.in.in: Use more agressive inlining when
	  optimizing. Change inline limit from 1600 to 2400.

2004-05-09 10:09  leopardi

	* TODO: Compilation with g++ 3.4 has been fixed.

2004-05-09 10:06  leopardi

	* glucat/matrix_multi_imp.h: In operator<<(), insert keyword
	  typename where g++ 3.4.0 requires it.  For function
	  fast_framed_multi(), ensure function definition matches function
	  declaration in the exact way that g++ 3.4.0 requires these to
	  match.

2004-05-09 10:04  leopardi

	* glucat/framed_multi_imp.h: For functions fast() and
	  fast_matrix_multi(), ensure function definition headers match
	  function declarations in the exact way that g++ 3.4.0 requires
	  these to match.

2004-05-09 09:56  leopardi

	* glucat/: framed_multi.h, matrix_multi.h: Correct declarations of
	  framed_multi<> and matrix_multi<> to allow compilation with g++
	  3.4.0.

2004-05-09 09:54  leopardi

	* configure.in, configure.in.in: Delete line containing
	  "mcmodel=medium".

2004-05-09 09:52  leopardi

	* Doxyfile, glucat.kdevelop, glucat.lsm: Update version to 0.1.6.

2004-05-09 09:39  leopardi

	* glucat.kdevelop, glucat.kdevprj: Use kdevelop3 to control
	  Doxygen.

2004-05-05 23:35  leopardi

	* ChangeLog: Update using cvs2cl

2004-05-05 23:33  leopardi

	* squaring/Makefile.am, squaring/Makefile.in, test/Makefile.am,
	  test/Makefile.in: Correct EXTRA_DIST

2004-05-05 23:32  leopardi

	* configure.in, configure.in.in: Do not use -mcmodel=medium.  Fix
	  typo in comment

2004-05-05 22:53  leopardi

	* ChangeLog: Update using cvs2cl

2004-05-05 22:52  leopardi

	* INSTALL, NEWS, README, TODO: Update testing and compilation
	  status to reflect that g++ 3.3.3 works and g++ 3.4 does not work.

2004-04-18 18:39  leopardi

	* ChangeLog: Update using cvs2cl

2004-04-18 18:38  leopardi

	* AUTHORS: Add tester. Add URL for BoostCliffordDiscussion.

2004-04-18 18:16  leopardi

	* configure.in, configure.in.in: Move KDE_CHECK_EXTRA_LIBS earlier.
	  This allows $USER_INCLUDES to be used when searching for
	  <boost/numeric/ublas/lu.hpp> so that configure will find it even
	  if Boost headers are in a non-standard place, as long as the user
	  has used --with-extra-includes.

2004-04-18 18:08  leopardi

	* gfft_test/Makefile.am, gfft_test/Makefile.in,
	  squaring/Makefile.am, squaring/Makefile.in, test01/Makefile.am,
	  test01/Makefile.in, test02/Makefile.am, test02/Makefile.in,
	  test03/Makefile.am, test03/Makefile.in, test04/Makefile.am,
	  test04/Makefile.in, test05/Makefile.am, test05/Makefile.in,
	  test06/Makefile.am, test06/Makefile.in, test07/Makefile.am,
	  test07/Makefile.in, test08/Makefile.am, test08/Makefile.in,
	  test09/Makefile.am, test09/Makefile.in, test10/Makefile.am,
	  test10/Makefile.in, test11/Makefile.am, test11/Makefile.in,
	  test12/Makefile.am, test12/Makefile.in, test13/Makefile.am,
	  test13/Makefile.in, test14/Makefile.am, test14/Makefile.in,
	  test15/Makefile.am, test15/Makefile.in, test16/Makefile.am,
	  test16/Makefile.in, transforms/Makefile.am,
	  transforms/Makefile.in: Define INCLUDES as $(all_includes) This
	  causes $(all_includes) to be passed correctly to the compiler
	  command line.

2004-04-15 09:38  leopardi

	* ChangeLog: Update using cvs2cl

2004-04-15 08:44  leopardi

	* glucat/framed_multi_imp.h: Add odd(): Odd part of multivector.
	  In operator==(), check if map is sorted and use appropriate
	  algorithm.  In operator*=(), use double() to check array sizes.
	  In operator()(), even(), odd() and vector_part(), use algorithm
	  for unsorted map.  Use sorted_range<> as a helper for
	  operator<<(), so that it works with both sorted and unsorted
	  maps.  Tidy up fast().  Use odd() to make fast_matrix_multi()
	  faster.  Make iterator names consistent.  Make for loops
	  consistently tidy.

2004-04-15 08:32  leopardi

	* glucat/framed_multi.h: Make hash_map<> an optional base for
	  framed_multi<>, depending on _GLUCAT_USE_GNU_CXX_HASH_MAP.
	  Change misleading parameter name in fast().

2004-04-15 08:29  leopardi

	* glucat/glucat.h: Include <ext/hash_map> depending on
	  _GLUCAT_USE_GNU_CXX_HASH_MAP.  Include
	  <boost/numeric/ublas/operation.hpp> before
	  <boost/numeric/ublas/lu.hpp>.

2004-04-15 08:26  leopardi

	* glucat/global.h: Add compare_types<> for type comparison.  Change
	  tuning parameters to unsigned int.  Change default tuning
	  parameter values.

2004-04-15 08:14  leopardi

	* glucat/clifford_algebra_imp.h: Add odd(): Odd part of
	  multivector.	Make for loops consistently tidy.

2004-04-15 08:12  leopardi

	* glucat/index_set_imp.h: Add hash_fn().  Make for loops
	  consistently tidy.

2004-04-15 08:11  leopardi

	* glucat/matrix_imp.h: In nork(), fix nnz_lhs, improve calculation
	  of rhs_range.  Make for loops consistently tidy.

2004-04-15 08:08  leopardi

	* glucat/matrix_multi_imp.h: Add odd(): Odd part of multivector.
	  Use odd() to make fast() faster, tidy up names in fast().  Make
	  iterator names consistent.  Make for loops consistently tidy.

2004-04-15 08:00  leopardi

	* glucat/clifford_algebra.h: Add odd(): Odd part of multivector

2004-04-15 07:58  leopardi

	* glucat/index_set.h: Add hash_fn()

2004-04-15 07:57  leopardi

	* glucat/: generation_imp.h, ublas_imp.h: Make for loops
	  consistently tidy.

2004-04-15 07:53  leopardi

	* gfft_test/gfft_test.h: Streamline testing.  Medium trials use
	  more trials than before.  Aim is to get accurate, reproducible
	  trial time.  Report number of trials used.

2004-04-15 07:50  leopardi

	* squaring/tuning.h: Use different tuning policies controlled by
	  preprocessor defines. This was used for testing as documented in
	  the paper, "A generalized FFT for Clifford algebras".

2004-04-15 07:47  leopardi

	* squaring/squaring.h: Streamline test. Use multivector_t as name
	  of type.

2004-04-15 07:46  leopardi

	* transforms/transforms.cpp: Use try_catch

2004-04-15 07:45  leopardi

	* test_runtime/: gfft_test-10.out, squaring-6.out, test.out,
	  transforms-6.out: Test using hash_map on Athlon64 3200+

2004-04-15 07:43  leopardi

	* glucat/errors.h, glucat/errors_imp.h, test/driver.h: Move
	  declaration of try_catch to errors.h and definition to
	  errors_imp.h

2004-04-15 07:41  leopardi

	* gfft_test/gfft_test.cpp: Use try_catch

2004-04-15 07:41  leopardi

	* squaring/squaring.cpp: Change misleading variable name

2004-04-15 07:39  leopardi

	* gfft_test/Makefile.in, squaring/Makefile.in, test/Makefile.in,
	  test01/Makefile.in, test02/Makefile.in, test03/Makefile.in,
	  test04/Makefile.in, test05/Makefile.in, test06/Makefile.in,
	  test07/Makefile.in, test08/Makefile.in, test09/Makefile.in,
	  test10/Makefile.in, test11/Makefile.in, test12/Makefile.in,
	  test13/Makefile.in, test14/Makefile.in, test15/Makefile.in,
	  test16/Makefile.in, transforms/Makefile.in: Update automake to
	  1.7.6

2004-04-15 07:34  leopardi

	* INSTALL: Update Boost instructions.  Update testing status.  Add
	  description of --with-hash-map.

2004-04-15 07:33  leopardi

	* README: Improve description of GluCat classes.  Update and
	  rearrange web site and software references.  Update Boost
	  instructions.  Update testing status.  Add descriptions of
	  _GLUCAT_HAS_UBLAS_LU_H and _GLUCAT_USE_GNU_CXX_HASH_MAP to Usage.
	  Move layout of headers to Coding standards.

2004-04-15 07:13  leopardi

	* TODO: Remove obsolete TODO items.  Add SWIG and CLU TODO items.
	  Rearrange priorities.

2004-04-15 07:10  leopardi

	* glucat.lsm, NEWS: Update to version 0.1.5

2004-04-15 07:10  leopardi

	* AUTHORS: Add Jan Cnops as author of recursive expression for
	  matrix representation.  Add Henk Jansen as tester.  Add more GFFT
	  references.  Fix punctuation.

2004-04-15 07:07  leopardi

	* aclocal.m4: Update to aclocal 1.7.6

2004-04-15 07:04  leopardi

	* Doxyfile, glucat.doxygen: New name for Doxygen configuration
	  file.  Change GluCat version to 0.1.5.  Bring up to date.
	  Include new Doxygen capabilities.

2004-04-15 06:26  leopardi

	* configure.in, configure.in.in: Change GluCat version to 0.1.5.
	  Add --with-hash-map, which sets $glucat_use_hash_map, which adds
	  -D_USE_GLUCAT_GNU_CXX_HASH_MAP to CXXFLAGS.  Move test for
	  <boost/numeric/ublas/lu.hpp> to an earlier part of configure.
	  Fix test for Woverloaded-virtual. Increase O3 -finline-limit to
	  1600.  Add test for mcmodel=medium to support AMD64 medium model.

2003-07-01 22:26  leopardi

	* ChangeLog: Update using cvs2cl.pl

2003-07-01 22:24  leopardi

	* test_runtime/: gfft_test-10.out, squaring-6.out, test.out,
	  transforms-6.out: Use test results from runs of this version.

2003-07-01 22:24  leopardi

	* configure.in: Update to version 0.1.4

2003-07-01 22:23  leopardi

	* gfft_test/gfft_test.h: Make tests depend on template parameters
	  rather than fixed typedefs.

2003-07-01 22:21  leopardi

	* glucat/global.h: Decrease DEFAULT_Inv_Fast_Dim_Threshold to 1 <<
	  4

2003-07-01 22:20  leopardi

	* glucat/matrix_multi_imp.h: Minor tidy up. Define and use
	  permutation_t.

2003-07-01 22:20  leopardi

	* glucat/index_set_imp.h: Previous implementation was too slow.
	  Optimize: o Use bitset_t as much as possible.  o New member
	  function lex_less_than() o Make operator<() into a member
	  function.

2003-07-01 22:18  leopardi

	* glucat/index_set.h: New index_set<> member function
	  less_less_than. Make operator< into a member function.

2003-06-28 22:20  leopardi

	* ChangeLog: Update using cvs2cl.pl

2003-06-28 22:19  leopardi

	* NEWS: Describe changes for version 0.1.4. Reformat.

2003-06-28 21:49  leopardi

	* configure.in.in, glucat.doxygen, glucat.kdevprj, glucat.lsm:
	  Update to version 0.1.4

2003-06-28 21:43  leopardi

	* glucat/: global.h, index_set.h, index_set_imp.h: Change mapping
	  of index_set_t to bitset_t to make index 0 of index_set_t a
	  "virtual" bit rather than a real dead bit of bitset_t. This
	  allows DEFAULT_LO to be reduced by 1, and DEFAULT_HI to be
	  increased by 1. For a 32 bit unsigned long, the default
	  index_set_t is now index_set<-16,16>, using std::bitset<32>
	  rather than index_set<-15,15>, using std::bitset<31>.

2003-06-28 21:18  leopardi

	* glucat/clifford_algebra.h: Reformat: change tabs to spaces, fold
	  long lines, tidy up.

2003-06-28 20:25  leopardi

	* test/test.sh: Add to CVS. This should have been added for
	  glucat-0.1.3 and tagged release_0_1_3

2003-06-23 09:22  leopardi

	* ChangeLog: Update Changelog using cvs2cl.pl

2003-06-23 09:20  leopardi

	* NEWS: Correct a typo.

2003-06-23 09:01  leopardi

	* ChangeLog: Update Changelog using cvs2cl.pl

2003-06-23 09:00  leopardi

	* NEWS: Correct news date

2003-06-23 08:58  leopardi

	* INSTALL, README: Update g++ version tested on alpha to 3.1

2003-06-23 08:56  leopardi

	* glucat/index_set_imp.h: Use 1UL ((unsigned long) 1) in mask
	  calculations. This is needed for Alpha, which is 64-bit, and is
	  correct in all cases.

2003-06-23 08:54  leopardi

	* gfft_test/gfft_test.h: Remove unused constants v_lo and v_hi

2003-06-22 19:58  leopardi

	* glucat.kdevprj: Fix references to test04.  Add configure.in to
	  project.

2003-06-22 19:57  leopardi

	* Makefile.am: List all relevant directories, including test?? in
	  SUBDIRS

2003-06-22 19:56  leopardi

	* transforms/: Makefile.am, Makefile.in: Remove obsolete references
	  to driver.h

2003-06-22 19:55  leopardi

	* gfft_test/gfft_test.h: Remove unused variables pos_frame and
	  outer_frame.

2003-06-21 23:45  leopardi

	* INSTALL, README: Make instructions more accurate. Describe
	  test_runtime.

2003-06-21 23:19  leopardi

	* test/driver.h: Use default tuning for main tests and squaring
	  test.

2003-06-21 23:16  leopardi

	* test_runtime/: eg3.res, eg8.txt, gfft_test-10.out,
	  squaring-6.out, test.out, transforms-6.out: New directory for
	  test input and output files.

2003-06-21 23:15  leopardi

	* squaring/test-6.out, transforms/transforms-6.out: Move all test
	  output to test_runtime

2003-06-21 00:49  leopardi

	* INSTALL, NEWS, README, ChangeLog: Update to reflect changes to
	  0.1.3

2003-06-21 00:16  leopardi

	* glucat/: index_set.h, index_set_imp.h: Add a constructor from
	  bitset_t.  Optimize fold() and value_of_fold() by using bitset_t
	  and masks.  Use this->etc() more consistently.

2003-06-21 00:12  leopardi

	* glucat/: matrix.h, matrix_imp.h: Move ublas interface to ublas.h
	  and ublas_imp.h.  New nnz() function: number of non-zeros.
	  Optimize nork() for the monomial case, and use new nnz().
	  Optimize unit() by using ublas::identity_matrix() and declaring
	  inline.

2003-06-21 00:08  leopardi

	* glucat/portability.h: Workaround change to gcc 3.3 which applies
	  visibility rules more strictly, by defining _GLUCAT_PRIVATE to be
	  public in this case.

2003-06-21 00:06  leopardi

	* glucat/: glucat.h, glucat_imp.h: Use updated uBLAS interface from
	  Boost CVS when available, while remaining compatible with uBLAS
	  from current Boost release 1.30.0: If _GLUCAT_HAVE_UBLAS_H  is
	  defined, includer <boost/numeric/ublas/lu.hpp> Include new
	  ublas.h and ublas_imp.h headers.

2003-06-21 00:03  leopardi

	* glucat/matrix_multi_imp.h: Change lu_solve() to lu_substitute()
	  and change permutation argument to lu_factorize() to match
	  <boost/numeric/ublas/lu.h> Use optimized monomial version of
	  nork().

2003-06-21 00:01  leopardi

	* glucat/: ublas.h, ublas_imp.h: Move uBLAS interface to separate
	  files to clean it up. Make uBLAS interface optional, used only if
	  _GLUCAT_HAVE_UBLAS_LU_H is not defined. Change lu_solve() to
	  lu_substitute() to match <boost/numeric/ublas/lu.h>

2003-06-20 23:56  leopardi

	* configure.in, configure.in.in: Add fabi-version=0 to work around
	  bug in gcc 3.3 where gcc 3.3 default is to match gcc 3.2 C++ abi,
	  which is known to be broken.	Automatically configure updated
	  uBLAS interface from Boost CVS while remaining compatible with
	  uBLAS from current Boost release 1.30.0: Test for
	  <boost/numeric/ublas/lu.hpp> and define _GLUCAT_HAVE_UBLAS_H if
	  present.  Restructure tests. Update to version 0.1.3

2003-06-20 23:49  leopardi

	* glucat.kdevprj: Restructure tests. Update to version 0.1.3

2003-06-20 23:48  leopardi

	* glucat.doxygen, glucat.lsm: Update to version 0.1.3

2003-06-20 23:47  leopardi

	* Makefile.am: Restructure tests

2003-06-20 23:47  leopardi

	* aclocal.m4: New aclocal version

2003-06-20 23:45  leopardi

	* test/driver.h: Restructure tests. Remove test includes from this
	  file. Add try_catch() function.

2003-06-20 23:43  leopardi

	* transforms/transforms.h: Restructure transforms test. Add
	  contents of old driver.h to this file.

2003-06-20 23:43  leopardi

	* transforms/Makefile.am: Restructure transforms test

2003-06-20 23:42  leopardi

	* test/Makefile.am: Restore correct file for this directory

2003-06-20 23:38  leopardi

	* test/Makefile.in, transforms/Makefile.in: Add to CVS for
	  consistency with other directories

2003-06-20 23:25  leopardi

	* gfft_test/: Makefile.am, Makefile.in, gfft_test.cpp, gfft_test.h:
	  Add gfft_test based on transforms test, but testing only gfft and
	  inverse gfft.

2003-06-20 23:22  leopardi

	* transforms/transforms.cpp: Restructure transforms test: rename
	  driver.cpp to transforms.cpp

2003-06-20 23:21  leopardi

	* transforms/: driver.cpp, driver.h: Restructure transforms test:
	  remove driver files

2003-06-19 16:55  leopardi

	* test09/Makefile.am, test09/Makefile.in, test09/peg09.cpp,
	  test09/peg09.h, test10/Makefile.am, test10/Makefile.in,
	  test10/peg10.cpp, test10/peg10.h, test11/Makefile.am,
	  test11/Makefile.in, test11/peg11.cpp, test11/peg11.h,
	  test12/Makefile.am, test12/Makefile.in, test12/peg12.cpp,
	  test12/peg12.h, test13/Makefile.am, test13/Makefile.in,
	  test13/peg13.cpp, test13/peg13.h, test14/Makefile.am,
	  test14/Makefile.in, test14/peg14.cpp, test14/peg14.h,
	  test15/Makefile.am, test15/Makefile.in, test15/peg15.cpp,
	  test15/peg15.h, test16/Makefile.am, test16/Makefile.in,
	  test16/peg16.cpp, test16/peg16.h, test01/Makefile.am,
	  test01/Makefile.in, test01/peg01.cpp, test01/peg01.h,
	  test02/Makefile.am, test02/Makefile.in, test02/peg02.cpp,
	  test02/peg02.h, test03/Makefile.am, test03/Makefile.in,
	  test03/peg03.cpp, test03/peg03.h, test04/Makefile.am,
	  test04/Makefile.in, test04/peg04.cpp, test04/peg04.h,
	  test05/Makefile.am, test05/Makefile.in, test05/peg05.cpp,
	  test05/peg05.h, test06/Makefile.am, test06/Makefile.in,
	  test06/peg06.cpp, test06/peg06.h, test07/Makefile.am,
	  test07/Makefile.in, test07/peg07.cpp, test07/peg07.h,
	  test08/Makefile.am, test08/Makefile.in, test08/peg08.cpp,
	  test08/peg08.h: Move tests to separate subdirectories.

2003-06-19 12:27  leopardi

	* squaring/: Makefile.am, Makefile.in, squaring.cpp, squaring.h,
	  test-6.out: Try again. Moving squaring test to squaring
	  subdirectory.

2003-06-19 12:03  leopardi

	* test/squaring.cpp: Try again. Moving squaring test to squaring
	  subdirectory.

2003-06-19 11:54  leopardi

	* test/Makefile.am: Try again. Moving squaring test to squaring
	  subdirectory.

2003-06-19 11:50  leopardi

	* test/squaring.cpp: Try again. Moving squaring test to squaring
	  subdirectory.

2003-06-19 11:45  leopardi

	* test/driver.h: Re-add file accidentally removed

2003-06-19 11:40  leopardi

	* test/squaring.cpp: Try again. Moving squaring test to squaring
	  subdirectory.

2003-06-19 10:22  leopardi

	* test/squaring.cpp: New driver for squaring test

2003-06-19 10:21  leopardi

	* test/: driver.cpp, driver.h, squaring.h: Remove files
	  accidentally added to these directories

2003-06-19 10:17  leopardi

	* test/: eg3.res, eg8.txt, test.out: Remove files accidentally
	  added to this directory

2003-06-19 10:16  leopardi

	* test/squaring.h: Move squaring test to squaing subdirectory

2003-06-19 09:39  leopardi

	* test/: squaring.h, test-6.out: Move squaring test header and
	  output to squaring subdirectory

2003-06-19 09:39  leopardi

	* test/: peg01.h, peg02.h, peg03.h, peg04.h, peg05.h, peg06.h,
	  peg07.h, peg08.h, peg09.h, peg10.h, peg11.h, peg12.h, peg13.h,
	  peg14.h, peg15.h, peg16.h: Move test headers to test??
	  subdirectories

2003-03-02 12:54  leopardi

	* INSTALL, README: Update to reflect testing with  Boost RC_1_30_0

2003-03-02 12:49  leopardi

	* test/test-6.out, transforms/transforms-6.out: Update test results
	  to reflect use of Boost RC_1_30_0

2003-03-02 09:51  leopardi

	* ChangeLog: Reflect changes to 0.1.2

2003-03-02 09:47  leopardi

	* test/: test-6.out, test.out: Test results for version 0.1.2

2003-03-02 09:47  leopardi

	* transforms/transforms-6.out: Results of running
	  ./transforms/transforms 6 when compiled with g++ -O3

2003-03-02 02:24  leopardi

	* AUTHORS, INSTALL, NEWS, README, TODO: Reflect changes to version
	  0.1.2

2003-03-02 02:15  leopardi

	* glucat.doxygen, glucat.kdevprj, glucat.lsm: Update to version
	  0.1.2

2003-03-02 02:13  leopardi

	* configure.in, configure.in.in: Handle differences in platforms
	  and options here rather than in Makefile.am

2003-03-02 02:11  leopardi

	* Makefile.am: Add transforms directory.

2003-03-02 02:08  leopardi

	* glucat/: framed_multi.h, framed_multi_imp.h: Add generalized FFT
	  fast_matrix_multi(frm) Add fast_framed_multi(), which creates a
	  copy of *this.  Add private member functions used by
	  fast_matrix_multi(frm), including the recursive function fast(),
	  which almost all the work.  Use generalized FFT in constructors
	  from matrix_multi<>.

2003-03-02 01:52  leopardi

	* transforms/transforms.h: Change output format to make it narrower
	  and easier to read.  Rename variables to make naming more
	  consistent.

2003-03-02 01:51  leopardi

	* transforms/Makefile.am: Change name of program to transforms.

2003-03-02 01:50  leopardi

	* test/Makefile.am: Simplify. ./configure now takes care of
	  differences between platforms and options.

2003-03-02 01:41  leopardi

	* test/driver.h: Add Tune_P template parameters for generalized
	  FFT.

2003-03-02 01:40  leopardi

	* test/driver.cpp: Cosmetic change.

2003-03-02 01:39  leopardi

	* test/peg03.h: Change template to relax constraints on LO and HI.
	  They don't work well with generalized FFT and are not really
	  needed anyway.

2003-03-02 01:15  leopardi

	* glucat/matrix_multi_imp.h: Add offset_level(). Move folded_dim()
	  from generation.h.  Add fast_matrix_multi(frm), which creates a
	  copy of *this within frm.  Use generalized FFT in constructors
	  from framed_multi<>.	Add inverse generalized FFT
	  fast_framed_multi().	This uses the new recursive function fast()
	  to do almost all the work.  In operator/=, use ublas::norm_inf()
	  rather than ublas::norm_2().	Use namespace gen:: where needed.

2003-03-02 01:14  leopardi

	* glucat/matrix_multi.h: Add fast_matrix_multi(frm), which creates
	  a copy of *this within frm.  Add inverse generalized FFT
	  fast_framed_multi().

2003-03-01 20:13  leopardi

	* glucat/global.h: Fix bug in tuning<> policy class where default
	  was always used in enumerations, regardless of template
	  parameters. Add tuning for generalised FFT and inverse
	  generalized FFT. Tweak default values for tuning parameters to
	  take account of generalised FFT and its inverse.  Move pos_mod()
	  to this file.

2003-03-01 20:05  leopardi

	* glucat/: matrix.h, matrix_imp.h: Add nork() - left inverse of
	  Kronecker product kron(). Change call to ublas::sparse_prod() to
	  match changes to uBLAS in Boost CVS.

2003-03-01 20:03  leopardi

	* glucat/: generation.h, generation_imp.h: Hide contents inside
	  namespace gen. Add the offset_to_super[] table to the interface.
	  Move pos_mod() to global.h. Remove folded_dim().

2003-03-01 19:58  leopardi

	* glucat/: errors.h, errors_imp.h: Generalize glucat_error by
	  adding a context string. This can be used for the classname(), as
	  previously, or for a different context string. This allows
	  glucat_error to be used where classname() does not exist or is
	  otherwise misleading.

2003-03-01 19:55  leopardi

	* glucat/: index_set.h, index_set_imp.h: Add index_set complement
	  (operator~, not) and intersection (operator&=, operator&, and)

2003-02-26 10:30  leopardi

	* transforms/: Makefile.am, driver.cpp, driver.h, transforms.h: New
	  directory ./transforms for generalized FFT test

2003-02-26 10:15  leopardi

	* test/: Makefile.am, driver.cpp, driver.h: Re-add files which were
	  accidentally deleted from CVS repository.

2003-02-25 23:59  leopardi

	* test/: .cvsignore, Makefile.am, driver.cpp, driver.h: New
	  directory ./transforms for generalized FFT test program.

2003-01-12 19:26  leopardi

	* ChangeLog: Changes up to GluCat 0.1.1

2003-01-12 19:25  leopardi

	* INSTALL: More accurate installation instructions, including a
	  warning not to set -finline-limit too high with Red Hat g++ 2.96

2003-01-11 23:07  leopardi

	* TODO: Change order of TODO items

2003-01-11 23:06  leopardi

	* test/test-6.out: Update timing test results to new format

2003-01-11 23:05  leopardi

	* test/squaring.h: Change use of fixed and showpoint to ensure that
	  timing test compiles and runs correctly with RedHat g++ 2.96

2003-01-11 23:04  leopardi

	* test/driver.h: Change DRIVER_BASIS_MAX_COUNT from 8 to 9 to
	  partly compensate for the change to global.h

2003-01-11 23:02  leopardi

	* test/Makefile.am: Simplify build flags.  Use -O3 and
	  -finline-limit=900 for g++ production build

2003-01-11 22:57  leopardi

	* glucat/global.h: Reduce DEFAULT_Basis_Max_Count from 10 to 8 to
	  reduce default potential memory usage of basis cache.

2003-01-08 23:08  leopardi

	* TODO: Remove an item now done.  Update to include new priorities

2003-01-08 01:40  leopardi

	* NEWS: Describe GluCat 0.1.1

2003-01-08 01:39  leopardi

	* test/driver.h: Define DRIVER_BASIS_MAX_COUNT as an example of the
	  use of Tune_P

2003-01-08 01:38  leopardi

	* glucat/global.h: Make tuning<> template and associated constants
	  easier to use

2003-01-08 00:36  leopardi

	* glucat/global.h: Enhance basis_element() by using a basis_table
	  as a cache Change default tuning constant names to DEFAULT_*

2003-01-08 00:35  leopardi

	* glucat/matrix_multi_imp.h: Enhance basis_element() by using a
	  basis_table as a cache

2003-01-07 23:37  leopardi

	* test/squaring.h: Make timing more accurate.  Make output format
	  more consistent, neat and useful.

2003-01-07 23:35  leopardi

	* test/Makefile.am: Make Makefile (hopefully) more robust

2003-01-07 23:34  leopardi

	* configure.in, configure.in.in, glucat.doxygen, glucat.kdevprj:
	  Update to GluCat version 0.1.1

2002-12-31 18:44  leopardi

	* ChangeLog: Include change to test/Makefile.am

2002-12-31 18:43  leopardi

	* test/Makefile.am: Do not install glucat binary

2002-12-31 07:18  leopardi

	* ChangeLog: Changes up to GluCat 0.1.0

2002-12-31 06:02  leopardi

	* NEWS: Add news for GluCat 0.1.0

2002-12-31 06:01  leopardi

	* test/: test-6.out, test.out: Use GluCat 0.1.0 test output

2002-12-30 19:34  leopardi

	* test/peg11.h: Use std::numeric_limits<>::max()

2002-12-30 19:29  leopardi

	* glucat/matrix_multi_imp.h: Use numeric_limits<>::quiet_NaN to
	  return NaN when appropriate.	Use matrix:: explicitly rather than
	  using namespace matrix.  Use ublas::equals().

2002-12-30 19:27  leopardi

	* glucat/generation_imp.h: Use matrix:: rather than using namespace
	  matrix.

2002-12-30 19:26  leopardi

	* glucat/clifford_algebra_imp.h: Use numeric_limits<>::quiet_NaN to
	  return NaN when appropriate.

2002-12-30 19:25  leopardi

	* glucat/: matrix.h, matrix_imp.h: Remove operator== - no longer
	  needed

2002-12-30 15:27  leopardi

	* test/peg16.h: Use uBLAS rather than MTL.

2002-12-30 15:26  leopardi

	* test/squaring.h: Clean up time_mult() interface.  Add input
	  validation to prevent test with a value which is too big.

2002-12-30 15:24  leopardi

	* test/Makefile.am: Add commented options for Intel C++, debugging,
	  profiling.  Rearrange commented options.

2002-12-30 15:23  leopardi

	* configure.in, configure.in.in, glucat.kdevprj, glucat.lsm: Update
	  to GluCat 0.1.0.

2002-12-30 15:22  leopardi

	* glucat.doxygen: Update to GluCat 0.1.0.  Use newer version of
	  Doxygen.

2002-12-30 15:18  leopardi

	* TODO: Remove items which are essentially done: Port to Intel C++
	  is done. Port to MTL3 replaced by port to uBLAS.  Add a few new
	  items, including better use of automake and autoconf.

2002-12-30 15:16  leopardi

	* INSTALL, README: Update instructions and status to reflect the
	  use of uBLAS, Boost CVS, g++ 3.2 and Intel C++ 7.0.

2002-12-30 15:15  leopardi

	* AUTHORS: Add Joerg Walter and Carlos O'Ryan.	Sort credits
	  alphabetically.

2002-12-30 15:02  leopardi

	* glucat/matrix_multi_imp.h: Use uBLAS rather than MTL.  Prefer
	  std::string to char* for classname.  Remove copy constructor - no
	  longer needed.  Have basis_element() return matrix_t rather than
	  void.  Remove dense_mult from operator *= - no longer needed.
	  Operator /= now uses the whole matrix rather than a vector at a
	  time.  Use namespace matrix.	Clean up interface to inner().
	  Clean up calls to folded_dim() and basis_element().  Use inline
	  more appropriately.  Minor formatting changes.  Use namespace std
	  for vector.

2002-12-30 15:01  leopardi

	* glucat/framed_multi_imp.h: Clean up call to basis_element()

2002-12-30 14:38  leopardi

	* glucat/: framed_multi_imp.h, matrix.h, matrix_imp.h: Clean up
	  interface to inner().

2002-12-30 10:59  leopardi

	* glucat/generation_imp.h: Use simplified mono_prod().

2002-12-30 10:58  leopardi

	* glucat/: matrix.h, matrix_imp.h: Move swap_rows(), lu_factorize()
	  and lu_solve() from ublas.h to matrix.h.  Rename
	  compressed_prod() to sparse_prod().  Simplify interfaces of
	  mon_prod() and sparse_prod().

2002-12-30 09:36  leopardi

	* glucat/: Makefile.am, glucat.h, glucat_imp.h, ublas.h,
	  ublas_imp.h: Move swap_rows(), lu_factorize() and lu_solve() from
	  ublas.h to matrix.h Remove ublas.h and ublas_imp.h

2002-12-30 09:31  leopardi

	* subdirs: Remove autogenerated file.

2002-12-29 23:23  leopardi

	* glucat/matrix_multi.h: Remove dense_matrix_t, sparse_matrix_t,
	  col_matrix_t - no longer needed.

2002-12-29 23:02  leopardi

	* glucat/generation_imp.h: Use uBLAS rather than MTL.  Use
	  namespace std.  Use namespace matrix.  Use new kron() and unit()
	  interfaces.  Use inline more appropriately.  Minor formatting
	  changes.

2002-12-29 22:58  leopardi

	* glucat/framed_multi_imp.h: Use uBLAS rather than MTL.  Use new
	  basis_element() interface.  Prefer std::string to char* for
	  classname.  Prefer referencing to copying multivectors.  Use
	  inline more appropriately.  Minor formatting changes.

2002-12-29 10:48  leopardi

	* glucat/matrix_multi.h: Prefer std::string to char* for classname.
	  Use uBLAS rather than MTL.  Use _GLUCAT_PUBLIC for Intel C++
	  compatibility.  Remove copy constructor - no longer needed.  Have
	  basis_element() return matrix_t rather than void.  Minor
	  formatting changes.

2002-12-29 10:40  leopardi

	* glucat/: glucat.h, glucat_imp.h: Use UBLAS rather than MTL.

2002-12-29 10:32  leopardi

	* config.h, config.h.in, config.status, configure, libtool: Remove
	  automatically generated files from CVS repository.

2002-12-29 10:15  leopardi

	* glucat/matrix_imp.h: Use uBLAS rather than MTL.  Use namespace
	  matrix to reduce clutter in namespace glucat.  Remove
	  is_perm_shaped() and is_singlet() as they are no longer needed.
	  Add operator==, mono_prod() and compressed_prod() for matrix
	  expressions.	Change interface so that kron and unit return
	  Matrix_T rather than void.

2002-12-29 10:14  leopardi

	* glucat/matrix.h: Use uBLAS rather than MTL.  Use namespace matrix
	  to reduce clutter in namespace glucat.  Remove is_perm_shaped()
	  and is_singlet() as they are no longer needed.  Add operator==,
	  mono_prod() and compressed_prod() for matrix expressions.  Change
	  interface so that kron and unit return Matrix_T rather than void.
	  Remove extraneous "using std::vector".

2002-12-29 10:06  leopardi

	* glucat/generation.h: Minor formatting changes.

2002-12-29 10:06  leopardi

	* glucat/framed_multi.h: Prefer std::string to char* for classname.
	  Make iterators public. Minor formatting changes.

2002-12-29 10:00  leopardi

	* glucat/clifford_algebra_imp.h: Use inline more appropriately.
	  Prefer const referencing to copying multivectors. Minor
	  formatting changes.

2002-12-29 09:57  leopardi

	* glucat/Makefile.am: uBLAS interface by Joerg Walter

2002-12-28 18:30  leopardi

	* glucat/: index_set.h, index_set_imp.h: Prefer std::string to
	  char*

2002-12-28 18:27  leopardi

	* glucat/portability.h: Intel C++ compatibility: define
	  _GLUCAT_PRIVATE to be public for Intel C++

2002-12-28 18:26  leopardi

	* glucat/global.h: Increase default maximum steps of stepwise
	  refinement used in division (from 3 to 4)

2002-12-28 18:18  leopardi

	* glucat/generation.h: Make single instance into a static member of
	  generator_table

2002-12-28 18:13  leopardi

	* glucat/: errors.h, errors_imp.h, clifford_algebra.h: Prefer
	  std::string to char*

2002-12-28 11:01  leopardi

	* glucat/: ublas.h, ublas_imp.h: uBLAS interface by Joerg Walter

2002-08-19 08:03  leopardi

	* test/Makefile.am: Correct commenting

2002-08-18 21:27  leopardi

	* INSTALL: Improve test build documentation, especially in relation
	  to choices for CXXFLAGS

2002-08-18 21:26  leopardi

	* test/Makefile.am: Create commented out choices for CXXFLAGS

2002-08-17 16:22  leopardi

	* ChangeLog: Changes for version 0.0.7

2002-08-17 16:21  leopardi

	* INSTALL, README: Update to correctly describe changes needed to
	  Makefile.in to build the test on Compaq Alpha, and to build the
	  timing test.

2002-08-15 22:54  leopardi

	* ChangeLog: Changes up to version 0.0.7

2002-08-15 22:53  leopardi

	* glucat/Makefile.am: Update for consistency

2002-08-15 22:38  leopardi

	* test/: test-6.out, test.out: Update test output

2002-08-15 21:58  leopardi

	* test/Makefile.am: Set default compile flags to -O -g

2002-08-15 21:53  leopardi

	* INSTALL, NEWS, README, TODO: Update documentation to reflect
	  changes to version 0.0.7

2002-08-15 21:52  leopardi

	* glucat.doxygen, glucat.kdevprj, glucat.lsm: Update to version
	  0.0.7, using KDevelop 2.1.2

2002-08-14 22:12  leopardi

	* test/Makefile.am: Simplify compile flags - reduce optimization
	  and debugging

2002-08-14 21:29  leopardi

	* config.log: Remove file apparently not needed

2002-08-14 21:08  leopardi

	* acinclude.m4, aclocal.m4, config.h, config.log, configure.files,
	  libtool, stamp-h1, subdirs: (Re)add files possibly needed by
	  autoconf, automake or configure

2002-08-14 00:05  leopardi

	* configure.in.in: Add file apparently needed by automake, autoconf
	  or configure

2002-08-14 00:03  leopardi

	* Makefile.am, Makefile.dist, config.h.in, configure.in: Update to
	  automake 1.6.3 and autoconf 2.52

2002-08-13 23:55  leopardi

	* config.status, configure: Add files apparently needed by
	  automake, autoconf or configure

2002-08-12 22:35  leopardi

	* admin/: ChangeLog, Makefile.common, acinclude.m4.in, am_edit,
	  conf.change.pl, config.guess, config.pl, config.sub,
	  configure.in.min, cvs-clean.pl, cvs.sh, debianrules, depcomp,
	  detect-autoconf.sh, install-sh, libtool.m4.in, ltmain.sh,
	  missing, mkinstalldirs, ylwrap: Add files apparently needed by
	  autoconf, automake or configure

2002-08-12 22:30  leopardi

	* acinclude.m4.in: Remove file apparently no longer needed by
	  autoconf, automake or configure

2002-08-12 22:26  leopardi

	* acconfig.h, config.guess, config.sub, configure.in.no_shlib,
	  install-sh, libtool.m4.in, ltconfig, ltmain.sh, missing,
	  mkinstalldirs, stamp-h.in: Remove files apparently no longer
	  needed by autoconf, automake or configure

2002-08-10 19:56  leopardi

	* test/peg16.h: Improve compatibility with g++ 3.1.1 and hopefully
	  also with standard C++'

2002-08-10 19:54  leopardi

	* glucat/: clifford_algebra.h, clifford_algebra_imp.h, errors.h,
	  errors_imp.h, framed_multi.h, framed_multi_imp.h, generation.h,
	  generation_imp.h, index_set.h, index_set_imp.h, matrix_multi.h,
	  matrix_multi_imp.h: Improve compatibility with g++ 3.1.1 and
	  hopefully also with standard C++

2002-08-10 19:52  leopardi

	* glucat/global.h: Remove possible name clash by renaming CTAssert
	  to _GLUCAT_CTAssert

2002-04-15 07:33  leopardi

	* ChangeLog: Update to reflect change to NEWS

2002-04-15 07:29  leopardi

	* NEWS: Update NEWS to reflect fix to elliptic()

2002-04-14 23:39  leopardi

	* ChangeLog: Update to version 0.0.6

2002-04-14 23:18  leopardi

	* test/: test-6.out, test.out: Update test output to reflect change
	  in elliptic()

2002-04-14 21:28  leopardi

	* glucat.kdevprj: Update version

2002-04-14 21:25  leopardi

	* configure.in, glucat.doxygen, glucat.lsm: Update version

2002-04-14 21:14  leopardi

	* glucat/clifford_algebra_imp.h: Fix elliptic() to return a unit
	  volume element I which commutes with the whole relevant
	  subalgebra

2002-04-14 21:13  leopardi

	* glucat/generation_imp.h: Use count_pos() and count_neg() in
	  folded_dim()

2002-04-14 21:12  leopardi

	* glucat/: index_set.h, index_set_imp.h: Add count_pos() and
	  count_neg(): count positive and negative indices

2002-04-14 21:03  leopardi

	* TODO: Update to include items listed in the coursework thesis,
	  "Practical Computation with Clifford Algebras," submitted as part
	  of the requirements for MScTech at UNSW.

2002-01-27 10:54  leopardi

	* ChangeLog: Update to version 0.0.5

2002-01-27 09:27  leopardi

	* INSTALL: Add instructions for g++ 3.0.X

2002-01-27 09:16  leopardi

	* NEWS, README, TODO: Reflect that GluCat 0.0.5 is now compatible
	  with g++ 3.0.3

2002-01-27 09:14  leopardi

	* configure.in, glucat.doxygen, glucat.kdevprj, glucat.lsm: Update
	  version to 0.0.5

2002-01-26 22:13  leopardi

	* test/Makefile.am: Adjust makefile to keep G++ 3.0.X inlining
	  under control while optimizing as much as possible.

2002-01-26 22:11  leopardi

	* test/: driver.cpp, peg01.h, peg02.h, peg03.h, peg04.h, peg05.h,
	  peg06.h, peg07.h, peg08.h, peg09.h, peg10.h, peg11.h, peg12.h,
	  peg13.h, peg14.h, peg15.h, peg16.h, squaring.h: Make tests
	  compatible with G++ 3.0.X by using namespace std where needed

2002-01-26 22:10  leopardi

	* glucat/: clifford_algebra.h, clifford_algebra_imp.h, errors.h,
	  errors_imp.h, framed_multi.h, framed_multi_imp.h, generation.h,
	  generation_imp.h, index_set.h, index_set_imp.h, matrix_multi.h,
	  matrix_multi_imp.h, portability.h: Make library compatible with
	  G++ 3.0.X by using std:: where needed

2002-01-24 20:46  leopardi

	* ChangeLog: Use cvs2cl. Unfortunately this loses changes from
	  0.0.1 to 0.0.2.  Update for version 0.0.4

2002-01-24 19:43  leopardi

	* test/: test-6.out, test.out: Update test results

2002-01-24 18:43  leopardi

	* TODO: Update to reflect that ithe rreducible real representation
	  has been implemented.

2002-01-24 18:42  leopardi

	* glucat.lsm: Update to version 0.0.4

2002-01-24 17:03  leopardi

	* configure.in, glucat.doxygen, glucat.kdevprj: Update version to
	  0.0.4

2002-01-24 17:00  leopardi

	* glucat/Makefile.am: Add generation.h and generation_imp.h to
	  Makefile

2002-01-24 16:53  leopardi

	* glucat/: generation.h, generation_imp.h, matrix_multi_imp.h:
	  Define class generator_table<> and singleton generator<>()

2002-01-24 16:51  leopardi

	* glucat/global.h: Change CTChecker to CTAssertion to avoid clash
	  with POOMA when using namespace glucat

2002-01-24 08:42  leopardi

	* test/squaring.h: Take account of irredicible representations by
	  testing Cl(n,0)

2002-01-24 08:39  leopardi

	* glucat/: framed_multi_imp.h, generation.h, generation_imp.h,
	  global.h, glucat.h, glucat_imp.h, matrix.h, matrix_imp.h,
	  matrix_multi.h, matrix_multi_imp.h: matrix_multi<> now uses real
	  irreducible representation per Porteous and Lounesto.

2002-01-22 22:32  leopardi

	* glucat/: matrix.h, matrix_imp.h: Optimize and clean up gen() and
	  gengen() before implementing irreducible real representation.

2002-01-22 20:29  leopardi

	* configure.in, glucat.doxygen: Update version to 0.0.3

2002-01-22 20:26  leopardi

	* configure: Remove configure: file is auto generated

2002-01-21 23:44  leopardi

	* ChangeLog: Add comment on change to norm() in matrix_multi_imp.h

2002-01-21 23:26  leopardi

	* test/: test-6.out, test.out: Version 0.0.3 test output

2002-01-21 22:26  leopardi

	* ChangeLog: Keep style consistent

2002-01-21 22:25  leopardi

	* glucat.lsm: Update to version 0.0.3

2002-01-21 22:24  leopardi

	* ChangeLog: Document version 0.0.3

2002-01-21 02:09  leopardi

	* glucat.kdevses: Remove irrelevant KDevelop session file

2002-01-21 02:04  leopardi

	* glucat/matrix_multi_imp.h: operator==: fix use of const_iterators
	  norm: optimize by using inner()

2002-01-21 02:02  leopardi

	* glucat/clifford_algebra_imp.h: cos, sin: bring real part into
	  range 0 <= x < 2*pi

2002-01-12 13:07  leopardi

	* configure, glucat.kdevprj: Get ready for release 0.0.2

2002-01-12 12:59  leopardi

	* TODO: update

2002-01-12 12:19  leopardi

	* ChangeLog: updated

2002-01-12 12:04  leopardi

	* configure.in: Remove unused doc directory

2002-01-12 11:52  leopardi

	* .cvsignore, AUTHORS, COPYING, ChangeLog, INSTALL, Makefile.am,
	  Makefile.dist, NEWS, README, TODO, acconfig.h, acinclude.m4.in,
	  config.guess, config.h.in, config.sub, configure, configure.in,
	  configure.in.no_shlib, glucat.directory, glucat.doxygen,
	  glucat.kdevprj, glucat.kdevses, glucat.lsm, install-sh,
	  libtool.m4.in, ltconfig, ltmain.sh, missing, mkinstalldirs,
	  stamp-h.in, glucat/.cvsignore, glucat/Makefile.am,
	  glucat/clifford_algebra.h, glucat/clifford_algebra_imp.h,
	  glucat/errors.h, glucat/errors_imp.h, glucat/framed_multi.h,
	  glucat/framed_multi_imp.h, glucat/global.h, glucat/glucat.h,
	  glucat/glucat_imp.h, glucat/index_set.h, glucat/index_set_imp.h,
	  glucat/long_double.h, glucat/matrix_multi_imp.h, glucat/matrix.h,
	  glucat/matrix_imp.h, glucat/matrix_multi.h, glucat/portability.h,
	  glucat/scalar.h, glucat/templates/.cvsignore,
	  glucat/templates/cpp_template, glucat/templates/header_template,
	  test/.cvsignore, test/Makefile.am, test/driver.cpp,
	  test/driver.h, test/eg3.res, test/eg8.txt, test/peg01.h,
	  test/peg02.h, test/peg03.h, test/peg04.h, test/peg05.h,
	  test/peg06.h, test/peg07.h, test/peg08.h, test/peg09.h,
	  test/peg10.h, test/peg11.h, test/peg12.h, test/peg13.h,
	  test/peg14.h, test/peg15.h, test/peg16.h, test/squaring.h,
	  test/test-6.out, test/test.out, test/templates/.cvsignore,
	  test/templates/cpp_template, test/templates/header_template: Add
	  glucat to cvs

2002-01-12 11:52  leopardi

	* .cvsignore, AUTHORS, COPYING, ChangeLog, INSTALL, Makefile.am,
	  Makefile.dist, NEWS, README, TODO, acconfig.h, acinclude.m4.in,
	  config.guess, config.h.in, config.sub, configure, configure.in,
	  configure.in.no_shlib, glucat.directory, glucat.doxygen,
	  glucat.kdevprj, glucat.kdevses, glucat.lsm, install-sh,
	  libtool.m4.in, ltconfig, ltmain.sh, missing, mkinstalldirs,
	  stamp-h.in, glucat/.cvsignore, glucat/Makefile.am,
	  glucat/clifford_algebra.h, glucat/clifford_algebra_imp.h,
	  glucat/errors.h, glucat/errors_imp.h, glucat/framed_multi.h,
	  glucat/framed_multi_imp.h, glucat/global.h, glucat/glucat.h,
	  glucat/glucat_imp.h, glucat/index_set.h, glucat/index_set_imp.h,
	  glucat/long_double.h, glucat/matrix_multi_imp.h, glucat/matrix.h,
	  glucat/matrix_imp.h, glucat/matrix_multi.h, glucat/portability.h,
	  glucat/scalar.h, glucat/templates/.cvsignore,
	  glucat/templates/cpp_template, glucat/templates/header_template,
	  test/.cvsignore, test/Makefile.am, test/driver.cpp,
	  test/driver.h, test/eg3.res, test/eg8.txt, test/peg01.h,
	  test/peg02.h, test/peg03.h, test/peg04.h, test/peg05.h,
	  test/peg06.h, test/peg07.h, test/peg08.h, test/peg09.h,
	  test/peg10.h, test/peg11.h, test/peg12.h, test/peg13.h,
	  test/peg14.h, test/peg15.h, test/peg16.h, test/squaring.h,
	  test/test-6.out, test/test.out, test/templates/.cvsignore,
	  test/templates/cpp_template, test/templates/header_template:
	  Initial revision

2002-01-12 Update version to 0.0.2
2002-01-12 ./test/test.out, test6.out: Add sample output
2002-01-12 Add all relevant files to CVS
2002-01-12 ./glucat/doc: remove unused directory

2002-01-11 ./glucat/clifford_algebra_imp.h: Fix elliptic() to give a result which commutes
2002-01-11 ./test/peg12.cpp: Change example name from "basis group" to "frame group"
2002-01-11 ./test/peg13.cpp, peg14.cpp, peg15.cpp: Add cout << example name
2002-01-11 ./test/peg16.cpp: Fix example name to read: Matrices of multivectors

2002-01-10 ./README: Add -finline-limit-400

2002-01-09 Release glucat-0.0.1
