toon-members
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Toon-members] TooN Authors COPYING Cholesky.h Doxyfile GPL.tx...


From: Edward Rosten
Subject: [Toon-members] TooN Authors COPYING Cholesky.h Doxyfile GPL.tx...
Date: Tue, 12 Feb 2013 16:36:02 +0000

CVSROOT:        /sources/toon
Module name:    TooN
Changes by:     Edward Rosten <edrosten>        13/02/12 16:36:01

Removed files:
        .              : Authors COPYING Cholesky.h Doxyfile GPL.txt 
                         GR_SVD.h LU.h Lapack_Cholesky.h Makefile.in 
                         QR_Lapack.h README SVD.h SymEigen.h TODO TooN.h 
                         TooN.pc TooN.pc.in configure configure.ac 
                         determinant.h gauss_jordan.h 
                         gaussian_elimination.h generated.h helpers.h 
                         irls.h lapack.h make_data_functions.awk 
                         make_make_vector.awk make_typeof.awk 
                         numdiff.awk se2.h se3.h sim2.h sim3.h sl.h 
                         so2.h so3.h wls.h 
        benchmark      : generate_solvers.m solve_ax_equals_b.cc 
                         solvers.cc 
        doc            : COPYING_FDL Makefile cramer.gnuplot cramer.h 
                         cramer.png documentation.h linoperatorsdoc.h 
        functions      : derivatives.h fadbad.h 
        internal       : allocator.hh builtin_typeof.h comma.hh 
                         config.hh config.hh.in data.hh 
                         data_functions.hh dchecktest.hh debug.hh 
                         deprecated.hh diagmatrix.h make_vector.hh 
                         matrix.hh mbase.hh objects.h operators.hh 
                         overfill_error.hh planar_complex.hh 
                         reference.hh size_mismatch.hh slice_error.hh 
                         typeof.hh vbase.hh vector.hh 
        optimization   : brent.h conjugate_gradient.h downhill_simplex.h 
                         golden_section.h 
        regressions    : chol_lapack.cc chol_lapack.txt chol_toon.cc 
                         chol_toon.txt complex.cc complex.txt 
                         determinant.cc determinant.m determinant.txt 
                         eigen-sqrt.cc eigen-sqrt.txt fill.cc fill.txt 
                         gauss_jordan.cc gauss_jordan.txt gr_svd.cc 
                         gr_svd.txt lu.cc lu.txt qr.cc qr.txt 
                         regression.h simplex.cc simplex.txt slice.cc 
                         slice.txt so3.cc so3.txt sym_eigen.cc 
                         sym_eigen.m sym_eigen.txt vector_resize.cc 
                         vector_resize.txt 
        test           : SXX_test.cc as_foo.cc brent_test.cc cg_test.cc 
                         cg_view.gnuplot deriv_test.cc diagslice.cc 
                         dynamic_test.cc fadbad.cpp 
                         gaussian_elimination_test.cc golden_test.cc 
                         identity_test.cc log.cc lutest.cc 
                         make_vector.cc makevector.cc mat_test.cc 
                         mat_test2.cc mmult_test.cc normalize_test.cc 
                         normalize_test2.cc scalars.cc 
                         simplex_view.gnuplot sl.cc slice_test.cc 
                         svd_test.cc sym.cc test2.cc test3.cc 
                         test_data.cc test_foreign.cc un_project.cc 
                         vec_test.cc 

Log message:
        Delete all files

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/TooN/Authors?cvsroot=toon&r1=1.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/COPYING?cvsroot=toon&r1=1.3&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/Cholesky.h?cvsroot=toon&r1=1.40&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/Doxyfile?cvsroot=toon&r1=1.16&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/GPL.txt?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/GR_SVD.h?cvsroot=toon&r1=1.8&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/LU.h?cvsroot=toon&r1=1.21&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/Lapack_Cholesky.h?cvsroot=toon&r1=1.10&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/Makefile.in?cvsroot=toon&r1=1.30&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/QR_Lapack.h?cvsroot=toon&r1=1.4&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/README?cvsroot=toon&r1=1.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/SVD.h?cvsroot=toon&r1=1.20&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/SymEigen.h?cvsroot=toon&r1=1.29&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/TODO?cvsroot=toon&r1=1.14&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/TooN.h?cvsroot=toon&r1=1.64&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/TooN.pc?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/TooN.pc.in?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/configure?cvsroot=toon&r1=1.14&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/configure.ac?cvsroot=toon&r1=1.16&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/determinant.h?cvsroot=toon&r1=1.6&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/gauss_jordan.h?cvsroot=toon&r1=1.6&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/gaussian_elimination.h?cvsroot=toon&r1=1.9&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/generated.h?cvsroot=toon&r1=1.5&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/helpers.h?cvsroot=toon&r1=1.93&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/irls.h?cvsroot=toon&r1=1.11&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/lapack.h?cvsroot=toon&r1=1.19&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/make_data_functions.awk?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/make_make_vector.awk?cvsroot=toon&r1=1.4&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/make_typeof.awk?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/numdiff.awk?cvsroot=toon&r1=1.5&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/se2.h?cvsroot=toon&r1=1.12&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/se3.h?cvsroot=toon&r1=1.35&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/sim2.h?cvsroot=toon&r1=1.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/sim3.h?cvsroot=toon&r1=1.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/sl.h?cvsroot=toon&r1=1.11&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/so2.h?cvsroot=toon&r1=1.15&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/so3.h?cvsroot=toon&r1=1.52&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/wls.h?cvsroot=toon&r1=1.28&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/benchmark/generate_solvers.m?cvsroot=toon&r1=1.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/benchmark/solve_ax_equals_b.cc?cvsroot=toon&r1=1.7&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/benchmark/solvers.cc?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/doc/COPYING_FDL?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/doc/Makefile?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/doc/cramer.gnuplot?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/doc/cramer.h?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/doc/cramer.png?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/doc/documentation.h?cvsroot=toon&r1=1.47&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/doc/linoperatorsdoc.h?cvsroot=toon&r1=1.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/functions/derivatives.h?cvsroot=toon&r1=1.5&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/functions/fadbad.h?cvsroot=toon&r1=1.5&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/internal/allocator.hh?cvsroot=toon&r1=1.39&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/internal/builtin_typeof.h?cvsroot=toon&r1=1.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/internal/comma.hh?cvsroot=toon&r1=1.3&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/internal/config.hh?cvsroot=toon&r1=1.34&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/internal/config.hh.in?cvsroot=toon&r1=1.4&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/internal/data.hh?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/internal/data_functions.hh?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/internal/dchecktest.hh?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/internal/debug.hh?cvsroot=toon&r1=1.9&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/internal/deprecated.hh?cvsroot=toon&r1=1.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/internal/diagmatrix.h?cvsroot=toon&r1=1.6&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/internal/make_vector.hh?cvsroot=toon&r1=1.4&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/internal/matrix.hh?cvsroot=toon&r1=1.40&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/internal/mbase.hh?cvsroot=toon&r1=1.37&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/internal/objects.h?cvsroot=toon&r1=1.25&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/internal/operators.hh?cvsroot=toon&r1=1.51&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/internal/overfill_error.hh?cvsroot=toon&r1=1.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/internal/planar_complex.hh?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/internal/reference.hh?cvsroot=toon&r1=1.9&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/internal/size_mismatch.hh?cvsroot=toon&r1=1.7&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/internal/slice_error.hh?cvsroot=toon&r1=1.13&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/internal/typeof.hh?cvsroot=toon&r1=1.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/internal/vbase.hh?cvsroot=toon&r1=1.47&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/internal/vector.hh?cvsroot=toon&r1=1.57&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/optimization/brent.h?cvsroot=toon&r1=1.5&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/optimization/conjugate_gradient.h?cvsroot=toon&r1=1.10&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/optimization/downhill_simplex.h?cvsroot=toon&r1=1.9&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/optimization/golden_section.h?cvsroot=toon&r1=1.5&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/chol_lapack.cc?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/chol_lapack.txt?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/chol_toon.cc?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/chol_toon.txt?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/complex.cc?cvsroot=toon&r1=1.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/complex.txt?cvsroot=toon&r1=1.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/determinant.cc?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/determinant.m?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/determinant.txt?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/eigen-sqrt.cc?cvsroot=toon&r1=1.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/eigen-sqrt.txt?cvsroot=toon&r1=1.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/fill.cc?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/fill.txt?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/gauss_jordan.cc?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/gauss_jordan.txt?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/gr_svd.cc?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/gr_svd.txt?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/lu.cc?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/lu.txt?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/qr.cc?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/qr.txt?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/regression.h?cvsroot=toon&r1=1.3&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/simplex.cc?cvsroot=toon&r1=1.3&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/simplex.txt?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/slice.cc?cvsroot=toon&r1=1.4&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/slice.txt?cvsroot=toon&r1=1.4&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/so3.cc?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/so3.txt?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/sym_eigen.cc?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/sym_eigen.m?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/sym_eigen.txt?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/vector_resize.cc?cvsroot=toon&r1=1.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/regressions/vector_resize.txt?cvsroot=toon&r1=1.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/SXX_test.cc?cvsroot=toon&r1=1.12&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/as_foo.cc?cvsroot=toon&r1=1.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/brent_test.cc?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/cg_test.cc?cvsroot=toon&r1=1.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/cg_view.gnuplot?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/deriv_test.cc?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/diagslice.cc?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/dynamic_test.cc?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/fadbad.cpp?cvsroot=toon&r1=1.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/gaussian_elimination_test.cc?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/golden_test.cc?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/identity_test.cc?cvsroot=toon&r1=1.5&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/log.cc?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/lutest.cc?cvsroot=toon&r1=1.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/make_vector.cc?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/makevector.cc?cvsroot=toon&r1=1.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/mat_test.cc?cvsroot=toon&r1=1.6&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/mat_test2.cc?cvsroot=toon&r1=1.4&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/mmult_test.cc?cvsroot=toon&r1=1.3&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/normalize_test.cc?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/normalize_test2.cc?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/scalars.cc?cvsroot=toon&r1=1.5&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/simplex_view.gnuplot?cvsroot=toon&r1=1.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/sl.cc?cvsroot=toon&r1=1.5&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/slice_test.cc?cvsroot=toon&r1=1.7&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/svd_test.cc?cvsroot=toon&r1=1.3&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/sym.cc?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/test2.cc?cvsroot=toon&r1=1.7&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/test3.cc?cvsroot=toon&r1=1.7&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/test_data.cc?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/test_foreign.cc?cvsroot=toon&r1=1.6&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/un_project.cc?cvsroot=toon&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/TooN/test/vec_test.cc?cvsroot=toon&r1=1.5&r2=0

Patches:
Index: Authors
===================================================================
RCS file: Authors
diff -N Authors
--- Authors     9 Jun 2005 09:31:54 -0000       1.2
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,5 +0,0 @@
-Created by Tom Drummond
-
-Contributions from Ethan Eade, Edward Rosten, Chris Kemp, Georg Klein, 
-Timothy Gann, Paul Smith
-

Index: COPYING
===================================================================
RCS file: COPYING
diff -N COPYING
--- COPYING     6 May 2009 10:01:21 -0000       1.3
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,20 +0,0 @@
-This library is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free Software
-Foundation; either version 2, or (at your option) any later version.
-
-As a special exception, you may use these files as part of a free software
-library without restriction.  Specifically, if other files instantiate
-templates or use macros or inline functions from this library, or you compile
-this library and link it with other files to produce an executable, this
-library does not by itself cause the resulting executable to be covered by the
-GNU General Public License.  This exception does not however invalidate any
-other reasons why the executable file might be covered by the GNU General
-Public License.
-
-This library is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License along with
-this library; see the file GPL.txt.  If not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

Index: Cholesky.h
===================================================================
RCS file: Cholesky.h
diff -N Cholesky.h
--- Cholesky.h  13 Sep 2011 13:00:49 -0000      1.40
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,268 +0,0 @@
-// -*- c++ -*-
-
-//     Copyright (C) 2009 Tom Drummond (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-
-#ifndef TOON_INCLUDE_CHOLESKY_H
-#define TOON_INCLUDE_CHOLESKY_H
-
-#include <TooN/TooN.h>
-
-namespace TooN {
-
-
-/**
-Decomposes a positive-semidefinite symmetric matrix A (such as a covariance) 
into L*D*L^T, where L is lower-triangular and D is diagonal.
-Also can compute the classic A = L*L^T, with L lower triangular.  The LDL^T 
form is faster to compute than the classical Cholesky decomposition. 
-Use get_unscaled_L() and get_D() to access the individual matrices of L*D*L^T 
decomposition. Use get_L() to access the lower triangular matrix of the classic 
Cholesky decomposition L*L^T.
-The decomposition can be used to compute A^-1*x, A^-1*M, M*A^-1*M^T, and A^-1 
itself, though the latter rarely needs to be explicitly represented.
-Also efficiently computes det(A) and rank(A).
-It can be used as follows:
address@hidden
-// Declare some matrices.
-Matrix<3> A = ...; // we'll pretend it is pos-def
-Matrix<2,3> M;
-Matrix<2> B;
-Vector<3> y = make_Vector(2,3,4);
-// create the Cholesky decomposition of A
-Cholesky<3> chol(A);
-// compute x = A^-1 * y
-x = cholA.backsub(y);
-//compute A^-1
-Matrix<3> Ainv = cholA.get_inverse();
address@hidden
address@hidden gDecomps
-
-Cholesky decomposition of a symmetric matrix.
-Only the lower half of the matrix is considered
-This uses the non-sqrt version of the decomposition
-giving symmetric M = L*D*L.T() where the diagonal of L contains ones
address@hidden Size the size of the matrix
address@hidden Precision the precision of the entries in the matrix and its 
decomposition
-**/
-template <int Size=Dynamic, class Precision=DefaultPrecision>
-class Cholesky {
-public:
-       Cholesky(){}
-
-    /// Construct the Cholesky decomposition of a matrix. This initialises the 
class, and
-    /// performs the decomposition immediately.
-    /// Run time is O(N^3)
-       template<class P2, class B2>
-       Cholesky(const Matrix<Size, Size, P2, B2>& m)
-               : my_cholesky(m) {
-               SizeMismatch<Size,Size>::test(m.num_rows(), m.num_cols());
-               do_compute();
-       }
-       
-       /// Constructor for Size=Dynamic
-       Cholesky(int size) : my_cholesky(size,size) {}
-
-
-    /// Compute the LDL^T decomposition of another matrix.
-    /// Run time is O(N^3)
-       template<class P2, class B2> void compute(const Matrix<Size, Size, P2, 
B2>& m){
-               SizeMismatch<Size,Size>::test(m.num_rows(), m.num_cols());
-               SizeMismatch<Size,Size>::test(m.num_rows(), 
my_cholesky.num_rows());
-               my_cholesky=m;
-               do_compute();
-       }
-       
-       private:
-       void do_compute() {
-               int size=my_cholesky.num_rows();
-               for(int col=0; col<size; col++){
-                       Precision inv_diag = 1;
-                       for(int row=col; row < size; row++){
-                               // correct for the parts of cholesky already 
computed
-                               Precision val = my_cholesky(row,col);
-                               for(int col2=0; col2<col; col2++){
-                                       // 
val-=my_cholesky(col,col2)*my_cholesky(row,col2)*my_cholesky(col2,col2);
-                                       
val-=my_cholesky(col2,col)*my_cholesky(row,col2);
-                               }
-                               if(row==col){
-                                       // this is the diagonal element so 
don't divide
-                                       my_cholesky(row,col)=val;
-                                       if(val == 0){
-                                               my_rank = row;
-                                               return;
-                                       }
-                                       inv_diag=1/val;
-                               } else {
-                                       // cache the value without division in 
the upper half
-                                       my_cholesky(col,row)=val;
-                                       // divide my the diagonal element for 
all others
-                                       my_cholesky(row,col)=val*inv_diag;
-                               }
-                       }
-               }
-               my_rank = size;
-       }
-
-       public:
-
-       /// Compute x = A^-1*v
-    /// Run time is O(N^2)
-       template<int Size2, class P2, class B2>
-       Vector<Size, Precision> backsub (const Vector<Size2, P2, B2>& v) const {
-               int size=my_cholesky.num_rows();
-               SizeMismatch<Size,Size2>::test(size, v.size());
-
-               // first backsub through L
-               Vector<Size, Precision> y(size);
-               for(int i=0; i<size; i++){
-                       Precision val = v[i];
-                       for(int j=0; j<i; j++){
-                               val -= my_cholesky(i,j)*y[j];
-                       }
-                       y[i]=val;
-               }
-               
-               // backsub through diagonal
-               for(int i=0; i<size; i++){
-                       y[i]/=my_cholesky(i,i);
-               }
-
-               // backsub through L.T()
-               Vector<Size,Precision> result(size);
-               for(int i=size-1; i>=0; i--){
-                       Precision val = y[i];
-                       for(int j=i+1; j<size; j++){
-                               val -= my_cholesky(j,i)*result[j];
-                       }
-                       result[i]=val;
-               }
-
-               return result;
-       }
-
-       /**overload
-       */
-       template<int Size2, int C2, class P2, class B2>
-       Matrix<Size, C2, Precision> backsub (const Matrix<Size2, C2, P2, B2>& 
m) const {
-               int size=my_cholesky.num_rows();
-               SizeMismatch<Size,Size2>::test(size, m.num_rows());
-
-               // first backsub through L
-               Matrix<Size, C2, Precision> y(size, m.num_cols());
-               for(int i=0; i<size; i++){
-                       Vector<C2, Precision> val = m[i];
-                       for(int j=0; j<i; j++){
-                               val -= my_cholesky(i,j)*y[j];
-                       }
-                       y[i]=val;
-               }
-               
-               // backsub through diagonal
-               for(int i=0; i<size; i++){
-                       y[i]*=(1/my_cholesky(i,i));
-               }
-
-               // backsub through L.T()
-               Matrix<Size,C2,Precision> result(size, m.num_cols());
-               for(int i=size-1; i>=0; i--){
-                       Vector<C2,Precision> val = y[i];
-                       for(int j=i+1; j<size; j++){
-                               val -= my_cholesky(j,i)*result[j];
-                       }
-                       result[i]=val;
-               }
-               return result;
-       }
-
-
-    /// Compute A^-1 and store in M
-    /// Run time is O(N^3)
-       // easy way to get inverse - could be made more efficient
-       Matrix<Size,Size,Precision> get_inverse(){
-               Matrix<Size,Size,Precision>I(Identity(my_cholesky.num_rows()));
-               return backsub(I);
-       }
-       
-       ///Compute the determinant.
-       Precision determinant(){
-               Precision answer=my_cholesky(0,0);
-               for(int i=1; i<my_cholesky.num_rows(); i++){
-                       answer*=my_cholesky(i,i);
-               }
-               return answer;
-       }
-
-       template <int Size2, typename P2, typename B2>
-       Precision mahalanobis(const Vector<Size2, P2, B2>& v) const {
-               return v * backsub(v);
-       }
-
-       Matrix<Size,Size,Precision> get_unscaled_L() const {
-               Matrix<Size,Size,Precision> m(my_cholesky.num_rows(),
-                                             my_cholesky.num_rows());
-               m=Identity;
-               for (int i=1;i<my_cholesky.num_rows();i++) {
-                       for (int j=0;j<i;j++) {
-                               m(i,j)=my_cholesky(i,j);
-                       }
-               }
-               return m;
-       }
-                       
-       Matrix<Size,Size,Precision> get_D() const {
-               Matrix<Size,Size,Precision> m(my_cholesky.num_rows(),
-                                             my_cholesky.num_rows());
-               m=Zeros;
-               for (int i=0;i<my_cholesky.num_rows();i++) {
-                       m(i,i)=my_cholesky(i,i);
-               }
-               return m;
-       }
-       
-       Matrix<Size,Size,Precision> get_L() const {
-               using std::sqrt;
-               Matrix<Size,Size,Precision> m(my_cholesky.num_rows(),
-                                             my_cholesky.num_rows());
-               m=Zeros;
-               for (int j=0;j<my_cholesky.num_cols();j++) {
-                       Precision sqrtd=sqrt(my_cholesky(j,j));
-                       m(j,j)=sqrtd;
-                       for (int i=j+1;i<my_cholesky.num_rows();i++) {
-                               m(i,j)=my_cholesky(i,j)*sqrtd;
-                       }
-               }
-               return m;
-       }
-
-       int rank() const { return my_rank; }
-
-private:
-       Matrix<Size,Size,Precision> my_cholesky;
-       int my_rank;
-};
-
-
-}
-
-#endif

Index: Doxyfile
===================================================================
RCS file: Doxyfile
diff -N Doxyfile
--- Doxyfile    3 Nov 2010 16:14:20 -0000       1.16
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,1121 +0,0 @@
-# Doxyfile 1.3.6
-
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project
-#
-# All text after a hash (#) is considered a comment and will be ignored
-# The format is:
-#       TAG = value [value, ...]
-# For lists items can also be appended using:
-#       TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (" ")
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
-# by quotes) that should identify the project.
-
-PROJECT_NAME           = TooN
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
-# This could be handy for archiving the generated documentation or 
-# if some version control system is used.
-
-PROJECT_NUMBER         = 2.0.0-beta8
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
-# base path where the generated documentation will be put. 
-# If a relative path is entered, it will be relative to the location 
-# where doxygen was started. If left blank the current directory will be used.
-
-OUTPUT_DIRECTORY       = 
-
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
-# documentation generated by doxygen is written. Doxygen will use this 
-# information to generate all constant output in the proper language. 
-# The default language is English, other supported languages are: 
-# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, 
Dutch, 
-# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en 
-# (Japanese with English messages), Korean, Korean-en, Norwegian, Polish, 
Portuguese, 
-# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
-
-OUTPUT_LANGUAGE        = English
-
-# This tag can be used to specify the encoding used in the generated output. 
-# The encoding is not always determined by the language that is chosen, 
-# but also whether or not the output is meant for Windows or non-Windows 
users. 
-# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES 
-# forces the Windows encoding (this is the default for the Windows binary), 
-# whereas setting the tag to NO uses a Unix-style encoding (the default for 
-# all platforms other than Windows).
-
-#USE_WINDOWS_ENCODING   = NO
-
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
-# include brief member descriptions after the members that are listed in 
-# the file and class documentation (similar to JavaDoc). 
-# Set to NO to disable this.
-
-BRIEF_MEMBER_DESC      = NO
-
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
-# the brief description of a member or function before the detailed 
description. 
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
-# brief descriptions will be completely suppressed.
-
-REPEAT_BRIEF           = YES
-
-# This tag implements a quasi-intelligent brief description abbreviator 
-# that is used to form the text in various listings. Each string 
-# in this list, if found as the leading text of the brief description, will be 
-# stripped from the text and the result after processing the whole list, is 
used 
-# as the annotated text. Otherwise, the brief description is used as-is. If 
left 
-# blank, the following values are used ("$name" is automatically replaced with 
the 
-# name of the entity): "The $name class" "The $name widget" "The $name file" 
-# "is" "provides" "specifies" "contains" "represents" "a" "an" "the"
-
-ABBREVIATE_BRIEF       = 
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
-# Doxygen will generate a detailed section even if there is only a brief 
-# description.
-
-ALWAYS_DETAILED_SEC    = NO
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
inherited 
-# members of a class in the documentation of that class as if those members 
were 
-# ordinary class members. Constructors, destructors and assignment operators 
of 
-# the base classes will not be shown.
-
-INLINE_INHERITED_MEMB  = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
-# path before files name in the file list and in the header files. If set 
-# to NO the shortest path that makes the file name unique will be used.
-
-FULL_PATH_NAMES        = YES
-
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
-# can be used to strip a user-defined part of the path. Stripping is 
-# only done if one of the specified strings matches the left-hand part of 
-# the path. It is allowed to use relative paths in the argument list. 
-# If left blank the directory from which doxygen is run is used as the 
-# path to strip.
-
-STRIP_FROM_PATH        = 
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
-# (but less readable) file names. This can be useful is your file systems 
-# doesn't support long names like on DOS, Mac, or CD-ROM.
-
-SHORT_NAMES            = NO
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
-# will interpret the first line (until the first dot) of a JavaDoc-style 
-# comment as the brief description. If set to NO, the JavaDoc 
-# comments will behave just like the Qt-style comments (thus requiring an 
-# explicit @brief command for a brief description.
-
-JAVADOC_AUTOBRIEF      = YES
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
-# comments) as a brief description. This used to be the default behaviour. 
-# The new default is to treat a multi-line C++ comment block as a detailed 
-# description. Set this tag to YES if you prefer the old behaviour instead.
-
-MULTILINE_CPP_IS_BRIEF = NO
-
-# If the DETAILS_AT_TOP tag is set to YES then Doxygen 
-# will output the detailed description near the top, like JavaDoc.
-# If set to NO, the detailed description appears after the member 
-# documentation.
-
-#DETAILS_AT_TOP         = NO
-
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
-# member inherits the documentation from any documented member that it 
-# re-implements.
-
-INHERIT_DOCS           = YES
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
-# tag is set to YES, then doxygen will reuse the documentation of the first 
-# member in the group (if any) for the other members of the group. By default 
-# all members of a group must be documented explicitly.
-
-DISTRIBUTE_GROUP_DOC   = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
-# Doxygen uses this value to replace tabs by spaces in code fragments.
-
-TAB_SIZE               = 4
-
-# This tag can be used to specify a number of aliases that acts 
-# as commands in the documentation. An alias has the form "name=value". 
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
-# put the command \sideeffect (or @sideeffect) in the documentation, which 
-# will result in a user-defined paragraph with heading "Side Effects:". 
-# You can put \n's in the value part of an alias to insert newlines.
-
-ALIASES                = 
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
sources 
-# only. Doxygen will then generate output that is more tailored for C. 
-# For instance, some of the names that are used will be different. The list 
-# of all members will be omitted, etc.
-
-OPTIMIZE_OUTPUT_FOR_C  = NO
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
sources 
-# only. Doxygen will then generate output that is more tailored for Java. 
-# For instance, namespaces will be presented as packages, qualified scopes 
-# will look different, etc.
-
-OPTIMIZE_OUTPUT_JAVA   = NO
-
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
-# the same type (for instance a group of public functions) to be put as a 
-# subgroup of that type (e.g. under the Public Functions section). Set it to 
-# NO to prevent subgrouping. Alternatively, this can be done per class using 
-# the \nosubgrouping command.
-
-SUBGROUPING            = YES
-
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
-# documentation are documented, even if no documentation was available. 
-# Private class members and static file members will be hidden unless 
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
-
-EXTRACT_ALL            = NO
-
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
-# will be included in the documentation.
-
-EXTRACT_PRIVATE        = NO
-
-# If the EXTRACT_STATIC tag is set to YES all static members of a file 
-# will be included in the documentation.
-
-EXTRACT_STATIC         = YES
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
-# defined locally in source files will be included in the documentation. 
-# If set to NO only classes defined in header files are included.
-
-EXTRACT_LOCAL_CLASSES  = YES
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
-# undocumented members of documented classes, files or namespaces. 
-# If set to NO (the default) these members will be included in the 
-# various overviews, but no documentation section is generated. 
-# This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_MEMBERS     = NO
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
-# undocumented classes that are normally visible in the class hierarchy. 
-# If set to NO (the default) these classes will be included in the various 
-# overviews. This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_CLASSES     = NO
-
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
-# friend (class|struct|union) declarations. 
-# If set to NO (the default) these declarations will be included in the 
-# documentation.
-
-HIDE_FRIEND_COMPOUNDS  = YES
-
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
-# documentation blocks found inside the body of a function. 
-# If set to NO (the default) these blocks will be appended to the 
-# function's detailed documentation block.
-
-HIDE_IN_BODY_DOCS      = NO
-
-# The INTERNAL_DOCS tag determines if documentation 
-# that is typed after a \internal command is included. If the tag is set 
-# to NO (the default) then the documentation will be excluded. 
-# Set it to YES to include the internal documentation.
-
-INTERNAL_DOCS          = NO
-
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
-# file names in lower-case letters. If set to YES upper-case letters are also 
-# allowed. This is useful if you have classes or files whose names only differ 
-# in case and if your file system supports case sensitive file names. Windows 
-# users are advised to set this option to NO.
-
-CASE_SENSE_NAMES       = YES
-
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
-# will show members with their full class and namespace scopes in the 
-# documentation. If set to YES the scope will be hidden.
-
-HIDE_SCOPE_NAMES       = YES 
-
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
-# will put a list of the files that are included by a file in the 
documentation 
-# of that file.
-
-SHOW_INCLUDE_FILES     = YES
-
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
-# is inserted in the documentation for inline members.
-
-INLINE_INFO            = NO
-
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
-# will sort the (detailed) documentation of file and class members 
-# alphabetically by member name. If set to NO the members will appear in 
-# declaration order.
-
-SORT_MEMBER_DOCS       = NO
-
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
-# brief documentation of file, namespace and class members alphabetically 
-# by member name. If set to NO (the default) the members will appear in 
-# declaration order.
-
-SORT_BRIEF_DOCS        = NO
-
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
-# sorted by fully-qualified names, including namespaces. If set to 
-# NO (the default), the class list will be sorted only by class name, 
-# not including the namespace part. 
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the 
-# alphabetical list.
-
-SORT_BY_SCOPE_NAME     = NO
-
-# The GENERATE_TODOLIST tag can be used to enable (YES) or 
-# disable (NO) the todo list. This list is created by putting \todo 
-# commands in the documentation.
-
-GENERATE_TODOLIST      = YES
-
-# The GENERATE_TESTLIST tag can be used to enable (YES) or 
-# disable (NO) the test list. This list is created by putting \test 
-# commands in the documentation.
-
-GENERATE_TESTLIST      = YES
-
-# The GENERATE_BUGLIST tag can be used to enable (YES) or 
-# disable (NO) the bug list. This list is created by putting \bug 
-# commands in the documentation.
-
-GENERATE_BUGLIST       = YES
-
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
-# disable (NO) the deprecated list. This list is created by putting 
-# \deprecated commands in the documentation.
-
-GENERATE_DEPRECATEDLIST= NO
-
-# The ENABLED_SECTIONS tag can be used to enable conditional 
-# documentation sections, marked by \if sectionname ... \endif.
-
-ENABLED_SECTIONS       = IGNORE
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
-# the initial value of a variable or define consists of for it to appear in 
-# the documentation. If the initializer consists of more lines than specified 
-# here it will be hidden. Use a value of 0 to hide initializers completely. 
-# The appearance of the initializer of individual variables and defines in the 
-# documentation can be controlled using \showinitializer or \hideinitializer 
-# command in the documentation regardless of this setting.
-
-MAX_INITIALIZER_LINES  = 30
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
-# at the bottom of the documentation of classes and structs. If set to YES the 
-# list will mention the files that were used to generate the documentation.
-
-SHOW_USED_FILES        = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-
-# The QUIET tag can be used to turn on/off the messages that are generated 
-# by doxygen. Possible values are YES and NO. If left blank NO is used.
-
-QUIET                  = NO
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are 
-# generated by doxygen. Possible values are YES and NO. If left blank 
-# NO is used.
-
-WARNINGS               = YES
-
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
-# automatically be disabled.
-
-WARN_IF_UNDOCUMENTED   = YES
-
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
-# potential errors in the documentation, such as not documenting some 
-# parameters in a documented function, or documenting parameters that 
-# don't exist or using markup commands wrongly.
-
-WARN_IF_DOC_ERROR      = YES
-
-# The WARN_FORMAT tag determines the format of the warning messages that 
-# doxygen can produce. The string should contain the $file, $line, and $text 
-# tags, which will be replaced by the file and line number from which the 
-# warning originated and the warning text.
-
-WARN_FORMAT            = "$file:$line: $text"
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning 
-# and error messages should be written. If left blank the output is written 
-# to stderr.
-
-WARN_LOGFILE           = 
-
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-
-# The INPUT tag can be used to specify the files and/or directories that 
contain 
-# documented source files. You may enter file names like "myfile.cpp" or 
-# directories like "/usr/src/myproject". Separate the files or directories 
-# with spaces.
-
-INPUT                  = . doc/documentation.h optimization internal 
functions/derivatives.h doc/cramer.h
-
-# If the value of the INPUT tag contains directories, you can use the 
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
-# and *.h) to filter out the source-files in the directories. If left 
-# blank the following patterns are tested: 
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh 
*.hxx *.hpp 
-# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc
-
-FILE_PATTERNS          = *.h *.hh
-
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
-# should be searched for input files as well. Possible values are YES and NO. 
-# If left blank NO is used.
-
-RECURSIVE              = NO
-
-# The EXCLUDE tag can be used to specify files and/or directories that should 
-# excluded from the INPUT source files. This way you can easily exclude a 
-# subdirectory from a directory tree whose root is specified with the INPUT 
tag.
-
-EXCLUDE                =  wls_cholesky.h lapack.h internal/make_vector.hh 
internal/builtin_typeof.h internal/data_functions.hh
-
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
directories 
-# that are symbolic links (a Unix filesystem feature) are excluded from the 
input.
-
-EXCLUDE_SYMLINKS       = NO
-
-# If the value of the INPUT tag contains directories, you can use the 
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
-# certain files from those directories.
-
-EXCLUDE_PATTERNS       = 
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or 
-# directories that contain example code fragments that are included (see 
-# the \include command).
-
-EXAMPLE_PATH           = 
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
-# and *.h) to filter out the source-files in the directories. If left 
-# blank all files are included.
-
-EXAMPLE_PATTERNS       = 
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
-# searched for input files to be used with the \include or \dontinclude 
-# commands irrespective of the value of the RECURSIVE tag. 
-# Possible values are YES and NO. If left blank NO is used.
-
-EXAMPLE_RECURSIVE      = NO
-
-# The IMAGE_PATH tag can be used to specify one or more files or 
-# directories that contain image that are included in the documentation (see 
-# the \image command).
-
-IMAGE_PATH             =  doc/
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should 
-# invoke to filter for each input file. Doxygen will invoke the filter program 
-# by executing (via popen()) the command <filter> <input-file>, where <filter> 
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
-# input file. Doxygen will then use the output that the filter program writes 
-# to standard output.
-
-INPUT_FILTER           = 
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
-# INPUT_FILTER) will be used to filter the input files when producing source 
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).
-
-FILTER_SOURCE_FILES    = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to source browsing
-#---------------------------------------------------------------------------
-
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
-# be generated. Documented entities will be cross-referenced with these 
sources. 
-# Note: To get rid of all source code in the generated output, make sure also 
-# VERBATIM_HEADERS is set to NO.
-
-SOURCE_BROWSER         = NO
-
-# Setting the INLINE_SOURCES tag to YES will include the body 
-# of functions and classes directly in the documentation.
-
-INLINE_SOURCES         = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
-# doxygen to hide any special comment blocks from generated source code 
-# fragments. Normal C and C++ comments will always remain visible.
-
-STRIP_CODE_COMMENTS    = NO
-
-# If the REFERENCED_BY_RELATION tag is set to YES (the default) 
-# then for each documented function all documented 
-# functions referencing it will be listed.
-
-REFERENCED_BY_RELATION = YES
-
-# If the REFERENCES_RELATION tag is set to YES (the default) 
-# then for each documented function all documented entities 
-# called/used by that function will be listed.
-
-REFERENCES_RELATION    = YES
-
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
-# will generate a verbatim copy of the header file for each class for 
-# which an include is specified. Set to NO to disable this.
-
-VERBATIM_HEADERS       = YES
-
-#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
-# of all compounds will be generated. Enable this if the project 
-# contains a lot of classes, structs, unions or interfaces.
-
-ALPHABETICAL_INDEX     = NO
-
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
-# in which this list will be split (can be a number in the range [1..20])
-
-COLS_IN_ALPHA_INDEX    = 5
-
-# In case all classes in a project start with a common prefix, all 
-# classes will be put under the same header in the alphabetical index. 
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
-# should be ignored while generating the index headers.
-
-IGNORE_PREFIX          = 
-
-#---------------------------------------------------------------------------
-# configuration options related to the HTML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
-# generate HTML output.
-
-GENERATE_HTML          = YES
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `html' will be used as the default path.
-
-HTML_OUTPUT            = html
-
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
-# doxygen will generate files with .html extension.
-
-HTML_FILE_EXTENSION    = .html
-
-# The HTML_HEADER tag can be used to specify a personal HTML header for 
-# each generated HTML page. If it is left blank doxygen will generate a 
-# standard header.
-
-HTML_HEADER            = 
-
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
-# each generated HTML page. If it is left blank doxygen will generate a 
-# standard footer.
-
-HTML_FOOTER            = 
-
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
-# style sheet that is used by each HTML page. It can be used to 
-# fine-tune the look of the HTML output. If the tag is left blank doxygen 
-# will generate a default style sheet. Note that doxygen will try to copy 
-# the style sheet file to the HTML output directory, so don't put your own 
-# stylesheet in the HTML output directory as well, or it will be erased!
-
-HTML_STYLESHEET        = 
-
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
-# files or namespaces will be aligned in HTML using tables. If set to 
-# NO a bullet list will be used.
-
-HTML_ALIGN_MEMBERS     = YES
-
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
-# will be generated that can be used as input for tools like the 
-# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) 
-# of the generated HTML documentation.
-
-GENERATE_HTMLHELP      = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
-# be used to specify the file name of the resulting .chm file. You 
-# can add a path in front of the file if the result should not be 
-# written to the html output directory.
-
-CHM_FILE               = 
-
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
-# be used to specify the location (absolute path including file name) of 
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
-# the HTML help compiler on the generated index.hhp.
-
-HHC_LOCATION           = 
-
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
-# controls if a separate .chi index file is generated (YES) or that 
-# it should be included in the master .chm file (NO).
-
-GENERATE_CHI           = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
-# controls whether a binary table of contents is generated (YES) or a 
-# normal table of contents (NO) in the .chm file.
-
-BINARY_TOC             = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members 
-# to the contents of the HTML help documentation and to the tree view.
-
-TOC_EXPAND             = NO
-
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
-# top of each HTML page. The value NO (the default) enables the index and 
-# the value YES disables it.
-
-DISABLE_INDEX          = NO
-
-# This tag can be used to set the number of enum values (range [1..20]) 
-# that doxygen will group on one line in the generated HTML documentation.
-
-ENUM_VALUES_PER_LINE   = 4
-
-# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
-# generated containing a tree-like index structure (just like the one that 
-# is generated for HTML Help). For this to work a browser that supports 
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
-# probably better off using the HTML help feature.
-
-GENERATE_TREEVIEW      = NO
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
-# used to set the initial width (in pixels) of the frame in which the tree 
-# is shown.
-
-TREEVIEW_WIDTH         = 250
-
-#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
-# generate Latex output.
-
-GENERATE_LATEX         = NO
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `latex' will be used as the default path.
-
-LATEX_OUTPUT           = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
-# invoked. If left blank `latex' will be used as the default command name.
-
-LATEX_CMD_NAME         = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
-# generate index for LaTeX. If left blank `makeindex' will be used as the 
-# default command name.
-
-MAKEINDEX_CMD_NAME     = makeindex
-
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
-# LaTeX documents. This may be useful for small projects and may help to 
-# save some trees in general.
-
-COMPACT_LATEX          = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used 
-# by the printer. Possible values are: a4, a4wide, letter, legal and 
-# executive. If left blank a4wide will be used.
-
-PAPER_TYPE             = a4wide
-
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
-# packages that should be included in the LaTeX output.
-
-EXTRA_PACKAGES         = amsmath \
-                         amssymb
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
-# the generated latex document. The header should contain everything until 
-# the first chapter. If it is left blank doxygen will generate a 
-# standard header. Notice: only use this tag if you know what you are doing!
-
-LATEX_HEADER           = 
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
-# contain links (just like the HTML output) instead of page references 
-# This makes the output suitable for online browsing using a pdf viewer.
-
-PDF_HYPERLINKS         = NO
-
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
-# plain latex in the generated Makefile. Set this option to YES to get a 
-# higher quality PDF documentation.
-
-USE_PDFLATEX           = NO
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
-# command to the generated LaTeX files. This will instruct LaTeX to keep 
-# running if errors occur, instead of asking the user for help. 
-# This option is also used when generating formulas in HTML.
-
-LATEX_BATCHMODE        = NO
-
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
-# include the index chapters (such as File Index, Compound Index, etc.) 
-# in the output.
-
-LATEX_HIDE_INDICES     = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
-# The RTF output is optimized for Word 97 and may not look very pretty with 
-# other RTF readers or editors.
-
-GENERATE_RTF           = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `rtf' will be used as the default path.
-
-RTF_OUTPUT             = rtf
-
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
-# RTF documents. This may be useful for small projects and may help to 
-# save some trees in general.
-
-COMPACT_RTF            = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
-# will contain hyperlink fields. The RTF file will 
-# contain links (just like the HTML output) instead of page references. 
-# This makes the output suitable for online browsing using WORD or other 
-# programs which support those fields. 
-# Note: wordpad (write) and others do not support links.
-
-RTF_HYPERLINKS         = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's 
-# config file, i.e. a series of assignments. You only have to provide 
-# replacements, missing definitions are set to their default value.
-
-RTF_STYLESHEET_FILE    = 
-
-# Set optional variables used in the generation of an rtf document. 
-# Syntax is similar to doxygen's config file.
-
-RTF_EXTENSIONS_FILE    = 
-
-#---------------------------------------------------------------------------
-# configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
-# generate man pages
-
-GENERATE_MAN           = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `man' will be used as the default path.
-
-MAN_OUTPUT             = man
-
-# The MAN_EXTENSION tag determines the extension that is added to 
-# the generated man pages (default is the subroutine's section .3)
-
-MAN_EXTENSION          = .3
-
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
-# then it will generate one additional man file for each entity 
-# documented in the real man page(s). These additional files 
-# only source the real man page, but without them the man command 
-# would be unable to find the correct page. The default is NO.
-
-MAN_LINKS              = YES
-
-#---------------------------------------------------------------------------
-# configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES Doxygen will 
-# generate an XML file that captures the structure of 
-# the code including all documentation.
-
-GENERATE_XML           = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `xml' will be used as the default path.
-
-XML_OUTPUT             = xml
-
-# The XML_SCHEMA tag can be used to specify an XML schema, 
-# which can be used by a validating XML parser to check the 
-# syntax of the XML files.
-
-XML_SCHEMA             = 
-
-# The XML_DTD tag can be used to specify an XML DTD, 
-# which can be used by a validating XML parser to check the 
-# syntax of the XML files.
-
-XML_DTD                = 
-
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
-# dump the program listings (including syntax highlighting 
-# and cross-referencing information) to the XML output. Note that 
-# enabling this will significantly increase the size of the XML output.
-
-XML_PROGRAMLISTING     = YES
-
-#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
-# generate an AutoGen Definitions (see autogen.sf.net) file 
-# that captures the structure of the code including all 
-# documentation. Note that this feature is still experimental 
-# and incomplete at the moment.
-
-GENERATE_AUTOGEN_DEF   = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
-# generate a Perl module file that captures the structure of 
-# the code including all documentation. Note that this 
-# feature is still experimental and incomplete at the 
-# moment.
-
-GENERATE_PERLMOD       = NO
-
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
-# to generate PDF and DVI output from the Perl module output.
-
-PERLMOD_LATEX          = NO
-
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
-# nicely formatted so it can be parsed by a human reader.  This is useful 
-# if you want to understand what is going on.  On the other hand, if this 
-# tag is set to NO the size of the Perl module output will be much smaller 
-# and Perl will parse it just the same.
-
-PERLMOD_PRETTY         = YES
-
-# The names of the make variables in the generated doxyrules.make file 
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
-# This is useful so different doxyrules.make files included by the same 
-# Makefile don't overwrite each other's variables.
-
-PERLMOD_MAKEVAR_PREFIX = 
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor   
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
-# evaluate all C-preprocessor directives found in the sources and include 
-# files.
-
-ENABLE_PREPROCESSING   = YES
-
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
-# names in the source code. If set to NO (the default) only conditional 
-# compilation will be performed. Macro expansion can be done in a controlled 
-# way by setting EXPAND_ONLY_PREDEF to YES.
-
-MACRO_EXPANSION        = NO
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
-# then the macro expansion is limited to the macros specified with the 
-# PREDEFINED and EXPAND_AS_PREDEFINED tags.
-
-EXPAND_ONLY_PREDEF     = NO
-
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
-# in the INCLUDE_PATH (see below) will be search if a #include is found.
-
-SEARCH_INCLUDES        = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that 
-# contain include files that are not input files but should be processed by 
-# the preprocessor.
-
-INCLUDE_PATH           = 
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
-# patterns (like *.h and *.hpp) to filter out the header-files in the 
-# directories. If left blank, the patterns specified with FILE_PATTERNS will 
-# be used.
-
-INCLUDE_FILE_PATTERNS  = 
-
-# The PREDEFINED tag can be used to specify one or more macro names that 
-# are defined before the preprocessor is started (similar to the -D option of 
-# gcc). The argument of the tag is a list of macros of the form: name 
-# or name=definition (no spaces). If the definition and the = are 
-# omitted =1 is assumed.
-
-PREDEFINED             = DOXYGEN_IGNORE_INTERNAL DOXYGEN_INCLUDE_ONLY_FOR_DOCS
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
-# this tag can be used to specify a list of macro names that should be 
expanded. 
-# The macro definition that is found in the sources will be used. 
-# Use the PREDEFINED tag if you want to use a different macro definition.
-
-EXPAND_AS_DEFINED      = 
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
-# doxygen's preprocessor will remove all function-like macros that are alone 
-# on a line, have an all uppercase name, and do not end with a semicolon. Such 
-# function macros are typically used for boiler-plate code, and will confuse 
the 
-# parser if not removed.
-
-SKIP_FUNCTION_MACROS   = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to external references   
-#---------------------------------------------------------------------------
-
-# The TAGFILES option can be used to specify one or more tagfiles. 
-# Optionally an initial location of the external documentation 
-# can be added for each tagfile. The format of a tag file without 
-# this location is as follows: 
-#   TAGFILES = file1 file2 ... 
-# Adding location for the tag files is done as follows: 
-#   TAGFILES = file1=loc1 "file2 = loc2" ... 
-# where "loc1" and "loc2" can be relative or absolute paths or 
-# URLs. If a location is present for each tag, the installdox tool 
-# does not have to be run to correct the links.
-# Note that each tag file must have a unique name
-# (where the name does NOT include the path)
-# If a tag file is not located in the directory in which doxygen 
-# is run, you must also specify the path to the tagfile here.
-
-TAGFILES               = 
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
-# a tag file that is based on the input files it reads.
-
-GENERATE_TAGFILE       = TooN-doxy.tag
-
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
-# in the class index. If set to NO only the inherited external classes 
-# will be listed.
-
-ALLEXTERNALS           = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
-# in the modules index. If set to NO, only the current project's groups will 
-# be listed.
-
-EXTERNAL_GROUPS        = YES
-
-# The PERL_PATH should be the absolute path and name of the perl script 
-# interpreter (i.e. the result of `which perl').
-
-PERL_PATH              = /usr/bin/perl
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool   
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with 
base or 
-# super classes. Setting the tag to NO turns the diagrams off. Note that this 
-# option is superseded by the HAVE_DOT option below. This is only a fallback. 
It is 
-# recommended to install and use dot, since it yields more powerful graphs.
-
-CLASS_DIAGRAMS         = YES
-
-# If set to YES, the inheritance and collaboration graphs will hide 
-# inheritance and usage relations if the target is undocumented 
-# or is not a class.
-
-HIDE_UNDOC_RELATIONS   = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
-# available from the path. This tool is part of Graphviz, a graph 
visualization 
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
-# have no effect if this option is set to NO (the default)
-
-HAVE_DOT               = NO
-
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
-# will generate a graph for each documented class showing the direct and 
-# indirect inheritance relations. Setting this tag to YES will force the 
-# the CLASS_DIAGRAMS tag to NO.
-
-CLASS_GRAPH            = YES
-
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
-# will generate a graph for each documented class showing the direct and 
-# indirect implementation dependencies (inheritance, containment, and 
-# class references variables) of the class with other documented classes.
-
-COLLABORATION_GRAPH    = YES
-
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
-# collaboration diagrams in a style similar to the OMG's Unified Modeling 
-# Language.
-
-UML_LOOK               = YES
-
-# If set to YES, the inheritance and collaboration graphs will show the 
-# relations between templates and their instances.
-
-TEMPLATE_RELATIONS     = NO
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
-# tags are set to YES then doxygen will generate a graph for each documented 
-# file showing the direct and indirect include dependencies of the file with 
-# other documented files.
-
-INCLUDE_GRAPH          = YES
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
-# documented header file showing the documented files that directly or 
-# indirectly include this file.
-
-INCLUDED_BY_GRAPH      = YES
-
-# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will 
-# generate a call dependency graph for every global function or class method. 
-# Note that enabling this option will significantly increase the time of a 
run. 
-# So in most cases it will be better to enable call graphs for selected 
-# functions only using the \callgraph command.
-
-CALL_GRAPH             = NO
-
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
-# will graphical hierarchy of all classes instead of a textual one.
-
-GRAPHICAL_HIERARCHY    = YES
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
-# generated by dot. Possible values are png, jpg, or gif
-# If left blank png will be used.
-
-DOT_IMAGE_FORMAT       = png
-
-# The tag DOT_PATH can be used to specify the path where the dot tool can be 
-# found. If left blank, it is assumed the dot tool can be found on the path.
-
-DOT_PATH               = 
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that 
-# contain dot files that are included in the documentation (see the 
-# \dotfile command).
-
-DOTFILE_DIRS           = 
-
-# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width 
-# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
-# this value, doxygen will try to truncate the graph, so that it fits within 
-# the specified constraint. Beware that most browsers cannot cope with very 
-# large images.
-
-#MAX_DOT_GRAPH_WIDTH    = 1024
-
-# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height 
-# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
-# this value, doxygen will try to truncate the graph, so that it fits within 
-# the specified constraint. Beware that most browsers cannot cope with very 
-# large images.
-
-#MAX_DOT_GRAPH_HEIGHT   = 1024
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
-# graphs generated by dot. A depth value of 3 means that only nodes reachable 
-# from the root by following a path via at most 3 edges will be shown. Nodes 
that 
-# lay further from the root node will be omitted. Note that setting this 
option to 
-# 1 or 2 may greatly reduce the computation time needed for large code bases. 
Also 
-# note that a graph may be further truncated if the graph's image dimensions 
are 
-# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and 
MAX_DOT_GRAPH_HEIGHT). 
-# If 0 is used for the depth value (the default), the graph is not 
depth-constrained.
-
-MAX_DOT_GRAPH_DEPTH    = 0
-
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
-# generate a legend page explaining the meaning of the various boxes and 
-# arrows in the dot generated graphs.
-
-GENERATE_LEGEND        = YES
-
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
-# remove the intermediate dot files that are used to generate 
-# the various graphs.
-
-DOT_CLEANUP            = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to the search engine   
-#---------------------------------------------------------------------------
-
-# The SEARCHENGINE tag specifies whether or not a search engine should be 
-# used. If set to NO the values of all tags below this one will be ignored.
-
-SEARCHENGINE           = NO
-
-FORMULA_FONTSIZE=15
-FORMULA_SMOOTH_TRANSPARENCY=YES

Index: GPL.txt
===================================================================
RCS file: GPL.txt
diff -N GPL.txt
--- GPL.txt     6 May 2009 10:01:21 -0000       1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,339 +0,0 @@
-                   GNU GENERAL PUBLIC LICENSE
-                      Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                           Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                   GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-                           NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-                    END OF TERMS AND CONDITIONS
-
-           How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.
\ No newline at end of file

Index: GR_SVD.h
===================================================================
RCS file: GR_SVD.h
diff -N GR_SVD.h
--- GR_SVD.h    14 Nov 2011 11:55:44 -0000      1.8
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,526 +0,0 @@
-// -*- c++ -*-
-
-// Copyright (C) 2009 Georg Klein (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-#ifndef __GR_SVD_H
-#define __GR_SVD_H
-
-#include <TooN/TooN.h>
-#include <cmath>
-#include <vector>
-#include <algorithm>
-
-namespace TooN
-{
-  
-  /**
-     @class GR_SVD TooN/GR_SVD.h
-     Performs SVD and back substitute to solve equations.
-     This code is a c++ translation of the FORTRAN routine give in 
-     George E. Forsythe et al, Computer Methods for Mathematical 
-     Computations, Prentice-Hall 1977. That code itself is a 
-     translation of the ALGOL routine by Golub and Reinsch,
-     Num. Math. 14, 403-420, 1970.
-  
-     N.b. the singular values returned by this routine are not sorted.
-     N.b. this also means that even for MxN matrices with M<N, N 
-     singular values are computed and used.
-     
-     The template parameters WANT_U and WANT_V may be set to false to
-     indicate that U and/or V are not needed for a minor speed-up.
-
-        @ingroup gDecomps
-  **/
-  template<int M, int N = M, class Precision = DefaultPrecision, bool WANT_U = 
1, bool WANT_V = 1> 
-  class GR_SVD
-  {
-  public:
-    
-    template<class Precision2, class Base> GR_SVD(const Matrix<M, N, 
Precision2, Base> &A);
-  
-    static const int BigDim = M>N?M:N;
-    static const int SmallDim = M<N?M:N;
-    
-    const Matrix<M,N,Precision>& get_U() { if(!WANT_U) throw(0); return mU;}
-    const Matrix<N,N,Precision>& get_V() { if(!WANT_V) throw(0); return mV;}
-    const Vector<N, Precision>& get_diagonal() {return vDiagonal;}
-    
-    Precision get_largest_singular_value();
-    Precision get_smallest_singular_value();
-    int get_smallest_singular_value_index();
-    
-    ///Return the pesudo-inverse diagonal. The reciprocal of the diagonal 
elements
-    ///is returned if the elements are well scaled with respect to the largest 
element,
-    ///otherwise 0 is returned.
-    ///@param inv_diag Vector in which to return the inverse diagonal.
-    ///@param condition Elements must be larger than this factor times the 
largest diagonal element to be considered well scaled. 
-    void get_inv_diag(Vector<N>& inv_diag, const Precision condition)
-    {
-      Precision dMax = get_largest_singular_value();
-      for(int i=0; i<N; ++i)
-       inv_diag[i] = (vDiagonal[i] * condition > dMax) ? 
-         static_cast<Precision>(1)/vDiagonal[i] : 0;
-    }
-  
-    /// Calculate result of multiplying the (pseudo-)inverse of M by another 
matrix. 
-    /// For a matrix \f$A\f$, this calculates \f$M^{\dagger}A\f$ by back 
substitution 
-    /// (i.e. without explictly calculating the (pseudo-)inverse). 
-    /// See the detailed description for a description of condition variables.
-    template <int Rows2, int Cols2, typename P2, typename B2>
-    Matrix<N,Cols2, typename Internal::MultiplyType<Precision,P2>::type >
-    backsub(const Matrix<Rows2,Cols2,P2,B2>& rhs, const Precision 
condition=1e9)
-    {
-      Vector<N,Precision> inv_diag;
-      get_inv_diag(inv_diag,condition);
-      return (get_V() * diagmult(inv_diag, (get_U().T() * rhs)));
-    }
-
-    /// Calculate result of multiplying the (pseudo-)inverse of M by a vector. 
-    /// For a vector \f$b\f$, this calculates \f$M^{\dagger}b\f$ by back 
substitution 
-    /// (i.e. without explictly calculating the (pseudo-)inverse). 
-    /// See the detailed description for a description of condition variables.
-    template <int Size, typename P2, typename B2>
-    Vector<N, typename Internal::MultiplyType<Precision,P2>::type >
-    backsub(const Vector<Size,P2,B2>& rhs, const Precision condition=1e9)
-    {
-      Vector<N,Precision> inv_diag;
-      get_inv_diag(inv_diag,condition);
-      return (get_V() * diagmult(inv_diag, (get_U().T() * rhs)));
-    }
-
-    /// Get the pseudo-inverse \f$M^{\dagger}\f$
-    Matrix<N,M,Precision> get_pinv(const Precision condition=1e9)
-    {
-      Vector<N,Precision> inv_diag(N);
-      get_inv_diag(inv_diag,condition);
-      return diagmult(get_V(),inv_diag) * get_U().T();
-    }
-
-    /// Reorder the components so the singular values are in descending order
-    void reorder();
-    
-  protected:
-    void Bidiagonalize();
-    void Accumulate_RHS();
-    void Accumulate_LHS();
-    void Diagonalize();
-    bool Diagonalize_SubLoop(int k, Precision &z);
-  
-    Vector<N,Precision> vDiagonal;   
-    Vector<BigDim, Precision> vOffDiagonal;     
-    Matrix<M, N, Precision> mU;
-    Matrix<N, N, Precision> mV;
-    
-    int nError;
-    int nIterations;
-    Precision anorm;
-  };
-
-
-
-  template<int M, int N, class Precision, bool WANT_U, bool WANT_V> 
-  template<class Precision2, class Base> 
-  GR_SVD<M, N, Precision, WANT_U, WANT_V>::GR_SVD(const Matrix<M, N, 
Precision2, Base> &mA)
-  {
-    nError = 0;
-    mU = mA; 
-    Bidiagonalize();
-    Accumulate_RHS();
-    Accumulate_LHS();
-    Diagonalize();
-  };
-
-  template<int M, int N, class Precision, bool WANT_U, bool WANT_V>
-  void GR_SVD<M,N,Precision, WANT_U, WANT_V>::Bidiagonalize()
-  {
-    using std::abs;
-    using std::max;
-    using std::sqrt;
-    // ------------  Householder reduction to bidiagonal form
-    Precision g = 0.0;
-    Precision scale = 0.0;
-    anorm = 0.0;
-    for(int i=0; i<N; ++i) // 300
-      {
-       const int l = i+1; 
-       vOffDiagonal[i] = scale * g;
-       g = 0.0;
-       Precision s = 0.0;
-       scale = 0.0;
-       if( i < M )
-         {
-           for(int k=i; k<M; ++k)
-             scale += abs(mU[k][i]);
-           if(scale != 0.0)
-             {
-               for(int k=i; k<M; ++k)
-                 {
-                   mU[k][i] /= scale;
-                   s += mU[k][i] * mU[k][i];
-                 }
-               Precision f = mU[i][i];
-               g = -(f>=0?sqrt(s):-sqrt(s));
-               Precision h = f * g - s;
-               mU[i][i] = f - g;
-               if(i!=(N-1))
-                 {
-                   for(int j=l; j<N; ++j)
-                     {
-                       s = 0.0;
-                       for(int k=i; k<M; ++k)
-                         s += mU[k][i] * mU[k][j];
-                       f = s / h;
-                       for(int k=i; k<M; ++k)
-                         mU[k][j] += f * mU[k][i]; 
-                     } // 150
-                 }// 190
-               for(int k=i; k<M; ++k)
-                 mU[k][i] *= scale;
-             } // 210 
-         } // 210
-       vDiagonal[i] = scale * g;
-       g = 0.0;
-       s = 0.0;
-       scale = 0.0;
-       if(!(i >= M || i == (N-1)))
-         {
-           for(int k=l; k<N; ++k)
-             scale += abs(mU[i][k]);
-           if(scale != 0.0)
-             {
-               for(int k=l; k<N; k++)
-                 {
-                   mU[i][k] /= scale;
-                   s += mU[i][k] * mU[i][k];
-                 }
-               Precision f = mU[i][l];
-               g = -(f>=0?sqrt(s):-sqrt(s));
-               Precision h = f * g - s;
-               mU[i][l] = f - g;
-               for(int k=l; k<N; ++k)
-                 vOffDiagonal[k] = mU[i][k] / h;
-               if(i != (M-1)) // 270
-                 {
-                   for(int j=l; j<M; ++j)
-                     {
-                       s = 0.0;
-                       for(int k=l; k<N; ++k)
-                         s += mU[j][k] * mU[i][k];
-                       for(int k=l; k<N; ++k)
-                         mU[j][k] += s * vOffDiagonal[k];
-                     } // 260
-                 } // 270
-               for(int k=l; k<N; ++k)
-                 mU[i][k] *= scale;
-             } // 290
-         } // 290
-       anorm = max(anorm, abs(vDiagonal[i]) + abs(vOffDiagonal[i]));
-      } // 300
-
-    // Accumulation of right-hand transformations
-  }
-
-  template<int M, int N, class Precision, bool WANT_U, bool WANT_V>
-  void GR_SVD<M,N,Precision,WANT_U,WANT_V>::Accumulate_RHS()
-  {
-    // Get rid of fakey loop over ii, do a loop over i directly
-    // This here would happen on the first run of the loop with
-    // i = N-1
-    mV[N-1][N-1] = static_cast<Precision>(1);
-    Precision g = vOffDiagonal[N-1];
-  
-    // The loop
-    for(int i=N-2; i>=0; --i) // 400
-      {
-       const int l = i + 1;
-       if( g!=0) // 360
-         { 
-           for(int j=l; j<N; ++j)
-             mV[j][i] = (mU[i][j] / mU[i][l]) / g; // double division avoids 
possible underflow
-           for(int j=l; j<N; ++j)
-             { // 350
-               Precision s = 0;
-               for(int k=l; k<N; ++k)
-                 s += mU[i][k] * mV[k][j];
-               for(int k=l; k<N; ++k)
-                 mV[k][j] += s * mV[k][i];
-             } // 350
-         } // 360
-       for(int j=l; j<N; ++j)
-         mV[i][j] = mV[j][i] = 0;
-       mV[i][i] = static_cast<Precision>(1);
-       g = vOffDiagonal[i];
-      } // 400
-  }
-
-  template<int M, int N, class Precision, bool WANT_U, bool WANT_V>
-  void GR_SVD<M,N,Precision,WANT_U,WANT_V>::Accumulate_LHS()
-  {
-    // Same thing; remove loop over dummy ii and do straight over i
-    // Some implementations start from N here
-    for(int i=SmallDim-1; i>=0; --i)
-      { // 500
-       const int l = i+1;
-       Precision g = vDiagonal[i];
-       // SqSVD here uses i<N ?
-       if(i != (N-1))
-         for(int j=l; j<N; ++j)
-           mU[i][j] = 0.0;
-       if(g == 0.0)
-         for(int j=i; j<M; ++j)
-           mU[j][i] = 0.0;
-       else
-         { // 475
-           // Can pre-divide g here
-           Precision inv_g = static_cast<Precision>(1) / g;
-           if(i != (SmallDim-1))
-             { // 460
-               for(int j=l; j<N; ++j)
-                 { // 450
-                   Precision s = 0;
-                   for(int k=l; k<M; ++k)
-                     s += mU[k][i] * mU[k][j];
-                   Precision f = (s / mU[i][i]) * inv_g;  // double division
-                   for(int k=i; k<M; ++k)
-                     mU[k][j] += f * mU[k][i];
-                 } // 450
-             } // 460
-           for(int j=i; j<M; ++j)
-             mU[j][i] *= inv_g;
-         } // 475
-       mU[i][i] += static_cast<Precision>(1);
-      } // 500
-  }
-  
-  template<int M, int N, class Precision,bool WANT_U, bool WANT_V>
-  void GR_SVD<M,N,Precision,WANT_U,WANT_V>::Diagonalize()
-  {
-    // Loop directly over descending k
-    for(int k=N-1; k>=0; --k)
-      { // 700
-       nIterations = 0;
-       Precision z;
-       bool bConverged_Or_Error = false;
-       do
-         bConverged_Or_Error = Diagonalize_SubLoop(k, z);
-       while(!bConverged_Or_Error);
-       
-       if(nError)
-         return;
-       
-       if(z < 0)
-         {
-           vDiagonal[k] = -z;
-           if(WANT_V)
-             for(int j=0; j<N; ++j)
-               mV[j][k] = -mV[j][k];
-         }
-      } // 700
-  };
-
-
-  template<int M, int N, class Precision, bool WANT_U, bool WANT_V>
-  bool GR_SVD<M,N,Precision,WANT_U, WANT_V>::Diagonalize_SubLoop(int k, 
Precision &z)
-  {
-    using std::abs;
-    using std::sqrt;
-    const int k1 = k-1;
-    // 520 is here!
-    for(int l=k; l>=0; --l)
-      { // 530
-       const int l1 = l-1;
-       const bool rv1_test = ((abs(vOffDiagonal[l]) + anorm) == anorm);
-       const bool w_test = ((abs(vDiagonal[l1]) + anorm) == anorm);
-       if(!rv1_test && w_test) // 540 to 565
-         {
-           Precision c = 0;
-           Precision s = 1.0;
-           for(int i=l; i<=k; ++i)
-             { // 560
-               Precision f = s * vOffDiagonal[i];
-               vOffDiagonal[i] *= c;
-               if((abs(f) + anorm) == anorm)
-                 break; // goto 565, effectively
-               Precision g = vDiagonal[i];
-               Precision h = sqrt(f * f + g * g); // Other implementations do 
this bit better
-               vDiagonal[i] = h;
-               c = g / h;
-               s = -f / h;
-               if(WANT_U)
-                 for(int j=0; j<M; ++j)
-                   {
-                     Precision y = mU[j][l1];
-                     Precision z = mU[j][i];
-                     mU[j][l1] = y*c + z*s;
-                     mU[j][i] = -y*s + z*c;
-                   }
-             } // 560
-         }
-       if(rv1_test || w_test) // line 565
-         {
-           // Check for convergence..
-           z = vDiagonal[k];
-           if(l == k)
-             return true; // convergence.
-           if(nIterations == 30)
-             {
-               nError = k;
-               return true;
-             }
-           ++nIterations;
-           Precision x = vDiagonal[l];
-           Precision y = vDiagonal[k1];
-           Precision g = vOffDiagonal[k1];
-           Precision h = vOffDiagonal[k];
-           Precision f = ((y-z)*(y+z) + (g-h)*(g+h)) / (2.0*h*y);
-           g = sqrt(f*f + 1.0);
-           Precision signed_g =  (f>=0)?g:-g;
-           f = ((x-z)*(x+z) + h*(y/(f + signed_g) - h)) / x;
-                 
-           // Next QR transformation
-           Precision c = 1.0;
-           Precision s = 1.0;
-           for(int i1 = l; i1<=k1; ++i1)
-             { // 600
-               const int i=i1+1;
-               g = vOffDiagonal[i];    
-               y = vDiagonal[i];
-               h = s*g;
-               g = c*g;
-               z = sqrt(f*f + h*h);      
-               vOffDiagonal[i1] = z;
-               c = f/z;              
-               s = h/z;
-               f = x*c + g*s;      
-               g = -x*s + g*c;
-               h = y*s;      
-               y *= c;
-               if(WANT_V)
-                 for(int j=0; j<N; ++j)
-                   {
-                     Precision xx = mV[j][i1];   
-                     Precision zz = mV[j][i];
-                     mV[j][i1] = xx*c + zz*s; 
-                     mV[j][i] = -xx*s + zz*c;
-                   }
-               z = sqrt(f*f + h*h);
-               vDiagonal[i1] = z;
-               if(z!=0)
-                 {
-                   c = f/z;  
-                   s = h/z;
-                 }
-               f = c*g + s*y;
-               x = -s*g + c*y;
-               if(WANT_U)
-                 for(int j=0; j<M; ++j)
-                   {
-                     Precision yy = mU[j][i1];   
-                     Precision zz = mU[j][i];
-                     mU[j][i1] = yy*c + zz*s; 
-                     mU[j][i] = -yy*s + zz*c;
-                   }
-             } // 600
-           vOffDiagonal[l] = 0;
-           vOffDiagonal[k] = f;
-           vDiagonal[k] = x;
-           return false;
-           // EO IF NOT CONVERGED CHUNK
-         } // EO IF TESTS HOLD
-      } // 530
-    // Code should never get here!
-    throw(0);
-    //return false;
-  }
-
-  
-  template<int M, int N, class Precision, bool WANT_U, bool WANT_V>
-  Precision GR_SVD<M,N,Precision,WANT_U,WANT_V>::get_largest_singular_value()
-  {
-    using std::max;
-    Precision d = vDiagonal[0];
-    for(int i=1; i<N; ++i) d = max(d, vDiagonal[i]);
-    return d;
-  }
-  
-  template<int M, int N, class Precision, bool WANT_U, bool WANT_V>
-  Precision GR_SVD<M,N,Precision,WANT_U,WANT_V>::get_smallest_singular_value()
-  {
-    using std::min;
-    Precision d = vDiagonal[0];
-    for(int i=1; i<N; ++i) d = min(d, vDiagonal[i]);
-    return d;
-  }
-
-  template<int M, int N, class Precision, bool WANT_U, bool WANT_V>
-  int GR_SVD<M,N,Precision,WANT_U,WANT_V>::get_smallest_singular_value_index()
-  {
-    using std::min;
-    int nMin=0;
-    Precision d = vDiagonal[0];
-    for(int i=1; i<N; ++i) 
-      if(vDiagonal[i] < d)
-       {
-         d = vDiagonal[i];
-         nMin = i;
-       }
-    return nMin;
-  }
-
-  template<int M, int N, class Precision, bool WANT_U, bool WANT_V>
-  void GR_SVD<M,N,Precision,WANT_U,WANT_V>::reorder()
-  {
-    std::vector<std::pair<Precision, unsigned int> > vSort;
-    vSort.reserve(N);
-    for(unsigned int i=0; i<N; ++i)
-      vSort.push_back(std::make_pair(-vDiagonal[i], i));
-    std::sort(vSort.begin(), vSort.end());
-    for(unsigned int i=0; i<N; ++i)
-      vDiagonal[i] = -vSort[i].first;
-    if(WANT_U)
-      {
-       Matrix<M, N, Precision> mU_copy = mU;
-       for(unsigned int i=0; i<N; ++i)
-         mU.T()[i] = mU_copy.T()[vSort[i].second];
-      }
-    if(WANT_V)
-      {
-       Matrix<N, N, Precision> mV_copy = mV;
-       for(unsigned int i=0; i<N; ++i)
-         mV.T()[i] = mV_copy.T()[vSort[i].second];
-      }
-  }
-
-}
-#endif
-
-
-
-
-
-

Index: LU.h
===================================================================
RCS file: LU.h
diff -N LU.h
--- LU.h        25 Jan 2012 14:57:02 -0000      1.21
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,213 +0,0 @@
-// -*- c++ -*-
-
-// Copyright (C) 2005,2009 Tom Drummond (address@hidden),
-// Ed Rosten (address@hidden)
-//
-// This file is part of the TooN Library.      This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.        See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.    If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.        Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.     This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-#ifndef TOON_INCLUDE_LU_H
-#define TOON_INCLUDE_LU_H
-
-#include <iostream>
-
-#include <TooN/lapack.h>
-
-#include <TooN/TooN.h>
-
-namespace TooN {
-/**
-Performs %LU decomposition and back substitutes to solve equations.
-The %LU decomposition is the fastest way of solving the equation 
-\f$M\underline{x} = \underline{c}\f$m, but it becomes unstable when
-\f$M\f$ is (nearly) singular (in which cases the SymEigen or SVD decompositions
-are better). It decomposes a matrix \f$M\f$ into
-\f[M = L \times U\f]
-where \f$L\f$ is a lower-diagonal matrix with unit diagonal and \f$U\f$ is an 
-upper-diagonal matrix. The library only supports the decomposition of square 
matrices.
-It can be used as follows to solve the \f$M\underline{x} = \underline{c}\f$ 
problem as follows:
address@hidden
-  // construct M
-  Matrix<3> M;
-  M[0] = makeVector(1,2,3);
-  M[1] = makeVector(3,2,1);
-  M[2] = makeVector(1,0,1);
-  // construct c
-  Vector<3> c = makeVector(2,3,4);
-  // create the LU decomposition of M
-  LU<3> luM(M);
-  // compute x = M^-1 * c
-  Vector<3> x = luM.backsub(c);
address@hidden
-The convention LU<> (=LU<-1>) is used to create an LU decomposition whose size 
is 
-determined at runtime.
address@hidden gDecomps
-**/
-template <int Size=-1, class Precision=double>
-class LU {
-       public:
-
-       /// Construct the %LU decomposition of a matrix. This initialises the 
class, and
-       /// performs the decomposition immediately.
-       template<int S1, int S2, class Base>
-       LU(const Matrix<S1,S2,Precision, Base>& m)
-       :my_lu(m.num_rows(),m.num_cols()),my_IPIV(m.num_rows()){
-               compute(m);
-       }
-       
-       /// Perform the %LU decompsition of another matrix.
-       template<int S1, int S2, class Base>
-       void compute(const Matrix<S1,S2,Precision,Base>& m){
-               //check for consistency with Size
-               SizeMismatch<Size, S1>::test(my_lu.num_rows(),m.num_rows());
-               SizeMismatch<Size, S2>::test(my_lu.num_rows(),m.num_cols());
-       
-               //Make a local copy. This is guaranteed contiguous
-               my_lu=m;
-               FortranInteger lda = m.num_rows();
-               FortranInteger M = m.num_rows();
-               FortranInteger N = m.num_rows();
-
-               getrf_(&M,&N,&my_lu[0][0],&lda,&my_IPIV[0],&my_info);
-
-               if(my_info < 0){
-                       std::cerr << "error in LU, INFO was " << my_info << 
std::endl;
-               }
-       }
-
-       /// Calculate result of multiplying the inverse of M by another matrix. 
For a matrix \f$A\f$, this
-       /// calculates \f$M^{-1}A\f$ by back substitution (i.e. without 
explictly calculating the inverse).
-       template <int Rows, int NRHS, class Base>
-       Matrix<Size,NRHS,Precision> backsub(const 
Matrix<Rows,NRHS,Precision,Base>& rhs){
-               //Check the number of rows is OK.
-               SizeMismatch<Size, Rows>::test(my_lu.num_rows(), 
rhs.num_rows());
-       
-               Matrix<Size, NRHS, Precision> result(rhs);
-
-               FortranInteger M=rhs.num_cols();
-               FortranInteger N=my_lu.num_rows();
-               double alpha=1;
-               FortranInteger lda=my_lu.num_rows();
-               FortranInteger ldb=rhs.num_cols();
-               
trsm_("R","U","N","N",&M,&N,&alpha,&my_lu[0][0],&lda,&result[0][0],&ldb);
-               
trsm_("R","L","N","U",&M,&N,&alpha,&my_lu[0][0],&lda,&result[0][0],&ldb);
-
-               // now do the row swapping (lapack dlaswp.f only shuffles 
fortran rows = Rowmajor cols)
-               for(int i=N-1; i>=0; i--){
-                       const int swaprow = my_IPIV[i]-1; // fortran arrays 
start at 1
-                       for(int j=0; j<NRHS; j++){
-                               Precision temp = result[i][j];
-                               result[i][j] = result[swaprow][j];
-                               result[swaprow][j] = temp;
-                       }
-               }
-               return result;
-       }
-
-       /// Calculate result of multiplying the inverse of M by a vector. For a 
vector \f$b\f$, this
-       /// calculates \f$M^{-1}b\f$ by back substitution (i.e. without 
explictly calculating the inverse).
-       template <int Rows, class Base>
-       Vector<Size,Precision> backsub(const Vector<Rows,Precision,Base>& rhs){
-               //Check the number of rows is OK.
-               SizeMismatch<Size, Rows>::test(my_lu.num_rows(), rhs.size());
-       
-               Vector<Size, Precision> result(rhs);
-
-               FortranInteger M=1;
-               FortranInteger N=my_lu.num_rows();
-               double alpha=1;
-               FortranInteger lda=my_lu.num_rows();
-               FortranInteger ldb=1;
-               
trsm_("R","U","N","N",&M,&N,&alpha,&my_lu[0][0],&lda,&result[0],&ldb);
-               
trsm_("R","L","N","U",&M,&N,&alpha,&my_lu[0][0],&lda,&result[0],&ldb);
-
-               // now do the row swapping (lapack dlaswp.f only shuffles 
fortran rows = Rowmajor cols)
-               for(int i=N-1; i>=0; i--){
-                       const int swaprow = my_IPIV[i]-1; // fortran arrays 
start at 1
-                       Precision temp = result[i];
-                       result[i] = result[swaprow];
-                       result[swaprow] = temp;
-               }
-               return result;
-       }
-
-       /// Calculate inverse of the matrix. This is not usually needed: if you 
need the inverse just to 
-       /// multiply it by a matrix or a vector, use one of the backsub() 
functions, which will be faster.
-       Matrix<Size,Size,Precision> get_inverse(){
-               Matrix<Size,Size,Precision> Inverse(my_lu);
-               FortranInteger N = my_lu.num_rows();
-               FortranInteger lda=my_lu.num_rows();
-               FortranInteger lwork=-1;
-               Precision size;
-               getri_(&N, &Inverse[0][0], &lda, &my_IPIV[0], &size, &lwork, 
&my_info);
-               lwork=FortranInteger(size);
-               Precision* WORK = new Precision[lwork];
-               getri_(&N, &Inverse[0][0], &lda, &my_IPIV[0], WORK, &lwork, 
&my_info);
-               delete [] WORK;
-               return Inverse;
-       }
-
-       /// Returns the L and U matrices. The permutation matrix is not 
returned.
-       /// Since L is lower-triangular (with unit diagonal)
-       /// and U is upper-triangular, these are returned conflated into one 
matrix, where the 
-       /// diagonal and above parts of the matrix are U and the below-diagonal 
part, plus a unit diagonal, 
-       /// are L.
-       const Matrix<Size,Size,Precision>& get_lu()const {return my_lu;}
-       
-       private:
-       inline int get_sign() const {
-               int result=1;
-               for(int i=0; i<my_lu.num_rows()-1; i++){
-                       if(my_IPIV[i] > i+1){
-                               result=-result;
-                       }
-               }
-               return result;
-       }
-       public:
-
-       /// Calculate the determinant of the matrix
-       inline Precision determinant() const {
-               Precision result = get_sign();
-               for (int i=0; i<my_lu.num_rows(); i++){
-                       result*=my_lu(i,i);
-               }
-               return result;
-       }
-       
-       /// Get the LAPACK info
-       int get_info() const { return my_info; }
-
- private:
-
-       Matrix<Size,Size,Precision> my_lu;
-       FortranInteger my_info;
-       Vector<Size, FortranInteger> my_IPIV;   //Convenient static-or-dynamic 
array of ints :-)
-
-};
-}
-       
-
-#endif

Index: Lapack_Cholesky.h
===================================================================
RCS file: Lapack_Cholesky.h
diff -N Lapack_Cholesky.h
--- Lapack_Cholesky.h   25 Jan 2012 14:57:02 -0000      1.10
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,187 +0,0 @@
-// -*- c++ -*-
-
-//     Copyright (C) 2009 Tom Drummond (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-
-#ifndef TOON_INCLUDE_LAPACK_CHOLESKY_H
-#define TOON_INCLUDE_LAPACK_CHOLESKY_H
-
-#include <TooN/TooN.h>
-
-#include <TooN/lapack.h>
-
-#include <assert.h>
-
-namespace TooN {
-
-
-/**
-Decomposes a positive-semidefinite symmetric matrix A (such as a covariance) 
into L*L^T, where L is lower-triangular.
-Also can compute A = S*S^T, with S lower triangular.  The LDL^T form is faster 
to compute than the class Cholesky decomposition.
-The decomposition can be used to compute A^-1*x, A^-1*M, M*A^-1*M^T, and A^-1 
itself, though the latter rarely needs to be explicitly represented.
-Also efficiently computes det(A) and rank(A).
-It can be used as follows:
address@hidden
-// Declare some matrices.
-Matrix<3> A = ...; // we'll pretend it is pos-def
-Matrix<2,3> M;
-Matrix<2> B;
-Vector<3> y = make_Vector(2,3,4);
-// create the Cholesky decomposition of A
-Cholesky<3> chol(A);
-// compute x = A^-1 * y
-x = cholA.backsub(y);
-//compute A^-1
-Matrix<3> Ainv = cholA.get_inverse();
address@hidden
address@hidden gDecomps
-
-Cholesky decomposition of a symmetric matrix.
-Only the lower half of the matrix is considered
-This uses the non-sqrt version of the decomposition
-giving symmetric M = L*D*L.T() where the diagonal of L contains ones
address@hidden Size the size of the matrix
address@hidden Precision the precision of the entries in the matrix and its 
decomposition
-**/
-template <int Size, typename Precision=DefaultPrecision>
-class Lapack_Cholesky {
-public:
-
-    Lapack_Cholesky(){}
-       
-       template<class P2, class B2>
-       Lapack_Cholesky(const Matrix<Size, Size, P2, B2>& m) 
-         : my_cholesky(m), my_cholesky_lapack(m) {
-               SizeMismatch<Size,Size>::test(m.num_rows(), m.num_cols());
-               do_compute();
-       }
-
-       /// Constructor for Size=Dynamic
-       Lapack_Cholesky(int size) : my_cholesky(size,size), 
my_cholesky_lapack(size,size) {}
-
-       template<class P2, class B2> void compute(const Matrix<Size, Size, P2, 
B2>& m){
-               SizeMismatch<Size,Size>::test(m.num_rows(), m.num_cols());
-               SizeMismatch<Size,Size>::test(m.num_rows(), 
my_cholesky.num_rows());
-               my_cholesky_lapack=m;
-               do_compute();
-       }
-
-
-
-       void do_compute(){
-               FortranInteger N = my_cholesky.num_rows();
-               FortranInteger info;
-               potrf_("L", &N, my_cholesky_lapack.my_data, &N, &info);
-               for (int i=0;i<N;i++) {
-                 int j;
-                 for (j=0;j<=i;j++) {
-                   my_cholesky[i][j]=my_cholesky_lapack[j][i];
-                 }
-                 // LAPACK does not set upper triangle to zero, 
-                 // must be done here
-                 for (;j<N;j++) {
-                   my_cholesky[i][j]=0;
-                 }
-               }
-               assert(info >= 0);
-               if (info > 0) {
-                       my_rank = info-1;
-               } else {
-                   my_rank = N;
-               }
-       }
-
-       int rank() const { return my_rank; }
-
-       template <int Size2, typename P2, typename B2>
-               Vector<Size, Precision> backsub (const Vector<Size2, P2, B2>& 
v) const {
-               SizeMismatch<Size,Size2>::test(my_cholesky.num_cols(), 
v.size());
-
-               Vector<Size, Precision> result(v);
-               FortranInteger N=my_cholesky.num_rows();
-               FortranInteger NRHS=1;
-               FortranInteger info;
-               potrs_("L", &N, &NRHS, my_cholesky_lapack.my_data, &N, 
result.my_data, &N, &info);     
-               assert(info==0);
-               return result;
-       }
-
-       template <int Size2, int Cols2, typename P2, typename B2>
-               Matrix<Size, Cols2, Precision, ColMajor> backsub (const 
Matrix<Size2, Cols2, P2, B2>& m) const {
-               SizeMismatch<Size,Size2>::test(my_cholesky.num_cols(), 
m.num_rows());
-
-               Matrix<Size, Cols2, Precision, ColMajor> result(m);
-               FortranInteger N=my_cholesky.num_rows();
-               FortranInteger NRHS=m.num_cols();
-               FortranInteger info;
-               potrs_("L", &N, &NRHS, my_cholesky_lapack.my_data, &N, 
result.my_data, &N, &info);     
-               assert(info==0);
-               return result;
-       }
-
-       template <int Size2, typename P2, typename B2>
-               Precision mahalanobis(const Vector<Size2, P2, B2>& v) const {
-               return v * backsub(v);
-       }
-
-       Matrix<Size,Size,Precision> get_L() const {
-               return my_cholesky;
-       }
-
-       Precision determinant() const {
-               Precision det = my_cholesky[0][0];
-               for (int i=1; i<my_cholesky.num_rows(); i++)
-                       det *= my_cholesky[i][i];
-               return det*det;
-       }
-
-       Matrix<> get_inverse() const {
-               Matrix<Size, Size, Precision> 
M(my_cholesky.num_rows(),my_cholesky.num_rows());
-               M=my_cholesky_lapack;
-               FortranInteger N = my_cholesky.num_rows();
-               FortranInteger info;
-               potri_("L", &N, M.my_data, &N, &info);
-               assert(info == 0);
-               for (int i=1;i<N;i++) {
-                 for (int j=0;j<i;j++) {
-                   M[i][j]=M[j][i];
-                 }
-               }
-               return M;
-       }
-
-private:
-       Matrix<Size,Size,Precision> my_cholesky;     
-       Matrix<Size,Size,Precision> my_cholesky_lapack;     
-       FortranInteger my_rank;
-};
-
-
-}
-
-#endif

Index: Makefile.in
===================================================================
RCS file: Makefile.in
diff -N Makefile.in
--- Makefile.in 20 Jan 2012 17:24:50 -0000      1.30
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,83 +0,0 @@
-#Standard boilerplate
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-mandir = @mandir@
-includedir = @includedir@
-datarootdir = @datarootdir@
-pkgconfig = @PKGCONFIG_LIBDIR@
-
-ifneq "$(DESTDIR)" ""
-DESTDIR+=/
-endif
-
-
-hdr = $(DESTDIR)$(includedir)/TooN
-
-
-.PHONY: all
-
-all:
-       @echo There is nothing to be compiled in TooN.
-       @echo It is now ready to be installed.
-
-install:
-       mkdir -p $(hdr)
-       cp *.h $(hdr)
-       cp -r optimization $(hdr)/
-       cp -r internal $(hdr)/
-       cp -r functions $(hdr)/
-       cp TooN.pc $(pkgconfig)/
-
-internal/data_functions.hh:  make_data_functions.awk
-       awk -f make_data_functions.awk > $@
-internal/make_vector.hh:  make_make_vector.awk
-       awk -f make_make_vector.awk > $@
-
-internal/builtin_typeof.h:make_typeof.awk
-       awk -f make_typeof.awk > $@
-
-clean:
-       rm -rf html
-
-docs:
-       doxygen 
-
-
-TESTS=lu slice vector_resize gauss_jordan eigen-sqrt determinant chol_toon 
chol_lapack simplex sym_eigen fill so3 complex qr gr_svd
-
-
-TEST_RESULT=$(TESTS:%=regressions/%.result)
-TEST_FILES=$(TESTS:%=regressions/%.out) $(TESTS:%=regressions/%.test) 
$(TEST_RESULT)
-
-testclean:
-       rm -f $(TEST_FILES)
-
-foo:
-       echo $(MAKEFLAGS)
-
-.PHONY: test
-
-test:regressions/results
-       @echo -------------- Test Results ---------------
-       @cat regressions/results
-
-regressions/results:$(TEST_RESULT)
-       cat $(TEST_RESULT) > regressions/results
-
-.PRECIOUS: regressions/%.out regressions/%.test
-
-#Build a test executable from a test program. On compile error,
-#create an execuaable which decalres the error.
-regressions/%.test: regressions/%.cc
-       $(CXX) -g -ggdb $< -o $@ -llapack -DTOON_CHECK_BOUNDS 
-DTOON_INITIALIZE_SNAN -I ..  -I . @CXXFLAGS@||\
-       { \
-         echo "echo 'Compile error!'" > $@ ; \
-         chmod +x $@; \
-       }
-       
-regressions/%.out: regressions/%.test
-       $< > $@ || ( echo Crash!!! > $@ )
-
-regressions/%.result: regressions/%.out regressions/%.txt
-       awk -vname=$* -f numdiff.awk -vf1=$< -vf2=regressions/$*.txt > $@       
-       

Index: QR_Lapack.h
===================================================================
RCS file: QR_Lapack.h
diff -N QR_Lapack.h
--- QR_Lapack.h 25 Jan 2012 14:57:02 -0000      1.4
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,148 +0,0 @@
-#ifndef TOON_INCLUDE_QR_LAPACK_H
-#define TOON_INCLUDE_QR_LAPACK_H
-
-
-#include <TooN/TooN.h>
-#include <TooN/lapack.h>
-#include <utility>
-
-namespace TooN{
-
-/**
-Performs %QR decomposition.
-
address@hidden this will only work if the number of columns is greater than 
-the number of rows!
-
-The QR decomposition operates on a matrix A. It can be performed with
-or without column pivoting. In general:
-\f[
-AP = QR
-\f]
-Where \f$P\f$ is a permutation matrix constructed to permute the columns
-of A. In practise, \f$P\f$ is stored as a vector of integer elements.
-
-With column pivoting, the elements of the leading diagonal of \f$R\f$ will
-be sorted from largest in magnitude to smallest in magnitude.
-
address@hidden gDecomps
-*/
-template<int Rows=Dynamic, int Cols=Rows, class Precision=double>
-class QR_Lapack{
-
-       private:
-               static const int square_Size = (Rows>=0 && 
Cols>=0)?(Rows<Cols?Rows:Cols):Dynamic;
-
-       public: 
-               /// Construct the %QR decomposition of a matrix. This 
initialises the class, and
-               /// performs the decomposition immediately.
-               /// @param m The matrix to decompose
-               /// @param p Whether or not to perform pivoting
-               template<int R, int C, class P, class B> 
-               QR_Lapack(const Matrix<R,C,P,B>& m, bool p=0)
-               :copy(m),tau(square_size()), Q(square_size(), square_size()), 
do_pivoting(p), pivot(Zeros(square_size()))
-               {
-                       //pivot is set to all zeros, which means all columns 
are free columns
-                       //and can take part in column pivoting.
-
-                       compute();
-               }
-               
-               ///Return R
-               const Matrix<Rows, Cols, Precision, ColMajor>& get_R()
-               {
-                       return copy;
-               }
-               
-               ///Return Q
-               const Matrix<square_Size, square_Size, Precision, ColMajor>& 
get_Q()
-               {
-                       return Q;
-               }       
-
-               ///Return the permutation vector. The definition is that column 
\f$i\f$ of A is
-               ///column \f$P(i)\f$ of \f$QR\f$.
-               const Vector<Cols, int>& get_P()
-               {
-                       return pivot;
-               }
-
-       private:
-
-               void compute()
-               {       
-                       FortranInteger M = copy.num_rows();
-                       FortranInteger N = copy.num_cols();
-                       
-                       FortranInteger LWORK=-1;
-                       FortranInteger INFO;
-                       FortranInteger lda = M;
-
-                       Precision size;
-                       
-                       //Set up the pivot vector
-                       if(do_pivoting)
-                               pivot = Zeros;
-                       else
-                               for(int i=0; i < pivot.size(); i++)
-                                       pivot[i] = i+1;
-
-                       
-                       //Compute the working space
-                       geqp3_(&M, &N, copy.get_data_ptr(), &lda, 
pivot.get_data_ptr(), tau.get_data_ptr(), &size, &LWORK, &INFO);
-
-                       LWORK = (FortranInteger) size;
-
-                       Precision* work = new Precision[LWORK];
-                       
-                       geqp3_(&M, &N, copy.get_data_ptr(), &lda, 
pivot.get_data_ptr(), tau.get_data_ptr(), work, &LWORK, &INFO);
-
-
-                       if(INFO < 0)
-                               std::cerr << "error in QR, INFO was " << INFO 
<< std::endl;
-
-                       //The upper "triangle+" of copy is R
-                       //The lower right and tau contain enough information to 
reconstruct Q
-                       
-                       //LAPACK provides a handy function to do the 
reconstruction
-                       Q = copy.template slice<0,0,square_Size, 
square_Size>(0,0,square_size(), square_size());
-                       
-                       FortranInteger K = square_size();
-                       M=K;
-                       N=K;
-                       lda = K;
-                       orgqr_(&M, &N, &K, Q.get_data_ptr(), &lda, 
tau.get_data_ptr(), work, &LWORK, &INFO);
-
-                       if(INFO < 0)
-                               std::cerr << "error in QR, INFO was " << INFO 
<< std::endl;
-
-                       delete [] work;
-                       
-                       //Now zero out the lower triangle
-                       for(int r=1; r < square_size(); r++)
-                               for(int c=0; c<r; c++)
-                                       copy[r][c] = 0;
-
-                       //Now fix the pivot matrix.
-                       //We need to go from FORTRAN to C numbering. 
-                       for(int i=0; i < pivot.size(); i++)
-                               pivot[i]--;
-               }
-
-               Matrix<Rows, Cols, Precision, ColMajor> copy;
-               Vector<square_Size, Precision> tau;
-               Matrix<square_Size, square_Size, Precision, ColMajor> Q;
-               bool do_pivoting;
-               Vector<Cols, FortranInteger> pivot;
-               
-
-               int square_size()
-               {
-                       return std::min(copy.num_rows(), copy.num_cols());      
-               }
-};
-
-}
-
-
-#endif

Index: README
===================================================================
RCS file: README
diff -N README
--- README      6 Feb 2012 14:59:34 -0000       1.2
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,5 +0,0 @@
-DO NOT USE THIS VERSION OF TOON
-
-Please get TooN from the git repository:
-
-git clone git://git.savannah.nongnu.org/libcvd.git

Index: SVD.h
===================================================================
RCS file: SVD.h
diff -N SVD.h
--- SVD.h       24 Dec 2010 13:58:03 -0000      1.20
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,309 +0,0 @@
-// -*- c++ -*-
-
-// Copyright (C) 2005,2009 Tom Drummond (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-#ifndef __SVD_H
-#define __SVD_H
-
-#include <TooN/TooN.h>
-#include <TooN/lapack.h>
-
-namespace TooN {
-
-       // TODO - should this depend on precision?
-static const double condition_no=1e9; // GK HACK TO GLOBAL
-
-
-
-
-
-
-
-/**
address@hidden SVD TooN/SVD.h
-Performs %SVD and back substitute to solve equations.
-Singular value decompositions are more robust than LU decompositions in the 
face of 
-singular or nearly singular matrices. They decompose a matrix (of any shape) 
\f$M\f$ into:
-\f[M = U \times D \times V^T\f]
-where \f$D\f$ is a diagonal matrix of positive numbers whose dimension is the 
minimum 
-of the dimensions of \f$M\f$. If \f$M\f$ is tall and thin (more rows than 
columns) 
-then \f$U\f$ has the same shape as \f$M\f$ and \f$V\f$ is square (vice-versa 
if \f$M\f$ 
-is short and fat). The columns of \f$U\f$ and the rows of \f$V\f$ are 
orthogonal 
-and of unit norm (so one of them lies in SO(N)). The inverse of \f$M\f$ (or 
pseudo-inverse 
-if \f$M\f$ is not square) is then given by
-\f[M^{\dagger} = V \times D^{-1} \times U^T\f]
- 
-If \f$M\f$ is nearly singular then the diagonal matrix \f$D\f$ has some small 
values 
-(relative to its largest value) and these terms dominate \f$D^{-1}\f$. To deal 
with 
-this problem, the inverse is conditioned by setting a maximum ratio 
-between the largest and smallest values in \f$D\f$ (passed as the 
<code>condition</code>
-parameter to the various functions). Any values which are too small 
-are set to zero in the inverse (rather than a large number)
- 
-It can be used as follows to solve the \f$M\underline{x} = \underline{c}\f$ 
problem as follows:
address@hidden
-// construct M
-Matrix<3> M;
-M[0] = makeVector(1,2,3);
-M[1] = makeVector(4,5,6);
-M[2] = makeVector(7,8.10);
-// construct c
- Vector<3> c;
-c = 2,3,4;
-// create the SVD decomposition of M
-SVD<3> svdM(M);
-// compute x = M^-1 * c
-Vector<3> x = svdM.backsub(c);
- @endcode
-
-SVD<> (= SVD<-1>) can be used to create an SVD whose size is determined at 
run-time.
address@hidden gDecomps
-**/
-template<int Rows=Dynamic, int Cols=Rows, typename Precision=DefaultPrecision>
-class SVD {
-       // this is the size of the diagonal
-       // NB works for semi-dynamic sizes because -1 < +ve ints
-       static const int Min_Dim = Rows<Cols?Rows:Cols;
-       
-public:
-
-       /// default constructor for Rows>0 and Cols>0
-       SVD() {}
-
-       /// constructor for Rows=-1 or Cols=-1 (or both)
-       SVD(int rows, int cols)
-               : my_copy(rows,cols),
-                 my_diagonal(std::min(rows,cols)),
-                 my_square(std::min(rows,cols), std::min(rows,cols))
-       {}
-
-       /// Construct the %SVD decomposition of a matrix. This initialises the 
class, and
-       /// performs the decomposition immediately.
-       template <int R2, int C2, typename P2, typename B2>
-       SVD(const Matrix<R2,C2,P2,B2>& m)
-               : my_copy(m),
-                 my_diagonal(std::min(m.num_rows(),m.num_cols())),
-                 
my_square(std::min(m.num_rows(),m.num_cols()),std::min(m.num_rows(),m.num_cols()))
-       {
-               do_compute();
-       }
-
-       /// Compute the %SVD decomposition of M, typically used after the 
default constructor
-       template <int R2, int C2, typename P2, typename B2>
-       void compute(const Matrix<R2,C2,P2,B2>& m){
-               my_copy=m;
-               do_compute();
-       }
-       
-       private:
-       void do_compute(){
-               Precision* const a = my_copy.my_data;
-               int lda = my_copy.num_cols();
-               int m = my_copy.num_cols();
-               int n = my_copy.num_rows();
-               Precision* const uorvt = my_square.my_data;
-               Precision* const s = my_diagonal.my_data;
-               int ldu;
-               int ldvt = lda;
-               int LWORK;
-               int INFO;
-               char JOBU;
-               char JOBVT;
-
-               if(is_vertical()){ // u is a
-                       JOBU='O';
-                       JOBVT='S';
-                       ldu = lda;
-               } else { // vt is a
-                       JOBU='S';
-                       JOBVT='O';
-                       ldu = my_square.num_cols();
-               }
-
-               Precision* wk;
-
-               Precision size;
-               LWORK = -1;
-
-               // arguments are scrambled because we use rowmajor and lapack 
uses colmajor
-               // thus u and vt play each other's roles.
-               gesvd_( &JOBVT, &JOBU, &m, &n, a, &lda, s, uorvt,
-                                &ldvt, uorvt, &ldu, &size, &LWORK, &INFO);
-       
-               LWORK = (long int)(size);
-               wk = new Precision[LWORK];
-
-               gesvd_( &JOBVT, &JOBU, &m, &n, a, &lda, s, uorvt,
-                                &ldvt, uorvt, &ldu, wk, &LWORK, &INFO);
-       
-               delete[] wk;
-       }
-       
-       bool is_vertical(){ 
-               return (my_copy.num_rows() >= my_copy.num_cols()); 
-       }
-
-       int min_dim(){ return std::min(my_copy.num_rows(), my_copy.num_cols()); 
}
-       
-       public:
-
-       /// Calculate result of multiplying the (pseudo-)inverse of M by 
another matrix. 
-       /// For a matrix \f$A\f$, this calculates \f$M^{\dagger}A\f$ by back 
substitution 
-       /// (i.e. without explictly calculating the (pseudo-)inverse). 
-       /// See the detailed description for a description of condition 
variables.
-       template <int Rows2, int Cols2, typename P2, typename B2>
-       Matrix<Cols,Cols2, typename Internal::MultiplyType<Precision,P2>::type >
-       backsub(const Matrix<Rows2,Cols2,P2,B2>& rhs, const Precision 
condition=condition_no)
-       {
-               Vector<Min_Dim> inv_diag(min_dim());
-               get_inv_diag(inv_diag,condition);
-               return (get_VT().T() * diagmult(inv_diag, (get_U().T() * rhs)));
-       }
-
-       /// Calculate result of multiplying the (pseudo-)inverse of M by a 
vector. 
-       /// For a vector \f$b\f$, this calculates \f$M^{\dagger}b\f$ by back 
substitution 
-       /// (i.e. without explictly calculating the (pseudo-)inverse). 
-       /// See the detailed description for a description of condition 
variables.
-       template <int Size, typename P2, typename B2>
-       Vector<Cols, typename Internal::MultiplyType<Precision,P2>::type >
-       backsub(const Vector<Size,P2,B2>& rhs, const Precision 
condition=condition_no)
-       {
-               Vector<Min_Dim> inv_diag(min_dim());
-               get_inv_diag(inv_diag,condition);
-               return (get_VT().T() * diagmult(inv_diag, (get_U().T() * rhs)));
-       }
-
-       /// Calculate (pseudo-)inverse of the matrix. This is not usually 
needed: 
-       /// if you need the inverse just to multiply it by a matrix or a 
vector, use 
-       /// one of the backsub() functions, which will be faster.
-       /// See the detailed description of the pseudo-inverse and condition 
variables.
-       Matrix<Cols,Rows> get_pinv(const Precision condition = condition_no){
-               Vector<Min_Dim> inv_diag(min_dim());
-               get_inv_diag(inv_diag,condition);
-               return diagmult(get_VT().T(),inv_diag) * get_U().T();
-       }
-
-       /// Calculate the product of the singular values
-       /// for square matrices this is the determinant
-       Precision determinant() {
-               Precision result = my_diagonal[0];
-               for(int i=1; i<my_diagonal.size(); i++){
-                       result *= my_diagonal[i];
-               }
-               return result;
-       }
-       
-       /// Calculate the rank of the matrix.
-       /// See the detailed description of the pseudo-inverse and condition 
variables.
-       int rank(const Precision condition = condition_no) {
-               if (my_diagonal[0] == 0) return 0;
-               int result=1;
-               for(int i=0; i<min_dim(); i++){
-                       if(my_diagonal[i] * condition <= my_diagonal[0]){
-                               result++;
-                       }
-               }
-               return result;
-       }
-
-       /// Return the U matrix from the decomposition
-       /// The size of this depends on the shape of the original matrix
-       /// it is square if the original matrix is wide or tall if the original 
matrix is tall
-       Matrix<Rows,Min_Dim,Precision,Reference::RowMajor> get_U(){
-               if(is_vertical()){
-                       return 
Matrix<Rows,Min_Dim,Precision,Reference::RowMajor>
-                               
(my_copy.my_data,my_copy.num_rows(),my_copy.num_cols());
-               } else {
-                       return 
Matrix<Rows,Min_Dim,Precision,Reference::RowMajor>
-                               (my_square.my_data, my_square.num_rows(), 
my_square.num_cols());
-               }
-       }
-
-       /// Return the singular values as a vector
-       Vector<Min_Dim,Precision>& get_diagonal(){ return my_diagonal; }
-
-       /// Return the VT matrix from the decomposition
-       /// The size of this depends on the shape of the original matrix
-       /// it is square if the original matrix is tall or wide if the original 
matrix is wide
-       Matrix<Min_Dim,Cols,Precision,Reference::RowMajor> get_VT(){
-               if(is_vertical()){
-                       return 
Matrix<Min_Dim,Cols,Precision,Reference::RowMajor>
-                               (my_square.my_data, my_square.num_rows(), 
my_square.num_cols());
-               } else {
-                       return 
Matrix<Min_Dim,Cols,Precision,Reference::RowMajor>
-                               
(my_copy.my_data,my_copy.num_rows(),my_copy.num_cols());
-               }
-       }
-
-       ///Return the pesudo-inverse diagonal. The reciprocal of the diagonal 
elements
-       ///is returned if the elements are well scaled with respect to the 
largest element,
-       ///otherwise 0 is returned.
-       ///@param inv_diag Vector in which to return the inverse diagonal.
-       ///@param condition Elements must be larger than this factor times the 
largest diagonal element to be considered well scaled. 
-       void get_inv_diag(Vector<Min_Dim>& inv_diag, const Precision condition){
-               for(int i=0; i<min_dim(); i++){
-                       if(my_diagonal[i] * condition <= my_diagonal[0]){
-                               inv_diag[i]=0;
-                       } else {
-                               
inv_diag[i]=static_cast<Precision>(1)/my_diagonal[i];
-                       }
-               }
-       }
-
-private:
-       Matrix<Rows,Cols,Precision,RowMajor> my_copy;
-       Vector<Min_Dim,Precision> my_diagonal;
-       Matrix<Min_Dim,Min_Dim,Precision,RowMajor> my_square; // square matrix 
(U or V' depending on the shape of my_copy)
-};
-
-
-
-
-
-
-/// version of SVD forced to be square
-/// princiapally here to allow use in WLS
-/// @ingroup gDecomps
-template<int Size, typename Precision>
-struct SQSVD : public SVD<Size, Size, Precision> {
-       ///All constructors are forwarded to SVD in a straightforward manner.
-       ///@name Constructors
-       ///@{
-       SQSVD() {}
-       SQSVD(int size) : SVD<Size,Size,Precision>(size, size) {}
-       
-       template <int R2, int C2, typename P2, typename B2>
-       SQSVD(const Matrix<R2,C2,P2,B2>& m) : SVD<Size,Size,Precision>(m) {}
-       ///@}
-};
-
-
-}
-
-
-#endif

Index: SymEigen.h
===================================================================
RCS file: SymEigen.h
diff -N SymEigen.h
--- SymEigen.h  25 Jan 2012 14:57:02 -0000      1.29
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,425 +0,0 @@
-// -*- c++ -*-
-
-// Copyright (C) 2005,2009 Tom Drummond (address@hidden)
-//
-// This file is part of the TooN Library.      This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.        See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.    If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.        Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.     This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-#ifndef __SYMEIGEN_H
-#define __SYMEIGEN_H
-
-#include <iostream>
-#include <cassert>
-#include <cmath>
-#include <complex>
-#include <TooN/lapack.h>
-
-#include <TooN/TooN.h>
-
-namespace TooN {
-static const double 
root3=1.73205080756887729352744634150587236694280525381038062805580;
-
-namespace Internal{
-
-        using std::swap;
-
-       ///Default condition number for SymEigen::backsub, SymEigen::get_pinv 
and SymEigen::get_inv_diag
-       static const double symeigen_condition_no=1e9;
-
-       ///@internal
-       ///@brief Compute eigensystems for sizes > 2
-       ///Helper struct for computing eigensystems, to allow for 
specialization on
-       ///2x2 matrices.
-       ///@ingroup gInternal
-       template <int Size> struct ComputeSymEigen {
-
-               ///@internal
-               ///Compute an eigensystem.
-               ///@param m Input matrix (assumed to be symmetric)
-               ///@param evectors Eigen vector output
-               ///@param evalues Eigen values output
-               template<int Rows, int Cols, typename P, typename B>
-               static inline void compute(const Matrix<Rows,Cols,P, B>& m, 
Matrix<Size,Size,P> & evectors, Vector<Size, P>& evalues) {
-
-                       SizeMismatch<Rows, Cols>::test(m.num_rows(), 
m.num_cols());      //m must be square
-                       SizeMismatch<Size, Rows>::test(m.num_rows(), 
evalues.size()); //m must be the size of the system
-                       
-
-                       evectors = m;
-                       FortranInteger N = evalues.size();
-                       FortranInteger lda = evalues.size();
-                       FortranInteger info;
-                       FortranInteger lwork=-1;
-                       P size;
-
-                       // find out how much space fortran needs
-                       
syev_((char*)"V",(char*)"U",&N,&evectors[0][0],&lda,&evalues[0], 
&size,&lwork,&info);
-                       lwork = int(size);
-                       Vector<Dynamic, P> WORK(lwork);
-
-                       // now compute the decomposition
-                       
syev_((char*)"V",(char*)"U",&N,&evectors[0][0],&lda,&evalues[0], 
&WORK[0],&lwork,&info);
-
-                       if(info!=0){
-                               std::cerr << "In SymEigen<"<<Size<<">: " << info
-                                               << " off-diagonal elements of 
an intermediate tridiagonal form did not converge to zero." << std::endl
-                                               << "M = " << m << std::endl;
-                       }
-               }
-       };
-
-       ///@internal
-       ///@brief Compute 2x2 eigensystems
-       ///Helper struct for computing eigensystems, specialized on 2x2 
matrices.
-       ///@ingroup gInternal
-       template <> struct ComputeSymEigen<2> {
-
-               ///@internal
-               ///Compute an eigensystem.
-               ///@param m Input matrix (assumed to be symmetric)
-               ///@param eig Eigen vector output
-               ///@param ev Eigen values output
-               template<typename P, typename B>
-               static inline void compute(const Matrix<2,2,P,B>& m, 
Matrix<2,2,P>& eig, Vector<2, P>& ev) {
-                       double trace = m[0][0] + m[1][1];
-                       double det = m[0][0]*m[1][1] - m[0][1]*m[1][0];
-                       double disc = trace*trace - 4 * det;
-                       assert(disc>=0);
-                       using std::sqrt;
-                       double root_disc = sqrt(disc);
-                       ev[0] = 0.5 * (trace - root_disc);
-                       ev[1] = 0.5 * (trace + root_disc);
-                       double a = m[0][0] - ev[0];
-                       double b = m[0][1];
-                       double magsq = a*a + b*b;
-                       if (magsq == 0) {
-                               eig[0][0] = 1.0;
-                               eig[0][1] = 0;
-                       } else {
-                               eig[0][0] = -b;
-                               eig[0][1] = a;
-                               eig[0] *= 1.0/sqrt(magsq);
-                       }
-                       eig[1][0] = -eig[0][1];
-                       eig[1][1] = eig[0][0];
-               }
-       };
-
-    ///@internal
-       ///@brief Compute 3x3 eigensystems
-       ///Helper struct for computing eigensystems, specialized on 3x3 
matrices.
-       ///@ingroup gInternal
-       template <> struct ComputeSymEigen<3> {
-
-               ///@internal
-               ///Compute an eigensystem.
-               ///@param m Input matrix (assumed to be symmetric)
-               ///@param eig Eigen vector output
-               ///@param ev Eigen values output
-               template<typename P, typename B>
-               static inline void compute(const Matrix<3,3,P,B>& m, 
Matrix<3,3,P>& eig, Vector<3, P>& ev) {
-            //method uses closed form solution of cubic equation to obtain 
roots of characteristic equation.
-            using std::sqrt;
-            
-            //Polynomial terms of |a - l * Identity|
-            //l^3 + a*l^2 + b*l + c
-
-            const double& a11 = m[0][0];
-            const double& a12 = m[0][1];
-            const double& a13 = m[0][2];
-
-            const double& a22 = m[1][1];
-            const double& a23 = m[1][2];
-
-            const double& a33 = m[2][2];
-
-            //From matlab:
-            double a = -a11-a22-a33;
-            double b = a11*a22+a11*a33+a22*a33-a12*a12-a13*a13-a23*a23;
-            double c = 
a11*(a23*a23)+(a13*a13)*a22+(a12*a12)*a33-a12*a13*a23*2.0-a11*a22*a33;
-
-            //Using Cardano's method:
-            double p = b - a*a/3;
-            double q = c + (2*a*a*a - 9*a*b)/27;
-
-            double alpha = -q/2;
-            double beta_descriminant = q*q/4 + p*p*p/27;
-
-            //beta_descriminant <= 0 for real roots!
-            double beta = sqrt(-beta_descriminant);
-            double r2 = alpha*alpha  - beta_descriminant;
-
-            ///Need A,B = cubert(alpha +- beta)
-            ///Turn in to r, theta
-            /// r^(1/3) * e^(i * theta/3)
-
-            double cuberoot_r = pow(r2, 1./6);
-            double theta3 = atan2(beta, alpha)/3;
-
-            double A_plus_B = 2*cuberoot_r*cos(theta3);
-            double A_minus_B = -2*cuberoot_r*sin(theta3);
-
-            //calculate eigenvalues
-            ev =  makeVector(A_plus_B, -A_plus_B/2 + A_minus_B * sqrt(3)/2, 
-A_plus_B/2 - A_minus_B * sqrt(3)/2) - Ones * a/3;
-
-            if(ev[0] > ev[1])
-                swap(ev[0], ev[1]);
-            if(ev[1] > ev[2])
-                swap(ev[1], ev[2]);
-            if(ev[0] > ev[1])
-                swap(ev[0], ev[1]);
-
-            //calculate the eigenvectors
-            eig[0][0]=a12 * a23 - a13 * (a22 - ev[0]);
-            eig[0][1]=a12 * a13 - a23 * (a11 - ev[0]);
-            eig[0][2]=(a11-ev[0])*(a22-ev[0]) - a12*a12;
-            normalize(eig[0]);
-            eig[1][0]=a12 * a23 - a13 * (a22 - ev[1]);
-            eig[1][1]=a12 * a13 - a23 * (a11 - ev[1]);
-            eig[1][2]=(a11-ev[1])*(a22-ev[1]) - a12*a12;
-            normalize(eig[1]);
-            eig[2][0]=a12 * a23 - a13 * (a22 - ev[2]);
-            eig[2][1]=a12 * a13 - a23 * (a11 - ev[2]);
-            eig[2][2]=(a11-ev[2])*(a22-ev[2]) - a12*a12;
-            normalize(eig[2]);
-               }
-       };
-
-};
-
-/**
-Performs eigen decomposition of a matrix.
-Real symmetric (and hence square matrices) can be decomposed into
-\f[M = U \times \Lambda \times U^T\f]
-where \f$U\f$ is an orthogonal matrix (and hence \f$U^T = U^{-1}\f$) whose 
columns
-are the eigenvectors of \f$M\f$ and \f$\Lambda\f$ is a diagonal matrix whose 
entries
-are the eigenvalues of \f$M\f$. These quantities are often of use directly, 
and can
-be obtained as follows:
address@hidden
-// construct M
-Matrix<3> M(3,3);
-M[0]=makeVector(4,0,2);
-M[1]=makeVector(0,5,3);
-M[2]=makeVector(2,3,6);
-
-// create the eigen decomposition of M
-SymEigen<3> eigM(M);
-cout << "A=" << M << endl;
-cout << "(E,v)=eig(A)" << endl;
-// print the smallest eigenvalue
-cout << "v[0]=" << eigM.get_evalues()[0] << endl;
-// print the associated eigenvector
-cout << "E[0]=" << eigM.get_evectors()[0] << endl;
address@hidden
-
-Further, provided the eigenvalues are nonnegative, the square root of
-a matrix and its inverse can also be obtained,
address@hidden
-// print the square root of the matrix.
-cout << "R=sqrtm(A)=" << eigM.get_sqrtm() << endl;
-// print the square root of the matrix squared.
-cout << "(should equal A), R^T*R="
-     << eigM.get_sqrtm().T() * eigM.get_sqrtm() << endl;
-// print the inverse of the matrix.
-cout << "A^-1=" << eigM.get_pinv() << endl;
-// print the inverse square root of the matrix.
-cout << "C=isqrtm(A)=" << eigM.get_isqrtm() << endl;
-// print the inverse square root of the matrix squared.
-cout << "(should equal A^-1), C^T*C="
-     << eigM.get_isqrtm().T() * eigM.get_isqrtm() << endl;
address@hidden
-
-This decomposition is very similar to the SVD (q.v.), and can be used to solve
-equations using backsub() or get_pinv(), with the same treatment of condition 
numbers.
-
-SymEigen<> (= SymEigen<-1>) can be used to create an eigen decomposition whose 
size is determined at run-time.
address@hidden gDecomps
-**/
-template <int Size=Dynamic, typename Precision = double>
-class SymEigen {
-public:
-       inline SymEigen(){}
-
-        /// Initialise this eigen decomposition but do no immediately
-        /// perform a decomposition.
-        ///
-        /// @param m The size of the matrix to perform the eigen decomposition 
on.
-        inline SymEigen(int m) : my_evectors(m,m), my_evalues(m) {}
-
-       /// Construct the eigen decomposition of a matrix. This initialises the 
class, and
-       /// performs the decomposition immediately.
-       template<int R, int C, typename B>
-       inline SymEigen(const Matrix<R, C, Precision, B>& m) : 
my_evectors(m.num_rows(), m.num_cols()), my_evalues(m.num_rows()) {
-               compute(m);
-       }
-
-       /// Perform the eigen decomposition of a matrix.
-       template<int R, int C, typename B>
-       inline void compute(const Matrix<R,C,Precision,B>& m){
-               SizeMismatch<R, C>::test(m.num_rows(), m.num_cols());
-               SizeMismatch<R, Size>::test(m.num_rows(), 
my_evectors.num_rows());
-               Internal::ComputeSymEigen<Size>::compute(m, my_evectors, 
my_evalues);
-       }
-
-       /// Calculate result of multiplying the (pseudo-)inverse of M by a 
vector.
-       /// For a vector \f$b\f$, this calculates \f$M^{\dagger}b\f$ by back 
substitution
-       /// (i.e. without explictly calculating the (pseudo-)inverse).
-       /// See the SVD detailed description for a description of condition 
variables.
-       template <int S, typename P, typename B>
-       Vector<Size, Precision> backsub(const Vector<S,P,B>& rhs) const {
-               return (my_evectors.T() * 
diagmult(get_inv_diag(Internal::symeigen_condition_no),(my_evectors * rhs)));
-       }
-
-       /// Calculate result of multiplying the (pseudo-)inverse of M by 
another matrix.
-       /// For a matrix \f$A\f$, this calculates \f$M^{\dagger}A\f$ by back 
substitution
-       /// (i.e. without explictly calculating the (pseudo-)inverse).
-       /// See the SVD detailed description for a description of condition 
variables.
-       template <int R, int C, typename P, typename B>
-       Matrix<Size,C, Precision> backsub(const Matrix<R,C,P,B>& rhs) const {
-               return (my_evectors.T() * 
diagmult(get_inv_diag(Internal::symeigen_condition_no),(my_evectors * rhs)));
-       }
-
-       /// Calculate (pseudo-)inverse of the matrix. This is not usually 
needed:
-       /// if you need the inverse just to multiply it by a matrix or a 
vector, use
-       /// one of the backsub() functions, which will be faster.
-       /// See the SVD detailed description for a description of the 
pseudo-inverse
-       /// and condition variables.
-       Matrix<Size, Size, Precision> get_pinv(const double 
condition=Internal::symeigen_condition_no) const {
-               return my_evectors.T() * 
diagmult(get_inv_diag(condition),my_evectors);
-       }
-
-       /// Calculates the reciprocals of the eigenvalues of the matrix.
-       /// The vector <code>invdiag</code> lists the eigenvalues in order, from
-       /// the largest (i.e. smallest reciprocal) to the smallest.
-       /// These are also the diagonal values of the matrix \f$Lambda^{-1}\f$.
-       /// Any eigenvalues which are too small are set to zero (see the SVD
-       /// detailed description for a description of the and condition 
variables).
-       Vector<Size, Precision> get_inv_diag(const double condition) const {
-               Precision max_diag = -my_evalues[0] > 
my_evalues[my_evalues.size()-1] ? 
-my_evalues[0]:my_evalues[my_evalues.size()-1];
-               Vector<Size, Precision> invdiag(my_evalues.size());
-               for(int i=0; i<my_evalues.size(); i++){
-                       if(fabs(my_evalues[i]) * condition > max_diag) {
-                               invdiag[i] = 1/my_evalues[i];
-                       } else {
-                               invdiag[i]=0;
-                       }
-               }
-               return invdiag;
-       }
-
-       /// Returns the eigenvectors of the matrix.
-       /// This returns \f$U^T\f$, so that the rows of the matrix are the 
eigenvectors,
-       /// which can be extracted using usual Matrix::operator[]() subscript 
operator.
-       /// They are returned in order of the size of the corresponding 
eigenvalue, i.e.
-       /// the vector with the largest eigenvalue is first.
-       Matrix<Size,Size,Precision>& get_evectors() {return my_evectors;}
-
-       /**\overload
-       */
-       const Matrix<Size,Size,Precision>& get_evectors() const {return 
my_evectors;}
-
-
-       /// Returns the eigenvalues of the matrix.
-       /// The eigenvalues are listed in order, from the smallest to the 
largest.
-       /// These are also the diagonal values of the matrix \f$\Lambda\f$.
-       Vector<Size, Precision>& get_evalues() {return my_evalues;}
-       /**\overload
-       */
-       const Vector<Size, Precision>& get_evalues() const {return my_evalues;}
-
-       /// Is the matrix positive definite?
-       bool is_posdef() const {
-               for (int i = 0; i < my_evalues.size(); ++i) {
-                       if (my_evalues[i] <= 0.0)
-                               return false;
-               }
-               return true;
-       }
-
-       /// Is the matrix negative definite?
-       bool is_negdef() const {
-               for (int i = 0; i < my_evalues.size(); ++i) {
-                       if (my_evalues[i] >= 0.0)
-                               return false;
-               }
-               return true;
-       }
-
-       /// Get the determinant of the matrix
-       Precision get_determinant () const {
-               Precision det = 1.0;
-               for (int i = 0; i < my_evalues.size(); ++i) {
-                       det *= my_evalues[i];
-               }
-               return det;
-       }
-
-       /// Calculate the square root of a matrix which is a matrix M
-       /// such that M.T*M=A.
-       Matrix<Size, Size, Precision> get_sqrtm () const {
-               Vector<Size, Precision> diag_sqrt(my_evalues.size());
-               // In the future, maybe throw an exception if an
-               // eigenvalue is negative?
-               for (int i = 0; i < my_evalues.size(); ++i) {
-                       diag_sqrt[i] = std::sqrt(my_evalues[i]);
-               }
-               return my_evectors.T() * diagmult(diag_sqrt, my_evectors);
-       }
-
-       /// Calculate the inverse square root of a matrix which is a
-       /// matrix M such that M.T*M=A^-1.
-        ///
-        /// Any square-rooted eigenvalues which are too small are set
-        /// to zero (see the SVD detailed description for a
-        /// description of the condition variables).
-       Matrix<Size, Size, Precision> get_isqrtm (const double 
condition=Internal::symeigen_condition_no) const {
-               Vector<Size, Precision> diag_isqrt(my_evalues.size());
-
-               // Because sqrt is a monotonic-preserving transformation,
-               Precision max_diag = -my_evalues[0] > 
my_evalues[my_evalues.size()-1] ? 
(-std::sqrt(my_evalues[0])):(std::sqrt(my_evalues[my_evalues.size()-1]));
-               // In the future, maybe throw an exception if an
-               // eigenvalue is negative?
-               for (int i = 0; i < my_evalues.size(); ++i) {
-                       diag_isqrt[i] = std::sqrt(my_evalues[i]);
-                       if(fabs(diag_isqrt[i]) * condition > max_diag) {
-                               diag_isqrt[i] = 1/diag_isqrt[i];
-                       } else {
-                               diag_isqrt[i] = 0;
-                       }
-               }
-               return my_evectors.T() * diagmult(diag_isqrt, my_evectors);
-       }
-
-private:
-       // eigen vectors laid out row-wise so evectors[i] is the ith evector
-       Matrix<Size,Size,Precision> my_evectors;
-
-       Vector<Size, Precision> my_evalues;
-};
-
-}
-
-#endif
-

Index: TODO
===================================================================
RCS file: TODO
diff -N TODO
--- TODO        1 May 2009 09:47:16 -0000       1.14
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,5 +0,0 @@
-use BLAS 
-more complete helpers.h
-Half dynamic slice?
-fix irls?
-iterators

Index: TooN.h
===================================================================
RCS file: TooN.h
diff -N TooN.h
--- TooN.h      25 Jan 2012 14:57:02 -0000      1.64
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,349 +0,0 @@
-//-*- c++ -*-
-
-// Copyright (C) 2005,2009 Tom Drummond (address@hidden),
-// Ed Rosten (address@hidden), Gerhard Reitmayr (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-
-#ifndef TOON_INCLUDE_TOON_H
-#define TOON_INCLUDE_TOON_H
-#include <iostream>
-#include <cstdlib>
-#include <limits>
-#include <new>
-#include <utility>
-#include <vector>
-#include <complex>
-#include <TooN/internal/config.hh>
-#include <TooN/internal/typeof.hh>
-#include <TooN/internal/deprecated.hh>
-
-#if defined TOON_NDEBUG || defined NDEBUG
-       #define TOON_NDEBUG_MISMATCH
-       #define TOON_NDEBUG_SLICE
-       #define TOON_NDEBUG_SIZE
-       #define TOON_NDEBUG_FILL
-#endif
-
-#ifdef TOON_INITIALIZE_RANDOM
-#include <ctime>
-#endif
-
-#ifdef TOON_USE_LAPACK
-       #ifndef TOON_DETERMINANT_LAPACK
-               #define TOON_DETERMINANT_LAPACK 35
-       #endif
-#endif
-
-///Everything lives inside this namespace
-namespace TooN {
-
-#ifdef TOON_TEST_INTERNALS
-       namespace Internal
-       {
-               struct BadIndex{};
-               struct SliceError{};
-               struct StaticSliceError{};
-               struct SizeMismatch{};
-               struct StaticSizeMismatch{};
-               struct VectorOverfill{};
-               struct StaticVectorOverfill{};
-               struct MatrixOverfill{};
-               struct StaticMatrixOverfill{};
-               struct Underfill{};
-       }
-#endif
-       
-       using std::numeric_limits;
-       ///Is a number a field? ie, +, -, *, / defined.
-       ///Specialize this to make TooN work properly with new types.
-       ///The primary reason for this is to allow SFINAE to work properly.
-       ///This is required if there are the following two functions:
-       ///@code 
-       ///   Vector<> * X  //Generic type X
-       ///   Vector<> * DiagonalMatrix<>
-       ///@endcode
-       ///If one of the functions is a substitution failure, then it will be
-       ///ignored, allowing the functions to coexist happily. However, not all
-       ///types of failure are substitution failures. TooN's type deduction 
happens
-       ///when determining the return type of the function. This is too early, 
so
-       ///the wrong kind of error in the return type deduction causes an 
error, rather
-       ///than a substitution failure. The IsField mechanism makes it the 
right kind of
-       ///error, thereby allowing a substitution failuer to occur.
-       ///
-       ///@internal
-       ///Internal::Field determines if two classes are in the same field.
-       ///@ingroup gLinAlg
-       template<class C> struct IsField
-       {
-               static const int value = numeric_limits<C>::is_specialized; 
///<Is C a field?
-       };
-
-       template<class C> struct IsField<std::complex<C> >
-       {
-               static const int value = numeric_limits<C>::is_specialized; 
///<Is C a field?
-       };
-       
-       ///Specialized for const types
-       ///@internal
-       ///Internal::Field determines if two classes are in the same field.
-       ///@ingroup gLinAlg
-       template<class C> struct IsField<const C>
-       {
-               static const int value = IsField<C>::value; ///<Is C a field?
-       };
-
-       template<class C, class D> struct These_Types_Do_Not_Form_A_Field;
-       
-       ///@internal
-       ///@brief The namaespace holding all the internal code.
-       namespace Internal
-       {
-               ///@internal
-               ///@brief Maximum number of bytes to be allocated on the stack.
-               ///new is used above this number.
-               static const unsigned int max_bytes_on_stack=1000;
-               ///@internal
-               ///@brief A tag used to indicate that a slice is being 
constructed.
-               ///@ingroup gInternal
-               struct Slicing{};
-               template<int RowStride, int ColStride> struct Slice;
-               template<int Size, typename Precision, int Stride, typename 
Mem> struct GenericVBase;
-       }
-
-       template<int Size, class Precision, class Base> struct Vector;
-       template<int Rows, int Cols, class Precision, class Base> struct Matrix;
-       template<int Size, class Precision, class Base> struct DiagonalMatrix;
-
-
-       #ifdef DOXYGEN_INCLUDE_ONLY_FOR_DOCS
-               ///@internal
-               ///@brief This is a struct used heavily in TooN internals.
-               ///
-               ///They have two main uses. The first use is in construction 
and is completely hidden.
-               ///For an expression such as a+b, the return value of operator+ 
will be constructed in
-               ///place in the return statement, to prevent excessive copying 
and calls to new/delete.
-               ///
-               ///The other use is much more visible and is for objects such 
as TooN::Zeros and TooN::Idendity .
-               ///
-               ///The features allowed (construction, addition, etc) depend on 
the members present. 
-               ///For simplicity, general arguments are given below. If 
members are non-general, then the 
-               ///operators will simply not be applicable to all vectors or 
matrices.
-               ///
-               ///Operators belong to any of a number of categories depending 
on the members they provide.
-               ///The categories are:
-               ///
-               /// - Sized operators
-               ///   - These know their own size and provide. 
-               ///     The sizes are used only in construction of dynamic 
vectors or
-               ///     matrices.
-               /// - Sizeable operators
-               ///   - Sizeable operators are able to generate a sized 
operator of the same sort.
-               /// - Scalable operators
-               ///   - These can be multiplied and divided by scalars.
-               ///
-               ///@ingroup gInternal
-               template<typename T> struct Operator{
-                       ///@name Members in the category ``sized operators''
-                       ///@{
-
-                       ///This must be provided in order to construct dynamic 
vectors.
-                       int size() const;
-                       ///This along with num_cols() must be present in order 
to construct matrices.
-                       int num_rows() const; 
-                       ///This along with num_rows() must be present in order 
to construct matrices.
-                       int num_cols() const;
-                       ///@}
-                       
-                       ///@name Members used by Vector
-                       ///@{
-
-                       ///This function must be present for construction and 
assignment
-                       ///of vectors to work.
-                       template<int Size, class Precision, class Base>
-                       void eval(Vector<Size, Precision, Base>& v) const;
-
-                       ///This must be present for vector += operator
-                       template <int Size, typename P1, typename B1> 
-                       void plusequals(Vector<Size, P1, B1>& v) const;
-
-                       ///This must be present for vector -= operator
-                       template <int Size, typename P1, typename B1>
-                       void minusequals(Vector<Size, P1, B1>& v) const;
-
-                       ///This function must be present for vector + operator
-                       ///and operator + vector
-                       template <int Size, typename P1, typename B1> 
-                       Operator<T> add(const Vector<Size, P1, B1>& v) const;
-
-                       ///This function must be present for vector - operator
-                       template <int Size, typename P1, typename B1> 
-                       Operator<T> rsubtract(const Vector<Size, P1, B1>& v) 
const;
-
-                       ///This function must be present for operator - vector
-                       template <int Size, typename P1, typename B1> 
-                       Operator<T> lsubtract(const Vector<Size, P1, B1>& v) 
const;
-
-                       ///@}
-
-                       ///@name Members used by Matrix
-                       ///@{
-                       ///This function must be present for construction and 
assignment
-                       ///of matrices to work.
-                       template<int R, int C, class P, class B>
-                       void eval(Matrix<R,C,P,B>& m) const; 
-
-                       ///This function must be present for matrix + operator
-                       ///and operator + matrix
-                       template <int Rows, int Cols, typename P1, typename B1> 
-                       Operator<T> add(const Matrix<Rows,Cols, P1, B1>& m) 
const;
-
-
-                       ///This function must be present for matrix - operator
-                       template <int Rows, int Cols, typename P1, typename B1> 
-                       Operator<T> rsubtract(const Matrix<Rows,Cols, P1, B1>& 
m) const;
-
-                       ///This function must be present for operator - matrix
-                       template <int Rows, int Cols, typename P1, typename B1> 
-                       Operator<T> lsubtract(const Matrix<Rows,Cols, P1, B1>& 
m) const;
-
-                       ///This must be present for matrix += operator
-                       template <int Rows, int Cols, typename P1, typename B1> 
-                       void plusequals(Matrix<Rows,Cols, P1, B1>& m) const;
-
-                       ///This must be present for matrix -= operator
-                       template <int Rows, int Cols, typename P1, typename B1> 
-                       void minusequals(Matrix<Rows,Cols, P1, B1>& m) const;
-                       ///@}
-
-
-                       ///@name Members in the category ``sizeable oberators''
-                       ///@{
-
-                       ///Create an operator that knows its size.
-                       ///Suitable for vectors and square matrices.
-                       Operator<T> operator()(int size) const;
-                       
-                       ///Create an operator that knows its size, suitable for 
matrices.
-                       Operator<T> operator()(int num_rows, int num_cols) 
const;
-                       ///@}
-                       
-                       ///@name Members in the category ``scalable operators''
-                       ///@{
-                       typedef T Precision; ///<Precision of the operator's 
scale.
-                       
-                       ///Scale the operator by a scalar and return a new 
opeator.
-                       template<class Pout, class Pmult> 
Operator<Internal::Identity<Pout> > scale_me(const Pmult& m) const
-                       {
-                               return Operator<Internal::Identity<Pout> 
>(val*m);
-                       }
-                       ///@}
-
-               };
-       #else
-               template<typename T> struct Operator;
-       #endif
-
-       ///Template size value used to indicate dynamically sized vectors and 
matrices.
-       static const int Dynamic = -1;
-       static const int Resizable = -0x7fffffff;
-
-       namespace Internal
-       {
-               template<int i, int j> struct SimpleSizer{static const int 
size=i;};
-               template<int i> struct SimpleSizer<Dynamic, i>{static const int 
size=i;};
-               template<int i> struct SimpleSizer<i, Dynamic>{static const int 
size=i;};
-               template<> struct SimpleSizer<Dynamic, Dynamic>    {static 
const int size=-1;};
-
-               template<int i> struct IsStatic
-               {
-                       static const bool is = (i!=Dynamic && i != Resizable);
-               };
-
-               //Choose an output size, given a pair of input sizes. Be static 
if possible.
-               template<int i, int j=i> struct Sizer{
-                       static const int size=SimpleSizer<Sizer<i>::size, 
Sizer<j>::size>::size;
-               };
-
-               //Choose an output size, given an input size. Be static if 
possible.
-               //Otherwise be dynamic. Never generate a resizable vector.
-               template<int i> struct Sizer<i,i>{
-                       static const int size = IsStatic<i>::is?i:Dynamic;
-               };
-       }
-       
-       ///All TooN classes default to using this precision for computations 
and storage.
-#ifndef TOON_DEFAULT_PRECISION
-       typedef double DefaultPrecision;
-#else
-       typedef TOON_DEFAULT_PRECISION DefaultPrecision;
-#endif
-
-#if defined  TOON_FORTRAN_INTEGER && defined TOON_CLAPACK
-       #error Error: both TOON_FORTRAN_INTEGER and TOON_CLAPACK defined
-#elif defined TOON_CLAPACK
-       typedef long FortranInteger;
-#elif defined TOON_FORTRAN_INTEGER
-       typedef TOON_FORTRAN_INTEGER FortranInteger;
-#else
-       typedef int FortranInteger;
-#endif
-
-}
-
-#include <TooN/internal/debug.hh>
-
-#include <TooN/internal/dchecktest.hh>
-#include <TooN/internal/allocator.hh>
-
-#include <TooN/internal/size_mismatch.hh>
-#include <TooN/internal/overfill_error.hh>
-#include <TooN/internal/slice_error.hh>
-
-#include <TooN/internal/comma.hh>
-
-#include <TooN/internal/vbase.hh>
-#include <TooN/internal/vector.hh>
-       
-#include <TooN/internal/mbase.hh>
-#include <TooN/internal/matrix.hh>
-#include <TooN/internal/reference.hh>
-
-#include <TooN/internal/make_vector.hh>
-#include <TooN/internal/operators.hh>
-       
-#include <TooN/internal/objects.h>
-
-#include <TooN/internal/diagmatrix.h>
-
-#include <TooN/internal/data.hh>
-#include <TooN/internal/data_functions.hh>
-
-#include <TooN/helpers.h>
-#include <TooN/determinant.h>
-
-#endif

Index: TooN.pc
===================================================================
RCS file: TooN.pc
diff -N TooN.pc
--- TooN.pc     20 Jan 2012 17:22:51 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,8 +0,0 @@
-prefix=/usr/local
-includedir=${prefix}/include
-
-Name: TooN
-Description: Tom's Object-oriented numerics library
-Version: version-2.0.0-beta7
-Libs: -llapack 
-Cflags: -I${includedir}

Index: TooN.pc.in
===================================================================
RCS file: TooN.pc.in
diff -N TooN.pc.in
--- TooN.pc.in  5 Jul 2010 12:51:23 -0000       1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,8 +0,0 @@
address@hidden@
address@hidden@
-
-Name: TooN
-Description: Tom's Object-oriented numerics library
-Version: @VERSION@
-Libs: @LIBS@
-Cflags: -I${includedir}

Index: configure
===================================================================
RCS file: configure
diff -N configure
--- configure   6 Feb 2012 14:59:35 -0000       1.14
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,4160 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for TooN version-2.0.0-beta8.
-#
-#
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
-# Foundation, Inc.
-#
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-#
-# Copyright T. Drummond, E. Rosten, G. Reitmayr 2006, 2007, 2008, 2009
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2>/dev/null` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; 
then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
-  else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-       expr "X$arg" : "X\\(.*\\)$as_nl";
-       arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
-  fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  PATH_SEPARATOR=:
-  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
-    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
-      PATH_SEPARATOR=';'
-  }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" ""       $as_nl"
-
-# Find who we are.  Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
-  *[\\/]* ) as_myself=$0 ;;
-  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-  done
-IFS=$as_save_IFS
-
-     ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
-  as_myself=$0
-fi
-if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file 
name" >&2
-  exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test "x$CONFIG_SHELL" = x; then
-  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) 
>/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on \${1+\"address@hidden"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '\${1+\"address@hidden"}'='\"address@hidden"'
-  setopt NO_GLOB_SUBST
-else
-  case \`(set -o) 2>/dev/null\` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-"
-  as_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
-
-exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
-  exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1"
-  as_suggested="  
as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" 
as_lineno_1a=\$LINENO
-  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" 
as_lineno_2a=\$LINENO
-  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
-  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = 
\"x\$as_lineno_2'\$as_run'\"' || exit 1"
-  if (eval "$as_required") 2>/dev/null; then :
-  as_have_required=yes
-else
-  as_have_required=no
-fi
-  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; 
then :
-
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  as_found=:
-  case $as_dir in #(
-        /*)
-          for as_base in sh bash ksh sh5; do
-            # Try only shells that exist, to save several forks.
-            as_shell=$as_dir/$as_base
-            if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
-                   { $as_echo "$as_bourne_compatible""$as_required" | as_run=a 
"$as_shell"; } 2>/dev/null; then :
-  CONFIG_SHELL=$as_shell as_have_required=yes
-                  if { $as_echo "$as_bourne_compatible""$as_suggested" | 
as_run=a "$as_shell"; } 2>/dev/null; then :
-  break 2
-fi
-fi
-          done;;
-       esac
-  as_found=false
-done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
-             { $as_echo "$as_bourne_compatible""$as_required" | as_run=a 
"$SHELL"; } 2>/dev/null; then :
-  CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
-IFS=$as_save_IFS
-
-
-      if test "x$CONFIG_SHELL" != x; then :
-  # We cannot yet assume a decent shell, so we have to provide a
-       # neutralization value for shells without unset; and this also
-       # works around shells that cannot unset nonexistent variables.
-       # Preserve -v and -x to the replacement shell.
-       BASH_ENV=/dev/null
-       ENV=/dev/null
-       (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-       export CONFIG_SHELL
-       case $- in # ((((
-         *v*x* | *x*v* ) as_opts=-vx ;;
-         *v* ) as_opts=-v ;;
-         *x* ) as_opts=-x ;;
-         * ) as_opts= ;;
-       esac
-       exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
-fi
-
-    if test x$as_have_required = xno; then :
-  $as_echo "$0: This script requires a shell more modern than all"
-  $as_echo "$0: the shells that I found on your system."
-  if test x${ZSH_VERSION+set} = xset ; then
-    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
-    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
-  else
-    $as_echo "$0: Please tell address@hidden about your system,
-$0: including any error possibly output before this
-$0: message. Then install a modern shell, or manually run
-$0: the script under such a shell if you do have one."
-  fi
-  exit 1
-fi
-fi
-fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
-
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
-  { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
-  return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
-  set +e
-  as_fn_set_status $1
-  exit $1
-} # as_fn_exit
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || eval $as_mkdir_p || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs="'$as_qdir' $as_dirs"
-      as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-        X"$as_dir" : 'X\(//\)[^/]' \| \
-        X"$as_dir" : 'X\(//\)$' \| \
-        X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)[^/].*/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\).*/{
-           s//\1/
-           q
-         }
-         s/.*/./; q'`
-      test -d "$as_dir" && break
-    done
-    test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
-  eval 'as_fn_append ()
-  {
-    eval $1+=\$2
-  }'
-else
-  as_fn_append ()
-  {
-    eval $1=\$$1\$2
-  }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
-  eval 'as_fn_arith ()
-  {
-    as_val=$(( $* ))
-  }'
-else
-  as_fn_arith ()
-  {
-    as_val=`expr "$@" || test $? -eq 1`
-  }
-fi # as_fn_arith
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
-  as_status=$1; test $as_status -eq 0 && as_status=1
-  if test "$4"; then
-    as_lineno=${as_lineno-"$3"} 
as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
-  fi
-  $as_echo "$as_me: error: $2" >&2
-  as_fn_exit $as_status
-} # as_fn_error
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-        X"$0" : 'X\(//\)$' \| \
-        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-           s//\1/
-           q
-         }
-         /^X\/\(\/\/\)$/{
-           s//\1/
-           q
-         }
-         /^X\/\(\/\).*/{
-           s//\1/
-           q
-         }
-         s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-
-  as_lineno_1=$LINENO as_lineno_1a=$LINENO
-  as_lineno_2=$LINENO as_lineno_2a=$LINENO
-  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
-  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
-  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
-  sed -n '
-    p
-    /[$]LINENO/=
-  ' <$as_myself |
-    sed '
-      s/[$]LINENO.*/&-/
-      t lineno
-      b
-      :lineno
-      N
-      :loop
-      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
-      t loop
-      s/-\n.*//
-    ' >$as_me.lineno &&
-  chmod +x "$as_me.lineno" ||
-    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX 
shell" >&2; as_fn_exit 1; }
-
-  # Don't try to exec as it changes $[0], causing all sort of problems
-  # (the dirname of $[0] is not the place where we might find the
-  # original and so on.  Autoconf is especially sensitive to this).
-  . "./$as_me.lineno"
-  # Exit status is that of the last command.
-  exit
-}
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
-  case `echo 'xy\c'` in
-  *c*) ECHO_T='        ';;     # ECHO_T is single tab character.
-  xy)  ECHO_C='\c';;
-  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
-       ECHO_T='        ';;
-  esac;;
-*)
-  ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
-  rm -f conf$$.dir/conf$$.file
-else
-  rm -f conf$$.dir
-  mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
-  if ln -s conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s='ln -s'
-    # ... but there are two gotchas:
-    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
-    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
-  elif ln conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s=ln
-  else
-    as_ln_s='cp -p'
-  fi
-else
-  as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p='mkdir -p "$as_dir"'
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-       test -d "$1/.";
-      else
-       case $1 in #(
-       -*)set "./$1";;
-       esac;
-       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-       ???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 
'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-test -n "$DJDIR" || exec 7<&0 </dev/null
-exec 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-
-# Identity of this package.
-PACKAGE_NAME='TooN'
-PACKAGE_TARNAME='toon'
-PACKAGE_VERSION='version-2.0.0-beta8'
-PACKAGE_STRING='TooN version-2.0.0-beta8'
-PACKAGE_BUGREPORT=''
-PACKAGE_URL=''
-
-ac_subst_vars='LTLIBOBJS
-LIBOBJS
-VERSION
-PKGCONFIG_LIBDIR
-SED
-PKG_CONFIG
-OBJEXT
-EXEEXT
-ac_ct_CXX
-CPPFLAGS
-LDFLAGS
-CXXFLAGS
-CXX
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-enable_lapack
-enable_typeof
-with_default_precision
-'
-      ac_precious_vars='build_alias
-host_alias
-target_alias
-CXX
-CXXFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CCC'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
-  # If the previous option needs an argument, assign it.
-  if test -n "$ac_prev"; then
-    eval $ac_prev=\$ac_option
-    ac_prev=
-    continue
-  fi
-
-  case $ac_option in
-  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
-  *=)   ac_optarg= ;;
-  *)    ac_optarg=yes ;;
-  esac
-
-  # Accept the important Cygnus configure options, so we can diagnose typos.
-
-  case $ac_dashdash$ac_option in
-  --)
-    ac_dashdash=yes ;;
-
-  -bindir | --bindir | --bindi | --bind | --bin | --bi)
-    ac_prev=bindir ;;
-  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
-    bindir=$ac_optarg ;;
-
-  -build | --build | --buil | --bui | --bu)
-    ac_prev=build_alias ;;
-  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
-    build_alias=$ac_optarg ;;
-
-  -cache-file | --cache-file | --cache-fil | --cache-fi \
-  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
-    ac_prev=cache_file ;;
-  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
-  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
-    cache_file=$ac_optarg ;;
-
-  --config-cache | -C)
-    cache_file=config.cache ;;
-
-  -datadir | --datadir | --datadi | --datad)
-    ac_prev=datadir ;;
-  -datadir=* | --datadir=* | --datadi=* | --datad=*)
-    datadir=$ac_optarg ;;
-
-  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
-  | --dataroo | --dataro | --datar)
-    ac_prev=datarootdir ;;
-  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
-  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
-    datarootdir=$ac_optarg ;;
-
-  -disable-* | --disable-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid feature name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"enable_$ac_useropt"
-"*) ;;
-      *) 
ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
-        ac_unrecognized_sep=', ';;
-    esac
-    eval enable_$ac_useropt=no ;;
-
-  -docdir | --docdir | --docdi | --doc | --do)
-    ac_prev=docdir ;;
-  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
-    docdir=$ac_optarg ;;
-
-  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
-    ac_prev=dvidir ;;
-  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
-    dvidir=$ac_optarg ;;
-
-  -enable-* | --enable-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid feature name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"enable_$ac_useropt"
-"*) ;;
-      *) 
ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
-        ac_unrecognized_sep=', ';;
-    esac
-    eval enable_$ac_useropt=\$ac_optarg ;;
-
-  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
-  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
-  | --exec | --exe | --ex)
-    ac_prev=exec_prefix ;;
-  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
-  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
-  | --exec=* | --exe=* | --ex=*)
-    exec_prefix=$ac_optarg ;;
-
-  -gas | --gas | --ga | --g)
-    # Obsolete; use --with-gas.
-    with_gas=yes ;;
-
-  -help | --help | --hel | --he | -h)
-    ac_init_help=long ;;
-  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
-    ac_init_help=recursive ;;
-  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
-    ac_init_help=short ;;
-
-  -host | --host | --hos | --ho)
-    ac_prev=host_alias ;;
-  -host=* | --host=* | --hos=* | --ho=*)
-    host_alias=$ac_optarg ;;
-
-  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
-    ac_prev=htmldir ;;
-  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
-  | --ht=*)
-    htmldir=$ac_optarg ;;
-
-  -includedir | --includedir | --includedi | --included | --include \
-  | --includ | --inclu | --incl | --inc)
-    ac_prev=includedir ;;
-  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
-  | --includ=* | --inclu=* | --incl=* | --inc=*)
-    includedir=$ac_optarg ;;
-
-  -infodir | --infodir | --infodi | --infod | --info | --inf)
-    ac_prev=infodir ;;
-  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
-    infodir=$ac_optarg ;;
-
-  -libdir | --libdir | --libdi | --libd)
-    ac_prev=libdir ;;
-  -libdir=* | --libdir=* | --libdi=* | --libd=*)
-    libdir=$ac_optarg ;;
-
-  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
-  | --libexe | --libex | --libe)
-    ac_prev=libexecdir ;;
-  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
-  | --libexe=* | --libex=* | --libe=*)
-    libexecdir=$ac_optarg ;;
-
-  -localedir | --localedir | --localedi | --localed | --locale)
-    ac_prev=localedir ;;
-  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
-    localedir=$ac_optarg ;;
-
-  -localstatedir | --localstatedir | --localstatedi | --localstated \
-  | --localstate | --localstat | --localsta | --localst | --locals)
-    ac_prev=localstatedir ;;
-  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
-  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
-    localstatedir=$ac_optarg ;;
-
-  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
-    ac_prev=mandir ;;
-  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
-    mandir=$ac_optarg ;;
-
-  -nfp | --nfp | --nf)
-    # Obsolete; use --without-fp.
-    with_fp=no ;;
-
-  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
-  | --no-cr | --no-c | -n)
-    no_create=yes ;;
-
-  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
-  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
-    no_recursion=yes ;;
-
-  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
-  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
-  | --oldin | --oldi | --old | --ol | --o)
-    ac_prev=oldincludedir ;;
-  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
-  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
-  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
-    oldincludedir=$ac_optarg ;;
-
-  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
-    ac_prev=prefix ;;
-  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
-    prefix=$ac_optarg ;;
-
-  -program-prefix | --program-prefix | --program-prefi | --program-pref \
-  | --program-pre | --program-pr | --program-p)
-    ac_prev=program_prefix ;;
-  -program-prefix=* | --program-prefix=* | --program-prefi=* \
-  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
-    program_prefix=$ac_optarg ;;
-
-  -program-suffix | --program-suffix | --program-suffi | --program-suff \
-  | --program-suf | --program-su | --program-s)
-    ac_prev=program_suffix ;;
-  -program-suffix=* | --program-suffix=* | --program-suffi=* \
-  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
-    program_suffix=$ac_optarg ;;
-
-  -program-transform-name | --program-transform-name \
-  | --program-transform-nam | --program-transform-na \
-  | --program-transform-n | --program-transform- \
-  | --program-transform | --program-transfor \
-  | --program-transfo | --program-transf \
-  | --program-trans | --program-tran \
-  | --progr-tra | --program-tr | --program-t)
-    ac_prev=program_transform_name ;;
-  -program-transform-name=* | --program-transform-name=* \
-  | --program-transform-nam=* | --program-transform-na=* \
-  | --program-transform-n=* | --program-transform-=* \
-  | --program-transform=* | --program-transfor=* \
-  | --program-transfo=* | --program-transf=* \
-  | --program-trans=* | --program-tran=* \
-  | --progr-tra=* | --program-tr=* | --program-t=*)
-    program_transform_name=$ac_optarg ;;
-
-  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
-    ac_prev=pdfdir ;;
-  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
-    pdfdir=$ac_optarg ;;
-
-  -psdir | --psdir | --psdi | --psd | --ps)
-    ac_prev=psdir ;;
-  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
-    psdir=$ac_optarg ;;
-
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil)
-    silent=yes ;;
-
-  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
-    ac_prev=sbindir ;;
-  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
-  | --sbi=* | --sb=*)
-    sbindir=$ac_optarg ;;
-
-  -sharedstatedir | --sharedstatedir | --sharedstatedi \
-  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
-  | --sharedst | --shareds | --shared | --share | --shar \
-  | --sha | --sh)
-    ac_prev=sharedstatedir ;;
-  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
-  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
-  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
-  | --sha=* | --sh=*)
-    sharedstatedir=$ac_optarg ;;
-
-  -site | --site | --sit)
-    ac_prev=site ;;
-  -site=* | --site=* | --sit=*)
-    site=$ac_optarg ;;
-
-  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
-    ac_prev=srcdir ;;
-  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
-    srcdir=$ac_optarg ;;
-
-  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
-  | --syscon | --sysco | --sysc | --sys | --sy)
-    ac_prev=sysconfdir ;;
-  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
-  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
-    sysconfdir=$ac_optarg ;;
-
-  -target | --target | --targe | --targ | --tar | --ta | --t)
-    ac_prev=target_alias ;;
-  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
-    target_alias=$ac_optarg ;;
-
-  -v | -verbose | --verbose | --verbos | --verbo | --verb)
-    verbose=yes ;;
-
-  -version | --version | --versio | --versi | --vers | -V)
-    ac_init_version=: ;;
-
-  -with-* | --with-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid package name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"with_$ac_useropt"
-"*) ;;
-      *) 
ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
-        ac_unrecognized_sep=', ';;
-    esac
-    eval with_$ac_useropt=\$ac_optarg ;;
-
-  -without-* | --without-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid package name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"with_$ac_useropt"
-"*) ;;
-      *) 
ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
-        ac_unrecognized_sep=', ';;
-    esac
-    eval with_$ac_useropt=no ;;
-
-  --x)
-    # Obsolete; use --with-x.
-    with_x=yes ;;
-
-  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
-  | --x-incl | --x-inc | --x-in | --x-i)
-    ac_prev=x_includes ;;
-  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
-  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
-    x_includes=$ac_optarg ;;
-
-  -x-libraries | --x-libraries | --x-librarie | --x-librari \
-  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
-    ac_prev=x_libraries ;;
-  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
-  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
-    x_libraries=$ac_optarg ;;
-
-  -*) as_fn_error $? "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information"
-    ;;
-
-  *=*)
-    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
-    # Reject names that are not valid shell variable names.
-    case $ac_envvar in #(
-      '' | [0-9]* | *[!_$as_cr_alnum]* )
-      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
-    esac
-    eval $ac_envvar=\$ac_optarg
-    export $ac_envvar ;;
-
-  *)
-    # FIXME: should be removed in autoconf 3.0.
-    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
-    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : "${build_alias=$ac_option} ${host_alias=$ac_option} 
${target_alias=$ac_option}"
-    ;;
-
-  esac
-done
-
-if test -n "$ac_prev"; then
-  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  as_fn_error $? "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
-  case $enable_option_checking in
-    no) ;;
-    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
-    *)     $as_echo "$as_me: WARNING: unrecognized options: 
$ac_unrecognized_opts" >&2 ;;
-  esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in  exec_prefix prefix bindir sbindir libexecdir datarootdir \
-               datadir sysconfdir sharedstatedir localstatedir includedir \
-               oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
-               libdir localedir mandir
-do
-  eval ac_val=\$$ac_var
-  # Remove trailing slashes.
-  case $ac_val in
-    */ )
-      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
-      eval $ac_var=\$ac_val;;
-  esac
-  # Be sure to have absolute directory names.
-  case $ac_val in
-    [\\/$]* | ?:[\\/]* )  continue;;
-    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
-  esac
-  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
-  if test "x$build_alias" = x; then
-    cross_compiling=maybe
-    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't 
use --host.
-    If a cross compiler is detected then cross compile mode will be used" >&2
-  elif test "x$build_alias" != "x$host_alias"; then
-    cross_compiling=yes
-  fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
-  as_fn_error $? "working directory cannot be determined"
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
-  as_fn_error $? "pwd does not report name of working directory"
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
-  ac_srcdir_defaulted=yes
-  # Try the directory containing this script, then the parent directory.
-  ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-        X"$as_myself" : 'X\(//\)[^/]' \| \
-        X"$as_myself" : 'X\(//\)$' \| \
-        X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)[^/].*/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\).*/{
-           s//\1/
-           q
-         }
-         s/.*/./; q'`
-  srcdir=$ac_confdir
-  if test ! -r "$srcdir/$ac_unique_file"; then
-    srcdir=..
-  fi
-else
-  ac_srcdir_defaulted=no
-fi
-if test ! -r "$srcdir/$ac_unique_file"; then
-  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
-  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
-       cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
-       pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
-  srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
-  eval ac_env_${ac_var}_set=\${${ac_var}+set}
-  eval ac_env_${ac_var}_value=\$${ac_var}
-  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
-  eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
-  # Omit some internal or obsolete options to make the list less imposing.
-  # This message is too long to be a string in the A/UX 3.1 sh.
-  cat <<_ACEOF
-\`configure' configures TooN version-2.0.0-beta8 to adapt to many kinds of 
systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE.  See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
-  -h, --help              display this help and exit
-      --help=short        display options specific to this package
-      --help=recursive    display the short help of all the included packages
-  -V, --version           display version information and exit
-  -q, --quiet, --silent   do not print \`checking ...' messages
-      --cache-file=FILE   cache test results in FILE [disabled]
-  -C, --config-cache      alias for \`--cache-file=config.cache'
-  -n, --no-create         do not create output files
-      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
-
-Installation directories:
-  --prefix=PREFIX         install architecture-independent files in PREFIX
-                          [$ac_default_prefix]
-  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-                          [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
-  --bindir=DIR            user executables [EPREFIX/bin]
-  --sbindir=DIR           system admin executables [EPREFIX/sbin]
-  --libexecdir=DIR        program executables [EPREFIX/libexec]
-  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
-  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
-  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
-  --libdir=DIR            object code libraries [EPREFIX/lib]
-  --includedir=DIR        C header files [PREFIX/include]
-  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
-  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
-  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
-  --infodir=DIR           info documentation [DATAROOTDIR/info]
-  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
-  --mandir=DIR            man documentation [DATAROOTDIR/man]
-  --docdir=DIR            documentation root [DATAROOTDIR/doc/toon]
-  --htmldir=DIR           html documentation [DOCDIR]
-  --dvidir=DIR            dvi documentation [DOCDIR]
-  --pdfdir=DIR            pdf documentation [DOCDIR]
-  --psdir=DIR             ps documentation [DOCDIR]
-_ACEOF
-
-  cat <<\_ACEOF
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-  case $ac_init_help in
-     short | recursive ) echo "Configuration of TooN version-2.0.0-beta8:";;
-   esac
-  cat <<\_ACEOF
-
-Optional Features:
-  --disable-option-checking  ignore unrecognized --enable/--with options
-  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
-  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --enable-lapack         Use LAPACK where optional
-  --enable-typeof=X       Force typeof to be decltype, __typeof__, typeof,
-                          boost or none
-
-Optional Packages:
-  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
-  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-  --with-default_precision=X
-                          Override default precision from double to X
-
-Some influential environment variables:
-  CXX         C++ compiler command
-  CXXFLAGS    C++ compiler flags
-  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
-              nonstandard directory <lib dir>
-  LIBS        libraries to pass to the linker, e.g. -l<library>
-  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
-              you have headers in a nonstandard directory <include dir>
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-Report bugs to the package provider.
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
-  # If there are subdirs, report their specific --help.
-  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
-    test -d "$ac_dir" ||
-      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
-      continue
-    ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
-  # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 
's|/[^\\/]*|/..|g;s|/||'`
-  case $ac_top_builddir_sub in
-  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
-  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
-  esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
-  .)  # We are building in place.
-    ac_srcdir=.
-    ac_top_srcdir=$ac_top_builddir_sub
-    ac_abs_top_srcdir=$ac_pwd ;;
-  [\\/]* | ?:[\\/]* )  # Absolute name.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir
-    ac_abs_top_srcdir=$srcdir ;;
-  *) # Relative name.
-    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_build_prefix$srcdir
-    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-    cd "$ac_dir" || { ac_status=$?; continue; }
-    # Check for guested configure.
-    if test -f "$ac_srcdir/configure.gnu"; then
-      echo &&
-      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
-    elif test -f "$ac_srcdir/configure"; then
-      echo &&
-      $SHELL "$ac_srcdir/configure" --help=recursive
-    else
-      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" 
>&2
-    fi || ac_status=$?
-    cd "$ac_pwd" || { ac_status=$?; break; }
-  done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
-  cat <<\_ACEOF
-TooN configure version-2.0.0-beta8
-generated by GNU Autoconf 2.68
-
-Copyright (C) 2010 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-
-Copyright T. Drummond, E. Rosten, G. Reitmayr 2006, 2007, 2008, 2009
-_ACEOF
-  exit
-fi
-
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-
-# ac_fn_cxx_try_compile LINENO
-# ----------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_cxx_try_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext
-  if { { ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compile") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-        test -z "$ac_cxx_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_retval=1
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_cxx_try_compile
-
-# ac_fn_cxx_try_link LINENO
-# -------------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_cxx_try_link ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext conftest$ac_exeext
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-        test -z "$ac_cxx_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-        test "$cross_compiling" = yes ||
-        $as_test_x conftest$ac_exeext
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_retval=1
-fi
-  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
-  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
-  # interfere with the next link command; also delete a directory that is
-  # left behind by Apple's compiler.  We do this before executing the actions.
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_cxx_try_link
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by TooN $as_me version-2.0.0-beta8, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
-
-  $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
-
-/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
-/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
-/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    $as_echo "PATH: $as_dir"
-  done
-IFS=$as_save_IFS
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
-  for ac_arg
-  do
-    case $ac_arg in
-    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
-    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-    | -silent | --silent | --silen | --sile | --sil)
-      continue ;;
-    *\'*)
-      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    case $ac_pass in
-    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
-    2)
-      as_fn_append ac_configure_args1 " '$ac_arg'"
-      if test $ac_must_keep_next = true; then
-       ac_must_keep_next=false # Got value, back to normal.
-      else
-       case $ac_arg in
-         *=* | --config-cache | -C | -disable-* | --disable-* \
-         | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
-         | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
-         | -with-* | --with-* | -without-* | --without-* | --x)
-           case "$ac_configure_args0 " in
-             "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
-           esac
-           ;;
-         -* ) ac_must_keep_next=true ;;
-       esac
-      fi
-      as_fn_append ac_configure_args " '$ac_arg'"
-      ;;
-    esac
-  done
-done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset ac_configure_args1;}
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log.  We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
-  # Save into config.log some information that might help in debugging.
-  {
-    echo
-
-    $as_echo "## ---------------- ##
-## Cache variables. ##
-## ---------------- ##"
-    echo
-    # The following way of writing the cache mishandles newlines in values,
-(
-  for ac_var in `(set) 2>&1 | sed -n 
'\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
-    eval ac_val=\$$ac_var
-    case $ac_val in #(
-    *${as_nl}*)
-      case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable 
$ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
-      esac
-      case $ac_var in #(
-      _ | IFS | as_nl) ;; #(
-      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
-      *) { eval $ac_var=; unset $ac_var;} ;;
-      esac ;;
-    esac
-  done
-  (set) 2>&1 |
-    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
-    *${as_nl}ac_space=\ *)
-      sed -n \
-       "s/'\''/'\''\\\\'\'''\''/g;
-         
s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
-      ;; #(
-    *)
-      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
-      ;;
-    esac |
-    sort
-)
-    echo
-
-    $as_echo "## ----------------- ##
-## Output variables. ##
-## ----------------- ##"
-    echo
-    for ac_var in $ac_subst_vars
-    do
-      eval ac_val=\$$ac_var
-      case $ac_val in
-      *\'\''*) ac_val=`$as_echo "$ac_val" | sed 
"s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
-      esac
-      $as_echo "$ac_var='\''$ac_val'\''"
-    done | sort
-    echo
-
-    if test -n "$ac_subst_files"; then
-      $as_echo "## ------------------- ##
-## File substitutions. ##
-## ------------------- ##"
-      echo
-      for ac_var in $ac_subst_files
-      do
-       eval ac_val=\$$ac_var
-       case $ac_val in
-       *\'\''*) ac_val=`$as_echo "$ac_val" | sed 
"s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
-       esac
-       $as_echo "$ac_var='\''$ac_val'\''"
-      done | sort
-      echo
-    fi
-
-    if test -s confdefs.h; then
-      $as_echo "## ----------- ##
-## confdefs.h. ##
-## ----------- ##"
-      echo
-      cat confdefs.h
-      echo
-    fi
-    test "$ac_signal" != 0 &&
-      $as_echo "$as_me: caught signal $ac_signal"
-    $as_echo "$as_me: exit $exit_status"
-  } >&5
-  rm -f core *.core core.conftest.* &&
-    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
-    exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
-  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-$as_echo "/* confdefs.h */" > confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
-  # We do not want a PATH search for config.site.
-  case $CONFIG_SITE in #((
-    -*)  ac_site_file1=./$CONFIG_SITE;;
-    */*) ac_site_file1=$CONFIG_SITE;;
-    *)   ac_site_file1=./$CONFIG_SITE;;
-  esac
-elif test "x$prefix" != xNONE; then
-  ac_site_file1=$prefix/share/config.site
-  ac_site_file2=$prefix/etc/config.site
-else
-  ac_site_file1=$ac_default_prefix/share/config.site
-  ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
-  test "x$ac_site_file" = xNONE && continue
-  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script 
$ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
-    sed 's/^/| /' "$ac_site_file" >&5
-    . "$ac_site_file" \
-      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5; }
-  fi
-done
-
-if test -r "$cache_file"; then
-  # Some versions of bash will fail to source /dev/null (special files
-  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
-  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
-    case $cache_file in
-      [\\/]* | ?:[\\/]* ) . "$cache_file";;
-      *)                      . "./$cache_file";;
-    esac
-  fi
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
-  >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in $ac_precious_vars; do
-  eval ac_old_set=\$ac_cv_env_${ac_var}_set
-  eval ac_new_set=\$ac_env_${ac_var}_set
-  eval ac_old_val=\$ac_cv_env_${ac_var}_value
-  eval ac_new_val=\$ac_env_${ac_var}_value
-  case $ac_old_set,$ac_new_set in
-    set,)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to 
\`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous 
run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,set)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set 
in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,);;
-    *)
-      if test "x$ac_old_val" != "x$ac_new_val"; then
-       # differences in whitespace do not lead to failure.
-       ac_old_val_w=`echo x $ac_old_val`
-       ac_new_val_w=`echo x $ac_new_val`
-       if test "$ac_old_val_w" != "$ac_new_val_w"; then
-         { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has 
changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-         ac_cache_corrupted=:
-       else
-         { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace 
changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the 
previous run:" >&2;}
-         eval $ac_var=\$ac_old_val
-       fi
-       { $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  
\`$ac_old_val'" >&5
-$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
-       { $as_echo "$as_me:${as_lineno-$LINENO}:   current value: 
\`$ac_new_val'" >&5
-$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
-      fi;;
-  esac
-  # Pass precious variables to config.status.
-  if test "$ac_new_set" = set; then
-    case $ac_new_val in
-    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
-    *) ac_arg=$ac_var=$ac_new_val ;;
-    esac
-    case " $ac_configure_args " in
-      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
-      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
-    esac
-  fi
-done
-if $ac_cache_corrupted; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment 
can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" 
>&2;}
-  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start 
over" "$LINENO" 5
-fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext 
$LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS 
conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS 
conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-if test -z "$CXX"; then
-  if test -n "$CCC"; then
-    CXX=$CCC
-  else
-    if test -n "$ac_tool_prefix"; then
-  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a 
program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CXX+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CXX"; then
-  ac_cv_prog_CXX="$CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x 
"$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" 
>&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CXX=$ac_cv_prog_CXX
-if test -n "$CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
-$as_echo "$CXX" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-    test -n "$CXX" && break
-  done
-fi
-if test -z "$CXX"; then
-  ac_ct_CXX=$CXX
-  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with 
args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CXX+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CXX"; then
-  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x 
"$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_CXX="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" 
>&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
-if test -n "$ac_ct_CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
-$as_echo "$ac_ct_CXX" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ac_ct_CXX" && break
-done
-
-  if test "x$ac_ct_CXX" = x; then
-    CXX="g++"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not 
prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" 
>&2;}
-ac_tool_warned=yes ;;
-esac
-    CXX=$ac_ct_CXX
-  fi
-fi
-
-  fi
-fi
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-  fi
-  rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler 
works" >&5
-$as_echo_n "checking whether the C++ compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map 
| *.inf | *.dSYM | *.o | *.obj ) ;;
-    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
-  esac
-done
-rm -f $ac_rmfiles
-
-if { { ac_try="$ac_link_default"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link_default") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile.  We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map 
| *.inf | *.dSYM | *.o | *.obj )
-       ;;
-    [ab].out )
-       # We found the default executable, but exeext='' is most
-       # certainly right.
-       break;;
-    *.* )
-       if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
-       then :; else
-          ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-       fi
-       # We set ac_cv_exeext here because the later test for it is not
-       # safe: cross compilers may not add the suffix if given an `-o'
-       # argument, so we may need to know it at that point already.
-       # Even if this section looks crufty: it has the advantage of
-       # actually working.
-       break;;
-    * )
-       break;;
-  esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
-  ac_file=''
-fi
-if test -z "$ac_file"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "C++ compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default 
output file name" >&5
-$as_echo_n "checking for C++ compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-ac_exeext=$ac_cv_exeext
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" 
>&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map 
| *.inf | *.dSYM | *.o | *.obj ) ;;
-    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-         break;;
-    * ) break;;
-  esac
-done
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdio.h>
-int
-main ()
-{
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files="$ac_clean_files conftest.out"
-# Check that the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross 
compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
-  { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-  if { ac_try='./conftest$ac_cv_exeext'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then
-    cross_compiling=no
-  else
-    if test "$cross_compiling" = maybe; then
-       cross_compiling=yes
-    else
-       { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C++ compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
-    fi
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" 
>&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { { ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compile") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  for ac_file in conftest.o conftest.obj conftest.*; do
-  test -f "$ac_file" || continue;
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map 
| *.inf | *.dSYM ) ;;
-    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
-       break;;
-  esac
-done
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU 
C++ compiler" >&5
-$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if ${ac_cv_cxx_compiler_gnu+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_compiler_gnu=yes
-else
-  ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
-$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
-  GXX=yes
-else
-  GXX=
-fi
-ac_test_CXXFLAGS=${CXXFLAGS+set}
-ac_save_CXXFLAGS=$CXXFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
-$as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if ${ac_cv_prog_cxx_g+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
-   ac_cxx_werror_flag=yes
-   ac_cv_prog_cxx_g=no
-   CXXFLAGS="-g"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_prog_cxx_g=yes
-else
-  CXXFLAGS=""
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-
-else
-  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-        CXXFLAGS="-g"
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_prog_cxx_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
-$as_echo "$ac_cv_prog_cxx_g" >&6; }
-if test "$ac_test_CXXFLAGS" = set; then
-  CXXFLAGS=$ac_save_CXXFLAGS
-elif test $ac_cv_prog_cxx_g = yes; then
-  if test "$GXX" = yes; then
-    CXXFLAGS="-g -O2"
-  else
-    CXXFLAGS="-g"
-  fi
-else
-  if test "$GXX" = yes; then
-    CXXFLAGS="-O2"
-  else
-    CXXFLAGS=
-  fi
-fi
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS 
conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-
-
-
-
-################################################################################
-#
-# Useful macros
-#
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#
-# Test for Package Config
-#
-# Extract the first word of "pkg-config", so it can be a program name with 
args.
-set dummy pkg-config; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_PKG_CONFIG+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $PKG_CONFIG in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a 
path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x 
"$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" 
>&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  ;;
-esac
-fi
-PKG_CONFIG=$ac_cv_path_PKG_CONFIG
-if test -n "$PKG_CONFIG"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
-$as_echo "$PKG_CONFIG" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-if test "x$PKG_CONFIG" = "x"; then
-       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find 
pkg-config, will not create pc file." >&5
-$as_echo "$as_me: WARNING: Could not find pkg-config, will not create pc 
file." >&2;}
-else
-       # we need sed to find the pkg-config lib directory
-       # Extract the first word of "sed", so it can be a program name with 
args.
-set dummy sed; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_SED+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$SED"; then
-  ac_cv_prog_SED="$SED" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x 
"$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_SED="sed"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" 
>&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  test -z "$ac_cv_prog_SED" && ac_cv_prog_SED="as_fn_error $? "You Must 
install sed" "$LINENO" 5"
-fi
-fi
-SED=$ac_cv_prog_SED
-if test -n "$SED"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SED" >&5
-$as_echo "$SED" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pkg-config 
library dir" >&5
-$as_echo_n "checking for pkg-config library dir... " >&6; }
-       PKGCONFIG_LIBDIR="`echo $PKG_CONFIG | $SED -e 
's~/bin/pkg-config$~~'`/lib/pkgconfig"
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGCONFIG_LIBDIR" >&5
-$as_echo "$PKGCONFIG_LIBDIR" >&6; }
-
-       ac_config_files="$ac_config_files TooN.pc"
-
-
-       # This will be put into the pc file
-       VERSION=version-2.0.0-beta8
-
-fi
-
-
-# See if we can find LAPACK
-#ACX_LAPACK(
-#                       LAPACK_LINKER_FLAGS="$LAPACK_LIBS $BLAS_LIBS $LIBS 
$FLIBS"
-#                       AC_SUBST(LAPACK_LINKER_FLAGS)
-#                 , AC_ERROR([Could not find LAPACK])
-#                 )
-#
-
-typeof=check
-# Check whether --enable-lapack was given.
-if test "${enable_lapack+set}" = set; then :
-  enableval=$enable_lapack; lapack=$enableval
-fi
-
-# Check whether --enable-typeof was given.
-if test "${enable_typeof+set}" = set; then :
-  enableval=$enable_typeof; typeof=$enableval
-fi
-
-
-# Check whether --with-default_precision was given.
-if test "${with_default_precision+set}" = set; then :
-  withval=$with_default_precision; default_precision="$withval"
-fi
-
-
-if test "$default_precision" != ""
-then
-       cat >>confdefs.h <<_ACEOF
-#define TOON_DEFAULT_PRECISION $default_precision
-_ACEOF
-
-fi
-
-if test "$lapack" == ""
-then
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgesvd_ in -llapack" >&5
-$as_echo_n "checking for dgesvd_ in -llapack... " >&6; }
-if ${ac_cv_lib_lapack_dgesvd_+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-llapack  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dgesvd_ ();
-int
-main ()
-{
-return dgesvd_ ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
-  ac_cv_lib_lapack_dgesvd_=yes
-else
-  ac_cv_lib_lapack_dgesvd_=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lapack_dgesvd_" >&5
-$as_echo "$ac_cv_lib_lapack_dgesvd_" >&6; }
-if test "x$ac_cv_lib_lapack_dgesvd_" = xyes; then :
-  lapack=yes
-else
-  lapack=no
-fi
-
-fi
-
-if test "$lapack" != "no"
-then
-       $as_echo "#define TOON_USE_LAPACK 1" >>confdefs.h
-
-fi
-
-
-
-
-
-       if test "$typeof" == check
-       then
-               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for decltype" 
>&5
-$as_echo_n "checking for decltype... " >&6; }
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-               int main()
-               {
-                       typedef decltype(int()*double()) foo;
-               }
-
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; };typeof=decltype
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-       fi
-
-
-       if test "$typeof" == check
-       then
-               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 
__typeof__" >&5
-$as_echo_n "checking for __typeof__... " >&6; }
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-               int main()
-               {
-                       typedef __typeof__(int()*double()) foo;
-               }
-
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; };typeof=__typeof__
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-       fi
-
-
-       if test "$typeof" == check
-       then
-               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for typeof" 
>&5
-$as_echo_n "checking for typeof... " >&6; }
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-               int main()
-               {
-                       typedef typeof(int()*double()) foo;
-               }
-
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; };typeof=typeof
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-       fi
-
-
-       if test "$typeof" == check
-       then
-               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for boost" >&5
-$as_echo_n "checking for boost... " >&6; }
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-               #include<boost/typeof/typeof.hpp>
-               int main()
-               {
-                       typedef BOOST_TYPEOF(int()*double()) foo;
-               }
-
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; };typeof=boost
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-       fi
-
-
-if test "$typeof" == typeof
-then
-       $as_echo "#define TOON_TYPEOF_TYPEOF 1" >>confdefs.h
-
-elif test "$typeof" == __typeof__
-then
-       $as_echo "#define TOON_TYPEOF___TYPEOF__ 1" >>confdefs.h
-
-elif test "$typeof" == decltype
-then
-       $as_echo "#define TOON_TYPEOF_DECLTYPE 1" >>confdefs.h
-
-elif test "$typeof" == boost
-then
-       $as_echo "#define TOON_TYPEOF_BOOST 1" >>confdefs.h
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for 
__attribute__((deprecated))" >&5
-$as_echo_n "checking for __attribute__((deprecated))... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-__attribute__((deprecated)) void foo(){}
-int main()
-{
-       foo();
-}
-
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; };$as_echo "#define TOON_DEPRECATED_GCC 1 " >>confdefs.h
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-
-
-       if test "" == ""
-       then
-               { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler 
flag -Wall works" >&5
-$as_echo_n "checking if compiler flag -Wall works... " >&6; }
-       else
-               { $as_echo "$as_me:${as_lineno-$LINENO}: checking " >&5
-$as_echo_n "checking ... " >&6; }
-       fi
-       save_CXXFLAGS="$CXXFLAGS"
-       CXXFLAGS="$CXXFLAGS -Wall"
-
-
-
-       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-int main(){}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  cvd_conf_test=1
-else
-  cvd_conf_test=0
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-
-
-
-
-       if test $cvd_conf_test = 1
-       then
-               { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-               ts_success=yes
-       else
-               { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-               CXXFLAGS="$save_CXXFLAGS"
-               ts_success=no
-       fi
-
-
-       if test "" == ""
-       then
-               { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler 
flag -Wextra works" >&5
-$as_echo_n "checking if compiler flag -Wextra works... " >&6; }
-       else
-               { $as_echo "$as_me:${as_lineno-$LINENO}: checking " >&5
-$as_echo_n "checking ... " >&6; }
-       fi
-       save_CXXFLAGS="$CXXFLAGS"
-       CXXFLAGS="$CXXFLAGS -Wextra"
-
-
-
-       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-int main(){}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  cvd_conf_test=1
-else
-  cvd_conf_test=0
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-
-
-
-
-       if test $cvd_conf_test = 1
-       then
-               { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-               ts_success=yes
-       else
-               { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-               CXXFLAGS="$save_CXXFLAGS"
-               ts_success=no
-       fi
-
-
-       if test "" == ""
-       then
-               { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler 
flag -W works" >&5
-$as_echo_n "checking if compiler flag -W works... " >&6; }
-       else
-               { $as_echo "$as_me:${as_lineno-$LINENO}: checking " >&5
-$as_echo_n "checking ... " >&6; }
-       fi
-       save_CXXFLAGS="$CXXFLAGS"
-       CXXFLAGS="$CXXFLAGS -W"
-
-
-
-       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-int main(){}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  cvd_conf_test=1
-else
-  cvd_conf_test=0
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-
-
-
-
-       if test $cvd_conf_test = 1
-       then
-               { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-               ts_success=yes
-       else
-               { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-               CXXFLAGS="$save_CXXFLAGS"
-               ts_success=no
-       fi
-
-
-       if test "" == ""
-       then
-               { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler 
flag -O3 works" >&5
-$as_echo_n "checking if compiler flag -O3 works... " >&6; }
-       else
-               { $as_echo "$as_me:${as_lineno-$LINENO}: checking " >&5
-$as_echo_n "checking ... " >&6; }
-       fi
-       save_CXXFLAGS="$CXXFLAGS"
-       CXXFLAGS="$CXXFLAGS -O3"
-
-
-
-       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-int main(){}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  cvd_conf_test=1
-else
-  cvd_conf_test=0
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-
-
-
-
-       if test $cvd_conf_test = 1
-       then
-               { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-               ts_success=yes
-       else
-               { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-               CXXFLAGS="$save_CXXFLAGS"
-               ts_success=no
-       fi
-
-
-       if test "" == ""
-       then
-               { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler 
flag -Werror works" >&5
-$as_echo_n "checking if compiler flag -Werror works... " >&6; }
-       else
-               { $as_echo "$as_me:${as_lineno-$LINENO}: checking " >&5
-$as_echo_n "checking ... " >&6; }
-       fi
-       save_CXXFLAGS="$CXXFLAGS"
-       CXXFLAGS="$CXXFLAGS -Werror"
-
-
-
-       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-int main(){}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  cvd_conf_test=1
-else
-  cvd_conf_test=0
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-
-
-
-
-       if test $cvd_conf_test = 1
-       then
-               { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-               ts_success=yes
-       else
-               { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-               CXXFLAGS="$save_CXXFLAGS"
-               ts_success=no
-       fi
-
-
-ac_config_headers="$ac_config_headers internal/config.hh"
-
-ac_config_files="$ac_config_files Makefile"
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems.  If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, we kill variables containing newlines.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(
-  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; 
do
-    eval ac_val=\$$ac_var
-    case $ac_val in #(
-    *${as_nl}*)
-      case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable 
$ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
-      esac
-      case $ac_var in #(
-      _ | IFS | as_nl) ;; #(
-      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
-      *) { eval $ac_var=; unset $ac_var;} ;;
-      esac ;;
-    esac
-  done
-
-  (set) 2>&1 |
-    case $as_nl`(ac_space=' '; set) 2>&1` in #(
-    *${as_nl}ac_space=\ *)
-      # `set' does not quote correctly, so add quotes: double-quote
-      # substitution turns \\\\ into \\, and sed turns \\ into \.
-      sed -n \
-       "s/'/'\\\\''/g;
-         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
-      ;; #(
-    *)
-      # `set' quotes correctly as required by POSIX, so do not add quotes.
-      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
-      ;;
-    esac |
-    sort
-) |
-  sed '
-     /^ac_cv_env_/b end
-     t clear
-     :clear
-     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
-     t end
-     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
-     :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
-  if test -w "$cache_file"; then
-    if test "x$cache_file" != "x/dev/null"; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
-      if test ! -f "$cache_file" || test -h "$cache_file"; then
-       cat confcache >"$cache_file"
-      else
-        case $cache_file in #(
-        */* | ?:*)
-         mv -f confcache "$cache_file"$$ &&
-         mv -f "$cache_file"$$ "$cache_file" ;; #(
-        *)
-         mv -f confcache "$cache_file" ;;
-       esac
-      fi
-    fi
-  else
-    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache 
$cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
-  fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-DEFS=-DHAVE_CONFIG_H
-
-ac_libobjs=
-ac_ltlibobjs=
-U=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
-  # 1. Remove the extension, and $U if already installed.
-  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
-  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
-  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
-  #    will be set to the directory where LIBOBJS objects are built.
-  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
-  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: "${CONFIG_STATUS=./config.status}"
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-
-SHELL=\${CONFIG_SHELL-$SHELL}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2>/dev/null` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; 
then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
-  else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-       expr "X$arg" : "X\\(.*\\)$as_nl";
-       arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
-  fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  PATH_SEPARATOR=:
-  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
-    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
-      PATH_SEPARATOR=';'
-  }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" ""       $as_nl"
-
-# Find who we are.  Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
-  *[\\/]* ) as_myself=$0 ;;
-  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-  done
-IFS=$as_save_IFS
-
-     ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
-  as_myself=$0
-fi
-if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file 
name" >&2
-  exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
-  as_status=$1; test $as_status -eq 0 && as_status=1
-  if test "$4"; then
-    as_lineno=${as_lineno-"$3"} 
as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
-  fi
-  $as_echo "$as_me: error: $2" >&2
-  as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
-  return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
-  set +e
-  as_fn_set_status $1
-  exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
-  { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
-  eval 'as_fn_append ()
-  {
-    eval $1+=\$2
-  }'
-else
-  as_fn_append ()
-  {
-    eval $1=\$$1\$2
-  }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
-  eval 'as_fn_arith ()
-  {
-    as_val=$(( $* ))
-  }'
-else
-  as_fn_arith ()
-  {
-    as_val=`expr "$@" || test $? -eq 1`
-  }
-fi # as_fn_arith
-
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-        X"$0" : 'X\(//\)$' \| \
-        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-           s//\1/
-           q
-         }
-         /^X\/\(\/\/\)$/{
-           s//\1/
-           q
-         }
-         /^X\/\(\/\).*/{
-           s//\1/
-           q
-         }
-         s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
-  case `echo 'xy\c'` in
-  *c*) ECHO_T='        ';;     # ECHO_T is single tab character.
-  xy)  ECHO_C='\c';;
-  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
-       ECHO_T='        ';;
-  esac;;
-*)
-  ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
-  rm -f conf$$.dir/conf$$.file
-else
-  rm -f conf$$.dir
-  mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
-  if ln -s conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s='ln -s'
-    # ... but there are two gotchas:
-    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
-    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
-  elif ln conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s=ln
-  else
-    as_ln_s='cp -p'
-  fi
-else
-  as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || eval $as_mkdir_p || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs="'$as_qdir' $as_dirs"
-      as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-        X"$as_dir" : 'X\(//\)[^/]' \| \
-        X"$as_dir" : 'X\(//\)$' \| \
-        X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)[^/].*/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\).*/{
-           s//\1/
-           q
-         }
-         s/.*/./; q'`
-      test -d "$as_dir" && break
-    done
-    test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p='mkdir -p "$as_dir"'
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-       test -d "$1/.";
-      else
-       case $1 in #(
-       -*)set "./$1";;
-       esac;
-       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-       ???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 
'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# Save the log message, to keep $0 and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by TooN $as_me version-2.0.0-beta8, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
-
-  CONFIG_FILES    = $CONFIG_FILES
-  CONFIG_HEADERS  = $CONFIG_HEADERS
-  CONFIG_LINKS    = $CONFIG_LINKS
-  CONFIG_COMMANDS = $CONFIG_COMMANDS
-  $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-case $ac_config_headers in *"
-"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
-esac
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-config_headers="$ac_config_headers"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration.  Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
-  -h, --help       print this help, then exit
-  -V, --version    print version number and configuration settings, then exit
-      --config     print configuration, then exit
-  -q, --quiet, --silent
-                   do not print progress messages
-  -d, --debug      don't remove temporary files
-      --recheck    update $as_me by reconfiguring in the same conditions
-      --file=FILE[:TEMPLATE]
-                   instantiate the configuration file FILE
-      --header=FILE[:TEMPLATE]
-                   instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Report bugs to the package provider."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
-ac_cs_version="\\
-TooN config.status version-2.0.0-beta8
-configured by $0, generated by GNU Autoconf 2.68,
-  with options \\"\$ac_cs_config\\"
-
-Copyright (C) 2010 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-ac_need_defaults=:
-while test $# != 0
-do
-  case $1 in
-  --*=?*)
-    ac_option=`expr "X$1" : 'X\([^=]*\)='`
-    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
-    ac_shift=:
-    ;;
-  --*=)
-    ac_option=`expr "X$1" : 'X\([^=]*\)='`
-    ac_optarg=
-    ac_shift=:
-    ;;
-  *)
-    ac_option=$1
-    ac_optarg=$2
-    ac_shift=shift
-    ;;
-  esac
-
-  case $ac_option in
-  # Handling of the options.
-  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-    ac_cs_recheck=: ;;
-  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
-    $as_echo "$ac_cs_version"; exit ;;
-  --config | --confi | --conf | --con | --co | --c )
-    $as_echo "$ac_cs_config"; exit ;;
-  --debug | --debu | --deb | --de | --d | -d )
-    debug=: ;;
-  --file | --fil | --fi | --f )
-    $ac_shift
-    case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    '') as_fn_error $? "missing file argument" ;;
-    esac
-    as_fn_append CONFIG_FILES " '$ac_optarg'"
-    ac_need_defaults=false;;
-  --header | --heade | --head | --hea )
-    $ac_shift
-    case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
-    ac_need_defaults=false;;
-  --he | --h)
-    # Conflict between --help and --header
-    as_fn_error $? "ambiguous option: \`$1'
-Try \`$0 --help' for more information.";;
-  --help | --hel | -h )
-    $as_echo "$ac_cs_usage"; exit ;;
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil | --si | --s)
-    ac_cs_silent=: ;;
-
-  # This is an error.
-  -*) as_fn_error $? "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
-  *) as_fn_append ac_config_targets " $1"
-     ac_need_defaults=false ;;
-
-  esac
-  shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
-  exec 6>/dev/null
-  ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-if \$ac_cs_recheck; then
-  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create 
--no-recursion
-  shift
-  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
-  CONFIG_SHELL='$SHELL'
-  export CONFIG_SHELL
-  exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
-  echo
-  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-  $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
-  case $ac_config_target in
-    "TooN.pc") CONFIG_FILES="$CONFIG_FILES TooN.pc" ;;
-    "internal/config.hh") CONFIG_HEADERS="$CONFIG_HEADERS internal/config.hh" 
;;
-    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-
-  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
-  esac
-done
-
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used.  Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
-  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
-  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-fi
-
-# Have a temporary directory for convenience.  Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
-  tmp= ac_tmp=
-  trap 'exit_status=$?
-  : "${ac_tmp:=$tmp}"
-  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
-' 0
-  trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
-  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -d "$tmp"
-}  ||
-{
-  tmp=./conf$$-$RANDOM
-  (umask 077 && mkdir "$tmp")
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
-  eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
-  ac_cs_awk_cr='\\r'
-else
-  ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
-_ACEOF
-
-
-{
-  echo "cat >conf$$subs.awk <<_ACEOF" &&
-  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
-  echo "_ACEOF"
-} >conf$$subs.sh ||
-  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
-  . ./conf$$subs.sh ||
-    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-
-  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
-  if test $ac_delim_n = $ac_delim_num; then
-    break
-  elif $ac_last_try; then
-    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\)..*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\)..*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
-  N
-  s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
-  for (key in S) S_is_set[key] = 1
-  FS = ""
-
-}
-{
-  line = $ 0
-  nfields = split(line, field, "@")
-  substed = 0
-  len = length(field[1])
-  for (i = 2; i < nfields; i++) {
-    key = field[i]
-    keylen = length(key)
-    if (S_is_set[key]) {
-      value = S[key]
-      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
-      len += length(value) + length(field[++i])
-      substed = 1
-    } else
-      len += 1 + keylen
-  }
-
-  print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
-  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
-  cat
-fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
-  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
-# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
-  ac_vpsub='/^[         ]*VPATH[        ]*=[    ]*/{
-h
-s///
-s/^/:/
-s/[     ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
-s/:*$//
-x
-s/\(=[  ]*\).*/\1/
-G
-s/\n//
-s/^[^=]*=[      ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-# Set up the scripts for CONFIG_HEADERS section.
-# No need to generate them if there are no CONFIG_HEADERS.
-# This happens for instance with `./config.status Makefile'.
-if test -n "$CONFIG_HEADERS"; then
-cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
-BEGIN {
-_ACEOF
-
-# Transform confdefs.h into an awk script `defines.awk', embedded as
-# here-document in config.status, that substitutes the proper values into
-# config.h.in to produce config.h.
-
-# Create a delimiter string that does not exist in confdefs.h, to ease
-# handling of long lines.
-ac_delim='%!_!# '
-for ac_last_try in false false :; do
-  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
-  if test -z "$ac_tt"; then
-    break
-  elif $ac_last_try; then
-    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-
-# For the awk script, D is an array of macro values keyed by name,
-# likewise P contains macro parameters if any.  Preserve backslash
-# newline sequences.
-
-ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-sed -n '
-s/.\{148\}/&'"$ac_delim"'/g
-t rset
-:rset
-s/^[    ]*#[    ]*define[       ][      ]*/ /
-t def
-d
-:def
-s/\\$//
-t bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[    ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3"/p
-s/^ \('"$ac_word_re"'\)[        ]*\(.*\)/D["\1"]=" \2"/p
-d
-:bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[    ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3\\\\\\n"\\/p
-t cont
-s/^ \('"$ac_word_re"'\)[        ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
-t cont
-d
-:cont
-n
-s/.\{148\}/&'"$ac_delim"'/g
-t clear
-:clear
-s/\\$//
-t bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/"/p
-d
-:bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
-b cont
-' <confdefs.h | sed '
-s/'"$ac_delim"'/"\\\
-"/g' >>$CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-  for (key in D) D_is_set[key] = 1
-  FS = ""
-}
-/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
-  line = \$ 0
-  split(line, arg, " ")
-  if (arg[1] == "#") {
-    defundef = arg[2]
-    mac1 = arg[3]
-  } else {
-    defundef = substr(arg[1], 2)
-    mac1 = arg[2]
-  }
-  split(mac1, mac2, "(") #)
-  macro = mac2[1]
-  prefix = substr(line, 1, index(line, defundef) - 1)
-  if (D_is_set[macro]) {
-    # Preserve the white space surrounding the "#".
-    print prefix "define", macro P[macro] D[macro]
-    next
-  } else {
-    # Replace #undef with comments.  This is necessary, for example,
-    # in the case of _POSIX_SOURCE, which is predefined and required
-    # on some systems where configure will not decide to define it.
-    if (defundef == "undef") {
-      print "/*", prefix defundef, macro, "*/"
-      next
-    }
-  }
-}
-{ print }
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
-fi # test -n "$CONFIG_HEADERS"
-
-
-eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    "
-shift
-for ac_tag
-do
-  case $ac_tag in
-  :[FHLC]) ac_mode=$ac_tag; continue;;
-  esac
-  case $ac_mode$ac_tag in
-  :[FHL]*:*);;
-  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
-  :[FH]-) ac_tag=-:-;;
-  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
-  esac
-  ac_save_IFS=$IFS
-  IFS=:
-  set x $ac_tag
-  IFS=$ac_save_IFS
-  shift
-  ac_file=$1
-  shift
-
-  case $ac_mode in
-  :L) ac_source=$1;;
-  :[FH])
-    ac_file_inputs=
-    for ac_f
-    do
-      case $ac_f in
-      -) ac_f="$ac_tmp/stdin";;
-      *) # Look for the file first in the build tree, then in the source tree
-        # (if the path is not absolute).  The absolute path cannot be 
DOS-style,
-        # because $ac_f cannot contain `:'.
-        test -f "$ac_f" ||
-          case $ac_f in
-          [\\/$]*) false;;
-          *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
-          esac ||
-          as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
-      esac
-      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; 
esac
-      as_fn_append ac_file_inputs " '$ac_f'"
-    done
-
-    # Let's still pretend it is `configure' which instantiates (i.e., don't
-    # use $as_me), people would be surprised to read:
-    #    /* config.h.  Generated by config.status.  */
-    configure_input='Generated from '`
-         $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
-       `' by configure.'
-    if test x"$ac_file" != x-; then
-      configure_input="$ac_file.  $configure_input"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
-    fi
-    # Neutralize special characters interpreted by sed in replacement strings.
-    case $configure_input in #(
-    *\&* | *\|* | *\\* )
-       ac_sed_conf_input=`$as_echo "$configure_input" |
-       sed 's/[\\\\&|]/\\\\&/g'`;; #(
-    *) ac_sed_conf_input=$configure_input;;
-    esac
-
-    case $ac_tag in
-    *:-:* | *:-) cat >"$ac_tmp/stdin" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
-    esac
-    ;;
-  esac
-
-  ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-        X"$ac_file" : 'X\(//\)[^/]' \| \
-        X"$ac_file" : 'X\(//\)$' \| \
-        X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)[^/].*/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\).*/{
-           s//\1/
-           q
-         }
-         s/.*/./; q'`
-  as_dir="$ac_dir"; as_fn_mkdir_p
-  ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
-  # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 
's|/[^\\/]*|/..|g;s|/||'`
-  case $ac_top_builddir_sub in
-  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
-  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
-  esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
-  .)  # We are building in place.
-    ac_srcdir=.
-    ac_top_srcdir=$ac_top_builddir_sub
-    ac_abs_top_srcdir=$ac_pwd ;;
-  [\\/]* | ?:[\\/]* )  # Absolute name.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir
-    ac_abs_top_srcdir=$srcdir ;;
-  *) # Relative name.
-    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_build_prefix$srcdir
-    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
-  case $ac_mode in
-  :F)
-  #
-  # CONFIG_FILE
-  #
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
-  p
-  q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
address@hidden@*|address@hidden@*|address@hidden@*|address@hidden@*|address@hidden@*)
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to 
ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir 
setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-  ac_datarootdir_hack='
-  s&@datadir@&$datadir&g
-  s&@docdir@&$docdir&g
-  s&@infodir@&$infodir&g
-  s&@localedir@&$localedir&g
-  s&@mandir@&$mandir&g
-  s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-s&@builddir@&$ac_builddir&;t t
-s&@abs_builddir@&$ac_abs_builddir&;t t
-s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
-  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
-  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[         ]*datarootdir[  ]*:*=/p' \
-      "$ac_tmp/out"`; test -z "$ac_out"; } &&
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a 
reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable 
\`datarootdir'
-which seems to be undefined.  Please make sure it is defined" >&2;}
-
-  rm -f "$ac_tmp/stdin"
-  case $ac_file in
-  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
-  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
-  esac \
-  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- ;;
-  :H)
-  #
-  # CONFIG_HEADER
-  #
-  if test x"$ac_file" != x-; then
-    {
-      $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
-    } >"$ac_tmp/config.h" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
-    else
-      rm -f "$ac_file"
-      mv "$ac_tmp/config.h" "$ac_file" \
-       || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    fi
-  else
-    $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
-      || as_fn_error $? "could not create -" "$LINENO" 5
-  fi
- ;;
-
-
-  esac
-
-done # for ac_tag
-
-
-as_fn_exit 0
-_ACEOF
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
-  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded.  So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status.  When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
-  ac_cs_success=:
-  ac_config_status_args=
-  test "$silent" = yes &&
-    ac_config_status_args="$ac_config_status_args --quiet"
-  exec 5>/dev/null
-  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
-  exec 5>>config.log
-  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
-  # would make configure fail if this is the last instruction.
-  $ac_cs_success || as_fn_exit 1
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; 
then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: 
$ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
-echo
-echo
-echo
-echo
-echo
-echo
-echo '*************************************************'
-echo '*************************************************'
-echo '*************************************************'
-echo
-echo 'The TooN CVS repository is no longer updated!'
-echo
-echo 'Please get TooN from the git repository:'
-echo 'git clone git://git.savannah.nongnu.org/libcvd.git'
-echo

Index: configure.ac
===================================================================
RCS file: configure.ac
diff -N configure.ac
--- configure.ac        6 Feb 2012 14:59:35 -0000       1.16
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,181 +0,0 @@
-AC_INIT(TooN, version-2.0.0-beta8)
-AC_COPYRIGHT([Copyright T. Drummond, E. Rosten, G. Reitmayr 2006, 2007, 2008, 
2009])
-AC_LANG(C++)
-AC_PROG_CXX
-
-
-
-
-################################################################################
-#
-# Useful macros
-#
-
-dnl APPEND(var, value)
-dnl This appends vale to a shell variable var
-define(APPEND, [$1="$$1 $2"])
-
-
-
-dnl TEST_AND_SET_CXXFLAG(flag, [program], [run])
-dnl
-dnl This attempts to compile a and run program with a certain compiler flag.
-dnl If no program is given, then the minimal C++ program is compiled, and 
-dnl this tests just the validity of the compiler flag. 
-dnl
-define([TEST_AND_SET_CXXFLAG],[
-       if test "$3" == ""
-       then
-               AC_MSG_CHECKING([if compiler flag $1 works])    
-       else
-               AC_MSG_CHECKING([$3])   
-       fi
-       save_CXXFLAGS="$CXXFLAGS"
-       APPEND(CXXFLAGS, [$1])
-
-       m4_if([$2],[],[pushdef(prog, [int main(){}])], [pushdef(prog, [$2])])
-
-       m4_if([$4],[run],
-               [AC_RUN_IFELSE([AC_LANG_SOURCE([prog])], 
[cvd_conf_test=1],[cvd_conf_test=0], [cvd_conf_test=0])],
-               [AC_COMPILE_IFELSE([AC_LANG_SOURCE([prog])], 
[cvd_conf_test=1],[cvd_conf_test=0])]
-       )
-       
-       
-       popdef([prog])
-
-       if test $cvd_conf_test = 1
-       then
-               AC_MSG_RESULT(yes)
-               ts_success=yes
-       else
-               AC_MSG_RESULT(no)
-               CXXFLAGS="$save_CXXFLAGS"
-               ts_success=no
-       fi
-])
-
-
-
-
-
-
-
-
-
-
-#
-# Test for Package Config
-#
-AC_PATH_PROG(PKG_CONFIG, pkg-config)
-if test "x$PKG_CONFIG" = "x"; then
-       AC_MSG_WARN([Could not find pkg-config, will not create pc file.])
-else
-       # we need sed to find the pkg-config lib directory
-       AC_CHECK_PROG(SED,sed,sed,AC_MSG_ERROR([You Must install sed]))
-       AC_MSG_CHECKING([for pkg-config library dir])
-       PKGCONFIG_LIBDIR="`echo $PKG_CONFIG | $SED -e 
's~/bin/pkg-config$~~'`/lib/pkgconfig"
-       AC_MSG_RESULT($PKGCONFIG_LIBDIR)
-       AC_SUBST(PKGCONFIG_LIBDIR)
-       AC_CONFIG_FILES([ TooN.pc ])
-
-       # This will be put into the pc file
-       VERSION=AC_PACKAGE_VERSION()
-       AC_SUBST(VERSION)
-fi
-
-
-# See if we can find LAPACK
-#ACX_LAPACK(
-#                       LAPACK_LINKER_FLAGS="$LAPACK_LIBS $BLAS_LIBS $LIBS 
$FLIBS"
-#                       AC_SUBST(LAPACK_LINKER_FLAGS)
-#                 , AC_ERROR([Could not find LAPACK])
-#                 )
-#
-
-typeof=check
-AC_ARG_ENABLE(lapack, [AS_HELP_STRING([--enable-lapack],[Use LAPACK where 
optional])], [lapack=$enableval])
-AC_ARG_ENABLE(typeof, [AS_HELP_STRING([--enable-typeof=X],[Force typeof to be 
decltype, __typeof__, typeof, boost or none])], [typeof=$enableval])
-AC_ARG_WITH(default_precision, 
[AS_HELP_STRING([--with-default_precision=X],[Override default precision from 
double to X])], [default_precision="$withval"])
-
-if test "$default_precision" != ""
-then
-       AC_DEFINE_UNQUOTED(TOON_DEFAULT_PRECISION, $default_precision)
-fi
-
-if test "$lapack" == "" 
-then
-       AC_CHECK_LIB(lapack, dgesvd_, [lapack=yes], [lapack=no])
-fi
-
-if test "$lapack" != "no" 
-then
-       AC_DEFINE(TOON_USE_LAPACK, 1)
-fi
-
-
-define(TYPEOF_TEST,[
-       if test "$typeof" == check
-       then
-               AC_MSG_CHECKING([for $1])
-               AC_COMPILE_IFELSE([AC_LANG_SOURCE([
-               $3
-               int main()
-               {
-                       typedef $2(int()*double()) foo;
-               }
-               ])], [ AC_MSG_RESULT(yes);typeof=$1], AC_MSG_RESULT(no))
-       fi
-])
-
-TYPEOF_TEST(decltype, decltype)
-TYPEOF_TEST(__typeof__, __typeof__)
-TYPEOF_TEST(typeof, typeof)
-TYPEOF_TEST(boost, BOOST_TYPEOF, [#include<boost/typeof/typeof.hpp>])
-
-if test "$typeof" == typeof
-then
-       AC_DEFINE(TOON_TYPEOF_TYPEOF, 1)
-elif test "$typeof" == __typeof__
-then
-       AC_DEFINE(TOON_TYPEOF___TYPEOF__, 1)
-elif test "$typeof" == decltype
-then
-       AC_DEFINE(TOON_TYPEOF_DECLTYPE, 1)
-elif test "$typeof" == boost
-then
-       AC_DEFINE(TOON_TYPEOF_BOOST, 1)
-fi
-
-AC_MSG_CHECKING([for __attribute__((deprecated))])
-AC_COMPILE_IFELSE([AC_LANG_SOURCE([
-__attribute__((deprecated)) void foo(){}
-int main()
-{
-       foo();
-}
-])], [ AC_MSG_RESULT(yes);AC_DEFINE(TOON_DEPRECATED_GCC,1 )], 
AC_MSG_RESULT(no))
-
-
-TEST_AND_SET_CXXFLAG(-Wall)
-TEST_AND_SET_CXXFLAG(-Wextra)
-TEST_AND_SET_CXXFLAG(-W)
-TEST_AND_SET_CXXFLAG(-O3)
-TEST_AND_SET_CXXFLAG(-Werror)
-
-AC_CONFIG_HEADERS(internal/config.hh)
-AC_OUTPUT(Makefile)
-echo 
-echo
-echo
-echo
-echo
-echo
-echo '*************************************************'
-echo '*************************************************'
-echo '*************************************************'
-echo
-echo 'The TooN CVS repository is no longer updated!'
-echo 
-echo 'Please get TooN from the git repository:'
-echo 'git clone git://git.savannah.nongnu.org/libcvd.git'
-echo

Index: determinant.h
===================================================================
RCS file: determinant.h
diff -N determinant.h
--- determinant.h       21 Apr 2011 12:14:15 -0000      1.6
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,163 +0,0 @@
-#ifndef TOON_INCLUDE_DETERMINANT_H
-#define TOON_INCLUDE_DETERMINANT_H
-#include <TooN/TooN.h>
-#include <cstdlib>
-#include <utility>
-#ifdef TOON_DETERMINANT_LAPACK
-       #include <TooN/LU.h>
-#endif
-
-namespace TooN
-{
-       namespace Internal
-       {
-               ///@internal
-               ///@brief  Provides the static size for a square matrix. 
-               ///In
-               ///the general case, if R != C, then the matrix is not
-               ///square and so no size is provided. A compile error results.
-               ///@ingroup gInternal
-               template<int R, int C> struct Square
-               {
-               };
-               
-
-               ///@internal
-               ///@brief Provides the static size for a square matrix where 
both dimensions are the same.
-               ///@ingroup gInternal
-               template<int R> struct Square<R, R>
-               {
-                       static const int Size = R; ///<The size
-               };
-               
-               ///@internal
-               ///@brief Provides the static size for a square matrix where 
one dimension is static. 
-               ///The size must be equal to the size of the static dimension.
-               ///@ingroup gInternal
-               template<int R> struct Square<R, Dynamic>
-               {
-                       static const int Size = R; ///<The size
-               };
-               ///@internal
-               ///@brief Provides the static size for a square matrix where 
one dimension is static. 
-               ///The size must be equal to the size of the static dimension.
-               ///@ingroup gInternal
-               template<int C> struct Square<Dynamic, C>
-               {
-                       static const int Size = C; ///<The size
-               };
-               ///@internal
-               ///@brief Provides the static size for a square matrix where 
both dimensions are dynamic.
-               ///The size must be Dynamic.
-               ///@ingroup gInternal
-               template<> struct Square<Dynamic, Dynamic>
-               {
-                       static const int Size = Dynamic; ///<The size
-               };
-       };
-
-
-       /** Compute the determinant using Gaussian elimination.
-               @param A_ The matrix to find the determinant of.
-               @returns determinant.
-               @ingroup gLinAlg
-       */
-       template<int R, int C, typename Precision, typename Base>
-       Precision determinant_gaussian_elimination(const Matrix<R, C, 
Precision, Base>& A_)
-       {
-               Matrix<Internal::Square<R,C>::Size, 
Internal::Square<R,C>::Size,Precision> A = A_;
-               TooN::SizeMismatch<R, C>::test(A.num_rows(), A.num_cols());
-               using std::swap;
-               using std::abs;
-
-               int size=A.num_rows();
-               
-               //If row operations of the form row_a += alpha * row_b
-               //then the determinant is unaffected. However, if a row
-               //is scaled, then the determinant is scaled by the same 
-               //amount. 
-               Precision determinant=1;
-
-               for (int i=0; i<size; ++i) {
-
-                       //Find the pivot
-                       int argmax = i;
-                       Precision maxval = abs(A[i][i]);
-                       
-                       for (int ii=i+1; ii<size; ++ii) {
-                               Precision v =  abs(A[ii][i]);
-                               if (v > maxval) {
-                                       maxval = v;
-                                       argmax = ii;
-                               }
-                       }
-                       Precision pivot = A[argmax][i];
-
-                       //assert(abs(pivot) > 1e-16);
-                       
-                       //Swap the current row with the pivot row if necessary.
-                       //A row swap negates the determinant.
-                       if (argmax != i) {
-                               determinant*=-1;
-                               for (int j=i; j<size; ++j)
-                                       swap(A[i][j], A[argmax][j]);
-                       }
-
-                       determinant *= A[i][i];
-
-                       if(determinant == 0)
-                               return 0;
-                       
-                       for (int u=i+1; u<size; ++u) {
-                               //Do not multiply out the usual 1/pivot term
-                               //to avoid division. It causes poor scaling.
-                               Precision factor = A[u][i]/pivot;
-
-                               for (int j=i+1; j<size; ++j)
-                                       A[u][j] = A[u][j] - factor * A[i][j];
-                       }
-               }
-
-               return determinant;
-       }
-       
-       #ifdef TOON_DETERMINANT_LAPACK
-               /** Compute the determinant using TooN::LU.
-                       @param A The matrix to find the determinant of.
-                       @returns determinant.
-                       @ingroup gLinAlg
-               */
-               template<int R, int C, class P, class B>
-               P determinant_LU(const Matrix<R, C, P, B>& A)
-               {
-                       TooN::SizeMismatch<R, C>::test(A.num_rows(), 
A.num_cols());
-                       LU<Internal::Square<R,C>::Size, P> lu(A);
-                       return lu.determinant();
-               }
-       #endif
-
-       /** 
-               Compute the determinant of a matrix using an appropriate 
method. The
-               obvious method is used for 2x2, otherwise
-               determinant_gaussian_elimination() or determinant_LU() is used 
depending
-               on the value of \c TOON_DETERMINANT_LAPACK.  See also \ref 
sConfigLapack.
-               @param A The matrix to find the determinant of.
-               @returns determinant.
-               @ingroup gLinAlg
-       */
-       template<int R, int C, class P, class B>
-       P determinant(const Matrix<R, C, P, B>& A)
-       {
-               TooN::SizeMismatch<R, C>::test(A.num_rows(), A.num_cols());
-               if(A.num_rows() == 2)
-                       return A[0][0]*A[1][1] - A[1][0]*A[0][1];
-               #if defined TOON_DETERMINANT_LAPACK && TOON_DETERMINANT_LAPACK 
!= -1
-                       else if(A.num_rows() >= TOON_DETERMINANT_LAPACK)
-                               return determinant_LU(A);
-               #endif
-               else
-                       return determinant_gaussian_elimination(A);
-       }
-}
-
-#endif

Index: gauss_jordan.h
===================================================================
RCS file: gauss_jordan.h
diff -N gauss_jordan.h
--- gauss_jordan.h      15 May 2009 16:00:00 -0000      1.6
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,118 +0,0 @@
-// -*- c++ -*-
-
-//    Copyright (C) 2009 Ed Rosten (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-
-#ifndef TOON_INC_GAUSS_JORDAN_H
-#define TOON_INC_GAUSS_JORDAN_H
-
-#include <utility>
-#include <cmath>
-#include <TooN/TooN.h>
-
-namespace TooN
-{
-/// Perform Gauss-Jordan reduction on m
-///
-/// If m is of the form \f$[A | I ]\f$, then after reduction, m
-/// will be \f$[ I | A^{-1}]\f$. There is no restriction on the input, 
-/// in that the matrix augmenting A does not need to be I, or square.
-/// The reduction is performed using elementary row operations and 
-/// partial pivoting.
-///
-/// @param m The matrix to be reduced.
-/// @ingroup gDecomps
-template<int R, int C, class Precision, class Base> void 
gauss_jordan(Matrix<R, C, Precision, Base>& m)
-{
-       using std::swap;
-
-       //Loop over columns to reduce.
-       for(int col=0; col < m.num_rows(); col++)
-       {
-               //Reduce the current column to a single element
-
-
-               //Search down the current column in the lower triangle for the 
largest
-               //absolute element (pivot).  Then swap the pivot row, so that 
the pivot
-               //element is on the diagonal. The benchmarks show that it is 
actually
-               //faster to swap whole rows than it is to access the rows via 
indirection 
-               //and swap the indirection element. This holds for both pointer 
indirection
-               //and using a permutation vector over rows.
-               {
-                 using std::abs;
-                       int pivotpos = col;
-                       double pivotval = abs(m[pivotpos][col]);
-                       for(int p=col+1; p <m.num_rows(); p++)
-                         if(abs(m[p][col]) > pivotval)
-                               {
-                                       pivotpos = p;
-                                       pivotval = abs(m[pivotpos][col]);
-                               }
-                       
-                       if(col != pivotpos)
-                               for(int c=0; c < m.num_cols(); c++)
-                                       swap(m[col][c], m[pivotpos][c]);
-               }
-
-               //Reduce the current column in every row to zero, excluding 
elements on
-               //the leading diagonal.
-               for(int row = 0; row < m.num_rows(); row++)
-               {
-                       if(row != col)
-                       {
-                               double multiple = m[row][col] / m[col][col];
-               
-                               //We could eliminate some of the computations 
in the augmented
-                               //matrix, if the augmented half is the 
identity. In general, it
-                               //is not. 
-
-                               //Subtract the pivot row from all other rows, 
to make 
-                               //column col zero.
-                               m[row][col] = 0;
-                               for(int c=col+1; c < m.num_cols(); c++)
-                                       m[row][c] = m[row][c] - m[col][c] * 
multiple;
-                       }
-               }
-       }
-       
-       //Final pass to make diagonal elements one. Performing this in a final
-       //pass allows us to avoid any significant computations on the left-hand
-       //square matrix, since it is diagonal, and ends up as the identity.
-       for(int row=0;row < m.num_rows(); row++)
-       {
-               double mul = 1/m[row][row];
-
-               m[row][row] = 1;
-
-               for(int col=m.num_rows(); col < m.num_cols(); col++)
-                       m[row][col] *= mul;
-       }
-}
-
-}
-#endif

Index: gaussian_elimination.h
===================================================================
RCS file: gaussian_elimination.h
diff -N gaussian_elimination.h
--- gaussian_elimination.h      25 Sep 2009 14:45:26 -0000      1.9
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,162 +0,0 @@
-// -*- c++ -*-
-
-// Copyright (C) 2008,2009 Ethan Eade, Tom Drummond (address@hidden)
-// and Ed Rosten (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-
-#ifndef GAUSSIAN_ELIMINATION_H
-#define GAUSSIAN_ELIMINATION_H
-
-#include <utility>
-#include <cmath>
-#include <TooN/TooN.h>
-
-namespace TooN {
-       ///@ingroup gEquations
-       ///Return the solution for \f$Ax = b\f$, given \f$A\f$ and \f$b\f$
-       ///@param A \f$A\f$
-       ///@param b \f$b\f$
-    template<int N, typename Precision>
-       inline Vector<N, Precision> gaussian_elimination (Matrix<N,N,Precision> 
A, Vector<N, Precision> b) {
-               using std::swap;
-               using std::abs;
-
-               int size=b.size();
-
-               for (int i=0; i<size; ++i) {
-                       int argmax = i;
-                       Precision maxval = abs(A[i][i]);
-                       
-                       for (int ii=i+1; ii<size; ++ii) {
-                               double v =  abs(A[ii][i]);
-                               if (v > maxval) {
-                                       maxval = v;
-                                       argmax = ii;
-                               }
-                       }
-                       Precision pivot = A[argmax][i];
-                       //assert(abs(pivot) > 1e-16);
-                       Precision inv_pivot = static_cast<Precision>(1)/pivot;
-                       if (argmax != i) {
-                               for (int j=i; j<size; ++j)
-                                       swap(A[i][j], A[argmax][j]);
-                               swap(b[i], b[argmax]);
-                       }
-                       //A[i][i] = 1;
-                       for (int j=i+1; j<size; ++j)
-                               A[i][j] *= inv_pivot;
-                       b[i] *= inv_pivot;
-                       
-                       for (int u=i+1; u<size; ++u) {
-                               double factor = A[u][i];
-                               //A[u][i] = 0;
-                               for (int j=i+1; j<size; ++j)
-                                       A[u][j] -= factor * A[i][j];
-                               b[u] -= factor * b[i];
-                       }
-               }
-               
-               Vector<N,Precision> x(size);
-               for (int i=size-1; i>=0; --i) {
-                       x[i] = b[i];
-                       for (int j=i+1; j<size; ++j)
-                               x[i] -= A[i][j] * x[j];
-               }
-               return x;
-    }
-       
-       namespace Internal
-       {
-               template<int i, int j, int k> struct Size3
-               {
-                       static const int s=(i!= -1)?i:(j!=-1?j:k);
-               };
-
-       };
-
-       ///@ingroup gEquations
-       ///Return the solution for \f$Ax = b\f$, given \f$A\f$ and \f$b\f$
-       ///@param A \f$A\f$
-       ///@param b \f$b\f$
-    template<int R1, int C1, int R2, int C2, typename Precision>
-       inline Matrix<Internal::Size3<R1, C1, R2>::s, C2, Precision> 
gaussian_elimination (Matrix<R1,C1,Precision> A, Matrix<R2, C2, Precision> b) {
-               using std::swap;
-               using std::abs;
-               SizeMismatch<R1, C1>::test(A.num_rows(), A.num_cols());
-               SizeMismatch<R1, R2>::test(A.num_rows(), b.num_rows());
-
-               int size=A.num_rows();
-
-               for (int i=0; i<size; ++i) {
-                       int argmax = i;
-                       Precision maxval = abs(A[i][i]);
-                       
-                       for (int ii=i+1; ii<size; ++ii) {
-                               double v =  abs(A[ii][i]);
-                               if (v > maxval) {
-                                       maxval = v;
-                                       argmax = ii;
-                               }
-                       }
-                       Precision pivot = A[argmax][i];
-                       //assert(abs(pivot) > 1e-16);
-                       Precision inv_pivot = static_cast<Precision>(1)/pivot;
-                       if (argmax != i) {
-                               for (int j=i; j<size; ++j)
-                                       swap(A[i][j], A[argmax][j]);
-
-                               for(int j=0; j < b.num_cols(); j++)
-                                       swap(b[i][j], b[argmax][j]);
-                       }
-                       //A[i][i] = 1;
-                       for (int j=i+1; j<size; ++j)
-                               A[i][j] *= inv_pivot;
-                       b[i] *= inv_pivot;
-                       
-                       for (int u=i+1; u<size; ++u) {
-                               double factor = A[u][i];
-                               //A[u][i] = 0;
-                               for (int j=i+1; j<size; ++j)
-                                       A[u][j] -= factor * A[i][j];
-                               b[u] -= factor * b[i];
-                       }
-               }
-               
-               Matrix<Internal::Size3<R1, C1, R2>::s,C2,Precision> 
x(b.num_rows(), b.num_cols());
-               for (int i=size-1; i>=0; --i) {
-                       for(int k=0; k <b.num_cols(); k++)
-                       {
-                               x[i][k] = b[i][k];
-                               for (int j=i+1; j<size; ++j)
-                                       x[i][k] -= A[i][j] * x[j][k];
-                       }
-               }
-               return x;
-    }
-}
-#endif

Index: generated.h
===================================================================
RCS file: generated.h
diff -N generated.h
--- generated.h 15 Jan 2007 18:01:15 -0000      1.5
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,68 +0,0 @@
-// Generated for J*C*J^T, C symmetric
-template <class A1, class A2, class A3> inline void transformCovariance(const 
FixedMatrix<2,2,A1>& A, const FixedMatrix<2,2,A2>& B, FixedMatrix<2,2,A3>& M)
-{
-    M = A*B*A.T();
-}
-
-// Generated for J*C*J^T, C symmetric
-template <int N, class A1, class A2, class A3> inline void 
transformCovariance(const FixedMatrix<2,N,A1>& A, const FixedMatrix<N,N,A2>& B, 
FixedMatrix<2,2,A3>& M)
-{
-       {       const Vector<N> ABi = B * A[0];
-               M[0][0] = ABi * A[0];
-               M[0][1] = M[1][0] = ABi * A[1];
-       }
-       M[1][1] = (B * A[1]) * A[1];
-}
-
-// Generated for J*C*J^T, C symmetric
-template <int N, class A1, class A2, class A3> inline void 
transformCovariance(const FixedMatrix<3,N,A1>& A, const FixedMatrix<N,N,A2>& B, 
FixedMatrix<3,3,A3>& M)
-{
-       {       const Vector<N> ABi = B * A[0];
-               M[0][0] = ABi * A[0];
-               M[0][1] = M[1][0] = ABi * A[1];
-               M[0][2] = M[2][0] = ABi * A[2];
-       }
-       {       const Vector<N> ABi = B * A[1];
-               M[1][1] = ABi * A[1];
-               M[1][2] = M[2][1] = ABi * A[2];
-       }
-       M[2][2] = (B * A[2]) * A[2];
-}
-
-#if 0
-// Generated for J*C*J^T, C symmetric
-template <int N, class A1, class A2, class A3> inline void 
transformCovariance(const FixedMatrix<6,N,A1>& A, const FixedMatrix<N,N,A2>& B, 
FixedMatrix<6,6,A3>& M)
-{
-       {       const Vector<N> ABi = B * A[0];
-               M[0][0] = ABi * A[0];
-               M[0][1] = M[1][0] = ABi * A[1];
-               M[0][2] = M[2][0] = ABi * A[2];
-               M[0][3] = M[3][0] = ABi * A[3];
-               M[0][4] = M[4][0] = ABi * A[4];
-               M[0][5] = M[5][0] = ABi * A[5];
-       }
-       {       const Vector<N> ABi = B * A[1];
-               M[1][1] = ABi * A[1];
-               M[1][2] = M[2][1] = ABi * A[2];
-               M[1][3] = M[3][1] = ABi * A[3];
-               M[1][4] = M[4][1] = ABi * A[4];
-               M[1][5] = M[5][1] = ABi * A[5];
-       }
-       {       const Vector<N> ABi = B * A[2];
-               M[2][2] = ABi * A[2];
-               M[2][3] = M[3][2] = ABi * A[3];
-               M[2][4] = M[4][2] = ABi * A[4];
-               M[2][5] = M[5][2] = ABi * A[5];
-       }
-       {       const Vector<N> ABi = B * A[3];
-               M[3][3] = ABi * A[3];
-               M[3][4] = M[4][3] = ABi * A[4];
-               M[3][5] = M[5][3] = ABi * A[5];
-       }
-       {       const Vector<N> ABi = B * A[4];
-               M[4][4] = ABi * A[4];
-               M[4][5] = M[5][4] = ABi * A[5];
-       }
-       M[5][5] = (B * A[5]) * A[5];
-}
-#endif

Index: helpers.h
===================================================================
RCS file: helpers.h
diff -N helpers.h
--- helpers.h   1 Nov 2011 16:37:16 -0000       1.93
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,849 +0,0 @@
-// -*- c++ -*-
-
-// Copyright (C) 2005,2009 Tom Drummond (address@hidden),
-// Ed Rosten (address@hidden), Gerhard Reitmayr (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-
-#ifndef TOON_INCLUDE_HELPERS_H
-#define TOON_INCLUDE_HELPERS_H
-
-#include <TooN/TooN.h>
-#include <TooN/gaussian_elimination.h>
-#include <cmath>
-#include <functional>
-#include <utility>
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-#ifndef M_SQRT1_2
-#define M_SQRT1_2 0.707106781186547524401
-#endif
-
-namespace TooN {
-
-       ///\deprecated
-       ///@ingroup gLinAlg
-       template<int Size, class Precision, class Base> TOON_DEPRECATED void 
Fill(Vector<Size, Precision, Base>& v, const Precision& p)
-       {
-               for(int i=0; i < v.size(); i++)
-                       v[i]= p;
-       }
-
-       ///\deprecated
-       ///@ingroup gLinAlg
-       template<int Rows, int Cols, class Precision, class Base> 
TOON_DEPRECATED void Fill(Matrix<Rows, Cols, Precision, Base>& m, const 
Precision& p)
-       {
-               for(int i=0; i < m.num_rows(); i++)
-                       for(int j=0; j < m.num_cols(); j++)
-                               m[i][j] = p;
-       }
-
-       ///Compute the \f$L_2\f$ norm of \e v
-       ///@param v \e v
-       ///@ingroup gLinAlg
-       template<int Size, class Precision, class Base> inline Precision 
norm(const Vector<Size, Precision, Base>& v)
-       {
-               using std::sqrt;
-               return sqrt(v*v);
-       }
-
-       ///Compute the \f$L_2^2\f$ norm of \e v
-       ///@param v \e v
-       ///@ingroup gLinAlg
-       template<int Size, class Precision, class Base> inline Precision 
norm_sq(const Vector<Size, Precision, Base>& v)
-       {
-               return v*v;
-       }
-       
-       ///Compute the \f$L_1\f$ norm of \e v
-       ///@param v \e v
-       ///@ingroup gLinAlg
-       template<int Size, class Precision, class Base> inline Precision 
norm_1(const Vector<Size, Precision, Base>& v)
-       {
-               using std::abs;
-               Precision n = 0;
-               for(int i=0; i < v.size(); i++)
-                       n += abs(v[i]);
-               return n;
-       }
-
-       ///Compute the \f$L_\infty\f$ norm of \e v
-       ///@param v \e v
-       ///@ingroup gLinAlg
-       template<int Size, class Precision, class Base> inline Precision 
norm_inf(const Vector<Size, Precision, Base>& v)
-       {
-               using std::abs;
-               using std::max;
-               Precision n = 0;
-               n = abs(v[0]);
-
-               for(int i=1; i < v.size(); i++)
-                       n = max(n, abs(v[i]));
-               return n;
-       }
-       
-       ///Compute the \f$L_2\f$ norm of \e v.
-       ///Synonym for norm()
-       ///@param v \e v
-       ///@ingroup gLinAlg
-       template<int Size, class Precision, class Base> inline Precision 
norm_2(const Vector<Size, Precision, Base>& v)
-       {
-               return norm(v);
-       }
-       
-
-
-
-       ///Compute a the unit vector \f$\hat{v}\f$.
-       ///@param v \e v
-       ///@ingroup gLinAlg
-       template<int Size, class Precision, class Base> inline Vector<Size, 
Precision> unit(const Vector<Size, Precision, Base> & v)
-       {
-               using std::sqrt;
-               return TooN::operator*(v,(1/sqrt(v*v)));
-       }
-       
-       //Note because of the overload later, this function will ONLY receive 
sliced vectors. Therefore
-       //a copy can be made, which is still a slice, so operating on the copy 
operates on the original
-       //data.
-       ///Normalize a vector in place
-       ///@param v Vector to normalize
-       ///@ingroup gLinAlg
-       template<int Size, class Precision, class Base> inline void 
normalize(Vector<Size, Precision, Base> v)
-       {
-               using std::sqrt;
-               v /= sqrt(v*v);
-       }
-       
-       //This overload is required to operate on non-slice vectors
-       /**
-               \overload
-       */  
-       template<int Size, class Precision> inline void normalize(Vector<Size, 
Precision> & v)
-       {
-               normalize(v.as_slice());
-       }
-
-
-       ///For a vector \e v of length \e i, return \f$[v_1, v_2, \cdots, 
v_{i-1}] / v_i \f$
-       ///@param v \e v
-       ///@ingroup gLinAlg
-       template<int Size, typename Precision, typename Base> inline 
Vector<(Size==Dynamic?Dynamic:Size-1), Precision> project( const Vector<Size, 
Precision, Base> & v){
-               static const int Len = (Size==Dynamic?Dynamic:Size-1);
-               return TooN::operator/(v.template slice<0, Len>(0, 
v.size()-1),v[v.size() - 1]);
-       }
-       
-       //This should probably be done with an operator to prevent an extra 
new[] for dynamic vectors.
-       ///For a vector \e v of length \e i, return \f$[v_1, v_2, \cdots, 
v_{i}, 1]\f$
-       ///@param v \e v
-       ///@ingroup gLinAlg
-       template<int Size, typename Precision, typename Base> inline 
Vector<(Size==Dynamic?Dynamic:Size+1), Precision> unproject( const Vector<Size, 
Precision, Base> & v){
-               Vector<(Size==Dynamic?Dynamic:Size+1), Precision> 
result(v.size()+1);
-               static const int Len = (Size==Dynamic?Dynamic:Size);
-               result.template slice<0, Len>(0, v.size()) = v;
-               result[v.size()] = 1;
-               return result;
-       }
-       
-       /**
-       \overload
-       */
-       template<int R, int C, typename Precision, typename Base> inline 
Matrix<R-1, C, Precision> project( const Matrix<R,C, Precision, Base> & m){
-        Matrix<R-1, C, Precision> result = m.slice(0,0,R-1,m.num_cols());
-        for( int c = 0; c < m.num_cols(); ++c ) {
-            result.slice(0,c,R-1,1) /= m[R-1][c];
-        }
-        return result;
-    }
-
-    template<int C, typename Precision, typename Base> inline Matrix<-1, C, 
Precision> project( const Matrix<-1,C, Precision, Base> & m){
-        Matrix<-1, C, Precision> result = 
m.slice(0,0,m.num_rows()-1,m.num_cols());
-        for( int c = 0; c < m.num_cols(); ++c ) {
-            result.slice(0,c,m.num_rows()-1,1) /= m[m.num_rows()-1][c];
-        }
-        return result;
-    }
-
-       /**
-       \overload
-       */
-    template<int R, int C, typename Precision, typename Base> inline 
Matrix<R+1, C, Precision> unproject( const Matrix<R, C, Precision, Base> & m){
-        Matrix<R+1, C, Precision> result;
-        result.template slice<0,0,R,C>() = m;
-        result[R] = Ones;
-        return result;
-    }
-
-    template<int C, typename Precision, typename Base> inline Matrix<-1, C, 
Precision> unproject( const Matrix<-1, C, Precision, Base> & m){
-        Matrix<-1, C, Precision> result( m.num_rows()+1, m.num_cols() );
-        result.slice(0,0,m.num_rows(),m.num_cols()) = m;
-        result[m.num_rows()] = Ones;
-        return result;
-    }
-
-       /// Frobenius (root of sum of squares) norm of input matrix \e m
-       ///@param m \e m
-       ///@ingroup gLinAlg
-       template <int R, int C, typename P, typename B>
-       P inline norm_fro( const Matrix<R,C,P,B> & m ){
-               using std::sqrt;
-               P n = 0;
-               for(int r = 0; r < m.num_rows(); ++r)
-                       for(int c = 0; c < m.num_cols(); ++c)
-                               n += m[r][c] * m[r][c];
-
-               return sqrt(n);
-       }
-
-       /// \e L<sub>&#8734;</sub> (row sum) norm of input matrix m
-       /// computes the maximum of the sums of absolute values over rows
-       ///@ingroup gLinAlg
-       template <int R, int C, typename P, typename B>
-       P inline norm_inf( const Matrix<R,C,P,B> & m ){
-               using std::abs;
-               using std::max;
-               P n = 0;
-               for(int r = 0; r < m.num_rows(); ++r){
-                       P s = 0;
-                       for(int c = 0; c < m.num_cols(); ++c)
-                               s += abs(m(r,c));
-                       n = max(n,s);
-               }
-               return n;
-       }
-       
-       /// \e L<sub>1</sub> (col sum) norm of input matrix m
-       /// computes the maximum of the sums of absolute values over columns
-       ///@ingroup gLinAlg
-       template <int R, int C, typename P, typename B>
-       P inline norm_1( const Matrix<R,C,P,B> & m ){
-               using std::abs;
-               using std::max;
-               P n = 0;
-               for(int c = 0; c < m.num_cols(); ++c){
-                       P s = 0;
-                       for(int r = 0; r < m.num_rows(); ++r)
-                               s += abs(m(r,c));
-                       n = max(n,s);
-               }
-               return n;
-       }
-
-       namespace Internal {
-               ///@internal
-               ///@brief Exponentiate a matrix using a the Taylor series
-               ///This will not work if the norm of the matrix is too large.
-               template <int R, int C, typename P, typename B>
-               inline Matrix<R, C, P> exp_taylor( const Matrix<R,C,P,B> & m ){
-                       TooN::SizeMismatch<R, C>::test(m.num_rows(), 
m.num_cols());
-                       Matrix<R,C,P> result = TooN::Zeros(m.num_rows(), 
m.num_cols());
-                       Matrix<R,C,P> f = TooN::Identity(m.num_rows());
-                       P k = 1;
-                       while(norm_inf((result+f)-result) > 0){
-                               result += f;
-                               f = (m * f) / k;
-                               k += 1;
-                       }
-                       return result;
-               }
-
-               ///@internal
-               ///@brief Logarithm of a matrix using a the Taylor series
-               ///This will not work if the norm of the matrix is too large.
-               template <int R, int C, typename P, typename B>
-               inline Matrix<R, C, P> log_taylor( const Matrix<R,C,P,B> & m ){
-                       TooN::SizeMismatch<R, C>::test(m.num_rows(), 
m.num_cols());
-                       Matrix<R,C,P> X = m - TooN::Identity * 1.0;
-                       Matrix<R,C,P> F = X;
-                       Matrix<R,C,P> sum = TooN::Zeros(m.num_rows(), 
m.num_cols());
-                       P k = 1;
-                       while(norm_inf((sum+F/k)-sum) > 0){
-                               sum += F/k;
-                               F = -F*X;
-                               k += 1;
-                       }
-                       return sum;
-               }
-
-       };
-       
-       /// computes the matrix exponential of a matrix m by 
-       /// scaling m by 1/(powers of 2), using Taylor series and 
-       /// squaring again.
-       /// @param m input matrix, must be square
-       /// @return result matrix of the same size/type as input
-       /// @ingroup gLinAlg
-       template <int R, int C, typename P, typename B>
-       inline Matrix<R, C, P> exp( const Matrix<R,C,P,B> & m ){
-               using std::max;
-               SizeMismatch<R, C>::test(m.num_rows(), m.num_cols());
-               const P l = log2(norm_inf(m));
-               const int s = max(0,(int)ceil(l));
-               Matrix<R,C,P> result = Internal::exp_taylor(m/(1<<s));
-               for(int i = 0; i < s; ++i)
-                       result = result * result;
-               return result;
-       }
-       
-       /// computes a matrix square root of a matrix m by
-       /// the product form of the Denman and Beavers iteration
-       /// as given in Chen et al. 'Approximating the logarithm of a matrix to 
specified accuracy', 
-       /// J. Matrix Anal Appl, 2001. This is used for the matrix
-       /// logarithm function, but is useable by on its own.
-       /// @param m input matrix, must be square
-       /// @return a square root of m of the same size/type as input
-       /// @ingroup gLinAlg
-       template <int R, int C, typename P, typename B>
-       inline Matrix<R, C, P> sqrt( const Matrix<R,C,P,B> & m){
-               SizeMismatch<R, C>::test(m.num_rows(), m.num_cols());
-               Matrix<R,C,P> M = m;
-               Matrix<R,C,P> Y = m;
-               Matrix<R,C,P> M_inv(m.num_rows(), m.num_cols());
-               const Matrix<R,C,P> id = Identity(m.num_rows());
-               do {
-                       M_inv = gaussian_elimination(M, id);
-                       Y = Y * (id + M_inv) * 0.5;
-                       M = 0.5 * (id + (M + M_inv) * 0.5);
-               } while(norm_inf(M - M_inv) > 0);
-               return Y;
-       }
-       
-       /// computes the matrix logarithm of a matrix m using the inverse 
scaling and 
-       /// squaring method. The overall approach is described in
-       /// Chen et al. 'Approximating the logarithm of a matrix to specified 
accuracy', 
-       /// J. Matrix Anal Appl, 2001, but this implementation only uses a 
simple
-       /// taylor series after the repeated square root operation.
-       /// @param m input matrix, must be square
-       /// @return the log of m of the same size/type as input
-       /// @ingroup gLinAlg
-       template <int R, int C, typename P, typename B>
-       inline Matrix<R, C, P> log( const Matrix<R,C,P,B> & m){
-               int counter = 0;
-               Matrix<R,C,P> A = m;
-               while(norm_inf(A - Identity*1.0) > 0.5){
-                       ++counter;
-                       A = sqrt(A);
-               }
-               return Internal::log_taylor(A) * pow(2.0, counter);
-       }
-       
-       /// Returns true if every element is finite
-       ///@ingroup gLinAlg
-       template<int S, class P, class B> bool isfinite(const Vector<S, P, B>& 
v)
-       { 
-               using std::isfinite;
-               for(int i=0; i < v.size(); i++)
-                       if(!isfinite(v[i]))
-                               return 0;
-               return 1;
-       }
-
-       /// Returns true if any element is NaN
-       ///@ingroup gLinAlg
-       template<int S, class P, class B> bool isnan(const Vector<S, P, B>& v)
-       { 
-               using std::isnan;
-               for(int i=0; i < v.size(); i++)
-                       if(isnan(v[i]))
-                               return 1;
-               return 0;
-       }
-
-       /// Symmetrize a matrix 
-       ///@param m \e m
-       ///@return \f$ \frac{m + m^{\mathsf T}}{2} \f$
-       ///@ingroup gLinAlg
-       template<int Rows, int Cols, typename Precision, typename Base>
-       void Symmetrize(Matrix<Rows,Cols,Precision,Base>& m){
-               SizeMismatch<Rows,Cols>::test(m.num_rows(), m.num_cols());
-               for(int r=0; r<m.num_rows()-1; r++){
-                       for(int c=r+1; c<m.num_cols(); c++){
-                               const Precision temp=(m(r,c)+m(c,r))/2;
-                               m(r,c)=temp;
-                               m(c,r)=temp;
-                       }
-               }
-       }
-       
-       /// computes the trace of a square matrix
-       ///@ingroup gLinAlg
-       template<int Rows, int Cols, typename Precision, typename Base>
-       Precision trace(const Matrix<Rows, Cols, Precision, Base> & m ){
-               SizeMismatch<Rows,Cols>::test(m.num_rows(), m.num_cols());
-               Precision tr = 0;
-               for(int i = 0; i < m.num_rows(); ++i)
-                       tr += m(i,i);
-               return tr;
-       }
-
-       /// creates an returns a cross product matrix M from a 3 vector v, such 
that for all vectors w, the following holds: v ^ w = M * w
-       /// @param vec the 3 vector input
-       /// @return the 3x3 matrix to set to the cross product matrix
-       ///@ingroup gLinAlg
-       template<int Size, class P, class B> inline TooN::Matrix<3, 3, P> 
cross_product_matrix(const Vector<Size, P, B>& vec)
-       {
-               SizeMismatch<Size,3>::test(vec.size(), 3);
-
-               TooN::Matrix<3> result;
-
-               result(0,0) = 0; 
-               result(0,1) = -vec[2]; 
-               result(0,2) = vec[1];
-               result(1,0) = vec[2]; 
-               result(1,1) = 0; 
-               result(1,2) = -vec[0];
-               result(2,0) = -vec[1]; 
-               result(2,1) = vec[0]; 
-               result(2,2) = 0;
-
-               return result;
-       }
-
-    namespace Internal {
-        template<int Size, typename Precision, typename Base, typename Func, 
typename Ret> inline Ret accumulate( const Vector<Size, Precision, Base> & v )  
{
-            Func func;
-            if( v.size() == 0 ) {
-                return func.null(); // What should we return, exception?
-            }
-            func.initialise( v[0], 0 );
-            for( int ii = 1; ii < v.size(); ii++ ) {
-                func( v[ii], ii );
-            }
-            return func.ret();
-        }
-
-        template<int R, int C, typename Precision, typename Base, typename 
Func, typename Ret> inline Ret accumulate( const Matrix<R, C, Precision, Base> 
& m )  {
-            Func func;
-            if( m.num_rows() == 0 || m.num_cols() == 0) {
-                return func.null(); // What should we return, exception?
-            }
-            func.initialise( m[0][0], 0, 0 );
-            for(int r=0; r<m.num_rows(); r++){
-                for(int c=0; c<m.num_cols(); c++){
-                    func( m[r][c], r, c );
-                }
-            }
-            return func.ret();
-        }
-        template<int R, int C, typename Precision, typename Base, typename 
Func, typename Ret> inline Ret accumulate_horizontal( const Matrix<R, C, 
Precision, Base> & m ) {
-            Func func( m.num_rows() );
-            if( m.num_cols() == 0 || m.num_rows() == 0 ) {
-                func.null(); // What should we return, exception?
-            }
-            for(int r=0; r<m.num_rows(); r++){
-                func.initialise( m[r][0], r, 0 );
-                for(int c=1; c<m.num_cols(); c++){
-                    func( m[r][c], r, c );
-                }
-            }
-            return func.ret();
-        }
-        template<int R, int C, typename Precision, typename Base, typename 
Func, typename Ret> inline Ret accumulate_vertical( const Matrix<R, C, 
Precision, Base> & m ) {
-            Func func( m.num_cols() );
-            if( m.num_cols() == 0 || m.num_rows() == 0 ) {
-                func.null(); // What should we return, exception?
-            }
-            for(int c=0; c<m.num_cols(); c++){
-                func.initialise( m[0][c], 0, c );
-                for(int r=1; r<m.num_rows(); r++){
-                    func( m[r][c], r, c );
-                }
-            }
-            return func.ret();
-        }        
-
-        template<typename Precision, typename ComparisonFunctor>
-        class accumulate_functor_vector {
-            Precision bestVal;
-        public:
-            Precision null() {
-                return 0;
-            }
-            void initialise( Precision initialVal, int ) {
-                bestVal = initialVal;
-            }
-            void operator()( Precision curVal, int ) {
-                if( ComparisonFunctor()( curVal, bestVal ) ) {
-                    bestVal = curVal;
-                }
-            }
-            Precision ret() { return bestVal; }            
-        };
-        template<typename Precision, typename ComparisonFunctor>
-        class accumulate_element_functor_vector {
-            Precision bestVal;
-            int nBestIndex;
-        public:
-            std::pair<Precision,int> null() {
-                return std::pair<Precision,int>( 0, 0 );
-            }
-            void initialise( Precision initialVal, int nIndex ) {
-                bestVal = initialVal;
-                nBestIndex = nIndex;
-            }
-            void operator()( Precision curVal, int nIndex ) {
-                if( ComparisonFunctor()( curVal, bestVal ) ) {
-                    bestVal = curVal;
-                    nBestIndex = nIndex;
-                }
-            }
-            std::pair<Precision,int> ret() {
-                return std::pair<Precision,int>( bestVal, nBestIndex );
-            }            
-        };
-        template<typename Precision, typename ComparisonFunctor>
-        class accumulate_functor_matrix {
-            Precision bestVal;
-        public:
-            Precision null() {
-                return 0;
-            }
-            void initialise( Precision initialVal, int, int ) {
-                bestVal = initialVal;
-            }
-            void operator()( Precision curVal, int, int ) {
-                if( ComparisonFunctor()( curVal, bestVal ) ) {
-                    bestVal = curVal;
-                }
-            }
-            Precision ret() { return bestVal; }            
-        };
-        template<typename Precision, typename ComparisonFunctor>
-        class accumulate_element_functor_matrix {
-            Precision bestVal;
-            int nBestRow;
-            int nBestCol;
-        public:
-            std::pair<Precision,std::pair<int,int> > null() {
-                return std::pair<Precision,std::pair<int,int> >( 0, 
std::pair<int,int>( 0, 0 ) );
-            }
-            void initialise( Precision initialVal, int nRow, int nCol ) {
-                bestVal = initialVal;
-                nBestRow = nRow;
-                nBestCol = nCol;
-            }
-            void operator()( Precision curVal, int nRow, int nCol ) {
-                if( ComparisonFunctor()( curVal, bestVal ) ) {
-                    bestVal = curVal;
-                    nBestRow = nRow;
-                    nBestCol = nCol;
-                }
-            }
-            std::pair<Precision,std::pair<int,int> > ret() {
-                return std::pair<Precision,std::pair<int,int> >( bestVal, 
-                                                                 
std::pair<int,int>( nBestRow, nBestCol ) );
-            }            
-        };
-        template<typename Precision, typename ComparisonFunctor>
-        class accumulate_vertical_functor {
-            Vector<Dynamic,Precision>* bestVal;
-        public:
-            accumulate_vertical_functor() {
-                bestVal = NULL;
-            }
-            accumulate_vertical_functor( int nNumCols ) {
-                bestVal = new Vector<Dynamic,Precision>( nNumCols );
-            }
-            Vector<Dynamic,Precision> null() {
-                return Vector<Dynamic,Precision>( 0 );
-            }
-            void initialise( Precision initialVal, int, int nCol ) {
-                (*bestVal)[nCol] = initialVal;
-            }
-            void operator()( Precision curVal, int, int nCol ) {
-                if( ComparisonFunctor()( curVal, (*bestVal)[nCol] ) ) {
-                    (*bestVal)[nCol] = curVal;
-                }
-            }
-            Vector<Dynamic,Precision> ret() {
-                if( bestVal == NULL ) {
-                    return null();
-                }
-                Vector<Dynamic,Precision> vRet = *bestVal; 
-                delete bestVal;
-                return vRet;
-            }            
-        };
-        template<typename Precision, typename ComparisonFunctor>
-        class accumulate_element_vertical_functor {
-            Vector<Dynamic,Precision>* bestVal;
-            Vector<Dynamic,Precision>* bestIndices;
-        public:
-            accumulate_element_vertical_functor() {
-                bestVal = NULL;
-                bestIndices = NULL;
-            }
-            accumulate_element_vertical_functor( int nNumCols ) {
-                bestVal = new Vector<Dynamic,Precision>( nNumCols );
-                bestIndices = new Vector<Dynamic,Precision>( nNumCols );
-            }
-            std::pair<Vector<Dynamic,Precision>,Vector<Dynamic,Precision> > 
null() {
-                Vector<Dynamic,Precision> vEmpty( 0 );
-                return 
std::pair<Vector<Dynamic,Precision>,Vector<Dynamic,Precision> >( vEmpty, vEmpty 
);
-            }
-            void initialise( Precision initialVal, int nRow, int nCol ) {
-                (*bestVal)[nCol] = initialVal;
-                (*bestIndices)[nCol] = nRow;
-            }
-            void operator()( Precision curVal, int nRow, int nCol ) {
-                if( ComparisonFunctor()( curVal, (*bestVal)[nCol] ) ) {
-                    (*bestVal)[nCol] = curVal;
-                    (*bestIndices)[nCol] = nRow;
-                }
-            }
-            std::pair<Vector<Dynamic,Precision>,Vector<Dynamic,Precision> > 
ret() {
-                if( bestVal == NULL ) {
-                    return null();
-                }
-                std::pair<Vector<Dynamic,Precision>,Vector<Dynamic,Precision> 
> vRet = 
-                    
std::pair<Vector<Dynamic,Precision>,Vector<Dynamic,Precision> > (*bestVal, 
*bestIndices );
-                delete bestVal; bestVal = NULL;
-                delete bestIndices; bestIndices = NULL;
-                return vRet;
-            }            
-        };
-        template<typename Precision, typename ComparisonFunctor>
-        class accumulate_horizontal_functor {
-            Vector<Dynamic,Precision>* bestVal;
-        public: 
-            accumulate_horizontal_functor() {
-                bestVal = NULL;
-            }
-            accumulate_horizontal_functor( int nNumRows ) {
-                bestVal = new Vector<Dynamic,Precision>( nNumRows );
-            }
-            Vector<Dynamic,Precision> null() {
-                return Vector<Dynamic,Precision>( 0 );
-            }
-            void initialise( Precision initialVal, int nRow, int ) {
-                (*bestVal)[nRow] = initialVal;
-            }
-            void operator()( Precision curVal, int nRow, int ) {
-                if( ComparisonFunctor()( curVal, (*bestVal)[nRow] ) ) {
-                    (*bestVal)[nRow] = curVal;
-                }
-            }
-            Vector<Dynamic,Precision> ret() { 
-                if( bestVal == NULL ) {
-                    return null();
-                }
-                Vector<Dynamic,Precision> vRet = *bestVal;
-                delete bestVal; bestVal = NULL;
-                return vRet; 
-            }            
-        };
-        template<typename Precision, typename ComparisonFunctor>
-        class accumulate_element_horizontal_functor {
-            Vector<Dynamic,Precision>* bestVal;
-            Vector<Dynamic,Precision>* bestIndices;
-        public:
-            accumulate_element_horizontal_functor() {
-                bestVal = NULL;
-                bestIndices = NULL;
-            }
-            accumulate_element_horizontal_functor( int nNumRows ) {
-                bestVal = new Vector<Dynamic,Precision>( nNumRows );
-                bestIndices = new Vector<Dynamic,Precision>( nNumRows );
-            }
-            std::pair<Vector<Dynamic,Precision>,Vector<Dynamic,Precision> > 
null() {
-                Vector<Dynamic,Precision> vEmpty( 0 );
-                return 
std::pair<Vector<Dynamic,Precision>,Vector<Dynamic,Precision> >( vEmpty, vEmpty 
);
-            }
-            void initialise( Precision initialVal, int nRow, int nCol ) {
-                (*bestVal)[nRow] = initialVal;
-                (*bestIndices)[nRow] = nCol;
-            }
-            void operator()( Precision curVal, int nRow, int nCol ) {
-                if( ComparisonFunctor()( curVal, (*bestVal)[nRow] ) ) {
-                    (*bestVal)[nRow] = curVal;
-                    (*bestIndices)[nRow] = nCol;
-                }
-            }
-            std::pair<Vector<Dynamic,Precision>,Vector<Dynamic,Precision> > 
ret() {
-                if( bestVal == NULL ) {
-                    return null();
-                }
-                std::pair<Vector<Dynamic,Precision>,Vector<Dynamic,Precision> 
> vRet = 
-                    
std::pair<Vector<Dynamic,Precision>,Vector<Dynamic,Precision> >( *bestVal, 
*bestIndices );
-                delete bestVal; bestVal = NULL;
-                delete bestIndices; bestIndices = NULL;
-                return vRet;
-            }            
-        };
-    }
-
-
-       /// Finds the minimal value of a vector.
-       /// @param v a vector
-       /// @return the smallest value of v
-    template<int Size, typename Precision, typename Base> inline Precision 
min_value( const Vector<Size, Precision, Base>& v) {
-        typedef Internal::accumulate_functor_vector<Precision, 
std::less<Precision> > vector_accumulate_functor;
-        return Internal::accumulate<Size,Precision,Base,
-            vector_accumulate_functor, Precision >( v ); 
-    }
-       /// Finds the largest value of a vector.
-       /// @param v a vector
-       /// @return the largest value of v
-    template<int Size, typename Precision, typename Base> inline Precision 
max_value( const Vector<Size, Precision, Base>& v) {
-        typedef Internal::accumulate_functor_vector<Precision, 
std::greater<Precision> > vector_accumulate_functor;
-        return Internal::accumulate<Size,Precision,Base,
-            vector_accumulate_functor, Precision >( v ); 
-    }
-
-       /// Finds the smallest value of a matrix.
-       /// @param m a matrix
-       /// @return the smallest value of m
-    template<int R, int C, typename Precision, typename Base> inline Precision 
min_value( const Matrix<R, C, Precision, Base> & m) {
-        typedef Internal::accumulate_functor_matrix<Precision, 
std::less<Precision> > matrix_accumulate_functor;
-        return Internal::accumulate<R,C,Precision,Base,
-            matrix_accumulate_functor, Precision>( m );
-    }
-       /// Finds the largest value of a matrix.
-       /// @param m a matrix
-       /// @return the largest value of m
-    template<int R, int C, typename Precision, typename Base> inline Precision 
max_value( const Matrix<R, C, Precision, Base> & m) {
-        typedef Internal::accumulate_functor_matrix<Precision, 
std::greater<Precision> > matrix_accumulate_functor;
-        return Internal::accumulate<R,C,Precision,Base,
-            matrix_accumulate_functor, Precision>( m );
-    }
-       /// Finds the smallest values of each column of a matrix.
-       /// @param m a matrix
-       /// @return a vector of size C
-    template<int R, int C, typename Precision, typename Base> inline 
Vector<Dynamic,Precision> min_value_vertical( const Matrix<R, C, Precision, 
Base> & m) {
-        typedef 
Internal::accumulate_vertical_functor<Precision,std::less<Precision> > 
matrix_accumulate_vertical_functor;
-        return Internal::accumulate_vertical<R,C,Precision,Base,
-            matrix_accumulate_vertical_functor, Vector<Dynamic,Precision> >( m 
);
-    }
-       /// Finds the largest values of each column of a matrix.
-       /// @param m a matrix
-       /// @return a vector of size C
-    template<int R, int C, typename Precision, typename Base> inline 
Vector<Dynamic,Precision> max_value_vertical( const Matrix<R, C, Precision, 
Base> & m) {
-        typedef 
Internal::accumulate_vertical_functor<Precision,std::greater<Precision> > 
matrix_accumulate_vertical_functor;
-        return Internal::accumulate_vertical<R,C,Precision,Base,
-            matrix_accumulate_vertical_functor, Vector<Dynamic,Precision> >( m 
);
-    }
-       /// Finds the smallest values of each row of a matrix.
-       /// @param m a matrix
-       /// @return a vector of size R
-    template<int R, int C, typename Precision, typename Base> inline 
Vector<Dynamic,Precision> min_value_horizontal( const Matrix<R, C, Precision, 
Base> & m) {
-        typedef 
Internal::accumulate_horizontal_functor<Precision,std::less<Precision> > 
matrix_accumulate_horizontal_functor;
-        return Internal::accumulate_horizontal<R,C,Precision,Base,
-            matrix_accumulate_horizontal_functor, Vector<Dynamic,Precision> >( 
m );
-    }
-       /// Finds the largest values of each row of a matrix.
-       /// @param m a matrix
-       /// @return a vector of size R
-    template<int R, int C, typename Precision, typename Base> inline 
Vector<Dynamic,Precision> max_value_horizontal( const Matrix<R, C, Precision, 
Base> & m) {
-        typedef 
Internal::accumulate_horizontal_functor<Precision,std::greater<Precision> > 
matrix_accumulate_horizontal_functor;
-        return Internal::accumulate_horizontal<R,C,Precision,Base,
-            matrix_accumulate_horizontal_functor, Vector<Dynamic,Precision> >( 
m );
-    }
-       /// Finds the smallest value of a vector and its index.
-       /// @param v a vector
-       /// @return a pair containing the smallest value and its index
-    template<int Size, typename Precision, typename Base> inline 
std::pair<Precision,int> min_element( const Vector<Size, Precision, Base>& v) {
-        typedef Internal::accumulate_element_functor_vector<Precision, 
std::less<Precision> > vector_accumulate_functor;
-        return Internal::accumulate<Size,Precision,Base,
-            vector_accumulate_functor, std::pair<Precision,int> >( v ); 
-    }
-       /// Finds the largest value of a vector and its index.
-       /// @param v a vector
-       /// @return a pair containing the largest value and its index
-    template<int Size, typename Precision, typename Base> inline 
std::pair<Precision,int> max_element( const Vector<Size, Precision, Base>& v) {
-        typedef Internal::accumulate_element_functor_vector<Precision, 
std::greater<Precision> > vector_accumulate_functor;
-        return Internal::accumulate<Size,Precision,Base,
-            vector_accumulate_functor, std::pair<Precision,int> >( v ); 
-    }    
-       /// Finds the smallest value of a matrix and its row and column.
-       /// @param m a matrix
-       /// @return a pair containing the smallest value and a pair
-       /// containing its row and column
-    template<int R, int C, typename Precision, typename Base> inline 
std::pair<Precision,std::pair<int,int> > min_element( const Matrix<R, C, 
Precision, Base> & m) {
-        typedef Internal::accumulate_element_functor_matrix<Precision, 
std::less<Precision> > matrix_accumulate_functor;
-        typedef std::pair<Precision,std::pair<int,int> > Ret;
-        return Internal::accumulate<R,C,Precision,Base,
-            matrix_accumulate_functor, Ret>( m );
-    }
-       /// Finds the largest value of a matrix and its row and column.
-       /// @param m a matrix
-       /// @return a pair containing the largest value and a pair
-       /// containing its row and column
-    template<int R, int C, typename Precision, typename Base> inline 
std::pair<Precision,std::pair<int,int> > max_element( const Matrix<R, C, 
Precision, Base> & m) {
-        typedef Internal::accumulate_element_functor_matrix<Precision, 
std::greater<Precision> > matrix_accumulate_functor;
-        typedef std::pair<Precision,std::pair<int,int> > Ret;
-        return Internal::accumulate<R,C,Precision,Base,
-            matrix_accumulate_functor, Ret>( m );
-    }  
-    /// Finds the smallest values of each column of a matrix and their
-       /// indices.
-       /// @param m a matrix
-       /// @return a pair of vectors of size C containg the values and
-       /// their indices
-    template<int R, int C, typename Precision, typename Base> inline 
std::pair<Vector<Dynamic,Precision>,Vector<Dynamic,Precision> > 
min_element_vertical( const Matrix<R, C, Precision, Base> & m) {
-        typedef 
Internal::accumulate_element_vertical_functor<Precision,std::less<Precision> > 
matrix_accumulate_vertical_functor;
-        typedef std::pair<Vector< Dynamic, Precision >,Vector< Dynamic, 
Precision > > Ret;
-        return Internal::accumulate_vertical<R,C,Precision,Base,
-            matrix_accumulate_vertical_functor, Ret >( m );
-    }
-    /// Finds the largest values of each column of a matrix and their
-       /// indices.
-       /// @param m a matrix
-       /// @return a pair of vectors of size C containg the values and
-       /// their indices
-    template<int R, int C, typename Precision, typename Base> inline 
std::pair<Vector< Dynamic, Precision >,Vector< Dynamic, Precision > > 
max_element_vertical( const Matrix<R, C, Precision, Base> & m) {
-        typedef 
Internal::accumulate_element_vertical_functor<Precision,std::greater<Precision> 
> matrix_accumulate_vertical_functor;
-        typedef std::pair<Vector< Dynamic, Precision >,Vector< Dynamic, 
Precision > > Ret;
-        return Internal::accumulate_vertical<R,C,Precision,Base,
-            matrix_accumulate_vertical_functor, Ret >( m );
-    }
-    /// Finds the smallest values of each row of a matrix and their
-       /// indices.
-       /// @param m a matrix
-       /// @return a pair of vectors of size R containg the values and
-       /// their indices
-    template<int R, int C, typename Precision, typename Base> inline 
std::pair<Vector< Dynamic, Precision >,Vector< Dynamic, Precision > > 
min_element_horizontal( const Matrix<R, C, Precision, Base> & m) {
-        typedef 
Internal::accumulate_element_horizontal_functor<Precision,std::less<Precision> 
> matrix_accumulate_vertical_functor;
-        typedef std::pair<Vector< Dynamic, Precision >,Vector< Dynamic, 
Precision > > Ret;
-        return Internal::accumulate_horizontal<R,C,Precision,Base,
-            matrix_accumulate_vertical_functor, Ret >( m );
-    }
-    /// Finds the largest values of each row of a matrix and their
-       /// indices.
-       /// @param m a matrix
-       /// @return a pair of vectors of size R containg the values and
-       /// their indices
-    template<int R, int C, typename Precision, typename Base> inline 
std::pair<Vector< Dynamic, Precision >,Vector< Dynamic, Precision > > 
max_element_horizontal( const Matrix<R, C, Precision, Base> & m) {
-        typedef 
Internal::accumulate_element_horizontal_functor<Precision,std::greater<Precision>
 > matrix_accumulate_vertical_functor;
-        typedef std::pair<Vector< Dynamic, Precision >,Vector< Dynamic, 
Precision > > Ret;
-        return Internal::accumulate_horizontal<R,C,Precision,Base,
-            matrix_accumulate_vertical_functor, Ret >( m );
-    }
-}
-#endif

Index: irls.h
===================================================================
RCS file: irls.h
diff -N irls.h
--- irls.h      23 Jul 2009 16:11:12 -0000      1.11
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,165 +0,0 @@
-// -*- c++ -*-
-
-// Copyright (C) 2005,2009 Tom Drummond (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-
-#ifndef __IRLS_H
-#define __IRLS_H
-
-#include <TooN/wls.h>
-#include <cassert>
-#include <cmath>
-
-namespace TooN {
-
-       /// Robust reweighting (type I) for IRLS.
-       /// A reweighting class with \f$w(x)=\frac{1}{\sigma + |x|}\f$.
-       /// This structure can be passed as the second template argument in 
IRLS.
-       /// @ingroup gEquations
-       template<typename Precision>
-       struct RobustI {
-               void set_sd(Precision x){ sd_inlier = x;} ///<Set the noise 
standard deviation.
-               double sd_inlier; ///< The inlier standard deviation, 
\f$\sigma\f$.
-               inline Precision reweight(Precision x) {return 
1/(sd_inlier+fabs(x));}  ///< Returns \f$w(x)\f$.
-               inline Precision true_scale(Precision x) {return reweight(x) - 
fabs(x)*reweight(x)*reweight(x);}  ///< Returns \f$w(x) + xw'(x)\f$.
-               inline Precision objective(Precision x) {return fabs(x) + 
sd_inlier*log(sd_inlier*reweight(x));}  ///< Returns \f$\int xw(x)dx\f$.
-       };
-
-       /// Robust reweighting (type II) for IRLS.
-       /// A reweighting class with \f$w(x)=\frac{1}{\sigma + x^2}\f$.
-       /// This structure can be passed as the second template argument in 
IRLS.
-       /// @ingroup gEquations
-       template<typename Precision>
-       struct RobustII {
-               void set_sd(Precision x){ sd_inlier = x*x;} ///<Set the noise 
standard deviation.
-               Precision sd_inlier; ///< The inlier standard deviation 
squared, \f$\sigma\f$.
-               inline Precision reweight(Precision d){return 
1/(sd_inlier+d*d);} ///< Returns \f$w(x)\f$.
-               inline Precision true_scale(Precision d){return d - 
2*d*reweight(d);} ///< Returns \f$w(x) + xw'(x)\f$.
-               inline Precision objective(Precision d){return 0.5 * log(1 + 
d*d/sd_inlier);} ///< Returns \f$\int xw(x)dx\f$.
-       };
-
-       /// A reweighting class representing no reweighting in IRLS.
-       /// \f$w(x)=1\f$
-       /// This structure can be passed as the second template argument in 
IRLS.
-       /// @ingroup gEquations
-       template<typename Precision>
-       struct ILinear {
-               void set_sd(Precision){} ///<Set the noise standard deviation 
(does nothing).
-               inline Precision reweight(Precision d){return 1;} ///< Returns 
\f$w(x)\f$.
-               inline Precision true_scale(Precision d){return 1;} ///< 
Returns \f$w(x) + xw'(x)\f$.
-               inline Precision objective(Precision d){return d*d;} ///< 
Returns \f$\int xw(x)dx\f$.
-       };
-       
-       ///A reweighting class where the objective function tends to a 
-       ///fixed value, rather than infinity. Note that this is not therefore
-       ///a proper distribution since its integral is not finite. It is 
considerably
-       ///more efficient than RobustI and II, since log() is not used.
-       /// @ingroup gEquations
-       template<typename Precision>
-       struct RobustIII {
-
-               void set_sd(Precision x){ sd_inlier = x*x;} ///<Set the noise 
standard deviation.
-               Precision sd_inlier; ///< Inlier standard deviation squared.
-               /// Returns \f$w(x)\f$.
-               Precision reweight(Precision x) const
-               {
-                       double d = (1 + x*x/sd_inlier);
-                       return 1/(d*d);
-               }       
-               ///< Returns \f$\int xw(x)dx\f$.
-               Precision objective(Precision x) const 
-               {
-                       return x*x / (2*(1 + x*x/sd_inlier));
-               }
-       };
-
-       /// Performs iterative reweighted least squares.
-       /// @param Size the size
-       /// @param Reweight The reweighting functor. This structure must 
provide reweight(), 
-       /// true-scale() and objective() methods. Existing examples are  Robust 
I, Robust II and ILinear.
-       /// @ingroup gEquations
-       template <int Size, typename Precision, template <typename Precision> 
class Reweight>
-       class IRLS
-               : public Reweight<Precision>,
-                 public WLS<Size,Precision>
-       {
-       public:
-               IRLS(int size=Size):
-                       WLS<Size,Precision>(size),
-                       my_true_C_inv(Zeros(size))
-               {
-                       my_residual=0;
-               }
-               
-               template<int Size2, typename Precision2, typename Base2>
-               inline void add_mJ(Precision m, const 
Vector<Size2,Precision2,Base2>& J) {
-                       
SizeMismatch<Size,Size2>::test(my_true_C_inv.num_rows(), J.size());
-
-                       Precision scale = Reweight<Precision>::reweight(m);
-                       Precision ts = Reweight<Precision>::true_scale(m);
-                       my_residual += Reweight<Precision>::objective(m);
-
-                       WLS<Size>::add_mJ(m,J,scale);
-
-                       Vector<Size,Precision> scaledm(m*ts);
-
-                       my_true_C_inv += scaledm.as_col() * scaledm.as_row();
-
-               }
-
-               void operator += (const IRLS& meas){
-                       WLS<Size>::operator+=(meas);
-                       my_true_C_inv += meas.my_true_C_inv;
-               }
-
-
-               Matrix<Size,Size,Precision>& get_true_C_inv() {return 
my_true_C_inv;}
-               const Matrix<Size,Size,Precision>& get_true_C_inv()const 
{return my_true_C_inv;}
-
-               Precision get_residual() {return my_residual;}
-
-               void clear(){
-                       WLS<Size,Precision>::clear();
-                       my_residual=0;
-                       my_true_C_inv = Zeros;
-               }
-
-       private:
-
-               Precision my_residual;
-
-               Matrix<Size,Size,Precision> my_true_C_inv;
-
-               // comment out to allow bitwise copying
-               IRLS( IRLS& copyof );
-               int operator = ( IRLS& copyof );
-       };
-
-}
-
-#endif

Index: lapack.h
===================================================================
RCS file: lapack.h
diff -N lapack.h
--- lapack.h    25 Jan 2012 14:57:02 -0000      1.19
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,195 +0,0 @@
-// -*- c++ -*-
-
-// Copyright (C) 2005,2009,2010 Tom Drummond (address@hidden), E. Rosten
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-#ifndef TOON_INCLUDE_LAPCK_H
-#define TOON_INCLUDE_LAPCK_H
-
-#include <TooN/TooN.h>
-
-// LAPACK and BLAS routines
-namespace TooN {
-
-       extern "C" {
-               // LU decomoposition of a general matrix
-               void dgetrf_(FortranInteger* M, FortranInteger *N, double* A, 
FortranInteger* lda, FortranInteger* IPIV, FortranInteger* INFO);
-               void sgetrf_(FortranInteger* M, FortranInteger *N, float* A, 
FortranInteger* lda, FortranInteger* IPIV, FortranInteger* INFO);
-
-               // generate inverse of a matrix given its LU decomposition
-               void dgetri_(FortranInteger* N, double* A, FortranInteger* lda, 
FortranInteger* IPIV, double* WORK, FortranInteger* lwork, FortranInteger* 
INFO);
-               void sgetri_(FortranInteger* N, float* A, FortranInteger* lda, 
FortranInteger* IPIV, float* WORK, FortranInteger* lwork, FortranInteger* INFO);
-
-               // inverse of a triangular matrix * a vector (BLAS level 2)
-               void dtrsm_(char* SIDE, char* UPLO, char* TRANSA, char* DIAG, 
FortranInteger* M, FortranInteger* N, double* alpha, double* A, FortranInteger* 
lda, double* B, FortranInteger* ldb);
-               void strsm_(char* SIDE, char* UPLO, char* TRANSA, char* DIAG, 
FortranInteger* M, FortranInteger* N, float* alpha, float* A, FortranInteger* 
lda, float* B, FortranInteger* ldb);
-  
-
-               // SVD of a general matrix
-               void dgesvd_(const char* JOBU, const char* JOBVT, 
FortranInteger* M, FortranInteger *N, double* A, FortranInteger* lda,
-                                        double* S, double *U, FortranInteger* 
ldu, double* VT, FortranInteger* ldvt,
-                                        double* WORK, FortranInteger* lwork, 
FortranInteger* INFO);
-
-               void sgesvd_(const char* JOBU, const char* JOBVT, 
FortranInteger* M, FortranInteger *N, float* A, FortranInteger* lda,
-                                        float* S, float *U, FortranInteger* 
ldu, float* VT, FortranInteger* ldvt,
-                                        float* WORK, FortranInteger* lwork, 
FortranInteger* INFO);
-
-               // Eigen decomposition of a symmetric matrix
-               void dsyev_(const char* JOBZ, const char* UPLO, FortranInteger* 
N, double* A, FortranInteger* lda, double* W, double* WORK, FortranInteger* 
LWORK, FortranInteger* INFO);
-               void ssyev_(const char* JOBZ, const char* UPLO, FortranInteger* 
N, float* A, FortranInteger* lda, float* W, float* WORK, FortranInteger* LWORK, 
FortranInteger* INFO);
-
-               // Eigen decomposition of a non-symmetric matrix
-               void dgeev_(const char* JOBVL, const char* JOBVR, 
FortranInteger* N, double* A, FortranInteger* lda, double* WR, double* WI, 
double* VL, FortranInteger* LDVL, double* VR, FortranInteger* LDVR , double* 
WORK, FortranInteger* LWORK, FortranInteger* INFO);
-               void sgeev_(const char* JOBVL, const char* JOBVR, 
FortranInteger* N, float* A, FortranInteger* lda, float* WR, float* WI, float* 
VL, FortranInteger* LDVL, float* VR, FortranInteger* LDVR , float* WORK, 
FortranInteger* LWORK, FortranInteger* INFO);
-
-               // Cholesky decomposition
-               void dpotrf_(const char* UPLO, const FortranInteger* N, double* 
A, const FortranInteger* LDA, FortranInteger* INFO);
-               void spotrf_(const char* UPLO, const FortranInteger* N, float* 
A, const FortranInteger* LDA, FortranInteger* INFO);
-
-               // Cholesky solve AX=B given decomposition
-               void dpotrs_(const char* UPLO, const FortranInteger* N, const 
FortranInteger* NRHS, const double* A, const FortranInteger* LDA, double* B, 
const FortranInteger* LDB, FortranInteger* INFO);
-               void spotrs_(const char* UPLO, const FortranInteger* N, const 
FortranInteger* NRHS, const float* A, const FortranInteger* LDA, float* B, 
const FortranInteger* LDB, FortranInteger* INFO);
-
-               // Cholesky inverse given decomposition
-               void dpotri_(const char* UPLO, const FortranInteger* N, double* 
A, const FortranInteger* LDA, FortranInteger* INFO);
-               void spotri_(const char* UPLO, const FortranInteger* N, float* 
A, const FortranInteger* LDA, FortranInteger* INFO);
-               
-               // Computes a QR decomposition of a general rectangular matrix 
with column pivoting
-               void sgeqp3_(FortranInteger* M, FortranInteger* N, float* A, 
FortranInteger* LDA, FortranInteger* JPVT, float* TAU, float* WORK, 
FortranInteger* LWORK, FortranInteger* INFO );
-               void dgeqp3_(FortranInteger* M, FortranInteger* N, double* A, 
FortranInteger* LDA, FortranInteger* JPVT, double* TAU, double* WORK, 
FortranInteger* LWORK, FortranInteger* INFO );
-               
-               //Reconstruct Q from a QR decomposition
-               void sorgqr_(FortranInteger* M,FortranInteger* 
N,FortranInteger* K, float* A, FortranInteger* LDA, float* TAU, float* WORK, 
FortranInteger* LWORK, FortranInteger* INFO );
-               void dorgqr_(FortranInteger* M,FortranInteger* 
N,FortranInteger* K, double* A, FortranInteger* LDA, double* TAU, double* WORK, 
FortranInteger* LWORK, FortranInteger* INFO );
-       }
-
-
-       
//////////////////////////////////////////////////////////////////////////////////
-       // C++ overloaded functions to access single and double precision 
automatically //
-       
//////////////////////////////////////////////////////////////////////////////////
-
-       inline void getrf_(FortranInteger* M, FortranInteger *N, float* A, 
FortranInteger* lda, FortranInteger* IPIV, FortranInteger* INFO){
-               sgetrf_(M, N, A, lda, IPIV, INFO);
-       }
-
-       inline void getrf_(FortranInteger* M, FortranInteger *N, double* A, 
FortranInteger* lda, FortranInteger* IPIV, FortranInteger* INFO){
-               dgetrf_(M, N, A, lda, IPIV, INFO);
-       }
-
-       inline void trsm_(const char* SIDE, const char* UPLO, const char* 
TRANSA, const char* DIAG, FortranInteger* M, FortranInteger* N, float* alpha, 
float* A, FortranInteger* lda, float* B, FortranInteger* ldb) { 
-               strsm_(const_cast<char*>(SIDE), const_cast<char*>(UPLO), 
const_cast<char*>(TRANSA), const_cast<char*>(DIAG), M, N, alpha, A, lda, B, 
ldb);
-       }
-
-       inline void trsm_(const char* SIDE, const char* UPLO, const char* 
TRANSA, const char* DIAG, FortranInteger* M, FortranInteger* N, double* alpha, 
double* A, FortranInteger* lda, double* B, FortranInteger* ldb) {
-               dtrsm_(const_cast<char*>(SIDE), const_cast<char*>(UPLO), 
const_cast<char*>(TRANSA), const_cast<char*>(DIAG), M, N, alpha, A, lda, B, 
ldb);
-       }
-
-       inline void getri_(FortranInteger* N, double* A, FortranInteger* lda, 
FortranInteger* IPIV, double* WORK, FortranInteger* lwork, FortranInteger* 
INFO){
-               dgetri_(N, A, lda, IPIV, WORK, lwork, INFO);
-       }
-
-       inline void getri_(FortranInteger* N, float* A, FortranInteger* lda, 
FortranInteger* IPIV, float* WORK, FortranInteger* lwork, FortranInteger* INFO){
-               sgetri_(N, A, lda, IPIV, WORK, lwork, INFO);
-       }
-
-       inline void potrf_(const char * UPLO, const FortranInteger* N, double* 
A, const FortranInteger* LDA, FortranInteger* INFO){
-               dpotrf_(UPLO, N, A, LDA, INFO);
-       }
-
-       inline void potrf_(const char * UPLO, const FortranInteger* N, float* 
A, const FortranInteger* LDA, FortranInteger* INFO){
-               spotrf_(UPLO, N, A, LDA, INFO);
-       }
-
-       // SVD
-       inline void gesvd_(const char* JOBU, const char* JOBVT, FortranInteger* 
M, FortranInteger *N, double* A, FortranInteger* lda,
-                               double* S, double *U, FortranInteger* ldu, 
double* VT, FortranInteger* ldvt,
-                               double* WORK, FortranInteger* lwork, 
FortranInteger* INFO){
-               dgesvd_(JOBU, JOBVT, M, N, A, lda, S, U, ldu, VT, ldvt, WORK, 
lwork, INFO);
-       }
-
-       inline void gesvd_(const char* JOBU, const char* JOBVT, FortranInteger* 
M, FortranInteger *N, float* A, FortranInteger* lda,
-                                        float* S, float *U, FortranInteger* 
ldu, float* VT, FortranInteger* ldvt,
-                                        float* WORK, FortranInteger* lwork, 
FortranInteger* INFO){
-               sgesvd_(JOBU, JOBVT, M, N, A, lda, S, U, ldu, VT, ldvt, WORK, 
lwork, INFO);
-       }
-
-       // Cholesky solve AX=B given decomposition
-       inline void potrs_(const char* UPLO, const FortranInteger* N, const 
FortranInteger* NRHS, const double* A, const FortranInteger* LDA, double* B, 
const FortranInteger* LDB, FortranInteger* INFO){
-               dpotrs_(UPLO, N, NRHS, A, LDA, B, LDB, INFO);
-       }
-
-       inline void potrs_(const char* UPLO, const FortranInteger* N, const 
FortranInteger* NRHS, const float* A, const FortranInteger* LDA, float* B, 
const FortranInteger* LDB, FortranInteger* INFO){
-               spotrs_(UPLO, N, NRHS, A, LDA, B, LDB, INFO);
-       }
-
-       // Cholesky inverse given decomposition
-       inline void potri_(const char* UPLO, const FortranInteger* N, double* 
A, const FortranInteger* LDA, FortranInteger* INFO){
-               dpotri_(UPLO, N, A, LDA, INFO);
-       }
-
-       inline void potri_(const char* UPLO, const FortranInteger* N, float* A, 
const FortranInteger* LDA, FortranInteger* INFO){
-               spotri_(UPLO, N, A, LDA, INFO);
-       }
-
-       inline void syev_(const char* JOBZ, const char* UPLO, FortranInteger* 
N, double* A, FortranInteger* lda, double* W, double* WORK, FortranInteger* 
LWORK, FortranInteger* INFO){
-               dsyev_(JOBZ, UPLO, N, A, lda, W, WORK, LWORK, INFO);
-       }
-       inline void syev_(const char* JOBZ, const char* UPLO, FortranInteger* 
N, float* A, FortranInteger* lda, float* W, float* WORK, FortranInteger* LWORK, 
FortranInteger* INFO){
-               ssyev_(JOBZ, UPLO, N, A, lda, W, WORK, LWORK, INFO);
-       }
-
-       //QR decomposition
-       inline void geqp3_(FortranInteger* M, FortranInteger* N, float* A, 
FortranInteger* LDA, FortranInteger* JPVT, float* TAU, float* WORK, 
FortranInteger* LWORK, FortranInteger* INFO )
-       {
-               sgeqp3_(M, N, A, LDA, JPVT, TAU, WORK, LWORK, INFO);
-       }
-
-       inline void geqp3_(FortranInteger* M, FortranInteger* N, double* A, 
FortranInteger* LDA, FortranInteger* JPVT, double* TAU, double* WORK, 
FortranInteger* LWORK, FortranInteger* INFO )
-       {
-               dgeqp3_(M, N, A, LDA, JPVT, TAU, WORK, LWORK, INFO);
-       }
-       
-       inline void orgqr_(FortranInteger* M,FortranInteger* N,FortranInteger* 
K, float* A, FortranInteger* LDA, float* TAU, float* WORK, FortranInteger* 
LWORK, FortranInteger* INFO )
-       {
-               sorgqr_(M, N, K, A, LDA, TAU, WORK, LWORK, INFO);
-       }
-
-       inline void orgqr_(FortranInteger* M,FortranInteger* N,FortranInteger* 
K, double* A, FortranInteger* LDA, double* TAU, double* WORK, FortranInteger* 
LWORK, FortranInteger* INFO )
-       {
-               dorgqr_(M, N, K, A, LDA, TAU, WORK, LWORK, INFO);
-       }
-
-       //Non symmetric (general) eigen decomposition
-       inline void geev_(const char* JOBVL, const char* JOBVR, FortranInteger* 
N, double* A, FortranInteger* lda, double* WR, double* WI, double* VL, 
FortranInteger* LDVL, double* VR, FortranInteger* LDVR , double* WORK, 
FortranInteger* LWORK, FortranInteger* INFO){
-               dgeev_(JOBVL, JOBVR, N,  A,  lda,  WR,  WI,  VL,  LDVL,  VR,  
LDVR ,  WORK,  LWORK,  INFO);
-       }
-
-       inline void geev_(const char* JOBVL, const char* JOBVR, FortranInteger* 
N, float* A,  FortranInteger* lda, float* WR,  float* WI,  float* VL,  
FortranInteger* LDVL, float* VR,  FortranInteger* LDVR , float* WORK,  
FortranInteger* LWORK, FortranInteger* INFO){
-               sgeev_(JOBVL, JOBVR, N,  A,  lda,  WR,  WI,  VL,  LDVL,  VR,  
LDVR ,  WORK,  LWORK,  INFO);
-       }
-}
-#endif

Index: make_data_functions.awk
===================================================================
RCS file: make_data_functions.awk
diff -N make_data_functions.awk
--- make_data_functions.awk     18 Aug 2009 14:15:39 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,35 +0,0 @@
-BEGIN{
-       N=100
-       print "//Mechanically generate code. Do not edit."
-       print "namespace TooN {"
-       print "//modify make_data.awk and run make internal/data_functions.hh"
-       for(i=1; i <= N; i++)
-       {
-               printf "inline Operator<Internal::Data<" i ", double> > 
Data(double x1"
-               
-               for(j=2; j<= i; j++)
-                       printf ", double x"j
-
-               print "){"
-               print  "  Operator<Internal::Data<"i", double> > d;"
-               for(j=1; j<= i; j++)
-                       print "  d.vals["j-1"] = x"j";"
-
-               print "  return d;"
-               print "}"
-
-               printf "template<typename Precision> inline 
Operator<Internal::Data<" i ", Precision> > Data(const Precision& x1"
-               
-               for(j=2; j<= i; j++)
-                       printf ", const Precision& x"j
-
-               print "){"
-               print  "  Operator<Internal::Data<"i", Precision> > d;"
-               for(j=1; j<= i; j++)
-                       print "  d.vals["j-1"] = x"j";"
-
-               print "  return d;"
-               print "}"
-       }
-       print "}"
-}

Index: make_make_vector.awk
===================================================================
RCS file: make_make_vector.awk
diff -N make_make_vector.awk
--- make_make_vector.awk        29 Apr 2009 22:01:37 -0000      1.4
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,35 +0,0 @@
-BEGIN{
-       N=30
-       print "//Mechanically generate code. Do not edit."
-       print "namespace TooN {"
-       print "//modify make_make_vector.awk and run make 
internal/make_vector.hh"
-       for(i=1; i <= N; i++)
-       {
-               printf "inline Vector<" i "> makeVector(double x1"
-               
-               for(j=2; j<= i; j++)
-                       printf ", double x"j
-
-               print "){"
-               print  "  Vector<"i"> vals;"
-               for(j=1; j<= i; j++)
-                       print "  vals["j-1"] = x"j";"
-
-               print "  return vals;"
-               print "}"
-
-               printf "template<typename Precision> inline Vector<" i ", 
Precision> makeVector(const Precision& x1"
-               
-               for(j=2; j<= i; j++)
-                       printf ", const Precision& x"j
-
-               print "){"
-               print  "  Vector<"i", Precision> vals;"
-               for(j=1; j<= i; j++)
-                       print "  vals["j-1"] = x"j";"
-
-               print "  return vals;"
-               print "}"
-       }
-       print "}"
-}

Index: make_typeof.awk
===================================================================
RCS file: make_typeof.awk
diff -N make_typeof.awk
--- make_typeof.awk     17 Feb 2009 17:11:07 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,24 +0,0 @@
-BEGIN{
-       types[n++] = "unsigned char"
-       types[n++] = "char"
-       types[n++] = "int"
-       types[n++] = "unsigned int"
-       types[n++] = "float"
-       types[n++] = "double"
-       types[n++] = "std::complex<float>"
-       types[n++] = "std::complex<double>"
-
-       print "template<int N> struct Enumerate{char i[N];};"
-
-       for(i=0; i < n; i++)
-               print "Enumerate<"i"> enumerate(const "types[i]"&);"
-
-       
-       print "template<int N> struct DeEnumerate{};"
-       for(i=0; i < n; i++)
-               print "template<> struct DeEnumerate<"i">{typedef "types[i]" 
type;};"
-
-       
-               
-
-}

Index: numdiff.awk
===================================================================
RCS file: numdiff.awk
diff -N numdiff.awk
--- numdiff.awk 1 Feb 2010 19:35:17 -0000       1.5
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,132 +0,0 @@
-function fail( x)
-{
-       print name " Failed " x
-       exit(0)
-}
-
-function abs(x)
-{
-       return x<0?-x:x
-}
-
-
-function isfloat(x)
-{
-       return x ~ /^-?(([0-9]+\.[0-9]*)|(\.?[0-9]+))([eE][-+][0-9]+)?$/
-}
-
-function iscomplex(x)
-{
-       return x ~ 
/^\(-?(([0-9]+\.[0-9]*)|(\.?[0-9]+))([eE][-+][0-9]+)?,-?(([0-9]+\.[0-9]*)|(\.?[0-9]+))([eE][-+][0-9]+)?\)$/
-}
-
-function complexdiff(a, b,       as, bs)
-{
-       gsub(/[()]/,"", a)
-       sub(/,/," ", a)
-       gsub(/[()]/,"", b)
-       sub(/,/," ", b)
-       split(a, as)
-       split(b, bs)
-
-       return abs(as[1] - bs[1]) + abs(as[2] - bs[2]);
-}
-
-function ignore_and_process(line,       a)
-{
-       if(line ~ /^[[:space:]]*$/) #Ignore blank linkes
-               return 1
-       else if (line ~ /^[[:space:]]*#>/) #Process directives, then ignore the 
line
-       {
-               split(line, a)
-               if(a[2] == "t")
-                       t = a[3]
-               else if(a[2] == "ignore")
-                       ignore++
-               else if(a[2] == "resume")
-                       ignore--
-
-               return 1
-       }
-       else if (line ~ /^[[:space:]]*#/) #Ignore comments
-               return 1
-       else   #The line should not be ignored
-               return (ignore != 0)
-}
-
-BEGIN{
-
-       #This program compares two files to see if they are the same
-       #Whitespace is ignored
-       #Numbers must match to within a given threshold.
-
-       #Lines starting with a # are also ignored.
-       #If a # is *not* the first non-whitespace, then it is not ignored.
-       #Lines starting with #> are directives and are processed further
-       #Directives are
-       #   #> t xx                 Set t to xx
-       #   #> ignore               Start ignoring text (nestable)
-       #   #> resume               Stop ignoring text 
-
-       ignore=0
-
-       if(t == "")
-               t = 1e-6
-
-       for(;;)
-       {
-               #Get the next non blank line from the two files
-               do
-                status1 = (getline s1 < f1)
-               while(status1 && ignore_and_process(s1))
-
-               do
-                status2 = (getline s2 < f2)
-               while(status2 && ignore_and_process(s2))
-               
-               #Check to see if the files have both ended
-               if(status1 != status2)
-                       fail("file length mismatch")
-               else if(status1 == 0 && status2 == 0)
-               {
-                       print name " Passed"
-                       exit(0)
-               }
-
-               if(s1 == "Crash!!!" || s2 == "Crash!!!")
-                       fail("Crash!!!")
-
-               if(s1 == "Compile error!" || s2 == "Compile error!")
-                       fail("Compile error!")
-
-               #If there are valid lines left, then split them
-               #into fields
-               n1 = split(s1, a1)
-               n2 = split(s2, a2)
-
-               #Check for matching linesize
-               if(n1 != n2)
-                       fail("line length mismatch >>>"s1"<<< >>>"s2"<<<<");
-               
-               #Compare fields
-               for(i=1; i <= n1; i++)
-               {
-                       #If both fields are floats, then use a threshold based
-                       #match otherwise use an exact match
-                       if(isfloat(a1[i]) && isfloat(a2[i]))
-                       {
-                               if(abs(a1[i] - a2[i]) > t)
-                                       fail("number  " a1[i] " " a2[i])
-                       }
-                       else if(iscomplex(a1[i]) && iscomplex(a2[i]))
-                       {
-                               if(complexdiff(a1[i], a2[i]) > t)
-                                       fail("number  " a1[i] " " a2[i])
-                       }
-                       else if(a1[i] != a2[i])
-                               fail("string >>>"a1[i]"<<< >>>"a2[i]"<<<<")
-               }
-       }
-
-
-}

Index: se2.h
===================================================================
RCS file: se2.h
diff -N se2.h
--- se2.h       25 Jan 2012 15:51:07 -0000      1.12
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,372 +0,0 @@
-// -*- c++ -*-
-
-// Copyright (C) 2005,2009 Tom Drummond (address@hidden),
-// Ed Rosten (address@hidden), Gerhard Reitmayr (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-/* This code mostly made by copying from se3.h !! */
-
-#ifndef TOON_INCLUDE_SE2_H
-#define TOON_INCLUDE_SE2_H
-
-#include <TooN/so2.h>
-
-
-namespace TooN {
-
-/// Represent a two-dimensional Euclidean transformation (a rotation and a 
translation). 
-/// This can be represented by a \f$2\times 3\f$ matrix operating on a 
homogeneous co-ordinate, 
-/// so that a vector \f$\underline{x}\f$ is transformed to a new location 
\f$\underline{x}'\f$
-/// by
-/// \f[\begin{aligned}\underline{x}' &= E\times\underline{x}\\ 
\begin{bmatrix}x'\\y'\end{bmatrix} &= \begin{pmatrix}r_{11} & r_{12} & 
t_1\\r_{21} & r_{22} & 
t_2\end{pmatrix}\begin{bmatrix}x\\y\\1\end{bmatrix}\end{aligned}\f]
-/// 
-/// This transformation is a member of the Special Euclidean Lie group SE2. 
These can be parameterised with
-/// three numbers (in the space of the Lie Algebra). In this class, the first 
two parameters are a
-/// translation vector while the third is the amount of rotation in the plane 
as for SO2.
-/// @ingroup gTransforms
-template <typename Precision = DefaultPrecision>
-class SE2 {
-public:
-       /// Default constructor. Initialises the the rotation to zero (the 
identity) and the translation to zero
-       SE2() : my_translation(Zeros) {}
-       template <class A> SE2(const SO2<Precision>& R, const 
Vector<2,Precision,A>& T) : my_rotation(R), my_translation(T) {}
-       template <int S, class P, class A> SE2(const Vector<S, P, A> & v) { 
*this = exp(v); }
-
-       /// Returns the rotation part of the transformation as a SO2
-       SO2<Precision> & get_rotation(){return my_rotation;}
-       /// @overload
-       const SO2<Precision> & get_rotation() const {return my_rotation;}
-       /// Returns the translation part of the transformation as a Vector
-       Vector<2, Precision> & get_translation() {return my_translation;}
-       /// @overload
-       const Vector<2, Precision> & get_translation() const {return 
my_translation;}
-
-       /// Exponentiate a Vector in the Lie Algebra to generate a new SE2.
-       /// See the Detailed Description for details of this vector.
-       /// @param vect The Vector to exponentiate
-       template <int S, typename P, typename A>
-       static inline SE2 exp(const Vector<S,P, A>& vect);
-       
-       /// Take the logarithm of the matrix, generating the corresponding 
vector in the Lie Algebra.
-       /// See the Detailed Description for details of this vector.
-       static inline Vector<3, Precision> ln(const SE2& se2);
-       /// @overload
-       Vector<3, Precision> ln() const { return SE2::ln(*this); }
-
-       /// compute the inverse of the transformation
-       SE2 inverse() const {
-               const SO2<Precision> & rinv = my_rotation.inverse();
-               return SE2(rinv, -(rinv*my_translation));
-       };
-
-       /// Right-multiply by another SE2 (concatenate the two transformations)
-       /// @param rhs The multipier
-       template <typename P>
-       SE2<typename Internal::MultiplyType<Precision,P>::type> operator 
*(const SE2<P>& rhs) const { 
-               return SE2<typename 
Internal::MultiplyType<Precision,P>::type>(my_rotation*rhs.get_rotation(), 
my_translation + my_rotation*rhs.get_translation()); 
-       }
-
-       /// Self right-multiply by another SE2 (concatenate the two 
transformations)
-       /// @param rhs The multipier
-       template <typename P>
-       inline SE2& operator *=(const SE2<P>& rhs) { 
-               *this = *this * rhs; 
-               return *this; 
-       }
-
-       /// returns the generators for the Lie group. These are a set of 
matrices that
-       /// form a basis for the vector space of the Lie algebra.
-       /// - 0 is translation in x
-       /// - 1 is translation in y
-       /// - 2 is rotation in the plane
-       static inline Matrix<3,3, Precision> generator(int i) {
-               Matrix<3,3,Precision> result(Zeros);
-               if(i < 2){
-                       result[i][2] = 1;
-                       return result;
-               }
-               result[0][1] = -1;
-               result[1][0] = 1;
-               return result;
-       }
-
-       /// transfers a vector in the Lie algebra, from one coord frame to 
another
-       /// so that exp(adjoint(vect)) = (*this) * exp(vect) * (this->inverse())
-       template<typename Accessor>
-       Vector<3, Precision> adjoint(const Vector<3,Precision, Accessor> & 
vect) const {
-               Vector<3, Precision> result;
-               result[2] = vect[2];
-               result.template slice<0,2>() = my_rotation * vect.template 
slice<0,2>();
-               result[0] += vect[2] * my_translation[1];
-               result[1] -= vect[2] * my_translation[0];
-               return result;
-       }
-
-       template <typename Accessor>
-       Matrix<3,3,Precision> adjoint(const Matrix<3,3,Precision,Accessor>& M) 
const {
-               Matrix<3,3,Precision> result;
-               for(int i=0; i<3; ++i)
-                       result.T()[i] = adjoint(M.T()[i]);
-               for(int i=0; i<3; ++i)
-                       result[i] = adjoint(result[i]);
-               return result;
-       }
-
-private:
-       SO2<Precision> my_rotation;
-       Vector<2, Precision> my_translation;
-};
-
-/// Write an SE2 to a stream 
-/// @relates SE2
-template <class Precision>
-inline std::ostream& operator<<(std::ostream& os, const SE2<Precision> & rhs){
-       std::streamsize fw = os.width();
-       for(int i=0; i<2; i++){
-               os.width(fw);
-               os << rhs.get_rotation().get_matrix()[i];
-               os.width(fw);
-               os << rhs.get_translation()[i] << '\n';
-       }
-       return os;
-}
-
-/// Read an SE2 from a stream 
-/// @relates SE2
-template <class Precision>
-inline std::istream& operator>>(std::istream& is, SE2<Precision>& rhs){
-       for(int i=0; i<2; i++)
-               is >> rhs.get_rotation().my_matrix[i].ref() >> 
rhs.get_translation()[i];
-       rhs.get_rotation().coerce();
-       return is;
-}
-
-
-//////////////////
-// operator *   //
-// SE2 * Vector //
-//////////////////
-
-namespace Internal {
-template<int S, typename P, typename PV, typename A>
-struct SE2VMult;
-}
-
-template<int S, typename P, typename PV, typename A>
-struct Operator<Internal::SE2VMult<S,P,PV,A> > {
-       const SE2<P> & lhs;
-       const Vector<S,PV,A> & rhs;
-       
-       Operator(const SE2<P> & l, const Vector<S,PV,A> & r ) : lhs(l), rhs(r) 
{}
-       
-       template <int S0, typename P0, typename A0>
-       void eval(Vector<S0, P0, A0> & res ) const {
-               SizeMismatch<3,S>::test(3, rhs.size());
-               res.template slice<0,2>()=lhs.get_rotation()*rhs.template 
slice<0,2>();
-               res.template slice<0,2>()+=lhs.get_translation() * rhs[2];
-               res[2] = rhs[2];
-       }
-       int size() const { return 3; }
-};
-
-/// Right-multiply with a Vector<3>
-/// @relates SE2
-template<int S, typename P, typename PV, typename A>
-inline Vector<3, typename Internal::MultiplyType<P,PV>::type> operator*(const 
SE2<P> & lhs, const Vector<S,PV,A>& rhs){
-       return Vector<3, typename 
Internal::MultiplyType<P,PV>::type>(Operator<Internal::SE2VMult<S,P,PV,A> 
>(lhs,rhs));
-}
-
-/// Right-multiply with a Vector<2> (special case, extended to be a 
homogeneous vector)
-/// @relates SE2
-template <typename P, typename PV, typename A>
-inline Vector<2, typename Internal::MultiplyType<P,PV>::type> operator*(const 
SE2<P>& lhs, const Vector<2,PV,A>& rhs){
-       return lhs.get_translation() + lhs.get_rotation() * rhs;
-}
-
-//////////////////
-// operator *   //
-// Vector * SE2 //
-//////////////////
-
-namespace Internal {
-template<int S, typename P, typename PV, typename A>
-struct VSE2Mult;
-}
-
-template<int S, typename P, typename PV, typename A>
-struct Operator<Internal::VSE2Mult<S,P,PV,A> > {
-       const Vector<S,PV,A> & lhs;
-       const SE2<P> & rhs;
-       
-       Operator(const Vector<S,PV,A> & l, const SE2<P> & r ) : lhs(l), rhs(r) 
{}
-       
-       template <int S0, typename P0, typename A0>
-       void eval(Vector<S0, P0, A0> & res ) const {
-               SizeMismatch<3,S>::test(3, lhs.size());
-               res.template slice<0,2>() = lhs.template 
slice<0,2>()*rhs.get_rotation();
-               res[2] = lhs[2];
-               res[2] += lhs.template slice<0,2>() * rhs.get_translation();
-       }
-       int size() const { return 3; }
-};
-
-/// Left-multiply with a Vector<3>
-/// @relates SE2
-template<int S, typename P, typename PV, typename A>
-inline Vector<3, typename Internal::MultiplyType<PV,P>::type> operator*(const 
Vector<S,PV,A>& lhs, const SE2<P> & rhs){
-       return Vector<3, typename 
Internal::MultiplyType<PV,P>::type>(Operator<Internal::VSE2Mult<S, P,PV,A> 
>(lhs,rhs));
-}
-
-//////////////////
-// operator *   //
-// SE2 * Matrix //
-//////////////////
-
-namespace Internal {
-template <int R, int C, typename PM, typename A, typename P>
-struct SE2MMult;
-}
-
-template<int R, int Cols, typename PM, typename A, typename P>
-struct Operator<Internal::SE2MMult<R, Cols, PM, A, P> > {
-       const SE2<P> & lhs;
-       const Matrix<R,Cols,PM,A> & rhs;
-       
-       Operator(const SE2<P> & l, const Matrix<R,Cols,PM,A> & r ) : lhs(l), 
rhs(r) {}
-       
-       template <int R0, int C0, typename P0, typename A0>
-       void eval(Matrix<R0, C0, P0, A0> & res ) const {
-               SizeMismatch<3,R>::test(3, rhs.num_rows());
-               for(int i=0; i<rhs.num_cols(); ++i)
-                       res.T()[i] = lhs * rhs.T()[i];
-       }
-       int num_cols() const { return rhs.num_cols(); }
-       int num_rows() const { return 3; }
-};
-
-/// Right-multiply with a Matrix<3>
-/// @relates SE2
-template <int R, int Cols, typename PM, typename A, typename P> 
-inline Matrix<3,Cols, typename Internal::MultiplyType<P,PM>::type> 
operator*(const SE2<P> & lhs, const Matrix<R,Cols,PM, A>& rhs){
-       return Matrix<3,Cols,typename 
Internal::MultiplyType<P,PM>::type>(Operator<Internal::SE2MMult<R, Cols, PM, A, 
P> >(lhs,rhs));
-}
-
-//////////////////
-// operator *   //
-// Matrix * SE2 //
-//////////////////
-
-namespace Internal {
-template <int Rows, int C, typename PM, typename A, typename P>
-struct MSE2Mult;
-}
-
-template<int Rows, int C, typename PM, typename A, typename P>
-struct Operator<Internal::MSE2Mult<Rows, C, PM, A, P> > {
-       const Matrix<Rows,C,PM,A> & lhs;
-       const SE2<P> & rhs;
-       
-       Operator( const Matrix<Rows,C,PM,A> & l, const SE2<P> & r ) : lhs(l), 
rhs(r) {}
-       
-       template <int R0, int C0, typename P0, typename A0>
-       void eval(Matrix<R0, C0, P0, A0> & res ) const {
-               SizeMismatch<3, C>::test(3, lhs.num_cols());
-               for(int i=0; i<lhs.num_rows(); ++i)
-                       res[i] = lhs[i] * rhs;
-       }
-       int num_cols() const { return 3; }
-       int num_rows() const { return lhs.num_rows(); }
-};
-
-/// Left-multiply with a Matrix<3>
-/// @relates SE2
-template <int Rows, int C, typename PM, typename A, typename P> 
-inline Matrix<Rows,3, typename Internal::MultiplyType<PM,P>::type> 
operator*(const Matrix<Rows,C,PM, A>& lhs, const SE2<P> & rhs ){
-       return Matrix<Rows,3,typename 
Internal::MultiplyType<PM,P>::type>(Operator<Internal::MSE2Mult<Rows, C, PM, A, 
P> >(lhs,rhs));
-}
-
-template <typename Precision>
-template <int S, typename PV, typename Accessor>
-inline SE2<Precision> SE2<Precision>::exp(const Vector<S, PV, Accessor>& mu)
-{
-       SizeMismatch<3,S>::test(3, mu.size());
-
-       static const Precision one_6th = 1.0/6.0;
-       static const Precision one_20th = 1.0/20.0;
-  
-       SE2<Precision> result;
-  
-       const Precision theta = mu[2];
-       const Precision theta_sq = theta * theta;
-  
-       const Vector<2, Precision> cross = makeVector( -theta * mu[1], theta * 
mu[0]);
-       result.get_rotation() = SO2<Precision>::exp(theta);
-
-       if (theta_sq < 1e-8){
-               result.get_translation() = mu.template slice<0,2>() + 0.5 * 
cross;
-       } else {
-               Precision A, B;
-               if (theta_sq < 1e-6) {
-                       A = 1.0 - theta_sq * one_6th*(1.0 - one_20th * 
theta_sq);
-                       B = 0.5 - 0.25 * one_6th * theta_sq;
-               } else {
-                       const Precision inv_theta = (1.0/theta);
-                       const Precision sine = 
result.my_rotation.get_matrix()[1][0];
-                       const Precision cosine = 
result.my_rotation.get_matrix()[0][0];
-                       A = sine * inv_theta;
-                       B = (1 - cosine) * (inv_theta * inv_theta);
-               }
-               result.get_translation() = TooN::operator*(A,mu.template 
slice<0,2>()) + TooN::operator*(B,cross);
-       }
-       return result;
-}
- 
-template <typename Precision>
-inline Vector<3, Precision> SE2<Precision>::ln(const SE2<Precision> & se2) {
-       const Precision theta = se2.get_rotation().ln();
-
-       Precision shtot = 0.5;  
-       if(fabs(theta) > 0.00001)
-               shtot = sin(theta/2)/theta;
-
-       const SO2<Precision> halfrotator(theta * -0.5);
-       Vector<3, Precision> result;
-       result.template slice<0,2>() = (halfrotator * se2.get_translation())/(2 
* shtot);
-       result[2] = theta;
-       return result;
-}
-
-/// Multiply a SO2 with and SE2
-/// @relates SE2
-/// @relates SO2
-template <typename Precision>
-inline SE2<Precision> operator*(const SO2<Precision> & lhs, const 
SE2<Precision>& rhs){
-       return SE2<Precision>( lhs*rhs.get_rotation(), 
lhs*rhs.get_translation());
-}
-
-}
-#endif

Index: se3.h
===================================================================
RCS file: se3.h
diff -N se3.h
--- se3.h       25 Jan 2012 15:51:07 -0000      1.35
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,637 +0,0 @@
-// -*- c++ -*-
-
-// Copyright (C) 2005,2009 Tom Drummond (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-#ifndef TOON_INCLUDE_SE3_H
-#define TOON_INCLUDE_SE3_H
-
-#include <TooN/so3.h>
-
-namespace TooN {
-
-
-/// Represent a three-dimensional Euclidean transformation (a rotation and a 
translation). 
-/// This can be represented by a \f$3\times\f$4 matrix operating on a 
homogeneous co-ordinate, 
-/// so that a vector \f$\underline{x}\f$ is transformed to a new location 
\f$\underline{x}'\f$
-/// by
-/// \f[\begin{aligned}\underline{x}' &= E\times\underline{x}\\ 
\begin{bmatrix}x'\\y'\\z'\end{bmatrix} &= \begin{pmatrix}r_{11} & r_{12} & 
r_{13} & t_1\\r_{21} & r_{22} & r_{23} & t_2\\r_{31} & r_{32} & r_{33} & 
t_3\end{pmatrix}\begin{bmatrix}x\\y\\z\\1\end{bmatrix}\end{aligned}\f]
-/// 
-/// This transformation is a member of the Special Euclidean Lie group SE3. 
These can be parameterised
-/// six numbers (in the space of the Lie Algebra). In this class, the first 
three parameters are a
-/// translation vector while the second three are a rotation vector, whose 
direction is the axis of rotation
-/// and length the amount of rotation (in radians), as for SO3
-/// @ingroup gTransforms
-template <typename Precision = DefaultPrecision>
-class SE3 {
-public:
-       /// Default constructor. Initialises the the rotation to zero (the 
identity) and the translation to zero
-       inline SE3() : my_translation(Zeros) {}
-
-       template <int S, typename P, typename A> 
-       SE3(const SO3<Precision> & R, const Vector<S, P, A>& T) : 
my_rotation(R), my_translation(T) {}
-       template <int S, typename P, typename A>
-       SE3(const Vector<S, P, A> & v) { *this = exp(v); }
-
-       template <class IP, int S, typename P, typename A> 
-       SE3(const Operator<Internal::Identity<IP> >&, const Vector<S, P, A>& T) 
: my_translation(T) {}
-
-       /// Returns the rotation part of the transformation as a SO3
-       inline SO3<Precision>& get_rotation(){return my_rotation;}
-       /// @overload
-       inline const SO3<Precision>& get_rotation() const {return my_rotation;}
-
-       /// Returns the translation part of the transformation as a Vector
-       inline Vector<3, Precision>& get_translation() {return my_translation;}
-       /// @overload
-       inline const Vector<3, Precision>& get_translation() const {return 
my_translation;}
-
-       /// Exponentiate a Vector in the Lie Algebra to generate a new SE3.
-       /// See the Detailed Description for details of this vector.
-       /// @param vect The Vector to exponentiate
-       template <int S, typename P, typename A>
-       static inline SE3 exp(const Vector<S, P, A>& vect);
-
-
-       /// Take the logarithm of the matrix, generating the corresponding 
vector in the Lie Algebra.
-       /// See the Detailed Description for details of this vector.
-       static inline Vector<6, Precision> ln(const SE3& se3);
-       /// @overload
-       inline Vector<6, Precision> ln() const { return SE3::ln(*this); }
-
-       inline SE3 inverse() const {
-               const SO3<Precision> rinv = get_rotation().inverse();
-               return SE3(rinv, -(rinv*my_translation));
-       }
-
-       /// Right-multiply by another SE3 (concatenate the two transformations)
-       /// @param rhs The multipier
-       template<typename P>
-       inline SE3& operator *=(const SE3<P> & rhs) {
-               get_translation() += get_rotation() * rhs.get_translation();
-               get_rotation() *= rhs.get_rotation();
-               return *this;
-       }
-
-       /// Right-multiply by another SE3 (concatenate the two transformations)
-       /// @param rhs The multipier
-       template<typename P>
-       inline SE3<typename Internal::MultiplyType<Precision, P>::type> 
operator *(const SE3<P>& rhs) const { 
-           return SE3<typename Internal::MultiplyType<Precision, 
P>::type>(get_rotation()*rhs.get_rotation(), get_translation() + 
get_rotation()*rhs.get_translation()); 
-       }
-
-       inline SE3& left_multiply_by(const SE3& left) {
-               get_translation() = left.get_translation() + 
left.get_rotation() * get_translation();
-               get_rotation() = left.get_rotation() * get_rotation();
-               return *this;
-       }
-
-       static inline Matrix<4,4,Precision> generator(int i){
-               Matrix<4,4,Precision> result(Zeros);
-               if(i < 3){
-                       result[i][3]=1;
-                       return result;
-               }
-               result[(i+1)%3][(i+2)%3] = -1;
-               result[(i+2)%3][(i+1)%3] = 1;
-               return result;
-       }
-
-  /// Returns the i-th generator times pos
-  template<typename Base>
-  inline static Vector<4,Precision> generator_field(int i, const Vector<4, 
Precision, Base>& pos)
-  {
-    Vector<4, Precision> result(Zeros);
-    if(i < 3){
-      result[i]=pos[3];
-      return result;
-    }
-    result[(i+1)%3] = - pos[(i+2)%3];
-    result[(i+2)%3] = pos[(i+1)%3];
-    return result;
-  }
-  
-       /// Transfer a matrix in the Lie Algebra from one
-       /// co-ordinate frame to another. This is the operation such that for a 
matrix 
-       /// \f$ B \f$, 
-       /// \f$ e^{\text{Adj}(v)} = Be^{v}B^{-1} \f$
-       /// @param M The Matrix to transfer
-       template<int S, typename P2, typename Accessor>
-       inline Vector<6, Precision> adjoint(const Vector<S,P2, Accessor>& 
vect)const;
-
-       /// Transfer covectors between frames (using the transpose of the 
inverse of the adjoint)
-       /// so that trinvadjoint(vect1) * adjoint(vect2) = vect1 * vect2
-       template<int S, typename P2, typename Accessor>
-       inline Vector<6, Precision> trinvadjoint(const Vector<S,P2,Accessor>& 
vect)const;
-       
-       ///@overload
-       template <int R, int C, typename P2, typename Accessor>
-       inline Matrix<6,6,Precision> adjoint(const Matrix<R,C,P2,Accessor>& 
M)const;
-
-       ///@overload
-       template <int R, int C, typename P2, typename Accessor>
-       inline Matrix<6,6,Precision> trinvadjoint(const 
Matrix<R,C,P2,Accessor>& M)const;
-
-private:
-       SO3<Precision> my_rotation;
-       Vector<3, Precision> my_translation;
-};
-
-// transfers a vector in the Lie algebra
-// from one coord frame to another
-// so that exp(adjoint(vect)) = (*this) * exp(vect) * (this->inverse())
-template<typename Precision>
-template<int S, typename P2, typename Accessor>
-inline Vector<6, Precision> SE3<Precision>::adjoint(const Vector<S,P2, 
Accessor>& vect) const{
-       SizeMismatch<6,S>::test(6, vect.size());
-       Vector<6, Precision> result;
-       result.template slice<3,3>() = get_rotation() * vect.template 
slice<3,3>();
-       result.template slice<0,3>() = get_rotation() * vect.template 
slice<0,3>();
-       result.template slice<0,3>() += get_translation() ^ result.template 
slice<3,3>();
-       return result;
-}
-
-// tansfers covectors between frames
-// (using the transpose of the inverse of the adjoint)
-// so that trinvadjoint(vect1) * adjoint(vect2) = vect1 * vect2
-template<typename Precision>
-template<int S, typename P2, typename Accessor>
-inline Vector<6, Precision> SE3<Precision>::trinvadjoint(const Vector<S,P2, 
Accessor>& vect) const{
-       SizeMismatch<6,S>::test(6, vect.size());
-       Vector<6, Precision> result;
-       result.template slice<3,3>() = get_rotation() * vect.template 
slice<3,3>();
-       result.template slice<0,3>() = get_rotation() * vect.template 
slice<0,3>();
-       result.template slice<3,3>() += get_translation() ^ result.template 
slice<0,3>();
-       return result;
-}
-
-template<typename Precision>
-template<int R, int C, typename P2, typename Accessor>
-inline Matrix<6,6,Precision> SE3<Precision>::adjoint(const 
Matrix<R,C,P2,Accessor>& M)const{
-       SizeMismatch<6,R>::test(6, M.num_cols());
-       SizeMismatch<6,C>::test(6, M.num_rows());
-
-       Matrix<6,6,Precision> result;
-       for(int i=0; i<6; i++){
-               result.T()[i] = adjoint(M.T()[i]);
-       }
-       for(int i=0; i<6; i++){
-               result[i] = adjoint(result[i]);
-       }
-       return result;
-}
-
-template<typename Precision>
-template<int R, int C, typename P2, typename Accessor>
-inline Matrix<6,6,Precision> SE3<Precision>::trinvadjoint(const 
Matrix<R,C,P2,Accessor>& M)const{
-       SizeMismatch<6,R>::test(6, M.num_cols());
-       SizeMismatch<6,C>::test(6, M.num_rows());
-
-       Matrix<6,6,Precision> result;
-       for(int i=0; i<6; i++){
-               result.T()[i] = trinvadjoint(M.T()[i]);
-       }
-       for(int i=0; i<6; i++){
-               result[i] = trinvadjoint(result[i]);
-       }
-       return result;
-}
-
-/// Write an SE3 to a stream 
-/// @relates SE3
-template <typename Precision>
-inline std::ostream& operator <<(std::ostream& os, const SE3<Precision>& rhs){
-       std::streamsize fw = os.width();
-       for(int i=0; i<3; i++){
-               os.width(fw);
-               os << rhs.get_rotation().get_matrix()[i];
-               os.width(fw);
-               os << rhs.get_translation()[i] << '\n';
-       }
-       return os;
-}
-
-
-/// Reads an SE3 from a stream 
-/// @relates SE3
-template <typename Precision>
-inline std::istream& operator>>(std::istream& is, SE3<Precision>& rhs){
-       for(int i=0; i<3; i++){
-               is >> rhs.get_rotation().my_matrix[i].ref() >> 
rhs.get_translation()[i];
-       }
-       rhs.get_rotation().coerce();
-       return is;
-}
-
-//////////////////
-// operator *   //
-// SE3 * Vector //
-//////////////////
-
-namespace Internal {
-template<int S, typename PV, typename A, typename P>
-struct SE3VMult;
-}
-
-template<int S, typename PV, typename A, typename P>
-struct Operator<Internal::SE3VMult<S,PV,A,P> > {
-       const SE3<P> & lhs;
-       const Vector<S,PV,A> & rhs;
-       
-       Operator(const SE3<P> & l, const Vector<S,PV,A> & r ) : lhs(l), rhs(r) 
{}
-       
-       template <int S0, typename P0, typename A0>
-       void eval(Vector<S0, P0, A0> & res ) const {
-               SizeMismatch<4,S>::test(4, rhs.size());
-               res.template slice<0,3>()=lhs.get_rotation() * rhs.template 
slice<0,3>();
-               res.template 
slice<0,3>()+=TooN::operator*(lhs.get_translation(),rhs[3]);
-               res[3] = rhs[3];
-       }
-       int size() const { return 4; }
-};
-
-/// Right-multiply by a Vector
-/// @relates SE3
-template<int S, typename PV, typename A, typename P> inline
-Vector<4, typename Internal::MultiplyType<P,PV>::type> operator*(const SE3<P> 
& lhs, const Vector<S,PV,A>& rhs){
-       return Vector<4, typename 
Internal::MultiplyType<P,PV>::type>(Operator<Internal::SE3VMult<S,PV,A,P> 
>(lhs,rhs));
-}
-
-/// Right-multiply by a Vector
-/// @relates SE3
-template <typename PV, typename A, typename P> inline
-Vector<3, typename Internal::MultiplyType<P,PV>::type> operator*(const SE3<P>& 
lhs, const Vector<3,PV,A>& rhs){
-       return lhs.get_translation() + lhs.get_rotation() * rhs;
-}
-
-//////////////////
-// operator *   //
-// Vector * SE3 //
-//////////////////
-
-namespace Internal {
-template<int S, typename PV, typename A, typename P>
-struct VSE3Mult;
-}
-
-template<int S, typename PV, typename A, typename P>
-struct Operator<Internal::VSE3Mult<S,PV,A,P> > {
-       const Vector<S,PV,A> & lhs;
-       const SE3<P> & rhs;
-       
-       Operator( const Vector<S,PV,A> & l, const SE3<P> & r ) : lhs(l), rhs(r) 
{}
-       
-       template <int S0, typename P0, typename A0>
-       void eval(Vector<S0, P0, A0> & res ) const {
-               SizeMismatch<4,S>::test(4, lhs.size());
-               res.template slice<0,3>()=lhs.template slice<0,3>() * 
rhs.get_rotation();
-               res[3] = lhs[3];
-               res[3] += lhs.template slice<0,3>() * rhs.get_translation();
-       }
-       int size() const { return 4; }
-};
-
-/// Left-multiply by a Vector
-/// @relates SE3
-template<int S, typename PV, typename A, typename P> inline
-Vector<4, typename Internal::MultiplyType<P,PV>::type> operator*( const 
Vector<S,PV,A>& lhs, const SE3<P> & rhs){
-       return Vector<4, typename 
Internal::MultiplyType<P,PV>::type>(Operator<Internal::VSE3Mult<S,PV,A,P> 
>(lhs,rhs));
-}
-
-//////////////////
-// operator *   //
-// SE3 * Matrix //
-//////////////////
-
-namespace Internal {
-template <int R, int C, typename PM, typename A, typename P>
-struct SE3MMult;
-}
-
-template<int R, int Cols, typename PM, typename A, typename P>
-struct Operator<Internal::SE3MMult<R, Cols, PM, A, P> > {
-       const SE3<P> & lhs;
-       const Matrix<R,Cols,PM,A> & rhs;
-       
-       Operator(const SE3<P> & l, const Matrix<R,Cols,PM,A> & r ) : lhs(l), 
rhs(r) {}
-       
-       template <int R0, int C0, typename P0, typename A0>
-       void eval(Matrix<R0, C0, P0, A0> & res ) const {
-               SizeMismatch<4,R>::test(4, rhs.num_rows());
-               for(int i=0; i<rhs.num_cols(); ++i)
-                       res.T()[i] = lhs * rhs.T()[i];
-       }
-       int num_cols() const { return rhs.num_cols(); }
-       int num_rows() const { return 4; }
-};
-
-/// Right-multiply by a Matrix
-/// @relates SE3
-template <int R, int Cols, typename PM, typename A, typename P> inline 
-Matrix<4,Cols, typename Internal::MultiplyType<P,PM>::type> operator*(const 
SE3<P> & lhs, const Matrix<R,Cols,PM, A>& rhs){
-       return Matrix<4,Cols,typename 
Internal::MultiplyType<P,PM>::type>(Operator<Internal::SE3MMult<R, Cols, PM, A, 
P> >(lhs,rhs));
-}
-
-//////////////////
-// operator *   //
-// Matrix * SE3 //
-//////////////////
-
-namespace Internal {
-template <int Rows, int C, typename PM, typename A, typename P>
-struct MSE3Mult;
-}
-
-template<int Rows, int C, typename PM, typename A, typename P>
-struct Operator<Internal::MSE3Mult<Rows, C, PM, A, P> > {
-       const Matrix<Rows,C,PM,A> & lhs;
-       const SE3<P> & rhs;
-       
-       Operator( const Matrix<Rows,C,PM,A> & l, const SE3<P> & r ) : lhs(l), 
rhs(r) {}
-       
-       template <int R0, int C0, typename P0, typename A0>
-       void eval(Matrix<R0, C0, P0, A0> & res ) const {
-               SizeMismatch<4, C>::test(4, lhs.num_cols());
-               for(int i=0; i<lhs.num_rows(); ++i)
-                       res[i] = lhs[i] * rhs;
-       }
-       int num_cols() const { return 4; }
-       int num_rows() const { return lhs.num_rows(); }
-};
-
-/// Left-multiply by a Matrix
-/// @relates SE3
-template <int Rows, int C, typename PM, typename A, typename P> inline 
-Matrix<Rows,4, typename Internal::MultiplyType<PM,P>::type> operator*(const 
Matrix<Rows,C,PM, A>& lhs, const SE3<P> & rhs ){
-       return Matrix<Rows,4,typename 
Internal::MultiplyType<PM,P>::type>(Operator<Internal::MSE3Mult<Rows, C, PM, A, 
P> >(lhs,rhs));
-}
-
-template <typename Precision>
-template <int S, typename P, typename VA>
-inline SE3<Precision> SE3<Precision>::exp(const Vector<S, P, VA>& mu){
-       SizeMismatch<6,S>::test(6, mu.size());
-       static const Precision one_6th = 1.0/6.0;
-       static const Precision one_20th = 1.0/20.0;
-       using std::sqrt;
-       
-       SE3<Precision> result;
-       
-       const Vector<3,Precision> w = mu.template slice<3,3>();
-       const Precision theta_sq = w*w;
-       const Precision theta = sqrt(theta_sq);
-       Precision A, B;
-       
-       const Vector<3,Precision> cross = w ^ mu.template slice<0,3>();
-       if (theta_sq < 1e-8) {
-               A = 1.0 - one_6th * theta_sq;
-               B = 0.5;
-               result.get_translation() = mu.template slice<0,3>() + 0.5 * 
cross;
-       } else {
-               Precision C;
-               if (theta_sq < 1e-6) {
-                       C = one_6th*(1.0 - one_20th * theta_sq);
-                       A = 1.0 - theta_sq * C;
-                       B = 0.5 - 0.25 * one_6th * theta_sq;
-               } else {
-                       const Precision inv_theta = 1.0/theta;
-                       A = sin(theta) * inv_theta;
-                       B = (1 - cos(theta)) * (inv_theta * inv_theta);
-                       C = (1 - A) * (inv_theta * inv_theta);
-               }
-               result.get_translation() = mu.template slice<0,3>() + 
TooN::operator*(B, cross) + TooN::operator*(C, (w ^ cross));
-       }
-       rodrigues_so3_exp(w, A, B, result.get_rotation().my_matrix);
-       return result;
-}
-
-template <typename Precision>
-inline Vector<6, Precision> SE3<Precision>::ln(const SE3<Precision>& se3) {
-       using std::sqrt;
-       Vector<3,Precision> rot = se3.get_rotation().ln();
-       const Precision theta = sqrt(rot*rot);
-
-       Precision shtot = 0.5;  
-       if(theta > 0.00001) {
-               shtot = sin(theta/2)/theta;
-       }
-       
-       // now do the rotation
-       const SO3<Precision> halfrotator = SO3<Precision>::exp(rot * -0.5);
-       Vector<3, Precision> rottrans = halfrotator * se3.get_translation();
-       
-       if(theta > 0.001){
-               rottrans -= TooN::operator*(rot, ((se3.get_translation() * rot) 
* (1-2*shtot) / (rot*rot)));
-       } else {
-               rottrans -= TooN::operator*(rot, ((se3.get_translation() * 
rot)/24));
-       }
-       
-       rottrans /= (2 * shtot);
-       
-       Vector<6, Precision> result;
-       result.template slice<0,3>()=rottrans;
-       result.template slice<3,3>()=rot;
-       return result;
-}
-
-template <typename Precision>
-inline SE3<Precision> operator*(const SO3<Precision>& lhs, const 
SE3<Precision>& rhs){
-       return SE3<Precision>(lhs*rhs.get_rotation(),lhs*rhs.get_translation());
-}
-
-#if 0 // should be moved to another header file
-
-    template <class A> inline
-    Vector<3> transform(const SE3& pose, const FixedVector<3,A>& x) { return 
pose.get_rotation()*x + pose.get_translation(); }
-    
-    template <class A> inline
-    Vector<3> transform_inverse_depth(const SE3& pose, const FixedVector<3,A>& 
uvq)
-    {
-       const Matrix<3>& R = pose.get_rotation().get_matrix();  
-       const Vector<3> DqT = R.template slice<0,0,3,2>() * uvq.template 
slice<0,2>() + R.T()[2] + uvq[2] * pose.get_translation();
-       const double inv_z = 1.0/ DqT[2];
-       return makeVector(DqT[0]*inv_z, DqT[1]*inv_z, uvq[2]*inv_z);
-    }
-
-    template <class A1, class A2> inline
-    Vector<3> transform(const SE3& pose, const FixedVector<3,A1>& x, 
FixedMatrix<3,3,A2>& J_x)
-    {
-       J_x = pose.get_rotation().get_matrix();
-       return pose * x;
-    }
-
-
-    template <class A1, class A2> inline
-    Vector<3> inverse_depth_point_jacobian(const SE3& pose, const double q, 
const FixedVector<3,A1>& DqT, const double inv_z, FixedMatrix<3,3,A2>& J_uvq)
-    {
-       const Matrix<3>& R = pose.get_rotation().get_matrix();  
-       const Vector<3>& T = pose.get_translation();
-       const double u1 = DqT[0] * inv_z;
-       J_uvq[0][0] = inv_z * (R[0][0] - u1*R[2][0]);
-       J_uvq[0][1] = inv_z * (R[0][1] - u1*R[2][1]);
-       J_uvq[0][2] = inv_z * (T[0] - u1 * T[2]);
-       
-       const double v1 = DqT[1] * inv_z;
-       J_uvq[1][0] = inv_z * (R[1][0] - v1*R[2][0]);
-       J_uvq[1][1] = inv_z * (R[1][1] - v1*R[2][1]);
-       J_uvq[1][2] = inv_z * (T[1] - v1 * T[2]);
-       
-       const double q1 = q * inv_z;
-       J_uvq[2][0] = inv_z * (-q1 * R[2][0]);
-       J_uvq[2][1] = inv_z * (-q1 * R[2][1]);
-       J_uvq[2][2] = inv_z * (1.0 - q1 * T[2]);
-
-       return makeVector(u1, v1, q1);
-    }
-    
-
-    template <class A1, class A2> inline
-    Vector<3> transform_inverse_depth(const SE3& pose, const 
FixedVector<3,A1>& uvq, FixedMatrix<3,3,A2>& J_uvq)
-    {
-       const Matrix<3>& R = pose.get_rotation().get_matrix();  
-       const Vector<3>& T = pose.get_translation();
-       const double q = uvq[2];
-       const Vector<3> DqT = R.template slice<0,0,3,2>() * uvq.template 
slice<0,2>() + R.T()[2] + q * T;
-       const double inv_z = 1.0 / DqT[2];
-
-       return inverse_depth_point_jacobian(pose, q, DqT, inv_z, J_uvq);
-    }
-
-    template <class A1, class A2, class A3> inline
-    Vector<3> transform(const SE3& pose, const FixedVector<3,A1>& x, 
FixedMatrix<3,3,A2>& J_x, FixedMatrix<3,6,A3>& J_pose)
-    {
-       J_x = pose.get_rotation().get_matrix();
-       Identity(J_pose.template slice<0,0,3,3>());
-       const Vector<3> cx = pose * x;
-       J_pose[0][3] = J_pose[1][4] = J_pose[2][5] = 0;
-       J_pose[1][3] = -(J_pose[0][4] = cx[2]);
-       J_pose[0][5] = -(J_pose[2][3] = cx[1]);
-       J_pose[2][4] = -(J_pose[1][5] = cx[0]);
-       return cx;
-    }
-
-    template <class A1, class A2, class A3> inline
-    Vector<3> transform_inverse_depth(const SE3& pose, const 
FixedVector<3,A1>& uvq, FixedMatrix<3,3,A2>& J_uvq, FixedMatrix<3,6,A3>& J_pose)
-    {
-       const Matrix<3>& R = pose.get_rotation().get_matrix();  
-       const Vector<3>& T = pose.get_translation();
-       const double q = uvq[2];
-       const Vector<3> DqT = R.template slice<0,0,3,2>() * uvq.template 
slice<0,2>() + R.T()[2] + q * T;
-       const double inv_z = 1.0 / DqT[2];
-       
-       const Vector<3> uvq1 = inverse_depth_point_jacobian(pose, q, DqT, 
inv_z, J_uvq);
-       const double q1 = uvq1[2];
-
-       J_pose[0][1] = J_pose[1][0] = J_pose[2][0] = J_pose[2][1] = 0;
-       J_pose[0][0] = J_pose[1][1] = q1;
-       J_pose[0][2] = -uvq1[0] * q1;
-       J_pose[1][2] = -uvq1[1] * q1;
-       J_pose[2][2] = -q1 * q1;
-       
-       J_pose[0][3] = -uvq1[1]*uvq1[0];
-       J_pose[0][4] = 1 + uvq1[0]*uvq1[0];
-       J_pose[0][5] = -uvq1[1];
-       
-       J_pose[1][3] = -1 - uvq1[1]*uvq1[1];
-       J_pose[1][4] = uvq1[0] * uvq1[1];
-       J_pose[1][5] = uvq1[0];
-
-       J_pose[2][3] = -uvq1[1]*q1;
-       J_pose[2][4] = uvq1[0]*q1;
-       J_pose[2][5] = 0;
-
-       return uvq1;
-    }
-
-    template <class A1, class A2, class A3> inline
-    Vector<2> project_transformed_point(const SE3& pose, const 
FixedVector<3,A1>& in_frame, FixedMatrix<2,3,A2>& J_x, FixedMatrix<2,6,A3>& 
J_pose)
-    {
-       const double z_inv = 1.0/in_frame[2];
-       const double x_z_inv = in_frame[0]*z_inv;
-       const double y_z_inv = in_frame[1]*z_inv;
-       const double cross = x_z_inv * y_z_inv;
-       J_pose[0][0] = J_pose[1][1] = z_inv;
-       J_pose[0][1] = J_pose[1][0] = 0;
-       J_pose[0][2] = -x_z_inv * z_inv;
-       J_pose[1][2] = -y_z_inv * z_inv;
-       J_pose[0][3] = -cross;
-       J_pose[0][4] = 1 + x_z_inv*x_z_inv; 
-       J_pose[0][5] = -y_z_inv;  
-       J_pose[1][3] = -1 - y_z_inv*y_z_inv;
-       J_pose[1][4] =  cross;
-       J_pose[1][5] =  x_z_inv;    
-       
-       const TooN::Matrix<3>& R = pose.get_rotation().get_matrix();
-       J_x[0][0] = z_inv*(R[0][0] - x_z_inv * R[2][0]);
-       J_x[0][1] = z_inv*(R[0][1] - x_z_inv * R[2][1]);
-       J_x[0][2] = z_inv*(R[0][2] - x_z_inv * R[2][2]);
-       J_x[1][0] = z_inv*(R[1][0] - y_z_inv * R[2][0]);
-       J_x[1][1] = z_inv*(R[1][1] - y_z_inv * R[2][1]);
-       J_x[1][2] = z_inv*(R[1][2] - y_z_inv * R[2][2]);
-       
-       return makeVector(x_z_inv, y_z_inv);
-    }
-
-
-    template <class A1> inline
-    Vector<2> transform_and_project(const SE3& pose, const FixedVector<3,A1>& 
x)
-    {
-       return project(transform(pose,x));
-    }
-
-    template <class A1> inline
-    Vector<2> transform_and_project_inverse_depth(const SE3& pose, const 
FixedVector<3,A1>& uvq)
-    {
-       const Matrix<3>& R = pose.get_rotation().get_matrix();  
-       const Vector<3>& T = pose.get_translation();
-       const Vector<3> DqT = R.template slice<0,0,3,2>() * uvq.template 
slice<0,2>() + R.T()[2] + uvq[2] * T;
-       return project(DqT);
-    }
-
-    template <class A1, class A2, class A3> inline
-    Vector<2> transform_and_project(const SE3& pose, const FixedVector<3,A1>& 
x, FixedMatrix<2,3,A2>& J_x, FixedMatrix<2,6,A3>& J_pose)
-    {
-       return project_transformed_point(pose, transform(pose,x), J_x, J_pose);
-    }
-
-    template <class A1, class A2, class A3> inline
-    Vector<2> transform_and_project_inverse_depth(const SE3& pose, const 
FixedVector<3,A1>& uvq, FixedMatrix<2,3,A2>& J_uvq, FixedMatrix<2,6,A3>& J_pose)
-    {
-       const Matrix<3>& R = pose.get_rotation().get_matrix();  
-       const Vector<3>& T = pose.get_translation();
-       const double q = uvq[2];
-       const Vector<3> DqT = R.template slice<0,0,3,2>() * uvq.template 
slice<0,2>() + R.T()[2] + q * T;
-       const Vector<2> uv = project_transformed_point(pose, DqT, J_uvq, 
J_pose);
-       J_uvq.T()[2] = J_pose.template slice<0,0,2,3>() * 
pose.get_translation();
-       J_pose.template slice<0,0,2,3>() *= q;
-       return uv;
-    }
-
-#endif
-
-}
-
-#endif

Index: sim2.h
===================================================================
RCS file: sim2.h
diff -N sim2.h
--- sim2.h      30 Jun 2011 17:52:26 -0000      1.2
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,387 +0,0 @@
-// -*- c++ -*-
-
-// Copyright (C) 2011 Tom Drummond (address@hidden),
-// Ed Rosten (address@hidden), Gerhard Reitmayr (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-/* This code mostly made by copying from sim3.h !! */
-
-#ifndef TOON_INCLUDE_SIM2_H
-#define TOON_INCLUDE_SIM2_H
-
-#include <TooN/se2.h>
-#include <TooN/sim3.h>
-
-namespace TooN {
-
-/// Represent a two-dimensional Similarity transformation (a rotation, a 
uniform scale and a translation). 
-/// This can be represented by a \f$2\times 3\f$ matrix operating on a 
homogeneous co-ordinate, 
-/// so that a vector \f$\underline{x}\f$ is transformed to a new location 
\f$\underline{x}'\f$
-/// by
-/// \f[\begin{aligned}\underline{x}' &= E\times\underline{x}\\ 
\begin{bmatrix}x'\\y'\end{bmatrix} &= \begin{pmatrix}r_{11} & r_{12} & 
t_1\\r_{21} & r_{22} & 
t_2\end{pmatrix}\begin{bmatrix}x\\y\\1\end{bmatrix}\end{aligned}\f]
-/// 
-/// This transformation is a member of the Lie group SIM2. These can be 
parameterised with
-/// four numbers (in the space of the Lie Algebra). In this class, the first 
two parameters are a
-/// translation vector while the third is the amount of rotation in the plane 
as for SO2. The forth is the logarithm of the scale factor.
-/// @ingroup gTransforms
-template <typename Precision = DefaultPrecision>
-class SIM2 {
-public:
-       /// Default constructor. Initialises the the rotation to zero (the 
identity), the scale factor to one and the translation to zero
-       SIM2() : my_scale(1) {}
-       template <class A> SIM2(const SO2<Precision>& R, const 
Vector<2,Precision,A>& T, const Precision s) : my_se2(R,T), my_scale(s) {}
-       template <int S, class P, class A> SIM2(const Vector<S, P, A> & v) { 
*this = exp(v); }
-
-       /// Returns the rotation part of the transformation as a SO2
-       SO2<Precision> & get_rotation(){return my_se2.get_rotation();}
-       /// @overload
-       const SO2<Precision> & get_rotation() const {return 
my_se2.get_rotation();}
-       /// Returns the translation part of the transformation as a Vector
-       Vector<2, Precision> & get_translation() {return 
my_se2.get_translation();}
-       /// @overload
-       const Vector<2, Precision> & get_translation() const {return 
my_se2.get_translation();}
-
-       /// Returns the scale factor of the transformation
-       Precision & get_scale() {return my_scale;}
-       /// @overload
-       const Precision & get_scale() const {return my_scale;}
-
-       /// Exponentiate a Vector in the Lie Algebra to generate a new SIM2.
-       /// See the Detailed Description for details of this vector.
-       /// @param vect The Vector to exponentiate
-       template <int S, typename P, typename A>
-       static inline SIM2 exp(const Vector<S,P, A>& vect);
-       
-       /// Take the logarithm of the matrix, generating the corresponding 
vector in the Lie Algebra.
-       /// See the Detailed Description for details of this vector.
-       static inline Vector<4, Precision> ln(const SIM2& se2);
-       /// @overload
-       Vector<4, Precision> ln() const { return SIM2::ln(*this); }
-
-       /// compute the inverse of the transformation
-       SIM2 inverse() const {
-               const SO2<Precision> & rinv = get_rotation().inverse();
-               const Precision inv_scale = 1/get_scale();
-               return SIM2(rinv, -(rinv*(inv_scale*get_translation())), 
inv_scale);
-       };
-
-       /// Right-multiply by another SIM2 (concatenate the two transformations)
-       /// @param rhs The multipier
-       template <typename P>
-       SIM2<typename Internal::MultiplyType<Precision,P>::type> operator 
*(const SIM2<P>& rhs) const { 
-               return SIM2<typename 
Internal::MultiplyType<Precision,P>::type>(get_rotation()*rhs.get_rotation(), 
get_translation() + get_rotation() * (get_scale()*rhs.get_translation()), 
get_scale() * rhs.get_scale());
-       }
-
-       /// Self right-multiply by another SIM2 (concatenate the two 
transformations)
-       /// @param rhs The multipier
-       inline SIM2& operator *=(const SIM2& rhs) {
-               *this = *this * rhs; 
-               return *this; 
-       }
-
-       /// returns the generators for the Lie group. These are a set of 
matrices that
-       /// form a basis for the vector space of the Lie algebra.
-       /// - 0 is translation in x
-       /// - 1 is translation in y
-       /// - 2 is rotation in the plane
-       /// - 3 is uniform scale
-       static inline Matrix<3,3, Precision> generator(int i) {
-               Matrix<3,3,Precision> result(Zeros);
-               switch(i){
-               case 0:
-               case 1:
-                       result(i,2) = 1;
-                       break;
-               case 2:
-                       result(0,1) = -1;
-                       result(1,0) = 1;
-                       break;
-               case 3:
-                       result(0,0) = 1;
-                       result(1,1) = 1;
-                       break;
-               }
-               return result;
-       }
-
-       /// transfers a vector in the Lie algebra, from one coord frame to 
another
-       /// so that exp(adjoint(vect)) = (*this) * exp(vect) * (this->inverse())
-       template<typename Accessor>
-       Vector<4, Precision> adjoint(const Vector<4,Precision, Accessor> & 
vect) const {
-               Vector<4, Precision> result;
-               result[2] = vect[2];
-               result.template slice<0,2>() = get_rotation() * vect.template 
slice<0,2>();
-               result[0] += vect[2] * get_translation()[1];
-               result[1] -= vect[2] * get_translation()[0];
-               return result;
-       }
-
-       template <typename Accessor>
-       Matrix<4,4,Precision> adjoint(const Matrix<4,4,Precision,Accessor>& M) 
const {
-               Matrix<4,4,Precision> result;
-               for(int i=0; i<4; ++i)
-                       result.T()[i] = adjoint(M.T()[i]);
-               for(int i=0; i<4; ++i)
-                       result[i] = adjoint(result[i]);
-               return result;
-       }
-
-private:
-       SE2<Precision> my_se2;
-       Precision my_scale;
-};
-
-/// Write an SIM2 to a stream 
-/// @relates SIM2
-template <class Precision>
-inline std::ostream& operator<<(std::ostream& os, const SIM2<Precision> & rhs){
-       std::streamsize fw = os.width();
-       for(int i=0; i<2; i++){
-               os.width(fw);
-               os << rhs.get_rotation().get_matrix()[i] * rhs.get_scale();
-               os.width(fw);
-               os << rhs.get_translation()[i] << '\n';
-       }
-       return os;
-}
-
-/// Read an SIM2 from a stream 
-/// @relates SIM2
-template <class Precision>
-inline std::istream& operator>>(std::istream& is, SIM2<Precision>& rhs){
-       for(int i=0; i<2; i++)
-               is >> rhs.get_rotation().my_matrix[i].ref() >> 
rhs.get_translation()[i];
-       rhs.get_scale() = (norm(rhs.get_rotation().my_matrix[0]) + 
norm(rhs.get_rotation().my_matrix[1]))/2;
-       rhs.get_rotation().coerce();
-       return is;
-}
-
-
-//////////////////
-// operator *   //
-// SIM2 * Vector //
-//////////////////
-
-namespace Internal {
-template<int S, typename P, typename PV, typename A>
-struct SIM2VMult;
-}
-
-template<int S, typename P, typename PV, typename A>
-struct Operator<Internal::SIM2VMult<S,P,PV,A> > {
-       const SIM2<P> & lhs;
-       const Vector<S,PV,A> & rhs;
-       
-       Operator(const SIM2<P> & l, const Vector<S,PV,A> & r ) : lhs(l), rhs(r) 
{}
-       
-       template <int S0, typename P0, typename A0>
-       void eval(Vector<S0, P0, A0> & res ) const {
-               SizeMismatch<3,S>::test(3, rhs.size());
-               res.template 
slice<0,2>()=lhs.get_rotation()*(lhs.get_scale()*rhs.template slice<0,2>());
-               res.template slice<0,2>()+=lhs.get_translation() * rhs[2];
-               res[2] = rhs[2];
-       }
-       int size() const { return 3; }
-};
-
-/// Right-multiply with a Vector<3>
-/// @relates SIM2
-template<int S, typename P, typename PV, typename A>
-inline Vector<3, typename Internal::MultiplyType<P,PV>::type> operator*(const 
SIM2<P> & lhs, const Vector<S,PV,A>& rhs){
-       return Vector<3, typename 
Internal::MultiplyType<P,PV>::type>(Operator<Internal::SIM2VMult<S,P,PV,A> 
>(lhs,rhs));
-}
-
-/// Right-multiply with a Vector<2> (special case, extended to be a 
homogeneous vector)
-/// @relates SIM2
-template <typename P, typename PV, typename A>
-inline Vector<2, typename Internal::MultiplyType<P,PV>::type> operator*(const 
SIM2<P>& lhs, const Vector<2,PV,A>& rhs){
-       return lhs.get_translation() + lhs.get_rotation() * (lhs.get_scale() * 
rhs);
-}
-
-//////////////////
-// operator *   //
-// Vector * SIM2 //
-//////////////////
-
-namespace Internal {
-template<int S, typename P, typename PV, typename A>
-struct VSIM2Mult;
-}
-
-template<int S, typename P, typename PV, typename A>
-struct Operator<Internal::VSIM2Mult<S,P,PV,A> > {
-       const Vector<S,PV,A> & lhs;
-       const SIM2<P> & rhs;
-       
-       Operator(const Vector<S,PV,A> & l, const SIM2<P> & r ) : lhs(l), rhs(r) 
{}
-       
-       template <int S0, typename P0, typename A0>
-       void eval(Vector<S0, P0, A0> & res ) const {
-               SizeMismatch<3,S>::test(3, lhs.size());
-               res.template slice<0,2>() = (lhs.template slice<0,2>()* 
rhs.get_scale())*rhs.get_rotation();
-               res[2] = lhs[2];
-               res[2] += lhs.template slice<0,2>() * rhs.get_translation();
-       }
-       int size() const { return 3; }
-};
-
-/// Left-multiply with a Vector<3>
-/// @relates SIM2
-template<int S, typename P, typename PV, typename A>
-inline Vector<3, typename Internal::MultiplyType<PV,P>::type> operator*(const 
Vector<S,PV,A>& lhs, const SIM2<P> & rhs){
-       return Vector<3, typename 
Internal::MultiplyType<PV,P>::type>(Operator<Internal::VSIM2Mult<S, P,PV,A> 
>(lhs,rhs));
-}
-
-//////////////////
-// operator *   //
-// SIM2 * Matrix //
-//////////////////
-
-namespace Internal {
-template <int R, int C, typename PM, typename A, typename P>
-struct SIM2MMult;
-}
-
-template<int R, int Cols, typename PM, typename A, typename P>
-struct Operator<Internal::SIM2MMult<R, Cols, PM, A, P> > {
-       const SIM2<P> & lhs;
-       const Matrix<R,Cols,PM,A> & rhs;
-       
-       Operator(const SIM2<P> & l, const Matrix<R,Cols,PM,A> & r ) : lhs(l), 
rhs(r) {}
-       
-       template <int R0, int C0, typename P0, typename A0>
-       void eval(Matrix<R0, C0, P0, A0> & res ) const {
-               SizeMismatch<3,R>::test(3, rhs.num_rows());
-               for(int i=0; i<rhs.num_cols(); ++i)
-                       res.T()[i] = lhs * rhs.T()[i];
-       }
-       int num_cols() const { return rhs.num_cols(); }
-       int num_rows() const { return 3; }
-};
-
-/// Right-multiply with a Matrix<3>
-/// @relates SIM2
-template <int R, int Cols, typename PM, typename A, typename P> 
-inline Matrix<3,Cols, typename Internal::MultiplyType<P,PM>::type> 
operator*(const SIM2<P> & lhs, const Matrix<R,Cols,PM, A>& rhs){
-       return Matrix<3,Cols,typename 
Internal::MultiplyType<P,PM>::type>(Operator<Internal::SIM2MMult<R, Cols, PM, 
A, P> >(lhs,rhs));
-}
-
-//////////////////
-// operator *   //
-// Matrix * SIM2 //
-//////////////////
-
-namespace Internal {
-template <int Rows, int C, typename PM, typename A, typename P>
-struct MSIM2Mult;
-}
-
-template<int Rows, int C, typename PM, typename A, typename P>
-struct Operator<Internal::MSIM2Mult<Rows, C, PM, A, P> > {
-       const Matrix<Rows,C,PM,A> & lhs;
-       const SIM2<P> & rhs;
-       
-       Operator( const Matrix<Rows,C,PM,A> & l, const SIM2<P> & r ) : lhs(l), 
rhs(r) {}
-       
-       template <int R0, int C0, typename P0, typename A0>
-       void eval(Matrix<R0, C0, P0, A0> & res ) const {
-               SizeMismatch<3, C>::test(3, lhs.num_cols());
-               for(int i=0; i<lhs.num_rows(); ++i)
-                       res[i] = lhs[i] * rhs;
-       }
-       int num_cols() const { return 3; }
-       int num_rows() const { return lhs.num_rows(); }
-};
-
-/// Left-multiply with a Matrix<3>
-/// @relates SIM2
-template <int Rows, int C, typename PM, typename A, typename P> 
-inline Matrix<Rows,3, typename Internal::MultiplyType<PM,P>::type> 
operator*(const Matrix<Rows,C,PM, A>& lhs, const SIM2<P> & rhs ){
-       return Matrix<Rows,3,typename 
Internal::MultiplyType<PM,P>::type>(Operator<Internal::MSIM2Mult<Rows, C, PM, 
A, P> >(lhs,rhs));
-}
-
-template <typename Precision>
-template <int S, typename PV, typename Accessor>
-inline SIM2<Precision> SIM2<Precision>::exp(const Vector<S, PV, Accessor>& mu){
-       SizeMismatch<4,S>::test(4, mu.size());
-
-       static const Precision one_6th = 1.0/6.0;
-       static const Precision one_20th = 1.0/20.0;
-  
-       using std::exp;
-  
-       SIM2<Precision> result;
-  
-       // rotation
-       const Precision theta = mu[2];
-       result.get_rotation() = SO2<Precision>::exp(theta);
-
-       // scale
-       result.get_scale() = exp(mu[3]);
-
-       // translation
-       const Vector<3, Precision> coeff = 
Internal::compute_rodrigues_coefficients_sim3(mu[3], theta);
-       const Vector<2, Precision> cross = makeVector( -theta * mu[1], theta * 
mu[0]);
-       result.get_translation() = coeff[2] * mu.template slice<0,2>() + 
TooN::operator*(coeff[1], cross);
-
-       return result;
-}
-
-template <typename Precision>
-inline Vector<4, Precision> SIM2<Precision>::ln(const SIM2<Precision> & sim2) {
-       using std::log;
-
-       Vector<4, Precision> result;
-
-       // rotation
-       const Precision theta = sim2.get_rotation().ln();
-       result[2] = theta;
-
-       // scale 
-       result[3] = log(sim2.get_scale());
-
-       // translation
-       const Vector<3, Precision> coeff = 
Internal::compute_rodrigues_coefficients_sim3(result[3], theta);
-       Matrix<2,2, Precision> cross = Zeros; cross(0,1) = -theta; cross(1,0) = 
theta;
-       const Matrix<2,2, Precision> W = coeff[2] * Identity + coeff[1] * cross;
-       result.template slice<0,2>() = gaussian_elimination(W, 
sim2.get_translation());
-
-       return result;
-}
-
-#if 0
-/// Multiply a SO2 with and SE2
-/// @relates SE2
-/// @relates SO2
-template <typename Precision>
-inline SE2<Precision> operator*(const SO2<Precision> & lhs, const 
SE2<Precision>& rhs){
-       return SE2<Precision>( lhs*rhs.get_rotation(), 
lhs*rhs.get_translation());
-}
-#endif
-
-}
-#endif

Index: sim3.h
===================================================================
RCS file: sim3.h
diff -N sim3.h
--- sim3.h      30 Jun 2011 17:52:26 -0000      1.2
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,508 +0,0 @@
-// -*- c++ -*-
-
-// Copyright (C) 2011 Tom Drummond (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-#ifndef TOON_INCLUDE_SIM3_H
-#define TOON_INCLUDE_SIM3_H
-
-#include <TooN/se3.h>
-
-namespace TooN {
-
-
-/// Represent a three-dimensional similarity transformation (a rotation, a 
scale factor and a translation). 
-/// This can be represented by a \f$3\times\f$4 matrix operating on a 
homogeneous co-ordinate, 
-/// so that a vector \f$\underline{x}\f$ is transformed to a new location 
\f$\underline{x}'\f$
-/// by
-/// \f[\begin{aligned}\underline{x}' &= E\times\underline{x}\\ 
\begin{bmatrix}x'\\y'\\z'\end{bmatrix} &= \begin{pmatrix}s r_{11} & s r_{12} & 
s r_{13} & t_1\\s r_{21} & s r_{22} & s r_{23} & t_2\\s r_{31} & s r_{32} & s 
r_{33} & t_3\end{pmatrix}\begin{bmatrix}x\\y\\z\\1\end{bmatrix}\end{aligned}\f]
-/// 
-/// This transformation is a member of the Lie group SIM3. These can be 
parameterised with
-/// seven numbers (in the space of the Lie Algebra). In this class, the first 
three parameters are a
-/// translation vector while the second three are a rotation vector, whose 
direction is the axis of rotation
-/// and length the amount of rotation (in radians), as for SO3. The seventh 
parameter is the log of the scale of the transformation.
-/// @ingroup gTransforms
-template <typename Precision = DefaultPrecision>
-class SIM3 {
-public:
-       /// Default constructor. Initialises the the rotation to zero (the 
identity), the scale to one and the translation to zero
-       inline SIM3() : my_scale(1) {}
-
-       template <int S, typename P, typename A> 
-       SIM3(const SO3<Precision> & R, const Vector<S, P, A>& T, const 
Precision & s) : my_se3(R,T), my_scale(s) {}
-       template <int S, typename P, typename A>
-       SIM3(const Vector<S, P, A> & v) { *this = exp(v); }
-
-       /// Returns the rotation part of the transformation as a SO3
-       inline SO3<Precision>& get_rotation(){return my_se3.get_rotation();}
-       /// @overload
-       inline const SO3<Precision>& get_rotation() const {return 
my_se3.get_rotation();}
-
-       /// Returns the translation part of the transformation as a Vector
-       inline Vector<3, Precision>& get_translation() {return 
my_se3.get_translation();}
-       /// @overload
-       inline const Vector<3, Precision>& get_translation() const {return 
my_se3.get_translation();}
-
-       /// Returns the scale factor
-       inline Precision & get_scale() { return my_scale; }
-       /// @overload
-       inline const Precision & get_scale() const { return my_scale; }
-
-       /// Exponentiate a Vector in the Lie Algebra to generate a new SIM3.
-       /// See the Detailed Description for details of this vector.
-       /// @param vect The Vector to exponentiate
-       template <int S, typename P, typename A>
-       static inline SIM3 exp(const Vector<S, P, A>& vect);
-
-       /// Take the logarithm of the matrix, generating the corresponding 
vector in the Lie Algebra.
-       /// See the Detailed Description for details of this vector.
-       static inline Vector<7, Precision> ln(const SIM3& se3);
-       /// @overload
-       inline Vector<7, Precision> ln() const { return SIM3::ln(*this); }
-
-       inline SIM3 inverse() const {
-               const SO3<Precision> rinv = get_rotation().inverse();
-               const Precision inv_scale = 1/my_scale;
-               return SIM3(rinv, -(inv_scale*(rinv*get_translation())), 
inv_scale);
-       }
-
-       /// Right-multiply by another SIM3 (concatenate the two transformations)
-       /// @param rhs The multipier
-       inline SIM3& operator *=(const SIM3& rhs) {
-               get_translation() += get_rotation() * (get_scale() * 
rhs.get_translation());
-               get_rotation() *= rhs.get_rotation();
-               get_scale() *= rhs.get_scale();
-               return *this;
-       }
-
-       /// Right-multiply by another SIM3 (concatenate the two transformations)
-       /// @param rhs The multipier
-       template<typename P>
-       inline SIM3<typename Internal::MultiplyType<Precision, P>::type> 
operator *(const SIM3<P>& rhs) const { 
-           return SIM3<typename Internal::MultiplyType<Precision, 
P>::type>(get_rotation()*rhs.get_rotation(), get_translation() + 
get_rotation()*(get_scale()*rhs.get_translation()), 
get_scale()*rhs.get_scale());
-       }
-
-       inline SIM3& left_multiply_by(const SIM3& left) {
-               get_translation() = left.get_translation() + 
left.get_rotation() * (left.get_scale() * get_translation());
-               get_rotation() = left.get_rotation() * get_rotation();
-               get_scale() = left.get_scale() * get_scale();
-               return *this;
-       }
-
-       static inline Matrix<4,4,Precision> generator(int i){
-               Matrix<4,4,Precision> result(Zeros);
-               if(i < 3){
-                       result(i,3)=1;
-                       return result;
-               }
-               if(i < 6){
-                       result[(i+1)%3][(i+2)%3] = -1;
-                       result[(i+2)%3][(i+1)%3] = 1;
-                       return result;
-               }
-               result(0,0) = 1;
-               result(1,1) = 1;
-               result(2,2) = 1;
-               return result;
-       }
-
-  /// Returns the i-th generator times pos
-       template<typename Base>
-       inline static Vector<4,Precision> generator_field(int i, const 
Vector<4, Precision, Base>& pos)
-       {
-               Vector<4, Precision> result(Zeros);
-               if(i < 3){
-                 result[i]=pos[3];
-                 return result;
-               }
-               if(i < 6){
-                       result[(i+1)%3] = - pos[(i+2)%3];
-                       result[(i+2)%3] = pos[(i+1)%3];
-                       return result;
-               }
-               result.template slice<0,3>() = pos.template slice<0,3>();
-               return result;
-       }
-  
-       /// Transfer a matrix in the Lie Algebra from one
-       /// co-ordinate frame to another. This is the operation such that for a 
matrix 
-       /// \f$ B \f$, 
-       /// \f$ e^{\text{Adj}(v)} = Be^{v}B^{-1} \f$
-       /// @param M The Matrix to transfer
-       template<int S, typename P2, typename Accessor>
-       inline Vector<7, Precision> adjoint(const Vector<S,P2, Accessor>& 
vect)const;
-
-       /// Transfer covectors between frames (using the transpose of the 
inverse of the adjoint)
-       /// so that trinvadjoint(vect1) * adjoint(vect2) = vect1 * vect2
-       template<int S, typename P2, typename Accessor>
-       inline Vector<7, Precision> trinvadjoint(const Vector<S,P2,Accessor>& 
vect)const;
-       
-       ///@overload
-       template <int R, int C, typename P2, typename Accessor>
-       inline Matrix<7,7,Precision> adjoint(const Matrix<R,C,P2,Accessor>& 
M)const;
-
-       ///@overload
-       template <int R, int C, typename P2, typename Accessor>
-       inline Matrix<7,7,Precision> trinvadjoint(const 
Matrix<R,C,P2,Accessor>& M)const;
-
-private:
-       SE3<Precision> my_se3;
-       Precision my_scale;
-};
-
-// transfers a vector in the Lie algebra
-// from one coord frame to another
-// so that exp(adjoint(vect)) = (*this) * exp(vect) * (this->inverse())
-template<typename Precision>
-template<int S, typename P2, typename Accessor>
-inline Vector<7, Precision> SIM3<Precision>::adjoint(const Vector<S,P2, 
Accessor>& vect) const{
-       SizeMismatch<7,S>::test(7, vect.size());
-       Vector<7, Precision> result;
-       result.template slice<3,3>() = get_rotation() * vect.template 
slice<3,3>();
-       result.template slice<0,3>() = get_rotation() * vect.template 
slice<0,3>();
-       result.template slice<0,3>() += get_translation() ^ result.template 
slice<3,3>();
-       return result;
-}
-
-// tansfers covectors between frames
-// (using the transpose of the inverse of the adjoint)
-// so that trinvadjoint(vect1) * adjoint(vect2) = vect1 * vect2
-template<typename Precision>
-template<int S, typename P2, typename Accessor>
-inline Vector<7, Precision> SIM3<Precision>::trinvadjoint(const Vector<S,P2, 
Accessor>& vect) const{
-       SizeMismatch<7,S>::test(7, vect.size());
-       Vector<7, Precision> result;
-       result.template slice<3,3>() = get_rotation() * vect.template 
slice<3,3>();
-       result.template slice<0,3>() = get_rotation() * vect.template 
slice<0,3>();
-       result.template slice<3,3>() += get_translation() ^ result.template 
slice<0,3>();
-       return result;
-}
-
-template<typename Precision>
-template<int R, int C, typename P2, typename Accessor>
-inline Matrix<7,7,Precision> SIM3<Precision>::adjoint(const 
Matrix<R,C,P2,Accessor>& M)const{
-       SizeMismatch<7,R>::test(7, M.num_cols());
-       SizeMismatch<7,C>::test(7, M.num_rows());
-
-       Matrix<7,7,Precision> result;
-       for(int i=0; i<7; i++){
-               result.T()[i] = adjoint(M.T()[i]);
-       }
-       for(int i=0; i<7; i++){
-               result[i] = adjoint(result[i]);
-       }
-       return result;
-}
-
-template<typename Precision>
-template<int R, int C, typename P2, typename Accessor>
-inline Matrix<7,7,Precision> SIM3<Precision>::trinvadjoint(const 
Matrix<R,C,P2,Accessor>& M)const{
-       SizeMismatch<7,R>::test(7, M.num_cols());
-       SizeMismatch<7,C>::test(7, M.num_rows());
-
-       Matrix<7,7,Precision> result;
-       for(int i=0; i<7; i++){
-               result.T()[i] = trinvadjoint(M.T()[i]);
-       }
-       for(int i=0; i<7; i++){
-               result[i] = trinvadjoint(result[i]);
-       }
-       return result;
-}
-
-/// Write an SIM3 to a stream 
-/// @relates SIM3
-template <typename Precision>
-inline std::ostream& operator <<(std::ostream& os, const SIM3<Precision>& rhs){
-       std::streamsize fw = os.width();
-       for(int i=0; i<3; i++){
-               os.width(fw);
-               os << rhs.get_rotation().get_matrix()[i] * rhs.get_scale();
-               os.width(fw);
-               os << rhs.get_translation()[i] << '\n';
-       }
-       return os;
-}
-
-
-/// Reads an SIM3 from a stream 
-/// @relates SIM3
-template <typename Precision>
-inline std::istream& operator>>(std::istream& is, SIM3<Precision>& rhs){
-       for(int i=0; i<3; i++){
-               is >> rhs.get_rotation().my_matrix[i].ref() >> 
rhs.get_translation()[i];
-       }
-       rhs.get_scale() = (norm(rhs.get_rotation().my_matrix[0]) + 
norm(rhs.get_rotation().my_matrix[1]) + 
norm(rhs.get_rotation().my_matrix[2]))/3;
-       rhs.get_rotation().coerce();
-       return is;
-}
-
-//////////////////
-// operator *   //
-// SIM3 * Vector //
-//////////////////
-
-namespace Internal {
-template<int S, typename PV, typename A, typename P>
-struct SIM3VMult;
-}
-
-template<int S, typename PV, typename A, typename P>
-struct Operator<Internal::SIM3VMult<S,PV,A,P> > {
-       const SIM3<P> & lhs;
-       const Vector<S,PV,A> & rhs;
-       
-       Operator(const SIM3<P> & l, const Vector<S,PV,A> & r ) : lhs(l), rhs(r) 
{}
-       
-       template <int S0, typename P0, typename A0>
-       void eval(Vector<S0, P0, A0> & res ) const {
-               SizeMismatch<4,S>::test(4, rhs.size());
-               res.template slice<0,3>()=lhs.get_rotation() * (lhs.get_scale() 
* rhs.template slice<0,3>());
-               res.template 
slice<0,3>()+=TooN::operator*(lhs.get_translation(),rhs[3]);
-               res[3] = rhs[3];
-       }
-       int size() const { return 4; }
-};
-
-/// Right-multiply by a Vector
-/// @relates SIM3
-template<int S, typename PV, typename A, typename P> inline
-Vector<4, typename Internal::MultiplyType<P,PV>::type> operator*(const SIM3<P> 
& lhs, const Vector<S,PV,A>& rhs){
-       return Vector<4, typename 
Internal::MultiplyType<P,PV>::type>(Operator<Internal::SIM3VMult<S,PV,A,P> 
>(lhs,rhs));
-}
-
-/// Right-multiply by a Vector
-/// @relates SIM3
-template <typename PV, typename A, typename P> inline
-Vector<3, typename Internal::MultiplyType<P,PV>::type> operator*(const 
SIM3<P>& lhs, const Vector<3,PV,A>& rhs){
-       return lhs.get_translation() + lhs.get_rotation() * (lhs.get_scale() * 
rhs);
-}
-
-//////////////////
-// operator *   //
-// Vector * SIM3 //
-//////////////////
-
-namespace Internal {
-template<int S, typename PV, typename A, typename P>
-struct VSIM3Mult;
-}
-
-template<int S, typename PV, typename A, typename P>
-struct Operator<Internal::VSIM3Mult<S,PV,A,P> > {
-       const Vector<S,PV,A> & lhs;
-       const SIM3<P> & rhs;
-       
-       Operator( const Vector<S,PV,A> & l, const SIM3<P> & r ) : lhs(l), 
rhs(r) {}
-       
-       template <int S0, typename P0, typename A0>
-       void eval(Vector<S0, P0, A0> & res ) const {
-               SizeMismatch<4,S>::test(4, lhs.size());
-               res.template slice<0,3>()= rhs.get_scale() * lhs.template 
slice<0,3>() * rhs.get_rotation();
-               res[3] = lhs[3];
-               res[3] += lhs.template slice<0,3>() * rhs.get_translation();
-       }
-       int size() const { return 4; }
-};
-
-/// Left-multiply by a Vector
-/// @relates SIM3
-template<int S, typename PV, typename A, typename P> inline
-Vector<4, typename Internal::MultiplyType<P,PV>::type> operator*( const 
Vector<S,PV,A>& lhs, const SIM3<P> & rhs){
-       return Vector<4, typename 
Internal::MultiplyType<P,PV>::type>(Operator<Internal::VSIM3Mult<S,PV,A,P> 
>(lhs,rhs));
-}
-
-//////////////////
-// operator *   //
-// SIM3 * Matrix //
-//////////////////
-
-namespace Internal {
-template <int R, int C, typename PM, typename A, typename P>
-struct SIM3MMult;
-}
-
-template<int R, int Cols, typename PM, typename A, typename P>
-struct Operator<Internal::SIM3MMult<R, Cols, PM, A, P> > {
-       const SIM3<P> & lhs;
-       const Matrix<R,Cols,PM,A> & rhs;
-       
-       Operator(const SIM3<P> & l, const Matrix<R,Cols,PM,A> & r ) : lhs(l), 
rhs(r) {}
-       
-       template <int R0, int C0, typename P0, typename A0>
-       void eval(Matrix<R0, C0, P0, A0> & res ) const {
-               SizeMismatch<4,R>::test(4, rhs.num_rows());
-               for(int i=0; i<rhs.num_cols(); ++i)
-                       res.T()[i] = lhs * rhs.T()[i];
-       }
-       int num_cols() const { return rhs.num_cols(); }
-       int num_rows() const { return 4; }
-};
-
-/// Right-multiply by a Matrix
-/// @relates SIM3
-template <int R, int Cols, typename PM, typename A, typename P> inline 
-Matrix<4,Cols, typename Internal::MultiplyType<P,PM>::type> operator*(const 
SIM3<P> & lhs, const Matrix<R,Cols,PM, A>& rhs){
-       return Matrix<4,Cols,typename 
Internal::MultiplyType<P,PM>::type>(Operator<Internal::SIM3MMult<R, Cols, PM, 
A, P> >(lhs,rhs));
-}
-
-//////////////////
-// operator *   //
-// Matrix * SIM3 //
-//////////////////
-
-namespace Internal {
-template <int Rows, int C, typename PM, typename A, typename P>
-struct MSIM3Mult;
-}
-
-template<int Rows, int C, typename PM, typename A, typename P>
-struct Operator<Internal::MSIM3Mult<Rows, C, PM, A, P> > {
-       const Matrix<Rows,C,PM,A> & lhs;
-       const SIM3<P> & rhs;
-       
-       Operator( const Matrix<Rows,C,PM,A> & l, const SIM3<P> & r ) : lhs(l), 
rhs(r) {}
-       
-       template <int R0, int C0, typename P0, typename A0>
-       void eval(Matrix<R0, C0, P0, A0> & res ) const {
-               SizeMismatch<4, C>::test(4, lhs.num_cols());
-               for(int i=0; i<lhs.num_rows(); ++i)
-                       res[i] = lhs[i] * rhs;
-       }
-       int num_cols() const { return 4; }
-       int num_rows() const { return lhs.num_rows(); }
-};
-
-/// Left-multiply by a Matrix
-/// @relates SIM3
-template <int Rows, int C, typename PM, typename A, typename P> inline 
-Matrix<Rows,4, typename Internal::MultiplyType<PM,P>::type> operator*(const 
Matrix<Rows,C,PM, A>& lhs, const SIM3<P> & rhs ){
-       return Matrix<Rows,4,typename 
Internal::MultiplyType<PM,P>::type>(Operator<Internal::MSIM3Mult<Rows, C, PM, 
A, P> >(lhs,rhs));
-}
-
-namespace Internal {
-
-/// internal function that calculates the coefficients for the Rodrigues 
formula for SIM3 translation
-template <typename Precision>
-inline Vector<3, Precision> compute_rodrigues_coefficients_sim3( const 
Precision & s, const Precision & t ){
-       using std::exp;
-
-       Vector<3, Precision> coeff;
-       const Precision es = exp(s);
-
-       // 4 cases for s -> 0 and/or theta -> 0
-       // the Taylor expansions were calculated with Maple 12 and truncated at 
the 3rd power,
-       // such that eps^3 < 1e-18 which results in approximately 1 + eps^3 = 1
-       static const Precision eps = 1e-6;
-
-       if(fabs(s) < eps && fabs(t) < eps){
-               coeff[0] = 1 + s/2 + s*s/6;
-               coeff[1] = 1/2 + s/3 - t*t/24 + s*s/8;
-               coeff[2] = 1/6 + s/8 - t*t/120 + s*s/20;
-       } else if(fabs(s) < eps) {
-               coeff[0] = 1 + s/2 + s*s/6;
-               coeff[1] = (1-cos(t))/(t*t) + 
(sin(t)-cos(t)*t)*s/(t*t*t)+(2*sin(t)*t-t*t*cos(t)-2+2*cos(t))*s*s/(2*t*t*t*t);
-               coeff[2] = (t-sin(t))/(t*t*t) - 
(-t*t-2+2*cos(t)+2*sin(t)*t)*s/(2*t*t*t*t) - 
(-t*t*t+6*cos(t)*t+3*sin(t)*t*t-6*sin(t))*s*s/(6*t*t*t*t*t);
-       } else if(fabs(t) < eps) {
-               coeff[0] = (es - 1)/s;
-               coeff[1] = (s*es+1-es)/(s*s) - 
(6*s*es+6-6*es+es*s*s*s-3*es*s*s)*t*t/(6*s*s*s*s);
-               coeff[2] = (es*s*s-2*s*es+2*es-2)/(2*s*s*s) - 
(es*s*s*s*s-4*es*s*s*s+12*es*s*s-24*s*es+24*es-24)*t*t/(24*s*s*s*s*s);
-       } else {
-               const Precision a = es * sin(t);
-               const Precision b = es * cos(t);
-               const Precision inv_s_theta = 1/(s*s + t*t);
-
-               coeff[0] = (es - 1)/s;
-               coeff[1] = (a*s + (1-b)*t) * inv_s_theta / t;
-               coeff[2] = (coeff[0] - ((b-1)*s + a*t) * inv_s_theta) / (t*t);
-       }
-
-       return coeff;
-}
-
-}
-
-template <typename Precision>
-template <int S, typename P, typename VA>
-inline SIM3<Precision> SIM3<Precision>::exp(const Vector<S, P, VA>& mu){
-       SizeMismatch<7,S>::test(7, mu.size());
-       using std::exp;
-       
-       SIM3<Precision> result;
-
-       // scale
-       result.get_scale() = exp(mu[6]);
-       
-       // rotation
-       const Vector<3,Precision> w = mu.template slice<3,3>();
-       const Precision t = norm(w);
-       result.get_rotation() = SO3<>::exp(w);
-
-       // translation
-       const Vector<3, Precision> coeff = 
Internal::compute_rodrigues_coefficients_sim3(mu[6],t); 
-       const Vector<3,Precision> cross = w ^ mu.template slice<0,3>();
-       result.get_translation() = coeff[0] * mu.template slice<0,3>() + 
TooN::operator*(coeff[1], cross) + TooN::operator*(coeff[2], (w ^ cross));
-
-       return result;
-}
-
-template <typename Precision>
-inline Vector<7, Precision> SIM3<Precision>::ln(const SIM3<Precision>& sim3) {
-       using std::sqrt;
-       using std::log;
-
-       Vector<7, Precision> result;
-       
-       // rotation
-       result.template slice<3,3>() = sim3.get_rotation().ln();
-       const Precision theta = norm(result.template slice<3,3>());
-
-       // scale 
-       const Precision es = sim3.get_scale();
-       const Precision s = log(sim3.get_scale());
-       result[6] = s;
-
-       // Translation
-       const Vector<3, Precision> coeff = 
Internal::compute_rodrigues_coefficients_sim3(s, theta);
-       const Matrix<3,3, Precision> cross = 
cross_product_matrix(result.template slice<3,3>());
-       const Matrix<3,3, Precision> W = Identity * coeff[0] + cross * coeff[1] 
+ cross * cross * coeff[2];
-       
-       result.template slice<0,3>() = gaussian_elimination(W, 
sim3.get_translation());
-
-       return result;
-}
-
-#if 0
-template <typename Precision>
-inline SE3<Precision> operator*(const SO3<Precision>& lhs, const 
SE3<Precision>& rhs){
-       return SE3<Precision>(lhs*rhs.get_rotation(),lhs*rhs.get_translation());
-}
-#endif
-
-}
-
-#endif

Index: sl.h
===================================================================
RCS file: sl.h
diff -N sl.h
--- sl.h        25 Jan 2012 15:51:08 -0000      1.11
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,227 +0,0 @@
-// -*- c++ -*-
-
-// Copyright (C) 2005,2009 Tom Drummond (address@hidden),
-// Gerhard Reitmayr (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-#ifndef TOON_INCLUDE_SL_H
-#define TOON_INCLUDE_SL_H
-
-#include <TooN/TooN.h>
-#include <TooN/helpers.h>
-#include <TooN/gaussian_elimination.h>
-#include <TooN/determinant.h>
-#include <cassert>
-
-namespace TooN {
-
-template <int N, typename P> class SL;
-template <int N, typename P> std::istream & operator>>(std::istream &, SL<N, 
P> &);
-
-/// represents an element from the group SL(n), the NxN matrices M with det(M) 
= 1.
-/// This can be used to conveniently estimate homographies on n-1 dimentional 
spaces.
-/// The implementation uses the matrix exponential function @ref exp for
-/// exponentiation from an element in the Lie algebra and LU to compute an 
inverse.
-/// 
-/// The Lie algebra are the NxN matrices M with trace(M) = 0. The N*N-1 
generators used
-/// to represent this vector space are the following:
-/// - diag(...,1,-1,...), n-1 along the diagonal
-/// - symmetric generators for every pair of off-diagonal elements
-/// - anti-symmetric generators for every pair of off-diagonal elements
-/// This choice represents the fact that SL(n) can be interpreted as the 
product
-/// of all symmetric matrices with det() = 1 times SO(n).
-/// @ingroup gTransforms
-template <int N, typename Precision = DefaultPrecision>
-class SL {
-       friend std::istream & operator>> <N,Precision>(std::istream &, SL &);
-public:
-       static const int size = N;          ///< size of the matrices 
represented by SL<N>
-       static const int dim = N*N - 1;     ///< dimension of the vector space 
represented by SL<N>
-
-       /// default constructor, creates identity element
-       SL() : my_matrix(Identity) {}
-
-       /// exp constructor, creates element through exponentiation of Lie 
algebra vector. see @ref SL::exp.
-       template <int S, typename P, typename B>
-       SL( const Vector<S,P,B> & v ) { *this = exp(v); }
-
-       /// copy constructor from a matrix, coerces matrix to be of determinant 
= 1
-       template <int R, int C, typename P, typename A>
-       SL(const Matrix<R,C,P,A>& M) : my_matrix(M) { coerce(); }
-
-       /// returns the represented matrix
-       const Matrix<N,N,Precision> & get_matrix() const { return my_matrix; }
-       /// returns the inverse using LU
-       SL inverse() const { return SL(*this, Invert()); }
-
-       /// multiplies to SLs together by multiplying the underlying matrices
-       template <typename P>
-       SL<N,typename Internal::MultiplyType<Precision, P>::type> operator*( 
const SL<N,P> & rhs) const { return SL<N,typename 
Internal::MultiplyType<Precision, P>::type>(*this, rhs); }
-
-       /// right multiplies this SL with another one
-       template <typename P>
-       SL operator*=( const SL<N,P> & rhs) { *this = *this*rhs; return *this; }
-
-       /// exponentiates a vector in the Lie algebra to compute the 
corresponding element
-       /// @arg v a vector of dimension SL::dim
-       template <int S, typename P, typename B>
-       static inline SL exp( const Vector<S,P,B> &);
-
-       inline Vector<N*N-1, Precision> ln() const ;
-
-       /// returns one generator of the group. see SL for a detailed 
description of 
-       /// the generators used.
-       /// @arg i number of the generator between 0 and SL::dim -1 inclusive
-       static inline Matrix<N,N,Precision> generator(int);
-
-private:
-       struct Invert {};
-       SL( const SL & from, struct Invert ) {
-               const Matrix<N> id = Identity;
-               my_matrix = gaussian_elimination(from.my_matrix, id);
-       }
-       SL( const SL & a, const SL & b) : my_matrix(a.get_matrix() * 
b.get_matrix()) {}
-
-       void coerce(){
-               using std::abs;
-               Precision det = determinant(my_matrix);
-               assert(abs(det) > 0);
-        using std::pow;
-               my_matrix /= pow(det, 1.0/N);
-       }
-
-       /// these constants indicate which parts of the parameter vector 
-       /// map to which generators
-       ///{
-       static const int COUNT_DIAG = N - 1;
-       static const int COUNT_SYMM = (dim - COUNT_DIAG)/2;
-       static const int COUNT_ASYMM = COUNT_SYMM;
-       static const int DIAG_LIMIT = COUNT_DIAG;
-       static const int SYMM_LIMIT = COUNT_SYMM + DIAG_LIMIT;
-       ///}
-
-       Matrix<N,N,Precision> my_matrix;
-};
-
-template <int N, typename Precision>
-template <int S, typename P, typename B>
-inline SL<N, Precision> SL<N, Precision>::exp( const Vector<S,P,B> & v){
-       SizeMismatch<S,dim>::test(v.size(), dim);
-       Matrix<N,N,Precision> t(Zeros);
-       for(int i = 0; i < dim; ++i)
-               t += generator(i) * v[i];
-       SL<N, Precision> result;
-       result.my_matrix = TooN::exp(t);
-       return result;
-}
-
-template <int N, typename Precision>
-inline Vector<N*N-1, Precision> SL<N, Precision>::ln() const {
-       const Matrix<N> l = TooN::log(my_matrix);
-       Vector<SL<N,Precision>::dim, Precision> v;
-       Precision last = 0;
-       for(int i = 0; i < DIAG_LIMIT; ++i){    // diagonal elements
-               v[i] = l(i,i) + last;
-               last = l(i,i);
-       }
-       for(int i = DIAG_LIMIT, row = 0, col = 1; i < SYMM_LIMIT; ++i) {        
// calculate symmetric and antisymmetric in one go
-               // do the right thing here to calculate the correct indices !
-               v[i] = (l(row, col) + l(col, row))*0.5;
-               v[i+COUNT_SYMM] = (-l(row, col) + l(col, row))*0.5;
-               ++col;
-               if( col == N ){
-                       ++row;
-                       col = row+1;
-               }
-       }
-       return v;
-}
-
-template <int N, typename Precision>
-inline Matrix<N,N,Precision> SL<N, Precision>::generator(int i){
-       assert( i > -1 && i < dim );
-       Matrix<N,N,Precision> result(Zeros);
-       if(i < DIAG_LIMIT) {                            // first ones are the 
diagonal ones
-               result(i,i) = 1;
-               result(i+1,i+1) = -1;
-       } else if(i < SYMM_LIMIT){                      // then the symmetric 
ones
-               int row = 0, col = i - DIAG_LIMIT + 1;
-               while(col > (N - row - 1)){
-                       col -= (N - row - 1); 
-                       ++row;
-               }
-               col += row;
-               result(row, col) = result(col, row) = 1;
-       } else {                                                        // 
finally the antisymmetric ones
-               int row = 0, col = i - SYMM_LIMIT + 1;
-               while(col > N - row - 1){
-                       col -= N - row - 1; 
-                       ++row;
-               }
-               col += row;
-               result(row, col) = -1;
-               result(col, row) = 1;
-       }
-       return result;
-}
-
-template <int S, typename PV, typename B, int N, typename P>
-Vector<N, typename Internal::MultiplyType<P, PV>::type> operator*( const SL<N, 
P> & lhs, const Vector<S,PV,B> & rhs ){
-       return lhs.get_matrix() * rhs;
-}
-
-template <int S, typename PV, typename B, int N, typename P>
-Vector<N, typename Internal::MultiplyType<PV, P>::type> operator*( const 
Vector<S,PV,B> & lhs, const SL<N,P> & rhs ){
-       return lhs * rhs.get_matrix();
-}
-
-template<int R, int C, typename PM, typename A, int N, typename P> inline
-Matrix<N, C, typename Internal::MultiplyType<P, PM>::type> operator*(const 
SL<N,P>& lhs, const Matrix<R, C, PM, A>& rhs){
-       return lhs.get_matrix() * rhs;
-}
-
-template<int R, int C, typename PM, typename A, int N, typename P> inline
-Matrix<R, N, typename Internal::MultiplyType<PM, P>::type> operator*(const 
Matrix<R, C, PM, A>& lhs, const SL<N,P>& rhs){
-       return lhs * rhs.get_matrix();
-}
-
-template <int N, typename P>
-std::ostream & operator<<(std::ostream & out, const SL<N, P> & h){
-       out << h.get_matrix();
-       return out;
-}
-
-template <int N, typename P>
-std::istream & operator>>(std::istream & in, SL<N, P> & h){
-       in >> h.my_matrix;
-       h.coerce();
-       return in;
-}
-
-};
-
-#endif

Index: so2.h
===================================================================
RCS file: so2.h
diff -N so2.h
--- so2.h       14 Nov 2011 11:55:44 -0000      1.15
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,180 +0,0 @@
-// -*- c++ -*-
-
-// Copyright (C) 2005,2009 Tom Drummond (address@hidden),
-// Ed Rosten (address@hidden), Gerhard Reitmayr (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-#ifndef TOON_INCLUDE_SO2_H
-#define TOON_INCLUDE_SO2_H
-
-#include <TooN/TooN.h>
-#include <TooN/helpers.h>
-
-namespace TooN {
-
-template <typename Precision> class SO2;
-template <typename Precision> class SE2;
-template <typename Precision> class SIM2;
-
-template<typename Precision> inline std::istream & operator>>(std::istream &, 
SO2<Precision> & );
-template<typename Precision> inline std::istream & operator>>(std::istream &, 
SE2<Precision> & );
-template<typename Precision> inline std::istream & operator>>(std::istream &, 
SIM2<Precision> & );
-
-/// Class to represent a two-dimensional rotation matrix. Two-dimensional 
rotation
-/// matrices are members of the Special Orthogonal Lie group SO2. This group 
can be parameterised with
-/// one number (the rotation angle).
-/// @ingroup gTransforms
-template<typename Precision = DefaultPrecision>
-class SO2 {
-       friend std::istream& operator>> <Precision>(std::istream&, SO2& );
-       friend std::istream& operator>> <Precision>(std::istream&, 
SE2<Precision>& );
-       friend std::istream& operator>> <Precision>(std::istream&, 
SIM2<Precision>& );
-
-public:
-       /// Default constructor. Initialises the matrix to the identity (no 
rotation)
-       SO2() : my_matrix(Identity) {} 
-       
-       /// Construct from a rotation matrix.
-       SO2(const Matrix<2,2,Precision>& rhs) {  
-               *this = rhs; 
-               coerce();
-       }
-
-       /// Construct from an angle.
-       SO2(const Precision l) { *this = exp(l); }
-  
-       /// Assigment operator from a general matrix. This also calls coerce()
-       /// to make sure that the matrix is a valid rotation matrix.
-       template <int R, int C, typename P, typename A> 
-       SO2& operator=(const Matrix<R,C,P,A>& rhs){
-               my_matrix = rhs;
-               coerce();
-               return *this;
-       }
-
-       /// Modifies the matrix to make sure it is a valid rotation matrix.
-       void coerce(){
-               my_matrix[0] = unit(my_matrix[0]);
-               my_matrix[1] -= my_matrix[0] * (my_matrix[0]*my_matrix[1]);
-               my_matrix[1] = unit(my_matrix[1]);
-       }
-
-       /// Exponentiate an angle in the Lie algebra to generate a new SO2.
-       inline static SO2 exp(const Precision & d){
-               SO2<Precision> result;
-               result.my_matrix[0][0] = result.my_matrix[1][1] = cos(d);
-               result.my_matrix[1][0] = sin(d);
-               result.my_matrix[0][1] = -result.my_matrix[1][0];
-               return result;
-       }
-
-       /// extracts the rotation angle from the SO2
-       Precision ln() const { return atan2(my_matrix[1][0], my_matrix[0][0]); }
-
-       /// Returns the inverse of this matrix (=the transpose, so this is a 
fast operation)
-       SO2 inverse() const { return SO2(*this, Invert()); }
-
-       /// Self right-multiply by another rotation matrix
-       template <typename P>
-       SO2& operator *=(const SO2<P>& rhs){
-               my_matrix=my_matrix*rhs.get_matrix();
-               return *this;
-       }
-
-       /// Right-multiply by another rotation matrix
-       template <typename P>
-       SO2<typename Internal::MultiplyType<Precision, P>::type> operator 
*(const SO2<P>& rhs) const { 
-               return SO2<typename Internal::MultiplyType<Precision, 
P>::type>(*this,rhs); 
-       }
-
-       /// Returns the SO2 as a Matrix<2>
-       const Matrix<2,2,Precision>& get_matrix() const {return my_matrix;}
-
-       /// returns generator matrix
-       static Matrix<2,2,Precision> generator() {
-               Matrix<2,2,Precision> result;
-               result[0] = makeVector(0,-1);
-               result[1] = makeVector(1,0);
-               return result;
-       }
-
-private:
-       struct Invert {};
-       inline SO2(const SO2& so2, const Invert&) : 
my_matrix(so2.my_matrix.T()) {}
-       template <typename PA, typename PB>
-       inline SO2(const SO2<PA>& a, const SO2<PB>& b) : 
my_matrix(a.get_matrix()*b.get_matrix()) {}
-
-       Matrix<2,2,Precision> my_matrix;
-};
-
-/// Write an SO2 to a stream 
-/// @relates SO2
-template <typename Precision>
-inline std::ostream& operator<< (std::ostream& os, const SO2<Precision> & rhs){
-       return os << rhs.get_matrix();
-}
-
-/// Read from SO2 to a stream 
-/// @relates SO2
-template <typename Precision>
-inline std::istream& operator>>(std::istream& is, SO2<Precision>& rhs){
-       is >> rhs.my_matrix;
-       rhs.coerce();
-       return is;
-}
-
-/// Right-multiply by a Vector
-/// @relates SO2
-template<int D, typename P1, typename PV, typename Accessor>
-inline Vector<2, typename Internal::MultiplyType<P1, PV>::type> 
operator*(const SO2<P1> & lhs, const Vector<D, PV, Accessor> & rhs){
-       return lhs.get_matrix() * rhs;
-}
-
-/// Left-multiply by a Vector
-/// @relates SO2
-template<int D, typename P1, typename PV, typename Accessor>
-inline Vector<2, typename Internal::MultiplyType<PV,P1>::type> operator*(const 
Vector<D, PV, Accessor>& lhs, const SO2<P1> & rhs){
-       return lhs * rhs.get_matrix();
-}
-
-/// Right-multiply by a Matrix
-/// @relates SO2
-template <int R, int C, typename P1, typename P2, typename Accessor> 
-inline Matrix<2,C,typename Internal::MultiplyType<P1,P2>::type> 
operator*(const SO2<P1> & lhs, const Matrix<R,C,P2,Accessor>& rhs){
-       return lhs.get_matrix() * rhs;
-}
-
-/// Left-multiply by a Matrix
-/// @relates SO2
-template <int R, int C, typename P1, typename P2, typename Accessor>
-inline Matrix<R,2,typename Internal::MultiplyType<P1,P2>::type> 
operator*(const Matrix<R,C,P1,Accessor>& lhs, const SO2<P2>& rhs){
-       return lhs * rhs.get_matrix();
-}
-
-}
-
-#endif

Index: so3.h
===================================================================
RCS file: so3.h
diff -N so3.h
--- so3.h       25 Jan 2012 15:51:08 -0000      1.52
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,430 +0,0 @@
-// -*- c++ -*-
-
-// Copyright (C) 2005,2009 Tom Drummond (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-#ifndef TOON_INCLUDE_SO3_H
-#define TOON_INCLUDE_SO3_H
-
-#include <TooN/TooN.h>
-#include <TooN/helpers.h>
-#include <cassert>
-
-namespace TooN {
-
-template <typename Precision> class SO3;
-template <typename Precision> class SE3;
-template <typename Precision> class SIM3;
-
-template<class Precision> inline std::istream & operator>>(std::istream &, 
SO3<Precision> & );
-template<class Precision> inline std::istream & operator>>(std::istream &, 
SE3<Precision> & );
-template<class Precision> inline std::istream & operator>>(std::istream &, 
SIM3<Precision> & );
-
-/// Class to represent a three-dimensional rotation matrix. Three-dimensional 
rotation
-/// matrices are members of the Special Orthogonal Lie group SO3. This group 
can be parameterised
-/// three numbers (a vector in the space of the Lie Algebra). In this class, 
the three parameters are the
-/// finite rotation vector, i.e. a three-dimensional vector whose direction is 
the axis of rotation
-/// and whose length is the angle of rotation in radians. Exponentiating this 
vector gives the matrix,
-/// and the logarithm of the matrix gives this vector.
-/// @ingroup gTransforms
-template <typename Precision = DefaultPrecision>
-class SO3 {
-public:
-       friend std::istream& operator>> <Precision> (std::istream& is, 
SO3<Precision> & rhs);
-       friend std::istream& operator>> <Precision> (std::istream& is, 
SE3<Precision> & rhs);
-       friend std::istream& operator>> <Precision> (std::istream& is, 
SIM3<Precision> & rhs);
-       friend class SE3<Precision>;
-       friend class SIM3<Precision>;
-
-       /// Default constructor. Initialises the matrix to the identity (no 
rotation)
-       SO3() : my_matrix(Identity) {}
-       
-       /// Construct from the axis of rotation (and angle given by the 
magnitude).
-       template <int S, typename P, typename A>
-       SO3(const Vector<S, P, A> & v) { *this = exp(v); }
-       
-       /// Construct from a rotation matrix.
-       template <int R, int C, typename P, typename A>
-       SO3(const Matrix<R,C,P,A>& rhs) { *this = rhs; }
-       
-       /// creates an SO3 as a rotation that takes Vector a into the direction 
of Vector b
-       /// with the rotation axis along a ^ b. If |a ^ b| == 0, it creates the 
identity rotation.
-       /// An assertion will fail if Vector a and Vector b are in exactly 
opposite directions. 
-       /// @param a source Vector
-       /// @param b target Vector
-       template <int S1, int S2, typename P1, typename P2, typename A1, 
typename A2>
-       SO3(const Vector<S1, P1, A1> & a, const Vector<S2, P2, A2> & b ){
-               SizeMismatch<3,S1>::test(3, a.size());
-               SizeMismatch<3,S2>::test(3, b.size());
-               Vector<3, Precision> n = a ^ b;
-               if(norm_sq(n) == 0) {
-                       //check that the vectors are in the same direction if 
cross product is 0. If not,
-                       //this means that the rotation is 180 degrees, which 
leads to an ambiguity in the rotation axis.
-                       assert(a*b>=0);
-                       my_matrix = Identity;
-                       return;
-               }
-               n = unit(n);
-               Matrix<3> R1;
-               R1.T()[0] = unit(a);
-               R1.T()[1] = n;
-               R1.T()[2] = n ^ R1.T()[0];
-               my_matrix.T()[0] = unit(b);
-               my_matrix.T()[1] = n;
-               my_matrix.T()[2] = n ^ my_matrix.T()[0];
-               my_matrix = my_matrix * R1.T();
-       }
-       
-       /// Assignment operator from a general matrix. This also calls coerce()
-       /// to make sure that the matrix is a valid rotation matrix.
-       template <int R, int C, typename P, typename A>
-       SO3& operator=(const Matrix<R,C,P,A> & rhs) {
-               my_matrix = rhs;
-               coerce();
-               return *this;
-       }
-       
-       /// Modifies the matrix to make sure it is a valid rotation matrix.
-       void coerce() {
-               my_matrix[0] = unit(my_matrix[0]);
-               my_matrix[1] -= my_matrix[0] * (my_matrix[0]*my_matrix[1]);
-               my_matrix[1] = unit(my_matrix[1]);
-               my_matrix[2] -= my_matrix[0] * (my_matrix[0]*my_matrix[2]);
-               my_matrix[2] -= my_matrix[1] * (my_matrix[1]*my_matrix[2]);
-               my_matrix[2] = unit(my_matrix[2]);
-               // check for positive determinant <=> right handed coordinate 
system of row vectors
-               assert( (my_matrix[0] ^ my_matrix[1]) * my_matrix[2] > 0 ); 
-       }
-       
-       /// Exponentiate a vector in the Lie algebra to generate a new SO3.
-       /// See the Detailed Description for details of this vector.
-       template<int S, typename VP, typename A> inline static SO3 exp(const 
Vector<S,VP,A>& vect);
-       
-       /// Take the logarithm of the matrix, generating the corresponding 
vector in the Lie Algebra.
-       /// See the Detailed Description for details of this vector.
-       inline Vector<3, Precision> ln() const;
-       
-       /// Returns the inverse of this matrix (=the transpose, so this is a 
fast operation)
-       SO3 inverse() const { return SO3(*this, Invert()); }
-
-       /// Right-multiply by another rotation matrix
-       template <typename P>
-       SO3& operator *=(const SO3<P>& rhs) {
-               *this = *this * rhs;
-               return *this;
-       }
-
-       /// Right-multiply by another rotation matrix
-       template<typename P>
-       SO3<typename Internal::MultiplyType<Precision, P>::type> operator 
*(const SO3<P>& rhs) const { 
-           return SO3<typename Internal::MultiplyType<Precision, 
P>::type>(*this,rhs); 
-       }
-
-       /// Returns the SO3 as a Matrix<3>
-       const Matrix<3,3, Precision> & get_matrix() const {return my_matrix;}
-
-       /// Returns the i-th generator.  The generators of a Lie group are the 
basis
-       /// for the space of the Lie algebra.  For %SO3, the generators are 
three
-       /// \f$3\times3\f$ matrices representing the three possible (linearised)
-       /// rotations.
-       inline static Matrix<3,3, Precision> generator(int i){
-               Matrix<3,3,Precision> result(Zeros);
-               result[(i+1)%3][(i+2)%3] = -1;
-               result[(i+2)%3][(i+1)%3] = 1;
-               return result;
-       }
-
-  /// Returns the i-th generator times pos
-  template<typename Base>
-  inline static Vector<3,Precision> generator_field(int i, const Vector<3, 
Precision, Base>& pos)
-  {
-    Vector<3, Precision> result;
-    result[i]=0;
-    result[(i+1)%3] = - pos[(i+2)%3];
-    result[(i+2)%3] = pos[(i+1)%3];
-    return result;
-  }
-
-       /// Transfer a vector in the Lie Algebra from one
-       /// co-ordinate frame to another such that for a matrix 
-       /// \f$ M \f$, the adjoint \f$Adj()\f$ obeys
-       /// \f$ e^{\text{Adj}(v)} = Me^{v}M^{-1} \f$
-       template <int S, typename A>
-       inline Vector<3, Precision> adjoint(const Vector<S, Precision, A>& 
vect) const 
-       { 
-               SizeMismatch<3, S>::test(3, vect.size());
-               return *this * vect; 
-       }
-
-       template <typename PA, typename PB>
-       inline SO3(const SO3<PA>& a, const SO3<PB>& b) : 
my_matrix(a.get_matrix()*b.get_matrix()) {}
-       
-private:
-       struct Invert {};
-       inline SO3(const SO3& so3, const Invert&) : 
my_matrix(so3.my_matrix.T()) {}
-       
-       Matrix<3,3, Precision> my_matrix;
-};
-
-/// Write an SO3 to a stream 
-/// @relates SO3
-template <typename Precision>
-inline std::ostream& operator<< (std::ostream& os, const SO3<Precision>& rhs){
-       return os << rhs.get_matrix();
-}
-
-/// Read from SO3 to a stream 
-/// @relates SO3
-template <typename Precision>
-inline std::istream& operator>>(std::istream& is, SO3<Precision>& rhs){
-       is >> rhs.my_matrix;
-       rhs.coerce();
-       return is;
-}
-
-///Compute a rotation exponential using the Rodrigues Formula.
-///The rotation axis is given by \f$\vec{w}\f$, and the rotation angle must
-///be computed using \f$ \theta = |\vec{w}|\f$. This is provided as a separate
-///function primarily to allow fast and rough matrix exponentials using fast 
-///and rough approximations to \e A and \e B.
-///
-///@param w Vector about which to rotate.
-///@param A \f$\frac{\sin \theta}{\theta}\f$
-///@param B \f$\frac{1 - \cos \theta}{\theta^2}\f$
-///@param R Matrix to hold the return value.
-///@relates SO3
-template <typename Precision, int S, typename VP, typename VA, typename MA>
-inline void rodrigues_so3_exp(const Vector<S,VP, VA>& w, const Precision A, 
const Precision B, Matrix<3,3,Precision,MA>& R){
-    SizeMismatch<3,S>::test(3, w.size());
-       {
-               const Precision wx2 = (Precision)w[0]*w[0];
-               const Precision wy2 = (Precision)w[1]*w[1];
-               const Precision wz2 = (Precision)w[2]*w[2];
-       
-               R[0][0] = 1.0 - B*(wy2 + wz2);
-               R[1][1] = 1.0 - B*(wx2 + wz2);
-               R[2][2] = 1.0 - B*(wx2 + wy2);
-       }
-       {
-               const Precision a = A*w[2];
-               const Precision b = B*(w[0]*w[1]);
-               R[0][1] = b - a;
-               R[1][0] = b + a;
-       }
-       {
-               const Precision a = A*w[1];
-               const Precision b = B*(w[0]*w[2]);
-               R[0][2] = b + a;
-               R[2][0] = b - a;
-       }
-       {
-               const Precision a = A*w[0];
-               const Precision b = B*(w[1]*w[2]);
-               R[1][2] = b - a;
-               R[2][1] = b + a;
-       }
-}
-
-///Perform the exponential of the matrix \f$ \sum_i w_iG_i\f$
-///@param w Weightings of the generator matrices.
-template <typename Precision>
-template<int S, typename VP, typename VA>
-inline SO3<Precision> SO3<Precision>::exp(const Vector<S,VP,VA>& w){
-       using std::sqrt;
-       using std::sin;
-       using std::cos;
-       SizeMismatch<3,S>::test(3, w.size());
-       
-       static const Precision one_6th = 1.0/6.0;
-       static const Precision one_20th = 1.0/20.0;
-       
-       SO3<Precision> result;
-       
-       const Precision theta_sq = w*w;
-       const Precision theta = sqrt(theta_sq);
-       Precision A, B;
-       //Use a Taylor series expansion near zero. This is required for
-       //accuracy, since sin t / t and (1-cos t)/t^2 are both 0/0.
-       if (theta_sq < 1e-8) {
-               A = 1.0 - one_6th * theta_sq;
-               B = 0.5;
-       } else {
-               if (theta_sq < 1e-6) {
-                       B = 0.5 - 0.25 * one_6th * theta_sq;
-                       A = 1.0 - theta_sq * one_6th*(1.0 - one_20th * 
theta_sq);
-               } else {
-                       const Precision inv_theta = 1.0/theta;
-                       A = sin(theta) * inv_theta;
-                       B = (1 - cos(theta)) * (inv_theta * inv_theta);
-               }
-       }
-       rodrigues_so3_exp(w, A, B, result.my_matrix);
-       return result;
-}
-
-template <typename Precision>
-inline Vector<3, Precision> SO3<Precision>::ln() const{
-    using std::sqrt;
-       Vector<3, Precision> result;
-       
-       const Precision cos_angle = (my_matrix[0][0] + my_matrix[1][1] + 
my_matrix[2][2] - 1.0) * 0.5;
-       result[0] = (my_matrix[2][1]-my_matrix[1][2])/2;
-       result[1] = (my_matrix[0][2]-my_matrix[2][0])/2;
-       result[2] = (my_matrix[1][0]-my_matrix[0][1])/2;
-       
-       Precision sin_angle_abs = sqrt(result*result);
-       if (cos_angle > M_SQRT1_2) {            // [0 - Pi/4[ use asin
-               if(sin_angle_abs > 0){
-                       result *= asin(sin_angle_abs) / sin_angle_abs;
-               }
-       } else if( cos_angle > -M_SQRT1_2) {    // [Pi/4 - 3Pi/4[ use acos, but 
antisymmetric part
-               const Precision angle = acos(cos_angle);
-               result *= angle / sin_angle_abs;        
-       } else {  // rest use symmetric part
-               // antisymmetric part vanishes, but still large rotation, need 
information from symmetric part
-               const Precision angle = M_PI - asin(sin_angle_abs);
-               const Precision d0 = my_matrix[0][0] - cos_angle,
-                       d1 = my_matrix[1][1] - cos_angle,
-                       d2 = my_matrix[2][2] - cos_angle;
-               TooN::Vector<3, Precision> r2;
-               if(d0*d0 > d1*d1 && d0*d0 > d2*d2){ // first is largest, fill 
with first column
-                       r2[0] = d0;
-                       r2[1] = (my_matrix[1][0]+my_matrix[0][1])/2;
-                       r2[2] = (my_matrix[0][2]+my_matrix[2][0])/2;
-               } else if(d1*d1 > d2*d2) {                          // second 
is largest, fill with second column
-                       r2[0] = (my_matrix[1][0]+my_matrix[0][1])/2;
-                       r2[1] = d1;
-                       r2[2] = (my_matrix[2][1]+my_matrix[1][2])/2;
-               } else {                                                        
    // third is largest, fill with third column
-                       r2[0] = (my_matrix[0][2]+my_matrix[2][0])/2;
-                       r2[1] = (my_matrix[2][1]+my_matrix[1][2])/2;
-                       r2[2] = d2;
-               }
-               // flip, if we point in the wrong direction!
-               if(r2 * result < 0)
-                       r2 *= -1;
-               r2 = unit(r2);
-               result = TooN::operator*(angle,r2);
-       } 
-       return result;
-}
-
-/// Right-multiply by a Vector
-/// @relates SO3
-template<int S, typename P, typename PV, typename A> inline
-Vector<3, typename Internal::MultiplyType<P, PV>::type> operator*(const 
SO3<P>& lhs, const Vector<S, PV, A>& rhs){
-       return lhs.get_matrix() * rhs;
-}
-
-/// Left-multiply by a Vector
-/// @relates SO3
-template<int S, typename P, typename PV, typename A> inline
-Vector<3, typename Internal::MultiplyType<PV, P>::type> operator*(const 
Vector<S, PV, A>& lhs, const SO3<P>& rhs){
-       return lhs * rhs.get_matrix();
-}
-
-/// Right-multiply by a matrix
-/// @relates SO3
-template<int R, int C, typename P, typename PM, typename A> inline
-Matrix<3, C, typename Internal::MultiplyType<P, PM>::type> operator*(const 
SO3<P>& lhs, const Matrix<R, C, PM, A>& rhs){
-       return lhs.get_matrix() * rhs;
-}
-
-/// Left-multiply by a matrix
-/// @relates SO3
-template<int R, int C, typename P, typename PM, typename A> inline
-Matrix<R, 3, typename Internal::MultiplyType<PM, P>::type> operator*(const 
Matrix<R, C, PM, A>& lhs, const SO3<P>& rhs){
-       return lhs * rhs.get_matrix();
-}
-
-#if 0  // will be moved to another header file ?
-
-template <class A> inline
-Vector<3> transform(const SO3& pose, const FixedVector<3,A>& x) { return 
pose*x; }
-
-template <class A1, class A2> inline
-Vector<3> transform(const SO3& pose, const FixedVector<3,A1>& x, 
FixedMatrix<3,3,A2>& J_x)
-{
-       J_x = pose.get_matrix();
-       return pose * x;
-}
-
-template <class A1, class A2, class A3> inline
-Vector<3> transform(const SO3& pose, const FixedVector<3,A1>& x, 
FixedMatrix<3,3,A2>& J_x, FixedMatrix<3,3,A3>& J_pose)
-{
-       J_x = pose.get_matrix();
-       const Vector<3> cx = pose * x;
-       J_pose[0][0] = J_pose[1][1] = J_pose[2][2] = 0;
-       J_pose[1][0] = -(J_pose[0][1] = cx[2]);
-       J_pose[0][2] = -(J_pose[2][0] = cx[1]);
-       J_pose[2][1] = -(J_pose[1][2] = cx[0]);
-       return cx;
-}
-
-template <class A1, class A2, class A3> inline
-Vector<2> project_transformed_point(const SO3& pose, const FixedVector<3,A1>& 
in_frame, FixedMatrix<2,3,A2>& J_x, FixedMatrix<2,3,A3>& J_pose)
-{
-       const double z_inv = 1.0/in_frame[2];
-       const double x_z_inv = in_frame[0]*z_inv;
-       const double y_z_inv = in_frame[1]*z_inv;
-       const double cross = x_z_inv * y_z_inv;
-       J_pose[0][0] = -cross;
-       J_pose[0][1] = 1 + x_z_inv*x_z_inv;
-       J_pose[0][2] = -y_z_inv;
-       J_pose[1][0] = -1 - y_z_inv*y_z_inv;
-       J_pose[1][1] =  cross;
-       J_pose[1][2] =  x_z_inv;
-
-       const TooN::Matrix<3>& R = pose.get_matrix();
-       J_x[0][0] = z_inv*(R[0][0] - x_z_inv * R[2][0]);
-       J_x[0][1] = z_inv*(R[0][1] - x_z_inv * R[2][1]);
-       J_x[0][2] = z_inv*(R[0][2] - x_z_inv * R[2][2]);
-       J_x[1][0] = z_inv*(R[1][0] - y_z_inv * R[2][0]);
-       J_x[1][1] = z_inv*(R[1][1] - y_z_inv * R[2][1]);
-       J_x[1][2] = z_inv*(R[1][2] - y_z_inv * R[2][2]);
-
-       return makeVector(x_z_inv, y_z_inv);
-}
-
-
-template <class A1> inline
-Vector<2> transform_and_project(const SO3& pose, const FixedVector<3,A1>& x)
-{
-       return project(transform(pose,x));
-}
-
-template <class A1, class A2, class A3> inline
-Vector<2> transform_and_project(const SO3& pose, const FixedVector<3,A1>& x, 
FixedMatrix<2,3,A2>& J_x, FixedMatrix<2,3,A3>& J_pose)
-{
-       return project_transformed_point(pose, transform(pose,x), J_x, J_pose);
-}
-
-#endif
-
-}
-
-#endif

Index: wls.h
===================================================================
RCS file: wls.h
diff -N wls.h
--- wls.h       13 Oct 2011 22:20:46 -0000      1.28
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,242 +0,0 @@
-// -*- c++ -*-
-
-// Copyright (C) 2005,2009 Tom Drummond (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-#ifndef TOON_INCLUDE_WLS_H
-#define TOON_INCLUDE_WLS_H
-
-#include <TooN/TooN.h>
-#include <TooN/Cholesky.h>
-#include <TooN/helpers.h>
-
-#include <cmath>
-
-namespace TooN {
-
-/// Performs Gauss-Newton weighted least squares computation.
-/// @param Size The number of dimensions in the system
-/// @param Precision The numerical precision used (double, float etc)
-/// @param Decomposition The class used to invert the inverse Covariance 
matrix (must have one integer size and one typename precision template 
arguments) this is Cholesky by default, but could also be SQSVD
-/// @ingroup gEquations
-template <int Size=Dynamic, class Precision=DefaultPrecision,
-                 template<int DecompSize, class DecompPrecision> class 
Decomposition = Cholesky>
-class WLS {
-public:
-
-       /// Default constructor or construct with the number of dimensions for 
the Dynamic case
-       WLS(int size=0) :
-               my_C_inv(size,size),
-               my_vector(size),
-               my_decomposition(size),
-               my_mu(size)
-       {
-               clear();
-       }
-
-       /// Clear all the measurements and apply a constant regularisation 
term. 
-       void clear(){
-               my_C_inv = Zeros;
-               my_vector = Zeros;
-       }
-
-       /// Applies a constant regularisation term. 
-       /// Equates to a prior that says all the parameters are zero with 
\f$\sigma^2 = \frac{1}{\text{val}}\f$.
-       /// @param val The strength of the prior
-       void add_prior(Precision val){
-               for(int i=0; i<my_C_inv.num_rows(); i++){
-                       my_C_inv(i,i)+=val;
-               }
-       }
-  
-       /// Applies a regularisation term with a different strength for each 
parameter value. 
-       /// Equates to a prior that says all the parameters are zero with 
\f$\sigma_i^2 = \frac{1}{\text{v}_i}\f$.
-       /// @param v The vector of priors
-       template<class B2>
-       void add_prior(const Vector<Size,Precision,B2>& v){
-               SizeMismatch<Size,Size>::test(my_C_inv.num_rows(), v.size());
-               for(int i=0; i<my_C_inv.num_rows(); i++){
-                       my_C_inv(i,i)+=v[i];
-               }
-       }
-
-       /// Applies a whole-matrix regularisation term. 
-       /// This is the same as adding the \f$m\f$ to the inverse covariance 
matrix.
-       /// @param m The inverse covariance matrix to add
-       template<class B2>
-       void add_prior(const Matrix<Size,Size,Precision,B2>& m){
-               my_C_inv+=m;
-       }
-
-       /// Add a single measurement 
-       /// @param m The value of the measurement
-       /// @param J The Jacobian for the measurement 
\f$\frac{\partial\text{m}}{\partial\text{param}_i}\f$
-       /// @param weight The inverse variance of the measurement (default = 1)
-       template<class B2>
-       inline void add_mJ(Precision m, const Vector<Size, Precision, B2>& J, 
Precision weight = 1) {
-               
-               //Upper right triangle only, for speed
-               for(int r=0; r < my_C_inv.num_rows(); r++)
-               {
-                       double Jw = weight * J[r];
-                       my_vector[r] += m * Jw;
-                       for(int c=r; c < my_C_inv.num_rows(); c++)
-                               my_C_inv[r][c] += Jw * J[c];
-               }
-       }
-
-       /// Add multiple measurements at once (much more efficiently)
-       /// @param m The measurements to add
-       /// @param J The Jacobian matrix 
\f$\frac{\partial\text{m}_i}{\partial\text{param}_j}\f$
-       /// @param invcov The inverse covariance of the measurement values
-       template<int N, class B1, class B2, class B3>
-       inline void add_mJ(const Vector<N,Precision,B1>& m,
-                                          const Matrix<Size,N,Precision,B2>& J,
-                                          const Matrix<N,N,Precision,B3>& 
invcov){
-               const Matrix<Size,N,Precision> temp =  J * invcov;
-               my_C_inv += temp * J.T();
-               my_vector += temp * m;
-       }
-
-       /// Add multiple measurements at once (much more efficiently)
-       /// @param m The measurements to add
-       /// @param J The Jacobian matrix 
\f$\frac{\partial\text{m}_i}{\partial\text{param}_j}\f$
-       /// @param invcov The inverse covariance of the measurement values
-       template<int N, class B1, class B2, class B3>
-       inline void add_mJ_rows(const Vector<N,Precision,B1>& m,
-                                          const Matrix<N,Size,Precision,B2>& J,
-                                          const Matrix<N,N,Precision,B3>& 
invcov){
-               const Matrix<Size,N,Precision> temp =  J.T() * invcov;
-               my_C_inv += temp * J;
-               my_vector += temp * m;
-       }
-
-       /// Add a single measurement at once with a sparse Jacobian (much, much 
more efficiently)
-       /// @param m The measurements to add
-       /// @param J1 The first block of the Jacobian matrix 
\f$\frac{\partial\text{m}_i}{\partial\text{param}_j}\f$
-       /// @param index1 starting index for the first block
-       /// @param invcov The inverse covariance of the measurement values
-       template<int N, typename B1>
-       inline void add_sparse_mJ(const Precision m,
-                                          const Vector<N,Precision,B1>& J1, 
const int index1,
-                                          const Precision weight = 1){
-               //Upper right triangle only, for speed
-               for(int r=0; r < J1.size(); r++)
-               {
-                       double Jw = weight * J1[r];
-                       my_vector[r+index1] += m * Jw;
-                       for(int c = r; c < J1.size(); c++)
-                               my_C_inv[r+index1][c+index1] += Jw * J1[c];
-               }
-       }
-
-       /// Add multiple measurements at once with a sparse Jacobian (much, 
much more efficiently)
-       /// @param m The measurements to add
-       /// @param J1 The first block of the Jacobian matrix 
\f$\frac{\partial\text{m}_i}{\partial\text{param}_j}\f$
-       /// @param index1 starting index for the first block
-       /// @param invcov The inverse covariance of the measurement values
-       template<int N, int S1, class P1, class P2, class P3, class B1, class 
B2, class B3>
-       inline void add_sparse_mJ_rows(const Vector<N,P1,B1>& m,
-                                          const Matrix<N,S1,P2,B2>& J1, const 
int index1,
-                                          const Matrix<N,N,P3,B3>& invcov){
-               const Matrix<S1,N,Precision> temp1 = J1.T() * invcov;
-               const int size1 = J1.num_cols();
-               my_C_inv.slice(index1, index1, size1, size1) += temp1 * J1;
-               my_vector.slice(index1, size1) += temp1 * m;
-       }
-
-       /// Add multiple measurements at once with a sparse Jacobian (much, 
much more efficiently)
-       /// @param m The measurements to add
-       /// @param J1 The first block of the Jacobian matrix 
\f$\frac{\partial\text{m}_i}{\partial\text{param}_j}\f$
-       /// @param index1 starting index for the first block
-       /// @param J2 The second block of the Jacobian matrix 
\f$\frac{\partial\text{m}_i}{\partial\text{param}_j}\f$
-       /// @param index2 starting index for the second block
-       /// @param invcov The inverse covariance of the measurement values
-       template<int N, int S1, int S2, class B1, class B2, class B3, class B4>
-       inline void add_sparse_mJ_rows(const Vector<N,Precision,B1>& m,
-                                          const Matrix<N,S1,Precision,B2>& J1, 
const int index1,
-                                          const Matrix<N,S2,Precision,B3>& J2, 
const int index2,
-                                          const Matrix<N,N,Precision,B4>& 
invcov){
-               const Matrix<S1,N,Precision> temp1 = J1.T() * invcov;
-               const Matrix<S2,N,Precision> temp2 = J2.T() * invcov;
-               const Matrix<S1,S2,Precision> mixed = temp1 * J2;
-               const int size1 = J1.num_cols();
-               const int size2 = J2.num_cols();
-               my_C_inv.slice(index1, index1, size1, size1) += temp1 * J1;
-               my_C_inv.slice(index2, index2, size2, size2) += temp2 * J2;
-               my_C_inv.slice(index1, index2, size1, size2) += mixed;
-               my_C_inv.slice(index2, index1, size2, size1) += mixed.T();
-               my_vector.slice(index1, size1) += temp1 * m;
-               my_vector.slice(index2, size2) += temp2 * m;
-       }
-
-       /// Process all the measurements and compute the weighted least squares 
set of parameter values
-       /// stores the result internally which can then be accessed by calling 
get_mu()
-       void compute(){
-       
-               //Copy the upper right triangle to the empty lower-left.
-               for(int r=1; r < my_C_inv.num_rows(); r++)
-                       for(int c=0; c < r; c++)
-                               my_C_inv[r][c] = my_C_inv[c][r];
-
-               my_decomposition.compute(my_C_inv);
-               my_mu=my_decomposition.backsub(my_vector);
-       }
-
-       /// Combine measurements from two WLS systems
-       /// @param meas The measurements to combine with
-       void operator += (const WLS& meas){
-               my_vector+=meas.my_vector;
-               my_C_inv += meas.my_C_inv;
-       }
-
-       /// Returns the inverse covariance matrix
-       Matrix<Size,Size,Precision>& get_C_inv() {return my_C_inv;}
-       /// Returns the inverse covariance matrix
-       const Matrix<Size,Size,Precision>& get_C_inv() const {return my_C_inv;}
-       Vector<Size,Precision>& get_mu(){return my_mu;}  ///<Returns the 
update. With no prior, this is the result of \f$J^\dagger e\f$.
-       const Vector<Size,Precision>& get_mu() const {return my_mu;} 
///<Returns the update. With no prior, this is the result of \f$J^\dagger e\f$.
-       Vector<Size,Precision>& get_vector(){return my_vector;} ///<Returns the 
 vector \f$J^{\mathsf T} e\f$
-       const Vector<Size,Precision>& get_vector() const {return my_vector;} 
///<Returns the  vector \f$J^{\mathsf T} e\f$
-       Decomposition<Size,Precision>& get_decomposition(){return 
my_decomposition;} ///< Return the decomposition object used to compute 
\f$(J^{\mathsf T}  J + P)^{-1}\f$
-       const Decomposition<Size,Precision>& get_decomposition() const {return 
my_decomposition;} ///< Return the decomposition object used to compute 
\f$(J^{\mathsf T}  J + P)^{-1}\f$
-
-
-private:
-       Matrix<Size,Size,Precision> my_C_inv;
-       Vector<Size,Precision> my_vector;
-       Decomposition<Size,Precision> my_decomposition;
-       Vector<Size,Precision> my_mu;
-
-       // comment out to allow bitwise copying
-       // WLS( WLS& copyof );
-       // int operator = ( WLS& copyof );
-};
-
-}
-
-#endif

Index: benchmark/generate_solvers.m
===================================================================
RCS file: benchmark/generate_solvers.m
diff -N benchmark/generate_solvers.m
--- benchmark/generate_solvers.m        22 May 2009 09:10:21 -0000      1.2
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,101 +0,0 @@
-clear all 
-out={};
-symmetric=1
-
-for S=5:5
-       T = num2str(S);
-
-       m=sym(zeros(S,S));
-       for r=1:S
-               for c=1:S
-                       if r >= c | symmetric == 0
-                               v = [ 'A' num2str(r-1) num2str(c-1) ];
-                       else
-                               v = [ 'A' num2str(c-1) num2str(r-1) ];
-                       end
-                       m(r, c) = sym(v);
-               end
-       end
-
-       m
-       pause
-
-       inverse =simplify(inv(m) * det(m));
-       idet = ccode(det(m));
-
-
-       out{end+1} = [ 'template<int Cols> void solve_direct(const Matrix<' T 
'>& A, const Matrix<' T ', Cols>& b, Matrix<' T ',Cols>& x)' ];
-       out{end+1} = [ '{' ];
-
-       idet = [ idet   '                                      '];
-       q=[];
-       generated = zeros(1,100);
-
-       for i=1:length(idet)
-               if idet(i) >= '0' & idet(i) <= '9'  & (idet(i-1) == 'A' | 
idet(i-2) == 'A')
-                       q = [q '[' idet(i) ']' ];
-               elseif idet(i) == 'M' & idet(i+13) == '=' | idet(i) == 't'
-                       genvar_num  = str2num(idet(i+11));
-
-                       if generated(genvar_num) == 1
-                               q = [q idet(i)];
-                       else
-                               q = [q 'double ' idet(i)];
-                               generated(genvar_num)=1;
-                       end
-
-               elseif idet(i) == ';'
-                       out{end+1} = [q ';'];
-                       q=[];
-               else
-                       q = [q idet(i)];
-               end
-
-       end
-
-       out{end+1} = '  double idet = 1/t0;';
-
-       for r=1:S
-               for c=1:S
-                       
-                       p = ccode(inverse(r,c));
-                       p = [p '                                            '];
-
-                       for i=1:length(p)
-                               if p(i) >= '0' & p(i) <= '9'  & (p(i-1) == 'A' 
| p(i-2) == 'A')
-                                       q = [q '[' p(i) ']' ];
-                               elseif p(i) == ';'
-                                       out{end+1} = [q ';'];
-                                       q=[];
-                               else
-                                       q = [q p(i)];
-                               end
-
-                       end
-
-
-                       out{end+1} = [ '        double i' num2str(r-1) 
num2str(c-1) ' = t0*idet;'];
-               end
-       end
-       
-       out{end+1} = '  for(unsigned int i=0; i < x.num_cols(); i++)';
-       out{end+1} = '  {';
-       for r=1:S
-               row = ['                x[' num2str(r-1) '][i] = '];
-               for c=1:S
-                       row = [row 'i' num2str(r-1) num2str(c-1) '*b[' 
num2str(c-1) '][i] + ' ];
-               end
-               out{end+1} = [row(1:end-3) ';'];
-       end
-       out{end+1} = '  }';
-       out{end+1} = '}';
-end
-
-out{end+1} = [ 'static const int highest_solver= ' T ';'];
-
-slv = fopen('solvers.cc', 'w');
-for i=1:length(out)
-       fprintf(slv, '%s\n', out{i});
-end
-fclose(slv);
-

Index: benchmark/solve_ax_equals_b.cc
===================================================================
RCS file: benchmark/solve_ax_equals_b.cc
diff -N benchmark/solve_ax_equals_b.cc
--- benchmark/solve_ax_equals_b.cc      15 Apr 2009 15:50:33 -0000      1.7
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,233 +0,0 @@
-#include <TooN/TooN.h>
-#include <TooN/LU.h>
-#include <TooN/helpers.h>
-#include <TooN/gaussian_elimination.h>
-#include <TooN/gauss_jordan.h>
-#include <tr1/random>
-#include <sys/time.h>  //gettimeofday
-#include <vector>
-#include <utility>
-#include <string>
-#include <map>
-#include <algorithm>
-#include <iomanip>
-
-
-using namespace TooN;
-using namespace std;
-using namespace tr1;
-
-double get_time_of_day()
-{
-       struct timeval tv;
-       gettimeofday(&tv,NULL);
-       return tv.tv_sec+tv.tv_usec * 1e-6;
-}
-
-std::tr1::mt19937 eng;
-std::tr1::uniform_real<double> rnd;
-double global_sum;
-
-#include "solvers.cc"
-
-
-struct UseCompiledCramer
-{
-       template<int R, int C> static void solve(const Matrix<R, R>& a, const 
Matrix<R, C>& b, Matrix<R, C>& x)
-       {       
-               solve_direct(a, b, x);
-       }
-
-       static string name()
-       {
-               return "CC";
-       }
-};
-
-struct UseLU
-{
-       template<int R, int C> static void solve(const Matrix<R, R>& a, const 
Matrix<R, C>& b, Matrix<R, C>& x)
-       {
-               LU<R> lu(a);
-
-               x = lu.backsub(b);
-       }
-
-       static string name()
-       {
-               return "LU";
-       }
-};
-
-struct UseLUInv
-{
-       template<int R, int C> static void solve(const Matrix<R, R>& a, const 
Matrix<R, C>& b, Matrix<R, C>& x)
-       {
-               LU<R> lu(a);
-
-               x = lu.get_inverse() * b;
-               //x = lu.backsub(b);
-       }
-
-       static string name()
-       {
-               return "LI";
-       }
-};
-
-
-struct UseGaussianElimination
-{
-       template<int R, int C> static void solve(const Matrix<R, R>& a, const 
Matrix<R, C>& b, Matrix<R, C>& x)
-       {
-               x = gaussian_elimination(a, b);
-       }
-
-       static string name()
-       {
-               return "GE";
-       }
-};
-
-struct UseGaussianEliminationInverse
-{
-       template<int R, int C> static void solve(const Matrix<R, R>& a, const 
Matrix<R, C>& b, Matrix<R, C>& x)
-       {
-               Matrix<R> i, inv;
-               i = Identity;
-               inv = gaussian_elimination(a, i);
-               x = inv * b;
-       }
-
-       static string name()
-       {
-               return "GI";
-       }
-};
-
-struct UseGaussJordanInverse
-{
-       template<int R, int C> static void solve(const Matrix<R, R>& a, const 
Matrix<R, C>& b, Matrix<R, C>& x)
-       {
-               Matrix<R, 2*R> m;
-               m.template slice<0,0,R,R>() = a;
-               m.template slice<0,R,R,R>() = Identity;
-               gauss_jordan(m);
-               x = m.template slice<0,R,R,R>() * b;
-       }
-
-       static string name()
-       {
-               return "GJ";
-       }
-};
-
-
-template<int Size, int Cols, class Solver> void benchmark_ax_eq_b(map<string, 
vector<double> >& results)
-{
-       double time=0, t_tmp, start = get_time_of_day(), t_tmp2;
-       double sum=0;
-       int n=0;
-
-       while(get_time_of_day() - start < .1)
-       {
-               Matrix<Size> a;
-               for(int r=0; r < Size; r++)
-                       for(int c=0; c < Size; c++)
-                               a[r][c] = rnd(eng);
-                       
-
-               Matrix<Size, Cols> b, x;
-
-               for(int r=0; r < Size; r++)
-                       for(int c=0; c < Cols; c++)
-                               b[r][c] = rnd(eng);
-               
-               a[0][0] += (t_tmp=get_time_of_day()) * 1e-20;
-               Solver::template solve<Size, Cols>(a, b, x);
-               global_sum += (t_tmp2=get_time_of_day())*x[Size-1][Cols-1];
-                       
-               time += t_tmp2 - t_tmp;
-               n++;
-       }
-
-       results[Solver::name()].push_back(n/time);
-
-       global_sum += sum;      
-}
-
-
-
-
-template<int Size, int Cols, typename Solver, bool Use> struct Optional
-{
-       static void solve(map<string, vector<double> >& r)
-       {
-               benchmark_ax_eq_b<Size, Cols, Solver>(r);
-       }
-};
-
-
-template<int Size, int Cols, typename Solver > struct Optional<Size, Cols, 
Solver, 0>
-{
-       static void solve(map<string, vector<double> >&)
-       {
-       }
-};
-
-template<int Size, int C=1, bool End=0> struct ColIter
-{
-       static void iter()
-       {
-               static const int Lin = Size*2;
-               static const int Grow = 1;
-               static const int Cols = C + 
(C<=Lin?0:(C-Lin)*(C-Lin)*(C-Lin)/Grow);
-               map<string, vector<double> > results;
-               cout << Size << "\t" << Cols << "\t";
-               
-               //Run each menchmark 10 times and select the median result
-               for(int i=0; i < 10; i++)
-               {
-                       benchmark_ax_eq_b<Size, Cols, 
UseGaussJordanInverse>(results);
-                       benchmark_ax_eq_b<Size, Cols, 
UseGaussianElimination>(results);
-                       benchmark_ax_eq_b<Size, Cols, 
UseGaussianEliminationInverse>(results);
-                       benchmark_ax_eq_b<Size, Cols, UseLUInv>(results);
-                       benchmark_ax_eq_b<Size, Cols, UseLU>(results);
-                       Optional<Size, Cols, UseCompiledCramer, 
(Size<=highest_solver)>::solve(results);
-               }
-               
-               vector<pair<double, string> > res;
-               for(map<string, vector<double> >::iterator i=results.begin(); i 
!= results.end(); i++)
-               {
-                       sort(i->second.begin(), i->second.end());
-                       res.push_back(make_pair(i->second[i->second.size()/2], 
i->first));
-               }
-
-
-
-               sort(res.begin(), res.end());
-               for(unsigned int i=0; i < res.size(); i++)
-                       cout << res[i].second << " " << setprecision(5) << 
setw(10) << res[i].first << "            ";
-               cout << endl;
-               ColIter<Size, C+1, (Cols> Size*1000)>::iter();
-       }
-};
-
-template<int Size, int C> struct ColIter<Size, C, 1> 
-{
-
-       static void iter()
-       {
-       }
-};
-
-#ifndef SIZE
-       #define SIZE 2
-#endif
-
-int main()
-{
-       ColIter<SIZE>::iter();
-       
-       return global_sum != 123456789.0;
-}

Index: benchmark/solvers.cc
===================================================================
RCS file: benchmark/solvers.cc
diff -N benchmark/solvers.cc
--- benchmark/solvers.cc        2 Apr 2009 13:36:24 -0000       1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,162 +0,0 @@
-template<int Cols> void solve_direct(const Matrix<2>& A, const Matrix<2, 
Cols>& b, Matrix<2,Cols>& x)
-{
-      double t0 = A[0][0]*A[1][1]-A[0][1]*A[1][0];
-       double idet = 1/t0;
-                                            t0 = A[1][1];
-       double i00 = t0*idet;
-                                                  t0 = -A[0][1];
-       double i01 = t0*idet;
-                                                  t0 = -A[1][0];
-       double i10 = t0*idet;
-                                                  t0 = A[0][0];
-       double i11 = t0*idet;
-       for(unsigned int i=0; i < x.num_cols(); i++)
-       {
-               x[0][i] = i00*b[0][i] + i01*b[1][i];
-               x[1][i] = i10*b[0][i] + i11*b[1][i];
-       }
-}
-template<int Cols> void solve_direct(const Matrix<3>& A, const Matrix<3, 
Cols>& b, Matrix<3,Cols>& x)
-{
-      double t0 = 
A[0][0]*A[1][1]*A[2][2]-A[0][0]*A[1][2]*A[2][1]-A[1][0]*A[0][1]*A[2][2]+A[1][0]*A[0][2]*A[2][1]+A[2][0]*A[0][1]*A[1][2]-A[2][0]*A[0][2]*A[1][1];
-       double idet = 1/t0;
-                                            t0 = 
A[1][1]*A[2][2]-A[1][2]*A[2][1];
-       double i00 = t0*idet;
-                                                  t0 = 
-A[0][1]*A[2][2]+A[0][2]*A[2][1];
-       double i01 = t0*idet;
-                                                  t0 = 
A[0][1]*A[1][2]-A[0][2]*A[1][1];
-       double i02 = t0*idet;
-                                                  t0 = 
-A[1][0]*A[2][2]+A[1][2]*A[2][0];
-       double i10 = t0*idet;
-                                                  t0 = 
A[0][0]*A[2][2]-A[0][2]*A[2][0];
-       double i11 = t0*idet;
-                                                  t0 = 
-A[0][0]*A[1][2]+A[0][2]*A[1][0];
-       double i12 = t0*idet;
-                                                  t0 = 
A[1][0]*A[2][1]-A[1][1]*A[2][0];
-       double i20 = t0*idet;
-                                                  t0 = 
-A[0][0]*A[2][1]+A[0][1]*A[2][0];
-       double i21 = t0*idet;
-                                                  t0 = 
A[0][0]*A[1][1]-A[0][1]*A[1][0];
-       double i22 = t0*idet;
-       for(unsigned int i=0; i < x.num_cols(); i++)
-       {
-               x[0][i] = i00*b[0][i] + i01*b[1][i] + i02*b[2][i];
-               x[1][i] = i10*b[0][i] + i11*b[1][i] + i12*b[2][i];
-               x[2][i] = i20*b[0][i] + i21*b[1][i] + i22*b[2][i];
-       }
-}
-template<int Cols> void solve_direct(const Matrix<4>& A, const Matrix<4, 
Cols>& b, Matrix<4,Cols>& x)
-{
-      double t0 = 
A[0][0]*A[1][1]*A[2][2]*A[3][3]-A[0][0]*A[1][1]*A[2][3]*A[3][2]-A[0][0]*A[2][1]*A[1][2]*A[3][3]+A[0][0]*A[2][1]*A[1][3]*A[3][2]+A[0][0]*A[3][1]*A[1][2]*A[2][3]-A[0][0]*A[3][1]*A[1][3]*A[2][2]-A[1][0]*A[0][1]*A[2][2]*A[3][3]+A[1][0]*A[0][1]*A[2][3]*A[3][2]+A[1][0]*A[2][1]*A[0][2]*A[3][3]-A[1][0]*A[2][1]*A[0][3]*A[3][2]-A[1][0]*A[3][1]*A[0][2]*A[2][3]+A[1][0]*A[3][1]*A[0][3]*A[2][2]+A[2][0]*A[0][1]*A[1][2]*A[3][3]-A[2][0]*A[0][1]*A[1][3]*A[3][2]-A[2][0]*A[1][1]*A[0][2]*A[3][3]+A[2][0]*A[1][1]*A[0][3]*A[3][2]+A[2][0]*A[3][1]*A[0][2]*A[1][3]-A[2][0]*A[3][1]*A[0][3]*A[1][2]-A[3][0]*A[0][1]*A[1][2]*A[2][3]+A[3][0]*A[0][1]*A[1][3]*A[2][2]+A[3][0]*A[1][1]*A[0][2]*A[2][3]-A[3][0]*A[1][1]*A[0][3]*A[2][2]-A[3][0]*A[2][1]*A[0][2]*A[1][3]+A[3][0]*A[2][1]*A[0][3]*A[1][2];
-       double idet = 1/t0;
-                                            t0 = 
A[1][1]*A[2][2]*A[3][3]-A[1][1]*A[2][3]*A[3][2]-A[2][1]*A[1][2]*A[3][3]+A[2][1]*A[1][3]*A[3][2]+A[3][1]*A[1][2]*A[2][3]-A[3][1]*A[1][3]*A[2][2];
-       double i00 = t0*idet;
-                                                  t0 = 
-A[0][1]*A[2][2]*A[3][3]+A[0][1]*A[2][3]*A[3][2]+A[2][1]*A[0][2]*A[3][3]-A[2][1]*A[0][3]*A[3][2]-A[3][1]*A[0][2]*A[2][3]+A[3][1]*A[0][3]*A[2][2];
-       double i01 = t0*idet;
-                                                  t0 = 
A[0][1]*A[1][2]*A[3][3]-A[0][1]*A[1][3]*A[3][2]-A[1][1]*A[0][2]*A[3][3]+A[1][1]*A[0][3]*A[3][2]+A[3][1]*A[0][2]*A[1][3]-A[3][1]*A[0][3]*A[1][2];
-       double i02 = t0*idet;
-                                                  t0 = 
-A[0][1]*A[1][2]*A[2][3]+A[0][1]*A[1][3]*A[2][2]+A[1][1]*A[0][2]*A[2][3]-A[1][1]*A[0][3]*A[2][2]-A[2][1]*A[0][2]*A[1][3]+A[2][1]*A[0][3]*A[1][2];
-       double i03 = t0*idet;
-                                                  t0 = 
-A[1][0]*A[2][2]*A[3][3]+A[1][0]*A[2][3]*A[3][2]+A[2][0]*A[1][2]*A[3][3]-A[2][0]*A[1][3]*A[3][2]-A[3][0]*A[1][2]*A[2][3]+A[3][0]*A[1][3]*A[2][2];
-       double i10 = t0*idet;
-                                                  t0 = 
A[0][0]*A[2][2]*A[3][3]-A[0][0]*A[2][3]*A[3][2]-A[2][0]*A[0][2]*A[3][3]+A[2][0]*A[0][3]*A[3][2]+A[3][0]*A[0][2]*A[2][3]-A[3][0]*A[0][3]*A[2][2];
-       double i11 = t0*idet;
-                                                  t0 = 
-A[0][0]*A[1][2]*A[3][3]+A[0][0]*A[1][3]*A[3][2]+A[1][0]*A[0][2]*A[3][3]-A[1][0]*A[0][3]*A[3][2]-A[3][0]*A[0][2]*A[1][3]+A[3][0]*A[0][3]*A[1][2];
-       double i12 = t0*idet;
-                                                  t0 = 
A[0][0]*A[1][2]*A[2][3]-A[0][0]*A[1][3]*A[2][2]-A[1][0]*A[0][2]*A[2][3]+A[1][0]*A[0][3]*A[2][2]+A[2][0]*A[0][2]*A[1][3]-A[2][0]*A[0][3]*A[1][2];
-       double i13 = t0*idet;
-                                                  t0 = 
A[1][0]*A[2][1]*A[3][3]-A[1][0]*A[2][3]*A[3][1]-A[2][0]*A[1][1]*A[3][3]+A[2][0]*A[1][3]*A[3][1]+A[3][0]*A[1][1]*A[2][3]-A[3][0]*A[1][3]*A[2][1];
-       double i20 = t0*idet;
-                                                  t0 = 
-A[0][0]*A[2][1]*A[3][3]+A[0][0]*A[2][3]*A[3][1]+A[2][0]*A[0][1]*A[3][3]-A[2][0]*A[0][3]*A[3][1]-A[3][0]*A[0][1]*A[2][3]+A[3][0]*A[0][3]*A[2][1];
-       double i21 = t0*idet;
-                                                  t0 = 
A[0][0]*A[1][1]*A[3][3]-A[0][0]*A[1][3]*A[3][1]-A[1][0]*A[0][1]*A[3][3]+A[1][0]*A[0][3]*A[3][1]+A[3][0]*A[0][1]*A[1][3]-A[3][0]*A[0][3]*A[1][1];
-       double i22 = t0*idet;
-                                                  t0 = 
-A[0][0]*A[1][1]*A[2][3]+A[0][0]*A[1][3]*A[2][1]+A[1][0]*A[0][1]*A[2][3]-A[1][0]*A[0][3]*A[2][1]-A[2][0]*A[0][1]*A[1][3]+A[2][0]*A[0][3]*A[1][1];
-       double i23 = t0*idet;
-                                                  t0 = 
-A[1][0]*A[2][1]*A[3][2]+A[1][0]*A[2][2]*A[3][1]+A[2][0]*A[1][1]*A[3][2]-A[2][0]*A[1][2]*A[3][1]-A[3][0]*A[1][1]*A[2][2]+A[3][0]*A[1][2]*A[2][1];
-       double i30 = t0*idet;
-                                                  t0 = 
A[0][0]*A[2][1]*A[3][2]-A[0][0]*A[2][2]*A[3][1]-A[2][0]*A[0][1]*A[3][2]+A[2][0]*A[0][2]*A[3][1]+A[3][0]*A[0][1]*A[2][2]-A[3][0]*A[0][2]*A[2][1];
-       double i31 = t0*idet;
-                                                  t0 = 
-A[0][0]*A[1][1]*A[3][2]+A[0][0]*A[1][2]*A[3][1]+A[1][0]*A[0][1]*A[3][2]-A[1][0]*A[0][2]*A[3][1]-A[3][0]*A[0][1]*A[1][2]+A[3][0]*A[0][2]*A[1][1];
-       double i32 = t0*idet;
-                                                  t0 = 
A[0][0]*A[1][1]*A[2][2]-A[0][0]*A[1][2]*A[2][1]-A[1][0]*A[0][1]*A[2][2]+A[1][0]*A[0][2]*A[2][1]+A[2][0]*A[0][1]*A[1][2]-A[2][0]*A[0][2]*A[1][1];
-       double i33 = t0*idet;
-       for(unsigned int i=0; i < x.num_cols(); i++)
-       {
-               x[0][i] = i00*b[0][i] + i01*b[1][i] + i02*b[2][i] + i03*b[3][i];
-               x[1][i] = i10*b[0][i] + i11*b[1][i] + i12*b[2][i] + i13*b[3][i];
-               x[2][i] = i20*b[0][i] + i21*b[1][i] + i22*b[2][i] + i23*b[3][i];
-               x[3][i] = i30*b[0][i] + i31*b[1][i] + i32*b[2][i] + i33*b[3][i];
-       }
-}
-template<int Cols> void solve_direct(const Matrix<5>& A, const Matrix<5, 
Cols>& b, Matrix<5,Cols>& x)
-{
-      double MapleGenVar3 = 
A[1][1]*A[2][2]*A[4][3]*A[3][0]*A[0][4]+A[1][1]*A[2][2]*A[4][0]*A[0][3]*A[3][4]-A[1][1]*A[2][2]*A[3][3]*A[4][0]*A[0][4]-A[1][1]*A[2][2]*A[3][0]*A[0][3]*A[4][4]-A[1][1]*A[3][3]*A[2][0]*A[0][2]*A[4][4]-A[1][1]*A[4][2]*A[2][3]*A[3][0]*A[0][4]-A[1][1]*A[4][0]*A[0][3]*A[3][2]*A[2][4]-A[1][1]*A[4][0]*A[0][2]*A[2][3]*A[3][4]+A[1][1]*A[2][3]*A[3][2]*A[4][0]*A[0][4]-A[1][1]*A[4][3]*A[3][0]*A[0][2]*A[2][4]+A[1][1]*A[3][3]*A[4][2]*A[2][0]*A[0][4]+A[1][1]*A[2][0]*A[0][3]*A[3][2]*A[4][4]-A[1][1]*A[4][3]*A[3][2]*A[2][0]*A[0][4]+A[1][1]*A[3][0]*A[0][2]*A[2][3]*A[4][4]+A[1][1]*A[4][3]*A[2][0]*A[0][2]*A[3][4];
-      double MapleGenVar2 = 
MapleGenVar3+A[1][1]*A[3][3]*A[4][0]*A[0][2]*A[2][4]-A[1][1]*A[4][2]*A[2][0]*A[0][3]*A[3][4]+A[1][1]*A[3][0]*A[0][3]*A[4][2]*A[2][4]-A[2][2]*A[4][3]*A[3][0]*A[0][1]*A[1][4]-A[0][0]*A[4][3]*A[1][2]*A[3][1]*A[2][4]-A[0][0]*A[4][1]*A[1][3]*A[3][2]*A[2][4]-A[2][2]*A[4][1]*A[1][0]*A[0][3]*A[3][4]+A[4][1]*A[1][0]*A[0][3]*A[3][2]*A[2][4]-A[2][2]*A[3][3]*A[1][0]*A[0][1]*A[4][4]-A[2][0]*A[0][1]*A[1][3]*A[3][2]*A[4][4]+A[4][3]*A[3][2]*A[2][0]*A[0][1]*A[1][4]-A[2][0]*A[3][1]*A[0][3]*A[1][2]*A[4][4]-A[2][0]*A[0][3]*A[3][2]*A[4][1]*A[1][4]-A[3][0]*A[0][1]*A[1][2]*A[2][3]*A[4][4]+A[3][1]*A[1][3]*A[2][0]*A[0][2]*A[4][4];
-      MapleGenVar3 = 
MapleGenVar2-A[4][3]*A[2][0]*A[0][1]*A[1][2]*A[3][4]+A[4][1]*A[1][2]*A[2][3]*A[3][0]*A[0][4]-A[3][1]*A[1][2]*A[2][3]*A[4][0]*A[0][4]+A[3][0]*A[0][3]*A[1][2]*A[2][1]*A[4][4]-A[3][0]*A[0][3]*A[4][2]*A[2][1]*A[1][4]-A[3][1]*A[1][3]*A[4][2]*A[2][0]*A[0][4]-A[3][0]*A[0][2]*A[2][3]*A[4][1]*A[1][4]-A[1][0]*A[3][1]*A[0][2]*A[2][3]*A[4][4]-A[1][0]*A[3][1]*A[0][3]*A[4][2]*A[2][4]-A[3][0]*A[0][3]*A[4][1]*A[1][2]*A[2][4]-A[3][1]*A[1][3]*A[4][0]*A[0][2]*A[2][4]+A[4][3]*A[3][2]*A[2][1]*A[1][0]*A[0][4]+A[4][2]*A[1][3]*A[2][1]*A[3][0]*A[0][4]-A[1][0]*A[2][1]*A[0][3]*A[3][2]*A[4][4];
-      double MapleGenVar1 = 
MapleGenVar3-A[3][3]*A[4][0]*A[0][2]*A[2][1]*A[1][4]-A[3][3]*A[4][0]*A[0][1]*A[1][2]*A[2][4]+A[3][3]*A[4][2]*A[1][0]*A[0][1]*A[2][4]-A[3][3]*A[4][2]*A[2][0]*A[0][1]*A[1][4]-A[3][0]*A[2][1]*A[0][2]*A[1][3]*A[4][4]-A[3][0]*A[0][1]*A[1][3]*A[4][2]*A[2][4]+A[4][2]*A[2][3]*A[3][1]*A[1][0]*A[0][4]-A[4][2]*A[2][3]*A[1][0]*A[0][1]*A[3][4]+A[4][2]*A[2][3]*A[3][0]*A[0][1]*A[1][4]+A[4][0]*A[0][1]*A[1][3]*A[3][2]*A[2][4]+A[4][1]*A[1][2]*A[2][0]*A[0][3]*A[3][4]-A[4][3]*A[1][2]*A[2][1]*A[3][0]*A[0][4]-A[4][3]*A[1][0]*A[0][2]*A[2][1]*A[3][4]+A[4][3]*A[1][2]*A[3][1]*A[2][0]*A[0][4]+A[4][3]*A[3][0]*A[0][2]*A[2][1]*A[1][4]+A[3][3]*A[1][2]*A[2][1]*A[4][0]*A[0][4];
-      MapleGenVar3 = 
A[4][0]*A[0][2]*A[2][3]*A[3][1]*A[1][4]-A[4][0]*A[0][3]*A[1][2]*A[2][1]*A[3][4]+A[4][0]*A[0][3]*A[1][2]*A[3][1]*A[2][4]+A[4][0]*A[0][3]*A[3][2]*A[2][1]*A[1][4]+A[4][2]*A[2][0]*A[0][1]*A[1][3]*A[3][4]+A[4][1]*A[1][3]*A[3][0]*A[0][2]*A[2][4]-A[4][1]*A[1][3]*A[2][0]*A[0][2]*A[3][4]+A[3][3]*A[2][0]*A[0][1]*A[1][2]*A[4][4]+A[3][3]*A[2][0]*A[0][2]*A[4][1]*A[1][4]+A[3][3]*A[1][0]*A[0][2]*A[2][1]*A[4][4]-A[3][3]*A[4][1]*A[1][2]*A[2][0]*A[0][4]-A[3][3]*A[4][2]*A[2][1]*A[1][0]*A[0][4]+A[4][2]*A[1][0]*A[0][3]*A[2][1]*A[3][4]-A[2][1]*A[1][3]*A[3][2]*A[4][0]*A[0][4]+A[4][3]*A[1][0]*A[0][2]*A[3][1]*A[2][4];
-      MapleGenVar2 = 
MapleGenVar3+A[4][3]*A[3][0]*A[0][1]*A[1][2]*A[2][4]+A[4][0]*A[0][2]*A[1][3]*A[2][1]*A[3][4]-A[4][3]*A[3][2]*A[1][0]*A[0][1]*A[2][4]-A[4][3]*A[2][0]*A[0][2]*A[3][1]*A[1][4]+A[4][2]*A[2][0]*A[0][3]*A[3][1]*A[1][4]-A[3][3]*A[4][1]*A[1][0]*A[0][2]*A[2][4]+A[2][2]*A[3][3]*A[4][0]*A[0][1]*A[1][4]-A[2][3]*A[3][2]*A[4][1]*A[1][0]*A[0][4]+A[2][3]*A[3][2]*A[1][0]*A[0][1]*A[4][4]-A[2][3]*A[3][2]*A[4][0]*A[0][1]*A[1][4]+A[4][1]*A[1][3]*A[3][2]*A[2][0]*A[0][4]+A[2][2]*A[3][0]*A[0][3]*A[4][1]*A[1][4]+A[2][2]*A[4][3]*A[1][0]*A[0][1]*A[3][4]+A[2][2]*A[1][0]*A[3][1]*A[0][3]*A[4][4]+A[2][2]*A[3][1]*A[1][3]*A[4][0]*A[0][4];
-      MapleGenVar3 = 
A[2][2]*A[3][3]*A[4][1]*A[1][0]*A[0][4]-A[2][2]*A[4][1]*A[1][3]*A[3][0]*A[0][4]-A[2][2]*A[4][0]*A[0][3]*A[3][1]*A[1][4]-A[2][2]*A[4][0]*A[0][1]*A[1][3]*A[3][4]+A[2][2]*A[3][0]*A[0][1]*A[1][3]*A[4][4]-A[2][2]*A[4][3]*A[3][1]*A[1][0]*A[0][4]+A[4][0]*A[0][1]*A[1][2]*A[2][3]*A[3][4]+A[4][1]*A[1][0]*A[0][2]*A[2][3]*A[3][4]-A[0][0]*A[1][1]*A[2][2]*A[4][3]*A[3][4]+A[0][0]*A[1][1]*A[2][2]*A[3][3]*A[4][4]+A[0][0]*A[1][1]*A[4][2]*A[2][3]*A[3][4]-A[0][0]*A[1][1]*A[2][3]*A[3][2]*A[4][4]+A[0][0]*A[1][1]*A[4][3]*A[3][2]*A[2][4]-A[0][0]*A[1][1]*A[3][3]*A[4][2]*A[2][4]-A[0][0]*A[2][2]*A[3][1]*A[1][3]*A[4][4]+A[0][0]*A[2][2]*A[4][3]*A[3][1]*A[1][4];
-      double t0 = 
MapleGenVar3+A[0][0]*A[2][2]*A[4][1]*A[1][3]*A[3][4]-A[0][0]*A[2][2]*A[3][3]*A[4][1]*A[1][4]-A[0][0]*A[4][2]*A[2][3]*A[3][1]*A[1][4]-A[0][0]*A[4][1]*A[1][2]*A[2][3]*A[3][4]+A[0][0]*A[3][3]*A[4][2]*A[2][1]*A[1][4]+A[0][0]*A[2][3]*A[3][2]*A[4][1]*A[1][4]+A[0][0]*A[4][3]*A[1][2]*A[2][1]*A[3][4]-A[0][0]*A[3][3]*A[1][2]*A[2][1]*A[4][4]+A[0][0]*A[3][3]*A[4][1]*A[1][2]*A[2][4]-A[0][0]*A[4][3]*A[3][2]*A[2][1]*A[1][4]+A[0][0]*A[3][1]*A[1][2]*A[2][3]*A[4][4]+A[0][0]*A[3][1]*A[1][3]*A[4][2]*A[2][4]+A[0][0]*A[2][1]*A[1][3]*A[3][2]*A[4][4]-A[0][0]*A[4][2]*A[1][3]*A[2][1]*A[3][4]+MapleGenVar2+MapleGenVar1;
-       double idet = 1/t0;
-                                            t0 = 
-A[1][1]*A[2][2]*A[4][3]*A[3][4]+A[1][1]*A[2][2]*A[3][3]*A[4][4]+A[1][1]*A[4][2]*A[2][3]*A[3][4]-A[1][1]*A[2][3]*A[3][2]*A[4][4]+A[1][1]*A[4][3]*A[3][2]*A[2][4]-A[1][1]*A[3][3]*A[4][2]*A[2][4]-A[2][2]*A[3][1]*A[1][3]*A[4][4]+A[2][2]*A[4][3]*A[3][1]*A[1][4]+A[2][2]*A[4][1]*A[1][3]*A[3][4]-A[2][2]*A[3][3]*A[4][1]*A[1][4]-A[4][2]*A[2][3]*A[3][1]*A[1][4]-A[4][1]*A[1][2]*A[2][3]*A[3][4]+A[3][3]*A[4][2]*A[2][1]*A[1][4]+A[2][3]*A[3][2]*A[4][1]*A[1][4]-A[4][3]*A[1][2]*A[3][1]*A[2][4]+A[4][3]*A[1][2]*A[2][1]*A[3][4]-A[3][3]*A[1][2]*A[2][1]*A[4][4]-A[4][1]*A[1][3]*A[3][2]*A[2][4]+A[3][3]*A[4][1]*A[1][2]*A[2][4]-A[4][3]*A[3][2]*A[2][1]*A[1][4]+A[3][1]*A[1][2]*A[2][3]*A[4][4]+A[3][1]*A[1][3]*A[4][2]*A[2][4]+A[2][1]*A[1][3]*A[3][2]*A[4][4]-A[4][2]*A[1][3]*A[2][1]*A[3][4];
-       double i00 = t0*idet;
-                                                  t0 = 
A[4][4]*A[0][1]*A[2][3]*A[3][2]-A[0][4]*A[2][3]*A[3][2]*A[4][1]+A[2][2]*A[4][4]*A[3][1]*A[0][3]-A[4][4]*A[2][1]*A[0][3]*A[3][2]+A[3][3]*A[4][2]*A[2][4]*A[0][1]-A[4][3]*A[3][4]*A[2][1]*A[0][2]-A[4][4]*A[3][1]*A[0][2]*A[2][3]+A[2][2]*A[3][3]*A[0][4]*A[4][1]-A[4][2]*A[2][3]*A[3][4]*A[0][1]-A[2][2]*A[0][3]*A[3][4]*A[4][1]+A[0][4]*A[4][2]*A[2][3]*A[3][1]+A[0][4]*A[4][3]*A[2][1]*A[3][2]-A[2][2]*A[0][4]*A[4][3]*A[3][1]+A[3][3]*A[4][4]*A[2][1]*A[0][2]+A[0][2]*A[2][3]*A[3][4]*A[4][1]-A[3][3]*A[0][4]*A[4][2]*A[2][1]+A[0][3]*A[3][4]*A[4][2]*A[2][1]+A[2][2]*A[4][3]*A[3][4]*A[0][1]+A[0][2]*A[2][4]*A[4][3]*A[3][1]+A[0][3]*A[3][2]*A[2][4]*A[4][1]-A[2][2]*A[3][3]*A[4][4]*A[0][1]-A[4][3]*A[3][2]*A[2][4]*A[0][1]-A[4][2]*A[2][4]*A[3][1]*A[0][3]-A[3][3]*A[0][2]*A[2][4]*A[4][1];
-       double i01 = t0*idet;
-                                                  t0 = 
A[1][1]*A[3][3]*A[0][4]*A[4][2]-A[1][1]*A[3][3]*A[4][4]*A[0][2]-A[1][1]*A[0][3]*A[3][4]*A[4][2]-A[1][1]*A[0][4]*A[4][3]*A[3][2]+A[1][1]*A[4][4]*A[0][3]*A[3][2]+A[1][1]*A[4][3]*A[3][4]*A[0][2]-A[3][3]*A[0][1]*A[1][4]*A[4][2]-A[3][3]*A[0][4]*A[4][1]*A[1][2]+A[3][3]*A[4][1]*A[1][4]*A[0][2]+A[3][3]*A[4][4]*A[0][1]*A[1][2]-A[4][3]*A[3][4]*A[0][1]*A[1][2]-A[4][1]*A[1][3]*A[3][4]*A[0][2]+A[3][1]*A[1][3]*A[4][4]*A[0][2]+A[0][1]*A[1][3]*A[3][4]*A[4][2]-A[4][4]*A[0][1]*A[1][3]*A[3][2]+A[0][4]*A[4][3]*A[1][2]*A[3][1]-A[4][1]*A[1][4]*A[0][3]*A[3][2]+A[0][4]*A[4][1]*A[1][3]*A[3][2]-A[4][3]*A[3][1]*A[1][4]*A[0][2]+A[0][1]*A[1][4]*A[4][3]*A[3][2]-A[0][4]*A[3][1]*A[1][3]*A[4][2]+A[0][3]*A[3][4]*A[4][1]*A[1][2]-A[4][4]*A[3][1]*A[0][3]*A[1][2]+A[0][3]*A[3][1]*A[1][4]*A[4][2];
-       double i02 = t0*idet;
-                                                  t0 = 
-A[1][1]*A[2][2]*A[4][4]*A[0][3]+A[1][1]*A[2][2]*A[0][4]*A[4][3]-A[1][1]*A[0][4]*A[4][2]*A[2][3]+A[1][1]*A[4][2]*A[2][4]*A[0][3]-A[1][1]*A[0][2]*A[2][4]*A[4][3]+A[1][1]*A[4][4]*A[0][2]*A[2][3]+A[2][2]*A[4][1]*A[1][4]*A[0][3]-A[2][2]*A[0][1]*A[1][4]*A[4][3]-A[2][2]*A[0][4]*A[4][1]*A[1][3]+A[2][2]*A[4][4]*A[0][1]*A[1][3]+A[4][4]*A[2][1]*A[0][3]*A[1][2]+A[0][2]*A[2][1]*A[1][4]*A[4][3]-A[4][1]*A[1][4]*A[0][2]*A[2][3]-A[4][4]*A[0][1]*A[1][2]*A[2][3]+A[0][4]*A[4][2]*A[1][3]*A[2][1]-A[4][2]*A[2][4]*A[0][1]*A[1][3]-A[4][1]*A[1][2]*A[2][4]*A[0][3]-A[4][4]*A[2][1]*A[0][2]*A[1][3]-A[4][2]*A[2][1]*A[1][4]*A[0][3]+A[0][1]*A[1][4]*A[4][2]*A[2][3]-A[0][4]*A[1][2]*A[2][1]*A[4][3]+A[0][1]*A[1][2]*A[2][4]*A[4][3]+A[0][2]*A[2][4]*A[4][1]*A[1][3]+A[0][4]*A[4][1]*A[1][2]*A[2][3];
-       double i03 = t0*idet;
-                                                  t0 = 
A[1][1]*A[2][2]*A[0][3]*A[3][4]-A[1][1]*A[2][2]*A[3][3]*A[0][4]+A[1][1]*A[3][3]*A[0][2]*A[2][4]-A[1][1]*A[0][3]*A[3][2]*A[2][4]-A[1][1]*A[0][2]*A[2][3]*A[3][4]+A[1][1]*A[2][3]*A[3][2]*A[0][4]+A[2][2]*A[3][1]*A[1][3]*A[0][4]-A[2][2]*A[0][1]*A[1][3]*A[3][4]-A[2][2]*A[0][3]*A[3][1]*A[1][4]+A[2][2]*A[3][3]*A[0][1]*A[1][4]+A[0][2]*A[2][3]*A[3][1]*A[1][4]+A[3][3]*A[1][2]*A[2][1]*A[0][4]-A[3][3]*A[0][1]*A[1][2]*A[2][4]-A[3][3]*A[0][2]*A[2][1]*A[1][4]-A[2][3]*A[3][2]*A[0][1]*A[1][4]+A[0][3]*A[1][2]*A[3][1]*A[2][4]+A[0][3]*A[3][2]*A[2][1]*A[1][4]+A[2][1]*A[0][2]*A[1][3]*A[3][4]-A[2][1]*A[1][3]*A[3][2]*A[0][4]-A[3][1]*A[1][3]*A[0][2]*A[2][4]-A[3][1]*A[1][2]*A[2][3]*A[0][4]+A[0][1]*A[1][3]*A[3][2]*A[2][4]+A[0][1]*A[1][2]*A[2][3]*A[3][4]-A[0][3]*A[1][2]*A[2][1]*A[3][4];
-       double i04 = t0*idet;
-                                                  t0 = 
-A[2][2]*A[1][4]*A[4][3]*A[3][0]-A[2][2]*A[3][3]*A[4][4]*A[1][0]-A[4][4]*A[2][0]*A[1][3]*A[3][2]+A[1][4]*A[4][3]*A[2][0]*A[3][2]-A[4][4]*A[3][0]*A[1][2]*A[2][3]-A[4][3]*A[3][4]*A[2][0]*A[1][2]-A[3][3]*A[1][2]*A[2][4]*A[4][0]+A[3][3]*A[4][2]*A[2][4]*A[1][0]-A[3][3]*A[1][4]*A[4][2]*A[2][0]-A[4][2]*A[2][4]*A[3][0]*A[1][3]-A[4][2]*A[2][3]*A[3][4]*A[1][0]+A[1][4]*A[4][2]*A[2][3]*A[3][0]+A[1][3]*A[3][2]*A[2][4]*A[4][0]+A[1][3]*A[3][4]*A[4][2]*A[2][0]+A[3][3]*A[4][4]*A[2][0]*A[1][2]+A[1][2]*A[2][4]*A[4][3]*A[3][0]-A[4][3]*A[3][2]*A[2][4]*A[1][0]+A[2][2]*A[3][3]*A[1][4]*A[4][0]+A[4][4]*A[1][0]*A[2][3]*A[3][2]-A[1][4]*A[2][3]*A[3][2]*A[4][0]+A[2][2]*A[4][3]*A[3][4]*A[1][0]-A[2][2]*A[1][3]*A[3][4]*A[4][0]+A[2][2]*A[4][4]*A[3][0]*A[1][3]+A[1][2]*A[2][3]*A[3][4]*A[4][0];
-       double i10 = t0*idet;
-                                                  t0 = 
A[0][0]*A[2][2]*A[4][4]*A[3][3]-A[0][0]*A[2][2]*A[4][3]*A[3][4]-A[0][0]*A[4][2]*A[2][4]*A[3][3]-A[0][0]*A[4][4]*A[2][3]*A[3][2]+A[0][0]*A[4][3]*A[3][2]*A[2][4]+A[0][0]*A[4][2]*A[2][3]*A[3][4]-A[2][2]*A[4][0]*A[0][4]*A[3][3]-A[2][2]*A[3][0]*A[0][3]*A[4][4]+A[2][2]*A[4][3]*A[3][0]*A[0][4]+A[2][2]*A[4][0]*A[0][3]*A[3][4]-A[3][3]*A[2][0]*A[0][2]*A[4][4]+A[3][3]*A[4][0]*A[0][2]*A[2][4]+A[3][3]*A[4][2]*A[2][0]*A[0][4]+A[2][0]*A[0][3]*A[3][2]*A[4][4]-A[4][0]*A[0][3]*A[3][2]*A[2][4]-A[4][3]*A[3][2]*A[2][0]*A[0][4]+A[3][0]*A[0][2]*A[2][3]*A[4][4]-A[4][3]*A[3][0]*A[0][2]*A[2][4]-A[4][0]*A[0][2]*A[2][3]*A[3][4]-A[4][2]*A[2][3]*A[3][0]*A[0][4]-A[4][2]*A[2][0]*A[0][3]*A[3][4]+A[4][3]*A[2][0]*A[0][2]*A[3][4]+A[3][0]*A[0][3]*A[4][2]*A[2][4]+A[4][0]*A[0][4]*A[2][3]*A[3][2];
-       double i11 = t0*idet;
-                                                  t0 = 
A[0][0]*A[3][3]*A[1][4]*A[4][2]-A[0][0]*A[3][3]*A[4][4]*A[1][2]-A[0][0]*A[1][4]*A[4][3]*A[3][2]+A[0][0]*A[4][4]*A[1][3]*A[3][2]-A[0][0]*A[1][3]*A[3][4]*A[4][2]+A[0][0]*A[4][3]*A[3][4]*A[1][2]+A[3][3]*A[4][0]*A[0][4]*A[1][2]-A[3][3]*A[1][0]*A[0][4]*A[4][2]+A[3][3]*A[4][4]*A[1][0]*A[0][2]-A[3][3]*A[1][4]*A[4][0]*A[0][2]-A[4][3]*A[3][4]*A[1][0]*A[0][2]+A[1][0]*A[0][3]*A[3][4]*A[4][2]+A[1][4]*A[4][3]*A[3][0]*A[0][2]+A[1][4]*A[4][0]*A[0][3]*A[3][2]-A[4][3]*A[3][0]*A[0][4]*A[1][2]+A[1][3]*A[3][0]*A[0][4]*A[4][2]-A[1][4]*A[3][0]*A[0][3]*A[4][2]+A[3][0]*A[0][3]*A[4][4]*A[1][2]+A[1][0]*A[0][4]*A[4][3]*A[3][2]+A[1][3]*A[3][4]*A[4][0]*A[0][2]-A[4][0]*A[0][4]*A[1][3]*A[3][2]-A[4][0]*A[0][3]*A[3][4]*A[1][2]-A[4][4]*A[1][0]*A[0][3]*A[3][2]-A[4][4]*A[3][0]*A[0][2]*A[1][3];
-       double i12 = t0*idet;
-                                                  t0 = 
-A[0][0]*A[2][2]*A[4][4]*A[1][3]+A[0][0]*A[2][2]*A[1][4]*A[4][3]+A[0][0]*A[4][2]*A[2][4]*A[1][3]-A[0][0]*A[1][4]*A[4][2]*A[2][3]-A[0][0]*A[1][2]*A[2][4]*A[4][3]+A[0][0]*A[4][4]*A[1][2]*A[2][3]+A[2][2]*A[4][0]*A[0][4]*A[1][3]-A[2][2]*A[1][0]*A[0][4]*A[4][3]+A[2][2]*A[4][4]*A[1][0]*A[0][3]-A[2][2]*A[1][4]*A[4][0]*A[0][3]+A[2][0]*A[0][2]*A[4][4]*A[1][3]-A[4][4]*A[2][0]*A[0][3]*A[1][2]-A[4][0]*A[0][2]*A[2][4]*A[1][3]+A[1][2]*A[2][4]*A[4][0]*A[0][3]-A[4][2]*A[2][4]*A[1][0]*A[0][3]-A[4][0]*A[0][4]*A[1][2]*A[2][3]+A[1][0]*A[0][2]*A[2][4]*A[4][3]-A[4][4]*A[1][0]*A[0][2]*A[2][3]+A[1][2]*A[2][0]*A[0][4]*A[4][3]+A[1][4]*A[4][0]*A[0][2]*A[2][3]+A[1][4]*A[4][2]*A[2][0]*A[0][3]+A[1][0]*A[0][4]*A[4][2]*A[2][3]-A[1][4]*A[2][0]*A[0][2]*A[4][3]-A[4][2]*A[2][0]*A[0][4]*A[1][3];
-       double i13 = t0*idet;
-                                                  t0 = 
-A[0][0]*A[2][2]*A[3][3]*A[1][4]+A[0][0]*A[2][2]*A[1][3]*A[3][4]+A[0][0]*A[3][3]*A[1][2]*A[2][4]-A[0][0]*A[1][3]*A[3][2]*A[2][4]+A[0][0]*A[2][3]*A[3][2]*A[1][4]-A[0][0]*A[1][2]*A[2][3]*A[3][4]+A[2][2]*A[3][3]*A[1][0]*A[0][4]+A[2][2]*A[3][0]*A[0][3]*A[1][4]-A[2][2]*A[1][3]*A[3][0]*A[0][4]-A[2][2]*A[1][0]*A[0][3]*A[3][4]-A[3][3]*A[1][2]*A[2][0]*A[0][4]+A[3][3]*A[2][0]*A[0][2]*A[1][4]-A[3][3]*A[1][0]*A[0][2]*A[2][4]-A[3][0]*A[0][2]*A[2][3]*A[1][4]-A[3][0]*A[0][3]*A[1][2]*A[2][4]+A[1][2]*A[2][3]*A[3][0]*A[0][4]+A[1][3]*A[3][0]*A[0][2]*A[2][4]+A[2][0]*A[0][3]*A[1][2]*A[3][4]+A[1][0]*A[0][2]*A[2][3]*A[3][4]+A[1][3]*A[3][2]*A[2][0]*A[0][4]-A[2][3]*A[3][2]*A[1][0]*A[0][4]-A[2][0]*A[0][3]*A[3][2]*A[1][4]-A[1][3]*A[2][0]*A[0][2]*A[3][4]+A[1][0]*A[0][3]*A[3][2]*A[2][4];
-       double i14 = t0*idet;
-                                                  t0 = 
-A[1][1]*A[3][3]*A[4][4]*A[2][0]+A[1][1]*A[3][3]*A[2][4]*A[4][0]-A[1][1]*A[2][4]*A[4][3]*A[3][0]-A[1][1]*A[2][3]*A[3][4]*A[4][0]+A[1][1]*A[4][4]*A[3][0]*A[2][3]+A[1][1]*A[4][3]*A[3][4]*A[2][0]-A[3][3]*A[2][1]*A[1][4]*A[4][0]+A[3][3]*A[4][1]*A[1][4]*A[2][0]+A[3][3]*A[4][4]*A[1][0]*A[2][1]-A[3][3]*A[2][4]*A[1][0]*A[4][1]+A[2][3]*A[3][4]*A[1][0]*A[4][1]-A[4][4]*A[1][0]*A[2][3]*A[3][1]+A[2][4]*A[4][1]*A[1][3]*A[3][0]+A[1][3]*A[2][1]*A[3][4]*A[4][0]+A[3][1]*A[1][3]*A[4][4]*A[2][0]-A[4][1]*A[1][4]*A[3][0]*A[2][3]-A[4][4]*A[3][0]*A[1][3]*A[2][1]+A[2][3]*A[3][1]*A[1][4]*A[4][0]+A[2][1]*A[1][4]*A[4][3]*A[3][0]-A[4][3]*A[3][1]*A[1][4]*A[2][0]-A[4][1]*A[1][3]*A[3][4]*A[2][0]+A[2][4]*A[4][3]*A[1][0]*A[3][1]-A[4][3]*A[3][4]*A[1][0]*A[2][1]-A[2][4]*A[3][1]*A[1][3]*A[4][0];
-       double i20 = t0*idet;
-                                                  t0 = 
-A[0][0]*A[3][3]*A[4][4]*A[2][1]-A[2][4]*A[3][0]*A[0][3]*A[4][1]-A[3][3]*A[2][4]*A[4][0]*A[0][1]-A[0][0]*A[2][3]*A[3][4]*A[4][1]+A[2][0]*A[0][4]*A[4][3]*A[3][1]+A[0][0]*A[4][3]*A[3][4]*A[2][1]+A[3][3]*A[4][4]*A[2][0]*A[0][1]+A[0][0]*A[3][3]*A[2][4]*A[4][1]+A[2][0]*A[0][3]*A[3][4]*A[4][1]+A[0][0]*A[4][4]*A[2][3]*A[3][1]+A[2][4]*A[4][3]*A[3][0]*A[0][1]+A[3][3]*A[4][0]*A[0][4]*A[2][1]-A[4][0]*A[0][3]*A[3][4]*A[2][1]-A[4][4]*A[2][0]*A[0][3]*A[3][1]+A[2][4]*A[4][0]*A[0][3]*A[3][1]-A[4][4]*A[3][0]*A[0][1]*A[2][3]-A[4][3]*A[3][0]*A[0][4]*A[2][1]-A[4][3]*A[3][4]*A[2][0]*A[0][1]+A[2][3]*A[3][0]*A[0][4]*A[4][1]-A[4][0]*A[0][4]*A[2][3]*A[3][1]+A[3][0]*A[0][3]*A[4][4]*A[2][1]-A[3][3]*A[2][0]*A[0][4]*A[4][1]-A[0][0]*A[2][4]*A[4][3]*A[3][1]+A[2][3]*A[3][4]*A[4][0]*A[0][1];
-       double i21 = t0*idet;
-                                                  t0 = 
A[0][0]*A[1][1]*A[4][4]*A[3][3]-A[0][0]*A[1][1]*A[4][3]*A[3][4]-A[0][0]*A[4][1]*A[1][4]*A[3][3]-A[0][0]*A[4][4]*A[1][3]*A[3][1]+A[0][0]*A[4][1]*A[1][3]*A[3][4]+A[0][0]*A[4][3]*A[3][1]*A[1][4]-A[1][1]*A[4][0]*A[0][4]*A[3][3]-A[1][1]*A[3][0]*A[0][3]*A[4][4]+A[1][1]*A[4][3]*A[3][0]*A[0][4]+A[1][1]*A[4][0]*A[0][3]*A[3][4]-A[3][3]*A[1][0]*A[0][1]*A[4][4]+A[3][3]*A[4][1]*A[1][0]*A[0][4]+A[3][3]*A[4][0]*A[0][1]*A[1][4]-A[4][3]*A[3][1]*A[1][0]*A[0][4]+A[3][0]*A[0][3]*A[4][1]*A[1][4]-A[4][1]*A[1][0]*A[0][3]*A[3][4]+A[4][0]*A[0][4]*A[1][3]*A[3][1]+A[3][0]*A[0][1]*A[1][3]*A[4][4]-A[4][0]*A[0][3]*A[3][1]*A[1][4]-A[4][3]*A[3][0]*A[0][1]*A[1][4]+A[1][0]*A[3][1]*A[0][3]*A[4][4]-A[4][0]*A[0][1]*A[1][3]*A[3][4]-A[4][1]*A[1][3]*A[3][0]*A[0][4]+A[4][3]*A[1][0]*A[0][1]*A[3][4];
-       double i22 = t0*idet;
-                                                  t0 = 
-A[0][0]*A[1][1]*A[4][4]*A[2][3]+A[0][0]*A[1][1]*A[2][4]*A[4][3]-A[0][0]*A[2][4]*A[4][1]*A[1][3]-A[0][0]*A[2][1]*A[1][4]*A[4][3]+A[0][0]*A[4][1]*A[1][4]*A[2][3]+A[0][0]*A[4][4]*A[1][3]*A[2][1]-A[1][1]*A[2][0]*A[0][4]*A[4][3]+A[1][1]*A[4][4]*A[2][0]*A[0][3]-A[1][1]*A[2][4]*A[4][0]*A[0][3]+A[1][1]*A[4][0]*A[0][4]*A[2][3]-A[4][1]*A[1][4]*A[2][0]*A[0][3]-A[2][4]*A[1][0]*A[0][1]*A[4][3]-A[4][0]*A[0][1]*A[1][4]*A[2][3]+A[2][1]*A[1][4]*A[4][0]*A[0][3]+A[2][0]*A[0][4]*A[4][1]*A[1][3]+A[2][1]*A[1][0]*A[0][4]*A[4][3]+A[2][0]*A[0][1]*A[1][4]*A[4][3]-A[4][4]*A[1][0]*A[0][3]*A[2][1]-A[4][4]*A[2][0]*A[0][1]*A[1][3]-A[4][0]*A[0][4]*A[1][3]*A[2][1]+A[2][4]*A[4][0]*A[0][1]*A[1][3]-A[4][1]*A[1][0]*A[0][4]*A[2][3]+A[1][0]*A[0][1]*A[4][4]*A[2][3]+A[2][4]*A[4][1]*A[1][0]*A[0][3];
-       double i23 = t0*idet;
-                                                  t0 = 
-A[0][0]*A[1][1]*A[3][3]*A[2][4]+A[0][0]*A[1][1]*A[2][3]*A[3][4]+A[0][0]*A[3][3]*A[2][1]*A[1][4]-A[0][0]*A[2][3]*A[3][1]*A[1][4]-A[0][0]*A[1][3]*A[2][1]*A[3][4]+A[0][0]*A[3][1]*A[1][3]*A[2][4]+A[1][1]*A[3][3]*A[2][0]*A[0][4]-A[1][1]*A[2][0]*A[0][3]*A[3][4]+A[1][1]*A[3][0]*A[0][3]*A[2][4]-A[1][1]*A[2][3]*A[3][0]*A[0][4]+A[3][3]*A[1][0]*A[0][1]*A[2][4]-A[3][3]*A[2][0]*A[0][1]*A[1][4]-A[3][3]*A[2][1]*A[1][0]*A[0][4]-A[1][0]*A[3][1]*A[0][3]*A[2][4]+A[2][0]*A[0][3]*A[3][1]*A[1][4]-A[3][1]*A[1][3]*A[2][0]*A[0][4]+A[2][0]*A[0][1]*A[1][3]*A[3][4]+A[2][3]*A[3][1]*A[1][0]*A[0][4]-A[2][3]*A[1][0]*A[0][1]*A[3][4]+A[1][3]*A[2][1]*A[3][0]*A[0][4]-A[3][0]*A[0][1]*A[1][3]*A[2][4]-A[3][0]*A[0][3]*A[2][1]*A[1][4]+A[2][3]*A[3][0]*A[0][1]*A[1][4]+A[1][0]*A[0][3]*A[2][1]*A[3][4];
-       double i24 = t0*idet;
-                                                  t0 = 
A[1][1]*A[2][2]*A[3][4]*A[4][0]-A[1][1]*A[2][2]*A[4][4]*A[3][0]-A[1][1]*A[3][4]*A[4][2]*A[2][0]-A[1][1]*A[3][2]*A[2][4]*A[4][0]+A[1][1]*A[4][4]*A[2][0]*A[3][2]+A[1][1]*A[4][2]*A[2][4]*A[3][0]-A[2][2]*A[3][1]*A[1][4]*A[4][0]-A[2][2]*A[3][4]*A[1][0]*A[4][1]+A[2][2]*A[4][4]*A[1][0]*A[3][1]+A[2][2]*A[4][1]*A[1][4]*A[3][0]-A[4][1]*A[1][4]*A[2][0]*A[3][2]-A[4][4]*A[2][0]*A[1][2]*A[3][1]+A[3][4]*A[4][2]*A[1][0]*A[2][1]+A[3][2]*A[2][4]*A[1][0]*A[4][1]+A[4][4]*A[3][0]*A[1][2]*A[2][1]-A[4][2]*A[2][4]*A[1][0]*A[3][1]-A[4][1]*A[1][2]*A[2][4]*A[3][0]+A[1][2]*A[3][1]*A[2][4]*A[4][0]-A[4][4]*A[1][0]*A[2][1]*A[3][2]+A[3][1]*A[1][4]*A[4][2]*A[2][0]+A[3][2]*A[2][1]*A[1][4]*A[4][0]+A[3][4]*A[4][1]*A[1][2]*A[2][0]-A[4][2]*A[2][1]*A[1][4]*A[3][0]-A[3][4]*A[1][2]*A[2][1]*A[4][0];
-       double i30 = t0*idet;
-                                                  t0 = 
-A[0][0]*A[2][2]*A[4][4]*A[3][1]+A[0][0]*A[2][2]*A[3][4]*A[4][1]+A[0][0]*A[4][4]*A[2][1]*A[3][2]-A[0][0]*A[3][2]*A[2][4]*A[4][1]+A[0][0]*A[4][2]*A[2][4]*A[3][1]-A[0][0]*A[3][4]*A[4][2]*A[2][1]-A[2][2]*A[3][4]*A[4][0]*A[0][1]+A[2][2]*A[4][0]*A[0][4]*A[3][1]-A[2][2]*A[3][0]*A[0][4]*A[4][1]+A[2][2]*A[4][4]*A[3][0]*A[0][1]-A[3][4]*A[2][0]*A[0][2]*A[4][1]-A[4][0]*A[0][4]*A[2][1]*A[3][2]-A[4][4]*A[2][0]*A[0][1]*A[3][2]-A[4][2]*A[2][4]*A[3][0]*A[0][1]+A[2][0]*A[0][2]*A[4][4]*A[3][1]-A[4][0]*A[0][2]*A[2][4]*A[3][1]-A[4][2]*A[2][0]*A[0][4]*A[3][1]+A[3][2]*A[2][4]*A[4][0]*A[0][1]-A[4][4]*A[3][0]*A[0][2]*A[2][1]+A[3][4]*A[4][2]*A[2][0]*A[0][1]+A[3][2]*A[2][0]*A[0][4]*A[4][1]+A[3][0]*A[0][2]*A[2][4]*A[4][1]+A[3][4]*A[4][0]*A[0][2]*A[2][1]+A[3][0]*A[0][4]*A[4][2]*A[2][1];
-       double i31 = t0*idet;
-                                                  t0 = 
-A[0][0]*A[1][1]*A[4][4]*A[3][2]+A[0][0]*A[1][1]*A[3][4]*A[4][2]+A[0][0]*A[4][4]*A[1][2]*A[3][1]-A[0][0]*A[3][1]*A[1][4]*A[4][2]+A[0][0]*A[4][1]*A[1][4]*A[3][2]-A[0][0]*A[3][4]*A[4][1]*A[1][2]-A[1][1]*A[3][4]*A[4][0]*A[0][2]-A[1][1]*A[3][0]*A[0][4]*A[4][2]+A[1][1]*A[4][0]*A[0][4]*A[3][2]+A[1][1]*A[4][4]*A[3][0]*A[0][2]+A[3][4]*A[4][1]*A[1][0]*A[0][2]+A[3][0]*A[0][1]*A[1][4]*A[4][2]-A[4][1]*A[1][4]*A[3][0]*A[0][2]+A[3][4]*A[4][0]*A[0][1]*A[1][2]+A[3][0]*A[0][4]*A[4][1]*A[1][2]-A[3][4]*A[1][0]*A[0][1]*A[4][2]-A[4][0]*A[0][4]*A[1][2]*A[3][1]+A[1][0]*A[0][1]*A[4][4]*A[3][2]-A[4][0]*A[0][1]*A[1][4]*A[3][2]+A[3][1]*A[1][0]*A[0][4]*A[4][2]-A[4][4]*A[1][0]*A[0][2]*A[3][1]-A[4][4]*A[3][0]*A[0][1]*A[1][2]+A[3][1]*A[1][4]*A[4][0]*A[0][2]-A[4][1]*A[1][0]*A[0][4]*A[3][2];
-       double i32 = t0*idet;
-                                                  t0 = 
A[0][0]*A[1][1]*A[4][4]*A[2][2]-A[0][0]*A[1][1]*A[4][2]*A[2][4]-A[0][0]*A[4][1]*A[1][4]*A[2][2]+A[0][0]*A[4][1]*A[1][2]*A[2][4]+A[0][0]*A[4][2]*A[2][1]*A[1][4]-A[0][0]*A[1][2]*A[2][1]*A[4][4]-A[1][1]*A[4][0]*A[0][4]*A[2][2]-A[1][1]*A[2][0]*A[0][2]*A[4][4]+A[1][1]*A[4][0]*A[0][2]*A[2][4]+A[1][1]*A[4][2]*A[2][0]*A[0][4]-A[2][2]*A[1][0]*A[0][1]*A[4][4]+A[2][2]*A[4][1]*A[1][0]*A[0][4]+A[2][2]*A[4][0]*A[0][1]*A[1][4]+A[4][2]*A[1][0]*A[0][1]*A[2][4]-A[4][0]*A[0][1]*A[1][2]*A[2][4]-A[4][2]*A[2][1]*A[1][0]*A[0][4]-A[4][0]*A[0][2]*A[2][1]*A[1][4]+A[2][0]*A[0][1]*A[1][2]*A[4][4]+A[1][2]*A[2][1]*A[4][0]*A[0][4]-A[4][1]*A[1][0]*A[0][2]*A[2][4]+A[2][0]*A[0][2]*A[4][1]*A[1][4]-A[4][2]*A[2][0]*A[0][1]*A[1][4]+A[1][0]*A[0][2]*A[2][1]*A[4][4]-A[4][1]*A[1][2]*A[2][0]*A[0][4];
-       double i33 = t0*idet;
-                                                  t0 = 
-A[0][0]*A[1][1]*A[2][2]*A[3][4]+A[0][0]*A[1][1]*A[3][2]*A[2][4]+A[0][0]*A[2][2]*A[3][1]*A[1][4]+A[0][0]*A[1][2]*A[2][1]*A[3][4]-A[0][0]*A[1][2]*A[3][1]*A[2][4]-A[0][0]*A[3][2]*A[2][1]*A[1][4]+A[1][1]*A[2][2]*A[3][0]*A[0][4]-A[1][1]*A[3][0]*A[0][2]*A[2][4]+A[1][1]*A[2][0]*A[0][2]*A[3][4]-A[1][1]*A[3][2]*A[2][0]*A[0][4]+A[2][2]*A[1][0]*A[0][1]*A[3][4]-A[2][2]*A[3][0]*A[0][1]*A[1][4]-A[2][2]*A[3][1]*A[1][0]*A[0][4]+A[3][0]*A[0][1]*A[1][2]*A[2][4]-A[2][0]*A[0][2]*A[3][1]*A[1][4]-A[1][0]*A[0][2]*A[2][1]*A[3][4]-A[2][0]*A[0][1]*A[1][2]*A[3][4]+A[3][2]*A[2][0]*A[0][1]*A[1][4]+A[1][2]*A[3][1]*A[2][0]*A[0][4]+A[3][0]*A[0][2]*A[2][1]*A[1][4]+A[1][0]*A[0][2]*A[3][1]*A[2][4]+A[3][2]*A[2][1]*A[1][0]*A[0][4]-A[1][2]*A[2][1]*A[3][0]*A[0][4]-A[3][2]*A[1][0]*A[0][1]*A[2][4];
-       double i34 = t0*idet;
-                                                  t0 = 
A[1][1]*A[2][2]*A[4][3]*A[3][0]-A[1][1]*A[2][2]*A[3][3]*A[4][0]-A[1][1]*A[4][3]*A[2][0]*A[3][2]-A[1][1]*A[4][2]*A[2][3]*A[3][0]+A[1][1]*A[3][3]*A[4][2]*A[2][0]+A[1][1]*A[2][3]*A[3][2]*A[4][0]-A[2][2]*A[4][3]*A[1][0]*A[3][1]+A[2][2]*A[3][3]*A[1][0]*A[4][1]+A[2][2]*A[3][1]*A[1][3]*A[4][0]-A[2][2]*A[4][1]*A[1][3]*A[3][0]-A[3][3]*A[4][2]*A[1][0]*A[2][1]+A[4][3]*A[1][0]*A[2][1]*A[3][2]+A[4][3]*A[2][0]*A[1][2]*A[3][1]+A[4][1]*A[1][2]*A[2][3]*A[3][0]+A[4][1]*A[1][3]*A[2][0]*A[3][2]-A[3][3]*A[4][1]*A[1][2]*A[2][0]+A[3][3]*A[1][2]*A[2][1]*A[4][0]-A[2][3]*A[3][2]*A[1][0]*A[4][1]-A[2][1]*A[1][3]*A[3][2]*A[4][0]-A[3][1]*A[1][3]*A[4][2]*A[2][0]-A[4][3]*A[3][0]*A[1][2]*A[2][1]+A[4][2]*A[2][3]*A[1][0]*A[3][1]-A[3][1]*A[1][2]*A[2][3]*A[4][0]+A[4][2]*A[1][3]*A[2][1]*A[3][0];
-       double i40 = t0*idet;
-                                                  t0 = 
-A[0][0]*A[2][2]*A[3][3]*A[4][1]+A[0][0]*A[2][2]*A[4][3]*A[3][1]-A[0][0]*A[4][3]*A[2][1]*A[3][2]-A[0][0]*A[4][2]*A[2][3]*A[3][1]+A[0][0]*A[3][3]*A[4][2]*A[2][1]+A[0][0]*A[2][3]*A[3][2]*A[4][1]-A[2][2]*A[4][0]*A[0][3]*A[3][1]+A[2][2]*A[3][0]*A[0][3]*A[4][1]-A[2][2]*A[4][3]*A[3][0]*A[0][1]+A[2][2]*A[3][3]*A[4][0]*A[0][1]+A[4][3]*A[3][0]*A[0][2]*A[2][1]-A[3][3]*A[4][0]*A[0][2]*A[2][1]+A[3][3]*A[2][0]*A[0][2]*A[4][1]+A[4][2]*A[2][0]*A[0][3]*A[3][1]+A[4][0]*A[0][3]*A[2][1]*A[3][2]-A[3][3]*A[4][2]*A[2][0]*A[0][1]-A[2][3]*A[3][2]*A[4][0]*A[0][1]+A[4][3]*A[2][0]*A[0][1]*A[3][2]-A[3][0]*A[0][3]*A[4][2]*A[2][1]+A[4][0]*A[0][2]*A[2][3]*A[3][1]-A[2][0]*A[0][3]*A[3][2]*A[4][1]-A[3][0]*A[0][2]*A[2][3]*A[4][1]-A[4][3]*A[2][0]*A[0][2]*A[3][1]+A[4][2]*A[2][3]*A[3][0]*A[0][1];
-       double i41 = t0*idet;
-                                                  t0 = 
A[0][0]*A[1][1]*A[4][3]*A[3][2]-A[0][0]*A[1][1]*A[3][3]*A[4][2]-A[0][0]*A[4][1]*A[1][3]*A[3][2]+A[0][0]*A[3][3]*A[4][1]*A[1][2]-A[0][0]*A[4][3]*A[1][2]*A[3][1]+A[0][0]*A[3][1]*A[1][3]*A[4][2]+A[1][1]*A[3][3]*A[4][0]*A[0][2]+A[1][1]*A[3][0]*A[0][3]*A[4][2]-A[1][1]*A[4][3]*A[3][0]*A[0][2]-A[1][1]*A[4][0]*A[0][3]*A[3][2]-A[3][3]*A[4][1]*A[1][0]*A[0][2]+A[4][0]*A[0][3]*A[1][2]*A[3][1]-A[1][0]*A[3][1]*A[0][3]*A[4][2]-A[3][3]*A[4][0]*A[0][1]*A[1][2]+A[3][3]*A[1][0]*A[0][1]*A[4][2]+A[4][3]*A[3][0]*A[0][1]*A[1][2]-A[3][0]*A[0][3]*A[4][1]*A[1][2]+A[4][1]*A[1][0]*A[0][3]*A[3][2]-A[3][0]*A[0][1]*A[1][3]*A[4][2]-A[3][1]*A[1][3]*A[4][0]*A[0][2]+A[4][1]*A[1][3]*A[3][0]*A[0][2]+A[4][3]*A[1][0]*A[0][2]*A[3][1]+A[4][0]*A[0][1]*A[1][3]*A[3][2]-A[4][3]*A[1][0]*A[0][1]*A[3][2];
-       double i42 = t0*idet;
-                                                  t0 = 
-A[0][0]*A[1][1]*A[2][2]*A[4][3]+A[0][0]*A[1][1]*A[4][2]*A[2][3]-A[0][0]*A[4][2]*A[1][3]*A[2][1]-A[0][0]*A[4][1]*A[1][2]*A[2][3]+A[0][0]*A[2][2]*A[4][1]*A[1][3]+A[0][0]*A[1][2]*A[2][1]*A[4][3]+A[1][1]*A[2][0]*A[0][2]*A[4][3]-A[1][1]*A[4][2]*A[2][0]*A[0][3]-A[1][1]*A[4][0]*A[0][2]*A[2][3]+A[1][1]*A[2][2]*A[4][0]*A[0][3]+A[4][2]*A[2][0]*A[0][1]*A[1][3]+A[4][1]*A[1][2]*A[2][0]*A[0][3]+A[4][0]*A[0][1]*A[1][2]*A[2][3]+A[4][1]*A[1][0]*A[0][2]*A[2][3]-A[2][2]*A[4][1]*A[1][0]*A[0][3]+A[2][2]*A[1][0]*A[0][1]*A[4][3]-A[2][2]*A[4][0]*A[0][1]*A[1][3]-A[1][2]*A[2][1]*A[4][0]*A[0][3]-A[1][0]*A[0][2]*A[2][1]*A[4][3]-A[2][0]*A[0][2]*A[4][1]*A[1][3]-A[2][0]*A[0][1]*A[1][2]*A[4][3]-A[4][2]*A[1][0]*A[0][1]*A[2][3]+A[4][2]*A[1][0]*A[0][3]*A[2][1]+A[4][0]*A[0][2]*A[1][3]*A[2][1];
-       double i43 = t0*idet;
-                                                  t0 = 
A[0][0]*A[1][1]*A[2][2]*A[3][3]-A[0][0]*A[1][1]*A[2][3]*A[3][2]-A[0][0]*A[2][1]*A[1][2]*A[3][3]+A[0][0]*A[2][1]*A[1][3]*A[3][2]+A[0][0]*A[3][1]*A[1][2]*A[2][3]-A[0][0]*A[3][1]*A[1][3]*A[2][2]-A[1][0]*A[0][1]*A[2][2]*A[3][3]+A[1][0]*A[0][1]*A[2][3]*A[3][2]+A[1][0]*A[2][1]*A[0][2]*A[3][3]-A[1][0]*A[2][1]*A[0][3]*A[3][2]-A[1][0]*A[3][1]*A[0][2]*A[2][3]+A[1][0]*A[3][1]*A[0][3]*A[2][2]+A[2][0]*A[0][1]*A[1][2]*A[3][3]-A[2][0]*A[0][1]*A[1][3]*A[3][2]-A[2][0]*A[1][1]*A[0][2]*A[3][3]+A[2][0]*A[1][1]*A[0][3]*A[3][2]+A[2][0]*A[3][1]*A[0][2]*A[1][3]-A[2][0]*A[3][1]*A[0][3]*A[1][2]-A[3][0]*A[0][1]*A[1][2]*A[2][3]+A[3][0]*A[0][1]*A[1][3]*A[2][2]+A[3][0]*A[1][1]*A[0][2]*A[2][3]-A[3][0]*A[1][1]*A[0][3]*A[2][2]-A[3][0]*A[2][1]*A[0][2]*A[1][3]+A[3][0]*A[2][1]*A[0][3]*A[1][2];
-       double i44 = t0*idet;
-       for(unsigned int i=0; i < x.num_cols(); i++)
-       {
-               x[0][i] = i00*b[0][i] + i01*b[1][i] + i02*b[2][i] + i03*b[3][i] 
+ i04*b[4][i];
-               x[1][i] = i10*b[0][i] + i11*b[1][i] + i12*b[2][i] + i13*b[3][i] 
+ i14*b[4][i];
-               x[2][i] = i20*b[0][i] + i21*b[1][i] + i22*b[2][i] + i23*b[3][i] 
+ i24*b[4][i];
-               x[3][i] = i30*b[0][i] + i31*b[1][i] + i32*b[2][i] + i33*b[3][i] 
+ i34*b[4][i];
-               x[4][i] = i40*b[0][i] + i41*b[1][i] + i42*b[2][i] + i43*b[3][i] 
+ i44*b[4][i];
-       }
-}
-static const int highest_solver= 5;

Index: doc/COPYING_FDL
===================================================================
RCS file: doc/COPYING_FDL
diff -N doc/COPYING_FDL
--- doc/COPYING_FDL     9 Jun 2005 09:33:53 -0000       1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,397 +0,0 @@
-               GNU Free Documentation License
-                 Version 1.2, November 2002
-
-
- Copyright (C) 2000,2001,2002  Free Software Foundation, Inc.
-     51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-0. PREAMBLE
-
-The purpose of this License is to make a manual, textbook, or other
-functional and useful document "free" in the sense of freedom: to
-assure everyone the effective freedom to copy and redistribute it,
-with or without modifying it, either commercially or noncommercially.
-Secondarily, this License preserves for the author and publisher a way
-to get credit for their work, while not being considered responsible
-for modifications made by others.
-
-This License is a kind of "copyleft", which means that derivative
-works of the document must themselves be free in the same sense.  It
-complements the GNU General Public License, which is a copyleft
-license designed for free software.
-
-We have designed this License in order to use it for manuals for free
-software, because free software needs free documentation: a free
-program should come with manuals providing the same freedoms that the
-software does.  But this License is not limited to software manuals;
-it can be used for any textual work, regardless of subject matter or
-whether it is published as a printed book.  We recommend this License
-principally for works whose purpose is instruction or reference.
-
-
-1. APPLICABILITY AND DEFINITIONS
-
-This License applies to any manual or other work, in any medium, that
-contains a notice placed by the copyright holder saying it can be
-distributed under the terms of this License.  Such a notice grants a
-world-wide, royalty-free license, unlimited in duration, to use that
-work under the conditions stated herein.  The "Document", below,
-refers to any such manual or work.  Any member of the public is a
-licensee, and is addressed as "you".  You accept the license if you
-copy, modify or distribute the work in a way requiring permission
-under copyright law.
-
-A "Modified Version" of the Document means any work containing the
-Document or a portion of it, either copied verbatim, or with
-modifications and/or translated into another language.
-
-A "Secondary Section" is a named appendix or a front-matter section of
-the Document that deals exclusively with the relationship of the
-publishers or authors of the Document to the Document's overall subject
-(or to related matters) and contains nothing that could fall directly
-within that overall subject.  (Thus, if the Document is in part a
-textbook of mathematics, a Secondary Section may not explain any
-mathematics.)  The relationship could be a matter of historical
-connection with the subject or with related matters, or of legal,
-commercial, philosophical, ethical or political position regarding
-them.
-
-The "Invariant Sections" are certain Secondary Sections whose titles
-are designated, as being those of Invariant Sections, in the notice
-that says that the Document is released under this License.  If a
-section does not fit the above definition of Secondary then it is not
-allowed to be designated as Invariant.  The Document may contain zero
-Invariant Sections.  If the Document does not identify any Invariant
-Sections then there are none.
-
-The "Cover Texts" are certain short passages of text that are listed,
-as Front-Cover Texts or Back-Cover Texts, in the notice that says that
-the Document is released under this License.  A Front-Cover Text may
-be at most 5 words, and a Back-Cover Text may be at most 25 words.
-
-A "Transparent" copy of the Document means a machine-readable copy,
-represented in a format whose specification is available to the
-general public, that is suitable for revising the document
-straightforwardly with generic text editors or (for images composed of
-pixels) generic paint programs or (for drawings) some widely available
-drawing editor, and that is suitable for input to text formatters or
-for automatic translation to a variety of formats suitable for input
-to text formatters.  A copy made in an otherwise Transparent file
-format whose markup, or absence of markup, has been arranged to thwart
-or discourage subsequent modification by readers is not Transparent.
-An image format is not Transparent if used for any substantial amount
-of text.  A copy that is not "Transparent" is called "Opaque".
-
-Examples of suitable formats for Transparent copies include plain
-ASCII without markup, Texinfo input format, LaTeX input format, SGML
-or XML using a publicly available DTD, and standard-conforming simple
-HTML, PostScript or PDF designed for human modification.  Examples of
-transparent image formats include PNG, XCF and JPG.  Opaque formats
-include proprietary formats that can be read and edited only by
-proprietary word processors, SGML or XML for which the DTD and/or
-processing tools are not generally available, and the
-machine-generated HTML, PostScript or PDF produced by some word
-processors for output purposes only.
-
-The "Title Page" means, for a printed book, the title page itself,
-plus such following pages as are needed to hold, legibly, the material
-this License requires to appear in the title page.  For works in
-formats which do not have any title page as such, "Title Page" means
-the text near the most prominent appearance of the work's title,
-preceding the beginning of the body of the text.
-
-A section "Entitled XYZ" means a named subunit of the Document whose
-title either is precisely XYZ or contains XYZ in parentheses following
-text that translates XYZ in another language.  (Here XYZ stands for a
-specific section name mentioned below, such as "Acknowledgements",
-"Dedications", "Endorsements", or "History".)  To "Preserve the Title"
-of such a section when you modify the Document means that it remains a
-section "Entitled XYZ" according to this definition.
-
-The Document may include Warranty Disclaimers next to the notice which
-states that this License applies to the Document.  These Warranty
-Disclaimers are considered to be included by reference in this
-License, but only as regards disclaiming warranties: any other
-implication that these Warranty Disclaimers may have is void and has
-no effect on the meaning of this License.
-
-
-2. VERBATIM COPYING
-
-You may copy and distribute the Document in any medium, either
-commercially or noncommercially, provided that this License, the
-copyright notices, and the license notice saying this License applies
-to the Document are reproduced in all copies, and that you add no other
-conditions whatsoever to those of this License.  You may not use
-technical measures to obstruct or control the reading or further
-copying of the copies you make or distribute.  However, you may accept
-compensation in exchange for copies.  If you distribute a large enough
-number of copies you must also follow the conditions in section 3.
-
-You may also lend copies, under the same conditions stated above, and
-you may publicly display copies.
-
-
-3. COPYING IN QUANTITY
-
-If you publish printed copies (or copies in media that commonly have
-printed covers) of the Document, numbering more than 100, and the
-Document's license notice requires Cover Texts, you must enclose the
-copies in covers that carry, clearly and legibly, all these Cover
-Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
-the back cover.  Both covers must also clearly and legibly identify
-you as the publisher of these copies.  The front cover must present
-the full title with all words of the title equally prominent and
-visible.  You may add other material on the covers in addition.
-Copying with changes limited to the covers, as long as they preserve
-the title of the Document and satisfy these conditions, can be treated
-as verbatim copying in other respects.
-
-If the required texts for either cover are too voluminous to fit
-legibly, you should put the first ones listed (as many as fit
-reasonably) on the actual cover, and continue the rest onto adjacent
-pages.
-
-If you publish or distribute Opaque copies of the Document numbering
-more than 100, you must either include a machine-readable Transparent
-copy along with each Opaque copy, or state in or with each Opaque copy
-a computer-network location from which the general network-using
-public has access to download using public-standard network protocols
-a complete Transparent copy of the Document, free of added material.
-If you use the latter option, you must take reasonably prudent steps,
-when you begin distribution of Opaque copies in quantity, to ensure
-that this Transparent copy will remain thus accessible at the stated
-location until at least one year after the last time you distribute an
-Opaque copy (directly or through your agents or retailers) of that
-edition to the public.
-
-It is requested, but not required, that you contact the authors of the
-Document well before redistributing any large number of copies, to give
-them a chance to provide you with an updated version of the Document.
-
-
-4. MODIFICATIONS
-
-You may copy and distribute a Modified Version of the Document under
-the conditions of sections 2 and 3 above, provided that you release
-the Modified Version under precisely this License, with the Modified
-Version filling the role of the Document, thus licensing distribution
-and modification of the Modified Version to whoever possesses a copy
-of it.  In addition, you must do these things in the Modified Version:
-
-A. Use in the Title Page (and on the covers, if any) a title distinct
-   from that of the Document, and from those of previous versions
-   (which should, if there were any, be listed in the History section
-   of the Document).  You may use the same title as a previous version
-   if the original publisher of that version gives permission.
-B. List on the Title Page, as authors, one or more persons or entities
-   responsible for authorship of the modifications in the Modified
-   Version, together with at least five of the principal authors of the
-   Document (all of its principal authors, if it has fewer than five),
-   unless they release you from this requirement.
-C. State on the Title page the name of the publisher of the
-   Modified Version, as the publisher.
-D. Preserve all the copyright notices of the Document.
-E. Add an appropriate copyright notice for your modifications
-   adjacent to the other copyright notices.
-F. Include, immediately after the copyright notices, a license notice
-   giving the public permission to use the Modified Version under the
-   terms of this License, in the form shown in the Addendum below.
-G. Preserve in that license notice the full lists of Invariant Sections
-   and required Cover Texts given in the Document's license notice.
-H. Include an unaltered copy of this License.
-I. Preserve the section Entitled "History", Preserve its Title, and add
-   to it an item stating at least the title, year, new authors, and
-   publisher of the Modified Version as given on the Title Page.  If
-   there is no section Entitled "History" in the Document, create one
-   stating the title, year, authors, and publisher of the Document as
-   given on its Title Page, then add an item describing the Modified
-   Version as stated in the previous sentence.
-J. Preserve the network location, if any, given in the Document for
-   public access to a Transparent copy of the Document, and likewise
-   the network locations given in the Document for previous versions
-   it was based on.  These may be placed in the "History" section.
-   You may omit a network location for a work that was published at
-   least four years before the Document itself, or if the original
-   publisher of the version it refers to gives permission.
-K. For any section Entitled "Acknowledgements" or "Dedications",
-   Preserve the Title of the section, and preserve in the section all
-   the substance and tone of each of the contributor acknowledgements
-   and/or dedications given therein.
-L. Preserve all the Invariant Sections of the Document,
-   unaltered in their text and in their titles.  Section numbers
-   or the equivalent are not considered part of the section titles.
-M. Delete any section Entitled "Endorsements".  Such a section
-   may not be included in the Modified Version.
-N. Do not retitle any existing section to be Entitled "Endorsements"
-   or to conflict in title with any Invariant Section.
-O. Preserve any Warranty Disclaimers.
-
-If the Modified Version includes new front-matter sections or
-appendices that qualify as Secondary Sections and contain no material
-copied from the Document, you may at your option designate some or all
-of these sections as invariant.  To do this, add their titles to the
-list of Invariant Sections in the Modified Version's license notice.
-These titles must be distinct from any other section titles.
-
-You may add a section Entitled "Endorsements", provided it contains
-nothing but endorsements of your Modified Version by various
-parties--for example, statements of peer review or that the text has
-been approved by an organization as the authoritative definition of a
-standard.
-
-You may add a passage of up to five words as a Front-Cover Text, and a
-passage of up to 25 words as a Back-Cover Text, to the end of the list
-of Cover Texts in the Modified Version.  Only one passage of
-Front-Cover Text and one of Back-Cover Text may be added by (or
-through arrangements made by) any one entity.  If the Document already
-includes a cover text for the same cover, previously added by you or
-by arrangement made by the same entity you are acting on behalf of,
-you may not add another; but you may replace the old one, on explicit
-permission from the previous publisher that added the old one.
-
-The author(s) and publisher(s) of the Document do not by this License
-give permission to use their names for publicity for or to assert or
-imply endorsement of any Modified Version.
-
-
-5. COMBINING DOCUMENTS
-
-You may combine the Document with other documents released under this
-License, under the terms defined in section 4 above for modified
-versions, provided that you include in the combination all of the
-Invariant Sections of all of the original documents, unmodified, and
-list them all as Invariant Sections of your combined work in its
-license notice, and that you preserve all their Warranty Disclaimers.
-
-The combined work need only contain one copy of this License, and
-multiple identical Invariant Sections may be replaced with a single
-copy.  If there are multiple Invariant Sections with the same name but
-different contents, make the title of each such section unique by
-adding at the end of it, in parentheses, the name of the original
-author or publisher of that section if known, or else a unique number.
-Make the same adjustment to the section titles in the list of
-Invariant Sections in the license notice of the combined work.
-
-In the combination, you must combine any sections Entitled "History"
-in the various original documents, forming one section Entitled
-"History"; likewise combine any sections Entitled "Acknowledgements",
-and any sections Entitled "Dedications".  You must delete all sections
-Entitled "Endorsements".
-
-
-6. COLLECTIONS OF DOCUMENTS
-
-You may make a collection consisting of the Document and other documents
-released under this License, and replace the individual copies of this
-License in the various documents with a single copy that is included in
-the collection, provided that you follow the rules of this License for
-verbatim copying of each of the documents in all other respects.
-
-You may extract a single document from such a collection, and distribute
-it individually under this License, provided you insert a copy of this
-License into the extracted document, and follow this License in all
-other respects regarding verbatim copying of that document.
-
-
-7. AGGREGATION WITH INDEPENDENT WORKS
-
-A compilation of the Document or its derivatives with other separate
-and independent documents or works, in or on a volume of a storage or
-distribution medium, is called an "aggregate" if the copyright
-resulting from the compilation is not used to limit the legal rights
-of the compilation's users beyond what the individual works permit.
-When the Document is included in an aggregate, this License does not
-apply to the other works in the aggregate which are not themselves
-derivative works of the Document.
-
-If the Cover Text requirement of section 3 is applicable to these
-copies of the Document, then if the Document is less than one half of
-the entire aggregate, the Document's Cover Texts may be placed on
-covers that bracket the Document within the aggregate, or the
-electronic equivalent of covers if the Document is in electronic form.
-Otherwise they must appear on printed covers that bracket the whole
-aggregate.
-
-
-8. TRANSLATION
-
-Translation is considered a kind of modification, so you may
-distribute translations of the Document under the terms of section 4.
-Replacing Invariant Sections with translations requires special
-permission from their copyright holders, but you may include
-translations of some or all Invariant Sections in addition to the
-original versions of these Invariant Sections.  You may include a
-translation of this License, and all the license notices in the
-Document, and any Warranty Disclaimers, provided that you also include
-the original English version of this License and the original versions
-of those notices and disclaimers.  In case of a disagreement between
-the translation and the original version of this License or a notice
-or disclaimer, the original version will prevail.
-
-If a section in the Document is Entitled "Acknowledgements",
-"Dedications", or "History", the requirement (section 4) to Preserve
-its Title (section 1) will typically require changing the actual
-title.
-
-
-9. TERMINATION
-
-You may not copy, modify, sublicense, or distribute the Document except
-as expressly provided for under this License.  Any other attempt to
-copy, modify, sublicense or distribute the Document is void, and will
-automatically terminate your rights under this License.  However,
-parties who have received copies, or rights, from you under this
-License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-
-10. FUTURE REVISIONS OF THIS LICENSE
-
-The Free Software Foundation may publish new, revised versions
-of the GNU Free Documentation License from time to time.  Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.  See
-http://www.gnu.org/copyleft/.
-
-Each version of the License is given a distinguishing version number.
-If the Document specifies that a particular numbered version of this
-License "or any later version" applies to it, you have the option of
-following the terms and conditions either of that specified version or
-of any later version that has been published (not as a draft) by the
-Free Software Foundation.  If the Document does not specify a version
-number of this License, you may choose any version ever published (not
-as a draft) by the Free Software Foundation.
-
-
-ADDENDUM: How to use this License for your documents
-
-To use this License in a document you have written, include a copy of
-the License in the document and put the following copyright and
-license notices just after the title page:
-
-    Copyright (c)  YEAR  YOUR NAME.
-    Permission is granted to copy, distribute and/or modify this document
-    under the terms of the GNU Free Documentation License, Version 1.2
-    or any later version published by the Free Software Foundation;
-    with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
-    A copy of the license is included in the section entitled "GNU
-    Free Documentation License".
-
-If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
-replace the "with...Texts." line with this:
-
-    with the Invariant Sections being LIST THEIR TITLES, with the
-    Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
-
-If you have Invariant Sections without Cover Texts, or some other
-combination of the three, merge those two alternatives to suit the
-situation.
-
-If your document contains nontrivial examples of program code, we
-recommend releasing these examples in parallel under your choice of
-free software license, such as the GNU General Public License,
-to permit their use in free software.

Index: doc/Makefile
===================================================================
RCS file: doc/Makefile
diff -N doc/Makefile
--- doc/Makefile        2 Jun 2005 15:17:15 -0000       1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,2 +0,0 @@
-docs:
-       doxygen Doxyfile

Index: doc/cramer.gnuplot
===================================================================
RCS file: doc/cramer.gnuplot
diff -N doc/cramer.gnuplot
--- doc/cramer.gnuplot  11 Dec 2009 14:27:01 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1 +0,0 @@
-; set xlabel "{/Symbol e}"; set ylabel "Error"; set logscale x 10; set 
logscale y 10; set terminal postscript eps color enhanced solid ; plot 
[1e-20:1] [*:*]  "out.txt" using 1:2  with line title "LAPACK LU", "out.txt" 
using 1:3  with line title "Gauss-Jordan", "out.txt" using 1:4  with line title 
"GR-SVD pesudoinverse", "out.txt" using 1:5  with line title "Gaussian 
elimination", "out.txt" using 1:6  with line title "Cramers's rule"

Index: doc/cramer.h
===================================================================
RCS file: doc/cramer.h
diff -N doc/cramer.h
--- doc/cramer.h        11 Dec 2009 14:27:01 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,128 +0,0 @@
-/**
-\page sCramerIsBad Speed, but not at the expense of accuracy.
-
-TooN aims to be a fast library, and may choose between one of several 
algorithms
-depending on the size of the arguments. However TooN will never substitute a
-fast but numerically inferior algorithm.  For example LU decomposition, 
Gaussian
-elimination and Gauss-Jordan reduction all have similar numerical properties 
for
-computing a matrix inverse. Direct inversino using Cramer's rule is
-significantly less stable, even for 3x3 matrices.
-
-The following code computes a matrix inverse of the ill conditioned matrix:
-\f[
-\begin{bmatrix}
-1  & 2 & 3 \\
-1  & 2 + \epsilon & 3 \\
-1  & 2  & 3 + \epsilon
-\end{bmatrix},
-\f]
-using LU decomposition, Gauss-Jordan, pseudo-inverse with singular value
-decomposition and with Cramer's rule. The error is computed as:
-\f[
-       \|A^{-1} A - I\|_{\text{fro}}
-\f]
-The code is:
-
address@hidden
-#include <TooN/TooN.h>
-#include <TooN/helpers.h>
-#include <TooN/LU.h>
-#include <TooN/GR_SVD.h>
-#include <TooN/gauss_jordan.h>
-#include <TooN/gaussian_elimination.h>
-#include <iomanip>
-using namespace TooN;
-using namespace std;
-Matrix<3> invert_cramer(const Matrix<3>& A)
-{
-       Matrix<3> i;
-       double t0 = 
A[0][0]*A[1][1]*A[2][2]-A[0][0]*A[1][2]*A[2][1]-A[1][0]*A[0][1]*A[2][2]+A[1][0]*A[0][2]*A[2][1]+A[2][0]*A[0][1]*A[1][2]-A[2][0]*A[0][2]*A[1][1];
-       double idet = 1/t0;
-       t0 = A[1][1]*A[2][2]-A[1][2]*A[2][1];
-       i[0][0] = t0*idet;
-       t0 = -A[0][1]*A[2][2]+A[0][2]*A[2][1];
-       i[0][1] = t0*idet;
-       t0 = A[0][1]*A[1][2]-A[0][2]*A[1][1];
-       i[0][2] = t0*idet;
-       t0 = -A[1][0]*A[2][2]+A[1][2]*A[2][0];
-       i[1][0] = t0*idet;
-       t0 = A[0][0]*A[2][2]-A[0][2]*A[2][0];
-       i[1][1] = t0*idet;
-       t0 = -A[0][0]*A[1][2]+A[0][2]*A[1][0];
-       i[1][2] = t0*idet;
-       t0 = A[1][0]*A[2][1]-A[1][1]*A[2][0];
-       i[2][0] = t0*idet;
-       t0 = -A[0][0]*A[2][1]+A[0][1]*A[2][0];
-       i[2][1] = t0*idet;
-       t0 = A[0][0]*A[1][1]-A[0][1]*A[1][0];
-       i[2][2] = t0*idet;
-
-       return i;
-}
-
-
-int main()
-{
-       Matrix<3> singular = Data(1, 2, 3,
-                                                         1, 2, 3,
-                                                         1, 2, 3);
-       
-       
-       for(double i=0; i < 1000; i++)
-       {
-               double delta = pow(0.9, i);     
-               
-               //Make a poorly conditioned matrix
-               Matrix<3> bad = singular;
-               bad[2][2] += delta;
-               bad[1][1] += delta;
-
-               
-               //Compute the inverse with LU decomposition
-               Matrix<3> linv;
-               LU<3> blu(bad);
-               linv = blu.get_inverse();
-
-               //Compute the inverse with Gauss-Jordan reduction
-               Matrix<3, 6> gj;
-               Matrix<3> ginv;
-               gj.slice<0,0,3,3>() = bad;
-               gj.slice<0,3,3,3>() = Identity;
-               gauss_jordan(gj);
-               ginv = gj.slice<0,3,3,3>();
-
-
-               //Compute the pseudo-inverse with singular value decomposition
-               GR_SVD<3,3> bsvd(bad);
-               Matrix<3> sinv = bsvd.get_pinv();
-
-
-               Matrix<3> I = Identity;
-               Matrix<3> einv = gaussian_elimination(bad, I);
-
-               Matrix<3> cinv = invert_cramer(bad);
-               
-               
-               double lerr = norm_fro(linv * bad + -1 * Identity);
-               double gerr = norm_fro(ginv * bad + -1 * Identity);
-               double serr = norm_fro(sinv * bad + -1 * Identity);
-               double cerr = norm_fro(cinv * bad + -1 * Identity);
-               double eerr = norm_fro(einv * bad + -1 * Identity);
-
-               cout << setprecision(15) << scientific << delta << " " << lerr 
<< " " << gerr << " " << serr << " " << eerr << " " << cerr << endl;
-
-
-
-       }
-
-
-}
address@hidden
-
-The direct inverse with Cramer's rule is about three times faster than the
-builtin routines. However, the numerical stability is considerably worse,
-giving errors 1e6 times higher in extreme cases:
-
-\image html cramer.png "Comparison of errors in matrix inverse"
-
-*/

Index: doc/cramer.png
===================================================================
RCS file: doc/cramer.png
diff -N doc/cramer.png
Binary files /tmp/cvsnJv7Vk and /dev/null differ

Index: doc/documentation.h
===================================================================
RCS file: doc/documentation.h
diff -N doc/documentation.h
--- doc/documentation.h 26 Feb 2010 19:11:06 -0000      1.47
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,955 +0,0 @@
-/*
-    Copyright (c) 2005 Paul Smith, 2009 Edward Rosten
-
-       Permission is granted to copy, distribute and/or modify this document 
under
-       the terms of the GNU Free Documentation License, Version 1.2 or any 
later
-       version published by the Free Software Foundation; with no Invariant
-       Sections, no Front-Cover Texts, and no Back-Cover Texts.
-
-    You should have received a copy of the GNU Free Documentation License
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc.
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-*/
-///////////////////////////////////////////////////////
-// General Doxygen documentation
-///////////////////////////////////////////////////////
-
-///////////////////////////////////////////////////////
-// The main title page
-/**
address@hidden
-
-\section sIntro Introduction
-
-The %TooN library is a set of C++ header files which provide basic numerics 
facilities:
-       - @link TooN::Vector address@hidden, @link TooN::Matrix address@hidden 
and @link gLinAlg etc @endlink
-       - @link gDecomps Matrix address@hidden
-       - @link gOptimize Function address@hidden
-       - @link gTransforms Parameterized matrices (eg transformations)@endlink 
-       - @link gEquations linear address@hidden
-       - @link gFunctions Functions (eg numerical derivatives) @endlink
-
-It provides classes for statically- (known at compile time) and dynamically-
-(unknown at compile time) sized vectors and matrices and it can delegate
-advanced functions (like large SVD or multiplication of large matrices) to
-LAPACK and BLAS (this means you will need libblas and liblapack).
-
-The library makes substantial internal use of templates to achieve run-time
-speed efficiency whilst retaining a clear programming syntax.
-
-Why use this library?
- - Because it supports statically sized vectors and matrices very efficiently.
- - Because it provides extensive type safety for statically sized vectors and 
matrices (you can't attempt to multiply a 3x4 matrix and a 2-vector).
- - Because it supports transposition, subscripting and slicing of matrices (to 
obtain a vector) very efficiently.
- - Because it interfaces well to other libraries.
- - Because it exploits LAPACK and BLAS (for which optimised versions exist on 
many platforms).
- - Because it is fast, \link sCramerIsBad but not at the expense of numerical 
stability. \endlink
-
-\section sUsage How to use TooN
-This section is arranged as a FAQ. Most answers include code fragments. Assume
-<code>using namespace TooN;</code>.
-
- - \ref sDownload
- - \ref sStart
- - \ref sWindowsErrors
- - \ref sCreateVector
- - \ref sCreateMatrix
- - \ref sFunctionVector
- - \ref sGenericCode
- - \ref sConst
- - \ref sElemOps
- - \ref sInitialize
- - \ref sScalars
- - \ref ssExamples
- - \ref sSTL
- - \ref sResize
- - \ref sDebug
- - \ref sSlices
- - \ref sFuncSlices
- - \ref sPrecision
- - \ref sSolveLinear
- - \ref sOtherStuff
- - \ref sHandyFuncs
- - \ref sNoInplace
- - \ref sColMajor
- - \ref sWrap
- - \ref sWrap "How do I interface to other libraries?"
- - \ref sImplementation
-
-       \subsection sDownload Getting the code and installing
-       
-       To get the code from cvs use:
-
-       cvs -z3 -d:pserver:address@hidden:/cvsroot/toon co TooN
-
-       The home page for the library with a version of this documentation is 
at:
-
-       http://mi.eng.cam.ac.uk/~er258/cvd/toon.html
-
-       The code will work as-is, and comes with a default configuration, which
-       should work on any system.
-
-       On a unix system, <code>./configure && make install </code> will  
install
-       TooN to the correct place.  Note there is no code to be compiled, but 
the
-       configure script performs some basic checks.
-
-       On non-unix systems, e.g. Windows and embedded systems, you may wish to 
-       configure the library manually. See \ref sManualConfiguration.
-
-       \subsection sStart Getting started
-
-               To begin, just in include the right file:
-
-               @code
-               #include <TooN/TooN.h>
-               @endcode
-
-               Everything lives in the <code>TooN</code> namespace.
-
-               Then, make sure the directory containing TooN is in your 
compiler's
-               search path. If you use any decompositions, you will need to 
link
-               against LAPACK, BLAS and any required support libraries. On a 
modern
-               unix system, linking against LAPACK will do this automatically.
-
-       \subsection sWindowsErrors Comilation errors on Win32 involving 
TOON_TYPEOF
-       
-               If you get errors compiling code that uses TooN, look for the 
macro TOON_TYPEOF 
-               in the messages. Most likely the file 
<code>internal/config.hh</code> is clobbered. 
-               Open it and remove all the defines present there. 
-               
-               Also see @ref sManualConfiguration for more details on 
configuring TooN, 
-               and @ref sConfigLapack, if you want to use LAPACK and BLAS. 
Define the macro
-               in <code>internal/config.hh</code>.
-
-       \subsection sCreateVector How do I create a vector?
-
-               Vectors can be statically sized or dynamically sized.
-
-               @code
-                       Vector<3> v1;    //Create a static sized vector of size 
3
-                       Vector<>  v2(4); //Create a dynamically sized vector of 
size 4
-                       Vector<Dynamic>  v2(4); //Create a dynamically sized 
vector of size 4
-               @endcode
-
-               See also \ref sPrecision.
-
-
-       \subsection sCreateMatrix How do I create a matrix?
-
-               Matrices can be statically sized or dynamically sized.
-
-               @code
-                       Matrix<3> m;              //A 3x3 matrix (statically 
sized)
-                       Matrix<3,2>  m;           //A 3x2 matrix (statically 
sized)
-                       Matrix<>  m(5,6);         //A 5x6 matrix (dynamically 
sized)
-                       Matrix<3,Dynamic> m(3,6); //A 3x6 matrix with a dynamic 
number of columns and static number of rows.
-                       Matrix<Dynamic,2> m(3,2); //A 2x3 matrix with a dynamic 
number of rows and static number of columns.
-               @endcode
-
-               See also \ref sPrecision.
-
-
-       \subsection sFunctionVector How do I write a function taking a vector?
-       
-               To write a function taking a local copy of a vector:
-               @code
-                       template<int Size> void func(Vector<Size> v);
-               @endcode
-
-               To write a function taking any type of vector by reference:
-               @code
-               template<int Size, typename Precision, typename Base> void 
func(const Vector<Size, Precision, Base>& v);
-               @endcode
-               See also \ref sPrecision, \ref sGenericCode and \ref sNoInplace
-
-
-               Slices are strange types. If you want to write a function which
-               uniformly accepts <code>const</code> whole objects as well as 
slices,
-               you need to template on the precision.
-
-               Note that constness in C++ is tricky (see \ref sConst). If you 
write
-               the function to accept <code> Vector<3, double, B>& </code>, 
then you
-               will not be able to pass it slices from <code> const 
Vector</code>s.
-               If, however you write it to accept <code> Vector<3, const 
double, B>&
-               </code>, then the only way to pass in a <code>Vector<3></code> 
is to
-               use the <code>.as_slice()</code> method.
-
-               See also \ref sGenericCode
-
-       \subsection sConst What is wrong with constness?
-
-               In TooN, the behaviour of a Vector or Matrix is controlled by 
the third
-               template parameter. With one parameter, it owns the data, with 
another
-               parameter, it is a slice. A static sized object uses the 
variable:
-               @code
-                        double my_data[3];
-               @endcode
-               to hold the data. A slice object uses:
-               @code
-                        double* my_data;
-               @endcode
-               When a Vector is made <code>const</code>, C++ inserts 
<code>const</code> in
-               to those types.  The <code>const</code> it inserts it top 
level, so these
-               become (respectively):
-               @code
-                        const double my_data[3];
-                        double * const my_data;
-               @endcode
-               Now the types behave very differently. In the first case
-               <code>my_data[0]</code> is immutable. In the second case,
-               <code>my_data</code> is immutable, but
-               <code>my_data[0]</code> is mutable.
-               
-               Therefore a slice <code>const Vector</code> behaves like an 
immutable
-               pointer to mutable data. TooN attempts to make 
<code>const</code>
-               objects behave as much like pointers to \e immutable data as 
possible.
-
-               The semantics that TooN tries to enforce can be bypassed with 
-               sufficient steps:
-               @code
-                       //Make v look immutable
-                       template<class P, class B> void fake_immutable(const 
Vector<2, P, B>& v)
-                       {
-                               Vector<2, P, B> nonconst_v(v);
-                               nonconst_v[0] = 0; //Effectively mutate v
-                       }
-
-                       void bar()
-                       {
-                               Vector<3> v;
-                               ...
-                               fake_immutable(v.slice<0,2>());
-                               //Now v is mutated
-                       }
-
-               @endcode
-
-               See also \ref sFunctionVector
-
-
-
-       \subsection sElemOps What elementary operations are supported?
-               
-               Assignments are performed using <code>=</code>. See also 
-               \ref sNoResize.
-
-               These operators apply to vectors or matrices and scalars. 
-               The operator is applied to every element with the scalar.
-               @code
-               *=, /=, *, / 
-               @endcode
-               
-               Vector and vectors or matrices and matrices:
-               @code
-               +, -, +=, -= 
-               @endcode
-               
-               Dot product:
-               @code
-               Vector * Vector
-               @endcode
-
-               Matrix multiply:
-               @code
-               Matrix * Matrix
-               @endcode
-
-               Matrix multiplying a column vector:
-               @code
-               Matrix * Vector
-               @endcode
-
-               Row vector multiplying a matrix:
-               @code
-               Vector * Matrix
-               @endcode
-               
-               3x3 Vector cross product:
-               @code
-               Vector<3> ^ Vector<3> 
-               @endcode
-
-               All the functions listed below return slices. The slices 
-               are simply references to the original data and can be used as 
lvalues.
-
-               Getting the transpose of a matrix:
-               @code
-                       Matrix.T()
-               @endcode
-               
-               Accessing elements:
-               @code
-               Vector[i]     //get element i
-               Matrix(i,j)   //get element i,j
-               Matrix[i]     //get row i as a vector
-               Matrix[i][j]  //get element i,j
-               @endcode
-               
-               Turning vectors in to matrices:
-               @code
-               Vector.as_row() //vector as a 1xN matrix
-               Vector.as_col() //vector as a Nx1 matrix
-               @endcode
-
-               Slicing with a start position and size:
-               
-               @code
-               Vector.slice<Start, Length>();                         //Static 
slice
-               Vector.slice(start, length);                           
//Dynamic slice
-               Matrix.slice<RowStart, ColStart, NumRows, NumCols>();  //Static 
slice
-               Matrix.slice(rowstart, colstart, numrows, numcols);    
//Dynamic slice
-               @endcode
-               
-               Slicing diagonals:
-               @code
-               Matrix.diagonal_slice();                               //Get 
the leading diagonal as a vector.
-               Vector.as_diagonal();                                  
//Represent a Vector as a DiagonalMatrix
-               @endcode
-               
-               Like other features of TooN, mixed static/dynamic slicing is 
allowed.
-               For example:
-
-               @code
-               Vector.slice<Dynamic, 2>(3, 2);   //Slice starting at index 3, 
of length 2.
-               @endcode
-
-               See also \ref sSlices
-
-       \subsection sInitialize How I initialize a vector/matrix?
-
-               Vectors and matrices start off uninitialized (filled with 
random garbage).
-               They can be easily filled with zeros, or ones (see also 
TooN::Ones):
-               @code
-                       Vector<3> v = Zeros;
-                       Matrix<3> m = Zeros
-                       Vector<>  v2 = Zeros(2); //Note in they dynamic case, 
the size must be specified
-                       Matrix<>  m2 = Zeros(2,2); //Note in they dynamic case, 
the size must be specified
-               @endcode
-
-               Vectors can be filled with makeVector:
-               @code
-                       Vector<> v = makeVector(2,3,4,5,6);
-               @endcode
-               
-               Matrices can be initialized to the identity matrix:
-               @code
-                       Matrix<2> m = Idendity;
-                       Matrix<> m2 = Identity(3);
-               @endcode
-               note that you need to specify the size in the dynamic case.
-
-               Matrices can be filled from data in row-major order:
-               @code
-                       Matrix<3> m = Data(1, 2, 3, 
-                                          4, 5, 6, 
-                                                          7, 8, 9);
-               @endcode
-
-               A less general, but visually more pleasing syntax can also be 
used:
-               @code
-                       Vector<5> v;
-                       Fill(v) = 1,2,3,4,5; 
-
-                       Matrix<3,3> m;
-                       Fill(m) = 1, 2, 3, 
-                                 4, 5, 6, 
-                                         7, 8, 9;
-               @endcode
-               Note that underfilling is a run-time check, since it can not be 
detected
-               at compile time.
-
-               They can also be initialized with data from another source. See 
also \ref  sWrap.
-
-
-
-
-
-       \subsection sScalars How do I add a scalar to every element of a 
vector/matrix? 
-               
-               Addition to every element is not an elementary operation in the 
same way
-               as multiplication by a scalar. It is supported throught the 
::Ones
-               object:
-               
-               @code
-                       Vector<3> a, b;
-                       ...
-                       b = a + Ones*3;       // b_i = a_i + 3
-                       a+= Ones * 3;         // a_i <- a_i + 3
-               @endcode
-
-               It is supported the same way on Matrix and slices.
-
-       \subsection sNoResize Why does assigning mismatched dynamic vectors 
fail?
-       
-       Vectors are not generic containers, and dynamic vectors have been 
designed
-       to have the same semantics as static vectors where possible. Therefore
-       trying to assign a vector of length 2 to a vector of length 3 is an 
error,
-       so it fails. See also \ref sResize
-
-       \subsection sSTL How do I store Dynamic vectors in STL containers.
-
-       As C++ does not yet support move semantics, you can only safely store
-       static and resizable Vectors in STL containers.
-
-       \subsection sResize How do I resize a dynamic vector/matrix?
-
-       Do you really want to? If you do, then you have to declare it:
-
-       @code
-            Vector<Resizable> v;
-                v.resize(3);
-                v = makeVector(1, 2, 3);
-
-                v = makeVector(1, 2); //resize
-                v = Ones(5); //resize
-                v = Zeros; // no resize
-       @endcode
-
-       The policy behind the design of TooN is that it is a linear algebra
-       library, not a generic container library, so resizable Vectors are only
-       created on request. They provide fewer guarantees than other vectors, so
-       errors are likely to be more subtle and harder to track down.  One of 
the
-       main purposes is to be able to store Dynamic vectors of various sizes in
-       STL containers.
-
-       Assigning vectors of mismatched sizes will cause an automatic resize. 
Likewise
-       assigning from entities like Ones with a size specified will cause a 
resize.
-       Assigning from an entities like Ones with no size specified will not 
cause
-       a resize.
-
-       They can also be resized with an explicit call to .resize().
-       Resizing is efficient since it is implemented internally with
-       <code>std::vector</code>.  Note that upon resize, existing data elements
-       are retained but new data elements are uninitialized.
-
-       Currently, resizable matrices are unimplemented.  If you want a 
resizable
-       matrix, you may consider using a <code>std::vector</code>, and 
accessing it
-       as a TooN object when appropriate. See \ref sWrap. Also, the speed and
-       complexity of resizable matrices depends on the memory layout, so you 
may
-       wish to use column major matrices as opposed to the default row major
-       layout.
-
-       \subsection sDebug What debugging options are there?
-
-       By default, everything which is checked at compile time in the static 
case
-       is checked at run-time in the dynamic case (with some additions). 
Checks can
-       be disabled with various macros. Note that the optimizer will usually
-       remove run-time checks on static objects if the test passes.
-       
-       Bounds are not checked by default. Bounds checking can be enabled by
-       defining the macro \c TOON_CHECK_BOUNDS. None of these macros change the
-       interface, so debugging code can be freely mixed with optimized code.
-
-       The debugging checks can be disabled by defining either of the 
following macros:
-               - \c TOON_NDEBUG
-               - \c NDEBUG 
-
-       Additionally, individual checks can be disabled with the following 
macros:
-               - Static/Dynamic mismatch
-                       - Statically determined functions accept and ignore 
dynamically specified
-                         sizes. Nevertheless, it is an error if they do not 
match.
-                       - Disable with \c TOON_NDEBUG_MISMATCH
-               - Slices
-                       - Disable with \c TOON_NDEBUG_SLICE
-               - Size checks (for assignment)
-                       - Disable with \c TOON_NDEBUG_SIZE
-               - overfilling using Fill 
-                       - Disable with \c TOON_NDEBUG_FILL
-               - underfilling using Fill (run-time check)
-                       - Disable with \c TOON_NDEBUG_FILL
-       
-
-
-
-       Errors are manifested to a call to <code>std::abort()</code>.
-
-       TooN does not initialize data in a Vector or Matrix.  For debugging 
purposes
-       the following macros can be defined:
-       - \c TOON_INITIALIZE_QNAN or \c TOON_INITIALIZE_NAN Sets every element 
of newly defined Vectors or
-         Matrixs to quiet NaN, if it exists, and 0 otherwise. Your code will 
not compile
-         if you have made a Vector or Matrix of a type which cannot be 
constructed
-         from a number.
-       - \c TOON_INITIALIZE_SNAN Sets every element of newly defined Vectors or
-         Matrixs to signalling NaN, if it exists, and 0 otherwise. 
-       - \c TOON_INITIALIZE_VAL Sets every element of newly defined Vectors or
-         Matrixs to the expansion of this macro.
-       - \c TOON_INITIALIZE_RANDOM Fills up newly defined Vectors and Matrixs 
with
-         random bytes, to trigger non repeatable behaviour. The random number
-         generator is automatically seeded with a granularity of 1 second. Your
-         code will not compile if you have a Vector or Matrix of a non-POD 
type.
-
-       \subsection sSlices What are slices?
-
-       Slices are references to data belonging to another vector or matrix. 
Modifying
-       the data in a slice modifies the original object. Likewise, if the 
original 
-       object changes, the change will be reflected in the slice. Slices can be
-       used as lvalues. For example:
-
-       @code
-               Matrix<3> m = Identity;
-
-               m.slice<0,0,2,2>() *= 3; //Multiply the top-left 2x2 submatrix 
of m by 3.
-
-               m[2] /=10; //Divide the third row of M by 10.
-
-               m.T()[2] +=2; //Add 2 to every element of the second column of 
M.
-
-               m[1].slice<1,2>() = makeVector(3,4); //Set m_1,1 to 3 and m_1,2 
to 4
-               
-               m[0][0]=6;
-       @endcode
-
-       Slices are usually strange types. See \ref sFunctionVector
-
-       See also \sFuncSlices
-
-       \subsection sPrecision Can I have a precision other than double?
-
-       Yes!
-       @code
-               Vector<3, float> v;          //Static sized vector of floats
-               Vector<Dynamic, float> v(4); //Dynamic sized vector of floats
-               Vector<Dynamic, std::complex<double> > v(4); //Dynamic sized 
vector of complex numbers
-       @endcode
-
-       Likewise for matrix. By default, TooN supports all builtin types
-       and std::complex. Using custom types requires some work. If the 
-       custom type understands +,-,*,/ with builtin types, then specialize
-       TooN::IsField on the types.
-
-       If the type only understands +,-,*,/ with itself, then specialize
-       TooN::Field on the type.
-
-       Note that this is required so that TooN can follow the C++ promotion 
-       rules. The result of multiplying a <code>Matrix<double></code> by a 
-       <code>Vector<float></code> is a <code>Vector<double></code>.
-
-
-       \subsection sFuncSlices How do I return a slice from a function?
-
-       Each vector has a <code>SliceBase</code> type indicating the type of a 
slice.
-
-       They can be slightly tricky to use:
-       @code
-               Vector<2, double, Vector<4>::SliceBase> sliceof(Vector<4>& v)
-               {
-                       return v.slice<1,2>();
-               }
-
-               template<int S, class P, class B>
-               Vector<2, P, Vector<S, P, B>::SliceBase> sliceof(Vector<S, P, 
B>& v)
-               {
-                       return v.template slice<1,2>();
-               }
-
-               template<int S, class P, class B>
-               const Vector<2, const P, typename Vector<S, P, 
B>::ConstSliceBase > foo(const Vector<S, P, B>& v)
-               {
-                       return v.template slice<1,2>();
-               }
-       @endcode
-
-       \subsection sSolveLinear How do I invert a matrix / solve linear 
equations?
-       
-       You use the decomposition objects (see \ref sDecompos "below"), for 
example to solve Ax=b:
-
-       @code
-       Matrix<3> A;
-       A[0]=makeVector(1,2,3);
-       A[1]=makeVector(3,2,1);
-       A[2]=makeVector(1,0,1);
-
-       Vector<3> b = makeVector (2,3,4);
-
-       // solve Ax=b using LU
-       LU<3> luA(A);
-       Vector<3> x1 = luA.backsub(b);
-
-       // solve Ax=b using SVD
-       SVD<3> svdA(A);
-       Vector<3> x2 = svdA.backsub(b);
-       @endcode
-       
-       Similarly for the other \ref sDecompos "decomposition objects"
-
-       \subsection sDecompos  Which decomposisions are there?
-
-       For general size matrices (not necessarily square) there are:
-       @link TooN::LU LU @endlink, @link TooN::SVD SVD @endlink and 
gauss_jordan()
-
-       For square symmetric matrices there are:
-       @link TooN::SymEigen SymEigen @endlink and @link TooN::Cholesky 
Cholesky @endlink
-
-       If all you want to do is solve a single Ax=b then you may want 
gaussian_elimination()
-
-       \subsection sOtherStuff What other stuff is there:
-       
-       Look at the @link modules modules @endlink.
-
-       \subsection sHandyFuncs What handy functions are there (normalize, 
identity, fill, etc...)?
-
-       See @link gLinAlg here @endlink.
-
-
-       \subsection sNoInplace Why don't functions work in place?
-
-       Consider the function:
-       @code
-               void func(Vector<3>& v);
-       @endcode
-       It can accept a <code>Vector<3></code> by reference, and operate on it 
-       in place. A <code>Vector<3></code> is a type which allocates memory on 
the
-       stack. A slice merely references memory, and is a subtly different 
type. To
-       write a function taking any kind of vector (including slices) you can 
write:
-
-       @code
-               template<class Base> void func(Vector<3, double, Base>& v);
-       @endcode
-
-       A slice is a
-       temporary object, and according to the rules of C++, you can't pass a
-       temporary to a function as a non-const reference. TooN provides the
-       <code>.ref()</code> method to escape from this restriction, by 
returning a
-       reference as a non-temporary. You would then have to write:
-       @code
-               Vector<4> v;
-               ...
-               func(v.slice<0,3>().ref());
-       @endcode
-       to get func to accept the slice.
-
-       You may also wish to consider writing functions that do not modify 
structures in
-       place. The \c unit function of TooN computes a unit vector given an 
input
-       vector. In the following context, the code:
-       @code
-               //There is some Vector, which may be a slice, etc called v;
-               v = unit(v);
-       @endcode
-       produces exactly the same compiler output as the hypothetical
-       <code>Normalize(v)</code> which operates in place (for static vectors). 
Consult the ChangeLog 
-       entries dated ``Wed 25 Mar, 2009 20:18:16'' and ``Wed  1 Apr, 2009 
16:48:45''
-       for further discussion.
-       
-
-       \subsection sColMajor Can I have a column major matrix?
-
-       Yes!
-       @code
-               Matrix<3, 3, double, ColMajor> m;          //3x3 Column major 
matrix
-       @endcode
-
-       \subsection sWrap I have a pointer to a bunch of data. How do I turn it 
in to a vector/matrix without copying?
-
-       To create a vector use:
-       @code
-       double d[]={1,2,3,4};
-       Vector<4,double,Reference> v1(d);
-       Vector<Dynamic,double,Reference> v2(d,4);
-       @endcode
-       Or, a functional form can be used:
-       @code
-       double d[]={1,2,3,4};
-
-       wrapVector<4>(d);         //Returns a Vector<4>
-       wrapVector<4,double>(d);  //Returns a Vector<4>
-       
-       wrapVector(d,3);          //Return a Vector<Dynamic> of size 3
-       wrapVector<Double>(d,3);  //Return a Vector<Dynamic> of size 3
-       @endcode
-
-       To crate a matrix use
-       @code
-       double d[]={1,2,3,4,5,6};
-       Matrix<2,3,double,Reference::RowMajor> m1(d);
-       Matrix<2,3,double,Reference::ColMajor> m2(d);
-       Matrix<Dynamic, Dynamic, double, Reference::RowMajor> m3(d, 2, 3);
-       Matrix<Dynamic, 3, double, Reference::RowMajor> m4(d, 2, 3); // note 
two size arguments are required for semi-dynamic matrices
-       @endcode
-
-       See also wrapVector() and wrapMatrix().
-
-       \subsection sGenericCode How do I write generic code?
-       
-       The constructors for TooN objects are very permissive in that they 
-       accept run-time size arguments for statically sized objects, and then 
-       discard the values, This allows you to easily write generic code which 
-       works for both static and dynamic inputs.
-
-       Here is a function which mixes up a vector with a random matrix:
-       @code
-       template<int Size, class Precision, class Base> Vector<Size, Precision> 
mixup(const Vector<Size, Precision, Base>& v)
-       {
-               //Create a square matrix, of the same size as v. If v is of 
dynamic
-               //size, then Size == Dynamic, and so Matrix will also be 
dynamic. In
-               //this case, TooN will use the constructor arguments to select 
the
-               //matrix size. If Size is a real size, then TooN will simply 
ighore
-               //the constructor values.
-
-               Matrix<Size, Size, Precision> m(v.size(), v.size());
-               
-               //Fill the matrix with random values that sum up to 1.
-               Precision sum=0;
-               for(int i=0; i < v.size(); i++)
-                       for(int j=0; j < v.size(); j++)
-                               sum += (m[i][j] = rand());
-               
-               m/= sum;
-
-               return m * v;
-       }
-       @endcode
-
-       Writing functions which safely accept multiple objects requires 
assertions
-       on the sizes since they may be either static or dynamic. TooN's built in
-       size check will fail at compile time if mismatched static sizes are 
given,
-       and at run-time if mismatched dynamic sizes are given:
-       
-       @code
-       template<int S1, class B1, int S2, class B2> void 
func_of_2_vectors(const Vector<S1, double, B1>& v1, const Vector<S2, double, 
B2>& v2)
-       {
-               //Ensure that vectors are the same size
-               SizeMismatch<S1, S2>::test(v1.num_rows(), v2.num_rows());
-
-
-       }
-       @endcode
-
-       For issues relating to constness, see \sFunctionVector and \sConst
-
-
-\subsection ssExamples Are there any examples?
-
-Create two vectors and work out their inner (dot), outer and cross products
address@hidden
-// Initialise the vectors
-Vector<3> a = makeVector(3,5,0);
-Vector<3> b = makeVector(4,1,3);
-
-// Now work out the products
-double dot = a*b;                            // Dot product
-Matrix<3,3> outer = a.as_col() * b.as_row(); // Outer product
-Vector<3> cross = a ^ b;                     // Cross product
-
-cout << "a:" << endl << a << endl;
-cout << "b:" << endl << b << endl;
-cout << "Outer:" << endl << outer << endl;
-cout << "Cross:" << endl << cross << endl;
address@hidden
-
-Create a vector and a matrix and multiply the two together
address@hidden
-// Initialise a vector
-Vector<3> v = makeVector(1,2,3);
-
-// Initialise a matrix
-Matrix<2,3> M(d);
-M[0] = makeVector(2,4,5);
-M[1] = makeVector(6,8,9);
-
-// Now perform calculations
-Vector<2> v2 = M*v;  // OK - answer is a static 2D vector
-Vector<> v3 = M*v;   // OK - vector is determined to be 2D at runtime
-Vector<> v4 = v*M;   // Compile error - dimensions of matrix and vector 
incompatible
address@hidden
-
-
-\subsection sImplementation How is it implemented
-
-\subsubsection ssStatic Static-sized vectors and matrices
-
-One aspect that makes this library efficient is that when you declare a
-3-vector, all you get are 3 doubles - there's no metadata. So
-<code>sizeof(Vector<3>)</code> is 24. This means that when you write
-<code>Vector<3> v;</code> the data for <code>v</code> is allocated on the stack
-and hence <code>new</code>/<code>delete</code>
-(<code>malloc</code>/<code>free</code>) overhead is avoided. However, for large
-vectors and matrices, this would be a Bad Thing since <code>Vector<1000000>
-v;</code> would result in an object of 8 megabytes being allocated on the 
stack and
-potentially overflowing it. %TooN gets around
-that problem by having a cutoff at which statically sized vectors are allocated
-on the heap. This is completely transparent to the programmer, the objects'
-behaviour is unchanged and you still get the type safety offered by statically
-sized vectors and matrices. The cutoff size at which the library changes the
-representation is defined in <code>TooN.h</code> as the <code>const int
-TooN::Internal::max_bytes_on_stack=1000;</code>.
-
-When you apply the subscript operator to a <code>Matrix<3,3></code> and the
-function simply returns a vector which points to the the apropriate hunk of 
memory as a reference
-(i.e. it basically does no work apart from moving around a pointer). This 
avoids
-copying and also allows the resulting vector to be used as an l-value. 
Similarly
-the transpose operation applied to a matrix returns a matrix which referes to 
the 
-same memory but with the opposite layout which also means
-the transpose can be used as an l-value so <code>M1 = M2.T();</code> and
-<code>M1.T() = M2;</code> do exactly the same thing.
-
-<b> Warning: This also means that <code>M = M.T();</code> does the wrong 
thing.</b>
-However, since .T() essentially costs nothing, it should be very rare that you 
need to do this.
-
-\subsubsection ssDynamic Dynamic sized vectors and matrices
-
-These are implemented in the obvious way using metadata with the rule that the
-object that allocated on the heap also deallocates. Other objects may reference
-the data (e.g. when you subscript a matrix and get a vector).
-
-\subsection ssLazy Return value optimisation vs Lazy evaluation
-
-When you write <code>v1 = M * v2;</code> a naive implementation will compute
-<code>M * v2</code> and store the result in a temporary object. It will then
-copy this temporary object into <code>v1</code>. A method often advanced to
-avoid this is to have <code>M * v2</code> simply return an special object
-<code>O</code> which contains references to <code>M</code> and <code>v2</code>.
-When the compiler then resolves <code>v1 = O</code>, the special object 
computes
-<code>M*v2</code> directly into <code>v1</code>. This approach is often called
-lazy evaluation and the special objects lazy vectors or lazy matrices.
-Stroustrup (The C++ programming language Chapter 22) refers to them as
-composition closure objects or compositors.
-
-
-The killer is this: <b>What if v1 is just another name for v2?</b> i.e. you
-write something like <code>v = M * v;</code>. In this case the semantics have
-been broken because the values of <code>v</code> are being overwritten as the
-computation progresses and then the remainder of the computation is using the
-new values. In this library <code>v1</code> in the expression could equally 
well
-alias part of <code>M</code>, thus you can't even solve the problem by having a
-clever check for aliasing between <code>v1</code> and <code>v2</code>. This
-aliasing problem means that the only time the compiler can assume it's safe to
-omit the temporary is when <code>v1</code> is being constructed (and thus 
cannot
-alias anything else) i.e. <code>Vector<3> v1 = M * v2;</code>.
-
-%TooN provides this optimisation by providing the compiler with the opportunity
-to use a return value optimisation. It does this by making <code>M * v2</code>
-call a special constructor for <code>Vector<3></code> with <code>M</code> and
-<code>v2</code> as arguments. Since nothing is happening between the
-construction of the temporary and the copy construction of <code>v1</code> from
-the temporary (which is then destroyed), the compiler is permitted to optimise
-the construction of the return value directly into <code>v1</code>.
-
-Because a naive implemenation of this strategy would result in the vector and
-matrix classes having a very large number of constructors, these classes are
-provided with template constructors that take a standard form. The code that
-does this, declared in the header of class <code>Vector</code> is: 
-
address@hidden
-       template <class Op>
-       inline Vector(const Operator<Op>& op)
-               : Base::template VLayout<Size, Precision> (op)
-       {
-               op.eval(*this);
-       }
address@hidden
-
-\subsubsection ssHow How it all really works
-
-This documentation is generated from a cleaned-up version of the interface, 
hiding the implementation 
-that allows all of the magic to work. If you want to know more and can 
understand idioms like:
address@hidden
-
-template<int, typename, int, typename> struct GenericVBase;
-template<int, typename> struct VectorAlloc;
-
-struct VBase {
-       template<int Size, class Precision>
-       struct VLayout : public GenericVBase<Size, Precision, 1, 
VectorAlloc<Size, Precision> > {
-           ...
-       };
-};
-
-template <int Size, class Precision, class Base=VBase>
-class Vector: public Base::template VLayout<Size, Precision> {
-   ...
-};
address@hidden
-
-then take a look at the source code ... 
-
-
-\section sManualConfiguration Manual configuration
-       
-Configuration is controlled by <code>internal/config.hh</code>. If this file 
is empty
-then the default configuration will be used and TooN will work. There are 
several options.
-
-\subsection stypeof Typeof
-
-TooN needs a mechanism to determine the type of the result of an expression. 
One of the following
-macros can be defined to control the behaviour:
-- \c TOON_TYPEOF_DECLTYPE
-  - Use the C++0x decltype operator.
-- \c TOON_TYPEOF_TYPEOF
-  - Use GCC's \c typeof extension. Only works with GCC and will fail with 
-pedantic
-- \c TOON_TYPEOF___TYPEOF__
-  - Use GCC's \c __typeof__ extension. Only works with GCC and will work with 
-pedantic
-- \c TOON_TYPEOF_BOOST
-  - Use the \link http://www.boost.org/doc/html/typeof.html 
Boost.Typeof\endlink system.
-    This will work with Visual Studio if Boost is installed.
-- \c TOON_TYPEOF_BUILTIN
-  - The default option (does not need to be defined)
-  - Only works for the standard builtin integral types and 
<code>std::complex<float></code> and <code>std::complex<double></code>.
-
-Under Win32, the builtin typeof needs to be used. Comment out all the 
TOON_TYPEOF_ defines to use it.
-
-\subsection sConfigLapack Functions using LAPACK
-
-Some functions use internal implementations for small sizes and may switch over
-to LAPACK for larger sizes. In all cases, an equivalent method is used in terms
-of accuracy (eg Gaussian elimination versus LU decomposition). If the 
following 
-macro is defined:
-- \c TOON_USE_LAPACK
-then LAPACK will be used for large systems, where optional.
-The individual functions are:
-- TooN::determinant is controlled by \c TOON_DETERMINANT_LAPACK
-  -  If the macro is undefined as or defined as -1, then LAPACK will never be
-        used. Otherwise it indicated which the size at which LAPACK should be 
-        used.
-
-Note that these macros do not affect classes that are currently only wrappers
-around LAPACK.
-
-**/
-
-///////////////////////////////////////////////////////
-// Modules classifying classes and functions
-
-/// @defgroup gLinAlg Linear Algebra
-/// \link TooN::Vector Vector\endlink  and \link TooN::Matrix Matrix \endlink 
classes, and helpers.
-
-/// @defgroup gDecomps Matrix decompositions
-/// Classes to perform matrix decompositions, used to solve 
-/// linear equations and provide information about matrices. These are 
wrappers for functionality
-/// provided by the LAPACK library.
-
-/// @defgroup gTransforms Transformation matrices
-/// Classes to represent particular types of transformation matrix.
-
-/// @defgroup gEquations Linear equation solvers
-/// Classes to solve linear equations.
-
-/// @defgroup gFunctions Evaluation of functions.
-/// Evaluation of useful functions.
-/** 
-
address@hidden gOptimize Function optimization
-
-Classes and functions to perform function optimization.
-
address@hidden gOneDim One dimensional function optimization
-
-The following functions find the minimum of a 1-D function:
- - golden_section_search()
- - brent_line_search()
-
address@hidden gMultiDim Multidimensional dimensional function optimization
-
-The following classes perform multidimensional function minimization:
- - TooN::DownhillSimplex
- - TooN::ConjugateGradient
-
-The mode of operation is to set up a mutable class, then repeatedly call an
-iterate function. This allows different sub algorithms (such as termination
-conditions) to be substituted in if need be.
-
address@hidden
address@hidden gInternal TooN internals
-
-*/

Index: doc/linoperatorsdoc.h
===================================================================
RCS file: doc/linoperatorsdoc.h
diff -N doc/linoperatorsdoc.h
--- doc/linoperatorsdoc.h       9 Jun 2005 09:33:54 -0000       1.2
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,226 +0,0 @@
-/*
-    Copyright (c) 2005 Paul Smith
-
-       Permission is granted to copy, distribute and/or modify this document 
under
-       the terms of the GNU Free Documentation License, Version 1.2 or any 
later
-       version published by the Free Software Foundation; with no Invariant
-       Sections, no Front-Cover Texts, and no Back-Cover Texts.
-
-    You should have received a copy of the GNU Free Documentation License
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc.
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-*/
-// A proxy version of the Matrix class,
-// cleaned up to present a comprehensible
-// version of the Mector interface
-
-#ifdef DOXYGEN_INCLUDE_ONLY_FOR_DOCS
-
-/// All classes and functions are within this namespace
-namespace TooN
-{
-
-/// @name Arithmetic operations
-//@{
-
-/// Unary minus. Returns the negative of the argument.
-/// @code
-/// Vector<4> a = 1,2,3,4;
-/// Vector<4> b = -a; // b will now be [-1 -2 -3 -4]
-/// @endcode
-/// @relates Vector
-template<int Size>
-Vector<Size> operator-(const Vector<Size>& v);
-
-/// Add two vectors. Returns the sum of the two vectors.
-/// @code
-/// Vector<4> a = 1,2,3,4;
-/// Vector<4> b = 5,5,5,5;
-/// Vector<4> c = a + b;  // c will now be [6 7 8 9]
-/// @endcode
-/// @relates Vector
-template<int Size>
-Vector<Size> operator+(const Vector<Size>& lhs, const Vector<Size>& rhs);
-
-/// Add a vector to another one. Returns the modified vector.
-/// @code
-/// Vector<4> a = 1,2,3,4;
-/// Vector<4> b = 5,5,5,5;
-/// a += b;   // a will now be [6 7 8 9]
-/// @endcode
-/// @relates Vector
-template<int Size>
-Vector<Size>& operator+= (Vector<Size>& lhs, const Vector<Size>& rhs);
-
-/// Subtract two vectors. Returns the dfference of the two vectors.
-/// @code
-/// Vector<4> a = 1,2,3,4;
-/// Vector<4> b = 5,5,5,5;
-/// Vector<4> c = b + a;  // c will now be [4 3 2 1]
-/// @endcode
-/// @relates Vector
-template<int Size>
-Vector<Size> operator-(const Vector<Size>& lhs, const Vector<Size>& rhs);
-
-/// Subtract one vector from another one. Returns the modified vector.
-/// @code
-/// Vector<4> a = 1,2,3,4;
-/// Vector<4> b = 5,5,5,5;
-/// a -= b;   // a will now be [-4 -3 -2 -1]
-/// @endcode
-/// @relates Vector
-template<int Size>
-Vector<Size>& operator-= (Vector<Size>& lhs, const Vector<Size>& rhs);
-
-/// Multiply a vector by a scalar. Both left- and right- multiply are allowed.
-/// @code
-/// Vector<4> a = 1,2,3,4;
-/// Vector<4> b = a * 2.0;  // now b = [2 4 6 8]
-/// @endcode
-/// @relates Vector
-template<int Size>
-Vector<Size> operator* (const Vector<Size>& lhs, double rhs);
-
-/// Multiply a vector by a scalar. Both left- and right- multiply are allowed.
-/// @code
-/// Vector<4> a = 1,2,3,4;
-/// Vector<4> b = 3.0 * a;  // now b = [3 6 9 12]
-/// @endcode
-/// @relates Vector
-template<int Size>
-Vector<Size> operator* (double lhs, const Vector<Size>& rhs);
-
-/// Multiply a vector by a scalar. Returns the modified vector.
-/// @code
-/// Vector<4> a = 1,2,3,4;
-/// a *= 2.0;     // now a = [2 4 6 8]
-/// @endcode
-/// @relates Vector
-template<int Size>
-Vector<Size>& operator*= (const Vector<Size>& lhs, const double& rhs);
-
-/// Divide a vector by a scalar. 
-/// @code
-/// Vector<4> a = 1,2,3,4;
-/// Vector<4> b = a / 2.0;  // now b = [0.5 1.0 1.5 2.0]
-/// @endcode
-/// @relates Vector
-template<int Size>
-Vector<Size> operator/ (const Vector<Size>& lhs, double rhs);
-
-/// Divide vector by a scalar. Returns the modified vector.
-/// @code
-/// Vector<4> a = 1,2,3,4;
-/// a /= 2.0;     // now a = [0.5 1.0 1.5 2.0]
-/// @endcode
-/// @relates Vector
-template<int Size>
-Vector<Size>& operator/= (const Vector<Size>& lhs, const double& rhs);
-
-/// The dot product of two vectors.
-/// @code
-/// Vector<4> a = 1,2,3,4;
-/// Vector<4> b = 5,6,7,8;
-/// double d = a*b;  // now d = 1*5 + 2*6 + 3*7 + 4*8 = 70
-/// @endcode
-/// @relates Vector
-template<int Size>
-double operator* (const Vector<Size>& lhs, const Vector<Size>& rhs);
-
-/// The cross product of two 3-vectors. The vectors must be fixed-size.
-/// @code
-/// Vector<3> a = 1,2,3;
-/// Vector<3> b = 5,6,7;
-/// double d = a^b;  // now d = [-4 8 4]
-/// @endcode
-/// @relates Vector
-Vector<3> operator^ (const Vector<3>& lhs, const Vector<3>& rhs);
-
-/// Add two matrices. Returns the sum of the two matrices.
-/// @relates Matrix
-template<int Rows, int Cols>
-Matrix<Rows, Cols> operator+(const Matrix<Rows, Cols>& lhs, const Matrix<Rows, 
Cols>& rhs);
-
-/// Add a matrix to another one. Returns the modified matrix.
-/// @relates Matrix
-template<int Rows, int Cols>
-Matrix<Rows, Cols>& operator+= (Matrix<Rows, Cols>& lhs, const Matrix<Rows, 
Cols>& rhs);
-
-/// Subtract two matrices. Returns the dfference of the two matrices.
-/// @relates Matrix
-template<int Rows, int Cols>
-Matrix<Rows, Cols> operator-(const Matrix<Rows, Cols>& lhs, const Matrix<Rows, 
Cols>& rhs);
-
-/// Subtract one matrix from another one. Returns the modified matrix.
-/// @relates Matrix
-template<int Rows, int Cols>
-Matrix<Rows, Cols>& operator-= (Matrix<Rows, Cols>& lhs, const Matrix<Rows, 
Cols>& rhs);
-
-/// Multiply a matrix by a scalar. Both left- and right- multiply are allowed.
-/// @relates Matrix
-template<int Rows, int Cols>
-Matrix<Rows, Cols> operator* (const Matrix<Rows, Cols>& lhs, double rhs);
-
-/// Multiply a matrix by a scalar. Both left- and right- multiply are allowed.
-/// @relates Matrix
-template<int rows, int Cols>
-Matrix<Rows, Cols> operator* (double lhs, const Matrix<Rows, Cols>& rhs);
-
-/// Multiply a matrix by a scalar. Returns the modified matrix.
-/// @relates Matrix
-template<int Rows, int Cols>
-Matrix<Rows, Cols>& operator*= (const Matrix<Rows, Cols>& lhs, const double& 
rhs);
-
-/// Divide a matrix by a scalar. 
-/// @relates Matrix
-template<int Rows, int Cols>
-Matrix<Rows, Cols> operator/ (const Matrix<Rows, Cols>& lhs, double rhs);
-
-/// Divide matrix by a scalar. Returns the modified matrix.
-/// @relates Matrix
-template<int Rows, int Cols>
-Matrix<Rows, Cols>& operator/= (const Matrix<Rows, Cols>& lhs, const double& 
rhs);
-
-/// Multiply a matrix by a vector (with the vector on the right).
-/// This interprets the vector as a column vector.
-/// @relates Matrix
-template<int Rows, int Cols>
-Vector<Rows> operator* (const Matrix<Rows, Cols>& lhs, const Vector<Cols>& 
rhs);
-
-/// Multiply a vector by a matrix (with the vector on the left).
-/// This interprets the vector as a row vector.
-/// @relates Matrix
-template<int Rows, int Cols>
-Vector<Cols> operator* (const Vector<Rows>& lhs, const Matrix<Rows, Cols>& 
rhs);
-
-/// Multiply a matrix by a matrix.
-/// @relates Matrix
-template<int Rows, int Inter, int Cols>
-Matrix<Cols> operator* (const Matrix<Inter, Rows>& lhs, const Matrix<Inter, 
Cols>& rhs);
-
-/// Multiply two vectors, treating the one vector as representing a diagonal 
matricx. This
-/// has the effect of an element-by-element multiplication of two vectors, 
i.e. if 
-/// \f$a\f$, \f$b\f$ and \f$c\f$ are three (equally-sized) vectors, \f$c_i = 
a_i b_i\f$.
-/// @relates Vector
-template<int Size>
-Vector<Size> diagmult(const Vector<Size>& lhs, const Vector<Size>& rhs);
-
-/// Multiplication treating the vector as representing a diagonal matrix on 
the left of the matrix.
-/// @relates Matrix
-template<int Rows, Cols>
-Matrix<Rows, Cols> diagmult(const Vector<Rows>& lhs, const Matrix<Rows, Cols>& 
rhs);
-
-/// Multiplication treating the vector as representing a diagonal matrix on 
the right of the matrix.
-/// @relates Matrix
-template<int Rows, Cols>
-Matrix<Rows, Cols> diagmult(const Matrix<Rows, Cols>& lhs, const Vector<Cols>& 
rhs);
-
-
-//@}
-
-
-}
-
-#endif

Index: functions/derivatives.h
===================================================================
RCS file: functions/derivatives.h
diff -N functions/derivatives.h
--- functions/derivatives.h     6 Feb 2012 14:59:35 -0000       1.5
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,601 +0,0 @@
-#ifndef TOON_INCLUDE_DERIVATIVES_NUMERICAL_H
-#define TOON_INCLUDE_DERIVATIVES_NUMERICAL_H
-
-#include <TooN/TooN.h>
-#include <vector>
-#include <cmath>
-
-
-namespace TooN{
-       namespace Internal{
-
-               ///@internal
-               ///@brief Implementation of Ridder's Extrapolation to zero.
-               ///The function input starts from 1.
-               //Copy-paste adaptation of the scalar version.
-               ///@param f Functor to extrapolate to zero.
-               ///@ingroup gInternal
-               template<class F, class Precision, int Size> 
std::pair<Vector<Precision,Size>, Vector<Precision, Size> > 
extrapolate_to_zero_J(F& f, int size)
-               {
-                       using std::isfinite;
-                       using std::max;
-                       using std::isnan;
-                       using namespace std;
-                       //Use points at c^0, c^-1, ... to extrapolate towards 
zero.
-
-                       const Precision c = 1.1, t = 2;
-
-                       static const int Npts = 400;
-
-                       /* Neville's table is:  
-                       x_0      y_0    P_0                                 
-                                                                 P_{01}        
                
-                       x_1      y_1    P_1            P_{012}              
-                                                                 P_{12}        
     P_{0123}   
-                       x_2      y_2    P_2            P_{123}              
-                                                                 P_{23}        
                
-                       x_3      y_3    P_3   
-
-                       In Matrix form, this is rearranged as:
-                       
-                       
-                       x_0      y_0    P_0                                 
-                                                                               
                                  
-                       x_1      y_1    P_1   P_{01}                 
-                                                                               
           
-                       x_2      y_2    P_2   P_{12}  P_{012}               
-                                                                               
                                                           
-                       x_3      y_3    P_3   P_{23}  P_{123} P_{0123} 
-
-                       This is rewritten further as:
-
-                                 |                  0      1      2       3
-                        
_____|___________________________________________________      
-                         0   | x_0      y_0    P^00                            
    
-                                 |                                             
  
-                         1   | x_1      y_1    P^10  P^11                   
-                                 |                                    
-                         2   | x_2      y_2    P^10  P^21    P^22              
    
-                                 |                                             
               
-                         3   | x_3      y_3    P^10  P^31    P^23    P^33     
-
-                       So, P^ij == P_{j-i...j}
-
-                       Finally, only the current and previous row are 
required. This reduces
-                       the memory cost from quadratic to linear.  The naming 
scheme is:
-
-                       P[i][j]    -> P_i[j]
-                       P[i-1][j]  -> P_i_1[j]
-                       */
-
-                       vector<vector<Precision> > 
P_i(Vector<Precision,Size>(Ones(size)));
-                       vector<vector<Precision> > 
P_i_1(Vector<Precision,Size>(Zeros(size)));
-
-
-                       Vector<Size> best_err   = Ones(size) * HUGE_VAL;
-                       Vector<Size> best_point = Ones(size) * HUGE_VAL;
-                       
-                       //The first tranche of points might be bad.
-                       //Don't quit while no good points have ever happened.
-                       Vector<Size, bool> ever_ok = Zeros(size);
-
-                       //Compute f(x) as x goes from 1 towards zero and 
extrapolate to 0
-                       Precision x=1;
-                       for(int i=0; i < Npts; i++)
-                       {
-                               swap(P_i, P_i_1);
-                               P_i.resize(i+2, Zeros(size));
-
-
-                               //P[i][0] = c^ -i;
-                               P_i[0] = f(x);
-
-                               x /= c;
-                               
-                               Vector<bool, Size> better(Zeros(size)); //Did 
we get better?
-
-                               for(int k=0; k < best_err.size(); k++)
-                               {
-                                       //Compute the extrapolations
-                                       //cj id c^j
-                                       Precision cj = 1;
-                                       bool any_ok=0;
-                                       for(int j=1; j <= i; j++)
-                                       {
-                                               cj *= c;
-                                               //We have (from above) n = i 
and k = n - j
-                                               //n-k = i - (n - j) = i - i + j 
= j
-                                               //Therefore c^(n-k) is just c^j
-
-                                               P_i[k][j] = (cj * P_i[k][j-1] - 
P_i_1[k][j-1]) / (cj - 1);
-
-                                               if(any_ok || 
isfinite(P_i[k][j]))
-                                                       ever_ok[k] = 1;
-
-                                               //Compute the difference 
between the current point (high order)
-                                               //and the corresponding lower 
order point at the current step size
-                                               Precision err1 = abs(P_i[k][j] 
- P_i[k][j-1]);
-
-                                               //Compute the difference 
between two consecutive points at the
-                                               //corresponding lower order 
point at the larger stepsize
-                                               Precision err2 = abs(P_i[k][j] 
- P_i_1[k][j-1]);
-
-                                               //The error is the larger of 
these.
-                                               Precision err = max(err1, err2);
-
-                                               if(err < best_err[k] && 
isfinite(err))
-                                               {
-                                                       best_err[k] = err;
-                                                       best_point[k] = 
P_i[k][j];
-                                                       better=1;
-                                               }
-                                       }
-                               }
-                               
-                               using namespace std;
-                               //If the highest order point got worse, or went 
off the rails, 
-                               //and some good points have been seen, then 
break.
-                               bool all_bad=1
-                               for(int k=0; k < best_err.size(); k++)
-                                       if(ever_ok[k] && !better[k] && i > 0 && 
(abs(P_i[k][i] - P_i_1[k][i-1]) > t * best_err[k]|| isnan(P_i[k][i])))
-                                       {
-                                               //Still bad
-                                       }
-                                       else
-                                               all_bad=0;
-                               
-                               if(all_bad)
-                                       break;
-                       }
-
-                       return std::make_pair(best_point, best_err);
-               }
-
-               ///@internal
-               ///@brief Implementation of Ridder's Extrapolation to zero.
-               ///The function input starts from 1.
-               ///@param f Functor to extrapolate to zero.
-               ///@ingroup gInternal
-               template<class F, class Precision> std::pair<Precision, 
Precision> extrapolate_to_zero(F& f)
-               {
-                       using std::isfinite;
-                       using std::max;
-                       using std::isnan;
-                       //Use points at c^0, c^-1, ... to extrapolate towards 
zero.
-                       const Precision c = 1.1, t = 2;
-
-                       static const int Npts = 400;
-
-                       /* Neville's table is:  
-                       x_0      y_0    P_0                                 
-                                                                 P_{01}        
                
-                       x_1      y_1    P_1            P_{012}              
-                                                                 P_{12}        
     P_{0123}   
-                       x_2      y_2    P_2            P_{123}              
-                                                                 P_{23}        
                
-                       x_3      y_3    P_3   
-
-                       In Matrix form, this is rearranged as:
-                       
-                       
-                       x_0      y_0    P_0                                 
-                                                                               
                                  
-                       x_1      y_1    P_1   P_{01}                 
-                                                                               
           
-                       x_2      y_2    P_2   P_{12}  P_{012}               
-                                                                               
                                                           
-                       x_3      y_3    P_3   P_{23}  P_{123} P_{0123} 
-
-                       This is rewritten further as:
-
-                                 |                  0      1      2       3
-                        
_____|___________________________________________________      
-                         0   | x_0      y_0    P^00                            
    
-                                 |                                             
  
-                         1   | x_1      y_1    P^10  P^11                   
-                                 |                                    
-                         2   | x_2      y_2    P^10  P^21    P^22              
    
-                                 |                                             
               
-                         3   | x_3      y_3    P^10  P^31    P^23    P^33     
-
-                       So, P^ij == P_{j-i...j}
-
-                       Finally, only the current and previous row are 
required. This reduces
-                       the memory cost from quadratic to linear.  The naming 
scheme is:
-
-                       P[i][j]    -> P_i[j]
-                       P[i-1][j]  -> P_i_1[j]
-                       */
-
-                       vector<Precision> P_i(1), P_i_1;
-                       
-                       Precision best_err = HUGE_VAL;
-                       Precision best_point=HUGE_VAL;
-
-                       //The first tranche of points might be bad.
-                       //Don't quit while no good points have ever happened.
-                       bool ever_ok=0;
-
-                       //Compute f(x) as x goes from 1 towards zero and 
extrapolate to 0
-                       Precision x=1;
-                       for(int i=0; i < Npts; i++)
-                       {
-                               swap(P_i, P_i_1);
-                               P_i.resize(i+2);
-
-
-                               //P[i][0] = c^ -i;
-                               P_i[0] = f(x);
-
-                               x /= c;
-                               
-                               //Compute the extrapolations
-                               //cj id c^j
-                               Precision cj = 1;
-                               bool better=0; //Did we get better?
-                               bool any_ok=0;
-                               for(int j=1; j <= i; j++)
-                               {
-                                       cj *= c;
-                                       //We have (from above) n = i and k = n 
- j
-                                       //n-k = i - (n - j) = i - i + j = j
-                                       //Therefore c^(n-k) is just c^j
-
-                                       P_i[j] = (cj * P_i[j-1] - P_i_1[j-1]) / 
(cj - 1);
-
-                                       if(any_ok || isfinite(P_i[j]))
-                                               ever_ok = 1;
-
-                                       //Compute the difference between the 
current point (high order)
-                                       //and the corresponding lower order 
point at the current step size
-                                       Precision err1 = abs(P_i[j] - P_i[j-1]);
-
-                                       //Compute the difference between two 
consecutive points at the
-                                       //corresponding lower order point at 
the larger stepsize
-                                       Precision err2 = abs(P_i[j] - 
P_i_1[j-1]);
-
-                                       //The error is the larger of these.
-                                       Precision err = max(err1, err2);
-
-                                       if(err < best_err && isfinite(err))
-                                       {
-                                               best_err = err;
-                                               best_point = P_i[j];
-                                               better=1;
-                                       }
-                               }
-                               
-                               using namespace std;
-                               //If the highest order point got worse, or went 
off the rails, 
-                               //and some good points have been seen, then 
break.
-                               if(ever_ok && !better && i > 0 && (abs(P_i[i] - 
P_i_1[i-1]) > t * best_err|| isnan(P_i[i])))
-                                       break;
-                       }
-
-                       return std::make_pair(best_point, best_err);
-               }
-
-               ///@internal
-               ///@brief Functor wrapper for computing finite differences 
along an axis.
-               ///@ingroup gInternal
-               template<class Functor, class  Precision, int Size, class Base> 
struct CentralDifferenceGradient
-               {
-                       const Vector<Size, Precision, Base>& v; ///< Point 
about which to compute differences
-                       Vector<Size, Precision> x;      ///< Local copy of v
-                       const Functor&  f;                      ///< Functor to 
evaluate
-                       int i;                                  ///< Index to 
difference along
-
-                       CentralDifferenceGradient(const Vector<Size, Precision, 
Base>& v_, const Functor& f_)
-                       :v(v_),x(v),f(f_),i(0)
-                       {}
-                       
-                       ///Compute central difference.
-                       Precision operator()(Precision hh) 
-                       {
-                               using std::max;
-                               using std::abs;
-
-                               //Make the step size be on the scale of the 
value.
-                               double h = hh * max(abs(v[i]) * 1e-3, 1e-3);
-
-                               x[i] = v[i] - h;
-                               double f1 = f(x);
-                               x[i] = v[i] + h;
-                               double f2 = f(x);
-                               x[i] = v[i];
-
-                               double d =  (f2 - f1) / (2*h);
-                               return d;
-                       }
-               };
-
-               ///@internal
-               ///@brief Functor wrapper for computing finite difference 
second derivatives along an axis.
-               ///@ingroup gInternal
-               template<class Functor, class  Precision, int Size, class Base> 
struct CentralDifferenceSecond
-               {
-                       const Vector<Size, Precision, Base>& v; ///< Point 
about which to compute differences
-                       Vector<Size, Precision> x;              ///< Local copy 
of v
-                       const Functor&  f;                      ///< Functor to 
evaluate
-                       int i;                                  ///< Index to 
difference along
-                       const Precision central;                ///<Central 
point.
-
-                       CentralDifferenceSecond(const Vector<Size, Precision, 
Base>& v_, const Functor& f_)
-                       :v(v_),x(v),f(f_),i(0),central(f(x))
-                       {}
-                       
-                       ///Compute central difference.
-                       Precision operator()(Precision hh) 
-                       {
-                               using std::max;
-                               using std::abs;
-
-                               //Make the step size be on the scale of the 
value.
-                               double h = hh * max(abs(v[i]) * 1e-3, 1e-3);
-
-                               x[i] = v[i] - h;
-                               double f1 = f(x);
-
-                               x[i] = v[i] + h;
-                               double f2 = f(x);
-                               x[i] = v[i];
-
-                               double d =  (f2 - 2*central + f1) / (h*h);
-                               return d;
-                       }
-               };
-
-               ///@internal
-               ///@brief Functor wrapper for computing finite difference cross 
derivatives along a pair of axes.
-               ///@ingroup gInternal
-               template<class Functor, class  Precision, int Size, class Base> 
struct CentralCrossDifferenceSecond
-               {
-                       const Vector<Size, Precision, Base>& v; ///< Point 
about which to compute differences
-                       Vector<Size, Precision> x;              ///< Local copy 
of v
-                       const Functor&  f;                      ///< Functor to 
evaluate
-                       int i;                                  ///< Index to 
difference along
-                       int j;                                  ///< Index to 
difference along
-
-                       CentralCrossDifferenceSecond(const Vector<Size, 
Precision, Base>& v_, const Functor& f_)
-                       :v(v_),x(v),f(f_),i(0),j(0)
-                       {}
-                       
-                       ///Compute central difference.
-                       Precision operator()(Precision hh) 
-                       {
-                               using std::max;
-                               using std::abs;
-
-                               //Make the step size be on the scale of the 
value.
-                               double h = hh * max(abs(v[i]) * 1e-3, 1e-3);
-
-                               x[i] = v[i] + h;
-                               x[j] = v[j] + h;
-                               double a = f(x);
-
-                               x[i] = v[i] - h;
-                               x[j] = v[j] + h;
-                               double b = f(x);
-
-                               x[i] = v[i] + h;
-                               x[j] = v[j] - h;
-                               double c = f(x);
-
-
-                               x[i] = v[i] - h;
-                               x[j] = v[j] - h;
-                               double d = f(x);
-
-                               return (a-b-c+d) / (4*h*h);
-                       }
-               };
-
-       }
-
-
-       /** Extrapolate a derivative to zero using Ridder's Algorithm.
-
-       Ridder's algorithm works by evaluating derivatives with smaller and 
smaller step
-       sizes, fitting a polynomial and extrapolating its value to zero.
-       
-       This algorithm is generally more accurate and much more reliable, but 
much slower than
-       using simple finite differences. It is robust to awkward functions and 
does not
-       require careful tuning of the step size, furthermore it provides an 
estimate of the
-       errors. This implementation has been tuned for accuracy instead of 
speed. For an
-       estimate of the errors, see also numerical_gradient_with_errors(). In 
general it is
-       useful to know the errors since some functions are remarkably hard to 
differentiate
-       numerically.
-
-       Neville's Algorithm can be used to find a point on a fitted polynomial 
at
-       \f$h\f$. Taking
-       some points \f$h_i\f$ and \f$ y_i = f(h_i)\f$, one can define a table of
-       points on various polyomials:
-       \f[
-       \begin{array}{ccccccc}
-       h_0    & y_0  & P_0 &        &         &          \\
-                  &      &     & P_{01} &         &          \\
-       h_1    & y_1  & P_1 &        & P_{012} &          \\
-                  &      &     & P_{12} &         & P_{0123} \\
-       h_2    & y_2  & P_2 &        & P_{123} &          \\
-                  &      &     & P_{23} &         &          \\
-       h_3    & y_3  & P_3 &        &         &          \\
-       \end{array}                            
-       \f]
-       where \f$P_{123}\f$ is the value of a polynomial fitted to datapoints 
1, 2 and 3
-       evaluated at \f$ h\f$. The initial values are simple to evaluate: 
\f$P_i = y_i =
-       f(h_i)\f$. The remaining values are determined by the recurrance:
-       \f{equation}
-               P_{k\cdots n} = \frac{(h - h_n)P_{k \cdots n-1} + (h_k - 
h)P_{k+1 \cdots n}}{h_k - h_n}
-       \f}
-
-       For Ridder's algorithm, we define the extrapolation  point \f$ h=0 \f$ 
and the
-       sequence of points to evaluate as \f$ h_i = c^{-i} \f$ where \f$ c \f$ 
is some
-       constant a little greater than 1. 
-       Substituting in to the above equation gives:
-       \f[
-               P_{k \cdots n} = \frac{c^{-k} P_{k+1 \cdots n} - P_{k \cdots 
n-1}}{c^{n - k} - 1}
-       \f]
-
-       To measure errors, when computing (for example) \f$P_{234}\f$, we 
compare the
-       value to the lower order with the same step size \f$P_{34}\f$, and the 
lower
-       order with a larger step size \f$P_{23}\f$. The error estimate is the 
largest of
-       these. The  extrapolation with the smallest error is retained.
-
-       Not only that, but since every value of P is used, every single subset 
of points
-       is used for polynomial fitting. So, bad points for large and small 
\f$h\f$ do
-       not spoil the answer.
-
-       It is generally assumed that as \f$h\f$ decreases, the errors decrease, 
then
-       increase again. Therefore, if the current step size did not yield any
-       improvements on the best point so far, then we terminate when the 
highest order
-       point is \f$ t \f$ times worse then the previous order point.
-
-       The parameters are:
-       - \f$ c = 1.1 \f$
-       - \f$ t = 2 \f$
-       - Max iterations = 400
-
-       \section rRef  References                         
-
-       - Ridders, C. J. F, 1982, Advances in Engineering Software, 4(2) 75--76
-       - Press, Vetterling, Teukolsky, Flannery, Numerical, 1997, Numerical 
Recipies in C (2nd ed.), Chapter 5.7
-
-       @param f Functor to differentiate
-       @param x Point about which to differentiate.
-       @ingroup gFunctions
-       */
-       template<class F, int S, class P, class B> Vector<S, P> 
numerical_gradient(const F& f, const Vector<S, P, B>& x)
-       {
-               using namespace Internal;
-               Vector<S> grad(x.size());
-
-               CentralDifferenceGradient<F, P, S, B> d(x, f);
-
-               for(int i=0; i < x.size(); i++)
-               {
-                       d.i = i;
-                       grad[i] = 
extrapolate_to_zero<CentralDifferenceGradient<F, P, S, B>, P>(d).first;
-               }
-
-               return grad;
-       }
-
-       template<class F, int Fsize, int S, int P, class B> Matrix<> 
numerical_Jacobian(const F& f, int fsize, const Vector<S, P, B>& x)
-       {
-               using namespace Internal;
-               //Parameters are the columns
-               //Outputs are the rows.
-
-               Matrix<Fsize, S> J(fsize, x.size());
-
-
-       }
-
-
-       ///Compute numerical gradients with errors.
-       ///See numerical_gradient().
-       ///Gradients are returned in the first row of the returned matrix.
-       ///Errors are returned in the second row. The errors have not been 
scaled, so they are
-       ///in the same range as the gradients.
-       ///@param f Functor to differentiate
-    ///@param x Point about which to differentiate.
-       ///@ingroup gFunctions 
-       template<class F, int S, class P, class B> Matrix<S,2,P> 
numerical_gradient_with_errors(const F& f, const Vector<S, P, B>& x)
-       {
-               using namespace Internal;
-               Matrix<S,2> g(x.size(), 2);
-
-               CentralDifferenceGradient<F, P, S, B> d(x, f);
-
-               for(int i=0; i < x.size(); i++)
-               {
-                       d.i = i;
-                       pair<double, double> r= 
extrapolate_to_zero<CentralDifferenceGradient<F, P, S, B>, P>(d);
-                       g[i][0] = r.first;
-                       g[i][1] = r.second;
-               }
-
-               return g;
-       }
-
-       
-       ///Compute the numerical Hessian using central differences and Ridder's 
method:
-       ///\f[
-       /// \frac{\partial^2 f}{\partial x^2} \approx \frac{f(x-h) - 2f(x) + 
f(x+h)}{h^2}
-       ///\f]
-       ///\f[
-       /// \frac{\partial^2 f}{\partial x\partial y} \approx \frac{f(x+h, y+h) 
- f(x-h,y+h) - f(x+h, y-h) + f(x-h, y-h)}{4h^2}
-       ///\f]
-       ///See numerical_gradient().
-       ///@param f Functor to double-differentiate
-    ///@param x Point about which to double-differentiate.
-       ///@ingroup gFunctions 
-       template<class F, int S, class P, class B> pair<Matrix<S, S, P>, 
Matrix<S, S, P> > numerical_hessian_with_errors(const F& f, const Vector<S, P, 
B>& x)
-       {
-               using namespace Internal;
-               Matrix<S> hess(x.size(), x.size());
-               Matrix<S> errors(x.size(), x.size());
-
-               CentralDifferenceSecond<F, P, S, B> curv(x, f);
-               CentralCrossDifferenceSecond<F, P, S, B> cross(x, f);
-
-               //Perform the cross differencing.
-
-               for(int r=0; r < x.size(); r++)
-                       for(int c=r+1; c < x.size(); c++)
-                       {
-                               cross.i = r;
-                               cross.j = c;
-                               pair<double, double> e =  
extrapolate_to_zero<CentralCrossDifferenceSecond<F, P, S, B>, P >(cross);
-                               hess[r][c] = hess[c][r] = e.first;
-                               errors[r][c] = errors[c][r] = e.second;
-                       }
-
-               for(int i=0; i < x.size(); i++)
-               {
-                       curv.i = i;
-                       pair<double, double> e = 
extrapolate_to_zero<CentralDifferenceSecond<F, P, S, B>, P>(curv);
-                       hess[i][i] = e.first;
-                       errors[i][i] = e.second;
-               }
-
-               return make_pair(hess, errors);
-       }
-       
-       ///Compute the numerical Hessian and errors. The Hessian is returned as 
the first
-       ///element, and the errors as the second.
-       ///See numerical_hessian().
-       ///@param f Functor to double-differentiate
-    ///@param x Point about which to double-differentiate.
-       ///@ingroup gFunctions 
-       template<class F, int S, class P, class B> Matrix<S, S, P> 
numerical_hessian(const F& f, const Vector<S, P, B>& x)
-       {
-               using namespace Internal;
-               Matrix<S> hess(x.size(), x.size());
-
-               CentralDifferenceSecond<F, P, S, B> curv(x, f);
-               CentralCrossDifferenceSecond<F, P, S, B> cross(x, f);
-
-               //Perform the cross differencing.
-               for(int r=0; r < x.size(); r++)
-                       for(int c=r+1; c < x.size(); c++)
-                       {
-                               cross.i = r;
-                               cross.j = c;
-                               pair<double, double> e =  
extrapolate_to_zero<CentralCrossDifferenceSecond<F, P, S, B>, P >(cross);
-                               hess[r][c] = hess[c][r] = e.first;
-                       }
-
-               for(int i=0; i < x.size(); i++)
-               {
-                       curv.i = i;
-                       pair<double, double> e = 
extrapolate_to_zero<CentralDifferenceSecond<F, P, S, B>, P>(curv);
-                       hess[i][i] = e.first;
-               }
-
-               return hess;
-       }
-}
-
-#endif
-

Index: functions/fadbad.h
===================================================================
RCS file: functions/fadbad.h
diff -N functions/fadbad.h
--- functions/fadbad.h  2 May 2011 21:46:10 -0000       1.5
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,226 +0,0 @@
-// -*- c++ -*-
-
-// Copyright (C) 2005,2009 Tom Drummond (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-#ifndef TOON_FADBAD_INTEGATION_H
-#define TOON_FADBAD_INTEGATION_H
-
-#include <iostream>
-
-#include <TooN/TooN.h>
-#include <TooN/se3.h>
-#include <TooN/se2.h>
-
-#include <FADBAD++/fadiff.h>
-
-namespace fadbad {
-
-template <typename P, unsigned int N>
-inline std::ostream & operator<<( std::ostream & out, const F<P, N> & val ){
-       return out << val.val();
-}
-
-template <typename P, unsigned int N>
-inline F<P, N> abs( const F<P, N> & val ){
-    return (val.val() < 0) ? -val : val;
-}
-
-}
-
-namespace TooN {
-
-template<typename C, unsigned int N> struct IsField<fadbad::F<C, N> >
-{
-       static const int value = numeric_limits<C>::is_specialized; ///<Is C a 
field?
-};
-
-template <int N, typename T, typename A, unsigned D>
-inline Vector<N, T> get_value( const Vector<N, fadbad::F<T, D>, A> & v ){
-       Vector<N,T> result(v.size());
-       for(int i = 0; i < result.size(); ++i)
-               result[i] = v[i].val();
-       return result;
-}
-
-template <typename P, int N, typename A>
-inline Vector<N, fadbad::F<P> > make_fad_vector( const Vector<N, P, A> & val, 
const unsigned start = 0, const unsigned size = N ){
-       Vector<N, fadbad::F<P> > result = val;
-       for(unsigned i = 0, d = start; i < val.size() && d < size; ++i, ++d)
-               result[i].diff(d,size);
-       return result;
-}
-
-template <unsigned D, typename P, int N, typename A>
-inline Vector<N, fadbad::F<P,D> > make_fad_vector( const Vector<N, P, A> & 
val, const unsigned start = 0 ){
-       Vector<N, fadbad::F<P,D> > result = val;
-       for(unsigned i = 0, d = start; i < unsigned(val.size()) && d < D; ++i, 
++d)
-               result[i].diff(d);
-       return result;
-}
-
-template <unsigned D, typename P, int N, typename A>
-inline Vector<N, P> get_derivative( const Vector<N, fadbad::F<P,D>, A> & val, 
const int dim ){
-       Vector<N, P> r;
-       for(int i = 0; i < N; ++i)
-               r[i] = val[i].deriv(dim);
-       return r;
-}
-
-template <unsigned D, typename P, int N, typename A>
-inline Matrix<N, D, P> get_jacobian( const Vector<N, fadbad::F<P, D>,  A> & 
val ){
-       Matrix<N, D, P> result(N, val[0].size());
-       for(unsigned i = 0; i < val[0].size(); ++i)
-               result.T()[i] = get_derivative( val, i );
-       return result;
-}
-
-template <int R, int C, typename P, unsigned D, typename A>
-inline Matrix<R, C, P> get_derivative( const Matrix<R,C, fadbad::F<P, D>, A> & 
val, const int dim ){
-       Matrix<R, C, P> result;
-       for(int r = 0; r < R; ++r)
-               for(int c = 0; c < C; ++c)
-                       result[r][c] = val[r][c].deriv(dim);
-       return result;
-}
-
-template <typename P>
-inline SO3<fadbad::F<P> > make_fad_so3(int start = 0, int size = 3){
-       // const Vector<3, fadbad::F<double> > p = 
make_fad_vector(makeVector(0.0, 0, 0), start, size);
-       // return SO3<fadbad::F<double> >(p);
-       SO3<fadbad::F<P> > r;
-       // this is a hack
-       Matrix<3,3,fadbad::F<double> > & m = const_cast<Matrix<3,3,fadbad::F<P> 
> &>(r.get_matrix());
-       m(2,1).diff(start, size);
-       m(1,2) = m(2,1) * -1;
-
-       m(0,2).diff(start+1, size);
-       m(2,0) = m(0,2) * -1;
-
-       m(1,0).diff(start+2, size);
-       m(0,1) = m(1,0) * -1;
-
-       return r;
-}
-
-template <typename P, unsigned D>
-inline SO3<fadbad::F<P, D> > make_fad_so3(int start = 0){
-       // const Vector<3, fadbad::F<double> > p = 
make_fad_vector(makeVector(0.0, 0, 0), start, size);
-       // return SO3<fadbad::F<double> >(p);
-       SO3<fadbad::F<P, D> > r;
-       // this is a hack
-       Matrix<3,3,fadbad::F<P, D> > & m = const_cast<Matrix<3,3,fadbad::F<P, 
D> > &>(r.get_matrix());
-       m(2,1).diff(start);
-       m(1,2) = m(2,1) * -1;
-
-       m(0,2).diff(start+1);
-       m(2,0) = m(0,2) * -1;
-
-       m(1,0).diff(start+2);
-       m(0,1) = m(1,0) * -1;
-
-       return r;
-}
-
-template <typename P>
-inline SE3<fadbad::F<P> > make_fad_se3( int start = 0, int size = 6){
-       return SE3<fadbad::F<P> >(make_fad_so3<P>( start+3, size ), 
make_fad_vector(makeVector<P>(0.0, 0, 0), start, size));
-}
-
-template <typename P, unsigned D>
-inline SE3<fadbad::F<P, D> > make_fad_se3( int start = 0){
-       return SE3<fadbad::F<P, D> >(make_fad_so3<P, D>( start+3 ), 
make_fad_vector<D>(makeVector<P>(0.0, 0, 0), start));
-}
-
-template <typename P>
-inline SE2<fadbad::F<P> > make_fad_se2(int start = 0, int size = 3) {
-       return SE2<fadbad::F<P> >(make_fad_vector(makeVector<P>(0.0, 0, 0), 
start, size));
-}
-
-template <typename P, unsigned D>
-inline SE2<fadbad::F<P, D> > make_fad_se2(int start = 0) {
-       return SE2<fadbad::F<P, D> >(make_fad_vector<D>(makeVector<P>(0.0, 0, 
0), start));
-}
-
-template <typename P>
-inline SO2<fadbad::F<P> > make_fad_so2(int start = 0, int size = 1) {
-       fadbad::F<P> r = 0;
-       r.diff(start,size) = 1;
-       return SO2<fadbad::F<P> >(r);
-}
-
-template <typename P, unsigned D>
-inline SO2<fadbad::F<P, D> > make_fad_so2(int start = 0) {
-       fadbad::F<P, D> r = 0;
-       r.diff(start) = 1;
-       return SO2<fadbad::F<P, D> >(r);
-}
-
-template <typename P>
-inline SO3<fadbad::F<P> > make_left_fad_so3( const SO3<P> & r, int start = 0, 
int size = 3 ){
-       return make_fad_so3<P>(start, size) * r;
-}
-
-template <typename P, unsigned D>
-inline SO3<fadbad::F<P, D> > make_left_fad_so3( const SO3<P> & r, int start = 
0){
-       return make_fad_so3<P, D>(start) * r;
-}
-
-template <typename P>
-inline SE3<fadbad::F<P> > make_left_fad_se3( const SE3<P> & t,  int start = 0, 
int size = 6 ){
-       return make_fad_se3<P>(start, size) * t;
-}
-
-template <typename P, unsigned D>
-inline SE3<fadbad::F<P, D> > make_left_fad_se3( const SE3<P> & t,  int start = 
0){
-       return make_fad_se3<P, D>(start) * t;
-}
-
-template <typename P>
-inline SO2<fadbad::F<P> > make_left_fad_so2( const SO2<P> & r, int start = 0, 
int size = 1 ){
-       return make_fad_so2<P>(start, size) * r;
-}
-
-template <typename P, unsigned D>
-inline SO2<fadbad::F<P, D> > make_left_fad_so2( const SO2<P> & r, int start = 
0 ){
-       return make_fad_so2<P, D>(start) * r;
-}
-
-template <typename P>
-inline SE2<fadbad::F<P> > make_left_fad_se2( const SE2<P> & t, int start = 0, 
int size = 3 ){
-       return make_fad_se2<P>(start, size) * t;
-}
-
-template <typename P, unsigned D>
-inline SE2<fadbad::F<P, D> > make_left_fad_se2( const SE2<P> & t, int start = 
0){
-       return make_fad_se2<P, D>(start) * t;
-}
-
-}
-
-#endif // TOON_FADBAD_INTEGATION_H
-

Index: internal/allocator.hh
===================================================================
RCS file: internal/allocator.hh
diff -N internal/allocator.hh
--- internal/allocator.hh       29 Jun 2010 14:03:07 -0000      1.39
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,700 +0,0 @@
-// -*- c++ -*-
-
-// Copyright (C) 2009 Tom Drummond (address@hidden),
-// Ed Rosten (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-// Allocators always copy data on copy construction.
-//
-// When a Vector/Matrix is constructed from a different, but compatible type
-// copying is done at a much higher level: above the level that knows how the
-// data is laid out in memory.
-//
-// At this level, copy construction is required since it is only known here 
-// whether data or a reference to data should be copied.
-
-#ifdef __GNUC__
-#define TOON_ALIGN8 __attribute__ ((aligned(8)))
-#else
-#define TOON_ALIGN8
-#endif
-
-namespace TooN {
-
-namespace Internal
-{
-
-template<class Precision> struct DefaultTypes
-{
-       typedef Precision* PointerType;
-       typedef const Precision* ConstPointerType;
-       typedef Precision& ReferenceType;
-       typedef const Precision& ConstReferenceType;
-};
-
-
-template<int Size, class Precision, bool heap> class StackOrHeap;
-
-template<int Size, class Precision> class StackOrHeap<Size,Precision,0>
-{
-public:
-       StackOrHeap()
-       {
-               debug_initialize(my_data, Size);        
-       }
-       Precision my_data[Size];
-};
-
-template<int Size> class StackOrHeap<Size,double,0>
-{
-public:
-       StackOrHeap()
-       {
-               debug_initialize(my_data, Size);        
-       }
-       double my_data[Size] TOON_ALIGN8 ;
-};
-
-
-template<int Size, class Precision> class StackOrHeap<Size, Precision, 1>
-{
-       public:
-               StackOrHeap()
-               :my_data(new Precision[Size])
-               {
-                       debug_initialize(my_data, Size);        
-               }
-
-
-               ~StackOrHeap()
-               {
-                       delete[] my_data;
-               }
-
-               Precision *my_data;
-
-               StackOrHeap(const StackOrHeap& from)
-               :my_data(new Precision[Size])
-               {
-                       for(int i=0; i < Size; i++)
-                               my_data[i] = from.my_data[i];
-               }
-};
-
-///@internal
-///@brief This allocator object sets aside memory for a statically sized 
object. 
-///It will
-///put all the data on the stack if there are less then 
TooN::max_bytes_on_stack of
-///data, otherwise it will use new/delete.
-///@ingroup gInternal
-template<int Size, class Precision> class StaticSizedAllocator: public 
StackOrHeap<Size, Precision, (sizeof(Precision)*Size>max_bytes_on_stack) >
-{
-};
-
-
-///@internal
-///@brief Allocate memory for a static sized Vector.
-///The class switches to heap allocation automatically for large Vectors.
-///Naturally, the vector is not resizable.
-///@ingroup gInternal
-template<int Size, class Precision> struct VectorAlloc : public 
StaticSizedAllocator<Size, Precision>, DefaultTypes<Precision> {
-       
-       ///Default constructor (only for statically sized vectors)
-       VectorAlloc() { }
-
-       ///Construction from a size (required by damic vectors, ignored 
otherwise).
-       VectorAlloc(int /*s*/) { }
-
-       ///Construction from an Operator. See Operator::size().
-       template<class Op>
-       VectorAlloc(const Operator<Op>&) {}
-       
-       ///Return the size of the vector.
-       int size() const {
-               return Size;
-       }
-
-       using StaticSizedAllocator<Size, Precision>::my_data;
-
-       Precision *get_data_ptr()
-       {
-               return my_data;
-       };
-
-       const Precision *get_data_ptr() const
-       {
-               return my_data;
-       }
-       
-       protected:
-
-               Precision *data()
-               {
-                       return my_data;
-               };
-
-               const Precision *data() const
-               {
-                       return my_data;
-               };
-               
-               void try_destructive_resize(int)
-               {}
-
-               template<class Op> void try_destructive_resize(const 
Operator<Op>&) 
-               {}
-};
-
-///@internal
-///@brief Allocate memory for a dynamic sized Vector.
-///This is not resizable.
-///@ingroup gInternal
-template<class Precision> struct VectorAlloc<Dynamic, Precision>: public 
DefaultTypes<Precision> {
-       Precision * const my_data;
-       const int my_size;
-
-       VectorAlloc(const VectorAlloc& v)
-       :my_data(new Precision[v.my_size]), my_size(v.my_size)
-       { 
-               for(int i=0; i < my_size; i++)
-                       my_data[i] = v.my_data[i];
-       }
-
-       VectorAlloc(int s)
-       :my_data(new Precision[s]), my_size(s)
-       { 
-               debug_initialize(my_data, my_size);     
-       }
-
-       template <class Op>
-       VectorAlloc(const Operator<Op>& op) 
-       : my_data(new Precision[op.size()]), my_size(op.size()) 
-       {
-               debug_initialize(my_data, my_size);     
-       }
-
-       int size() const {
-               return my_size;
-       }
-
-       ~VectorAlloc(){
-               delete[] my_data;
-       }
-
-       Precision *get_data_ptr()
-       {
-               return my_data;
-       };
-
-       const Precision *get_data_ptr() const
-       {
-               return my_data;
-       }
-
-       protected:
-
-               Precision *data()
-               {
-                       return my_data;
-               };
-
-               const Precision *data() const
-               {
-                       return my_data;
-               };
-
-               void try_destructive_resize(int)
-               {}
-
-               template<class Op> void try_destructive_resize(const 
Operator<Op>&) 
-               {}
-};
-
-
-///@internal
-///@brief Allocate memory for a resizable Vector.
-///New elements available after a resize are treated as
-///uninitialized. 
-///@ingroup gInternal
-template<class Precision> struct VectorAlloc<Resizable, Precision>: public 
DefaultTypes<Precision> {
-       protected: 
-               std::vector<Precision> numbers;
-       
-       public:
-
-               VectorAlloc()
-               { 
-               }
-
-               VectorAlloc(int s)
-               :numbers(s)
-               { 
-                       debug_initialize(data(), size());       
-               }
-
-               template <class Op>
-               VectorAlloc(const Operator<Op>& op) 
-               :numbers(op.size()) 
-               {
-                       debug_initialize(data(), size());       
-               }
-
-               int size() const {
-                       return numbers.size();
-               }
-
-               Precision *get_data_ptr()
-               {
-                       return data();
-               };
-
-               const Precision *get_data_ptr() const
-               {
-                       return data();
-               }
-
-       protected:
-
-               Precision* data() {
-                       return &numbers[0];
-               }
-
-               const Precision* data()const  {
-                       return &numbers[0];
-               }
-
-       private:
-               //Dymmy class for implementing sfinae
-               //in order to test for a .size() member
-               template<int S> struct SFINAE_dummy{typedef void type;};
-       
-       protected:
-
-               //SFINAE implementation of try_destructive_resize
-               //to avoid calling .size if it does not exist!
-
-               //Force the function TYPE to depend on a property
-               //of the Operator<Op> type, so that it simply does
-               //not exist if the property is missing.
-               //Therefore this method only uses .size() if it exists.
-               template<class Op> 
-               typename SFINAE_dummy<sizeof(&Operator<Op>::size)>::type 
try_destructive_resize(const Operator<Op>& op) 
-               {
-                       try_destructive_resize(op.size());
-               }
-               
-               //Catch-all do nothing for operators with no size method.
-               template<class Op>
-               void try_destructive_resize(const Op&)
-               {}
-
-               void try_destructive_resize(int newsize)
-               {
-                       numbers.resize(newsize);
-                       debug_initialize(data(), newsize);
-               }
-
-       public:
-
-               void resize(int s)
-               {
-                       int old_size = size();
-                       numbers.resize(s);
-                       if(s > old_size)
-                               debug_initialize(data()+old_size, s-old_size);
-               }
-};
-
-///@internal
-///@brief Hold a pointer to yield a statically sized slice of a Vector.
-///Not resizable.
-///@ingroup gInternal
-//template<int S, class Precision, class PtrType=Precision*, class 
ConstPtrType=const Precision*, class RefType=Precision&, class 
ConstRefType=const Precision&> struct VectorSlice
-template<int S, class Precision, class PtrType=Precision*, class 
ConstPtrType=const Precision*, class RefType=Precision&, class 
ConstRefType=const Precision&> struct VectorSlice
-{
-       int size() const {
-               return S;
-       }
-
-       //Optional Constructors
-       
-       const PtrType my_data;
-       VectorSlice(PtrType p)
-       :my_data(p){}
-
-       VectorSlice(PtrType p, int /*size*/)
-       :my_data(p){}
-
-       template<class Op>
-       VectorSlice(const Operator<Op>& op) : my_data(op.data()) {}
-       
-       protected:
-               PtrType data()
-               {
-                       return my_data;
-               };
-
-               ConstPtrType data() const
-               {
-                       return my_data;
-               };
-
-               void try_destructive_resize(int)
-               {}
-
-               template<class Op> void try_destructive_resize(const 
Operator<Op>&) 
-               {}
-
-       public:
-               typedef PtrType PointerType;
-               typedef ConstPtrType ConstPointerType;
-               typedef RefType ReferenceType;
-               typedef ConstRefType ConstReferenceType;
-};
-
-///@internal
-///@brief Hold a pointer to yield a dynamically sized slice of a Vector.
-///Not resizable.
-///@ingroup gInternal
-template<class Precision, class PtrType, class ConstPtrType, class RefType, 
class ConstRefType> struct VectorSlice<Dynamic, Precision, PtrType, 
ConstPtrType, RefType, ConstRefType>
-{
-       const PtrType my_data;
-       const int my_size;
-
-       VectorSlice(PtrType d, int s)
-       :my_data(d), my_size(s)
-       { }
-
-       template<class Op>
-       VectorSlice(const Operator<Op>& op) : my_data(op.data()), 
my_size(op.size()) {}
-
-       int size() const {
-               return my_size;
-       }
-
-       protected:
-
-               PtrType data()
-               {
-                       return my_data;
-               };
-
-               ConstPtrType data() const
-               {
-                       return my_data;
-               };
-
-               void try_destructive_resize(int)
-               {}
-
-               template<class Op> void try_destructive_resize(const 
Operator<Op>&) 
-               {}
-
-       public:
-               typedef PtrType PointerType;
-               typedef ConstPtrType ConstPointerType;
-               typedef RefType ReferenceType;
-               typedef ConstRefType ConstReferenceType;
-};
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// A class similar to StrideHolder, but to hold the size information for 
matrices.
-
-///@internal
-///@brief This struct holds a size using no data for static sizes.
-///This struct holds a size is the size is dynamic,
-///or simply recorcs the number in the type system if
-///the size is static.
-///@ingroup gInternal
-template<int s> struct SizeHolder
-{
-       //Constructors ignore superfluous arguments
-       SizeHolder(){}    ///<Default constrution
-       SizeHolder(int){} ///<Construct from an int and discard it.
-
-       ///Simply return the statcally known size
-       int size() const{
-               return s;
-       }
-};
-
-///@internal
-///@brief This struct holds a size integer for dynamic sizes.
-///@ingroup gInternal
-template<> struct SizeHolder<-1>
-{
-       ///@name Construction
-       ///@{
-       SizeHolder(int s)
-       :my_size(s){}
-       ///@}
-
-       const int my_size; ///<The size
-       ///Return the size
-       int size() const {
-               return my_size;
-       }
-};
-
-///@internal
-///This struct holds the number of rows, only allocating space if
-///necessary.
-///@ingroup gInternal
-template<int S> struct RowSizeHolder: private SizeHolder<S>
-{
-       ///Construct from an int to provide a run time size if
-       ///necessary. 
-       ///@param i The size, which is discarded for the static case.
-       RowSizeHolder(int i)
-       :SizeHolder<S>(i){}
-
-       RowSizeHolder()
-       {}
-       
-       ///Construct from an Operator, taking the size from the operator.
-       ///The size is only used in the dynamic case.
-       ///@param op Operator from which to determine the size.
-       template<typename Op>
-       RowSizeHolder(const Operator<Op>& op) : SizeHolder<S>(op.num_rows()) {}
-       
-       ///Return the number of rows.
-       int num_rows() const {return SizeHolder<S>::size();}
-};
-
-
-///@internal
-///This struct holds the number of columns, only allocating space if
-///necessary.
-///@ingroup gInternal
-template<int S> struct ColSizeHolder: private SizeHolder<S>
-{
-       ///Construct from an int to provide a run time size if
-       ///necessary. 
-       ///@param i The size, which is discarded for the static case.
-       ColSizeHolder(int i)
-       :SizeHolder<S>(i){}
-
-       ColSizeHolder()
-       {}
-
-       ///Construct from an Operator, taking the size from the operator.
-       ///The size is only used in the dynamic case.
-       ///@param op Operator from which to determine the size.
-       template<typename Op>
-       ColSizeHolder(const Operator<Op>& op) : SizeHolder<S>(op.num_cols()) {}
-
-       ///Return the number of columns.
-       int num_cols() const {return SizeHolder<S>::size();}    
-};
-
-
-
-template<int R, int C, class Precision, bool FullyStatic=(R>=0 && C>=0)> 
-struct MatrixAlloc: public StaticSizedAllocator<R*C, Precision>
-{
-       MatrixAlloc(int,int)
-       {}
-
-       MatrixAlloc()
-       {}
-
-       template <class Op>
-       MatrixAlloc(const Operator<Op>&)
-       {}
-
-       int num_rows() const {
-               return R;
-       }
-
-       int num_cols() const {
-               return C;
-       }
-
-       using  StaticSizedAllocator<R*C, Precision>::my_data;
-
-       Precision* get_data_ptr()
-       {
-               return my_data;
-       }
-
-       const Precision* get_data_ptr() const 
-       {
-               return my_data;
-       }
-};
-
-
-template<int R, int C, class Precision> struct MatrixAlloc<R, C, Precision, 
false>
-       : public RowSizeHolder<R>,
-       ColSizeHolder<C>
-{
-       Precision* const my_data;
-
-       using RowSizeHolder<R>::num_rows;
-       using ColSizeHolder<C>::num_cols;
-       
-       // copy constructor so guaranteed contiguous
-       MatrixAlloc(const MatrixAlloc& m)
-               :RowSizeHolder<R>(m.num_rows()),
-                ColSizeHolder<C>(m.num_cols()),
-                my_data(new Precision[num_rows()*num_cols()]) {
-               const int size=num_rows()*num_cols();
-               for(int i=0; i < size; i++) {
-                       my_data[i] = m.my_data[i];
-               }
-       }
-
-       MatrixAlloc(int r, int c)
-       :RowSizeHolder<R>(r),
-        ColSizeHolder<C>(c),
-        my_data(new Precision[num_rows()*num_cols()]) 
-       {
-               debug_initialize(my_data, num_rows()*num_cols());       
-       }
-
-       template <class Op>     MatrixAlloc(const Operator<Op>& op)
-               :RowSizeHolder<R>(op),
-                ColSizeHolder<C>(op),
-                my_data(new Precision[num_rows()*num_cols()])
-       {
-               debug_initialize(my_data, num_rows()*num_cols());       
-       }
-
-       ~MatrixAlloc() {
-               delete[] my_data;
-       }
-
-       Precision* get_data_ptr()
-       {
-               return my_data;
-       }
-
-       const Precision* get_data_ptr() const 
-       {
-               return my_data;
-       }
-};
-
-
-template<int R, int C, class Precision> struct MatrixSlice
-       : public RowSizeHolder<R>,
-       ColSizeHolder<C>
-{
-       Precision* const my_data;
-
-       using RowSizeHolder<R>::num_rows;
-       using ColSizeHolder<C>::num_cols;
-
-       //Optional Constructors
-       MatrixSlice(Precision* p)
-       :my_data(p){}
-
-       MatrixSlice(Precision* p, int r, int c)
-               :RowSizeHolder<R>(r),
-                ColSizeHolder<C>(c),
-                my_data(p){}
-       
-       template<class Op>
-       MatrixSlice(const Operator<Op>& op)
-               :RowSizeHolder<R>(op),
-                ColSizeHolder<C>(op),
-                my_data(op.data())
-       {}
-};
-
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// A class similar to mem, but to hold the stride information. It is only 
needed
-// for -1. For +int and -2, the stride is part fo teh type, or implicit.
-
-template<int s> struct StrideHolder
-{
-       //Constructos ignore superfluous arguments
-       StrideHolder(){}
-       StrideHolder(int){}
-
-       template<class Op>
-       StrideHolder(const Operator<Op>&) {}
-
-       int stride() const{
-               return s;
-       }
-};
-
-template<> struct StrideHolder<-1>
-{
-       StrideHolder(int s)
-       :my_stride(s){}
-
-       template<class Op>
-       StrideHolder(const Operator<Op>& op) : my_stride(op.stride()) {}
-
-       const int my_stride;
-       int stride() const {
-               return my_stride;
-       }
-};
-
-
-template<int S> struct RowStrideHolder: public StrideHolder<S>
-{
-       RowStrideHolder(int i)
-       :StrideHolder<S>(i){}
-
-       RowStrideHolder()
-       {}
-
-       template<class Op>
-       RowStrideHolder(const Operator<Op>& op)
-               : StrideHolder<S>(op)
-       {}
-
-};
-
-
-template<int S> struct ColStrideHolder: public StrideHolder<S>
-{
-       ColStrideHolder(int i)
-       :StrideHolder<S>(i){}
-
-       ColStrideHolder()
-       {}
-
-       template<class Op>
-       ColStrideHolder(const Operator<Op>& op)
-               : StrideHolder<S>(op)
-       {}
-};
-
-}
-
-}
-
-
-#undef TOON_ALIGN8

Index: internal/builtin_typeof.h
===================================================================
RCS file: internal/builtin_typeof.h
diff -N internal/builtin_typeof.h
--- internal/builtin_typeof.h   22 Apr 2011 21:05:22 -0000      1.2
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,25 +0,0 @@
-template<int N> struct Enumerate{char i[N];};
-Enumerate<0> enumerate(const unsigned char&);
-Enumerate<1> enumerate(const char&);
-Enumerate<2> enumerate(const int&);
-Enumerate<3> enumerate(const unsigned int&);
-Enumerate<4> enumerate(const float&);
-Enumerate<5> enumerate(const double&);
-Enumerate<6> enumerate(const std::complex<float>&);
-Enumerate<7> enumerate(const std::complex<double>&);
-template<int N> struct DeEnumerate{};
-template<> struct DeEnumerate<0>{typedef unsigned char type;};
-template<> struct DeEnumerate<1>{typedef char type;};
-template<> struct DeEnumerate<2>{typedef int type;};
-template<> struct DeEnumerate<3>{typedef unsigned int type;};
-template<> struct DeEnumerate<4>{typedef float type;};
-template<> struct DeEnumerate<5>{typedef double type;};
-template<> struct DeEnumerate<6>{typedef std::complex<float> type;};
-template<> struct DeEnumerate<7>{typedef std::complex<double> type;};
-
-#ifdef _FADBAD_H
-Enumerate<8> enumerate(const ::fadbad::F<float>&);
-Enumerate<9> enumerate(const ::fadbad::F<double>&);
-template<> struct DeEnumerate<8>{typedef ::fadbad::F<float> type;};
-template<> struct DeEnumerate<9>{typedef ::fadbad::F<double> type;};
-#endif

Index: internal/comma.hh
===================================================================
RCS file: internal/comma.hh
diff -N internal/comma.hh
--- internal/comma.hh   9 Dec 2009 18:51:14 -0000       1.3
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,152 +0,0 @@
-namespace TooN{
-
-
-
-namespace Internal
-{
-       template<int N, int Size, class P, class B> struct VectorFiller
-       {
-               Vector<Size, P, B>& v;
-               VectorFiller<N-1, Size, P, B>* parent;
-               bool underfill;
-
-               VectorFiller(Vector<Size, P, B>& v_, VectorFiller<N-1, Size, P, 
B>* p)
-               :v(v_),parent(p),underfill(N<v.size())
-               {
-               }
-
-               VectorFiller<N+1, Size, P, B> operator,(const P& p)
-               {
-                       Internal::CheckOverFill<N, Size>::check(v.size());
-                       v[N] = p;
-                       return VectorFiller<N+1, Size, P, B>(v, this);
-               }
-
-               ~VectorFiller()
-               {
-                       #ifndef TOON_NDEBUG_FILL
-                               if(underfill)
-                               {
-                                       #ifdef TOON_TEST_INTERNALS
-                                               throw Internal::Underfill();
-                                       #else
-                                               std::cerr << "TooN: underfilled 
vector\n";
-                                               std::abort();
-                                       #endif
-                               }
-                               else if(parent)
-                                       parent->underfill = 0;
-                       #endif
-               }
-       };
-
-       template<int Size, class P, class B> struct VectorStartFill
-       {
-               Vector<Size, P, B>& v;
-               VectorStartFill(Vector<Size, P, B> & v_)
-               :v(v_){}
-
-               VectorFiller<1, Size, P, B> operator=(const P& p)
-               {
-                       Internal::CheckOverFill<1, Size>::check(v.size());
-                       v[0] = p;
-                       return VectorFiller<1, Size, P, B>(v, 0);
-               }
-       };
-
-
-       template<int N, int R, int C, class P, class B> struct MatrixFiller
-       {
-               Matrix<R, C, P, B>& m;
-               MatrixFiller<N-1, R, C, P, B>* parent;
-               int r, c;
-               bool underfill;
-
-               MatrixFiller(Matrix<R, C, P, B>& m_, MatrixFiller<N-1, R, C, P, 
B>*p, int r_, int c_)
-               :m(m_),parent(p),r(r_),c(c_),underfill(r < m.num_rows())
-               {}
-
-               MatrixFiller<N+1, R, C, P, B> operator,(const P& p)
-               {
-                       Internal::CheckMOverFill<N, R, C>::check(m.num_rows() * 
m.num_cols());
-                       m[r][c] = p;
-                       c++;
-                       if(c == m.num_cols())
-                       {
-                               c=0;
-                               r++;
-                       }               
-
-                       return MatrixFiller<N+1, R, C, P, B>(m, this, r, c);
-               }
-
-               ~MatrixFiller()
-               {
-                       #ifndef TOON_NDEBUG_FILL
-                               if(underfill)
-                               {
-                                       #ifdef TOON_TEST_INTERNALS
-                                               throw Internal::Underfill();
-                                       #else
-                                               std::cerr << "TooN: underfilled 
matrix\n";
-                                               std::abort();
-                                       #endif
-                               }
-                               else if(parent)
-                                       parent->underfill = 0;
-                       #endif
-               }
-       };
-
-       template<int R, int C, class P, class B> struct MatrixStartFill
-       {
-               Matrix<R, C, P, B>& m;
-               MatrixStartFill(Matrix<R, C, P, B> & m_)
-               :m(m_){}
-
-               MatrixFiller<1, R, C, P, B> operator=(const P& p)
-               {
-                       Internal::CheckMOverFill<0, R, C>::check(m.num_rows() * 
m.num_cols());
-                       m[0][0] = p;
-                       return MatrixFiller<1, R, C, P, B>(m, 0, 0, 1);
-               }
-       };
-
-}
-
-/**Set up a matrix for filling. Uses the following syntax:
address@hidden
-       Matrix<2,2> m;
-       Fill(m) = 1, 2,
-                 3, 4;
address@hidden
-Overfill is detected at compile time if possible, underfill
-is detected at run-time. The checks can not be optimized out
-for dynamic matrices, so define \c TOON_NDEBUG_FILL to prevent
-the checks from being used.
address@hidden m Matrix to fill
address@hidden gLinAlg
-*/
-template<int R, int C, class Precision, class Base> 
Internal::MatrixStartFill<R, C, Precision, Base> Fill(Matrix<R, C, Precision, 
Base>& m)
-{
-       return m;
-}
-
-/**Set up a vector for filling. Uses the following syntax:
address@hidden
-       Vector<2> v;
-       Fill(v) = 1, 2;
address@hidden
-Overfill is detected at compile time if possible, underfill
-is detected at run-time. The checks can not be optimized out
-for dynamic vectors, so define \c TOON_NDEBUG_FILL to prevent
-the checks from being used.
address@hidden v Vector to fill
address@hidden gLinAlg
-*/
-template<int Size, class Precision, class Base> 
Internal::VectorStartFill<Size, Precision, Base> Fill(Vector<Size, Precision, 
Base>& v)
-{
-       return v;
-}
-
-}

Index: internal/config.hh
===================================================================
RCS file: internal/config.hh
diff -N internal/config.hh
--- internal/config.hh  6 Feb 2012 14:59:35 -0000       1.34
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,16 +0,0 @@
-/* internal/config.hh.  Generated from config.hh.in by configure.  */
-/* #undef TOON_TYPEOF_DECLTYPE */
-
-/* #undef TOON_TYPEOF_TYPEOF */
-
-#define TOON_TYPEOF___TYPEOF__ 1
-
-/* #undef TOON_TYPEOF_BOOST */
-
-/* #undef TOON_TYPEOF_BUILTIN */
-
-#define TOON_DEPRECATED_GCC 1 
-
-#define TOON_USE_LAPACK 1
-
-/* #undef TOON_DEFAULT_PRECISION */

Index: internal/config.hh.in
===================================================================
RCS file: internal/config.hh.in
diff -N internal/config.hh.in
--- internal/config.hh.in       5 May 2010 23:46:54 -0000       1.4
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,15 +0,0 @@
-#undef TOON_TYPEOF_DECLTYPE
-
-#undef TOON_TYPEOF_TYPEOF
-
-#undef TOON_TYPEOF___TYPEOF__
-
-#undef TOON_TYPEOF_BOOST
-
-#undef TOON_TYPEOF_BUILTIN
-
-#undef TOON_DEPRECATED_GCC
-
-#undef TOON_USE_LAPACK
-
-#undef TOON_DEFAULT_PRECISION
\ No newline at end of file

Index: internal/data.hh
===================================================================
RCS file: internal/data.hh
diff -N internal/data.hh
--- internal/data.hh    18 Aug 2009 14:15:39 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,54 +0,0 @@
-namespace TooN{
-       namespace Internal{
-               template<int N, class P> class Data;
-       }
-
-
-       ///@internal
-       ///@brief Object which fills a matrix some data.
-       ///There is no size known, since the size of the data is known at 
compile time.
-       ///Therefore if the size of the matrix is not known, then something 
deeply strange is
-       ///going on.
-       ///@ingroup gInternal
-       template<int N, class P> struct Operator<Internal::Data<N, P> >
-       {
-               P vals[N];
-
-               template<int R, int C, class T, class B>
-               void eval(Matrix<R, C, T, B>& m) const
-               {
-                       SizeMismatch<(R==-1?-1:(C==-1?-1:(R*C))), N>:: 
test(m.num_rows()*m.num_cols(), N);
-                       for(int r=0, n=0; r < R; r++)
-                               for(int c=0; c < C; c++, n++)
-                                       m[r][c] = vals[n];
-               }
-       };
-
-       #ifdef DOXYGEN_INCLUDE_ONLY_FOR_DOCS
-       
-               ///Package up the function arguments as some data for filling 
matrices.
-               ///Matrices are filled in row major order.
-               ///For example:
-               ///@code
-               ///   double theta = 2;
-               ///   Matrix<2> rotation = data( cos(theta), sin(theta)
-               ///                             -sin(theta), cos(theta));
-               ///@endcode
-               ///See also TooN::wrapMatrix().
-               ///@param a The first data element.
-               ///@ingroup gLinAlg
-               inline Operator<Internal::Data<N, double> > Data(double a, ...);
-
-               ///Package up the function arguments as some data for filling 
matrices.
-               ///Any type can be uses. Matrices are filled in row-major order.
-               ///@code
-               ///   Matrix<2,2,float> rotation = data(1f, 2f, 3f, 4f);
-               ///@endcode
-               ///See also TooN::wrapMatrix().
-               ///@param a The first data element.
-               ///@ingroup gLinAlg
-               template<typename Precision> inline Operator<Internal::Data<N, 
Precision> > Data(const Precision& a, ...);
-
-       #endif
-
-}

Index: internal/data_functions.hh
===================================================================
RCS file: internal/data_functions.hh
diff -N internal/data_functions.hh
--- internal/data_functions.hh  18 Aug 2009 14:15:39 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,10904 +0,0 @@
-//Mechanically generate code. Do not edit.
-namespace TooN {
-//modify make_data.awk and run make internal/data_functions.hh
-inline Operator<Internal::Data<1, double> > Data(double x1){
-  Operator<Internal::Data<1, double> > d;
-  d.vals[0] = x1;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<1, Precision> > 
Data(const Precision& x1){
-  Operator<Internal::Data<1, Precision> > d;
-  d.vals[0] = x1;
-  return d;
-}
-inline Operator<Internal::Data<2, double> > Data(double x1, double x2){
-  Operator<Internal::Data<2, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<2, Precision> > 
Data(const Precision& x1, const Precision& x2){
-  Operator<Internal::Data<2, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  return d;
-}
-inline Operator<Internal::Data<3, double> > Data(double x1, double x2, double 
x3){
-  Operator<Internal::Data<3, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<3, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3){
-  Operator<Internal::Data<3, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  return d;
-}
-inline Operator<Internal::Data<4, double> > Data(double x1, double x2, double 
x3, double x4){
-  Operator<Internal::Data<4, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<4, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4){
-  Operator<Internal::Data<4, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  return d;
-}
-inline Operator<Internal::Data<5, double> > Data(double x1, double x2, double 
x3, double x4, double x5){
-  Operator<Internal::Data<5, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<5, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5){
-  Operator<Internal::Data<5, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  return d;
-}
-inline Operator<Internal::Data<6, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6){
-  Operator<Internal::Data<6, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<6, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6){
-  Operator<Internal::Data<6, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  return d;
-}
-inline Operator<Internal::Data<7, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7){
-  Operator<Internal::Data<7, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<7, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7){
-  Operator<Internal::Data<7, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  return d;
-}
-inline Operator<Internal::Data<8, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8){
-  Operator<Internal::Data<8, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<8, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8){
-  Operator<Internal::Data<8, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  return d;
-}
-inline Operator<Internal::Data<9, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9){
-  Operator<Internal::Data<9, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<9, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9){
-  Operator<Internal::Data<9, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  return d;
-}
-inline Operator<Internal::Data<10, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10){
-  Operator<Internal::Data<10, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<10, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10){
-  Operator<Internal::Data<10, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  return d;
-}
-inline Operator<Internal::Data<11, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11){
-  Operator<Internal::Data<11, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<11, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11){
-  Operator<Internal::Data<11, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  return d;
-}
-inline Operator<Internal::Data<12, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12){
-  Operator<Internal::Data<12, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<12, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12){
-  Operator<Internal::Data<12, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  return d;
-}
-inline Operator<Internal::Data<13, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13){
-  Operator<Internal::Data<13, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<13, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13){
-  Operator<Internal::Data<13, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  return d;
-}
-inline Operator<Internal::Data<14, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14){
-  Operator<Internal::Data<14, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<14, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14){
-  Operator<Internal::Data<14, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  return d;
-}
-inline Operator<Internal::Data<15, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15){
-  Operator<Internal::Data<15, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<15, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15){
-  Operator<Internal::Data<15, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  return d;
-}
-inline Operator<Internal::Data<16, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16){
-  Operator<Internal::Data<16, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<16, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16){
-  Operator<Internal::Data<16, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  return d;
-}
-inline Operator<Internal::Data<17, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17){
-  Operator<Internal::Data<17, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<17, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17){
-  Operator<Internal::Data<17, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  return d;
-}
-inline Operator<Internal::Data<18, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18){
-  Operator<Internal::Data<18, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<18, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18){
-  Operator<Internal::Data<18, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  return d;
-}
-inline Operator<Internal::Data<19, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19){
-  Operator<Internal::Data<19, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<19, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19){
-  Operator<Internal::Data<19, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  return d;
-}
-inline Operator<Internal::Data<20, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20){
-  Operator<Internal::Data<20, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<20, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20){
-  Operator<Internal::Data<20, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  return d;
-}
-inline Operator<Internal::Data<21, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21){
-  Operator<Internal::Data<21, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<21, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21){
-  Operator<Internal::Data<21, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  return d;
-}
-inline Operator<Internal::Data<22, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22){
-  Operator<Internal::Data<22, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<22, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22){
-  Operator<Internal::Data<22, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  return d;
-}
-inline Operator<Internal::Data<23, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23){
-  Operator<Internal::Data<23, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<23, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23){
-  Operator<Internal::Data<23, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  return d;
-}
-inline Operator<Internal::Data<24, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24){
-  Operator<Internal::Data<24, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<24, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24){
-  Operator<Internal::Data<24, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  return d;
-}
-inline Operator<Internal::Data<25, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25){
-  Operator<Internal::Data<25, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<25, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25){
-  Operator<Internal::Data<25, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  return d;
-}
-inline Operator<Internal::Data<26, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26){
-  Operator<Internal::Data<26, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<26, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26){
-  Operator<Internal::Data<26, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  return d;
-}
-inline Operator<Internal::Data<27, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27){
-  Operator<Internal::Data<27, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<27, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27){
-  Operator<Internal::Data<27, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  return d;
-}
-inline Operator<Internal::Data<28, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28){
-  Operator<Internal::Data<28, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<28, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28){
-  Operator<Internal::Data<28, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  return d;
-}
-inline Operator<Internal::Data<29, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29){
-  Operator<Internal::Data<29, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<29, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29){
-  Operator<Internal::Data<29, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  return d;
-}
-inline Operator<Internal::Data<30, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30){
-  Operator<Internal::Data<30, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<30, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30){
-  Operator<Internal::Data<30, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  return d;
-}
-inline Operator<Internal::Data<31, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31){
-  Operator<Internal::Data<31, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<31, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31){
-  Operator<Internal::Data<31, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  return d;
-}
-inline Operator<Internal::Data<32, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32){
-  Operator<Internal::Data<32, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<32, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32){
-  Operator<Internal::Data<32, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  return d;
-}
-inline Operator<Internal::Data<33, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33){
-  Operator<Internal::Data<33, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<33, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33){
-  Operator<Internal::Data<33, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  return d;
-}
-inline Operator<Internal::Data<34, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34){
-  Operator<Internal::Data<34, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<34, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34){
-  Operator<Internal::Data<34, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  return d;
-}
-inline Operator<Internal::Data<35, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35){
-  Operator<Internal::Data<35, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<35, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35){
-  Operator<Internal::Data<35, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  return d;
-}
-inline Operator<Internal::Data<36, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36){
-  Operator<Internal::Data<36, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<36, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36){
-  Operator<Internal::Data<36, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  return d;
-}
-inline Operator<Internal::Data<37, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37){
-  Operator<Internal::Data<37, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<37, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37){
-  Operator<Internal::Data<37, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  return d;
-}
-inline Operator<Internal::Data<38, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38){
-  Operator<Internal::Data<38, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<38, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38){
-  Operator<Internal::Data<38, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  return d;
-}
-inline Operator<Internal::Data<39, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39){
-  Operator<Internal::Data<39, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<39, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39){
-  Operator<Internal::Data<39, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  return d;
-}
-inline Operator<Internal::Data<40, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40){
-  Operator<Internal::Data<40, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<40, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40){
-  Operator<Internal::Data<40, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  return d;
-}
-inline Operator<Internal::Data<41, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41){
-  Operator<Internal::Data<41, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<41, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41){
-  Operator<Internal::Data<41, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  return d;
-}
-inline Operator<Internal::Data<42, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42){
-  Operator<Internal::Data<42, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<42, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42){
-  Operator<Internal::Data<42, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  return d;
-}
-inline Operator<Internal::Data<43, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43){
-  Operator<Internal::Data<43, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<43, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43){
-  Operator<Internal::Data<43, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  return d;
-}
-inline Operator<Internal::Data<44, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44){
-  Operator<Internal::Data<44, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<44, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44){
-  Operator<Internal::Data<44, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  return d;
-}
-inline Operator<Internal::Data<45, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45){
-  Operator<Internal::Data<45, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<45, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45){
-  Operator<Internal::Data<45, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  return d;
-}
-inline Operator<Internal::Data<46, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46){
-  Operator<Internal::Data<46, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<46, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46){
-  Operator<Internal::Data<46, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  return d;
-}
-inline Operator<Internal::Data<47, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47){
-  Operator<Internal::Data<47, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<47, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47){
-  Operator<Internal::Data<47, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  return d;
-}
-inline Operator<Internal::Data<48, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48){
-  Operator<Internal::Data<48, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<48, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48){
-  Operator<Internal::Data<48, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  return d;
-}
-inline Operator<Internal::Data<49, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49){
-  Operator<Internal::Data<49, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<49, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49){
-  Operator<Internal::Data<49, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  return d;
-}
-inline Operator<Internal::Data<50, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50){
-  Operator<Internal::Data<50, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<50, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50){
-  Operator<Internal::Data<50, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  return d;
-}
-inline Operator<Internal::Data<51, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51){
-  Operator<Internal::Data<51, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<51, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51){
-  Operator<Internal::Data<51, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  return d;
-}
-inline Operator<Internal::Data<52, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52){
-  Operator<Internal::Data<52, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<52, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52){
-  Operator<Internal::Data<52, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  return d;
-}
-inline Operator<Internal::Data<53, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53){
-  Operator<Internal::Data<53, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<53, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53){
-  Operator<Internal::Data<53, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  return d;
-}
-inline Operator<Internal::Data<54, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54){
-  Operator<Internal::Data<54, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<54, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54){
-  Operator<Internal::Data<54, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  return d;
-}
-inline Operator<Internal::Data<55, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55){
-  Operator<Internal::Data<55, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<55, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55){
-  Operator<Internal::Data<55, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  return d;
-}
-inline Operator<Internal::Data<56, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56){
-  Operator<Internal::Data<56, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<56, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56){
-  Operator<Internal::Data<56, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  return d;
-}
-inline Operator<Internal::Data<57, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57){
-  Operator<Internal::Data<57, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<57, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57){
-  Operator<Internal::Data<57, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  return d;
-}
-inline Operator<Internal::Data<58, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58){
-  Operator<Internal::Data<58, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<58, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58){
-  Operator<Internal::Data<58, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  return d;
-}
-inline Operator<Internal::Data<59, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59){
-  Operator<Internal::Data<59, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<59, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59){
-  Operator<Internal::Data<59, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  return d;
-}
-inline Operator<Internal::Data<60, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60){
-  Operator<Internal::Data<60, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<60, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60){
-  Operator<Internal::Data<60, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  return d;
-}
-inline Operator<Internal::Data<61, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61){
-  Operator<Internal::Data<61, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<61, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61){
-  Operator<Internal::Data<61, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  return d;
-}
-inline Operator<Internal::Data<62, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62){
-  Operator<Internal::Data<62, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<62, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62){
-  Operator<Internal::Data<62, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  return d;
-}
-inline Operator<Internal::Data<63, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63){
-  Operator<Internal::Data<63, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<63, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63){
-  Operator<Internal::Data<63, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  return d;
-}
-inline Operator<Internal::Data<64, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64){
-  Operator<Internal::Data<64, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<64, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64){
-  Operator<Internal::Data<64, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  return d;
-}
-inline Operator<Internal::Data<65, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65){
-  Operator<Internal::Data<65, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<65, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65){
-  Operator<Internal::Data<65, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  return d;
-}
-inline Operator<Internal::Data<66, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66){
-  Operator<Internal::Data<66, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<66, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66){
-  Operator<Internal::Data<66, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  return d;
-}
-inline Operator<Internal::Data<67, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67){
-  Operator<Internal::Data<67, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<67, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67){
-  Operator<Internal::Data<67, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  return d;
-}
-inline Operator<Internal::Data<68, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68){
-  Operator<Internal::Data<68, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<68, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68){
-  Operator<Internal::Data<68, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  return d;
-}
-inline Operator<Internal::Data<69, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69){
-  Operator<Internal::Data<69, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<69, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69){
-  Operator<Internal::Data<69, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  return d;
-}
-inline Operator<Internal::Data<70, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70){
-  Operator<Internal::Data<70, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<70, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70){
-  Operator<Internal::Data<70, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  return d;
-}
-inline Operator<Internal::Data<71, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71){
-  Operator<Internal::Data<71, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<71, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71){
-  Operator<Internal::Data<71, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  return d;
-}
-inline Operator<Internal::Data<72, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72){
-  Operator<Internal::Data<72, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<72, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72){
-  Operator<Internal::Data<72, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  return d;
-}
-inline Operator<Internal::Data<73, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73){
-  Operator<Internal::Data<73, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<73, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73){
-  Operator<Internal::Data<73, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  return d;
-}
-inline Operator<Internal::Data<74, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74){
-  Operator<Internal::Data<74, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<74, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74){
-  Operator<Internal::Data<74, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  return d;
-}
-inline Operator<Internal::Data<75, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75){
-  Operator<Internal::Data<75, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<75, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75){
-  Operator<Internal::Data<75, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  return d;
-}
-inline Operator<Internal::Data<76, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76){
-  Operator<Internal::Data<76, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<76, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76){
-  Operator<Internal::Data<76, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  return d;
-}
-inline Operator<Internal::Data<77, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77){
-  Operator<Internal::Data<77, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<77, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77){
-  Operator<Internal::Data<77, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  return d;
-}
-inline Operator<Internal::Data<78, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78){
-  Operator<Internal::Data<78, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<78, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78){
-  Operator<Internal::Data<78, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  return d;
-}
-inline Operator<Internal::Data<79, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79){
-  Operator<Internal::Data<79, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<79, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79){
-  Operator<Internal::Data<79, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  return d;
-}
-inline Operator<Internal::Data<80, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80){
-  Operator<Internal::Data<80, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<80, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80){
-  Operator<Internal::Data<80, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  return d;
-}
-inline Operator<Internal::Data<81, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81){
-  Operator<Internal::Data<81, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<81, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81){
-  Operator<Internal::Data<81, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  return d;
-}
-inline Operator<Internal::Data<82, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82){
-  Operator<Internal::Data<82, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<82, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82){
-  Operator<Internal::Data<82, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  return d;
-}
-inline Operator<Internal::Data<83, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83){
-  Operator<Internal::Data<83, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<83, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83){
-  Operator<Internal::Data<83, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  return d;
-}
-inline Operator<Internal::Data<84, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84){
-  Operator<Internal::Data<84, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<84, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84){
-  Operator<Internal::Data<84, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  return d;
-}
-inline Operator<Internal::Data<85, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85){
-  Operator<Internal::Data<85, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<85, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85){
-  Operator<Internal::Data<85, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  return d;
-}
-inline Operator<Internal::Data<86, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85, double x86){
-  Operator<Internal::Data<86, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<86, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86){
-  Operator<Internal::Data<86, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  return d;
-}
-inline Operator<Internal::Data<87, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85, double x86, double x87){
-  Operator<Internal::Data<87, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  d.vals[86] = x87;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<87, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86, const Precision& x87){
-  Operator<Internal::Data<87, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  d.vals[86] = x87;
-  return d;
-}
-inline Operator<Internal::Data<88, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85, double x86, double x87, double 
x88){
-  Operator<Internal::Data<88, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  d.vals[86] = x87;
-  d.vals[87] = x88;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<88, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86, const Precision& x87, const 
Precision& x88){
-  Operator<Internal::Data<88, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  d.vals[86] = x87;
-  d.vals[87] = x88;
-  return d;
-}
-inline Operator<Internal::Data<89, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85, double x86, double x87, double 
x88, double x89){
-  Operator<Internal::Data<89, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  d.vals[86] = x87;
-  d.vals[87] = x88;
-  d.vals[88] = x89;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<89, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86, const Precision& x87, const 
Precision& x88, const Precision& x89){
-  Operator<Internal::Data<89, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  d.vals[86] = x87;
-  d.vals[87] = x88;
-  d.vals[88] = x89;
-  return d;
-}
-inline Operator<Internal::Data<90, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85, double x86, double x87, double 
x88, double x89, double x90){
-  Operator<Internal::Data<90, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  d.vals[86] = x87;
-  d.vals[87] = x88;
-  d.vals[88] = x89;
-  d.vals[89] = x90;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<90, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86, const Precision& x87, const 
Precision& x88, const Precision& x89, const Precision& x90){
-  Operator<Internal::Data<90, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  d.vals[86] = x87;
-  d.vals[87] = x88;
-  d.vals[88] = x89;
-  d.vals[89] = x90;
-  return d;
-}
-inline Operator<Internal::Data<91, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85, double x86, double x87, double 
x88, double x89, double x90, double x91){
-  Operator<Internal::Data<91, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  d.vals[86] = x87;
-  d.vals[87] = x88;
-  d.vals[88] = x89;
-  d.vals[89] = x90;
-  d.vals[90] = x91;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<91, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86, const Precision& x87, const 
Precision& x88, const Precision& x89, const Precision& x90, const Precision& 
x91){
-  Operator<Internal::Data<91, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  d.vals[86] = x87;
-  d.vals[87] = x88;
-  d.vals[88] = x89;
-  d.vals[89] = x90;
-  d.vals[90] = x91;
-  return d;
-}
-inline Operator<Internal::Data<92, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85, double x86, double x87, double 
x88, double x89, double x90, double x91, double x92){
-  Operator<Internal::Data<92, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  d.vals[86] = x87;
-  d.vals[87] = x88;
-  d.vals[88] = x89;
-  d.vals[89] = x90;
-  d.vals[90] = x91;
-  d.vals[91] = x92;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<92, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86, const Precision& x87, const 
Precision& x88, const Precision& x89, const Precision& x90, const Precision& 
x91, const Precision& x92){
-  Operator<Internal::Data<92, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  d.vals[86] = x87;
-  d.vals[87] = x88;
-  d.vals[88] = x89;
-  d.vals[89] = x90;
-  d.vals[90] = x91;
-  d.vals[91] = x92;
-  return d;
-}
-inline Operator<Internal::Data<93, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85, double x86, double x87, double 
x88, double x89, double x90, double x91, double x92, double x93){
-  Operator<Internal::Data<93, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  d.vals[86] = x87;
-  d.vals[87] = x88;
-  d.vals[88] = x89;
-  d.vals[89] = x90;
-  d.vals[90] = x91;
-  d.vals[91] = x92;
-  d.vals[92] = x93;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<93, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86, const Precision& x87, const 
Precision& x88, const Precision& x89, const Precision& x90, const Precision& 
x91, const Precision& x92, const Precision& x93){
-  Operator<Internal::Data<93, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  d.vals[86] = x87;
-  d.vals[87] = x88;
-  d.vals[88] = x89;
-  d.vals[89] = x90;
-  d.vals[90] = x91;
-  d.vals[91] = x92;
-  d.vals[92] = x93;
-  return d;
-}
-inline Operator<Internal::Data<94, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85, double x86, double x87, double 
x88, double x89, double x90, double x91, double x92, double x93, double x94){
-  Operator<Internal::Data<94, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  d.vals[86] = x87;
-  d.vals[87] = x88;
-  d.vals[88] = x89;
-  d.vals[89] = x90;
-  d.vals[90] = x91;
-  d.vals[91] = x92;
-  d.vals[92] = x93;
-  d.vals[93] = x94;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<94, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86, const Precision& x87, const 
Precision& x88, const Precision& x89, const Precision& x90, const Precision& 
x91, const Precision& x92, const Precision& x93, const Precision& x94){
-  Operator<Internal::Data<94, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  d.vals[86] = x87;
-  d.vals[87] = x88;
-  d.vals[88] = x89;
-  d.vals[89] = x90;
-  d.vals[90] = x91;
-  d.vals[91] = x92;
-  d.vals[92] = x93;
-  d.vals[93] = x94;
-  return d;
-}
-inline Operator<Internal::Data<95, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85, double x86, double x87, double 
x88, double x89, double x90, double x91, double x92, double x93, double x94, 
double x95){
-  Operator<Internal::Data<95, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  d.vals[86] = x87;
-  d.vals[87] = x88;
-  d.vals[88] = x89;
-  d.vals[89] = x90;
-  d.vals[90] = x91;
-  d.vals[91] = x92;
-  d.vals[92] = x93;
-  d.vals[93] = x94;
-  d.vals[94] = x95;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<95, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86, const Precision& x87, const 
Precision& x88, const Precision& x89, const Precision& x90, const Precision& 
x91, const Precision& x92, const Precision& x93, const Precision& x94, const 
Precision& x95){
-  Operator<Internal::Data<95, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  d.vals[86] = x87;
-  d.vals[87] = x88;
-  d.vals[88] = x89;
-  d.vals[89] = x90;
-  d.vals[90] = x91;
-  d.vals[91] = x92;
-  d.vals[92] = x93;
-  d.vals[93] = x94;
-  d.vals[94] = x95;
-  return d;
-}
-inline Operator<Internal::Data<96, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85, double x86, double x87, double 
x88, double x89, double x90, double x91, double x92, double x93, double x94, 
double x95, double x96){
-  Operator<Internal::Data<96, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  d.vals[86] = x87;
-  d.vals[87] = x88;
-  d.vals[88] = x89;
-  d.vals[89] = x90;
-  d.vals[90] = x91;
-  d.vals[91] = x92;
-  d.vals[92] = x93;
-  d.vals[93] = x94;
-  d.vals[94] = x95;
-  d.vals[95] = x96;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<96, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86, const Precision& x87, const 
Precision& x88, const Precision& x89, const Precision& x90, const Precision& 
x91, const Precision& x92, const Precision& x93, const Precision& x94, const 
Precision& x95, const Precision& x96){
-  Operator<Internal::Data<96, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  d.vals[86] = x87;
-  d.vals[87] = x88;
-  d.vals[88] = x89;
-  d.vals[89] = x90;
-  d.vals[90] = x91;
-  d.vals[91] = x92;
-  d.vals[92] = x93;
-  d.vals[93] = x94;
-  d.vals[94] = x95;
-  d.vals[95] = x96;
-  return d;
-}
-inline Operator<Internal::Data<97, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85, double x86, double x87, double 
x88, double x89, double x90, double x91, double x92, double x93, double x94, 
double x95, double x96, double x97){
-  Operator<Internal::Data<97, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  d.vals[86] = x87;
-  d.vals[87] = x88;
-  d.vals[88] = x89;
-  d.vals[89] = x90;
-  d.vals[90] = x91;
-  d.vals[91] = x92;
-  d.vals[92] = x93;
-  d.vals[93] = x94;
-  d.vals[94] = x95;
-  d.vals[95] = x96;
-  d.vals[96] = x97;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<97, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86, const Precision& x87, const 
Precision& x88, const Precision& x89, const Precision& x90, const Precision& 
x91, const Precision& x92, const Precision& x93, const Precision& x94, const 
Precision& x95, const Precision& x96, const Precision& x97){
-  Operator<Internal::Data<97, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  d.vals[86] = x87;
-  d.vals[87] = x88;
-  d.vals[88] = x89;
-  d.vals[89] = x90;
-  d.vals[90] = x91;
-  d.vals[91] = x92;
-  d.vals[92] = x93;
-  d.vals[93] = x94;
-  d.vals[94] = x95;
-  d.vals[95] = x96;
-  d.vals[96] = x97;
-  return d;
-}
-inline Operator<Internal::Data<98, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85, double x86, double x87, double 
x88, double x89, double x90, double x91, double x92, double x93, double x94, 
double x95, double x96, double x97, double x98){
-  Operator<Internal::Data<98, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  d.vals[86] = x87;
-  d.vals[87] = x88;
-  d.vals[88] = x89;
-  d.vals[89] = x90;
-  d.vals[90] = x91;
-  d.vals[91] = x92;
-  d.vals[92] = x93;
-  d.vals[93] = x94;
-  d.vals[94] = x95;
-  d.vals[95] = x96;
-  d.vals[96] = x97;
-  d.vals[97] = x98;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<98, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86, const Precision& x87, const 
Precision& x88, const Precision& x89, const Precision& x90, const Precision& 
x91, const Precision& x92, const Precision& x93, const Precision& x94, const 
Precision& x95, const Precision& x96, const Precision& x97, const Precision& 
x98){
-  Operator<Internal::Data<98, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  d.vals[86] = x87;
-  d.vals[87] = x88;
-  d.vals[88] = x89;
-  d.vals[89] = x90;
-  d.vals[90] = x91;
-  d.vals[91] = x92;
-  d.vals[92] = x93;
-  d.vals[93] = x94;
-  d.vals[94] = x95;
-  d.vals[95] = x96;
-  d.vals[96] = x97;
-  d.vals[97] = x98;
-  return d;
-}
-inline Operator<Internal::Data<99, double> > Data(double x1, double x2, double 
x3, double x4, double x5, double x6, double x7, double x8, double x9, double 
x10, double x11, double x12, double x13, double x14, double x15, double x16, 
double x17, double x18, double x19, double x20, double x21, double x22, double 
x23, double x24, double x25, double x26, double x27, double x28, double x29, 
double x30, double x31, double x32, double x33, double x34, double x35, double 
x36, double x37, double x38, double x39, double x40, double x41, double x42, 
double x43, double x44, double x45, double x46, double x47, double x48, double 
x49, double x50, double x51, double x52, double x53, double x54, double x55, 
double x56, double x57, double x58, double x59, double x60, double x61, double 
x62, double x63, double x64, double x65, double x66, double x67, double x68, 
double x69, double x70, double x71, double x72, double x73, double x74, double 
x75, double x76, double x77, double x78, double x79, double x80, double x81, 
double x82, double x83, double x84, double x85, double x86, double x87, double 
x88, double x89, double x90, double x91, double x92, double x93, double x94, 
double x95, double x96, double x97, double x98, double x99){
-  Operator<Internal::Data<99, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  d.vals[86] = x87;
-  d.vals[87] = x88;
-  d.vals[88] = x89;
-  d.vals[89] = x90;
-  d.vals[90] = x91;
-  d.vals[91] = x92;
-  d.vals[92] = x93;
-  d.vals[93] = x94;
-  d.vals[94] = x95;
-  d.vals[95] = x96;
-  d.vals[96] = x97;
-  d.vals[97] = x98;
-  d.vals[98] = x99;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<99, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86, const Precision& x87, const 
Precision& x88, const Precision& x89, const Precision& x90, const Precision& 
x91, const Precision& x92, const Precision& x93, const Precision& x94, const 
Precision& x95, const Precision& x96, const Precision& x97, const Precision& 
x98, const Precision& x99){
-  Operator<Internal::Data<99, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  d.vals[86] = x87;
-  d.vals[87] = x88;
-  d.vals[88] = x89;
-  d.vals[89] = x90;
-  d.vals[90] = x91;
-  d.vals[91] = x92;
-  d.vals[92] = x93;
-  d.vals[93] = x94;
-  d.vals[94] = x95;
-  d.vals[95] = x96;
-  d.vals[96] = x97;
-  d.vals[97] = x98;
-  d.vals[98] = x99;
-  return d;
-}
-inline Operator<Internal::Data<100, double> > Data(double x1, double x2, 
double x3, double x4, double x5, double x6, double x7, double x8, double x9, 
double x10, double x11, double x12, double x13, double x14, double x15, double 
x16, double x17, double x18, double x19, double x20, double x21, double x22, 
double x23, double x24, double x25, double x26, double x27, double x28, double 
x29, double x30, double x31, double x32, double x33, double x34, double x35, 
double x36, double x37, double x38, double x39, double x40, double x41, double 
x42, double x43, double x44, double x45, double x46, double x47, double x48, 
double x49, double x50, double x51, double x52, double x53, double x54, double 
x55, double x56, double x57, double x58, double x59, double x60, double x61, 
double x62, double x63, double x64, double x65, double x66, double x67, double 
x68, double x69, double x70, double x71, double x72, double x73, double x74, 
double x75, double x76, double x77, double x78, double x79, double x80, double 
x81, double x82, double x83, double x84, double x85, double x86, double x87, 
double x88, double x89, double x90, double x91, double x92, double x93, double 
x94, double x95, double x96, double x97, double x98, double x99, double x100){
-  Operator<Internal::Data<100, double> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  d.vals[86] = x87;
-  d.vals[87] = x88;
-  d.vals[88] = x89;
-  d.vals[89] = x90;
-  d.vals[90] = x91;
-  d.vals[91] = x92;
-  d.vals[92] = x93;
-  d.vals[93] = x94;
-  d.vals[94] = x95;
-  d.vals[95] = x96;
-  d.vals[96] = x97;
-  d.vals[97] = x98;
-  d.vals[98] = x99;
-  d.vals[99] = x100;
-  return d;
-}
-template<typename Precision> inline Operator<Internal::Data<100, Precision> > 
Data(const Precision& x1, const Precision& x2, const Precision& x3, const 
Precision& x4, const Precision& x5, const Precision& x6, const Precision& x7, 
const Precision& x8, const Precision& x9, const Precision& x10, const 
Precision& x11, const Precision& x12, const Precision& x13, const Precision& 
x14, const Precision& x15, const Precision& x16, const Precision& x17, const 
Precision& x18, const Precision& x19, const Precision& x20, const Precision& 
x21, const Precision& x22, const Precision& x23, const Precision& x24, const 
Precision& x25, const Precision& x26, const Precision& x27, const Precision& 
x28, const Precision& x29, const Precision& x30, const Precision& x31, const 
Precision& x32, const Precision& x33, const Precision& x34, const Precision& 
x35, const Precision& x36, const Precision& x37, const Precision& x38, const 
Precision& x39, const Precision& x40, const Precision& x41, const Precision& 
x42, const Precision& x43, const Precision& x44, const Precision& x45, const 
Precision& x46, const Precision& x47, const Precision& x48, const Precision& 
x49, const Precision& x50, const Precision& x51, const Precision& x52, const 
Precision& x53, const Precision& x54, const Precision& x55, const Precision& 
x56, const Precision& x57, const Precision& x58, const Precision& x59, const 
Precision& x60, const Precision& x61, const Precision& x62, const Precision& 
x63, const Precision& x64, const Precision& x65, const Precision& x66, const 
Precision& x67, const Precision& x68, const Precision& x69, const Precision& 
x70, const Precision& x71, const Precision& x72, const Precision& x73, const 
Precision& x74, const Precision& x75, const Precision& x76, const Precision& 
x77, const Precision& x78, const Precision& x79, const Precision& x80, const 
Precision& x81, const Precision& x82, const Precision& x83, const Precision& 
x84, const Precision& x85, const Precision& x86, const Precision& x87, const 
Precision& x88, const Precision& x89, const Precision& x90, const Precision& 
x91, const Precision& x92, const Precision& x93, const Precision& x94, const 
Precision& x95, const Precision& x96, const Precision& x97, const Precision& 
x98, const Precision& x99, const Precision& x100){
-  Operator<Internal::Data<100, Precision> > d;
-  d.vals[0] = x1;
-  d.vals[1] = x2;
-  d.vals[2] = x3;
-  d.vals[3] = x4;
-  d.vals[4] = x5;
-  d.vals[5] = x6;
-  d.vals[6] = x7;
-  d.vals[7] = x8;
-  d.vals[8] = x9;
-  d.vals[9] = x10;
-  d.vals[10] = x11;
-  d.vals[11] = x12;
-  d.vals[12] = x13;
-  d.vals[13] = x14;
-  d.vals[14] = x15;
-  d.vals[15] = x16;
-  d.vals[16] = x17;
-  d.vals[17] = x18;
-  d.vals[18] = x19;
-  d.vals[19] = x20;
-  d.vals[20] = x21;
-  d.vals[21] = x22;
-  d.vals[22] = x23;
-  d.vals[23] = x24;
-  d.vals[24] = x25;
-  d.vals[25] = x26;
-  d.vals[26] = x27;
-  d.vals[27] = x28;
-  d.vals[28] = x29;
-  d.vals[29] = x30;
-  d.vals[30] = x31;
-  d.vals[31] = x32;
-  d.vals[32] = x33;
-  d.vals[33] = x34;
-  d.vals[34] = x35;
-  d.vals[35] = x36;
-  d.vals[36] = x37;
-  d.vals[37] = x38;
-  d.vals[38] = x39;
-  d.vals[39] = x40;
-  d.vals[40] = x41;
-  d.vals[41] = x42;
-  d.vals[42] = x43;
-  d.vals[43] = x44;
-  d.vals[44] = x45;
-  d.vals[45] = x46;
-  d.vals[46] = x47;
-  d.vals[47] = x48;
-  d.vals[48] = x49;
-  d.vals[49] = x50;
-  d.vals[50] = x51;
-  d.vals[51] = x52;
-  d.vals[52] = x53;
-  d.vals[53] = x54;
-  d.vals[54] = x55;
-  d.vals[55] = x56;
-  d.vals[56] = x57;
-  d.vals[57] = x58;
-  d.vals[58] = x59;
-  d.vals[59] = x60;
-  d.vals[60] = x61;
-  d.vals[61] = x62;
-  d.vals[62] = x63;
-  d.vals[63] = x64;
-  d.vals[64] = x65;
-  d.vals[65] = x66;
-  d.vals[66] = x67;
-  d.vals[67] = x68;
-  d.vals[68] = x69;
-  d.vals[69] = x70;
-  d.vals[70] = x71;
-  d.vals[71] = x72;
-  d.vals[72] = x73;
-  d.vals[73] = x74;
-  d.vals[74] = x75;
-  d.vals[75] = x76;
-  d.vals[76] = x77;
-  d.vals[77] = x78;
-  d.vals[78] = x79;
-  d.vals[79] = x80;
-  d.vals[80] = x81;
-  d.vals[81] = x82;
-  d.vals[82] = x83;
-  d.vals[83] = x84;
-  d.vals[84] = x85;
-  d.vals[85] = x86;
-  d.vals[86] = x87;
-  d.vals[87] = x88;
-  d.vals[88] = x89;
-  d.vals[89] = x90;
-  d.vals[90] = x91;
-  d.vals[91] = x92;
-  d.vals[92] = x93;
-  d.vals[93] = x94;
-  d.vals[94] = x95;
-  d.vals[95] = x96;
-  d.vals[96] = x97;
-  d.vals[97] = x98;
-  d.vals[98] = x99;
-  d.vals[99] = x100;
-  return d;
-}
-}

Index: internal/dchecktest.hh
===================================================================
RCS file: internal/dchecktest.hh
diff -N internal/dchecktest.hh
--- internal/dchecktest.hh      2 Jul 2009 13:12:30 -0000       1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,19 +0,0 @@
-
-namespace TooN {
-
-struct Argument_Needed_For_Dynamic_Parameter{};
-
-namespace Internal {
-       template<int N>
-       struct DCheck {
-               static int val() {return N;}
-       };
-       
-       template<>
-       struct DCheck<-1>{
-               static Argument_Needed_For_Dynamic_Parameter val(); // {return 
ArgumentNeededForDynamicParameter();}
-       };
-}
-
-}
-

Index: internal/debug.hh
===================================================================
RCS file: internal/debug.hh
diff -N internal/debug.hh
--- internal/debug.hh   14 Oct 2009 15:26:37 -0000      1.9
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,108 +0,0 @@
-namespace TooN {
-
-namespace Internal
-{
-
-       
-
-       #if defined  TOON_CHECK_BOUNDS  || defined TOON_TEST_INTERNALS
-               static inline void check_index(int s, int i)
-               {
-                       if(i<0 || i >= s)
-                       {
-                               #ifdef TOON_TEST_INTERNALS
-                                       throw Internal::BadIndex();
-                               #else
-                                       std::cerr << "Toon index out of range" 
<< std::endl;
-                                       std::abort();
-                               #endif
-                       }
-               }
-       #else
-               ///@internal
-               ///Function used to check bounds.
-               ///By default it does nothing. See \ref sDebug.
-               static inline void check_index(int, int){}
-       #endif
-
-       #if defined TOON_INITIALIZE_SNAN
-               template<class P> static void debug_initialize(P* data, int n)
-               {       
-                       using std::numeric_limits;
-                       for(int i=0; i < n; i++)
-                               data[i] = numeric_limits<P>::signaling_NaN();
-               }
-       #elif defined TOON_INITIALIZE_QNAN || defined TOON_INITIALIZE_NAN
-               template<class P> static void debug_initialize(P* data, int n)
-               {       
-                       using std::numeric_limits;
-                       for(int i=0; i < n; i++)
-                               data[i] = numeric_limits<P>::quiet_NaN();
-               }
-       #elif defined TOON_INITIALIZE_VAL
-               template<class P> static void debug_initialize(P* data, int n)
-               {       
-                       for(int i=0; i < n; i++)
-                               data[i] = TOON_INITIALIZE_VAL;
-               }
-       #elif defined TOON_INITIALIZE_RANDOM
-               union intbits
-               {
-                       unsigned long i;
-                       char c[4];
-               };
-
-               template<class P> union datafail
-               {
-                       int i;
-                       P p;
-               };
-
-
-               template<class P> static void debug_initialize(P* data, int n)
-               {
-                       //Get a random seed. Precision limited to 1 second.
-                       static intbits random = { ((std::time(NULL) & 
0xffffffff) *1664525L + 1013904223L)& 0xffffffff};
-                       unsigned char* cdata = reinterpret_cast<unsigned 
char*>(data);
-
-                       size_t bytes = sizeof(P)*n, i=0;
-                       
-                       //Do nothing except for noisy failure with non-POD 
types.
-                       datafail<P> d={0};
-                       bytes+=d.i;
-                       
-                       switch(bytes & 0x3 )
-                       {
-                               for(i=0; i < bytes;)
-                               {
-                                       //Really evil random number generator 
from NR.
-                                       //About 4x faster than Mersenne 
twister. Good quality
-                                       //is not needed, since it's only used 
to shake up the program
-                                       //state to test for uninitialized 
values. Also, it doesn't disturb
-                                       //the standard library random number 
generator.
-                                       
-                                       case 0:
-                                               cdata[i++] = random.c[0];       
-                                       case 3:
-                                               cdata[i++] = random.c[1];       
-                                       case 2:
-                                               cdata[i++] = random.c[2];       
-                                       case 1:
-                                               cdata[i++] = random.c[3];       
-                                       random.i = (1664525L * random.i + 
1013904223L) & 0xffffffff;
-                               }
-                       }
-               }
-       #else
-               ///@internal
-               ///@brief This function is called on any uninitialized data. By 
default, no action is taken. 
-               ///See \ref sDebug
-               template<class P> static void debug_initialize(P*, int)
-               {
-               }
-       #endif
-       
-
-}
-
-}

Index: internal/deprecated.hh
===================================================================
RCS file: internal/deprecated.hh
diff -N internal/deprecated.hh
--- internal/deprecated.hh      16 Dec 2009 16:47:02 -0000      1.2
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,38 +0,0 @@
-// -*- c++ -*-
-
-// Copyright (C) 2009 Ed Rosten (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-#ifdef WIN32
-#undef TOON_DEPRECATED_GCC
-#endif
-
-#ifdef TOON_DEPRECATED_GCC
-       #define TOON_DEPRECATED __attribute__((deprecated))
-#else
-       #define TOON_DEPRECATED 
-#endif

Index: internal/diagmatrix.h
===================================================================
RCS file: internal/diagmatrix.h
diff -N internal/diagmatrix.h
--- internal/diagmatrix.h       26 Aug 2009 17:11:03 -0000      1.6
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,142 +0,0 @@
-//-*- c++ -*-
-//
-// Copyright (C) 2009 Tom Drummond (address@hidden),
-// Ed Rosten (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-
-
-namespace TooN {
-
-
-/**
address@hidden DiagonalMatrix 
-A diagonal matrix
-
-Support is limited but diagonal matrices can be multiplied by vectors, matrices
-or diagonal matrices on either side.
-
-Diagonal matrices can be created from vectors by using the <code> 
as_diagonal() 
-</code> member function:
-
address@hidden
-Vector<3> v = makeVector(1,2,3);
-Vector<3> v2 = v.as_diagonal() * v;   // v2 = (1,4,9)
address@hidden
-
-A vector can be obtained from the diagonal matrix by using the
-<code> diagonal_slice() </code> member function.
address@hidden gLinAlg
- **/
-template<int Size=Dynamic, typename Precision=DefaultPrecision, typename 
Base=Internal::VBase>
-struct DiagonalMatrix {
-public:
-       ///@name Constructors
-       ///@{
-       
-       inline DiagonalMatrix() {}
-       inline DiagonalMatrix(int size_in) : my_vector(size_in) {}
-       inline DiagonalMatrix(Precision* data) : my_vector(data) {}
-       inline DiagonalMatrix(Precision* data, int size_in) : 
my_vector(data,size_in) {}
-       inline DiagonalMatrix(Precision* data_in, int size_in, int stride_in, 
Internal::Slicing)
-               : my_vector(data_in, size_in, stride_in, Internal::Slicing() ) 
{}
-
-       // constructors to allow return value optimisations
-       // construction from 0-ary operator
-       ///my_vector constructed from a TooN::Operator 
-       template <class Op>
-       inline DiagonalMatrix(const Operator<Op>& op)
-               : my_vector (op)
-       {
-               op.eval(my_vector);
-       }
-       
-       // constructor from arbitrary vector
-       template<int Size2, typename Precision2, typename Base2>
-       inline DiagonalMatrix(const Vector<Size2,Precision2,Base2>& from)
-               : my_vector(from.size())
-       {
-               my_vector=from;
-       }
-       ///@}
-
-
-
-       ///Index the leading elements on the diagonal 
-       Precision& operator[](int i){return my_vector[i];}
-       ///Index the leading elements on the diagonal 
-       const Precision& operator[](int i) const {return my_vector[i];}
-       
-       ///Return the leading diagonal as a vector.
-       typename Vector<Size, Precision, Base>::as_slice_type diagonal_slice() {
-               return my_vector.as_slice();
-       }
-
-       ///Return the leading diagonal as a vector.
-       const typename Vector<Size, Precision, Base>::as_slice_type 
diagonal_slice() const {
-               return my_vector.as_slice();
-       }
-       
-       ///The vector used to hold the leading diagonal.
-       Vector<Size,Precision,Base> my_vector;
-};
-
-
-template<int S1, typename P1, typename B1, int S2, typename P2, typename B2>
-inline Vector<Internal::Sizer<S1,S2>::size, typename 
Internal::MultiplyType<P1,P2>::type>
-operator*(const DiagonalMatrix<S1,P1,B1>& d, const Vector<S2,P2,B2>& v){
-       return diagmult(d.my_vector,v);
-}
-
-template<int S1, typename P1, typename B1, int S2, typename P2, typename B2>
-inline Vector<Internal::Sizer<S1,S2>::size, typename 
Internal::MultiplyType<P1,P2>::type>
-operator*( const Vector<S1,P1,B1>& v, const DiagonalMatrix<S2,P2,B2>& d){
-       return diagmult(v,d.my_vector);
-}
-
-// perhaps not the safest way to do this as we're returning the same operator 
used to normally make vectors
-template<int S1, typename P1, typename B1, int S2, typename P2, typename B2>
-inline DiagonalMatrix<Internal::Sizer<S1,S2>::size, typename 
Internal::MultiplyType<P1,P2>::type>
-operator*( const DiagonalMatrix<S1,P1,B1>& d1, const DiagonalMatrix<S2,P2,B2>& 
d2){
-       SizeMismatch<S1,S2>::test(d1.my_vector.size(),d2.my_vector.size());
-       return 
Operator<Internal::VPairwise<Internal::Multiply,S1,P1,B1,S2,P2,B2> 
>(d1.my_vector,d2.my_vector);
-}
-
-template<int R, int C, int Size, typename P1, typename P2, typename B1, 
typename B2>
-Matrix<R, C, typename Internal::MultiplyType<P1,P2>::type>
-operator* (const Matrix<R, C, P1, B1>& m, const DiagonalMatrix<Size, P2, B2>& 
d){
-       return diagmult(m,d.my_vector);
-}
-
-template<int R, int C, typename P1, typename B1, int Size, typename P2, 
typename B2> 
-Matrix<R, C, typename Internal::MultiplyType<P1,P2>::type>
-operator* (const DiagonalMatrix<Size,P1,B1>& d, const Matrix<R,C,P2,B2>& m)
-{
-       return diagmult(d.my_vector, m);
-}
-
-}

Index: internal/make_vector.hh
===================================================================
RCS file: internal/make_vector.hh
diff -N internal/make_vector.hh
--- internal/make_vector.hh     29 Apr 2009 22:02:50 -0000      1.4
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,1174 +0,0 @@
-//Mechanically generate code. Do not edit.
-namespace TooN {
-//modify make_make_vector.awk and run make internal/make_vector.hh
-inline Vector<1> makeVector(double x1){
-  Vector<1> vals;
-  vals[0] = x1;
-  return vals;
-}
-template<typename Precision> inline Vector<1, Precision> makeVector(const 
Precision& x1){
-  Vector<1, Precision> vals;
-  vals[0] = x1;
-  return vals;
-}
-inline Vector<2> makeVector(double x1, double x2){
-  Vector<2> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  return vals;
-}
-template<typename Precision> inline Vector<2, Precision> makeVector(const 
Precision& x1, const Precision& x2){
-  Vector<2, Precision> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  return vals;
-}
-inline Vector<3> makeVector(double x1, double x2, double x3){
-  Vector<3> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  return vals;
-}
-template<typename Precision> inline Vector<3, Precision> makeVector(const 
Precision& x1, const Precision& x2, const Precision& x3){
-  Vector<3, Precision> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  return vals;
-}
-inline Vector<4> makeVector(double x1, double x2, double x3, double x4){
-  Vector<4> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  return vals;
-}
-template<typename Precision> inline Vector<4, Precision> makeVector(const 
Precision& x1, const Precision& x2, const Precision& x3, const Precision& x4){
-  Vector<4, Precision> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  return vals;
-}
-inline Vector<5> makeVector(double x1, double x2, double x3, double x4, double 
x5){
-  Vector<5> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  return vals;
-}
-template<typename Precision> inline Vector<5, Precision> makeVector(const 
Precision& x1, const Precision& x2, const Precision& x3, const Precision& x4, 
const Precision& x5){
-  Vector<5, Precision> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  return vals;
-}
-inline Vector<6> makeVector(double x1, double x2, double x3, double x4, double 
x5, double x6){
-  Vector<6> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  return vals;
-}
-template<typename Precision> inline Vector<6, Precision> makeVector(const 
Precision& x1, const Precision& x2, const Precision& x3, const Precision& x4, 
const Precision& x5, const Precision& x6){
-  Vector<6, Precision> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  return vals;
-}
-inline Vector<7> makeVector(double x1, double x2, double x3, double x4, double 
x5, double x6, double x7){
-  Vector<7> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  return vals;
-}
-template<typename Precision> inline Vector<7, Precision> makeVector(const 
Precision& x1, const Precision& x2, const Precision& x3, const Precision& x4, 
const Precision& x5, const Precision& x6, const Precision& x7){
-  Vector<7, Precision> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  return vals;
-}
-inline Vector<8> makeVector(double x1, double x2, double x3, double x4, double 
x5, double x6, double x7, double x8){
-  Vector<8> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  return vals;
-}
-template<typename Precision> inline Vector<8, Precision> makeVector(const 
Precision& x1, const Precision& x2, const Precision& x3, const Precision& x4, 
const Precision& x5, const Precision& x6, const Precision& x7, const Precision& 
x8){
-  Vector<8, Precision> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  return vals;
-}
-inline Vector<9> makeVector(double x1, double x2, double x3, double x4, double 
x5, double x6, double x7, double x8, double x9){
-  Vector<9> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  return vals;
-}
-template<typename Precision> inline Vector<9, Precision> makeVector(const 
Precision& x1, const Precision& x2, const Precision& x3, const Precision& x4, 
const Precision& x5, const Precision& x6, const Precision& x7, const Precision& 
x8, const Precision& x9){
-  Vector<9, Precision> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  return vals;
-}
-inline Vector<10> makeVector(double x1, double x2, double x3, double x4, 
double x5, double x6, double x7, double x8, double x9, double x10){
-  Vector<10> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  return vals;
-}
-template<typename Precision> inline Vector<10, Precision> makeVector(const 
Precision& x1, const Precision& x2, const Precision& x3, const Precision& x4, 
const Precision& x5, const Precision& x6, const Precision& x7, const Precision& 
x8, const Precision& x9, const Precision& x10){
-  Vector<10, Precision> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  return vals;
-}
-inline Vector<11> makeVector(double x1, double x2, double x3, double x4, 
double x5, double x6, double x7, double x8, double x9, double x10, double x11){
-  Vector<11> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  return vals;
-}
-template<typename Precision> inline Vector<11, Precision> makeVector(const 
Precision& x1, const Precision& x2, const Precision& x3, const Precision& x4, 
const Precision& x5, const Precision& x6, const Precision& x7, const Precision& 
x8, const Precision& x9, const Precision& x10, const Precision& x11){
-  Vector<11, Precision> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  return vals;
-}
-inline Vector<12> makeVector(double x1, double x2, double x3, double x4, 
double x5, double x6, double x7, double x8, double x9, double x10, double x11, 
double x12){
-  Vector<12> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  return vals;
-}
-template<typename Precision> inline Vector<12, Precision> makeVector(const 
Precision& x1, const Precision& x2, const Precision& x3, const Precision& x4, 
const Precision& x5, const Precision& x6, const Precision& x7, const Precision& 
x8, const Precision& x9, const Precision& x10, const Precision& x11, const 
Precision& x12){
-  Vector<12, Precision> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  return vals;
-}
-inline Vector<13> makeVector(double x1, double x2, double x3, double x4, 
double x5, double x6, double x7, double x8, double x9, double x10, double x11, 
double x12, double x13){
-  Vector<13> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  return vals;
-}
-template<typename Precision> inline Vector<13, Precision> makeVector(const 
Precision& x1, const Precision& x2, const Precision& x3, const Precision& x4, 
const Precision& x5, const Precision& x6, const Precision& x7, const Precision& 
x8, const Precision& x9, const Precision& x10, const Precision& x11, const 
Precision& x12, const Precision& x13){
-  Vector<13, Precision> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  return vals;
-}
-inline Vector<14> makeVector(double x1, double x2, double x3, double x4, 
double x5, double x6, double x7, double x8, double x9, double x10, double x11, 
double x12, double x13, double x14){
-  Vector<14> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  return vals;
-}
-template<typename Precision> inline Vector<14, Precision> makeVector(const 
Precision& x1, const Precision& x2, const Precision& x3, const Precision& x4, 
const Precision& x5, const Precision& x6, const Precision& x7, const Precision& 
x8, const Precision& x9, const Precision& x10, const Precision& x11, const 
Precision& x12, const Precision& x13, const Precision& x14){
-  Vector<14, Precision> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  return vals;
-}
-inline Vector<15> makeVector(double x1, double x2, double x3, double x4, 
double x5, double x6, double x7, double x8, double x9, double x10, double x11, 
double x12, double x13, double x14, double x15){
-  Vector<15> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  return vals;
-}
-template<typename Precision> inline Vector<15, Precision> makeVector(const 
Precision& x1, const Precision& x2, const Precision& x3, const Precision& x4, 
const Precision& x5, const Precision& x6, const Precision& x7, const Precision& 
x8, const Precision& x9, const Precision& x10, const Precision& x11, const 
Precision& x12, const Precision& x13, const Precision& x14, const Precision& 
x15){
-  Vector<15, Precision> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  return vals;
-}
-inline Vector<16> makeVector(double x1, double x2, double x3, double x4, 
double x5, double x6, double x7, double x8, double x9, double x10, double x11, 
double x12, double x13, double x14, double x15, double x16){
-  Vector<16> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  return vals;
-}
-template<typename Precision> inline Vector<16, Precision> makeVector(const 
Precision& x1, const Precision& x2, const Precision& x3, const Precision& x4, 
const Precision& x5, const Precision& x6, const Precision& x7, const Precision& 
x8, const Precision& x9, const Precision& x10, const Precision& x11, const 
Precision& x12, const Precision& x13, const Precision& x14, const Precision& 
x15, const Precision& x16){
-  Vector<16, Precision> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  return vals;
-}
-inline Vector<17> makeVector(double x1, double x2, double x3, double x4, 
double x5, double x6, double x7, double x8, double x9, double x10, double x11, 
double x12, double x13, double x14, double x15, double x16, double x17){
-  Vector<17> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  vals[16] = x17;
-  return vals;
-}
-template<typename Precision> inline Vector<17, Precision> makeVector(const 
Precision& x1, const Precision& x2, const Precision& x3, const Precision& x4, 
const Precision& x5, const Precision& x6, const Precision& x7, const Precision& 
x8, const Precision& x9, const Precision& x10, const Precision& x11, const 
Precision& x12, const Precision& x13, const Precision& x14, const Precision& 
x15, const Precision& x16, const Precision& x17){
-  Vector<17, Precision> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  vals[16] = x17;
-  return vals;
-}
-inline Vector<18> makeVector(double x1, double x2, double x3, double x4, 
double x5, double x6, double x7, double x8, double x9, double x10, double x11, 
double x12, double x13, double x14, double x15, double x16, double x17, double 
x18){
-  Vector<18> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  vals[16] = x17;
-  vals[17] = x18;
-  return vals;
-}
-template<typename Precision> inline Vector<18, Precision> makeVector(const 
Precision& x1, const Precision& x2, const Precision& x3, const Precision& x4, 
const Precision& x5, const Precision& x6, const Precision& x7, const Precision& 
x8, const Precision& x9, const Precision& x10, const Precision& x11, const 
Precision& x12, const Precision& x13, const Precision& x14, const Precision& 
x15, const Precision& x16, const Precision& x17, const Precision& x18){
-  Vector<18, Precision> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  vals[16] = x17;
-  vals[17] = x18;
-  return vals;
-}
-inline Vector<19> makeVector(double x1, double x2, double x3, double x4, 
double x5, double x6, double x7, double x8, double x9, double x10, double x11, 
double x12, double x13, double x14, double x15, double x16, double x17, double 
x18, double x19){
-  Vector<19> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  vals[16] = x17;
-  vals[17] = x18;
-  vals[18] = x19;
-  return vals;
-}
-template<typename Precision> inline Vector<19, Precision> makeVector(const 
Precision& x1, const Precision& x2, const Precision& x3, const Precision& x4, 
const Precision& x5, const Precision& x6, const Precision& x7, const Precision& 
x8, const Precision& x9, const Precision& x10, const Precision& x11, const 
Precision& x12, const Precision& x13, const Precision& x14, const Precision& 
x15, const Precision& x16, const Precision& x17, const Precision& x18, const 
Precision& x19){
-  Vector<19, Precision> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  vals[16] = x17;
-  vals[17] = x18;
-  vals[18] = x19;
-  return vals;
-}
-inline Vector<20> makeVector(double x1, double x2, double x3, double x4, 
double x5, double x6, double x7, double x8, double x9, double x10, double x11, 
double x12, double x13, double x14, double x15, double x16, double x17, double 
x18, double x19, double x20){
-  Vector<20> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  vals[16] = x17;
-  vals[17] = x18;
-  vals[18] = x19;
-  vals[19] = x20;
-  return vals;
-}
-template<typename Precision> inline Vector<20, Precision> makeVector(const 
Precision& x1, const Precision& x2, const Precision& x3, const Precision& x4, 
const Precision& x5, const Precision& x6, const Precision& x7, const Precision& 
x8, const Precision& x9, const Precision& x10, const Precision& x11, const 
Precision& x12, const Precision& x13, const Precision& x14, const Precision& 
x15, const Precision& x16, const Precision& x17, const Precision& x18, const 
Precision& x19, const Precision& x20){
-  Vector<20, Precision> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  vals[16] = x17;
-  vals[17] = x18;
-  vals[18] = x19;
-  vals[19] = x20;
-  return vals;
-}
-inline Vector<21> makeVector(double x1, double x2, double x3, double x4, 
double x5, double x6, double x7, double x8, double x9, double x10, double x11, 
double x12, double x13, double x14, double x15, double x16, double x17, double 
x18, double x19, double x20, double x21){
-  Vector<21> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  vals[16] = x17;
-  vals[17] = x18;
-  vals[18] = x19;
-  vals[19] = x20;
-  vals[20] = x21;
-  return vals;
-}
-template<typename Precision> inline Vector<21, Precision> makeVector(const 
Precision& x1, const Precision& x2, const Precision& x3, const Precision& x4, 
const Precision& x5, const Precision& x6, const Precision& x7, const Precision& 
x8, const Precision& x9, const Precision& x10, const Precision& x11, const 
Precision& x12, const Precision& x13, const Precision& x14, const Precision& 
x15, const Precision& x16, const Precision& x17, const Precision& x18, const 
Precision& x19, const Precision& x20, const Precision& x21){
-  Vector<21, Precision> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  vals[16] = x17;
-  vals[17] = x18;
-  vals[18] = x19;
-  vals[19] = x20;
-  vals[20] = x21;
-  return vals;
-}
-inline Vector<22> makeVector(double x1, double x2, double x3, double x4, 
double x5, double x6, double x7, double x8, double x9, double x10, double x11, 
double x12, double x13, double x14, double x15, double x16, double x17, double 
x18, double x19, double x20, double x21, double x22){
-  Vector<22> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  vals[16] = x17;
-  vals[17] = x18;
-  vals[18] = x19;
-  vals[19] = x20;
-  vals[20] = x21;
-  vals[21] = x22;
-  return vals;
-}
-template<typename Precision> inline Vector<22, Precision> makeVector(const 
Precision& x1, const Precision& x2, const Precision& x3, const Precision& x4, 
const Precision& x5, const Precision& x6, const Precision& x7, const Precision& 
x8, const Precision& x9, const Precision& x10, const Precision& x11, const 
Precision& x12, const Precision& x13, const Precision& x14, const Precision& 
x15, const Precision& x16, const Precision& x17, const Precision& x18, const 
Precision& x19, const Precision& x20, const Precision& x21, const Precision& 
x22){
-  Vector<22, Precision> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  vals[16] = x17;
-  vals[17] = x18;
-  vals[18] = x19;
-  vals[19] = x20;
-  vals[20] = x21;
-  vals[21] = x22;
-  return vals;
-}
-inline Vector<23> makeVector(double x1, double x2, double x3, double x4, 
double x5, double x6, double x7, double x8, double x9, double x10, double x11, 
double x12, double x13, double x14, double x15, double x16, double x17, double 
x18, double x19, double x20, double x21, double x22, double x23){
-  Vector<23> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  vals[16] = x17;
-  vals[17] = x18;
-  vals[18] = x19;
-  vals[19] = x20;
-  vals[20] = x21;
-  vals[21] = x22;
-  vals[22] = x23;
-  return vals;
-}
-template<typename Precision> inline Vector<23, Precision> makeVector(const 
Precision& x1, const Precision& x2, const Precision& x3, const Precision& x4, 
const Precision& x5, const Precision& x6, const Precision& x7, const Precision& 
x8, const Precision& x9, const Precision& x10, const Precision& x11, const 
Precision& x12, const Precision& x13, const Precision& x14, const Precision& 
x15, const Precision& x16, const Precision& x17, const Precision& x18, const 
Precision& x19, const Precision& x20, const Precision& x21, const Precision& 
x22, const Precision& x23){
-  Vector<23, Precision> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  vals[16] = x17;
-  vals[17] = x18;
-  vals[18] = x19;
-  vals[19] = x20;
-  vals[20] = x21;
-  vals[21] = x22;
-  vals[22] = x23;
-  return vals;
-}
-inline Vector<24> makeVector(double x1, double x2, double x3, double x4, 
double x5, double x6, double x7, double x8, double x9, double x10, double x11, 
double x12, double x13, double x14, double x15, double x16, double x17, double 
x18, double x19, double x20, double x21, double x22, double x23, double x24){
-  Vector<24> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  vals[16] = x17;
-  vals[17] = x18;
-  vals[18] = x19;
-  vals[19] = x20;
-  vals[20] = x21;
-  vals[21] = x22;
-  vals[22] = x23;
-  vals[23] = x24;
-  return vals;
-}
-template<typename Precision> inline Vector<24, Precision> makeVector(const 
Precision& x1, const Precision& x2, const Precision& x3, const Precision& x4, 
const Precision& x5, const Precision& x6, const Precision& x7, const Precision& 
x8, const Precision& x9, const Precision& x10, const Precision& x11, const 
Precision& x12, const Precision& x13, const Precision& x14, const Precision& 
x15, const Precision& x16, const Precision& x17, const Precision& x18, const 
Precision& x19, const Precision& x20, const Precision& x21, const Precision& 
x22, const Precision& x23, const Precision& x24){
-  Vector<24, Precision> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  vals[16] = x17;
-  vals[17] = x18;
-  vals[18] = x19;
-  vals[19] = x20;
-  vals[20] = x21;
-  vals[21] = x22;
-  vals[22] = x23;
-  vals[23] = x24;
-  return vals;
-}
-inline Vector<25> makeVector(double x1, double x2, double x3, double x4, 
double x5, double x6, double x7, double x8, double x9, double x10, double x11, 
double x12, double x13, double x14, double x15, double x16, double x17, double 
x18, double x19, double x20, double x21, double x22, double x23, double x24, 
double x25){
-  Vector<25> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  vals[16] = x17;
-  vals[17] = x18;
-  vals[18] = x19;
-  vals[19] = x20;
-  vals[20] = x21;
-  vals[21] = x22;
-  vals[22] = x23;
-  vals[23] = x24;
-  vals[24] = x25;
-  return vals;
-}
-template<typename Precision> inline Vector<25, Precision> makeVector(const 
Precision& x1, const Precision& x2, const Precision& x3, const Precision& x4, 
const Precision& x5, const Precision& x6, const Precision& x7, const Precision& 
x8, const Precision& x9, const Precision& x10, const Precision& x11, const 
Precision& x12, const Precision& x13, const Precision& x14, const Precision& 
x15, const Precision& x16, const Precision& x17, const Precision& x18, const 
Precision& x19, const Precision& x20, const Precision& x21, const Precision& 
x22, const Precision& x23, const Precision& x24, const Precision& x25){
-  Vector<25, Precision> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  vals[16] = x17;
-  vals[17] = x18;
-  vals[18] = x19;
-  vals[19] = x20;
-  vals[20] = x21;
-  vals[21] = x22;
-  vals[22] = x23;
-  vals[23] = x24;
-  vals[24] = x25;
-  return vals;
-}
-inline Vector<26> makeVector(double x1, double x2, double x3, double x4, 
double x5, double x6, double x7, double x8, double x9, double x10, double x11, 
double x12, double x13, double x14, double x15, double x16, double x17, double 
x18, double x19, double x20, double x21, double x22, double x23, double x24, 
double x25, double x26){
-  Vector<26> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  vals[16] = x17;
-  vals[17] = x18;
-  vals[18] = x19;
-  vals[19] = x20;
-  vals[20] = x21;
-  vals[21] = x22;
-  vals[22] = x23;
-  vals[23] = x24;
-  vals[24] = x25;
-  vals[25] = x26;
-  return vals;
-}
-template<typename Precision> inline Vector<26, Precision> makeVector(const 
Precision& x1, const Precision& x2, const Precision& x3, const Precision& x4, 
const Precision& x5, const Precision& x6, const Precision& x7, const Precision& 
x8, const Precision& x9, const Precision& x10, const Precision& x11, const 
Precision& x12, const Precision& x13, const Precision& x14, const Precision& 
x15, const Precision& x16, const Precision& x17, const Precision& x18, const 
Precision& x19, const Precision& x20, const Precision& x21, const Precision& 
x22, const Precision& x23, const Precision& x24, const Precision& x25, const 
Precision& x26){
-  Vector<26, Precision> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  vals[16] = x17;
-  vals[17] = x18;
-  vals[18] = x19;
-  vals[19] = x20;
-  vals[20] = x21;
-  vals[21] = x22;
-  vals[22] = x23;
-  vals[23] = x24;
-  vals[24] = x25;
-  vals[25] = x26;
-  return vals;
-}
-inline Vector<27> makeVector(double x1, double x2, double x3, double x4, 
double x5, double x6, double x7, double x8, double x9, double x10, double x11, 
double x12, double x13, double x14, double x15, double x16, double x17, double 
x18, double x19, double x20, double x21, double x22, double x23, double x24, 
double x25, double x26, double x27){
-  Vector<27> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  vals[16] = x17;
-  vals[17] = x18;
-  vals[18] = x19;
-  vals[19] = x20;
-  vals[20] = x21;
-  vals[21] = x22;
-  vals[22] = x23;
-  vals[23] = x24;
-  vals[24] = x25;
-  vals[25] = x26;
-  vals[26] = x27;
-  return vals;
-}
-template<typename Precision> inline Vector<27, Precision> makeVector(const 
Precision& x1, const Precision& x2, const Precision& x3, const Precision& x4, 
const Precision& x5, const Precision& x6, const Precision& x7, const Precision& 
x8, const Precision& x9, const Precision& x10, const Precision& x11, const 
Precision& x12, const Precision& x13, const Precision& x14, const Precision& 
x15, const Precision& x16, const Precision& x17, const Precision& x18, const 
Precision& x19, const Precision& x20, const Precision& x21, const Precision& 
x22, const Precision& x23, const Precision& x24, const Precision& x25, const 
Precision& x26, const Precision& x27){
-  Vector<27, Precision> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  vals[16] = x17;
-  vals[17] = x18;
-  vals[18] = x19;
-  vals[19] = x20;
-  vals[20] = x21;
-  vals[21] = x22;
-  vals[22] = x23;
-  vals[23] = x24;
-  vals[24] = x25;
-  vals[25] = x26;
-  vals[26] = x27;
-  return vals;
-}
-inline Vector<28> makeVector(double x1, double x2, double x3, double x4, 
double x5, double x6, double x7, double x8, double x9, double x10, double x11, 
double x12, double x13, double x14, double x15, double x16, double x17, double 
x18, double x19, double x20, double x21, double x22, double x23, double x24, 
double x25, double x26, double x27, double x28){
-  Vector<28> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  vals[16] = x17;
-  vals[17] = x18;
-  vals[18] = x19;
-  vals[19] = x20;
-  vals[20] = x21;
-  vals[21] = x22;
-  vals[22] = x23;
-  vals[23] = x24;
-  vals[24] = x25;
-  vals[25] = x26;
-  vals[26] = x27;
-  vals[27] = x28;
-  return vals;
-}
-template<typename Precision> inline Vector<28, Precision> makeVector(const 
Precision& x1, const Precision& x2, const Precision& x3, const Precision& x4, 
const Precision& x5, const Precision& x6, const Precision& x7, const Precision& 
x8, const Precision& x9, const Precision& x10, const Precision& x11, const 
Precision& x12, const Precision& x13, const Precision& x14, const Precision& 
x15, const Precision& x16, const Precision& x17, const Precision& x18, const 
Precision& x19, const Precision& x20, const Precision& x21, const Precision& 
x22, const Precision& x23, const Precision& x24, const Precision& x25, const 
Precision& x26, const Precision& x27, const Precision& x28){
-  Vector<28, Precision> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  vals[16] = x17;
-  vals[17] = x18;
-  vals[18] = x19;
-  vals[19] = x20;
-  vals[20] = x21;
-  vals[21] = x22;
-  vals[22] = x23;
-  vals[23] = x24;
-  vals[24] = x25;
-  vals[25] = x26;
-  vals[26] = x27;
-  vals[27] = x28;
-  return vals;
-}
-inline Vector<29> makeVector(double x1, double x2, double x3, double x4, 
double x5, double x6, double x7, double x8, double x9, double x10, double x11, 
double x12, double x13, double x14, double x15, double x16, double x17, double 
x18, double x19, double x20, double x21, double x22, double x23, double x24, 
double x25, double x26, double x27, double x28, double x29){
-  Vector<29> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  vals[16] = x17;
-  vals[17] = x18;
-  vals[18] = x19;
-  vals[19] = x20;
-  vals[20] = x21;
-  vals[21] = x22;
-  vals[22] = x23;
-  vals[23] = x24;
-  vals[24] = x25;
-  vals[25] = x26;
-  vals[26] = x27;
-  vals[27] = x28;
-  vals[28] = x29;
-  return vals;
-}
-template<typename Precision> inline Vector<29, Precision> makeVector(const 
Precision& x1, const Precision& x2, const Precision& x3, const Precision& x4, 
const Precision& x5, const Precision& x6, const Precision& x7, const Precision& 
x8, const Precision& x9, const Precision& x10, const Precision& x11, const 
Precision& x12, const Precision& x13, const Precision& x14, const Precision& 
x15, const Precision& x16, const Precision& x17, const Precision& x18, const 
Precision& x19, const Precision& x20, const Precision& x21, const Precision& 
x22, const Precision& x23, const Precision& x24, const Precision& x25, const 
Precision& x26, const Precision& x27, const Precision& x28, const Precision& 
x29){
-  Vector<29, Precision> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  vals[16] = x17;
-  vals[17] = x18;
-  vals[18] = x19;
-  vals[19] = x20;
-  vals[20] = x21;
-  vals[21] = x22;
-  vals[22] = x23;
-  vals[23] = x24;
-  vals[24] = x25;
-  vals[25] = x26;
-  vals[26] = x27;
-  vals[27] = x28;
-  vals[28] = x29;
-  return vals;
-}
-inline Vector<30> makeVector(double x1, double x2, double x3, double x4, 
double x5, double x6, double x7, double x8, double x9, double x10, double x11, 
double x12, double x13, double x14, double x15, double x16, double x17, double 
x18, double x19, double x20, double x21, double x22, double x23, double x24, 
double x25, double x26, double x27, double x28, double x29, double x30){
-  Vector<30> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  vals[16] = x17;
-  vals[17] = x18;
-  vals[18] = x19;
-  vals[19] = x20;
-  vals[20] = x21;
-  vals[21] = x22;
-  vals[22] = x23;
-  vals[23] = x24;
-  vals[24] = x25;
-  vals[25] = x26;
-  vals[26] = x27;
-  vals[27] = x28;
-  vals[28] = x29;
-  vals[29] = x30;
-  return vals;
-}
-template<typename Precision> inline Vector<30, Precision> makeVector(const 
Precision& x1, const Precision& x2, const Precision& x3, const Precision& x4, 
const Precision& x5, const Precision& x6, const Precision& x7, const Precision& 
x8, const Precision& x9, const Precision& x10, const Precision& x11, const 
Precision& x12, const Precision& x13, const Precision& x14, const Precision& 
x15, const Precision& x16, const Precision& x17, const Precision& x18, const 
Precision& x19, const Precision& x20, const Precision& x21, const Precision& 
x22, const Precision& x23, const Precision& x24, const Precision& x25, const 
Precision& x26, const Precision& x27, const Precision& x28, const Precision& 
x29, const Precision& x30){
-  Vector<30, Precision> vals;
-  vals[0] = x1;
-  vals[1] = x2;
-  vals[2] = x3;
-  vals[3] = x4;
-  vals[4] = x5;
-  vals[5] = x6;
-  vals[6] = x7;
-  vals[7] = x8;
-  vals[8] = x9;
-  vals[9] = x10;
-  vals[10] = x11;
-  vals[11] = x12;
-  vals[12] = x13;
-  vals[13] = x14;
-  vals[14] = x15;
-  vals[15] = x16;
-  vals[16] = x17;
-  vals[17] = x18;
-  vals[18] = x19;
-  vals[19] = x20;
-  vals[20] = x21;
-  vals[21] = x22;
-  vals[22] = x23;
-  vals[23] = x24;
-  vals[24] = x25;
-  vals[25] = x26;
-  vals[26] = x27;
-  vals[27] = x28;
-  vals[28] = x29;
-  vals[29] = x30;
-  return vals;
-}
-}

Index: internal/matrix.hh
===================================================================
RCS file: internal/matrix.hh
diff -N internal/matrix.hh
--- internal/matrix.hh  9 Jun 2010 15:20:03 -0000       1.40
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,497 +0,0 @@
-// -*- c++ -*-
-
-// Copyright (C) 2009 Tom Drummond (address@hidden),
-// Ed Rosten (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-namespace TooN {
-
-/**
-A matrix.
-Support is provided for all the usual matrix operations: 
-- the (a,b) notation can be used to access an element directly
-- the [] operator can be used to yield a vector from a matrix (which can be 
used
-as an l-value)
-- they can be added and subtracted
-- they can be multiplied (on either side) or divided by a scalar on the right:
-- they can be multiplied by matrices or vectors
-- submatrices can be extracted using the templated slice() member function
-- they can be transposed (and the transpose used as an l-value)
-- inverse is \e not supported. Use one of the @link gDecomps matrix
-decompositions @endlink instead
-
-See individual member function documentation for examples of usage.
-
-\par Statically-sized matrices
-
-The library provides classes for statically and dynamically sized matrices. As
-with @link Vector address@hidden, statically sized matrices are more efficient,
-since their size is determined at compile-time, not run-time.
-To create a \f$3\times4\f$ matrix, use:
address@hidden
-Matrix<3,4> M;
address@hidden
-or replace 3 and 4 with the dimensions of your choice. If the matrix is square,
-it can be declared as:
address@hidden
-Matrix<3> M;
address@hidden
-which just is a synonym for <code>Matrix<3,3></code>. Matrices can also be
-constructed from pointers or static 1D or 2D arrays of doubles:
address@hidden
-
-  double dvals1[9]={1,2,3,4,5,6};
-  Matrix<2,3, Reference::RowMajor> M2 (dvals1);
address@hidden
-
-\par Dynamically-sized matrices
-
-To create a dynamically sized matrix, use:
address@hidden
-Matrix<> M(num_rows, num_cols);
address@hidden
-where \a num_rows and \a num_cols are integers which will be evaluated at run
-time.
-
-Half-dynamic matriced can be constructed in either dimension:
address@hidden
-       Matrix<Dynamic, 2> M(num_rows, 2);
address@hidden
-note that the static dimension must be provided, but it is ignored.
-
address@hidden
-
-<code>Matrix<></code> is a synonym for <code> Matrix<Dynamic, Dynamic> </code> 
which is
-<code>%Matrix<-1,-1></code>
-
-\par Row-major and column-major
-
-The library supports both row major (the default - but you can change this if
-you prefer) and column major layout ordering. Row major implies that the matrix
-is laid out in memory in raster scan order:
-\f[\begin{matrix}\text{Row major} & \text {Column major}\\
-\begin{bmatrix}1&2&3\\4&5&6\\7&8&9\end{bmatrix} &
-\begin{bmatrix}1&4&7\\2&5&8\\3&6&9\end{bmatrix} \end{matrix}\f]
-You can override the default for a specific matrix by specifying the layout 
when
-you construct it:
address@hidden
-Matrix<3,3,double,ColMajor> M1;
-Matrix<-1,-1,double,RowMajor> M2(nrows, ncols);
address@hidden
-In this case the precision template argument must be given as it precedes the 
layout argument
-
address@hidden gLinAlg
-**/
-template <int Rows=-1, int Cols=Rows, class Precision=DefaultPrecision, class 
Layout = RowMajor>
-struct Matrix : public Layout::template MLayout<Rows, Cols, Precision>
-{
-public:
-
-       using Layout::template MLayout<Rows, Cols, Precision>::my_data;
-       using Layout::template MLayout<Rows, Cols, Precision>::num_rows;
-       using Layout::template MLayout<Rows, Cols, Precision>::num_cols;
-
-       //Use Tom's sneaky constructor hack...
-
-       ///@name Construction and destruction
-       ///@{
-
-       ///Construction of static matrices. Values are not initialized.
-       Matrix(){}
-       
-       ///Construction of dynamic matrices. Values are not initialized.
-       Matrix(int rows, int cols) :
-               Layout::template MLayout<Rows,Cols,Precision>(rows, cols)
-       {}
-       
-       ///Construction of statically sized slice matrices
-       Matrix(Precision* p) :
-               Layout::template MLayout<Rows, Cols, Precision>(p)
-       {}
-
-       ///Construction of dynamically sized slice matrices
-       Matrix(Precision* p, int r, int c) :
-               Layout::template MLayout<Rows, Cols, Precision>(p, r, c)
-       {}
-
-       /// Advanced construction of dynamically sized slice matrices.
-       /// Internal constructor used by GenericMBase::slice(...).
-       Matrix(Precision* data, int rows, int cols, int rowstride, int 
colstride, Internal::Slicing)
-       :Layout::template MLayout<Rows, Cols, Precision>(data, rows, cols, 
rowstride, colstride){}
-
-
-       //See vector.hh and allocator.hh for details about why the
-       //copy constructor should be default.
-       ///Construction from an operator.
-       template <class Op>
-       inline Matrix(const Operator<Op>& op)
-               :Layout::template MLayout<Rows,Cols,Precision>(op)
-       {
-               op.eval(*this);
-       }
-
-       /// constructor from arbitrary matrix
-       template<int Rows2, int Cols2, typename Precision2, typename Base2>
-       inline Matrix(const Matrix<Rows2, Cols2,Precision2,Base2>& from)
-       :Layout::template MLayout<Rows,Cols,Precision>(from.num_rows(), 
from.num_cols())
-       {
-           operator=(from);
-       }
-       ///@}
-
-       ///@name Assignment
-       ///@{
-       /// operator = from copy
-       inline Matrix& operator= (const Matrix& from)
-       {
-               SizeMismatch<Rows, Rows>::test(num_rows(), from.num_rows());
-               SizeMismatch<Cols, Cols>::test(num_cols(), from.num_cols());
-
-           for(int r=0; r < num_rows(); r++)
-                 for(int c=0; c < num_cols(); c++)
-                       (*this)[r][c] = from[r][c];
-
-           return *this;
-       }
-
-       // operator = 0-ary operator
-       template<class Op> inline Matrix& operator= (const Operator<Op>& op)
-       {
-               op.eval(*this);
-               return *this;
-       }
-
-       // operator =
-       template<int Rows2, int Cols2, typename Precision2, typename Base2>
-       Matrix& operator= (const Matrix<Rows2, Cols2, Precision2, Base2>& from)
-       {
-               SizeMismatch<Rows, Rows2>::test(num_rows(), from.num_rows());
-               SizeMismatch<Cols, Cols2>::test(num_cols(), from.num_cols());
-
-           for(int r=0; r < num_rows(); r++)
-                 for(int c=0; c < num_cols(); c++)
-                       (*this)[r][c] = from[r][c];
-
-           return *this;
-       }
-       ///@}
-
-       ///@name operations on the matrix
-       ///@{
-
-       Matrix& operator*=(const Precision& rhs)
-       {
-                 for(int r=0; r < num_rows(); r++)
-                         for(int c=0; c < num_cols(); c++)
-                               (*this)[r][c] *= rhs;
-
-                 return *this;
-       }
-
-       Matrix& operator/=(const Precision& rhs)
-       {
-                 for(int r=0; r < num_rows(); r++)
-                         for(int c=0; c < num_cols(); c++)
-                               (*this)[r][c] /= rhs;
-
-                 return *this;
-       }
-
-       template<int Rows2, int Cols2, typename Precision2, typename Base2>
-       Matrix& operator+= (const Matrix<Rows2, Cols2, Precision2, Base2>& from)
-       {
-               SizeMismatch<Rows, Rows2>::test(num_rows(), from.num_rows());
-               SizeMismatch<Cols, Cols2>::test(num_cols(), from.num_cols());
-
-           for(int r=0; r < num_rows(); r++)
-                 for(int c=0; c < num_cols(); c++)
-                       (*this)[r][c] += from[r][c];
-
-           return *this;
-       }
-
-       template<class Op>
-       Matrix& operator+=(const Operator<Op>& op)
-       {
-               op.plusequals(*this);
-               return *this;
-       }
-
-       template<class Op>
-       Matrix& operator-=(const Operator<Op>& op)
-       {
-               op.minusequals(*this);
-               return *this;
-       }
-
-       template<int Rows2, int Cols2, typename Precision2, typename Base2>
-       Matrix& operator-= (const Matrix<Rows2, Cols2, Precision2, Base2>& from)
-       {
-               SizeMismatch<Rows, Rows2>::test(num_rows(), from.num_rows());
-               SizeMismatch<Cols, Cols2>::test(num_cols(), from.num_cols());
-
-           for(int r=0; r < num_rows(); r++)
-                 for(int c=0; c < num_cols(); c++)
-                       (*this)[r][c] -= from[r][c];
-
-           return *this;
-       }
-
-       template<int Rows2, int Cols2, typename Precision2, typename Base2>
-       bool operator== (const Matrix<Rows2, Cols2, Precision2, Base2>& rhs) 
const
-       {
-               SizeMismatch<Rows, Rows2>::test(num_rows(), rhs.num_rows());
-               SizeMismatch<Cols, Cols2>::test(num_cols(), rhs.num_cols());
-
-           for(int r=0; r < num_rows(); r++)
-                 for(int c=0; c < num_cols(); c++)
-                   if((*this)[r][c] != rhs[r][c])
-                     return 0;
-           return 1;
-       }
-
-       template<int Rows2, int Cols2, typename Precision2, typename Base2>
-       bool operator!= (const Matrix<Rows2, Cols2, Precision2, Base2>& rhs) 
const
-       {
-               SizeMismatch<Rows, Rows2>::test(num_rows(), rhs.num_rows());
-               SizeMismatch<Cols, Cols2>::test(num_cols(), rhs.num_cols());
-
-           for(int r=0; r < num_rows(); r++)
-                 for(int c=0; c < num_cols(); c++)
-                   if((*this)[r][c] != rhs[r][c])
-                     return 1;
-           return 0;
-       }
-       
-       ///@}
-       
-       /// @name Misc
-       /// @{
-
-       /// return me as a non const reference - useful for temporaries
-       Matrix& ref()
-       {
-               return *this;
-       }
-       ///@}
-
-       #ifdef DOXYGEN_INCLUDE_ONLY_FOR_DOCS
-  
-               /**
-               Access an element from the matrix.
-               The index starts at zero, i.e. the top-left element is m(0, 0).
-               @code
-               double d[2][3] = {{1, 2, 3}, {4, 5, 6}};
-               Matrix<2,3> m(d);
-               double e = m(1,2);     // now e = 6.0;
-               @endcode
-               @internal
-               This method is not defined by Matrix: it is inherited.
-               */
-               const double& operator() (int r, int c) const;
-
-               /**
-               Access an element from the matrix.
-               @param row_col <code>row_col.first</code> holds the row, 
<code>row_col.second</code> holds the column.
-               @internal
-               This method is not defined by Matrix: it is inherited.
-               */
-               const double& operator[](const std::pair<int,int>& row_col) 
const;
-               /**
-                       @overload
-               */
-               double& operator[](const std::pair<int,int>& row_col);
-
-               /**
-               Access an element from the matrix.
-               This can be used as either an r-value or an l-value. The index 
starts at zero,
-               i.e. the top-left element is m(0, 0).
-               @code
-               double d[2][3] = {{1, 2, 3}, {4, 5, 6}};
-               Matrix<2,3> m(d);
-               m(1,2) = 8;     // now d = [1 2 3]
-                                         //         [4 5 8]
-               @endcode
-               @internal
-               This method is not defined by Matrix: it is inherited.
-               */
-               double& operator() (int r, int c);
-
-               /**
-               Access a row from the matrix.
-               This can be used either as an r-value or an l-value. The index 
starts at zero,
-               i.e. the first row is m[0]. To extract a column from a matrix, 
apply [] to the
-               transpose of the matrix (see example). This can be used either 
as an r-value
-               or an l-value. The index starts at zero, i.e. the first row (or 
column) is
-               m[0].
-               @code
-               double d[2][3] = {{1, 2, 3}, {4, 5, 6}};
-               Matrix<2,3> m(d);
-               Vector<3> v = m[1];       // now v = [4 5 6];
-               Vector<2> v2 = m.T()[0];  // now v2 = [1 4];
-               @endcode
-               @internal
-               This method is not defined by Matrix: it is inherited.
-               */
-               const Vector& operator[] (int r) const;
-
-               /**
-               Access a row from the matrix.
-               This can be used either as an r-value or an l-value. The index 
starts at zero,
-               i.e. the first row is m[0]. To extract a column from a matrix, 
apply [] to the
-               transpose of the matrix (see example). This can be used either 
as an r-value
-               or an l-value. The index starts at zero, i.e. the first row (or 
column) is
-               m[0].
-               @code
-               double d[2][3] = {{1, 2, 3}, {4, 5, 6}};
-               Matrix<2,3> m(d);
-               Zero(m[0]);   // set the first row to zero
-               Vector<2> v = 8,9;
-               m.T()[1] = v; // now m = [0 8 0]
-                                       //         [4 9 6]
-               @endcode
-               @internal
-               This method is not defined by Matrix: it is inherited.
-               */
-               Vector& operator[] (int r);
-
-               /// How many rows does this matrix have?
-               /// @internal
-               /// This method is not defined by Matrix: it is inherited.
-               int num_rows() const;
-
-               /// How many columns does this matrix have?
-               /// @internal
-               /// This method is not defined by Matrix: it is inherited.
-               int num_cols() const;
-
-               /// @name Transpose and sub-matrices
-               //@{
-               /**
-               The transpose of the matrix. This is a very fast operation--it 
simply
-               reinterprets a row-major matrix as column-major or vice-versa. 
This can be
-               used as an l-value.
-               @code
-               double d[2][3] = {{1, 2, 3}, {4, 5, 6}};
-               Matrix<2,3> m(d);
-               Zero(m[0]);   // set the first row to zero
-               Vector<2> v = 8,9;
-               m.T()[1] = v; // now m = [0 8 0]
-                                       //         [4 9 6]
-               @endcode
-               @internal
-               This method is not defined by Matrix: it is inherited.
-               */
-               const Matrix<Cols, Rows>& T() const;
-
-               /**
-               The transpose of the matrix. This is a very fast operation--it 
simply
-               reinterprets a row-major  matrix as column-major or vice-versa. 
The result can
-               be used as an l-value.
-               @code
-               double d[2][3] = {{1, 2, 3}, {4, 5, 6}};
-               Matrix<2,3> m(d);
-               Vector<2> v = 8,9;
-               // Set the first column to v
-               m.T()[0] = v; // now m = [8 2 3]
-                                       //         [9 5 6]
-               @endcode
-               <b>This means that the semantics of <code>M=M.T()</code> are 
broken</b>. In
-               general, it is not  necessary to say <code>M=M.T()</code>, 
since you can use
-               M.T() for free whenever you need the transpose, but if you do 
need to, you
-               have to use the Tranpose() function defined in 
<code>helpers.h</code>.
-               @internal
-               This method is not defined by Matrix: it is inherited.
-               */
-               Matrix<Cols, Rows>& T();
-
-               /**
-               Extract a sub-matrix. The matrix extracted will be begin at 
element
-               (Rstart, Cstart) and will contain the next Rsize by Csize 
elements.
-               @code
-               double d[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
-               Matrix<3> m(d);
-               Extract the top-left 2x2 matrix
-               Matrix<2> b = m.slice<0,0,2,2>();  // b = [1 2]
-                                                                               
  //     [4 5]
-               @endcode
-               @internal
-               This method is not defined by Matrix: it is inherited.
-               */
-               template<Rstart, Cstart, Rsize, Csize>
-               const Matrix<Rsize, Csize>& slice() const;
-
-               /**
-               Extract a sub-matrix. The matrix extracted will be begin at 
element (Rstart,
-               Cstart) and will contain the next Rsize by Csize elements. This 
can be used as
-               either an r-value or an l-value.
-               @code
-               double d[2][3] = {{1, 2, 3}, {4, 5, 6}};
-               Matrix<2,3> m(d);
-               Zero(m.slice<0,2,2,1>());  // b = [1 2 0]
-                                                                 //     [4 5 0]
-               @endcode
-               @internal
-               This method is not defined by Matrix: it is inherited.
-               */
-               template<Rstart, Cstart, Rsize, Csize>
-               Matrix<Rsize, Csize>& slice();
-
-               /**
-               Extract a sub-matrix with runtime location and size. The matrix 
extracted will
-               begin at element (rstart, cstart) and will
-               contain the next rsize by csize elements.
-               @code
-               Matrix<> m(3,3);
-               Extract the top-left 2x2 matrix
-               Matrix<2> b = m.slice(0,0,2,2);
-               @endcode
-               @internal
-               This method is not defined by Matrix: it is inherited.
-               */
-               const Matrix<>& slice(int rstart, int cstart, int rsize, int 
csize) const;
-
-               /**
-               Extract a sub-matrix with runtime location and size, which can 
be used as
-               an l-value. The matrix extracted will be begin at element 
(rstart, cstart) and
-               will contain the next rsize by csize elements.
-               @code
-               Matrix<> m(3,3);
-               Zero(m.slice(0,0,2,2));
-               @endcode
-               @internal
-               This method is not defined by Matrix: it is inherited.
-               */
-               Matrix<>& slice(int rstart, int cstart, int rsize, int csize);
-
-               //@}
-
-
-       #endif
-};
-
-}

Index: internal/mbase.hh
===================================================================
RCS file: internal/mbase.hh
diff -N internal/mbase.hh
--- internal/mbase.hh   19 Jan 2010 10:33:19 -0000      1.37
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,299 +0,0 @@
-// -*- c++ -*-
-
-// Copyright (C) 2009 Tom Drummond (address@hidden),
-// Ed Rosten (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-namespace TooN {
-
-namespace Internal
-{
-// As usual, a positive integer means static and -1 means dynamic.
-// The new case is that for strides, -2 means that the stride is 
-// the same as num_cols/num_rows, which must be dynamically sized.
-
-template<int, int, class, int, int, class> struct GenericMBase;
-
-////////////////////////////////////////////////////////////////////////////////
-//Closure used to acquire strides
-//-1 means dynamic stride
-//-2 means dynamic stride is tied to size for a normal matrix
-template<int RowStride, int ColStride> struct Slice
-{
-  
-       template<int Rows, int Cols, class Precision> struct MLayout: public 
GenericMBase<Rows, Cols, Precision, RowStride, ColStride, MatrixSlice<Rows, 
Cols, Precision> >
-       {
-               MLayout(Precision* p, int rows, int cols, int rowstride, int 
colstride)
-                       
:GenericMBase<Rows,Cols,Precision,RowStride,ColStride,MatrixSlice<Rows, Cols, 
Precision> >(p, rows, cols, rowstride, colstride)
-               {
-               }
-       };
-};
-
-
-template<int Rows, int Cols, bool D = (Rows == Dynamic || Cols == Dynamic)>
-struct DiagSize
-{
-       static const int size = Dynamic;
-};
-template<int Rows, int Cols>
-struct DiagSize<Rows, Cols, 0>
-{
-       static const int size = (Rows<Cols?Rows:Cols);
-};
-
-template<int Rs, int Cs, bool D = (Rs == Dynamic || Cs == Dynamic)>
-struct DiagStride
-{
-       static const int stride = Dynamic;
-};
-template<int Rs, int Cs>
-struct DiagStride<Rs, Cs, 0>
-{
-       static const int stride = Rs + Cs;
-};
-
-
-template<int Rows, int Cols, class Precision, int RowStride, int ColStride, 
class Mem> struct GenericMBase
-       : public Mem, 
-       RowStrideHolder<RowStride>,
-       ColStrideHolder<ColStride>
-{
-       //Slices can never have tied strides
-       static const int SliceRowStride = RowStride == -2?-1: RowStride;
-       static const int SliceColStride = ColStride == -2?-1: ColStride;
-
-       int rowstride() const {
-               if(RowStride == -2) { //Normal tied stride
-                       return num_cols();
-               } else {
-                       return RowStrideHolder<RowStride>::stride();
-               }
-       }
-
-       int colstride() const {
-               if(ColStride == -2) { //Normal tied stride
-                       return num_rows();
-               } else {
-                       return ColStrideHolder<ColStride>::stride();
-               }
-       }
-
-       //Optional constructors
-       GenericMBase(){}
-
-       GenericMBase(Precision* p)
-       :Mem(p)
-       {}
-
-
-       GenericMBase(Precision* p, int r, int c, int rowstride, int colstride)
-       :Mem(p, r, c),
-        RowStrideHolder<RowStride>(rowstride),
-        ColStrideHolder<ColStride>(colstride) 
-       {}
-
-       GenericMBase(int r, int c)
-       :Mem(r, c) {}
-
-       template<class Op>
-       GenericMBase(const Operator<Op>& op)
-               : Mem(op),
-                 RowStrideHolder<RowStride>(op),
-                 ColStrideHolder<ColStride>(op)
-       {}
-
-       using Mem::my_data;
-       using Mem::num_cols;
-       using Mem::num_rows;
-
-       Precision& operator()(int r, int c){
-               Internal::check_index(num_rows(), r);
-               Internal::check_index(num_cols(), c);
-               return my_data[r*rowstride() + c*colstride()];
-       }
-
-       const Precision& operator()(int r, int c) const {
-               Internal::check_index(num_rows(), r);
-               Internal::check_index(num_cols(), c);
-               return my_data[r*rowstride() + c*colstride()];
-       }
-
-       Precision& operator[](const std::pair<int, int>& index) {
-               Internal::check_index(num_rows(), index.first);
-               Internal::check_index(num_cols(), index.second);
-               return (*this)(index.first, index.second);
-       }
-
-       const Precision& operator[](const std::pair<int, int>& index) const {
-               Internal::check_index(num_rows(), index.first);
-               Internal::check_index(num_cols(), index.second);
-               return (*this)(index.first, index.second);
-       }
-
-       // this is the type of vector obtained by [ ]
-       typedef Vector<Cols, Precision, SliceVBase<SliceColStride> > Vec;
-       typedef Vector<Cols, const Precision, SliceVBase<SliceColStride> > CVec;
-       
-       Vec operator[](int r) {
-               Internal::check_index(num_rows(), r);
-               return Vec(my_data + rowstride()* r, num_cols(), colstride(), 
Slicing());
-       }
-
-       const CVec operator[](int r) const {
-               Internal::check_index(num_rows(), r);
-               return CVec(my_data + rowstride()* r, num_cols(), colstride(), 
Slicing());
-       }
-
-       
-       //Generic matrix slicing
-       template<int Rstart, int Cstart, int Rlength, int Clength>
-       Matrix<Rlength, Clength, Precision, 
Slice<SliceRowStride,SliceColStride> > slice(int rs, int cs, int rl, int cl){
-               Internal::CheckSlice<Rows, Rstart, Rlength>::check(num_rows(), 
rs, rl);
-               Internal::CheckSlice<Cols, Cstart, Clength>::check(num_cols(), 
cs, cl);
-
-               //Always pass the size and stride as a run-time parameter. It 
will be ignored
-               //by SliceHolder (above) if it is statically determined.
-               return Matrix<Rlength, Clength, Precision, 
Slice<SliceRowStride,SliceColStride> >(
-                      my_data+rowstride()*(Rstart==Dynamic?rs:Rstart) + 
colstride()*(Cstart==Dynamic?cs:Cstart), 
-                          Rlength==Dynamic?rl:Rlength, 
-                          Clength==Dynamic?cl:Clength, 
-                          rowstride(), colstride(), Slicing());
-       }
-
-       template<int Rstart, int Cstart, int Rlength, int Clength>
-       const Matrix<Rlength, Clength, const Precision, 
Slice<SliceRowStride,SliceColStride> > slice(int rs, int cs, int rl, int cl) 
const{
-               Internal::CheckSlice<Rows, Rstart, Rlength>::check(num_rows(), 
rs, rl);
-               Internal::CheckSlice<Cols, Cstart, Clength>::check(num_cols(), 
cs, cl);
-
-               //Always pass the size and stride as a run-time parameter. It 
will be ignored
-               //by SliceHolder (above) if it is statically determined.
-               return Matrix<Rlength, Clength, const Precision, 
Slice<SliceRowStride,SliceColStride> >(
-                      my_data+rowstride()*(Rstart==Dynamic?rs:Rstart) + 
colstride()*(Cstart==Dynamic?cs:Cstart), 
-                          Rlength==Dynamic?rl:Rlength, 
-                          Clength==Dynamic?cl:Clength, 
-                          rowstride(), colstride(), Slicing());
-       }
-
-       //Special cases of slicing
-       template<int Rstart, int Cstart, int Rlength, int Clength>
-       Matrix<Rlength, Clength, Precision, 
Slice<SliceRowStride,SliceColStride> > slice()
-       {
-               //Extra checking in the static case
-               Internal::CheckSlice<Rows, Rstart, Rlength>::check();
-               Internal::CheckSlice<Cols, Cstart, Clength>::check();
-               return slice<Rstart, Cstart, Rlength, Clength>(Rstart, Cstart, 
Rlength, Clength);
-       }
-
-       template<int Rstart, int Cstart, int Rlength, int Clength>
-       const Matrix<Rlength, Clength, const Precision, 
Slice<SliceRowStride,SliceColStride> > slice() const
-       {
-               Internal::CheckSlice<Rows, Rstart, Rlength>::check();
-               Internal::CheckSlice<Cols, Cstart, Clength>::check();
-               return slice<Rstart, Cstart, Rlength, Clength>(Rstart, Cstart, 
Rlength, Clength);
-       }
-
-       Matrix<-1, -1, Precision, Slice<SliceRowStride,SliceColStride> > 
slice(int rs, int cs, int rl, int cl){
-               return slice<Dynamic, Dynamic, Dynamic, Dynamic>(rs, cs, rl, 
cl);
-       }
-
-       const Matrix<-1, -1, const Precision, 
Slice<SliceRowStride,SliceColStride> > slice(int rs, int cs, int rl, int cl) 
const {
-               return slice<Dynamic, Dynamic, Dynamic, Dynamic>(rs, cs, rl, 
cl);
-       }
-
-       //Other slice related functions.
-       Matrix<Cols, Rows, Precision, Slice<SliceColStride,SliceRowStride> > 
T(){
-               return Matrix<Cols, Rows, Precision, 
Slice<SliceColStride,SliceRowStride> >(my_data, num_cols(), num_rows(), 
colstride(), rowstride(), Slicing());
-       }
-
-       const Matrix<Cols, Rows, const Precision, 
Slice<SliceColStride,SliceRowStride> > T() const{
-               return Matrix<Cols, Rows, const Precision, 
Slice<SliceColStride,SliceRowStride> >(my_data, num_cols(), num_rows(), 
colstride(), rowstride(), Slicing());
-       }
-
-       static const int DiagSize = Internal::DiagSize<Rows, Cols>::size;
-       static const int DiagStride = Internal::DiagStride<SliceRowStride, 
SliceColStride>::stride;
-
-       Vector<DiagSize, Precision, SliceVBase<DiagStride> > diagonal_slice()
-       {
-               return Vector<DiagSize, Precision, SliceVBase<DiagStride> 
>(my_data, std::min(num_cols(), num_rows()), rowstride() + colstride(), 
Slicing());
-       }
-
-       Vector<DiagSize, const Precision, SliceVBase<DiagStride> > 
diagonal_slice() const 
-       {
-               return Vector<DiagSize, const Precision, SliceVBase<DiagStride> 
>(my_data, std::min(num_cols(), num_rows()), rowstride() + colstride(), 
Slicing());
-       }
-};
-
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Classes for Matrices owning memory
-//
-//
-struct RowMajor
-{
-       template<int Rows, int Cols, class Precision> struct MLayout: public 
Internal::GenericMBase<Rows, Cols, Precision, (Cols==-1?-2:Cols), 1, 
Internal::MatrixAlloc<Rows, Cols, Precision> >
-       {
-               //Optional constructors.
-               
-               MLayout(){}
-
-               MLayout(int rows, int cols)
-                       :Internal::GenericMBase<Rows, Cols, Precision, (Cols == 
-1 ? -2 : Cols), 1, Internal::MatrixAlloc<Rows, Cols, Precision> >(rows, cols)
-               {}
-
-               template<class Op>
-               MLayout(const Operator<Op>& op)
-                       :Internal::GenericMBase<Rows, Cols, Precision, (Cols == 
-1 ? -2 : Cols), 1, Internal::MatrixAlloc<Rows, Cols, Precision> >(op)
-               {}
-
-       };
-};
-
-struct ColMajor
-{
-       template<int Rows, int Cols, class Precision> struct MLayout: public 
Internal::GenericMBase<Rows, Cols, Precision, 1, (Rows==-1?-2:Rows), 
Internal::MatrixAlloc<Rows, Cols, Precision> >
-       {
-               //Optional constructors.
-               
-               MLayout(){}
-
-               MLayout(int rows, int cols)
-               :Internal::GenericMBase<Rows, Cols, Precision, 1, (Rows == -1 ? 
-2 : Rows), Internal::MatrixAlloc<Rows, Cols, Precision> >(rows, cols)
-               {}
-
-               template<class Op>
-               MLayout(const Operator<Op>& op)
-                       :Internal::GenericMBase<Rows, Cols, Precision, 1, (Rows 
== -1 ? -2 : Rows), Internal::MatrixAlloc<Rows, Cols, Precision> >(op)
-               {}
-
-       };
-};
-
-}
-

Index: internal/objects.h
===================================================================
RCS file: internal/objects.h
diff -N internal/objects.h
--- internal/objects.h  27 Jul 2009 16:39:43 -0000      1.25
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,751 +0,0 @@
-// -*- c++ -*-
-
-// Copyright (C) 2005,2009 Tom Drummond (address@hidden),
-// Ed Rosten (address@hidden), Gerhard Reitmayr (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-namespace TooN {
-
-namespace Internal{
-       // dummy structs that are used in 0-ary operators
-       struct Zero;
-       struct SizedZero;
-       struct RCZero;
-       template<class P> struct Identity;
-       template<class P> struct SizedIdentity;
-
-       template<int S, class P, class B, class Ps> class ScalarsVector;        
-       template<int R, int C, class P, class B, class Ps> class ScalarsMatrix; 
-       template<int R, int C, class P, class B, class Ps> class AddIdentity;   
-       template<class P> class Scalars;        
-       template<class P> class SizedScalars;   
-       template<class P> class RCScalars;
-       
-       ///@internal
-       ///@brief This class represents 1 and only in all its forms.
-       ///@ingroup gInternal
-       struct One{
-
-               One(){} ///<This constructor does nothing. This allows const 
One to be declared with no initializer.
-               ///Generic cast to anything
-               template<class C> operator C() const
-               {
-                       return 1;
-               }
-       };
-       template<class Rhs> Rhs operator*(One, const Rhs& v){return v;}   
///<Multiplies One by something.
-       template<class Lhs> Lhs operator*(const Lhs& v, One){return v;}   
///<Multiplies something by One
-       template<class Rhs> Rhs operator+(One, const Rhs& v){return 1+v;} 
///<Adds something to One
-       template<class Lhs> Lhs operator+(const Lhs& v, One){return v+1;} 
///<Adds One to something
-       template<class Rhs> Rhs operator-(One, const Rhs& v){return 1-v;} 
///<Subtracts something from One
-       template<class Lhs> Lhs operator-(const Lhs& v, One){return v-1;} 
///<Subtracts One from something.
-
-       ///Returns negative One.
-       inline int operator-(const One&)
-       {
-               return -1;
-       }
-       
-       ///@internal
-       ///@brief For an instance \e i of type C, what is the type of \e -i?
-       ///Usually the answer is that is it the same type.
-       ///@ingroup gInternal
-       template<class C> struct NegType
-       {
-               typedef C Type; ///<The type of -C
-       };
-
-       /address@hidden
-          @brief The type of -One
-          @ingroup gInternal
-       */
-       template<> struct NegType<One>
-       {
-               ///One really repersents 1. Therefore -One is not the same type
-               ///as One.
-               typedef int Type;
-       };
-
-       ///@internal
-       ///@brief Does One behave as a field with respect to Rhs?
-       ///@ingroup gInternal
-       template<class Rhs> struct Field<One, Rhs>
-       {
-               ///One can be converted in to anything, so the resulting type is
-               ///a field if the other type is a field.
-               static const int is = IsField<Rhs>::value;
-       };
-
-       ///@internal
-       ///@brief Does One behave as a field with respect to Lhs?
-       ///@ingroup gInternal
-       template<class Lhs> struct Field<Lhs, One>
-       {
-               ///One can be converted in to anything, so the resulting type is
-               ///a field if the other type is a field.
-               static const int is = IsField<Lhs>::value;
-       };
-
-}
-
-////////////////////
-// Zero
-////////////////////
-
-
-
-template<> struct Operator<Internal::SizedZero>;
-template<> struct Operator<Internal::RCZero>;
-
-
-///@internal
-///@brief Object which behaves like a block of zeros. See TooN::Zeros.
-///@ingroup gInternal
-template<> struct Operator<Internal::Zero> {
-       ///@name Operator members
-       ///@{
-       template<int Size, class Precision, class Base>
-       void eval(Vector<Size, Precision, Base>& v) const {
-               for(int i=0; i < v.size(); i++) {
-                       v[i]= 0;
-               }
-       }
-
-       template<int R, int C, class P, class B>
-       void eval(Matrix<R,C,P,B>& m) const {
-               for(int r=0; r<m.num_rows(); r++){
-                       for(int c=0; c<m.num_cols(); c++){
-                               m(r,c)=0;
-                       }
-               }
-       }
-       ///@}
-
-       ///Generate a sized Zero object for constructing dynamic vectors.
-       Operator<Internal::SizedZero> operator()(int s);
-       ///Generate a sized Zero object for constructing dynamic matrices.
-       Operator<Internal::RCZero> operator()(int r, int c);
-       
-};
-
-///@internal
-///@brief Variant of the Zeros object which holds two sizes for constructing 
dynamic matrices.
-///@ingroup gInternal
-template<> struct Operator<Internal::RCZero> : public Operator<Internal::Zero> 
{
-
-       ///@name Operator members determining the size.
-       ///@{
-       Operator(int r, int c) : my_rows(r), my_cols(c) {}
-
-       const int my_rows;
-       const int my_cols;
-       
-       int num_rows() const {return my_rows;}
-       int num_cols() const {return my_cols;}
-       ///@}
-};
-
-///@internal
-///@brief Variant of the Zeros object which holds a size for constructing 
dynamic vectors.
-///@ingroup gInternal
-template<> struct Operator<Internal::SizedZero> : public 
Operator<Internal::Zero> {
-
-       ///@name Operator members determining the size for vectors and square 
matrices.
-       ///@{
-       Operator(int s) : my_size(s) {}
-               
-       const int my_size;
-       
-       int size() const {return my_size;}
-       int num_rows() const {return my_size;}
-       int num_cols() const {return my_size;}
-       ///@}
-};
-
-inline Operator<Internal::SizedZero> Operator<Internal::Zero>::operator()(int 
s){
-       return Operator<Internal::SizedZero>(s);
-}
-
-inline Operator<Internal::RCZero> Operator<Internal::Zero>::operator()(int r, 
int c){
-       return Operator<Internal::RCZero>(r,c);
-}
-
-
-//////////////
-// Identity
-//////////////
-
-///@internal
-///@brief Operator to construct a new matrix with idendity added 
-///@ingroup gInternal
-template<int R, int C, class P, class B, class Precision> struct 
Operator<Internal::AddIdentity<R,C,P,B,Precision> >
-{
-       const Precision s;   ///<Scale of the identity matrix
-       const Matrix<R,C,P,B>& m; ///<matrix to which the identity should be 
added
-       bool invert_m; ///<Whether the identity should be added to + or - m
-       
-       ///@name Construction
-       ///@{
-       Operator(Precision s_, const Matrix<R,C,P,B>& m_, bool b)
-               :s(s_),m(m_),invert_m(b){}
-       ///@}
-
-       ///@name Operator members
-       ///@{
-       template<int R1, int C1, class P1, class B1>
-       void eval(Matrix<R1,C1,P1,B1>& mm) const{
-               for(int r=0; r < m.num_rows(); r++)
-                       for(int c=0; c < m.num_cols(); c++)
-                               if(invert_m)
-                                       mm[r][c] = -m[r][c];
-                               else
-                                       mm[r][c] = m[r][c];
-
-               for(int i=0; i < m.num_rows(); i++)
-                               mm[i][i] += (P)s;
-       }
-       ///@}
-
-       ///@name Sized operator members
-       ///@{
-       int num_rows() const
-       {
-               return m.num_rows();
-       }
-       int num_cols() const
-       {
-               return m.num_cols();
-       }
-       ///@}
-};
-
-///@internal
-///@brief Object which behaves like an Identity matrix. See TooN::Identity.
-///@ingroup gInternal
-template<class Pr> struct Operator<Internal::Identity<Pr> > {
-       
-       ///@name Scalable operators members
-       ///@{
-
-       typedef Pr Precision;
-       template<class Pout, class Pmult> Operator<Internal::Identity<Pout> > 
scale_me(const Pmult& m) const
-       {
-               return Operator<Internal::Identity<Pout> >(val*m);
-       }
-       ///}
-       
-       ///<Scale of the identity matrix.
-       const Precision val;
-
-       ///@name Construction
-       ///@{
-       Operator(const Precision& v)
-               :val(v)
-       {}
-
-       Operator()
-       {}
-       ///}
-
-       ///@name Operator members
-       ///@{
-       template<int R, int C, class P, class B>
-       void eval(Matrix<R,C,P,B>& m) const {
-               SizeMismatch<R, C>::test(m.num_rows(), m.num_cols());
-               
-               for(int r=0; r<m.num_rows(); r++){
-                       for(int c=0; c<m.num_cols(); c++){
-                               m(r,c)=0;
-                       }
-               }
-               
-               for(int r=0; r < m.num_rows(); r++) {
-                       m(r,r) = (P)val;
-               }
-       }
-       
-       template<int Rows, int Cols, typename P, typename B>
-       void plusequals(Matrix<Rows, Cols, P, B>& m) const
-       {
-               SizeMismatch<Rows, Cols>::test(m.num_rows(), m.num_cols());
-               for(int i=0; i < m.num_rows(); i++)
-                       m[i][i] += (P)val;
-       }
-
-       template <int Rows, int Cols, typename P1, typename B1> 
-       Operator<Internal::AddIdentity<Rows,Cols,P1,B1,Precision> > add(const 
Matrix<Rows,Cols, P1, B1>& m) const
-       {
-               SizeMismatch<Rows, Cols>::test(m.num_rows(), m.num_cols());
-               return 
Operator<Internal::AddIdentity<Rows,Cols,P1,B1,Precision> >(val, m, 0);
-       }
-
-       template <int Rows, int Cols, typename P1, typename B1> 
-       Operator<Internal::AddIdentity<Rows,Cols,P1,B1,Precision> > 
rsubtract(const Matrix<Rows,Cols, P1, B1>& m) const
-       {
-               SizeMismatch<Rows, Cols>::test(m.num_rows(), m.num_cols());
-               return 
Operator<Internal::AddIdentity<Rows,Cols,P1,B1,Precision> >(-val, m, 0);
-       }
-
-       template <int Rows, int Cols, typename P1, typename B1> 
-       Operator<Internal::AddIdentity<Rows,Cols,P1,B1,Precision> > 
lsubtract(const Matrix<Rows,Cols, P1, B1>& m) const
-       {
-               SizeMismatch<Rows, Cols>::test(m.num_rows(), m.num_cols());
-               return 
Operator<Internal::AddIdentity<Rows,Cols,P1,B1,Precision> >(val, m, 1);
-       }
-       ///@}
-       
-       ///@name Sizeable operator members
-       ///@{
-       Operator<Internal::SizedIdentity<Precision> > operator()(int s){
-               return Operator<Internal::SizedIdentity<Precision> >(s, val);
-       }
-       ///@}
-};
-       
-///@internal
-///@brief A variant of Identity which holds a size, allowing dynamic matrices 
to be constructed
-///@ingroup gInternal
-template<class Precision> struct Operator<Internal::SizedIdentity<Precision> > 
-       : public  Operator<Internal::Identity<Precision> > {
-
-       using Operator<Internal::Identity<Precision> >::val;
-       
-       ///@name Constructors
-       ///@{
-       Operator(int s, const Precision& v)
-               :Operator<Internal::Identity<Precision> > (v), my_size(s)
-       {}
-       ///@}
-
-       ///@name Sized operator members
-       ///@{
-       const int my_size;
-       int num_rows() const {return my_size;}
-       int num_cols() const {return my_size;}
-       ///@}
-
-       ///@name Scalable operator members
-       ///@{
-       template<class Pout, class Pmult> 
Operator<Internal::SizedIdentity<Pout> > scale_me(const Pmult& m) const
-       {
-               return Operator<Internal::SizedIdentity<Pout> >(my_size, val*m);
-       }
-       ///@}
-};
-////////////////////////////////////////////////////////////////////////////////
-//
-// Addition of scalars to vectors and matrices
-//
-
-       
-///@internal
-///@brief Operator to construct a new vector a a vector with a scalar added to 
every element
-///@ingroup gInternal
-template<int S, class P, class B, class Precision> struct 
Operator<Internal::ScalarsVector<S,P,B,Precision> >
-{
-       const Precision s;      ///<Scalar to add
-       const Vector<S,P,B>& v; ///<Vector to be added to.
-       const bool invert_v;    ///<Whether to use + or - \c v
-
-       ///@name Constructors
-       ///@{
-       Operator(Precision s_, const Vector<S,P,B>& v_, bool inv)
-               :s(s_),v(v_),invert_v(inv){}
-       ///@}
-
-       ///@name Operator members
-       ///@{
-       template<int S1, class P1, class B1>
-       void eval(Vector<S1,P1,B1>& vv) const{
-               for(int i=0; i < v.size(); i++)
-                       if(invert_v)
-                               vv[i] = s - v[i];
-                       else
-                               vv[i] = s + v[i];
-       }
-       ///@}
-
-       ///@name Sized operator members
-       ///@{
-       int size() const
-       {
-               return v.size();
-       }
-       ///@}
-};
-
-///@internal
-///@brief Operator to construct a new matrix a a matrix with a scalar added to 
every element
-///@ingroup gInternal
-template<int R, int C, class P, class B, class Precision> struct 
Operator<Internal::ScalarsMatrix<R,C,P,B,Precision> >
-{
-       const Precision s;        ///<Scalar to add
-       const Matrix<R,C,P,B>& m; ///<Vector to be added to.
-       const bool invert_m;      ///<Whether to use + or - \c m
-       ///@name Operator members
-       ///@{
-       Operator(Precision s_, const Matrix<R,C,P,B>& m_, bool inv)
-               :s(s_),m(m_),invert_m(inv){}
-       template<int R1, int C1, class P1, class B1>
-       void eval(Matrix<R1,C1,P1,B1>& mm) const{
-               for(int r=0; r < m.num_rows(); r++)
-                       for(int c=0; c < m.num_cols(); c++)
-                               if(invert_m)
-                                       mm[r][c] = s - m[r][c];
-                               else
-                                       mm[r][c] = s + m[r][c];
-       }
-       ///@}
-
-       ///@name Sized operator members
-       ///@{
-       int num_rows() const
-       {
-               return m.num_rows();
-       }
-       int num_cols() const
-       {
-               return m.num_cols();
-       }
-       ///@}
-};
-
-///@internal
-///@brief Generic scalars object. Knows how to be added, knows how to deal 
with += and so on.
-///See TooN::Ones
-///@ingroup gInternal
-template<class P> struct Operator<Internal::Scalars<P> >
-{      
-       ///@name Scalable operator members
-       ///@{
-       typedef P Precision;
-       ///@}
-
-       const Precision s; ///<Value of the scalar being represented.  
-       
-       ///@name Constructors
-       ///@{
-       Operator(Precision s_)
-               :s(s_){}
-
-       Operator()
-       {}
-       ///@}
-
-       ////////////////////////////////////////
-       //
-       // All applications for vector
-       //
-       ///@name Operator members
-       ///@{
-
-       template <int Size, typename P1, typename B1> 
-       void eval(Vector<Size, P1, B1>& v) const
-       {
-               for(int i=0; i < v.size(); i++)
-                       v[i] = (P1)s;
-       }
-
-       template <int Size, typename P1, typename B1> 
-       void plusequals(Vector<Size, P1, B1>& v) const
-       {
-               for(int i=0; i < v.size(); i++)
-                       v[i] += (P1)s;
-       }
-
-       template <int Size, typename P1, typename B1>
-       void minusequals(Vector<Size, P1, B1>& v) const
-       {
-               for(int i=0; i < v.size(); ++i)
-                       v[i] -= (P1)s;
-       }
-
-       template <int Size, typename P1, typename B1> 
-       Operator<Internal::ScalarsVector<Size,P1,B1,Precision> > add(const 
Vector<Size, P1, B1>& v) const
-       {
-               return Operator<Internal::ScalarsVector<Size,P1,B1,Precision> 
>(s, v, 0);
-       }
-
-       template <int Size, typename P1, typename B1> 
-       Operator<Internal::ScalarsVector<Size,P1,B1,Precision> > 
rsubtract(const Vector<Size, P1, B1>& v) const
-       {
-               return Operator<Internal::ScalarsVector<Size,P1,B1,Precision> 
>(-s, v, 0);
-       }
-
-       template <int Size, typename P1, typename B1> 
-       Operator<Internal::ScalarsVector<Size,P1,B1,Precision> > 
lsubtract(const Vector<Size, P1, B1>& v) const
-       {
-               return Operator<Internal::ScalarsVector<Size,P1,B1,Precision> 
>(s, v, 1);
-       }
-
-       ////////////////////////////////////////
-       //
-       // All applications for matrix
-       //
-
-       template <int Rows, int Cols, typename P1, typename B1> 
-       void eval(Matrix<Rows,Cols, P1, B1>& m) const
-       {
-               for(int r=0; r < m.num_rows(); r++)
-                       for(int c=0; c < m.num_cols(); c++)
-                               m[r][c] = s;
-       }
-
-       template <int Rows, int Cols, typename P1, typename B1> 
-       void plusequals(Matrix<Rows,Cols, P1, B1>& m) const
-       {
-               for(int r=0; r < m.num_rows(); r++)
-                       for(int c=0; c < m.num_cols(); c++)
-                               m[r][c] += (P1)s;
-       }
-
-       template <int Rows, int Cols, typename P1, typename B1> 
-       void minusequals(Matrix<Rows,Cols, P1, B1>& m) const
-       {
-               for(int r=0; r < m.num_rows(); r++)
-                       for(int c=0; c < m.num_cols(); c++)
-                               m[r][c] -= (P1)s;
-       }
-
-       template <int Rows, int Cols, typename P1, typename B1> 
-       Operator<Internal::ScalarsMatrix<Rows,Cols,P1,B1,Precision> > add(const 
Matrix<Rows,Cols, P1, B1>& v) const
-       {
-               return 
Operator<Internal::ScalarsMatrix<Rows,Cols,P1,B1,Precision> >(s, v, 0);
-       }
-
-
-       template <int Rows, int Cols, typename P1, typename B1> 
-       Operator<Internal::ScalarsMatrix<Rows,Cols,P1,B1,typename 
Internal::NegType<P>::Type> > rsubtract(const Matrix<Rows,Cols, P1, B1>& v) 
const
-       {
-               return 
Operator<Internal::ScalarsMatrix<Rows,Cols,P1,B1,typename 
Internal::NegType<P>::Type > >(-s, v, 0);
-       }
-
-       template <int Rows, int Cols, typename P1, typename B1> 
-       Operator<Internal::ScalarsMatrix<Rows,Cols,P1,B1,Precision> > 
lsubtract(const Matrix<Rows,Cols, P1, B1>& v) const
-       {
-               return 
Operator<Internal::ScalarsMatrix<Rows,Cols,P1,B1,Precision> >(s, v, 1);
-       }
-       ///@}
-       ////////////////////////////////////////
-       //
-       // Create sized versions for initialization
-       //
-
-       ///@name Sizeable operators members
-       ///@{
-
-       Operator<Internal::SizedScalars<Precision> > operator()(int size) const
-       {
-               return Operator<Internal::SizedScalars<Precision> > (s,size);
-       }
-
-       Operator<Internal::RCScalars<Precision> > operator()(int r, int c) const
-       {
-               return Operator<Internal::RCScalars<Precision> > (s,r,c);
-       }
-       ///@}
-
-       ///@name Scalable operator members
-       ///@{
-       template<class Pout, class Pmult> Operator<Internal::Scalars<Pout> > 
scale_me(const Pmult& m) const
-       {
-               return Operator<Internal::Scalars<Pout> >(s*m);
-       }
-       ///@}
-};
-
-///@internal
-///@brief Variant of the Operator<Internal::Scalars> object which holds a size 
to construct dynamic vectors or square matrices.
-///@ingroup gInternal 
-template<class P> struct Operator<Internal::SizedScalars<P> >: public 
Operator<Internal::Scalars<P> >
-{
-       using Operator<Internal::Scalars<P> >::s;
-       ///@name Sized operator members
-       ///@{
-       const int my_size;
-       int size() const {
-               return my_size;
-       }
-       int num_rows() const {
-               return my_size;
-       }
-       int num_cols() const {
-               return my_size;
-       }
-       ///@}
-
-       ///@name Constructors
-       ///@{
-       Operator(P s, int sz)
-               :Operator<Internal::Scalars<P> >(s),my_size(sz){}
-       ///@}
-               
-       ///@name Scalable operator members
-       ///@{
-       template<class Pout, class Pmult> Operator<Internal::SizedScalars<Pout> 
> scale_me(const Pmult& m) const
-       {
-               return Operator<Internal::SizedScalars<Pout> >(s*m, my_size);
-       }
-       ///@}
-
-private:
-       void operator()(int);
-       void operator()(int,int);
-};
-
-               
-///@internal
-///@brief Variant of Scalars (see TooN::Ones) which holds two sizes to 
construct dynamic matrices.
-///@ingroup gInternal
-template<class P> struct Operator<Internal::RCScalars<P> >: public 
Operator<Internal::Scalars<P> >
-{
-       using Operator<Internal::Scalars<P> >::s;
-
-       ///@name Operator members
-       ///@{
-       const int my_rows, my_cols;
-       int num_rows() const {
-               return my_rows;
-       }
-       int num_cols() const {
-               return my_cols;
-       }
-               
-       Operator(P s, int r, int c)
-               :Operator<Internal::Scalars<P> >(s),my_rows(r),my_cols(c)
-       {}
-               
-       template<class Pout, class Pmult> Operator<Internal::RCScalars<Pout> > 
scale_me(const Pmult& m) const
-       {
-               return Operator<Internal::RCScalars<Pout> >(s*m, my_rows, 
my_cols);
-       }
-
-       ///@}
-private:
-       void operator()(int);
-       void operator()(int,int);
-};
-
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// How to scale scalable operators
-//
-       
-template<template<class> class Op, class Pl, class Pr> 
-Operator<Op<typename Internal::MultiplyType<Pl, Pr>::type > >
-operator*(const Pl& l, const Operator<Op<Pr> >& r)
-{
-       return r.template scale_me<typename Internal::MultiplyType<Pl, 
Pr>::type, Pl>(l); 
-}
-
-template<template<class> class Op, class Pl, class Pr> 
-Operator<Op<typename Internal::MultiplyType<Pl, Pr>::type > >
-operator*(const Operator<Op<Pl> >& l, const Pr&  r)
-{
-       return l.template scale_me<typename Internal::MultiplyType<Pl, 
Pr>::type>(r); 
-}
-
-template<template<class> class Op, class Pl, class Pr> 
-Operator<Op<typename Internal::DivideType<Pl, Pr>::type > >
-operator/(const Operator<Op<Pl> >& l, const Pr&  r)
-{
-       return l.template scale_me<typename Internal::MultiplyType<Pl, 
Pr>::type, Pl>(static_cast<typename Internal::DivideType<Pl,Pr>::type>(1)/r); 
-}
-
-
-template<class Op>
-Operator<Op> operator-(const Operator<Op>& o)
-{
-       return o.template scale_me<typename Operator<Op>::Precision>(-1);
-}
-
-//Special case for negating One
-template<template<class>class Op>
-Operator<Op<DefaultPrecision> > operator-(const Operator<Op<Internal::One> >& 
o)
-{
-       return o.template scale_me<DefaultPrecision>(-1);
-}
-
-/**This function is used to add a scalar to every element of a vector or
-   matrix. For example:
-   @code
-   Vector<3> v;
-   ...
-   ...
-   v += Ones * 3; //Add 3 to every element of v;
-   @endcode
-   Both + and += are supported on vectors,matrices and slices.
-
-   For construction of dynamic vectors and matrices, a size needs to be given:
-   @code
-       Vector<3> v_static = Ones;    
-          Vector<>  v_dynamic = Ones(3); //Construct a 3x1 vector full one 1s
-       Matrix<3> m_static = Ones;     
-          Matrix<>  m_dynamic = Ones(3,4); //Construct a 3x4 matrix
-   @endcode
-   @ingroup gLinAlg
-*/
-static const Operator<Internal::Scalars<Internal::One> > Ones;
-
-
-/**This function is used to initialize vectors and matrices to zero.
-   For construction of dynamic vectors and matrices, a size needs to be given.
-   For example:
-   @code
-       Vector<3> v_static = Zeros;
-          Vector<>  v_dynamic = Zeros(3); //Construct a 3x1 vector
-       Matrix<3> m_static = Zeros;
-          Matrix<>  m_dynamic = Zeros(3,4); //Construct a 3x4 matrix
-   @endcode
-   @ingroup gLinAlg
-*/
-static Operator<Internal::Zero> Zeros;
-
-/**This function is used to add a scalar to the diagonal of a matrix,
-   or to construct matrices.
-   For example:
-   @code
-   Matrix<3> v;
-   ...
-   ...
-   Matrix<3> u = v  + Identity * 4;
-   @endcode
-   Both + and += are supported. For assignment, if the matrix is non-square,
-   then all elements off the leading diagonal are set to zero.
-   For construction of dynamic matrices, a size needs to be given:
-   @code
-       Matrix<3> m_static = Identity;     
-          Matrix<>  m_dynamic = Identity(3); //Construct a 3x3 matrix
-   @endcode
-   @ingroup gLinAlg
-*/
-
-static Operator<Internal::Identity<Internal::One> > Identity;
-
-}
-

Index: internal/operators.hh
===================================================================
RCS file: internal/operators.hh
diff -N internal/operators.hh
--- internal/operators.hh       13 Oct 2011 22:20:46 -0000      1.51
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,692 +0,0 @@
-//-*- c++ -*-
-
-// Copyright (C) 2009 Tom Drummond (address@hidden),
-// Ed Rosten (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-namespace TooN {
-
-//////////////////////////////////////////////////////////////////////////////////////////////
-//             Type  and size computation for scalar operations used in this 
file
-//////////////////////////////////////////////////////////////////////////////////////////////
-
-namespace Internal {
-
-       //Automatic type deduction of return types
-       ///@internal
-       ///This function offers to return a value of type C. This function
-       ///is not implemented anywhere, the result is used for type deduction.
-       template<class C> C gettype();
-       
-       ///@internal
-       ///Determine if two classes are in the same field. For the purposes of
-       ///%TooN \c float and \c int are in the same field, since operator
-       ///+,-,*,/ are defined for any combination of \c float and \c int.
-       template<class L, class R> struct Field
-       {       
-               ///<Set to 1 if the two classes are in the same field.
-               static const int is = IsField<L>::value & IsField<R>::value;
-       };
-       
-
-       //We have to use the traits here because it is not possible to 
-       //check for the existence of a valid operator *, especially
-       //in the presence of builtin operators. Therefore, the type is
-       //only deduced if both of the input types are fields.
-       template<class L, class R, int F = Field<L,R>::is> struct AddType      
{ typedef TOON_TYPEOF(gettype<L>()+gettype<R>()) type;};
-       template<class L, class R, int F = Field<L,R>::is> struct SubtractType 
{ typedef TOON_TYPEOF(gettype<L>()-gettype<R>()) type;};
-       template<class L, class R, int F = Field<L,R>::is> struct MultiplyType 
{ typedef TOON_TYPEOF(gettype<L>()*gettype<R>()) type;};
-       template<class L, class R, int F = Field<L,R>::is> struct DivideType   
{ typedef TOON_TYPEOF(gettype<L>()/gettype<R>()) type;};
-
-       template<class L, class R> struct AddType<L, R, 0>         { typedef 
These_Types_Do_Not_Form_A_Field<L, R> type;};
-       template<class L, class R> struct SubtractType<L, R, 0>    { typedef 
These_Types_Do_Not_Form_A_Field<L, R> type;};
-       template<class L, class R> struct MultiplyType<L, R, 0>    { typedef 
These_Types_Do_Not_Form_A_Field<L, R> type;};
-       template<class L, class R> struct DivideType<L, R, 0>      { typedef 
These_Types_Do_Not_Form_A_Field<L, R> type;};
-
-
-       //Mini operators for passing to Pairwise, etc
-       struct Add{
-               template<class A, class B, class C>      static A op(const B& 
b, const C& c){return b+c;}
-               template<class P1, class P2> struct Return { typedef typename 
AddType<P1,P2>::type Type;};
-       };
-       struct Subtract{
-               template<class A, class B, class C> static A op(const B& b, 
const C& c){return b-c;}
-               template<class P1, class P2> struct Return { typedef typename 
SubtractType<P1,P2>::type Type;};
-       };
-       struct Multiply{
-               template<class A, class B, class C> static A op(const B& b, 
const C& c){return b*c;}
-               template<class P1, class P2> struct Return { typedef typename 
MultiplyType<P1,P2>::type Type;};
-       };
-       struct Divide{
-               template<class A, class B, class C>   static A op(const B& b, 
const C& c){return b/c;}
-               template<class P1, class P2> struct Return { typedef typename 
DivideType<P1,P2>::type Type;};
-       };
-
-};
-
-//////////////////////////////////////////////////////////////////////////////////////////////
-//                                       Operators
-//////////////////////////////////////////////////////////////////////////////////////////////
-
-template<class Op> struct Operator{};
-
-
-//////////////////////////////////////////////////////////////////////////////////
-//                         Vector <op> Vector
-//////////////////////////////////////////////////////////////////////////////////
-
-namespace Internal {
-       template<typename Op,                           // the operation
-                        int S1, typename P1, typename B1,      // lhs vector
-                        int S2, typename P2, typename B2>      // rhs vector
-       struct VPairwise;
-
-       template <int S, typename P, typename A>        // input vector
-       struct VNegate;
-};
-
-template<typename Op,                           // the operation
-                int S1, typename P1, typename B1,      // lhs vector
-                int S2, typename P2, typename B2>      // rhs vector
-struct Operator<Internal::VPairwise<Op, S1, P1, B1, S2, P2, B2> > {
-       const Vector<S1, P1, B1> & lhs;
-       const Vector<S2, P2, B2> & rhs;
-
-       Operator(const Vector<S1, P1, B1> & lhs_in, const Vector<S2, P2, B2> & 
rhs_in) : lhs(lhs_in), rhs(rhs_in) {}
-
-       template<int S0, typename P0, typename Ba0>
-       void eval(Vector<S0, P0, Ba0>& res) const
-       {
-               for(int i=0; i < res.size(); ++i)
-                       res[i] = Op::template op<P0,P1, P2>(lhs[i],rhs[i]);
-       }
-       int size() const {return lhs.size();}
-};
-
-// Addition Vector + Vector
-template<int S1, int S2, typename P1, typename P2, typename B1, typename B2> 
-Vector<Internal::Sizer<S1,S2>::size, typename Internal::AddType<P1, P2>::type> 
-operator+(const Vector<S1, P1, B1>& v1, const Vector<S2, P2, B2>& v2)
-{
-       SizeMismatch<S1, S2>:: test(v1.size(),v2.size());
-       return Operator<Internal::VPairwise<Internal::Add,S1,P1,B1,S2,P2,B2> 
>(v1,v2);
-}
-
-// Subtraction Vector - Vector
-template<int S1, int S2, typename P1, typename P2, typename B1, typename B2> 
-Vector<Internal::Sizer<S1,S2>::size, typename Internal::SubtractType<P1, 
P2>::type> operator-(const Vector<S1, P1, B1>& v1, const Vector<S2, P2, B2>& v2)
-{
-       SizeMismatch<S1, S2>:: test(v1.size(),v2.size());
-       return 
Operator<Internal::VPairwise<Internal::Subtract,S1,P1,B1,S2,P2,B2> >(v1,v2);
-}
-
-// diagmult Vector, Vector
-template <int S1, int S2, typename P1, typename P2, typename B1, typename B2>
-Vector<Internal::Sizer<S1,S2>::size, typename 
Internal::MultiplyType<P1,P2>::type> diagmult(const Vector<S1,P1,B1>& v1, const 
Vector<S2,P2,B2>& v2)
-{
-       SizeMismatch<S1,S2>::test(v1.size(),v2.size());
-       return 
Operator<Internal::VPairwise<Internal::Multiply,S1,P1,B1,S2,P2,B2> >(v1,v2);
-}
-
-template<int S, typename P, typename A>
-struct Operator<Internal::VNegate<S, P, A> > {
-       const Vector<S, P, A> & input;
-       Operator( const Vector<S, P, A> & in ) : input(in) {}
-       
-       template<int S0, typename P0, typename A0>
-       void eval(Vector<S0, P0, A0> & res) const
-       {
-               res = input * -1;
-       }
-       int size() const { return input.size(); }
-};
-
-// Negation -Vector
-template <int S, typename P, typename A>
-Vector<S, P> operator-(const Vector<S,P,A> & v){
-       return Operator<Internal::VNegate<S,P,A> >(v);
-}
-
-// Dot product Vector * Vector
-template<int Size1, typename Precision1, typename Base1, int Size2, typename 
Precision2, typename Base2>
-typename Internal::MultiplyType<Precision1, Precision2>::type operator*(const 
Vector<Size1, Precision1, Base1>& v1, const Vector<Size2, Precision2, Base2>& 
v2){
-  SizeMismatch<Size1, Size2>:: test(v1.size(),v2.size());
-  const int s=v1.size();
-  typename Internal::MultiplyType<Precision1, Precision2>::type result=0;
-  for(int i=0; i<s; i++){
-    result+=v1[i]*v2[i];
-  }
-  return result;
-}
-
-template <typename P1, typename P2, typename B1, typename B2>
-Vector<3, typename Internal::MultiplyType<P1,P2>::type> operator^(const 
Vector<3,P1,B1>& v1, const Vector<3,P2,B2>& v2){
-       // assume the result of adding two restypes is also a restype
-       typedef typename Internal::MultiplyType<P1,P2>::type restype;
-
-       Vector<3, restype> result;
-
-       result[0] = v1[1]*v2[2] - v1[2]*v2[1];
-       result[1] = v1[2]*v2[0] - v1[0]*v2[2];
-       result[2] = v1[0]*v2[1] - v1[1]*v2[0];
-
-       return result;
-}
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////////
-//                            Matrix <op> Matrix
-//////////////////////////////////////////////////////////////////////////////////
-
-namespace Internal {
-       template<typename Op,                           // the operation
-                        int R1, int C1, typename P1, typename B1,      // lhs 
matrix
-                        int R2, int C2, typename P2, typename B2>      // rhs 
matrix
-       struct MPairwise;
-
-       template<int R1, int C1, typename P1, typename B1,      // lhs matrix
-                        int R2, int C2, typename P2, typename B2>      // rhs 
matrix
-       struct MatrixMultiply;
-
-       template<int R, int C, typename P, typename A>         // input matrix
-       struct MNegate;
-};
-
-template<typename Op,                           // the operation
-                int R1, int C1, typename P1, typename B1,      // lhs matrix
-                int R2, int C2, typename P2, typename B2>      // rhs matrix
-struct Operator<Internal::MPairwise<Op, R1, C1, P1, B1, R2, C2, P2, B2> > {
-       const Matrix<R1, C1, P1, B1> & lhs;
-       const Matrix<R2, C2, P2, B2> & rhs;
-
-       Operator(const Matrix<R1, C1, P1, B1> & lhs_in, const Matrix<R2, C2, 
P2, B2> & rhs_in) : lhs(lhs_in), rhs(rhs_in) {}
-
-       template<int R0, int C0, typename P0, typename Ba0>
-       void eval(Matrix<R0, C0, P0, Ba0>& res) const
-       {
-               for(int r=0; r < res.num_rows(); ++r){
-                       for(int c=0; c < res.num_cols(); ++c){
-                               res(r,c) = Op::template op<P0,P1, 
P2>(lhs(r,c),rhs(r,c));
-                       }
-               }
-       }
-       int num_rows() const {return lhs.num_rows();}
-       int num_cols() const {return lhs.num_cols();}
-};
-
-// Addition Matrix + Matrix
-template<int R1, int R2, int C1, int C2, typename P1, typename P2, typename 
B1, typename B2> 
-Matrix<Internal::Sizer<R1,R2>::size, Internal::Sizer<C1,C2>::size, typename 
Internal::AddType<P1, P2>::type> 
-operator+(const Matrix<R1, C1, P1, B1>& m1, const Matrix<R2, C2, P2, B2>& m2)
-{
-       SizeMismatch<R1, R2>:: test(m1.num_rows(),m2.num_rows());
-       SizeMismatch<C1, C2>:: test(m1.num_cols(),m2.num_cols());
-       return 
Operator<Internal::MPairwise<Internal::Add,R1,C1,P1,B1,R2,C2,P2,B2> >(m1,m2);
-}
-
-// Subtraction Matrix - Matrix
-template<int R1, int R2, int C1, int C2, typename P1, typename P2, typename 
B1, typename B2> 
-Matrix<Internal::Sizer<R1,R2>::size, Internal::Sizer<C1,C2>::size, typename 
Internal::SubtractType<P1, P2>::type> 
-operator-(const Matrix<R1, C1, P1, B1>& m1, const Matrix<R2, C2, P2, B2>& m2)
-{
-       SizeMismatch<R1, R2>:: test(m1.num_rows(),m2.num_rows());
-       SizeMismatch<C1, C2>:: test(m1.num_cols(),m2.num_cols());
-       return 
Operator<Internal::MPairwise<Internal::Subtract,R1,C1,P1,B1,R2,C2,P2,B2> 
>(m1,m2);
-}
-
-template<int R, int C, typename P, typename A>
-struct Operator<Internal::MNegate<R,C, P, A> > {
-       const Matrix<R,C,P,A> & input;
-       Operator( const Matrix<R,C,P,A> & in ) : input(in) {}
-       
-       template<int R0, int C0, typename P0, typename A0>
-       void eval(Matrix<R0,C0,P0,A0> & res) const
-       {
-               res = input * -1;
-       }
-       int num_rows() const { return input.num_rows(); }
-       int num_cols() const { return input.num_cols(); }
-};
-
-// Negation -Matrix
-template <int R, int C, typename P, typename A>
-Matrix<R, C, P> operator-(const Matrix<R,C,P,A> & v){
-       return Operator<Internal::MNegate<R,C,P,A> >(v);
-}
-
-template<int R1, int C1, typename P1, typename B1,      // lhs matrix
-                int R2, int C2, typename P2, typename B2>      // rhs matrix
-struct Operator<Internal::MatrixMultiply<R1, C1, P1, B1, R2, C2, P2, B2> > {
-       const Matrix<R1, C1, P1, B1> & lhs;
-       const Matrix<R2, C2, P2, B2> & rhs;
-
-       Operator(const Matrix<R1, C1, P1, B1> & lhs_in, const Matrix<R2, C2, 
P2, B2> & rhs_in) : lhs(lhs_in), rhs(rhs_in) {}
-
-       template<int R0, int C0, typename P0, typename Ba0>
-       void eval(Matrix<R0, C0, P0, Ba0>& res) const
-       {
-
-               for(int r=0; r < res.num_rows(); ++r) {
-                       for(int c=0; c < res.num_cols(); ++c) {
-                               res(r,c) = lhs[r] * (rhs.T()[c]);
-                       }
-               }
-       }
-       int num_rows() const {return lhs.num_rows();}
-       int num_cols() const {return rhs.num_cols();}
-};
-
-
-
-
-// Matrix multiplication Matrix * Matrix
-
-template<int R1, int C1, int R2, int C2, typename P1, typename P2, typename 
B1, typename B2> 
-Matrix<R1, C2, typename Internal::MultiplyType<P1, P2>::type> operator*(const 
Matrix<R1, C1, P1, B1>& m1, const Matrix<R2, C2, P2, B2>& m2)
-{
-       SizeMismatch<C1, R2>:: test(m1.num_cols(),m2.num_rows());
-       return Operator<Internal::MatrixMultiply<R1,C1,P1,B1,R2,C2,P2,B2> 
>(m1,m2);
-}
-
-//////////////////////////////////////////////////////////////////////////////////
-//                 matrix <op> vector and vv.
-//////////////////////////////////////////////////////////////////////////////////
-
-
-namespace Internal {
-       // dummy struct for Vector * Matrix
-       template<int R, int C, typename P1, typename B1, int Size, typename P2, 
typename B2>
-       struct MatrixVectorMultiply;
-
-       // this is distinct to cater for non commuting precision types
-       template<int Size, typename P1, typename B1, int R, int C, typename P2, 
typename B2>
-       struct VectorMatrixMultiply;
-
-       // dummy struct for Vector * Matrix
-       template<int R, int C, typename P1, typename B1, int Size, typename P2, 
typename B2>
-       struct MatrixVectorDiagMultiply;
-
-       // this is distinct to cater for non commuting precision types
-       template<int Size, typename P1, typename B1, int R, int C, typename P2, 
typename B2>
-       struct VectorMatrixDiagMultiply;
-
-};
-
-// Matrix Vector multiplication Matrix * Vector
-template<int R, int C, typename P1, typename B1, int Size, typename P2, 
typename B2> 
-struct Operator<Internal::MatrixVectorMultiply<R,C,P1,B1,Size,P2,B2> > {
-       const Matrix<R,C,P1,B1>& lhs;
-       const Vector<Size,P2,B2>& rhs;
-
-       Operator(const Matrix<R,C,P1,B1>& lhs_in, const Vector<Size,P2,B2>& 
rhs_in) : lhs(lhs_in), rhs(rhs_in) {}
-
-       int size() const {return lhs.num_rows();}
-
-       template<int Sout, typename Pout, typename Bout>
-       void eval(Vector<Sout, Pout, Bout>& res) const {
-               for(int i=0; i < res.size(); ++i){
-                       res[i] = lhs[i] * rhs;
-               }
-       }
-};
-
-template<int R, int C, int Size, typename P1, typename P2, typename B1, 
typename B2>
-Vector<R, typename Internal::MultiplyType<P1,P2>::type> operator*(const 
Matrix<R, C, P1, B1>& m, const Vector<Size, P2, B2>& v)
-{
-       SizeMismatch<C,Size>::test(m.num_cols(), v.size());
-       return Operator<Internal::MatrixVectorMultiply<R,C,P1,B1,Size,P2,B2> 
>(m,v);
-}
-                                                                               
                                                        
-// Vector Matrix multiplication Vector * Matrix
-template<int R, int C, typename P1, typename B1, int Size, typename P2, 
typename B2> 
-struct Operator<Internal::VectorMatrixMultiply<Size,P1,B1,R,C,P2,B2> > {
-       const Vector<Size,P1,B1>& lhs;
-       const Matrix<R,C,P2,B2>& rhs;
-
-       Operator(const Vector<Size,P1,B1>& lhs_in, const Matrix<R,C,P2,B2>& 
rhs_in) : lhs(lhs_in), rhs(rhs_in) {}
-
-       int size() const {return rhs.num_cols();}
-
-       template<int Sout, typename Pout, typename Bout>
-       void eval(Vector<Sout, Pout, Bout>& res) const {
-               for(int i=0; i < res.size(); ++i){
-                       res[i] = lhs * rhs.T()[i];
-               }
-       }
-};
-
-template<int R, int C, typename P1, typename B1, int Size, typename P2, 
typename B2> 
-Vector<C, typename Internal::MultiplyType<P1,P2>::type> operator*(const 
Vector<Size,P1,B1>& v,
-                                                                               
                                                  const Matrix<R,C,P2,B2>& m)
-{
-       SizeMismatch<R,Size>::test(m.num_rows(), v.size());
-       return Operator<Internal::VectorMatrixMultiply<Size,P1,B1,R,C,P2,B2> 
>(v,m);
-}
-
-
-// Matrix Vector diagonal multiplication Matrix * Vector
-template<int R, int C, typename P1, typename B1, int Size, typename P2, 
typename B2> 
-struct Operator<Internal::MatrixVectorDiagMultiply<R,C,P1,B1,Size,P2,B2> > {
-       const Matrix<R,C,P1,B1>& lhs;
-       const Vector<Size,P2,B2>& rhs;
-
-       Operator(const Matrix<R,C,P1,B1>& lhs_in, const Vector<Size,P2,B2>& 
rhs_in) : lhs(lhs_in), rhs(rhs_in) {}
-
-       int num_rows() const {return lhs.num_rows();}
-       int num_cols() const {return lhs.num_cols();}
-
-       template<int Rout, int Cout, typename Pout, typename Bout>
-       void eval(Matrix<Rout, Cout, Pout, Bout>& res) const {
-               for(int c=0; c < res.num_cols(); ++c) {
-                       P2 temp = rhs[c];
-                       for(int r=0; r < res.num_rows(); ++r) {
-                               res(r,c) = lhs(r,c)*temp;
-                       }
-               }
-       }
-};
-
-template<int R, int C, int Size, typename P1, typename P2, typename B1, 
typename B2>
-Matrix<R, C, typename Internal::MultiplyType<P1,P2>::type> diagmult(const 
Matrix<R, C, P1, B1>& m, const Vector<Size, P2, B2>& v)
-{
-       SizeMismatch<C,Size>::test(m.num_cols(), v.size());
-       return 
Operator<Internal::MatrixVectorDiagMultiply<R,C,P1,B1,Size,P2,B2> >(m,v);
-}
-                                                                               
                                                        
-// Vector Matrix diagonal multiplication Vector * Matrix
-template<int R, int C, typename P1, typename B1, int Size, typename P2, 
typename B2> 
-struct Operator<Internal::VectorMatrixDiagMultiply<Size,P1,B1,R,C,P2,B2> > {
-       const Vector<Size,P1,B1>& lhs;
-       const Matrix<R,C,P2,B2>& rhs;
-
-       Operator(const Vector<Size,P1,B1>& lhs_in, const Matrix<R,C,P2,B2>& 
rhs_in) : lhs(lhs_in), rhs(rhs_in) {}
-
-       int num_rows() const {return rhs.num_rows();}
-       int num_cols() const {return rhs.num_cols();}
-
-       template<int Rout, int Cout, typename Pout, typename Bout>
-       void eval(Matrix<Rout, Cout, Pout, Bout>& res) const {
-               for(int r=0; r < res.num_rows(); ++r){
-                       const P1 temp = lhs[r];
-                       for(int c=0; c<res.num_cols(); ++c){
-                               res(r,c) = temp * rhs(r,c);
-                       }
-               }
-       }
-};
-
-template<int R, int C, typename P1, typename B1, int Size, typename P2, 
typename B2> 
-Matrix<R, C, typename Internal::MultiplyType<P1,P2>::type> diagmult(const 
Vector<Size,P1,B1>& v,
-                                                                               
                                                 const Matrix<R,C,P2,B2>& m)
-{
-       SizeMismatch<R,Size>::test(m.num_rows(), v.size());
-       return 
Operator<Internal::VectorMatrixDiagMultiply<Size,P1,B1,R,C,P2,B2> >(v,m);
-}
-
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// vector <op> scalar 
-// scalar <op> vector 
-// matrix <op> scalar 
-// scalar <op> matrix 
-//
-// Except <scalar> / <matrix|vector> does not exist
-
-namespace Internal {
-       template<int Size, typename P1, typename B1, typename P2, typename Op>
-       struct ApplyScalarV;
-
-       template<int Size, typename P1, typename B1, typename P2, typename Op>
-       struct ApplyScalarVL;
-
-       template<int R, int C, typename P1, typename B1, typename P2, typename 
Op>
-       struct ApplyScalarM;
-
-       template<int R, int C, typename P1, typename B1, typename P2, typename 
Op>
-       struct ApplyScalarML;
-};
-
-template<int Size, typename P1, typename B1, typename P2, typename Op>
-struct Operator<Internal::ApplyScalarV<Size,P1,B1,P2,Op> > {
-       const Vector<Size,P1,B1>& lhs;
-       const P2& rhs;
-
-       Operator(const Vector<Size,P1,B1>& v, const P2& s) : lhs(v), rhs(s) {}
-               
-       template<int S0, typename P0, typename Ba0>
-       void eval(Vector<S0,P0,Ba0>& v) const {
-               for(int i=0; i<v.size(); i++){
-                       v[i]= Op::template op<P0,P1,P2> (lhs[i],rhs);
-               }
-       }
-
-       int size() const {
-               return lhs.size();
-       }
-};
-
-template <int Size, typename P1, typename B1, typename P2>
-Vector<Size, typename Internal::Multiply::Return<P1,P2>::Type> operator*(const 
Vector<Size, P1, B1>& v, const P2& s){
-       return 
Operator<Internal::ApplyScalarV<Size,P1,B1,P2,Internal::Multiply> > (v,s);
-}
-template <int Size, typename P1, typename B1, typename P2>
-Vector<Size, typename Internal::Divide::Return<P1,P2>::Type> operator/(const 
Vector<Size, P1, B1>& v, const P2& s){
-       return Operator<Internal::ApplyScalarV<Size,P1,B1,P2,Internal::Divide> 
> (v,s);
-}
-
-template<int Size, typename P1, typename B1, typename P2, typename Op>
-struct Operator<Internal::ApplyScalarVL<Size,P1,B1,P2,Op> > {
-       const P2& lhs;
-       const Vector<Size,P1,B1>& rhs;
-
-       Operator(const P2& s, const Vector<Size,P1,B1>& v) : lhs(s), rhs(v) {}
-               
-       template<int S0, typename P0, typename Ba0>
-       void eval(Vector<S0,P0,Ba0>& v) const {
-               for(int i=0; i<v.size(); i++){
-                       v[i]= Op::template op<P0,P2,P1> (lhs,rhs[i]);
-               }
-       }
-
-       int size() const {
-               return rhs.size();
-       }
-};
-template <int Size, typename P1, typename B1, typename P2>
-Vector<Size, typename Internal::Multiply::Return<P2,P1>::Type> operator*(const 
P2& s, const Vector<Size, P1, B1>& v){
-       return 
Operator<Internal::ApplyScalarVL<Size,P1,B1,P2,Internal::Multiply> > (s,v);
-}
-// no left division
-
-
-///////  Matrix scalar operators
-
-template<int R, int C, typename P1, typename B1, typename P2, typename Op>
-struct Operator<Internal::ApplyScalarM<R,C,P1,B1,P2,Op> > {
-       const Matrix<R,C,P1,B1>& lhs;
-       const P2& rhs;
-
-       Operator(const Matrix<R,C,P1,B1>& m, const P2& s) : lhs(m), rhs(s) {}
-               
-       template<int R0, int C0, typename P0, typename Ba0>
-       void eval(Matrix<R0,C0,P0,Ba0>& m) const {
-               for(int r=0; r<m.num_rows(); r++){
-                       for(int c=0; c<m.num_cols(); c++){
-                               m(r,c)= Op::template op<P0,P1,P2> 
(lhs(r,c),rhs);
-                       }
-               }
-       }
-
-       int num_rows() const {
-               return lhs.num_rows();
-       }
-       int num_cols() const {
-               return lhs.num_cols();
-       }
-};
-
-template <int R, int C, typename P1, typename B1, typename P2>
-Matrix<R,C, typename Internal::Multiply::Return<P1,P2>::Type> operator*(const 
Matrix<R,C, P1, B1>& m, const P2& s){
-       return Operator<Internal::ApplyScalarM<R,C,P1,B1,P2,Internal::Multiply> 
> (m,s);
-}
-template <int R, int C, typename P1, typename B1, typename P2>
-Matrix<R,C, typename Internal::Divide::Return<P1,P2>::Type> operator/(const 
Matrix<R,C, P1, B1>& m, const P2& s){
-       return Operator<Internal::ApplyScalarM<R,C,P1,B1,P2,Internal::Divide> > 
(m,s);
-}
-
-template<int R, int C, typename P1, typename B1, typename P2, typename Op>
-struct Operator<Internal::ApplyScalarML<R,C,P1,B1,P2,Op> > {
-       const P2& lhs;
-       const Matrix<R,C,P1,B1>& rhs;
-
-       Operator( const P2& s,const Matrix<R,C,P1,B1>& m) : lhs(s), rhs(m) {}
-               
-       template<int R0, int C0, typename P0, typename Ba0>
-       void eval(Matrix<R0,C0,P0,Ba0>& m) const {
-               for(int r=0; r<m.num_rows(); r++){
-                       for(int c=0; c<m.num_cols(); c++){
-                               m(r,c)= Op::template op<P0,P1,P2> 
(lhs,rhs(r,c));
-                       }
-               }
-       }
-
-       int num_rows() const {
-               return rhs.num_rows();
-       }
-       int num_cols() const {
-               return rhs.num_cols();
-       }
-};
-
-template <int R, int C, typename P1, typename B1, typename P2>
-Matrix<R,C, typename Internal::Multiply::Return<P2,P1>::Type> operator*(const 
P2& s, const Matrix<R,C, P1, B1>& m){
-       return 
Operator<Internal::ApplyScalarML<R,C,P1,B1,P2,Internal::Multiply> > (s,m);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Addition of operators
-//
-template <int Size, typename P1, typename B1, typename Op>
-Vector<Size, typename Internal::Add::Return<P1,typename 
Operator<Op>::Precision>::Type> operator+(const Vector<Size, P1, B1>& v, const 
Operator<Op>& op){
-       return op.add(v);
-}
-
-template <int Size, typename P1, typename B1, typename Op>
-Vector<Size, typename Internal::Add::Return<typename Operator<Op>::Precision, 
P1>::Type> operator+(const Operator<Op>& op, const Vector<Size, P1, B1>& v){
-       return op.add(v);
-}
-
-template <int Rows, int Cols, typename P1, typename B1, typename Op>
-Matrix<Rows, Cols, typename Internal::Add::Return<P1,typename 
Operator<Op>::Precision>::Type> operator+(const Matrix<Rows, Cols, P1, B1>& m, 
const Operator<Op>& op){
-       return op.add(m);
-}
-
-template <int Rows, int Cols, typename P1, typename B1, typename Op>
-Matrix<Rows, Cols, typename Internal::Add::Return<typename 
Operator<Op>::Precision,P1>::Type> operator+(const Operator<Op>& op, const 
Matrix<Rows, Cols, P1, B1>& m){
-       return op.add(m);
-}
-
-
-
-
-template <int Size, typename P1, typename B1, typename Op>
-Vector<Size, typename Internal::Subtract::Return<P1,typename 
Operator<Op>::Precision>::Type> operator-(const Vector<Size, P1, B1>& v, const 
Operator<Op>& op){
-       return op.rsubtract(v);
-}
-
-template <int Size, typename P1, typename B1, typename Op>
-Vector<Size, typename Internal::Subtract::Return<typename 
Operator<Op>::Precision, P1>::Type> operator-(const Operator<Op>& op, const 
Vector<Size, P1, B1>& v){
-       return op.lsubtract(v);
-}
-
-template <int Rows, int Cols, typename P1, typename B1, typename Op>
-Matrix<Rows, Cols, typename Internal::Subtract::Return<P1,typename 
Operator<Op>::Precision>::Type> operator-(const Matrix<Rows, Cols, P1, B1>& m, 
const Operator<Op>& op){
-       return op.rsubtract(m);
-}
-
-template <int Rows, int Cols, typename P1, typename B1, typename Op>
-Matrix<Rows, Cols, typename Internal::Subtract::Return<typename 
Operator<Op>::Precision,P1>::Type> operator-(const Operator<Op>& op, const 
Matrix<Rows, Cols, P1, B1>& m){
-       return op.lsubtract(m);
-}
-////////////////////////////////////////////////////////////////////////////////
-//
-// Stream I/O operators
-//
-
-// output operator <<
-template <int Size, typename Precision, typename Base>
-inline std::ostream& operator<< (std::ostream& os, const 
Vector<Size,Precision,Base>& v){
-  std::streamsize fw = os.width();
-  for(int i=0; i<v.size(); i++){
-    os.width(fw);
-    os << v[i] << " ";
-  }
-  return os;
-}
-
-// operator istream& >>
-template <int Size, typename Precision, typename Base>
-std::istream& operator >> (std::istream& is, Vector<Size, Precision, Base>& v){
-       for (int i=0; i<v.size(); i++){
-               is >>  v[i];
-       }
-       return is;
-}
-
-template<int Rows, int Cols, typename Precision, class Base>
-inline std::ostream& operator<< (std::ostream& os, const Matrix<Rows, Cols, 
Precision, Base>& m){
-       std::streamsize fw = os.width();
-       for(int i=0; i < m.num_rows(); i++)
-       {
-               for(int j=0; j < m.num_cols(); j++)
-               {
-                       if(j != 0)
-                               os << " ";
-                       os.width(fw);
-                       os << m(i,j);
-               }
-               os << std::endl;
-       }
-       return os;
-}
-
-// operator istream& >>
-template <int Rows, int Cols, typename Precision, typename Base>
-std::istream& operator >> (std::istream& is, Matrix<Rows, Cols, Precision, 
Base>& m){
-       for(int r=0; r<m.num_rows(); r++){
-               for(int c=0; c < m.num_cols(); c++){
-                       is >> m(r,c);
-               }
-       }
-       return is;
-}
-
-}

Index: internal/overfill_error.hh
===================================================================
RCS file: internal/overfill_error.hh
diff -N internal/overfill_error.hh
--- internal/overfill_error.hh  29 Jun 2010 14:03:07 -0000      1.2
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,68 +0,0 @@
-namespace TooN{
-namespace Internal{
-
-template<bool b> struct overfill;
-template<> struct overfill<0>{};
-
-template<int N, int Size> struct CheckOverFill
-{
-       static void check(int)
-       {
-               #ifdef TOON_TEST_INTERNALS
-                       if(N >= Size)
-                               throw StaticVectorOverfill();
-               #else
-                       Internal::overfill<(N>=Size)> overfilled_vector;
-               #endif
-       };
-};
-
-template<int N> struct CheckOverFill<N, -1>
-{
-       static void check(int s)
-       {
-               #ifdef TOON_TEST_INTERNALS
-                       if(N >= s)
-                               throw VectorOverfill();
-               #elif !defined TOON_NDEBUG_FILL
-                       if(N >= s)
-                       {
-                               std::cerr << "TooN overfilled vector" << 
std::endl;
-                               std::abort();
-                       }
-               #endif
-       };
-};
-
-
-template<int N, int R, int C, bool IsDynamic=(R==-1||C==-1)> struct 
CheckMOverFill
-{
-       static void check(int)
-       {
-               #ifdef TOON_TEST_INTERNALS
-                       if(N >= R*C)
-                               throw StaticMatrixOverfill();
-               #else
-                       Internal::overfill<(N>=R*C)>();
-               #endif
-       }
-};
-
-template<int N, int R, int C> struct CheckMOverFill<N, R, C, 1>
-{
-       static void check(int s)
-       {
-               #ifdef TOON_TEST_INTERNALS
-                       if(N >= s)
-                               throw StaticMatrixOverfill();
-               #else
-                       if(N >= s)
-                       {
-                               std::cerr << "TooN overfilled matrix" << 
std::endl;
-                               std::abort();
-                       }
-               #endif
-       }
-};
-
-}}

Index: internal/planar_complex.hh
===================================================================
RCS file: internal/planar_complex.hh
diff -N internal/planar_complex.hh
--- internal/planar_complex.hh  1 Feb 2010 19:35:02 -0000       1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,62 +0,0 @@
-namespace TooN{
-       namespace Internal{
-               
-               ///@internal
-               ///@brief A simple smart pointer type representing planar 
complex data.
-               ///Not resizable. Also, only the minimum number of smart pointer
-               ///functionality has been implemented to make Vector work. The 
class returns
-               ///reference types, so it can represent mutable data.
-               ///@ingroup gInternal
-               template<class Precision> struct PointerToPlanarComplex;
-               template<class Precision> struct 
PointerToPlanarComplex<std::complex<Precision> >
-               {
-                       const Precision* const re;
-                       const Precision* const im;
-               
-                       PointerToPlanarComplex(std::pair<Precision*, 
Precision*> d)
-                       :re(d.first),im(d.second)
-                       {}
-
-                       PointerToPlanarComplex(std::pair<const Precision*, 
const Precision*> d)
-                       :re(d.first),im(d.second)
-                       {}
-
-                       PointerToPlanarComplex<std::complex<Precision> > 
operator+(int i) const
-                       {
-                               return 
PointerToPlanarComplex<std::complex<Precision> >(std::make_pair(re+i, im+i));
-                       }
-
-                       const std::complex<Precision> operator[](int i) const
-                       {
-                               return std::complex<Precision>(re[i], im[i]);
-                       }
-
-               };
-       }
-
-       
-       struct ReferencePlanarComplex
-       {
-               template<int Size, typename Precision>
-               struct VLayout;
-
-               template<int Size, typename Precision>
-               struct VLayout<Size, std::complex<Precision> >: 
-                 public Internal::GenericVBase<Size, std::complex<Precision>, 
1, Internal::VectorSlice<Size, std::complex<Precision>, 
Internal::PointerToPlanarComplex<std::complex<double> >,
-                                                           
Internal::PointerToPlanarComplex<std::complex<double> >,
-                                                           const 
std::complex<double>,
-                                                           const 
std::complex<double> > >
-               {
-                       
VLayout(Internal::PointerToPlanarComplex<std::complex<Precision> > p, int sz=0)
-                       :Internal::GenericVBase<Size, std::complex<Precision>, 
1, Internal::VectorSlice<Size, std::complex<Precision>, 
Internal::PointerToPlanarComplex<std::complex<double> >,
-                                                           
Internal::PointerToPlanarComplex<std::complex<double> >,
-                                                           const 
std::complex<double>,
-                                                           const 
std::complex<double> > >(p, sz, 1)
-                       {}
-
-                       
-               };
-
-       };
-}
-

Index: internal/reference.hh
===================================================================
RCS file: internal/reference.hh
diff -N internal/reference.hh
--- internal/reference.hh       11 Jan 2010 14:59:12 -0000      1.9
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,113 +0,0 @@
-// -*- c++ -*-
-
-// Copyright (C) 2009 Tom Drummond (address@hidden),
-// Ed Rosten (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-namespace TooN {
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Helper classes for matrices constructed as references to foreign data
-//
-
-struct Reference
-{
-
-       template<int Size, typename Precision>
-       struct VLayout
-               : public Internal::GenericVBase<Size, Precision, 1, 
Internal::VectorSlice<Size, Precision> >
-       {
-
-               VLayout(Precision* p, int sz=0)
-                       : Internal::GenericVBase<Size, Precision, 1, 
Internal::VectorSlice<Size, Precision> >(p, sz, 0)
-               {}
-       };
-
-
-       struct RowMajor
-       {
-               template<int Rows, int Cols, class Precision>
-               struct MLayout
-                       : public Internal::GenericMBase<Rows, Cols, Precision, 
(Cols==-1?-2:Cols), 1, Internal::MatrixSlice<Rows, Cols, Precision> >
-               {
-
-                       MLayout(Precision* p)
-                               : Internal::GenericMBase<Rows,Cols,Precision, 
(Cols==-1?-2:Cols), 1, Internal::MatrixSlice<Rows, Cols, Precision> > (p)
-                       {}
-                       MLayout(Precision* p, int r, int c)
-                               : Internal::GenericMBase<Rows,Cols,Precision, 
(Cols==-1?-2:Cols), 1, Internal::MatrixSlice<Rows, Cols, Precision> > (p, r, c, 
0, 0)
-                       {}
-               };
-       };
-
-       struct ColMajor
-       {
-               template<int Rows, int Cols, class Precision> struct MLayout: 
public Internal::GenericMBase<Rows, Cols, Precision, 1, (Rows==-1?-2:Rows), 
Internal::MatrixSlice<Rows, Cols, Precision> >
-               {
-                       MLayout(Precision* p)
-                               : Internal::GenericMBase<Rows, Cols, Precision, 
1, (Rows==-1?-2:Rows), Internal::MatrixSlice<Rows, Cols, Precision> >(p)
-                       {}
-                       MLayout(Precision* p, int r, int c)
-                               : Internal::GenericMBase<Rows, Cols, Precision, 
1, (Rows==-1?-2:Rows), Internal::MatrixSlice<Rows, Cols, Precision> >(p, r, c, 
0, 0)
-                       {}
-               };
-       };
-};
-
-
-                                    inline       Vector<Dynamic, double,       
   Reference> wrapVector(double* data, int size)          { return 
Vector<Dynamic, double,          Reference>(data, size); }
-                                    inline const Vector<Dynamic, const double, 
   Reference> wrapVector(const double* data, int size)    { return 
Vector<Dynamic, const double,    Reference>(data, size); }
-template<int Size>                  inline       Vector<Size,    double,       
   Reference> wrapVector(double* data)                    { return Vector<Size, 
   double,          Reference>(data); }
-template<int Size>                  inline const Vector<Size,    const double, 
   Reference> wrapVector(const double* data)              { return Vector<Size, 
   const double,    Reference>(data); }
-template<class Precision>           inline       Vector<Dynamic, Precision,    
   Reference> wrapVector(Precision* data, int size)       { return 
Vector<Dynamic, Precision,       Reference>(data, size); }
-template<class Precision>           inline const Vector<Dynamic, const 
Precision, Reference> wrapVector(const Precision* data, int size) { return 
Vector<Dynamic, const Precision, Reference>(data, size); }
-template<int Size, class Precision> inline       Vector<Size,    Precision,    
   Reference> wrapVector(Precision* data)                 { return Vector<Size, 
   Precision,       Reference>(data); }
-template<int Size, class Precision> inline const Vector<Size,    const 
Precision, Reference> wrapVector(const Precision* data)           { return 
Vector<Size,    const Precision, Reference>(data); }
-
-///Wrap external data as a \link TooN::Matrix Matrix \endlink
-///As usual, if template sizes are provided, then the run-time size is only
-///used if the template size is not Dynamic.
-///@ingroup gLinAlg
-///@{
-//Fully static matrices, ie no size parameters
-template<int Rows, int Cols>                  inline       Matrix<Rows, Cols,  
     double,          Reference::RowMajor> wrapMatrix(double*    data)          
                 { return Matrix<Rows, Cols,       double,          
Reference::RowMajor>(data);}
-template<int Rows, int Cols>                  inline const Matrix<Rows, Cols,  
     const double,    Reference::RowMajor> wrapMatrix(const double*    data)    
                 { return Matrix<Rows, Cols,       const double,    
Reference::RowMajor>(data);}
-template<int Rows, int Cols, class Precision> inline       Matrix<Rows, Cols,  
     Precision,       Reference::RowMajor> wrapMatrix(Precision* data)          
                 { return Matrix<Rows, Cols,       Precision,       
Reference::RowMajor>(data);}
-template<int Rows, int Cols, class Precision> inline const Matrix<Rows, Cols,  
     const Precision, Reference::RowMajor> wrapMatrix(const Precision* data)    
                 { return Matrix<Rows, Cols,       const Precision, 
Reference::RowMajor>(data);}
-//Static sizes with size parameters (useful for half-dynamic matrices)
-template<int Rows, int Cols>                  inline       Matrix<Rows, Cols,  
     double,          Reference::RowMajor> wrapMatrix(double*    data, int 
rows, int cols)       { return Matrix<Rows, Cols,       double,          
Reference::RowMajor>(data, rows, cols);}
-template<int Rows, int Cols>                  inline const Matrix<Rows, Cols,  
     const double,    Reference::RowMajor> wrapMatrix(const double*    data, 
int rows, int cols) { return Matrix<Rows, Cols,       const double,    
Reference::RowMajor>(data, rows, cols);}
-template<int Rows, int Cols, class Precision> inline       Matrix<Rows, Cols,  
     Precision,       Reference::RowMajor> wrapMatrix(Precision* data, int 
rows, int cols)       { return Matrix<Rows, Cols,       Precision,       
Reference::RowMajor>(data, rows, cols);}
-template<int Rows, int Cols, class Precision> inline const Matrix<Rows, Cols,  
     const Precision, Reference::RowMajor> wrapMatrix(const Precision* data, 
int rows, int cols) { return Matrix<Rows, Cols,       const Precision, 
Reference::RowMajor>(data, rows, cols);}
-//Fully dynamic
-                                              inline       Matrix<Dynamic, 
Dynamic, double,          Reference::RowMajor> wrapMatrix(double*          
data, int rows, int cols) { return Matrix<Dynamic, Dynamic, double,          
Reference::RowMajor>(data, rows, cols);}
-                                              inline const Matrix<Dynamic, 
Dynamic, const double,    Reference::RowMajor> wrapMatrix(const double*    
data, int rows, int cols) { return Matrix<Dynamic, Dynamic, const double,    
Reference::RowMajor>(data, rows, cols);}
-template<class Precision>                     inline       Matrix<Dynamic, 
Dynamic, Precision,       Reference::RowMajor> wrapMatrix(Precision* data, int 
rows, int cols)       { return Matrix<Dynamic, Dynamic, Precision,       
Reference::RowMajor>(data, rows, cols);}
-template<class Precision>                     inline const Matrix<Dynamic, 
Dynamic, const Precision, Reference::RowMajor> wrapMatrix(const Precision* 
data, int rows, int cols) { return Matrix<Dynamic, Dynamic, const Precision, 
Reference::RowMajor>(data, rows, cols);}
-///@}
-}

Index: internal/size_mismatch.hh
===================================================================
RCS file: internal/size_mismatch.hh
diff -N internal/size_mismatch.hh
--- internal/size_mismatch.hh   13 Oct 2011 22:20:46 -0000      1.7
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,114 +0,0 @@
-// -*- c++ -*-
-
-// Copyright (C) 2009 Tom Drummond (address@hidden),
-// Ed Rosten (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-namespace TooN {
-
-// class to generate compile time error
-// general case which doesn't exist
-template<int Size1, int Size2>
-struct SizeMismatch_;
-
-// special cases which do exist
-template<int Size>
-struct SizeMismatch_<Size,Size>{
-  static inline void test(int, int){}
-};
-
-template<int Size>
-struct SizeMismatch_<Dynamic,Size>{
-  static inline void test(int size1, int size2){
-    if(size1!=size2){
-         #ifdef TOON_TEST_INTERNALS
-               throw Internal::SizeMismatch();
-         #elif !defined TOON_NDEBUG_SIZE
-                 std::cerr << "TooN Size Mismatch" << std::endl;
-                 std::abort();
-         #endif
-    }
-  }
-};
-
-template<int Size>
-struct SizeMismatch_<Size,Dynamic>{
-  static inline void test(int size1, int size2){
-    if(size1!=size2){
-         #ifdef TOON_TEST_INTERNALS
-               throw Internal::SizeMismatch();
-         #elif !defined TOON_NDEBUG_SIZE
-                 std::cerr << "TooN Size Mismatch" << std::endl;
-                 std::abort();
-         #endif
-    }
-  }
-};
-
-template <>
-struct SizeMismatch_<Dynamic,Dynamic>{
-  static inline void test(int size1, int size2){
-    if(size1!=size2){
-         #ifdef TOON_TEST_INTERNALS
-               throw Internal::SizeMismatch();
-         #elif !defined TOON_NDEBUG_SIZE
-                 std::cerr << "TooN Size Mismatch" << std::endl;
-                 std::abort();
-         #endif
-    }
-  }
-};
-
-#if 0
-namespace Internal
-{
-       struct BadSize;
-}
-#endif
-
-#ifdef TOON_TEST_INTERNALS
-template<int Size1, int Size2>
-struct SizeMismatch_
-{
-       static inline void test(int, int)
-       {
-               throw Internal::StaticSizeMismatch();
-       }
-};
-#endif
-
-template<int Size1, int Size2>
-struct SizeMismatch
-{
-       static inline void test(int s1, int s2)
-       {
-               SizeMismatch_< (Size1 == Dynamic || Size1 == 
Resizable)?Dynamic:Size1,
-                              (Size2 == Dynamic || Size2 == 
Resizable)?Dynamic:Size2 >::test(s1, s2);
-       }
-};
-
-}

Index: internal/slice_error.hh
===================================================================
RCS file: internal/slice_error.hh
diff -N internal/slice_error.hh
--- internal/slice_error.hh     4 Jun 2011 09:31:54 -0000       1.13
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,150 +0,0 @@
-// -*- c++ -*-
-
-// Copyright (C) 2009 Ed Rosten (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-namespace TooN {
-
-namespace Internal
-{
-       template<bool StaticBad> 
-       struct BadSlice;
-       
-       ///@internal
-       ///@brief A static slice is OK.
-       ///This class is used after it has been determined that a slice is OK.
-       ///It does nothing except provide a callable function. By contrast, 
-       ///if the slice is not OK, then the class is not specified and the 
function
-       ///is therefore not callable, and a compile error results.
-       ///@ingroup gInternal
-       template<> 
-       struct BadSlice<0>{
-               static void check(){} ///<This function does nothing: it merely 
exists.
-       };
-       
-       ///@internal
-       ///@brief Check if a slice is OK.
-       ///This class is used to see if a slice is OK. It provides a
-       ///callable function which checks the run-time slice information.
-       ///If the compile time information is bad, then it will not compile
-       ///at all. Otherwise, the sizes are checked at run-time. The check 
-       ///will be optimized away if the sizes are known statically.
-       ///@ingroup gInternal
-       template<int Size, int Start, int Length> 
-       struct CheckSlice
-       {
-               
-               ///@internal
-               ///@brief choose a number statically or dynamically.
-               template<int Num> struct N
-               {
-                       static int n(int num)
-                       {
-                               return (Num==Dynamic||Num==Resizable)?num:Num;
-                       }
-               };
-
-               ///@internal 
-               ///@brief Check the slice.
-               ///This is full static checking, which is stricter than 
-               ///mixed chacking. For instance, none of the slice parameters. 
This
-               ///should be used in addition to the other check function.
-               ///are allowed to be -1 (Dynamic).
-               static void check()
-               {
-                       //Sanity check all basic static sizes
-                       BadSlice<!(Size== Dynamic || Size==Resizable || Size > 
0)>::check();
-                       BadSlice<!(Start >= 0)>::check();
-                       BadSlice<!(Length >= 0)>::check();
-                       BadSlice<(Size != Dynamic && Size != Resizable && 
(Start + Length > Size))>::check();
-               }       
-
-               ///@internal 
-               ///@brief Check the slice.
-               ///The policy is that static sized where present are used.
-               ///However, for extra debugging one can test to see if the
-               ///static and dynamic sizes are mismatched.
-               ///any sense whatsoever.
-               ///@param size Vector size
-               ///@param start Start position of the slice
-               ///@param length Length of the slice.
-               static void check(int size, int start, int length)
-               {
-                       //Sanity check all basic static sizes
-                       BadSlice<!(Size   == Dynamic || Size==Resizable || Size 
> 0)>::check();
-                       BadSlice<!(Start  == Dynamic || Start >= 0)>::check();
-                       BadSlice<!(Length == Dynamic || Length >= 0)>::check();
-                       
-                       //We can make sure Length <= Size, even if Start is 
unknown
-                       BadSlice<(Size!=Dynamic && Size != Resizable &&  Length 
!= Dynamic && Length > Size)>::check();
-                       
-                       //We can make sure Start < Size even if Length is 
unknown
-                       BadSlice<(Start != Dynamic && Size != Dynamic && Size 
!= Resizable && Start > Size)>::check();
-
-                       BadSlice<(Size != Dynamic && Size != Resizable && Start 
!= Dynamic && Length != Dynamic && Start + Length > Size)>::check();
-                       #ifndef TOON_NDEBUG_MISMATCH
-                               if(Start != Dynamic && Size != Resizable && 
Start != start)
-                               {
-                                       std::cerr << "TooN slice: mismatch 
between static and dynamic start.\n";
-                                       std::abort();
-                               }
-                               if(Length != Dynamic && Size != Resizable && 
Length != length)
-                               {
-                                       std::cerr << "TooN slice: mismatch 
between static and dynamic length.\n";
-                                       std::abort();
-                               }
-                               if(Size != Dynamic && Size != Resizable && Size 
!= size)
-                               {
-                                       std::cerr << "TooN slice: mismatch 
between static and dynamic size.\n";
-                                       std::abort();
-                               }
-                       #endif
-                       if( N<Start>::n(start) + N<Length>::n(length) > 
N<Size>::n(size) || 
-                          N<Start>::n(start) < 0 ||
-                          N<Length>::n(length) < 0)
-                       {
-                               #ifdef TOON_TEST_INTERNALS
-                                       throw Internal::SliceError();
-                               #elif !defined TOON_NDEBUG_SLICE
-                                       std::cerr << "TooN slice out of range" 
<< std::endl;
-                                       std::abort();
-                               #endif
-                       }
-               }
-       };      
-
-       #ifdef TOON_TEST_INTERNALS
-               template<bool StaticBad> 
-               struct BadSlice{
-                       static void check(){
-                               throw Internal::StaticSliceError();
-                       }
-               };
-       #endif
-}
-
-}

Index: internal/typeof.hh
===================================================================
RCS file: internal/typeof.hh
diff -N internal/typeof.hh
--- internal/typeof.hh  12 Apr 2009 09:48:56 -0000      1.2
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,47 +0,0 @@
-// -*- c++ -*-
-
-// Copyright (C) 2009 Ed Rosten (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-#ifdef TOON_TYPEOF_DECLTYPE
-       #define TOON_TYPEOF(X) decltype((X))
-#elif defined TOON_TYPEOF_TYPEOF
-       #define TOON_TYPEOF(X) typeof((X))
-#elif defined TOON_TYPEOF___TYPEOF__
-       #define TOON_TYPEOF(X) __typeof__((X))
-#elif defined TOON_TYPEOF_BOOST
-    #include <boost/typeof/typeof.hpp>
-       #define TOON_TYPEOF(X) BOOST_TYPEOF((X))
-#else
-       #include <complex>
-       namespace TooN{
-               namespace Internal{
-                       #include <TooN/internal/builtin_typeof.h>
-               }
-       }
-       #define TOON_TYPEOF(X) typename Internal::DeEnumerate<sizeof 
Internal::enumerate(X)>::type
-#endif

Index: internal/vbase.hh
===================================================================
RCS file: internal/vbase.hh
diff -N internal/vbase.hh
--- internal/vbase.hh   29 Apr 2010 16:06:15 -0000      1.47
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,227 +0,0 @@
-// -*- c++ -*-
-
-// Copyright (C) 2009 Tom Drummond (address@hidden),
-// Ed Rosten (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-namespace TooN {
-
-namespace Internal{
-template<int Size, class Precision, int Stride, class Mem> struct GenericVBase;
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Slice holding class
-//
-struct Default{};
-
-template<int Stride, class Ptr=Default, class CPtr=Default, class Ref=Default, 
class CRef=Default>
-struct SliceVBase {
-
-       // this class is really just a typedef
-       template<int Size, typename Precision>
-       struct VLayout
-               : public GenericVBase<Size, Precision, Stride, 
VectorSlice<Size, Precision, Ptr, CPtr, Ref, CRef> > {
-               typedef typename VectorSlice<Size, Precision, Ptr, CPtr, Ref, 
CRef>::PointerType PointerType;
-       
-               VLayout(PointerType d, int length, int stride)
-                       :GenericVBase<Size, Precision, Stride, 
VectorSlice<Size, Precision, Ptr, CPtr, Ref, CRef> >(d, length, stride){
-               }
-
-               template<class Op>
-               VLayout(const Operator<Op>& op)
-                       :GenericVBase<Size, Precision, Stride, 
VectorSlice<Size, Precision> >(op) {}
-       };
-
-};
-
-template<int Stride>
-struct SliceVBase<Stride, Default, Default, Default, Default> {
-
-       // this class is really just a typedef
-       template<int Size, typename Precision>
-       struct VLayout
-               : public GenericVBase<Size, Precision, Stride, 
VectorSlice<Size, Precision> > {
-
-               typedef typename VectorSlice<Size, Precision>::PointerType 
PointerType;
-       
-               VLayout(PointerType d, int length, int stride)
-                       :GenericVBase<Size, Precision, Stride, 
VectorSlice<Size, Precision> >(d, length, stride){
-               }
-
-               template<class Op>
-               VLayout(const Operator<Op>& op)
-                       :GenericVBase<Size, Precision, Stride, 
VectorSlice<Size, Precision> >(op) {}
-       };
-
-};
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Classes for Vectors owning memory
-//
-
-struct VBase {
-
-       // this class is really just a typedef
-       template<int Size, class Precision>
-       struct VLayout 
-               : public GenericVBase<Size, Precision, 1, VectorAlloc<Size, 
Precision> > {
-       
-               VLayout(){}
-
-               VLayout(int s)
-                       :GenericVBase<Size, Precision, 1, VectorAlloc<Size, 
Precision> >(s)
-               {}
-
-               template<class Op>
-               VLayout(const Operator<Op>& op)
-                       :GenericVBase<Size, Precision, 1, VectorAlloc<Size, 
Precision> >(op) {}
-       };
-};
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Generic implementation
-//
-
-template<int Size, typename Precision, int Stride, typename Mem> struct 
GenericVBase: public Mem, public StrideHolder<Stride>
-{      
-       int stride() const{
-               return StrideHolder<Stride>::stride();
-       }
-
-       //Optional constuctors
-       GenericVBase(){}
-
-       GenericVBase(int s)
-       :Mem(s)
-       {}
-
-       typedef typename Mem::PointerType PointerType;
-       typedef typename Mem::ConstPointerType ConstPointerType;
-       typedef typename Mem::ReferenceType ReferenceType;
-       typedef typename Mem::ConstReferenceType ConstReferenceType;
-
-       GenericVBase(PointerType d, int length, int stride)
-       :Mem(d, length),StrideHolder<Stride>(stride){
-       }
-       
-       template<class Op>
-       GenericVBase(const Operator<Op> & op) : Mem(op), 
StrideHolder<Stride>(op) {}
-
-       using Mem::data;
-       using Mem::size;
-
-       ReferenceType operator[](int i) {
-               Internal::check_index(size(), i);
-               return data()[i * stride()];
-       }
-
-       ConstReferenceType operator[](int i) const {
-               Internal::check_index(size(), i);
-               return data()[i * stride()];
-       }
-
-       typedef SliceVBase<Stride, PointerType, ConstPointerType, 
ReferenceType, ConstReferenceType> SliceBase;
-       typedef SliceVBase<Stride, ConstPointerType, ConstPointerType, 
ConstReferenceType, ConstReferenceType> ConstSliceBase;
-
-
-       //Completely generic Vector slice operations below:
-       template<int Start, int Length> 
-       Vector<Length, Precision, SliceBase> slice(int start, int length){
-               Internal::CheckSlice<Size, Start, Length>::check(size(), start, 
length);        
-               return Vector<Length, Precision, SliceBase>(data() + stride() * 
(Start==Dynamic?start:Start), Length==Dynamic?length:Length, stride(), 
Slicing());
-       }
-
-       template<int Start, int Length> 
-       const Vector<Length, const Precision, ConstSliceBase> slice(int start, 
int length) const{
-               Internal::CheckSlice<Size, Start, Length>::check(size(), start, 
length);        
-               return Vector<Length, const Precision, ConstSliceBase>(data() + 
stride() * (Start==Dynamic?start:Start), Length==Dynamic?length:Length, 
stride(), Slicing());
-       }
-
-       
-
-       //Special case slice operations
-       template<int Start, int Length> Vector<Length, Precision, SliceBase> 
slice(){
-               Internal::CheckSlice<Size, Start, Length>::check();
-               return slice<Start, Length>(Start, Length);
-       }
-
-       template<int Start, int Length> const Vector<Length, const Precision, 
ConstSliceBase> slice() const {
-               Internal::CheckSlice<Size, Start, Length>::check();
-               return slice<Start, Length>(Start, Length);
-       }
-
-       Vector<Dynamic, Precision, SliceBase> slice(int start, int length){
-               return slice<Dynamic, Dynamic>(start, length);
-       }
-
-       const Vector<Dynamic, const Precision, ConstSliceBase> slice(int start, 
int length) const{
-               return slice<Dynamic, Dynamic>(start, length);
-       }
-               
-       //Other slices below
-       const Matrix<1, Size, const Precision, Slice<1,Stride> > as_row() const{
-               return Matrix<1, Size, const Precision, Slice<1,Stride> 
>(data(), 1, size(), 1, stride(), Slicing());
-       }
-
-       Matrix<1, Size, Precision, Slice<1,Stride> > as_row(){
-               return Matrix<1, Size, Precision, Slice<1,Stride> >(data(), 1, 
size(), 1, stride(), Slicing());
-       }
-
-       const Matrix<Size, 1, const Precision, Slice<Stride,1> > as_col() const{
-               return Matrix<Size, 1, const Precision, Slice<Stride,1> 
>(data(), size(), 1, stride(), 1, Slicing());
-       }
-
-       Matrix<Size, 1, Precision, Slice<Stride,1> > as_col(){
-               return Matrix<Size, 1, Precision, Slice<Stride,1> >(data(), 
size(), 1, stride(), 1, Slicing());
-       }
-
-       typedef Vector<Size, Precision, SliceBase> as_slice_type;
-       
-       Vector<Size, Precision, SliceBase> as_slice(){                 
-               return Vector<Size, Precision, SliceBase>(data(), size(), 
stride(), Slicing());         
-       }
-
-       const Vector<Size, const Precision, ConstSliceBase> as_slice() const {  
               
-               return Vector<Size, const Precision, ConstSliceBase>(data(), 
size(), stride(), Slicing());         
-       }
-
-       DiagonalMatrix<Size,Precision, SliceBase> as_diagonal() {
-               return DiagonalMatrix<Size, Precision, SliceBase> (data(), 
size(), stride(), Slicing());
-       }
-
-       const DiagonalMatrix<Size,const Precision, ConstSliceBase> 
as_diagonal() const {
-               return DiagonalMatrix<Size, const Precision, ConstSliceBase> 
(data(), size(), stride(), Slicing());
-       }
-
-};
-
-}
-
-}

Index: internal/vector.hh
===================================================================
RCS file: internal/vector.hh
diff -N internal/vector.hh
--- internal/vector.hh  13 Oct 2011 22:20:46 -0000      1.57
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,497 +0,0 @@
-//-*- c++ -*-
-//
-// Copyright (C) 2009 Tom Drummond (address@hidden),
-// Ed Rosten (address@hidden)
-//
-// This file is part of the TooN Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING.  If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-
-
-namespace TooN {
-
-
-/**
address@hidden TooN::Vector vector.hh TooN/toon.h
-A vector. 
-Support is provided for all the usual vector operations: 
-- elements can be accessed using the familiar [] notation with the index 
starting at 0
-- they can be added or subtracted
-- they can be printed or loaded from streams
-- they can be multiplied (on either side) or divided by a scalar on the right:
-- the vector dot product can be computed
-- subvectors can be extracted using the templated slice() member function
-- the vector cross product can be computed for statically sized 3-vectors
-
-See individual member function documentation for examples of usage.
-
-
-\par Statically- and dynamically-sized vectors
-
-The library provides classes for both statically- and
-dynamically-sized vectors. If you know what dimension of vector you're
-going to use (e.g. 3 to represent a point in 3D space), it's more
-efficient to statically sized vectors. The size of static vectors is
-determined at compile time; that of dynamically-sized vectors at
-run-time.
-
-To create a 3-dimensional vector, use:
address@hidden
-Vector<3> v;
address@hidden
-
-and to create a vector of some other dimensionality just replace 3
-with the positive integer of your choice, or some expression which the
-compiler can evaluate to an integer at compile time.
-
-The preferred way of initialising a vector is to use makeVector. The
-%makeVector function constructs a static vector initialised to the
-size and the contents of the comma-separated list of argments.  The
-%makeVector vectors are real Vectors and so can be used anywhere where
-a vector is needed, not just in initialisations. For example
-
address@hidden
-// Create a vector initialised to [1 2 3];
-Vector<3> v = makeVector(1, 2, 3);
-// Calculate the dot product with the vector [4 0 6]
-double dot = v * makeVector(4, 0, 6);
address@hidden
-
-Because the %make_Vector syntax creates actual vectors, compile-time
-checking is done to ensure that all vectors defined in this way have
-the correct number of elements.
-
-\par Dynamically-sized vectors
-
-To create a dynamically sized vector, use:
address@hidden
-Vector<> v(size);
address@hidden
-where size is an integer which will be evaluated at run time.
-
-Vector<> is actually a synonym for Vector<Dynamic> which is Vector<-1>
-being a template specialisation of Vector<N> with a special
-implementation that allows the size to be determined at runtime.
-
-
-\par Row vectors and column vectors
-
-This library makes no distinction between row vectors and column
-vectors. Vectors that appear on the left of a multiplication are
-treated as row vectors while those that appear on the right are
-treated as column vectors (thus <code>v1*v2</code> means the dot
-product). This means that sometimes you have to be careful to include
-prarentheses since it is possible to write obscure stuff like
-
address@hidden
-Vector<4> v4 = v1 * v2 * v3;
address@hidden
-
-which in the absence of any extra parentheses means 'compute the dot
-product between <code>v1</code> and <code>v2</code> and then multiply
-<code>v3</code> by this scalar and assign to <code>v4</code>'.
-
-If the row-column distinction is important, then vectors can be turned
-into matrices with one row or column by using as_row() or as_col():
-
address@hidden
-double d[3] = {1,2,3};
-Vector<3> v(d);
-Matrix<3,3> M = v.as_col() * v.as_row(); // creates a symmetric rank 1 matrix 
from v 
address@hidden
-
address@hidden gLinAlg
-**/
-template<int Size=Dynamic, typename Precision=DefaultPrecision, typename 
Base=Internal::VBase>
-struct Vector : public Base::template VLayout<Size, Precision> {
-protected:
-public:
-       typedef typename Base::template VLayout<Size, Precision>::PointerType 
PointerType;
-  // sneaky hack: only one of these constructors will work with any given base
-  // class but they don't generate errors unless the user tries to use one of 
them
-  // although the error message may be less than helpful - maybe this can be 
changed?
-
-       /// @name Constructors
-       //@{
-
-       /// Default constructor for vectors.  For fixed-sized vectors,
-       /// this does nothing, i.e. does not guarantee to initialise the
-       /// vector to any particular values.  For dynamically sized
-       /// vectors, this sets the vector to have a length of 0 which
-       /// renders the vector useless because vectors can't be resized
-       inline Vector(){}
-
-       /// Constructor for dynamically-size vectors.  This can also be
-       /// used for statically sized vectors in which case the argument
-       /// is ignored.  The values of the vector are uninitialised
-       explicit inline Vector(int size_in) : Base::template VLayout<Size, 
Precision>(size_in) {}
-
-       /// Constructor used when constructing a vector which references
-       /// other data, e.g.
-       /// @code 
-       /// double[] d = {1,2,3};
-       /// Vector<3,double,Reference> v(d);
-       /// @endcode
-       explicit inline Vector(PointerType data) : Base::template VLayout<Size, 
Precision> (data) {}
-
-
-       /// Constructor used when constructing a dynamic vector which references
-       /// other data, e.g.
-       /// @code 
-       /// double[] d = {1,2,3};
-       /// Vector<Dynamic,double,Reference> v(d,3);
-       /// @endcode
-       inline Vector(PointerType data, int size_in) : Base::template 
VLayout<Size, Precision> (data, size_in) {}
-
-       /// internal constructor
-       inline Vector(PointerType data_in, int size_in, int stride_in, 
Internal::Slicing)
-  : Base::template VLayout<Size, Precision>(data_in, size_in, stride_in) {}
-       
-       using Base::template VLayout<Size, Precision>::size;
-       using Base::template VLayout<Size, Precision>::try_destructive_resize;
-
-       /// construction from Operator object
-       ///
-       /// This is used to implement return value optimisation for
-       /// vectors created from the product of a matrix and a vector, or
-       /// another object like Ones
-       template <class Op>
-       inline Vector(const Operator<Op>& op)
-               : Base::template VLayout<Size, Precision> (op)
-       {
-               op.eval(*this);
-       }
-
-       // Copy construction is a very special case. Copy construction goes all 
the
-       // way down to the bottom. GenericVBase has no idea how to copy itself.
-       // However, the underlying allocator objects do.  In the case of static 
sized
-       // objects, C++ automatically copies the data.  For slice objects, C++ 
copies
-       // all parts (pointer and size), which is correct.  For dynamically 
sized
-       // non-slice objects the copying has to be done by hand.
-       
-       // inline Vector(const Vector&from);
-
-       /// constructor from arbitrary vector
-       template<int Size2, typename Precision2, typename Base2>
-       inline Vector(const Vector<Size2,Precision2,Base2>& from):
-               Base::template VLayout<Size, Precision>(from.size()) {
-               operator=(from);
-       }
-
-       /// @}
-
-#ifdef DOXYGEN_INCLUDE_ONLY_FOR_DOCS
-
-       /// @name Accessing elements
-       /// @{
-
-       /// access an element of the vector
-       ///
-       /// can be used as an l-value ie
-       /// @code
-       /// Vector<3> v;
-       /// v[0] = 10;
-       /// @endcode
-       ///
-       /// @internal
-       /// This method is not defined by Vector: it is inherited.
-       Precision& operator[] (int i);
-
-       /**
-               @overload
-       */
-       const Precision& operator[] (int i) const;
-
-       /// @}
-
-#endif
-
-       /// @name Assignment
-       /// @{
-
-       /// operator = from copy
-       /// A size mismatch is a fatal error, unless the destination
-       /// is resizable.
-       inline Vector& operator= (const Vector& from){
-               try_destructive_resize(from.size());
-               SizeMismatch<Size,Size>::test(size(), from.size());
-               const int s=size();
-               for(int i=0; i<s; i++){
-                       (*this)[i]=from[i];
-               }
-               return *this;
-       }
-
-       /// operator = another Vector
-       /// A size mismatch is a fatal error, unless the destination
-       /// is resizable.
-       template<int Size2, typename Precision2, typename Base2>
-       Vector<Size,Precision,Base >& operator= (const Vector<Size2, 
Precision2, Base2>& from){
-               try_destructive_resize(from.size());
-               SizeMismatch<Size,Size2>::test(size(), from.size());
-               const int s=size();
-               for(int i=0; i<s; i++){
-                       (*this)[i]=from[i];
-               }
-               return *this;
-       }
-
-       /// assignment from an Operator object
-       /// Assignment from sized operators causes a resize
-       /// of Resizable Vectors. Assignment from unsized
-       /// operators dows not.
-       template <class Op>
-       inline Vector & operator=(const Operator<Op>& op){
-               try_destructive_resize(op);
-               op.eval(*this);
-               return *this;
-       }
-       /// @}
-
-       /// @name Operators on the vector
-       /// @{
-
-       /// divide this vector by a constant
-       Vector& operator/=(const Precision& rhs) {
-               for(int i=0; i<size(); i++)
-                       (*this)[i]/=rhs;
-               return *this;
-       }
-       
-       /// multiply this vector by a constant
-       Vector& operator*=(const Precision& rhs) {
-               for(int i=0; i<size(); i++)
-                       (*this)[i]*=rhs;
-               return *this;
-       }
-       
-       /// add another vector onto this one
-       template<int Size2, class Precision2, class Base2>
-       Vector& operator+=(const Vector<Size2, Precision2, Base2>& rhs) {
-               SizeMismatch<Size,Size2>::test(size(),rhs.size());
-               for(int i=0; i<size(); i++)
-                       (*this)[i]+=rhs[i];
-               return *this;
-       }
-       
-       /// add an Operator object onto this vector
-       ///
-       /// this is used to handle cases such as:
-       /// @code
-       /// Vector<3> v;
-       /// v+=Ones
-       /// @endcode
-       template<class Op>
-       Vector& operator+=(const Operator<Op>& op)
-       {
-               op.plusequals(*this);
-               return *this;
-       }               
-
-       template<class Op>
-       Vector& operator-=(const Operator<Op>& op)
-       {
-               op.minusequals(*this);
-               return *this;
-       }               
-
-       /// subtract another vector from this one
-       template<int Size2, class Precision2, class Base2>
-       Vector& operator-=(const Vector<Size2, Precision2, Base2>& rhs) {
-               SizeMismatch<Size,Size2>::test(size(),rhs.size());
-               for(int i=0; i<size(); i++)
-                       (*this)[i]-=rhs[i];
-               return *this;
-       }
-
-       /// @}
-
-       /// @name Comparison
-       /// @{
-
-       /// Test for equality with another vector
-       template<int Size2, class Precision2, class Base2>
-       bool operator==(const Vector<Size2, Precision2, Base2>& rhs) const {
-               SizeMismatch<Size,Size2>::test(size(),rhs.size());
-               for(int i=0; i<size(); i++)
-                 if((*this)[i]!=rhs[i])
-                   return 0;
-               return 1;
-       }
-
-       /// Test for inequality with another vector
-       template<int Size2, class Precision2, class Base2>
-       bool operator!=(const Vector<Size2, Precision2, Base2>& rhs) const {
-               SizeMismatch<Size,Size2>::test(size(),rhs.size());
-               for(int i=0; i<size(); i++)
-                 if((*this)[i]!=rhs[i])
-                   return 1;
-               return 0;
-       }
-
-       /// @}
-
-       /// @name Misc
-       /// @{
-
-       /// return me as a non const reference - useful for temporaries
-       Vector& ref()
-       {
-               return *this;
-       }
-
-#ifdef DOXYGEN_INCLUDE_ONLY_FOR_DOCS
-
-       /// What is the size of this vector?
-       int size() const;
-       
-       /// Resize the vector. This is only provided if the vector is
-       /// declared as Resizable. Existing elements are retained, new
-       /// elements are uninitialized. Resizing has the same efficiency
-       /// guarantees as <code>std::vector</code>.
-       /// @param s The new size.
-       ///
-       /// @internal
-       /// This method is not defined by Vector: it is inherited.
-       void resize(int s);
-
-       /// Return a pointer to the first element of the vector. This method
-       /// is only provided for non-slice vectors, i.e. a subset of the cases
-       /// where the memory is guaranteed to be contiguous.
-       ///
-       /// @internal
-       /// This method is not defined by Vector: it is inherited.
-       Precision* get_data_ptr();
-
-
-
-       /// @}
-
-       /// @name Reshaping, sub-vectors and matrices
-       //@{
-       /**
-          Convert this vector into a 1-by-Size matrix, i.e. a matrix which has 
this
-          vector as its only row.
-          @code
-          Vector<3> a = makeVector(1,2,3);
-          Matrix<1,3> m = a.as_row();  // now m = [1 2 3]
-          @endcode
-          @internal
-          This method is not defined by Vector: it is inherited.
-       */
-       Matrix<1, Size, Precision> as_row();
-  
-       /**
-          Convert this vector into a Size-by-1 matrix, i.e. a matrix which has 
this
-          vector as its only column.
-          @code
-          Vector<3> a = makeVector(1,2,3);
-          Matrix<3,1> m = a.as_col();   // now m = [1 2 3]'
-          @endcode
-          @internal
-          This method is not defined by Vector: it is inherited.
-       */
-       Matrix<Size, 1, Precision> as_col();
-  
-       /**
-          Convert this vector into a Diagonal Size-by-Size matrix, i.e. a 
matrix which is
-          zero everywhere except on the diagonal and the diagonal contains the 
values from this vector
-          @code
-          Vector<3> v = makeVector(1,2,3);
-          Vector<3> v2 = makeVector(2,3,4);
-          Vector<3> v3 = v.as_diagonal() * v2; // now v3 = (2,6,12)
-          @endcode
-          @internal
-          This method is not defined by Vector: it is inherited.
-       */
-       DiagonalMatrix<Size,Precision> as_diagonal();
-
-       /**
-          Extract a sub-vector. The vector extracted will be begin at element 
Start
-          and will contain the next Length elements.
-          @code
-          Vector<5> a = makeVector(1,2,3,4,5);
-          Extract the three elements starting from element 2
-          Vector<3> b = a.slice<2,3>();  /// b = [3 4 5]
-          @endcode
-          @internal
-          This method is not defined by Vector: it is inherited.
-       */
-       template<Start, Length>
-       const Vector<Length,Precision>& slice() const;
-  
-       /**
-          Extract a sub-vector. The vector extracted will be begin at element 
Start
-          and will contain the next Length elements. This version can be used 
as an
-          l-value as well as an r-value
-          @code
-          Vector<5> a = makeVector(1,2,3,4,5);
-          Vector<2> b = makeVector(8,9);
-          // replace the two elements starting from element 1 with b
-          a.slice<1, 2>() = b;       /// now a = [1 8 9 4 5]
-          @endcode
-          @internal
-          This method is not defined by Vector: it is inherited.
-       */
-       template<Start, Length>
-       Vector<Length,Precision>& slice();
-  
-       /**
-          Extract a sub-vector with runtime parameters.
-          The vector extracted will be begin at element start and will contain 
the next
-          length elements.
-          @code
-          Vector<5> a = makeVector(1,2,3,4,5);
-          Extract the three elements starting from element 2
-          Vector<> b = a.slice(2,3);  /// b = [3 4 5]
-          @endcode
-          @internal
-          This method is not defined by Vector: it is inherited.
-       */
-       template<Start, Length>
-       const Vector<Length,Precision>& slice() const;
-  
-       /**
-          Extract a sub-vector with runtime parameters, which can be used as an
-          l-value.
-          The vector extracted will be begin at element start and will contain 
the next
-          length elements.
-          @code
-          Vector<5> a = makeVector(1,2,3,4,5);
-          Extract the three elements starting from element 2
-          a.slice(2,3)[0] = 17;  /// a -> [1 2 17 4 5]
-          @endcode
-          @internal
-          This method is not defined by Vector: it is inherited.
-       */
-       template<Start, Length>
-       Vector<Length,Precision>& slice();
-       //@}
-
-#endif
-
-};
-
-}

Index: optimization/brent.h
===================================================================
RCS file: optimization/brent.h
diff -N optimization/brent.h
--- optimization/brent.h        23 May 2011 19:53:53 -0000      1.5
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,176 +0,0 @@
-#ifndef TOON_BRENT_H
-#define TOON_BRENT_H
-#include <TooN/TooN.h>
-#include <TooN/helpers.h>
-#include <limits>
-#include <cmath>
-#include <cstdlib>
-#include <iomanip>
-
-
-namespace TooN
-{
-       using std::numeric_limits;
-
-       /// brent_line_search performs Brent's golden section/quadratic 
interpolation search
-       /// on the functor provided. The inputs a, x, b must bracket the 
minimum, and
-       /// must be in order, so  that \f$ a < x < b \f$ and \f$ f(a) > f(x) < 
f(b) \f$.
-       /// @param a The most negative point along the line.
-       /// @param x The central point.
-       /// @param fx The value of the function at the central point (\f$b\f$).
-       /// @param b The most positive point along the line.
-       /// @param func The functor to minimize
-       /// @param maxiterations  Maximum number of iterations
-       /// @param tolerance Tolerance at which the search should be stopped 
(defults to sqrt machine precision)
-       /// @param epsilon Minimum bracket width (defaults to machine precision)
-       /// @return The minima position is returned as the first element of the 
vector,
-       ///         and the minimal value as the second element.
-       /// @ingroup gOptimize
-       template<class Functor, class Precision> Vector<2, Precision> 
brent_line_search(Precision a, Precision x, Precision b, Precision fx, const 
Functor& func, int maxiterations, Precision tolerance = 
sqrt(numeric_limits<Precision>::epsilon()), Precision epsilon = 
numeric_limits<Precision>::epsilon())
-       {
-               using std::min;
-               using std::max;
-
-               using std::abs;
-               using std::sqrt;
-
-               //The golden ratio:
-               const Precision g = (3.0 - sqrt(5))/2;
-               
-               //The following points are tracked by the algorithm:
-               //a, b bracket the interval
-               // x   is the best value so far
-               // w   second best point so far
-               // v   third best point so far
-               // These may not be unique.
-               
-               //The following points are used during iteration
-               // u   the point currently being evaluated
-               // xm   (a+b)/2
-               
-               //The updates are tracked as:
-               //e is the distance moved last step, or current if golden 
section is used
-               //d is the point moved in the current step
-               
-               Precision w=x, v=x, fw=fx, fv=fx;
-               
-               Precision d=0, e=0;
-               int i=0;
-
-               while(abs(b-a) > (abs(a) + abs(b)) * tolerance + epsilon && i < 
maxiterations)
-               {
-                       i++;
-                       //The midpoint of the bracket
-                       const Precision xm = (a+b)/2;
-
-                       //Per-iteration tolerance 
-                       const Precision tol1 = abs(x)*tolerance + epsilon;
-
-                       //If we recently had an unhelpful step, then do
-                       //not attempt a parabolic fit. This prevents bad 
parabolic
-                       //fits spoiling the convergence. Also, do not attempt 
to fit if
-                       //there is not yet enough unique information in x, w, v.
-                       if(abs(e) > tol1 && w != v)
-                       {
-                               //Attempt a parabolic through the best 3 
points. The pdata is shifted
-                               //so that x = 0 and f(x) = 0. The remaining 
parameters are:
-                               //
-                               // xw  = w'    = w-x
-                               // fxw = f'(w) = f(w) - f(x)
-                               //
-                               // etc:
-                               const Precision fxw = fw - fx;
-                               const Precision fxv = fv - fx;
-                               const Precision xw = w-x;
-                               const Precision xv = v-x;
-
-                               //The parabolic fit has only second and first 
order coefficients:
-                               //const Precision c1 = (fxv*xw - fxw*xv) / 
(xw*xv*(xv-xw));
-                               //const Precision c2 = (fxw*xv*xv - fxv*xw*xw) 
/ (xw*xv*(xv-xw));
-                               
-                               //The minimum is at -.5*c2 / c1;
-                               //
-                               //This can be written as p/q where:
-                               const Precision p = fxv*xw*xw - fxw*xv*xv;
-                               const Precision q = 2*(fxv*xw - fxw*xv);
-
-                               //The minimum is at p/q. The minimum must lie 
within the bracket for it
-                               //to be accepted. 
-                               // Also, we want the step to be smaller than 
half the old one. So:
-
-                               if(q == 0 || x + p/q < a || x+p/q > b || 
abs(p/q) > abs(e/2))
-                               {
-                                       //Parabolic fit no good. Take a golden 
section step instead
-                                       //and reset d and e.
-                                       if(x > xm)
-                                               e = a-x;
-                                       else
-                                               e = b-x;
-
-                                       d = g*e;
-                               }
-                               else
-                               {
-                                       //Parabolic fit was good. Shift d and e
-                                       e = d;
-                                       d = p/q;
-                               }
-                       }
-                       else
-                       {
-                               //Don't attempt a parabolic fit. Take a golden 
section step
-                               //instead and reset d and e.
-                               if(x > xm)
-                                       e = a-x;
-                               else
-                                       e = b-x;
-
-                               d = g*e;
-                       }
-
-                       const Precision u = x+d;
-                       //Our one function evaluation per iteration
-                       const Precision fu = func(u);
-
-                       if(fu < fx)
-                       {
-                               //U is the best known point.
-
-                               //Update the bracket
-                               if(u > x)
-                                       a = x;
-                               else
-                                       b = x;
-
-                               //Shift v, w, x
-                               v=w; fv = fw;
-                               w=x; fw = fx;
-                               x=u; fx = fu;
-                       }
-                       else
-                       {
-                               //u is not the best known point. However, it is 
within the
-                               //bracket.
-                               if(u < x)
-                                       a = u;
-                               else
-                                       b = u;
-
-                               if(fu <= fw || w == x)
-                               {
-                                       //Here, u is the new second-best point
-                                       v = w; fv = fw;
-                                       w = u; fw = fu;
-                               }
-                               else if(fu <= fv || v==x || v == w)
-                               {
-                                       //Here, u is the new third-best point.
-                                       v = u; fv = fu;
-                               }
-                       }
-               }
-
-               return makeVector(x, fx);
-       }
-}
-#endif

Index: optimization/conjugate_gradient.h
===================================================================
RCS file: optimization/conjugate_gradient.h
diff -N optimization/conjugate_gradient.h
--- optimization/conjugate_gradient.h   21 Jan 2010 22:45:38 -0000      1.10
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,407 +0,0 @@
-#include <TooN/optimization/brent.h>
-#include <utility>
-#include <cmath>
-#include <cassert>
-#include <cstdlib>
-
-namespace TooN{
-       namespace Internal{
-
-
-       ///Turn a multidimensional function in to a 1D function by specifying a
-       ///point and direction. A nre function is defined:
-       ////\f[
-       /// g(a) = \Vec{s} + a \Vec{d}
-       ///\f]
-       ///@ingroup gOptimize
-       template<int Size, typename Precision, typename Func> struct LineSearch
-       {
-               const Vector<Size, Precision>& start; ///< \f$\Vec{s}\f$
-               const Vector<Size, Precision>& direction;///< \f$\Vec{d}\f$
-
-               const Func& f;///< \f$f(\cdotp)\f$
-
-               ///Set up the line search class.
-               ///@param s Start point, \f$\Vec{s}\f$.
-               ///@param d direction, \f$\Vec{d}\f$.
-               ///@param func Function, \f$f(\cdotp)\f$.
-               LineSearch(const Vector<Size, Precision>& s, const Vector<Size, 
Precision>& d, const Func& func)
-               :start(s),direction(d),f(func)
-               {}
-
-               ///@param x Position to evaluate function
-               ///@return \f$f(\vec{s} + x\vec{d})\f$
-               Precision operator()(Precision x) const
-               {
-                       return f(start + x * direction);
-               }
-       };
-
-       ///Bracket a 1D function by searching forward from zero. The assumption
-       ///is that a minima exists in \f$f(x),\ x>0\f$, and this function 
searches
-       ///for a bracket using exponentially growning or shrinking steps.
-       ///@param a_val The value of the function at zero.
-       ///@param func Function to bracket
-       ///@param initial_lambda Initial stepsize
-       ///@param zeps Minimum bracket size.
-       ///@return <code>m[i][0]</code> contains the values of \f$x\f$ for the 
bracket, in increasing order,
-       ///        and <code>m[i][1]</code> contains the corresponding values 
of \f$f(x)\f$. If the bracket 
-       ///        drops below the minimum bracket size, all zeros are returned.
-       ///@ingroup gOptimize
-       template<typename Precision, typename Func> Matrix<3,2,Precision> 
bracket_minimum_forward(Precision a_val, const Func& func, Precision 
initial_lambda, Precision zeps)
-       {
-               //Get a, b, c to  bracket a minimum along a line
-               Precision a, b, c, b_val, c_val;
-
-               a=0;
-
-               //Search forward in steps of lambda
-               Precision lambda=initial_lambda;
-               b = lambda;
-               b_val = func(b);
-
-               while(std::isnan(b_val))
-               {
-                       //We've probably gone in to an invalid region. This can 
happen even 
-                       //if following the gradient would never get us there.
-                       //try backing off lambda
-                       lambda*=.5;
-                       b = lambda;
-                       b_val = func(b);
-
-               }
-
-
-               if(b_val < a_val) //We've gone downhill, so keep searching 
until we go back up
-               {
-                       double last_good_lambda = lambda;
-                       
-                       for(;;)
-                       {
-                               lambda *= 2;
-                               c = lambda;
-                               c_val = func(c);
-
-                               if(std::isnan(c_val))
-                                       break;
-                               last_good_lambda = lambda;
-                               if(c_val >      b_val) // we have a bracket
-                                       break;
-                               else
-                               {
-                                       a = b;
-                                       a_val = b_val;
-                                       b=c;
-                                       b_val=c_val;
-
-                               }
-                       }
-
-                       //We took a step too far.
-                       //Back up: this will not attempt to ensure a bracket
-                       if(std::isnan(c_val))
-                       {
-                               double bad_lambda=lambda;
-                               double l=1;
-
-                               for(;;)
-                               {
-                                       l*=.5;
-                                       c = last_good_lambda + (bad_lambda - 
last_good_lambda)*l;
-                                       c_val = func(c);
-
-                                       if(!std::isnan(c_val))
-                                               break;
-                               }
-
-
-                       }
-
-               }
-               else //We've overshot the minimum, so back up
-               {
-                       c = b;
-                       c_val = b_val;
-                       //Here, c_val > a_val
-
-                       for(;;)
-                       {
-                               lambda *= .5;
-                               b = lambda;
-                               b_val = func(b);
-
-                               if(b_val < a_val)// we have a bracket
-                                       break;
-                               else if(lambda < zeps)
-                                       return Zeros;
-                               else //Contract the bracket
-                               {
-                                       c = b;
-                                       c_val = b_val;
-                               }
-                       }
-               }
-
-               Matrix<3,2> ret;
-               ret[0] = makeVector(a, a_val);
-               ret[1] = makeVector(b, b_val);
-               ret[2] = makeVector(c, c_val);
-
-               return ret;
-       }
-
-}
-
-
-/** This class provides a nonlinear conjugate-gradient optimizer. The following
-code snippet will perform an optimization on the Rosenbrock Bananna function in
-two dimensions:
-
address@hidden
-double Rosenbrock(const Vector<2>& v)
-{
-               return sq(1 - v[0]) + 100 * sq(v[1] - sq(v[0]));
-}
-
-Vector<2> RosenbrockDerivatives(const Vector<2>& v)
-{
-       double x = v[0];
-       double y = v[1];
-
-       Vector<2> ret;
-       ret[0] = -2+2*x-400*(y-sq(x))*x;
-       ret[1] = 200*y-200*sq(x);
-
-       return ret;
-}
-
-int main()
-{
-       ConjugateGradient<2> cg(makeVector(0,0), Rosenbrock, 
RosenbrockDerivatives);
-
-       while(cg.iterate(Rosenbrock, RosenbrockDerivatives))
-               cout << "y_" << iteration << " = " << cg.y << endl;
-
-       cout << "Optimal value: " << cg.y << endl;
-}
address@hidden
-
-The chances are that you will want to read the documentation for
-ConjugateGradient::ConjugateGradient and ConjugateGradient::iterate.
-
-Linesearch is currently performed using golden-section search and conjugate
-vector updates are performed using the Polak-Ribiere equations.  There many
-tunable parameters, and the internals are readily accessible, so alternative
-termination conditions etc can easily be substituted. However, ususally these
-will not be necessary.
-
address@hidden gOptimize
-*/
-template<int Size, class Precision=double> struct ConjugateGradient
-{
-       const int size;      ///< Dimensionality of the space.
-       Vector<Size> g;      ///< Gradient vector used by the next call to 
iterate()
-       Vector<Size> h;      ///< Conjugate vector to be searched along in the 
next call to iterate()
-       Vector<Size> minus_h;///< negative of h as this is required to be 
passed into a function which uses references (so can't be temporary)
-       Vector<Size> old_g;  ///< Gradient vector used to compute $h$ in the 
last call to iterate()
-       Vector<Size> old_h;  ///< Conjugate vector searched along in the last 
call to iterate()
-       Vector<Size> x;      ///< Current position (best known point)
-       Vector<Size> old_x;  ///< Previous best known point (not set at 
construction)
-       Precision y;         ///< Function at \f$x\f$
-       Precision old_y;     ///< Function at  old_x
-
-       Precision tolerance; ///< Tolerance used to determine if the 
optimization is complete. Defaults to square root of machine precision.
-       Precision epsilon;   ///< Additive term in tolerance to prevent 
excessive iterations if \f$x_\mathrm{optimal} = 0\f$. Known as \c ZEPS in 
numerical recipies. Defaults to 1e-20
-       int       max_iterations; ///< Maximum number of iterations. Defaults 
to \c size\f$*100\f$
-
-       Precision bracket_initial_lambda;///< Initial stepsize used in 
bracketing the minimum for the line search. Defaults to 1.
-       Precision linesearch_tolerance; ///< Tolerance used to determine if the 
linesearch is complete. Defaults to square root of machine precision.
-       Precision linesearch_epsilon; ///< Additive term in tolerance to 
prevent excessive iterations if \f$x_\mathrm{optimal} = 0\f$. Known as \c ZEPS 
in numerical recipies. Defaults to 1e-20
-       int linesearch_max_iterations;  ///< Maximum number of iterations in 
the linesearch. Defaults to 100.
-
-       Precision bracket_epsilon; ///<Minimum size for initial minima 
bracketing. Below this, it is assumed that the system has converged. Defaults 
to 1e-20.
-
-       int iterations; ///< Number of iterations performed
-
-       ///Initialize the ConjugateGradient class with sensible values.
-       ///@param start Starting point, \e x
-       ///@param func  Function \e f  to compute \f$f(x)\f$
-       ///@param deriv  Function to compute \f$\nabla f(x)\f$
-       template<class Func, class Deriv> ConjugateGradient(const Vector<Size>& 
start, const Func& func, const Deriv& deriv)
-       : size(start.size()),
-         
g(size),h(size),minus_h(size),old_g(size),old_h(size),x(start),old_x(size)
-       {
-               init(start, func(start), deriv(start));
-       }       
-
-       ///Initialize the ConjugateGradient class with sensible values.
-       ///@param start Starting point, \e x
-       ///@param func  Function \e f  to compute \f$f(x)\f$
-       ///@param deriv  \f$\nabla f(x)\f$
-       template<class Func> ConjugateGradient(const Vector<Size>& start, const 
Func& func, const Vector<Size>& deriv)
-       : size(start.size()),
-         
g(size),h(size),minus_h(size),old_g(size),old_h(size),x(start),old_x(size)
-       {
-               init(start, func(start), deriv);
-       }       
-
-       ///Initialize the ConjugateGradient class with sensible values. Used 
internally.
-       ///@param start Starting point, \e x
-       ///@param func  \f$f(x)\f$
-       ///@param deriv  \f$\nabla f(x)\f$
-       void init(const Vector<Size>& start, const Precision& func, const 
Vector<Size>& deriv)
-       {
-
-               using std::numeric_limits;
-               x = start;
-
-               //Start with the conjugate direction aligned with
-               //the gradient
-               g = deriv;
-               h = g;
-               minus_h=-h;
-
-               y = func;
-               old_y = y;
-
-               tolerance = sqrt(numeric_limits<Precision>::epsilon());
-               epsilon = 1e-20;
-               max_iterations = size * 100;
-
-               bracket_initial_lambda = 1;
-
-               linesearch_tolerance =  
sqrt(numeric_limits<Precision>::epsilon());
-               linesearch_epsilon = 1e-20;
-               linesearch_max_iterations=100;
-
-               bracket_epsilon=1e-20;
-
-               iterations=0;
-       }
-
-
-       ///Perform a linesearch from the current point (x) along the current
-       ///conjugate vector (h).  The linesearch does not make use of 
derivatives.
-       ///You probably do not want to use this function. See iterate() instead.
-       ///This function updates:
-       /// - x
-       /// - old_c
-       /// - y
-       /// - old_y
-       /// - iterations
-       /// Note that the conjugate direction and gradient are not updated.
-       /// If bracket_minimum_forward detects a local maximum, then 
essentially a zero
-       /// sized step is taken.
-       /// @param func Functor returning the function value at a given point.
-       template<class Func> void find_next_point(const Func& func)
-       {
-               Internal::LineSearch<Size, Precision, Func> line(x, minus_h, 
func);
-
-               //Always search in the conjugate direction (h)
-               //First bracket a minimum.
-               Matrix<3,2,Precision> bracket = 
Internal::bracket_minimum_forward(y, line, bracket_initial_lambda, 
bracket_epsilon);
-               
-               double a = bracket[0][0];
-               double b = bracket[1][0];
-               double c = bracket[2][0];
-
-               double a_val = bracket[0][1];
-               double b_val = bracket[1][1];
-               double c_val = bracket[2][1];
-
-               old_y = y;
-               old_x = x;
-               iterations++;
-               
-               //Local maximum achieved!
-               if(a==0 && b== 0 && c == 0)
-                       return;
-
-               //We should have a bracket here
-
-               if(c < b)
-               {
-                       //Failed to bracket due to NaN, so c is the best known 
point.
-                       //Simply go there.
-                       x-=h * c;
-                       y=c_val;
-
-               }
-               else
-               {
-                       assert(a < b && b < c);
-                       assert(a_val > b_val && b_val < c_val);
-
-                       //Find the real minimum
-                       Vector<2, Precision>  m = brent_line_search(a, b, c, 
b_val, line, linesearch_max_iterations, linesearch_tolerance, 
linesearch_epsilon);
-
-                       assert(m[0] >= a && m[0] <= c);
-                       assert(m[1] <= b_val);
-
-                       //Update the current position and value
-                       x -= m[0] * h;
-                       y = m[1];
-               }
-       }
-
-       ///Check to see it iteration should stop. You probably do not want to 
use
-       ///this function. See iterate() instead. This function updates nothing.
-       bool finished()
-       {
-               using std::abs;
-               return iterations > max_iterations || 2*abs(y - old_y) <= 
tolerance * (abs(y) + abs(old_y) + epsilon);
-       }
-
-       ///After an iteration, update the gradient and conjugate using the
-       ///Polak-Ribiere equations.
-       ///This function updates:
-       ///- g
-       ///- old_g
-       ///- h
-       ///- old_h
-       ///@param grad The derivatives of the function at \e x
-       void update_vectors_PR(const Vector<Size>& grad)
-       {
-               //Update the position, gradient and conjugate directions
-               old_g = g;
-               old_h = h;
-
-               g = grad;
-               //Precision gamma = (g * g - oldg*g)/(oldg * oldg);
-               Precision gamma = (g * g - old_g*g)/(old_g * old_g);
-               h = g + gamma * old_h;
-               minus_h=-h;
-       }
-
-       ///Use this function to iterate over the optimization. Note that after
-       ///iterate returns false, g, h, old_g and old_h will not have been
-       ///updated.
-       ///This function updates:
-       /// - x
-       /// - old_c
-       /// - y
-       /// - old_y
-       /// - iterations
-       /// - g*
-       /// - old_g*
-       /// - h*
-       /// - old_h*
-       /// *'d variables not updated on the last iteration.
-       ///@param func Functor returning the function value at a given point.
-       ///@param deriv Functor to compute derivatives at the specified point.
-       ///@return Whether to continue.
-       template<class Func, class Deriv> bool iterate(const Func& func, const 
Deriv& deriv)
-       {
-               find_next_point(func);
-
-               if(!finished())
-               {
-                       update_vectors_PR(deriv(x));
-                       return 1;
-               }
-               else
-                       return 0;
-       }
-};
-
-}

Index: optimization/downhill_simplex.h
===================================================================
RCS file: optimization/downhill_simplex.h
diff -N optimization/downhill_simplex.h
--- optimization/downhill_simplex.h     22 Apr 2011 15:08:56 -0000      1.9
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,298 +0,0 @@
-#ifndef TOON_DOWNHILL_SIMPLEX_H
-#define TOON_DOWNHILL_SIMPLEX_H
-#include <TooN/TooN.h>
-#include <TooN/helpers.h>
-#include <algorithm>
-#include <cstdlib>
-
-namespace TooN
-{
-
-/** This is an implementation of the Downhill Simplex (Nelder & Mead, 1965)
-    algorithm. This particular instance will minimize a given function.
-       
-       The function maintains \f$N+1\f$ points for a $N$ dimensional function, 
\f$f\f$
-       
-       At each iteration, the following algorithm is performed:
-       - Find the worst (largest) point, \f$x_w\f$.
-       - Find the centroid of the remaining points, \f$x_0\f$.
-       - Let \f$v = x_0 - x_w\f$
-       - Compute a reflected point, \f$ x_r = x_0 + \alpha v\f$
-       - If \f$f(x_r)\f$ is better than the best point
-         - Expand the simplex by extending the reflection to \f$x_e = x_0 + 
\rho \alpha v \f$
-         - Replace \f$x_w\f$ with the best point of \f$x_e\f$,  and \f$x_r\f$.
-       - Else, if  \f$f(x_r)\f$ is between the best and second-worst point
-         - Replace \f$x_w\f$ with \f$x_r\f$.
-       - Else, if  \f$f(x_r)\f$ is better than \f$x_w\f$
-         - Contract the simplex by computing \f$x_c = x_0 + \gamma v\f$
-         - If \f$f(x_c) < f(x_r)\f$
-           - Replace \f$x_w\f$ with \f$x_c\f$.
-       - If \f$x_w\f$ has not been replaced, then shrink the simplex by a 
factor of \f$\sigma\f$ around the best point.
-
-       This implementation uses:
-       - \f$\alpha = 1\f$
-       - \f$\rho = 2\f$
-       - \f$\gamma = 1/2\f$
-       - \f$\sigma = 1/2\f$
-       
-       Example usage:
-       @code
-#include <TooN/optimization/downhill_simplex.h>
-using namespace std;
-using namespace TooN;
-
-double sq(double x)
-{
-       return x*x;
-}
-
-double Rosenbrock(const Vector<2>& v)
-{
-               return sq(1 - v[0]) + 100 * sq(v[1] - sq(v[0]));
-}
-
-int main()
-{
-               Vector<2> starting_point = makeVector( -1, 1);
-
-               DownhillSimplex<2> dh_fixed(Rosenbrock, starting_point, 1);
-
-               while(dh_fixed.iterate(Rosenbrock))
-               {
-                       cout << dh.get_values()[dh.get_best()] << endl;
-               }
-               
-               cout << dh_fixed.get_simplex()[dh_fixed.get_best()] << endl;
-}
-
-       @endcode
-
-
-    @ingroup gOptimize
-       @param   N The dimension of the function to optimize. As usual, the 
default value of <i>N</i> (-1) indicates
-                that the class is sized at run-time.
-
-
-**/
-template<int N=-1, typename Precision=double> class DownhillSimplex
-{
-       static const int Vertices = (N==-1?-1:N+1);
-       typedef Matrix<Vertices, N, Precision> Simplex;
-       typedef Vector<Vertices, Precision> Values;
-
-       public:
-               /// Initialize the DownhillSimplex class. The simplex is 
automatically
-               /// generated. One point is at <i>c</i>, the remaining points 
are made by moving
-               /// <i>c</i> by <i>spread</i> along each axis aligned unit 
vector.
-               ///
-               ///@param func       Functor to minimize.
-               ///@param c          Origin of the initial simplex. The 
dimension of this vector
-               ///                  is used to determine the dimension of the 
run-time sized version.
-               ///@param spread     Size of the initial simplex.
-               template<class Function> DownhillSimplex(const Function& func, 
const Vector<N>& c, Precision spread=1)
-               :simplex(c.size()+1, c.size()),values(c.size()+1)
-               {
-                       alpha = 1.0;
-                       rho = 2.0;
-                       gamma = 0.5;
-                       sigma = 0.5;
-
-                       using std::sqrt;
-                       epsilon = sqrt(numeric_limits<Precision>::epsilon());
-                       zero_epsilon = 1e-20;
-
-                       restart(func, c, spread);
-               }
-               
-               /// This function sets up the simplex around, with one point at 
\e c and the remaining
-               /// points are made by moving by \e spread along each axis 
aligned unit vector.
-               ///
-               ///@param func       Functor to minimize.
-               ///@param c          \e c corner point of the simplex
-               ///@param spread     \e spread simplex size
-               template<class Function> void restart(const Function& func, 
const Vector<N>& c, Precision spread)
-               {
-                       for(int i=0; i < simplex.num_rows(); i++)
-                               simplex[i] = c;
-
-                       for(int i=0; i < simplex.num_cols(); i++)
-                               simplex[i][i] += spread;
-
-                       for(int i=0; i < values.size(); i++)
-                               values[i] = func(simplex[i]);
-               }
-               
-               ///Check to see it iteration should stop. You probably do not 
want to use
-               ///this function. See iterate() instead. This function updates 
nothing.
-               ///The termination criterion is that the simplex span 
(distancve between
-               ///the best and worst vertices) is small compared to the scale 
or 
-               ///small overall.
-               bool finished()
-               {
-                       Precision span =  norm(simplex[get_best()] - 
simplex[get_worst()]);
-                       Precision scale = norm(simplex[get_best()]);
-
-                       if(span/scale < epsilon || span < zero_epsilon)
-                               return 1;
-                       else 
-                               return 0;
-               }
-               
-               /// This function resets the simplex around the best current 
point.
-               ///
-               ///@param func       Functor to minimize.
-               ///@param spread     simplex size
-               template<class Function> void restart(const Function& func, 
Precision spread)
-               {
-                       restart(func, simplex[get_best()], spread);
-               }
-
-               ///Return the simplex
-               const Simplex& get_simplex() const
-               {
-                       return simplex;
-               }
-               
-               ///Return the score at the vertices
-               const Values& get_values() const
-               {
-                       return values;
-               }
-               
-               ///Get the index of the best vertex
-               int get_best() const 
-               {
-                       return std::min_element(&values[0], &values[0] + 
values.size()) - &values[0];
-               }
-               
-               ///Get the index of the worst vertex
-               int get_worst() const 
-               {
-                       return std::max_element(&values[0], &values[0] + 
values.size()) - &values[0];
-               }
-
-               ///Perform one iteration of the downhill Simplex algorithm
-               ///@param func Functor to minimize
-               template<class Function> void find_next_point(const Function& 
func)
-               {
-                       //Find various things:
-                       // - The worst point
-                       // - The second worst point
-                       // - The best point
-                       // - The centroid of all the points but the worst
-                       int worst = get_worst();
-                       Precision second_worst_val=-HUGE_VAL, bestval = 
HUGE_VAL, worst_val = values[worst];
-                       int best=0;
-                       Vector<N> x0 = Zeros(simplex.num_cols());
-
-
-                       for(int i=0; i < simplex.num_rows(); i++)
-                       {
-                               if(values[i] < bestval)
-                               {
-                                       bestval = values[i];
-                                       best = i;
-                               }
-
-                               if(i != worst)
-                               {
-                                       if(values[i] > second_worst_val)
-                                               second_worst_val = values[i];
-
-                                       //Compute the centroid of the non-worst 
points;
-                                       x0 += simplex[i];
-                               }
-                       }
-                       x0 *= 1.0 / simplex.num_cols();
-
-
-                       //Reflect the worst point about the centroid.
-                       Vector<N> xr = (1 + alpha) * x0 - alpha * 
simplex[worst];
-                       Precision fr = func(xr);
-
-                       if(fr < bestval)
-                       {
-                               //If the new point is better than the smallest, 
then try expanding the simplex.
-                               Vector<N> xe = rho * xr + (1-rho) * x0;
-                               Precision fe = func(xe);
-
-                               //Keep whichever is best
-                               if(fe < fr)
-                               {
-                                       simplex[worst] = xe;
-                                       values[worst] = fe;
-                               }
-                               else
-                               {
-                                       simplex[worst] = xr;
-                                       values[worst] = fr;
-                               }
-
-                               return;
-                       }
-
-                       //Otherwise, if the new point lies between the other 
points
-                       //then keep it and move on to the next iteration.
-                       if(fr < second_worst_val)
-                       {
-                               simplex[worst] = xr;
-                               values[worst] = fr;
-                               return;
-                       }
-
-
-                       //Otherwise, if the new point is a bit better than the 
worst point,
-                       //(ie, it's got just a little bit better) then contract 
the simplex
-                       //a bit.
-                       if(fr < worst_val)
-                       {
-                               Vector<N> xc = (1 + gamma) * x0 - gamma * 
simplex[worst];
-                               Precision fc = func(xc);
-
-                               //If this helped, use it
-                               if(fc <= fr)
-                               {
-                                       simplex[worst] = xc;
-                                       values[worst] = fc;
-                                       return;
-                               }
-                       }
-                       
-                       //Otherwise, fr is worse than the worst point, or the 
fc was worse
-                       //than fr. So shrink the whole simplex around the best 
point.
-                       for(int i=0; i < simplex.num_rows(); i++)
-                               if(i != best)
-                               {
-                                       simplex[i] = simplex[best] + sigma * 
(simplex[i] - simplex[best]);
-                                       values[i] = func(simplex[i]);
-                               }
-               }
-
-               ///Perform one iteration of the downhill Simplex algorithm, and 
return the result
-               ///of not DownhillSimplex::finished.
-               ///@param func Functor to minimize
-               template<class Function> bool iterate(const Function& func)
-               {
-                       find_next_point(func);
-                       return !finished();
-               }
-
-               Precision alpha; ///< Reflected size. Defaults to 1.
-               Precision rho;   ///< Expansion ratio. Defaults to 2.
-               Precision gamma; ///< Contraction ratio. Defaults to .5.
-               Precision sigma; ///< Shrink ratio. Defaults to .5.
-               Precision epsilon;  ///< Tolerance used to determine if the 
optimization is complete. Defaults to square root of machine precision.
-               Precision zero_epsilon; ///< Additive term in tolerance to 
prevent excessive iterations if \f$x_\mathrm{optimal} = 0\f$. Known as \c ZEPS 
in numerical recipies. Defaults to 1e-20
-
-       private:
-
-               //Each row is a simplex vertex
-               Simplex simplex;
-
-               //Function values for each vertex
-               Values values;
-
-
-};
-}
-#endif

Index: optimization/golden_section.h
===================================================================
RCS file: optimization/golden_section.h
diff -N optimization/golden_section.h
--- optimization/golden_section.h       9 Jun 2009 13:33:23 -0000       1.5
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,111 +0,0 @@
-#ifndef TOON_GOLDEN_SECTION_H
-#define TOON_GOLDEN_SECTION_H
-#include <TooN/TooN.h>
-#include <limits>
-#include <cmath>
-#include <cstdlib>
-#include <iomanip>
-
-namespace TooN
-{
-       using std::numeric_limits;
-
-       /// golden_section_search performs a golden section search line 
minimization
-       /// on the functor provided. The inputs a, b, c must bracket the 
minimum, and
-       /// must be in order, so  that \f$ a < b < c \f$ and \f$ f(a) > f(b) < 
f(c) \f$.
-       /// @param a The most negative point along the line.
-       /// @param b The central point.
-       /// @param fb The value of the function at the central point (\f$b\f$).
-       /// @param c The most positive point along the line.
-       /// @param func The functor to minimize
-       /// @param maxiterations  Maximum number of iterations
-       /// @param tol Tolerance at which the search should be stopped.
-       /// @return The minima position is returned as the first element of the 
vector,
-       ///         and the minimal value as the second element.
-       /// @ingroup gOptimize
-       template<class Functor, class Precision> Vector<2, Precision> 
golden_section_search(Precision a, Precision b, Precision c, Precision fb, 
const Functor& func, int maxiterations, Precision tol = 
sqrt(numeric_limits<Precision>::epsilon()))
-       {
-               using std::abs;
-               //The golden ratio:
-               const Precision g = (3.0 - sqrt(5))/2;
-
-               Precision x1, x2, fx1, fx2;
-
-               //Perform an initial iteration, to get a 4 point
-               //bracketing. This is rather more convenient than
-               //a 3 point bracketing.
-               if(abs(b-a) > abs(c-b))
-               {
-                       x1 = b - g*(b-a);
-                       x2 = b;
-
-                       fx1 = func(x1);
-                       fx2 = fb;
-               }
-               else
-               {
-                       x2 = b + g * (c-b);
-                       x1 = b;
-
-                       fx1 = fb;
-                       fx2 = func(x2);
-               }
-
-               //We now have an ordered list of points a x1 x2 c
-
-               //Termination condition from NR in C
-               int itnum = 1; //We've already done one iteration.
-               while(abs(c-a) > tol * (abs(x2)+abs(x1)) && itnum < 
maxiterations)
-               {
-                       if(fx1 > fx2)
-                       {
-                               // Bracketing does:
-                               // a     x1     x2     c
-                               //        a     x1  x2 c
-                               a = x1;
-                               x1 = x2;
-                               x2 = x1 + g * (c-x1);
-                               
-                               fx1 = fx2;
-                               fx2 = func(x2);
-                       }
-                       else
-                       {
-                               // Bracketing does:
-                               // a     x1     x2     c
-                               // a  x1 x2     c
-                               c = x2;
-                               x2 = x1;
-                               x1= x2 - g * (x2 - a);
-                               
-                               fx2 = fx1;
-                               fx1 = func(x1);
-                       }
-               }
-
-               
-               if(fx1 < fx2)
-                       return makeVector<Precision>(x1, fx1);
-               else
-                       return makeVector<Precision>(x2, fx2);
-       }
-
-       /// golden_section_search performs a golden section search line 
minimization
-       /// on the functor provided. The inputs a, b, c must bracket the 
minimum, and
-       /// must be in order, so  that \f$ a < b < c \f$ and \f$ f(a) > f(b) < 
f(c) \f$.
-       /// @param a The most negative point along the line.
-       /// @param b The central point.
-       /// @param c The most positive point along the line.
-       /// @param func The functor to minimize
-       /// @param maxiterations  Maximum number of iterations
-       /// @param tol Tolerance at which the search should be stopped.
-       /// @return The minima position is returned as the first element of the 
vector,
-       ///         and the minimal value as the second element.
-       /// @ingroup gOptimize
-       template<class Functor, class Precision> Vector<2, Precision> 
golden_section_search(Precision a, Precision b, Precision c, const Functor& 
func, int maxiterations, Precision tol = 
sqrt(numeric_limits<Precision>::epsilon()))
-       {
-               return golden_section_search(a, b, c, func(b), func, 
maxiterations, tol);
-       }
-
-}
-#endif

Index: regressions/chol_lapack.cc
===================================================================
RCS file: regressions/chol_lapack.cc
diff -N regressions/chol_lapack.cc
--- regressions/chol_lapack.cc  19 Oct 2009 14:08:53 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,53 +0,0 @@
-#include <TooN/Lapack_Cholesky.h>
-
-#include <iostream>
-#include <iomanip>
-
-using namespace std;
-using namespace TooN;
-
-int main(int, char ** ){
-
-       cout << setprecision(10);
-    
-    Matrix<3> t = Data(
-         1,   0.5, 0.5,
-         0.5,   2, 0.7,
-         0.5, 0.7,   3);
-    
-    Lapack_Cholesky<3> chol(t);
-
-    cout << "Check for determinant\n";
-    cout << chol.determinant() << endl << endl;
-
-    cout << "Static size checks:\n";
-    cout << "Check decomposition, both matrices should be the same.\n";
-    cout << t << endl << chol.get_L()*(chol.get_L().T()) << endl ;
-
-    cout << "Check inverse, third matrix should be close to identity.\n";
-    cout << t << "\n" <<  chol.get_inverse() << "\n" 
-        << t * chol.get_inverse() << endl;
-
-    Matrix<> t2 = t;
-    
-    Lapack_Cholesky<Dynamic,float> chol2(t2);
-    
-    cout << "Dynamic size, single precision checks:\n";
-    cout << "Check decomposition, both matrices should be the same.\n";
-    cout << t << endl << chol2.get_L()*(chol2.get_L().T()) << endl ;
-
-    cout << "Check inverse, third matrix should be close to identity.\n";
-    cout << t2 << "\n" <<  chol2.get_inverse() << "\n" 
-        << t2 * chol2.get_inverse() << endl;
-
-    Vector<3> bla = makeVector(1,2,3);
-
-    cout << "Check backsub(), the following two vectors should be the same.\n";
-    cout << chol.backsub(bla) << endl;
-    cout << chol.get_inverse() * bla << endl << endl;
-
-    cout << "Check mahalanobis(), result should be zero.\n";
-    cout << chol.mahalanobis(bla) - bla * chol.backsub(bla) << endl;
-    
-    return 0;
-}

Index: regressions/chol_lapack.txt
===================================================================
RCS file: regressions/chol_lapack.txt
diff -N regressions/chol_lapack.txt
--- regressions/chol_lapack.txt 19 Oct 2009 14:08:53 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,58 +0,0 @@
-#< t 1e-16
-
-Check for determinant
-4.61
-
-Static size checks:
-Check decomposition, both matrices should be the same.
-
-1 0.5 0.5
-0.5 2 0.7
-0.5 0.7 3
-
-1 0.5 0.5
-0.5 2 0.7
-0.5 0.7 3
-
-Check inverse, third matrix should be close to identity.
-1 0.5 0.5
-0.5 2 0.7
-0.5 0.7 3
-
- 1.1952277657266810e+00 -2.4945770065075915e-01 -1.4099783080260306e-01
--2.4945770065075915e-01  5.9652928416485884e-01 -9.7613882863340537e-02
--1.4099783080260306e-01 -9.7613882863340537e-02  3.7960954446854661e-01
-
-1 0 0
-0 1 0
-0 0 1
-
-Dynamic size, single precision checks:
-Check decomposition, both matrices should be the same.
-1 0.5 0.5
-0.5 2 0.7
-0.5 0.7 3
-
-1 0.5 0.5
-0.5 2 0.7
-0.5 0.7 3
-
-Check inverse, third matrix should be close to identity.
-1 0.5 0.5
-0.5 2 0.7
-0.5 0.7 3
-
- 1.1952277657266810e+00 -2.4945770065075915e-01 -1.4099783080260306e-01
--2.4945770065075915e-01  5.9652928416485884e-01 -9.7613882863340537e-02
--1.4099783080260306e-01 -9.7613882863340537e-02  3.7960954446854661e-01
-
-1 0 0
-0 1 0
-0 0 1
-
-Check backsub(), the following two vectors should be the same.
-2.7331887201735361e-01 6.5075921908893697e-01 8.0260303687635570e-01
-2.7331887201735361e-01 6.5075921908893697e-01 8.0260303687635570e-01
-
-Check mahalanobis(), result should be zero.
-0

Index: regressions/chol_toon.cc
===================================================================
RCS file: regressions/chol_toon.cc
diff -N regressions/chol_toon.cc
--- regressions/chol_toon.cc    19 Oct 2009 14:08:53 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,57 +0,0 @@
-#include <TooN/Cholesky.h>
-
-#include <iostream>
-#include <iomanip>
-
-using namespace std;
-using namespace TooN;
-
-int main(int, char ** ){
-
-       cout << setprecision(10);
-    
-    Matrix<3> t = Data(
-         1,   0.5, 0.5,
-         0.5,   2, 0.7,
-         0.5, 0.7,   3);
-    
-    Cholesky<3> chol(t);
-
-    cout << "Check for determinant\n";
-    cout << chol.determinant() << endl << endl;
-
-    cout << "Static size checks:\n";
-    cout << "Check decomposition, all three matrices should be the same.\n";
-    cout << t << endl << chol.get_L()*(chol.get_L().T()) << endl 
-        << chol.get_unscaled_L()*chol.get_D()*(chol.get_unscaled_L().T()) 
-        << endl;
-
-    cout << "Check inverse, third matrix should be close to identity.\n";
-    cout << t << "\n" <<  chol.get_inverse() << "\n" 
-        << t * chol.get_inverse() << endl;
-
-    Matrix<> t2 = t;
-    
-    Cholesky<Dynamic,float> chol2(t2);
-    
-    cout << "Dynamic size, single precision checks:\n";
-    cout << "Check decomposition, all three matrices should be the same.\n";
-    cout << t << endl << chol2.get_L()*(chol2.get_L().T()) << endl 
-        << chol2.get_unscaled_L()*chol2.get_D()*(chol2.get_unscaled_L().T()) 
-        << endl;
-
-    cout << "Check inverse, third matrix should be close to identity.\n";
-    cout << t2 << "\n" <<  chol2.get_inverse() << "\n" 
-        << t2 * chol2.get_inverse() << endl;
-
-    Vector<3> bla = makeVector(1,2,3);
-
-    cout << "Check backsub(), the following two vectors should be the same.\n";
-    cout << chol.backsub(bla) << endl;
-    cout << chol.get_inverse() * bla << endl << endl;
-
-    cout << "Check mahalanobis(), result should be zero.\n";
-    cout << chol.mahalanobis(bla) - bla * chol.backsub(bla) << endl;
-    
-    return 0;
-}

Index: regressions/chol_toon.txt
===================================================================
RCS file: regressions/chol_toon.txt
diff -N regressions/chol_toon.txt
--- regressions/chol_toon.txt   19 Oct 2009 14:08:53 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,65 +0,0 @@
-#< t 1e-16
-
-Check for determinant
-4.61
-
-Static size checks:
-Check decomposition, all three matrices should be the same.
-1 0.5 0.5
-0.5 2 0.7
-0.5 0.7 3
-
-1 0.5 0.5
-0.5 2 0.7
-0.5 0.7 3
-
-1 0.5 0.5
-0.5 2 0.7
-0.5 0.7 3
-
-Check inverse, third matrix should be close to identity.
-1 0.5 0.5
-0.5 2 0.7
-0.5 0.7 3
-
- 1.1952277657266810e+00 -2.4945770065075915e-01 -1.4099783080260306e-01
--2.4945770065075915e-01  5.9652928416485884e-01 -9.7613882863340537e-02
--1.4099783080260306e-01 -9.7613882863340537e-02  3.7960954446854661e-01
-
-1 0 0
-0 1 0
-0 0 1
-
-Dynamic size, single precision checks:
-Check decomposition, all three matrices should be the same.
-1 0.5 0.5
-0.5 2 0.7
-0.5 0.7 3
-
-1 0.5 0.5
-0.5 2 0.7
-0.5 0.7 3
-
-1 0.5 0.5
-0.5 2 0.7
-0.5 0.7 3
-
-Check inverse, third matrix should be close to identity.
-1 0.5 0.5
-0.5 2 0.7
-0.5 0.7 3
-
- 1.1952277657266810e+00 -2.4945770065075915e-01 -1.4099783080260306e-01
--2.4945770065075915e-01  5.9652928416485884e-01 -9.7613882863340537e-02
--1.4099783080260306e-01 -9.7613882863340537e-02  3.7960954446854661e-01
-
-1 0 0
-0 1 0
-0 0 1
-
-Check backsub(), the following two vectors should be the same.
-2.7331887201735361e-01 6.5075921908893697e-01 8.0260303687635570e-01
-2.7331887201735361e-01 6.5075921908893697e-01 8.0260303687635570e-01
-
-Check mahalanobis(), result should be zero.
-0

Index: regressions/complex.cc
===================================================================
RCS file: regressions/complex.cc
diff -N regressions/complex.cc
--- regressions/complex.cc      10 Feb 2010 15:24:18 -0000      1.2
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,54 +0,0 @@
-#include <complex>
-#include "TooN/regressions/regression.h"
-#include <TooN/internal/planar_complex.hh>
-
-int main()
-{
-       complex<double> i(0,1);
-
-       Vector<3, complex<double> > v1 = makeVector<complex<double> >(1.+i, 
1.+2.*i, 3);
-       Vector<3, complex<double> > v2 = makeVector<complex<double> >(1.-i, 
1.-2.*i, 3);
-
-       cout << v2 * v1 << endl;
-       cout << v2.as_diagonal() * v1 << endl;
-
-
-       double re2[] = {1, 1, 3};       
-       double im2[] = {-1, -2, 0};     
-
-       Vector<3, complex<double>, ReferencePlanarComplex> v2ish(make_pair(re2, 
im2));
-       cout << v1 * v2ish << endl;
-
-       double real[] = {1,2,3,4};
-       double imag[] = {5,6,7,8};
-
-
-       Vector<4, complex<double>, ReferencePlanarComplex> vec(make_pair(real, 
imag));
-       
-       cout << vec << endl;
-       cout << vec.slice<1,3>() << endl;
-       cout << vec.slice(2,2) << endl;
-
-       real[3] = 28;
-       imag[3] = 10;
-               
-       cout << vec << endl;
-       
-       
-       // Matrix tests
-       Matrix<4,4,complex<double> > A;
-       A[0] = makeVector<complex<double> >(1.+i, 1.+6.*i, 3, 1.-i);
-       A[1] = makeVector<complex<double> >(3.+6.i, 9.+2.*i, 4, 6.-1.*i);
-       A[2] = makeVector<complex<double> >(1.+8.i, 2.*i, 2.-1.*i, 4.-1.*i);
-       A[3] = makeVector<complex<double> >(2.+1.*i, 1.+3.*i, 1, 12.-5.*i);
-       
-       cout << A;
-       cout << A * vec<<endl;
-       cout << A.T() ;
-       cout << A * A ;
-
-       Vector<Dynamic, complex<double> > v3 = makeVector(1, 2, 3);
-       cout << v3 << endl;
-       cout << v3.size() << endl;
-       
-}

Index: regressions/complex.txt
===================================================================
RCS file: regressions/complex.txt
diff -N regressions/complex.txt
--- regressions/complex.txt     10 Feb 2010 15:24:18 -0000      1.2
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,29 +0,0 @@
-(16,0)
-(2,0) (5,0) (9,0) 
-
-(16,0)
-
-(1,5) (2,6) (3,7) (4,8)
-(2,6) (3,7) (4,8)
-(3,7) (4,8)
-(1,5) (2,6) (3,7) (28,10)
- 
-(1,1) (1,6) (3,0) (1,-1)
-(3,6) (9,2) (4,0) (6,-1)
-(1,8) (0,2) (2,-1) (4,-1)
-(2,1) (1,3) (1,0) (12,-5)
-
-(9,27) (169,139) (84,40) (370,10)
- 
-(1,1) (3,6) (1,8) (2,1)
-(1,6) (9,2) (0,2) (1,3)
-(3,-0) (4,-0) (2,-1) (1,-0)
-(1,-1) (6,-1) (4,-1) (12,-5)
-
-(-27,49) (-4,71) (14,23) (33,15)
-(29,105) (53,85) (59,21) (148,-40)
-(0,32) (-42,47) (10,27) (61,-19)
-(16,28) (26,75) (24,9) (135,-105)
-
-(1,0) (2,0) (3,0)
-3

Index: regressions/determinant.cc
===================================================================
RCS file: regressions/determinant.cc
diff -N regressions/determinant.cc
--- regressions/determinant.cc  15 Oct 2009 14:51:50 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,353 +0,0 @@
-#include "regressions/regression.h"
-int main(){
-       {
-               Matrix<2> m = Data(1.36954561915420e-01, 5.07440445575612e-01, 
4.40579637085006e-01, 2.69269087931921e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<2> m = Data(6.33333470514712e-01, 4.93941807913729e-01, 
6.92126254554125e-01, 7.34433297395312e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<2> m = Data(1.76413099536679e-01, 2.60216176256871e-01, 
3.08850368383576e-01, 1.52272949704579e-02);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<2> m = Data(3.88523551845252e-01, 1.25338828369562e-01, 
8.13964004172765e-01, 2.19819623220283e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<2> m = Data(5.55188910865601e-01, 6.57965205670083e-01, 
4.15793049697370e-01, 6.75896220658060e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<2> m = Data(4.08447197123214e-01, 2.63040277790550e-01, 
7.56602015669260e-02, 5.83795216528427e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<2> m = Data(6.60452866329957e-01, 4.17386245416842e-01, 
4.37274269538722e-01, 7.99343646936289e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<2> m = Data(2.44005935455320e-01, 4.91469211584358e-02, 
2.70848173957733e-02, 3.64328544937310e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<2> m = Data(2.78487643313992e-01, 2.02171532521378e-01, 
6.16894848985417e-01, 8.75779770124611e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<2> m = Data(1.55690488795012e-01, 8.99338728730216e-01, 
2.60344574436150e-01, 1.69080554093970e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<3> m = Data(6.90021150920451e-01, 8.31931522264502e-01, 
7.97758982120577e-01, 6.77038637453940e-02, 1.11675504817599e-01, 
5.54139426976072e-01, 2.90556101356847e-01, 1.06217460868265e-01, 
9.67272693613824e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<3> m = Data(3.95578211514861e-01, 5.38439072491004e-01, 
2.48583336989898e-01, 2.35136576943800e-01, 5.12747960597765e-02, 
5.15931258219743e-01, 2.99053128597866e-01, 7.55952692058674e-01, 
3.21254484137218e-02);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<3> m = Data(5.25179194428188e-01, 8.30298421516969e-01, 
4.79026869389020e-01, 5.25006522404920e-01, 3.76188158583889e-01, 
6.12617838270040e-01, 8.48734029924822e-01, 4.99178260400046e-01, 
1.14161624199738e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<3> m = Data(1.25896928575379e-01, 2.76654657280153e-01, 
4.97744484508350e-01, 7.21766354640397e-01, 2.18315038612563e-02, 
3.24133435582330e-01, 6.99898354510819e-01, 8.77350909043173e-01, 
4.61347806920723e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<3> m = Data(6.19315008875198e-01, 3.16340238427387e-01, 
8.68123433418303e-01, 4.21088622539474e-01, 2.51067192196979e-01, 
2.97467897931370e-01, 5.74224653649563e-01, 8.35310663540258e-01, 
6.86700114194084e-02);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<3> m = Data(6.93895766634135e-01, 8.11449917296234e-01, 
5.63520809740165e-01, 9.06347644339764e-01, 4.15416343251668e-01, 
6.56277265358439e-01, 9.69685276853739e-01, 2.10970289210663e-02, 
5.77207282521436e-02);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<3> m = Data(2.37857910250608e-01, 5.57784312164023e-01, 
4.92705818179744e-01, 2.94128593480721e-02, 6.19077492309405e-01, 
6.79558062981238e-01, 8.21177413351666e-01, 5.82183747324961e-01, 
9.38330581806202e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<3> m = Data(2.20550433261086e-01, 2.98754845934495e-02, 
2.74747600337341e-01, 5.24307758078751e-01, 6.19855432287777e-01, 
2.38619269842085e-01, 7.14483482497759e-01, 3.78399144258969e-01, 
1.93442693072056e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<3> m = Data(5.17969051657360e-01, 1.59064269371209e-01, 
4.89217203037848e-01, 7.20681040442171e-01, 3.38686026553331e-01, 
1.70159499323172e-01, 1.02432934599155e-01, 7.52580685685526e-01, 
8.86384897246990e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<3> m = Data(5.35364107383601e-01, 7.67825923766655e-01, 
5.49823145365650e-01, 6.40856778882242e-01, 9.63920605061494e-01, 
3.89540555593080e-01, 8.28487261593980e-01, 4.09307725195978e-01, 
5.38904901216016e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<4> m = Data(6.31998788314413e-01, 9.73760212367266e-01, 
3.08867522009234e-01, 5.04044604832999e-01, 8.00069206025706e-01, 
9.99382355663476e-01, 7.58924495091854e-01, 6.99745358887332e-01, 
7.58030507477543e-01, 7.31358173985778e-01, 8.83207868809474e-01, 
6.55592443384357e-01, 4.80335196335811e-01, 6.41407083656371e-01, 
4.07598318503830e-01, 8.90912566122183e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<4> m = Data(7.74334991123453e-01, 8.92792753083005e-01, 
7.18463542228311e-01, 3.72428408758461e-01, 7.82808146980001e-01, 
3.72813059194352e-01, 6.38726034933220e-01, 8.78171733588292e-01, 
7.20040796180532e-01, 9.61127898698709e-01, 1.43114091710088e-01, 
7.67366630435602e-01, 3.63520123203509e-01, 8.74396656248534e-01, 
2.70689848252612e-01, 2.17037861040468e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<4> m = Data(2.93527129614395e-01, 1.45890026595788e-01, 
3.82956306092162e-01, 5.93629750611561e-01, 3.54555898622876e-01, 
3.63414638888524e-01, 7.40603178940656e-01, 7.14616161828011e-01, 
8.53557687624533e-03, 6.48490354501316e-01, 9.20349626424737e-01, 
1.59752483361758e-01, 6.84193046695865e-01, 7.81961572209509e-01, 
5.50969845786340e-01, 6.79823911477558e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<4> m = Data(6.93107439415493e-01, 7.71250729887264e-01, 
2.89436180433845e-01, 9.68734458337373e-02, 9.69162062760386e-02, 
6.52255600415049e-01, 1.52635260944129e-01, 9.47806895809457e-01, 
1.98217953448501e-01, 1.72943245096034e-01, 7.81728977919013e-01, 
7.37759950962994e-01, 7.63842183179273e-01, 5.48921809610796e-01, 
6.02454337326163e-01, 8.48286395785509e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<4> m = Data(2.09456708099802e-01, 7.95333085732939e-01, 
6.76434153965128e-01, 6.62641402399578e-01, 5.21754965708820e-01, 
2.53660930345825e-01, 4.16565870616613e-01, 4.96068902420179e-01, 
5.54788311265565e-02, 8.86961897906333e-01, 8.39513431532884e-01, 
1.99732879363206e-01, 6.67601987196954e-01, 6.34435223024121e-01, 
1.61995072264232e-01, 3.48387002135752e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<4> m = Data(3.16597068508537e-01, 3.77516373491959e-01, 
9.97607343596163e-01, 7.88863195306705e-02, 3.03283706925791e-01, 
6.21524422403540e-01, 5.14514621807263e-01, 7.64309429202428e-01, 
6.27443613729029e-01, 3.22814260560820e-01, 3.71185552522174e-01, 
1.06536617390620e-01, 5.82213151683078e-01, 5.40132953759879e-01, 
3.83308845215937e-01, 6.03948057966203e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<4> m = Data(2.56803014815598e-01, 6.15241124350821e-01, 
1.51456466795590e-03, 7.09518449556452e-01, 4.25632653613925e-01, 
1.25677950424214e-01, 9.30803791745417e-01, 4.17379412668159e-01, 
5.02550044921844e-01, 3.46238226285804e-01, 2.41270917187225e-01, 
9.78130977172992e-01, 6.76711090534688e-01, 7.82090883034153e-01, 
8.66574202144397e-01, 9.98451079380616e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<4> m = Data(3.12634459621086e-04, 9.56412304025577e-01, 
4.93352863347731e-01, 1.63408245010880e-01, 6.94062984488828e-01, 
8.81994441860080e-01, 4.17494501530825e-01, 9.23991653192706e-01, 
8.65148239470971e-01, 4.64503297387623e-02, 8.73043354903065e-01, 
4.25939122258307e-01, 5.14171189406589e-01, 7.97394747093327e-02, 
6.87467069832980e-01, 5.40641514317958e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<4> m = Data(3.39658473447714e-01, 6.26092761085018e-01, 
1.53209748518362e-01, 3.20747393550340e-03, 7.96119553037662e-01, 
8.32635654321941e-01, 7.80892057977699e-01, 5.52390129688029e-01, 
5.45432146378685e-01, 3.25522435927600e-01, 6.28919956105013e-01, 
9.55227528682191e-01, 3.23929438331184e-01, 3.37967232594177e-01, 
5.53120665456127e-01, 9.47443637273142e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<4> m = Data(2.80659370718153e-01, 8.77845531530688e-01, 
3.57113263015425e-01, 7.40476151215130e-02, 1.87560299861532e-01, 
7.04728135724626e-01, 4.48745908569793e-01, 2.12063004698260e-01, 
9.01283472635972e-01, 4.15800487949385e-01, 1.77784890381720e-01, 
2.87762350351412e-02, 9.17484388422937e-01, 6.73842810867808e-01, 
6.98413771440294e-01, 3.34442707662181e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<5> m = Data(6.61278472445204e-01, 7.44176305882686e-01, 
1.97425772464288e-01, 6.08350291005180e-01, 9.01177085945009e-01, 
9.65819092554194e-01, 9.72426419016103e-01, 9.27333163467757e-01, 
3.64230852432365e-01, 5.81861406938673e-01, 5.55242650690258e-01, 
2.31920595441028e-01, 7.63258217897842e-01, 7.33110012173132e-01, 
2.93200270591155e-01, 4.41983668489113e-01, 6.35568658105070e-01, 
6.96734355459148e-01, 6.80851026924895e-01, 6.19337548653006e-01, 
5.22984960899778e-01, 6.53283440442012e-01, 8.29817563879325e-01, 
6.23625493378364e-01, 1.99693883253539e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<5> m = Data(5.93257713948681e-01, 8.87975641932238e-01, 
6.33572338420259e-01, 4.12408571166541e-01, 2.39942173700552e-01, 
3.35428728089550e-01, 4.03485324638132e-01, 6.85381425534439e-01, 
7.68195738721624e-01, 4.13658310211090e-01, 2.53571918734394e-02, 
8.86715229354483e-01, 8.44886800746036e-01, 6.77463265097230e-01, 
1.10368477778113e-01, 6.54107914762155e-01, 7.33834001525343e-01, 
3.06028383220892e-01, 1.43645054046214e-01, 2.37172337913824e-01, 
2.60613978586240e-01, 7.24127905681678e-01, 3.97953891569877e-01, 
8.91807424384919e-02, 5.23209443301202e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<5> m = Data(2.39462796892182e-01, 9.37872936011089e-01, 
2.22061393923331e-01, 6.52145567113405e-01, 4.92759820969214e-01, 
8.52748960485213e-01, 3.41644626810745e-01, 4.29336083728000e-01, 
4.76450680465151e-01, 1.15056290859390e-01, 7.65942075032089e-01, 
7.66905656383551e-01, 3.76597759449075e-01, 7.81499388919150e-01, 
8.70783613077809e-01, 3.32266593531209e-01, 6.79700718203678e-01, 
7.10135010710740e-01, 4.85373879386974e-01, 6.19067455900779e-01, 
1.74422954786218e-01, 3.39247892632025e-01, 2.26088551497986e-01, 
2.84647212250385e-01, 1.37287780669858e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<5> m = Data(7.69596599449678e-01, 1.80960464007782e-02, 
1.32548834555804e-01, 9.12040322702435e-01, 5.25354034546498e-01, 
9.41775375418082e-01, 4.44906928277018e-01, 6.81080325582201e-01, 
9.84192080252163e-01, 8.89100182340677e-01, 1.01817060134196e-01, 
2.11431859037615e-02, 4.30789142275106e-01, 2.50882876564970e-02, 
2.58400721356293e-01, 5.30635872839879e-02, 9.21937456830432e-02, 
5.71864270236285e-01, 2.00009233901039e-01, 2.29352124936166e-02, 
3.17470712584264e-01, 7.31123753711116e-01, 3.61427408718217e-01, 
5.00398158846378e-01, 9.08777354809560e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<5> m = Data(2.41769005385622e-02, 7.06040711831501e-01, 
4.01400269892127e-01, 6.22528318958789e-01, 9.70219808437457e-01, 
1.40314478524010e-01, 9.23634202443502e-01, 7.24906866380750e-01, 
4.21674540188453e-01, 3.85730953556790e-01, 4.69287958133036e-02, 
5.08149987496600e-02, 9.22064795087949e-01, 1.40800302981703e-01, 
3.71443829061928e-01, 1.62746662339684e-01, 4.44312412946320e-01, 
8.85464398503279e-01, 1.93841241643644e-01, 4.20581312059001e-02, 
4.55300500629184e-01, 9.03035272141837e-01, 4.57757783510980e-01, 
4.18177151842367e-01, 9.69109793150232e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<5> m = Data(5.91632267859177e-01, 8.14332544199039e-01, 
3.34507049243343e-01, 8.12577918178363e-03, 5.81157036224266e-01, 
9.17488581142820e-01, 5.15247342390906e-01, 9.09538796663461e-02, 
6.23354293440825e-01, 7.13813668942402e-01, 3.45904240605146e-01, 
3.98875610500330e-01, 2.73602520675960e-01, 8.53862859684272e-01, 
4.58863386411325e-01, 3.75370427488046e-03, 1.40301868730795e-02, 
7.24481516280936e-01, 7.72000815595856e-01, 5.60233819140367e-01, 
8.10417771288134e-02, 7.99591957774011e-02, 5.05434588665483e-01, 
2.06613577812289e-01, 8.36788161781671e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<5> m = Data(9.71181725959251e-01, 2.98621517706498e-01, 
1.47998634380959e-01, 8.24787072980069e-01, 1.83866661866007e-01, 
2.24902437834599e-01, 2.40099860603221e-01, 5.07556367297291e-01, 
4.10876021473013e-01, 4.97539254790682e-01, 1.56892070474953e-01, 
8.27163318369144e-01, 3.63567904863797e-01, 4.03619694298915e-01, 
2.58110387179272e-01, 5.79206038913936e-01, 4.04199171649225e-01, 
1.02716918223691e-01, 9.36273777144197e-01, 2.31285520726267e-01, 
8.92102900573901e-01, 8.94441354417486e-01, 5.69651042803142e-01, 
9.51434043635223e-01, 5.24784081644284e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<5> m = Data(8.05944084380757e-01, 1.54494444735867e-01, 
5.68352033258144e-01, 2.76844760724612e-01, 5.99571106446652e-01, 
6.50155658495726e-01, 5.80321118181015e-01, 2.78427483124922e-01, 
7.28960571445496e-03, 8.12111228367507e-01, 6.17381855248769e-01, 
5.68244088125756e-01, 8.52652241614986e-01, 6.93038934510588e-01, 
1.86444660490361e-01, 3.11467607646139e-01, 2.15998679569308e-01, 
7.83206311483730e-01, 2.35282520551438e-01, 4.86344067089717e-01, 
9.38518471624478e-01, 8.17929944875947e-01, 7.10710431845036e-01, 
7.86305852002155e-02, 9.90703040300500e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<5> m = Data(2.96304354743256e-01, 3.58030729171153e-01, 
6.92522698805887e-01, 1.79732936094113e-01, 4.46275774232821e-01, 
5.90476309273118e-01, 9.95204598929733e-01, 8.25123844754980e-01, 
7.74601889392295e-01, 8.34700769223100e-01, 2.65391268303669e-01, 
1.23042509553764e-01, 6.90049624348518e-01, 5.73617712556864e-01, 
2.28904873550037e-02, 3.54405369665876e-01, 6.27987425226178e-01, 
9.45338262364467e-02, 8.60778233147086e-02, 5.46691443929291e-01, 
1.79812776509577e-01, 8.58741350469442e-01, 9.80165499951307e-01, 
6.10698345141943e-01, 9.31443003023478e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<5> m = Data(3.39964572159617e-01, 6.38241707359396e-01, 
6.21412435206930e-01, 5.68735165662361e-01, 8.73088379948172e-01, 
1.67465181137605e-01, 1.20888911216575e-01, 5.95419962556582e-01, 
7.10617412658523e-01, 4.79210410591114e-01, 5.50461047851262e-01, 
6.98171017421455e-01, 6.99286564954746e-01, 6.41871452264122e-01, 
6.31038672421652e-01, 9.98169469793503e-01, 8.62015911697331e-01, 
1.03569535941564e-01, 4.18230944367960e-01, 3.48689244090852e-01, 
2.95738342328614e-01, 3.79228962582527e-01, 3.01127710986076e-02, 
2.59596355422295e-02, 3.50082597722248e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<6> m = Data(8.93075598797506e-01, 6.61791213441977e-01, 
3.70808394704666e-01, 1.46498265578876e-01, 2.78200058445582e-01, 
5.54055849790748e-01, 3.05838033486911e-02, 4.44993680180680e-01, 
7.88390456740249e-01, 1.16780461562958e-01, 8.94930054060706e-02, 
7.20970082346876e-01, 4.96218302511453e-02, 9.26240006596247e-01, 
8.88607870117642e-01, 9.56710878032350e-01, 3.34282792831214e-01, 
5.06367876919566e-02, 2.94190762622914e-02, 3.29275811069937e-01, 
1.02572965442664e-01, 5.74897939140586e-01, 6.04507277836211e-01, 
3.16549966656048e-01, 2.54575094468752e-01, 2.03366058685225e-01, 
8.57634594514238e-01, 2.42119201608056e-02, 8.19973432772943e-01, 
3.66885067646032e-01, 2.75984628157832e-01, 3.72465990737422e-01, 
3.46690847997890e-01, 5.74756598678313e-01, 5.20360401152951e-02, 
3.20497439992830e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<6> m = Data(8.15392759141323e-01, 6.63158606166048e-01, 
4.24915733225933e-01, 5.13840925856423e-02, 7.76096543424744e-01, 
7.21737544336952e-01, 2.33859953705507e-01, 1.75532653637049e-01, 
6.03225873234580e-01, 8.13022105284277e-02, 9.19352094631728e-01, 
8.75922643086659e-01, 8.81936558574934e-01, 5.67844667500457e-01, 
2.84497452709346e-01, 5.84201836419325e-01, 4.13275047049565e-01, 
7.16932718916952e-01, 2.85560149281632e-02, 2.77700719095446e-01, 
9.70552166249673e-01, 7.24330731235627e-01, 5.60320492487045e-02, 
4.50849171009584e-01, 3.07755500267491e-01, 8.02695395900112e-01, 
8.66603008241087e-01, 9.89697732040402e-01, 7.46460693466325e-01, 
5.00393836423695e-01, 5.18167950536741e-01, 4.81086393432127e-01, 
1.66258717031924e-01, 8.03124653041700e-01, 4.50467794321799e-01, 
8.52012765668135e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<6> m = Data(1.73873830340882e-01, 8.15506501222735e-01, 
7.99892345081102e-01, 3.02841618913877e-01, 9.95972163237521e-01, 
3.51766410154212e-02, 9.27171748962429e-01, 8.42581163100880e-01, 
3.38903338044945e-01, 4.74427705590175e-01, 5.08524050367466e-02, 
7.36311857376742e-02, 3.15994578679089e-02, 5.15587619567004e-01, 
9.02891075269430e-02, 4.78151724884952e-02, 1.71814928120137e-01, 
2.63329788559906e-01, 4.58833436305044e-01, 7.69608099236108e-02, 
6.64097930557233e-03, 1.16716255720669e-01, 3.53975275198141e-01, 
4.45358789776681e-01, 5.52511592287953e-01, 2.20041620061399e-01, 
6.92787271247266e-01, 5.01641456568400e-01, 6.65791707544045e-01, 
2.20790421105144e-01, 5.81720318881466e-01, 2.20147517157036e-01, 
5.78342794307046e-01, 5.96769597293235e-01, 8.69084512634995e-01, 
7.26041564766618e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<6> m = Data(1.69012517494236e-01, 7.23361485720808e-01, 
1.58648898560071e-01, 7.93902010679314e-01, 7.45699046746697e-01, 
1.47948459995012e-01, 4.14485542350386e-01, 8.68453695840411e-01, 
1.59666334468436e-01, 2.29205209386140e-01, 8.99934637128772e-01, 
8.94825577210968e-01, 1.15893558310896e-01, 4.01736973894975e-01, 
4.04462150112230e-01, 9.16387261868535e-01, 1.77560640355935e-01, 
4.11447069445629e-01, 1.53615368394506e-01, 6.95952502117472e-01, 
4.97767568523417e-02, 4.86264755554507e-01, 3.12486411340096e-01, 
1.71515530957746e-01, 7.58688422862998e-01, 5.39024514700782e-01, 
1.35498947757275e-01, 9.39456294393559e-01, 4.64986854845827e-01, 
3.72800645666414e-01, 4.75043913233161e-01, 2.11914763778214e-02, 
8.97784967463455e-01, 1.52714792749979e-01, 2.64372757954814e-01, 
6.41838842117378e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<6> m = Data(7.75732897302276e-01, 1.59091329139989e-01, 
2.68089113054277e-01, 4.38160860931799e-01, 6.70417379663448e-02, 
7.96002091411798e-01, 4.54711877134461e-01, 9.47229237656936e-01, 
9.51085062444666e-01, 4.80099340755984e-01, 7.42919532109935e-01, 
2.85779156530161e-01, 4.57995860939676e-01, 6.67363890807460e-01, 
6.32290548378104e-01, 4.40918001389516e-01, 4.62796357705982e-01, 
7.77234940451805e-01, 4.75560920835477e-01, 4.15675682606075e-01, 
8.61915798984557e-01, 3.64876523432098e-02, 5.60987447670667e-01, 
1.29605895274223e-01, 3.94842826718269e-01, 5.93959686896221e-01, 
2.47482674014164e-01, 4.02923611744962e-01, 3.72244997624730e-01, 
7.29654535331805e-01, 7.40192418754549e-01, 4.22298466969688e-01, 
9.77815406682506e-01, 7.91116978944657e-01, 5.67709113751070e-01, 
6.19851782055395e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<6> m = Data(3.18226764790049e-01, 6.04990475428641e-01, 
8.47856200257748e-01, 7.63433268204239e-01, 3.49048204614404e-02, 
1.89798773730778e-01, 6.20816378149365e-01, 4.39430991976835e-01, 
8.09371879113661e-01, 4.05909130927198e-01, 5.50970337684356e-01, 
3.04670648124735e-01, 4.36602448768744e-02, 4.47556668966246e-01, 
5.28189202675348e-01, 6.56653023910958e-01, 6.90368275675822e-01, 
2.07129789189039e-01, 4.98652988515397e-01, 7.97605678364206e-01, 
7.85268678833408e-01, 1.95493747072068e-01, 1.25720815064634e-01, 
2.79682069016325e-01, 4.69092731851899e-01, 7.88690794057686e-01, 
2.12826437774348e-01, 9.77254334775169e-01, 5.89212250079350e-01, 
7.93888259759860e-01, 6.44656450071723e-01, 2.49255087293649e-02, 
9.72785936638460e-01, 4.47475717732895e-01, 8.43749723576504e-02, 
4.61707393051235e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<6> m = Data(6.18812741281392e-02, 3.74068943074471e-01, 
6.63915750469443e-01, 3.54983604761906e-01, 9.42683167058176e-01, 
6.36037694108753e-01, 9.39317919407114e-01, 8.00162275029759e-01, 
8.88224087928930e-01, 5.07799945684691e-01, 6.56859417305437e-01, 
2.29071728408510e-01, 8.96520263537621e-01, 8.32421286310729e-01, 
6.85086208473243e-01, 7.96713080968666e-01, 6.95228178548774e-02, 
3.21065842249768e-01, 8.13085436558866e-01, 9.96785990862678e-01, 
9.99794419525261e-01, 5.06733384408189e-01, 2.24347081645378e-01, 
7.70300205790558e-01, 1.42279378761482e-01, 7.13798271861761e-01, 
7.59865488317435e-01, 7.14113103449323e-01, 8.72145288721125e-02, 
6.60530754098642e-01, 5.12071597579688e-01, 4.84850932681686e-01, 
3.44516751617267e-01, 8.05727667320606e-01, 5.93584163172660e-03, 
3.31947921577863e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<6> m = Data(3.49705542827719e-01, 1.37154944797163e-01, 
6.45239524870601e-01, 4.31276022990973e-02, 8.46517570966223e-01, 
8.86036951068266e-01, 9.91510616858571e-01, 6.87024047653616e-02, 
7.39402886537011e-01, 7.20916863357948e-01, 2.84475490456196e-01, 
2.22671025009815e-01, 5.78440664421205e-01, 5.97855361442432e-01, 
3.00653206604492e-01, 4.69252239511250e-01, 4.47009863416795e-01, 
3.48234586037146e-01, 1.01840607107278e-01, 3.43101456172621e-01, 
3.80111889860627e-01, 8.84945193485220e-02, 6.23633404737741e-01, 
7.31812466790873e-01, 7.62998066335941e-01, 9.66205817990241e-01, 
2.47845564976849e-01, 3.79902441061743e-01, 9.97577931303812e-01, 
7.15377289547433e-01, 6.44923638104279e-01, 7.19239911502218e-01, 
5.39820510091201e-01, 8.48885217361553e-01, 4.89454460716457e-01, 
9.82603494825003e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<6> m = Data(9.83495551129402e-01, 8.96438923325791e-01, 
7.65595118153860e-01, 6.70088435212700e-01, 1.28373104373757e-01, 
7.95865935827994e-01, 3.80452441451673e-01, 7.76023968303416e-01, 
5.97902888635629e-01, 8.81282332475203e-01, 4.51220508158266e-01, 
3.94786616586638e-01, 7.86418138438833e-01, 6.44674583213448e-01, 
8.84231744282032e-01, 6.65852931265202e-01, 3.62849453841196e-01, 
5.82554758877527e-01, 7.51933660082863e-01, 9.89343406928702e-01, 
3.30715965455562e-01, 7.80249339682639e-01, 7.71406127001749e-01, 
6.42095402889450e-01, 5.69000996687613e-01, 6.69335637399247e-01, 
5.18974190991716e-01, 7.46706468592545e-01, 4.85398019583926e-01, 
9.48516570907321e-01, 4.62234245294165e-01, 9.62100841143866e-01, 
5.04552101843300e-01, 5.54298923615301e-01, 7.67623550209119e-01, 
7.85572711446036e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-       {
-               Matrix<6> m = Data(4.70901409159873e-01, 6.16718330229730e-01, 
2.92510391583698e-01, 7.18900513043769e-01, 1.16092123525330e-01, 
2.67417883907672e-01, 4.49033651959167e-01, 7.43373040563550e-01, 
3.08512735313409e-01, 7.45404418147625e-01, 3.92298614689306e-01, 
2.16621800393400e-01, 7.29906485798085e-01, 1.80455959397962e-01, 
3.48883647220554e-01, 6.47630016718079e-01, 6.73020430653967e-01, 
5.67042165392109e-01, 1.46353190901009e-01, 6.27891196103089e-01, 
8.81123105536663e-01, 4.84702126218149e-01, 5.80946400504362e-01, 
5.44173697172403e-01, 3.91523536586145e-02, 6.93003427652823e-01, 
6.36770236648195e-01, 4.68642500236709e-01, 4.61680771916075e-01, 
4.85512743888567e-01, 8.94114883838645e-01, 1.66978408137268e-03, 
7.72267414921243e-01, 4.58920766982541e-02, 2.44879410805987e-01, 
2.28132316064184e-01);
-               cout << setprecision(14) << determinant(m) << " " << 
determinant_gaussian_elimination(m) << " " << determinant_LU(m) << endl;
-               Matrix<> n = m;
-               cout << setprecision(14) << determinant(n) << " " << 
determinant_gaussian_elimination(n) << " " << determinant_LU(n) << endl;
-       }
-
-}

Index: regressions/determinant.m
===================================================================
RCS file: regressions/determinant.m
diff -N regressions/determinant.m
--- regressions/determinant.m   15 Oct 2009 14:51:50 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,47 +0,0 @@
-out = fopen('determinant.txt', 'w')
-cc  = fopen('determinant.cc', 'w')
-
-fprintf(cc, '#include "regressions/regression.h"\n');
-fprintf(cc, 'int main(){\n');
-
-fprintf(out, '# Automatically built from determinant.m\n');
-fprintf(out, '# Format is:\n');
-fprintf(out, '# <generic fixed>   <GE fixed>   <LU fixed>\n');
-fprintf(out, '# <generic dynamic> <GE dynamic> <LU dynamic>\n');
-fprintf(out, '\n');
-fprintf(out, '#> t 1e-10\n');
-fprintf(out, '\n');
-
-
-for i=2:6
-
-       fprintf(out, '# %ix%i\n', i, i)
-       
-       for j=1:10
-
-               M = rand(i,i);
-               v = M(:);
-
-               fprintf(cc, '   {\n');
-               fprintf(cc, '           Matrix<%i> m = Data(%.14e', i, v(1));
-               fprintf(cc, ', %.14e', v(2:end));
-               fprintf(cc, ');\n');
-               fprintf(cc, '           cout << setprecision(14) << 
determinant(m) << " " << determinant_gaussian_elimination(m) << " " << 
determinant_LU(m) << endl;\n');
-               fprintf(cc, '           Matrix<> n = m;\n');
-               fprintf(cc, '           cout << setprecision(14) << 
determinant(n) << " " << determinant_gaussian_elimination(n) << " " << 
determinant_LU(n) << endl;\n');
-               fprintf(cc, '   }\n');
-               fprintf(cc, '\n');
-
-               d = repmat(det(M), 1, 6);
-
-               fprintf(out, '%.14e %.14e %.14e\n', d);
-       end
-
-       fprintf(out, '\n');
-end
-
-fprintf(cc, '}\n');
-
-fclose(out)
-fclose(cc)
-

Index: regressions/determinant.txt
===================================================================
RCS file: regressions/determinant.txt
diff -N regressions/determinant.txt
--- regressions/determinant.txt 15 Oct 2009 14:51:50 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,116 +0,0 @@
-# Format is:
-# <generic fixed>   <GE fixed>   <LU fixed>
-# <generic dynamic> <GE dynamic> <LU dynamic>
-
-#> t 1e-10
-
-# 2x2
--1.86690297378876e-01 -1.86690297378876e-01 -1.86690297378876e-01
--1.86690297378876e-01 -1.86690297378876e-01 -1.86690297378876e-01
-1.23271095621914e-01 1.23271095621914e-01 1.23271095621914e-01
-1.23271095621914e-01 1.23271095621914e-01 1.23271095621914e-01
--7.76815675930025e-02 -7.76815675930025e-02 -7.76815675930025e-02
--7.76815675930025e-02 -7.76815675930025e-02 -7.76815675930025e-02
--1.66161938391820e-02 -1.66161938391820e-02 -1.66161938391820e-02
--1.66161938391820e-02 -1.66161938391820e-02 -1.66161938391820e-02
-1.01672727145003e-01 1.01672727145003e-01 1.01672727145003e-01
-1.01672727145003e-01 1.01672727145003e-01 1.01672727145003e-01
-2.18547839447123e-01 2.18547839447123e-01 2.18547839447123e-01
-2.18547839447123e-01 2.18547839447123e-01 2.18547839447123e-01
-3.45416537221555e-01 3.45416537221555e-01 3.45416537221555e-01
-3.45416537221555e-01 3.45416537221555e-01 3.45416537221555e-01
-8.75671920353631e-02 8.75671920353631e-02 8.75671920353631e-02
-8.75671920353631e-02 8.75671920353631e-02 8.75671920353631e-02
-1.19175267220147e-01 1.19175267220147e-01 1.19175267220147e-01
-1.19175267220147e-01 1.19175267220147e-01 1.19175267220147e-01
--2.07813724492595e-01 -2.07813724492595e-01 -2.07813724492595e-01
--2.07813724492595e-01 -2.07813724492595e-01 -2.07813724492595e-01
-
-# 3x3
-9.32401706255515e-02 9.32401706255515e-02 9.32401706255515e-02
-9.32401706255515e-02 9.32401706255515e-02 9.32401706255515e-02
--3.42482621526149e-02 -3.42482621526149e-02 -3.42482621526149e-02
--3.42482621526149e-02 -3.42482621526149e-02 -3.42482621526149e-02
-2.16494680684807e-01 2.16494680684807e-01 2.16494680684807e-01
-2.16494680684807e-01 2.16494680684807e-01 2.16494680684807e-01
-2.43693114553249e-01 2.43693114553249e-01 2.43693114553249e-01
-2.43693114553249e-01 2.43693114553249e-01 2.43693114553249e-01
-8.18761785680072e-02 8.18761785680072e-02 8.18761785680072e-02
-8.18761785680072e-02 8.18761785680072e-02 8.18761785680072e-02
-2.64748410769538e-01 2.64748410769538e-01 2.64748410769538e-01
-2.64748410769538e-01 2.64748410769538e-01 2.64748410769538e-01
-9.78976224296192e-02 9.78976224296192e-02 9.78976224296192e-02
-9.78976224296192e-02 9.78976224296192e-02 9.78976224296192e-02
--5.85754005545154e-02 -5.85754005545154e-02 -5.85754005545154e-02
--5.85754005545154e-02 -5.85754005545154e-02 -5.85754005545154e-02
-2.38693963205473e-01 2.38693963205473e-01 2.38693963205473e-01
-2.38693963205473e-01 2.38693963205473e-01 2.38693963205473e-01
--1.19499195716316e-01 -1.19499195716316e-01 -1.19499195716316e-01
--1.19499195716316e-01 -1.19499195716316e-01 -1.19499195716316e-01
-
-# 4x4
-1.23153625077969e-02 1.23153625077969e-02 1.23153625077969e-02
-1.23153625077969e-02 1.23153625077969e-02 1.23153625077969e-02
-7.44110329996437e-02 7.44110329996437e-02 7.44110329996437e-02
-7.44110329996437e-02 7.44110329996437e-02 7.44110329996437e-02
-1.01015500870366e-02 1.01015500870366e-02 1.01015500870366e-02
-1.01015500870366e-02 1.01015500870366e-02 1.01015500870366e-02
-2.33255311801845e-01 2.33255311801845e-01 2.33255311801845e-01
-2.33255311801845e-01 2.33255311801845e-01 2.33255311801845e-01
-1.21886726609177e-01 1.21886726609177e-01 1.21886726609177e-01
-1.21886726609177e-01 1.21886726609177e-01 1.21886726609177e-01
--1.42701894446093e-02 -1.42701894446093e-02 -1.42701894446093e-02
--1.42701894446093e-02 -1.42701894446093e-02 -1.42701894446093e-02
--2.44786316070770e-02 -2.44786316070770e-02 -2.44786316070770e-02
--2.44786316070770e-02 -2.44786316070770e-02 -2.44786316070770e-02
--2.16974396386367e-01 -2.16974396386367e-01 -2.16974396386367e-01
--2.16974396386367e-01 -2.16974396386367e-01 -2.16974396386367e-01
-2.92746049092116e-02 2.92746049092116e-02 2.92746049092116e-02
-2.92746049092116e-02 2.92746049092116e-02 2.92746049092116e-02
--1.17233072807774e-02 -1.17233072807774e-02 -1.17233072807774e-02
--1.17233072807774e-02 -1.17233072807774e-02 -1.17233072807774e-02
-
-# 5x5
--5.38245974497025e-02 -5.38245974497025e-02 -5.38245974497025e-02
--5.38245974497025e-02 -5.38245974497025e-02 -5.38245974497025e-02
--1.30049468865327e-02 -1.30049468865327e-02 -1.30049468865327e-02
--1.30049468865327e-02 -1.30049468865327e-02 -1.30049468865327e-02
--7.70676659509866e-03 -7.70676659509866e-03 -7.70676659509866e-03
--7.70676659509866e-03 -7.70676659509866e-03 -7.70676659509866e-03
-2.57821149588703e-02 2.57821149588703e-02 2.57821149588703e-02
-2.57821149588703e-02 2.57821149588703e-02 2.57821149588703e-02
--2.33805990369113e-02 -2.33805990369113e-02 -2.33805990369113e-02
--2.33805990369113e-02 -2.33805990369113e-02 -2.33805990369113e-02
-8.67919485092491e-02 8.67919485092491e-02 8.67919485092491e-02
-8.67919485092491e-02 8.67919485092491e-02 8.67919485092491e-02
--4.69848510377782e-03 -4.69848510377782e-03 -4.69848510377782e-03
--4.69848510377782e-03 -4.69848510377782e-03 -4.69848510377782e-03
-3.36584434562849e-02 3.36584434562849e-02 3.36584434562849e-02
-3.36584434562849e-02 3.36584434562849e-02 3.36584434562849e-02
--2.54711427044881e-03 -2.54711427044881e-03 -2.54711427044881e-03
--2.54711427044881e-03 -2.54711427044881e-03 -2.54711427044881e-03
-5.55342480959827e-03 5.55342480959827e-03 5.55342480959827e-03
-5.55342480959827e-03 5.55342480959827e-03 5.55342480959827e-03
-
-# 6x6
-1.49147465385350e-01 1.49147465385350e-01 1.49147465385350e-01
-1.49147465385350e-01 1.49147465385350e-01 1.49147465385350e-01
-7.09483065012513e-02 7.09483065012513e-02 7.09483065012513e-02
-7.09483065012513e-02 7.09483065012513e-02 7.09483065012513e-02
-1.14152291132757e-02 1.14152291132757e-02 1.14152291132757e-02
-1.14152291132757e-02 1.14152291132757e-02 1.14152291132757e-02
-8.72695912188722e-02 8.72695912188722e-02 8.72695912188722e-02
-8.72695912188722e-02 8.72695912188722e-02 8.72695912188722e-02
-1.05259294719855e-02 1.05259294719855e-02 1.05259294719855e-02
-1.05259294719855e-02 1.05259294719855e-02 1.05259294719855e-02
-7.05592829000811e-02 7.05592829000811e-02 7.05592829000811e-02
-7.05592829000811e-02 7.05592829000811e-02 7.05592829000811e-02
-2.82826722235183e-03 2.82826722235183e-03 2.82826722235183e-03
-2.82826722235183e-03 2.82826722235183e-03 2.82826722235183e-03
-2.25699266970292e-03 2.25699266970292e-03 2.25699266970292e-03
-2.25699266970292e-03 2.25699266970292e-03 2.25699266970292e-03
--2.99959606637614e-02 -2.99959606637614e-02 -2.99959606637614e-02
--2.99959606637614e-02 -2.99959606637614e-02 -2.99959606637614e-02
-1.07323777648622e-02 1.07323777648622e-02 1.07323777648622e-02
-1.07323777648622e-02 1.07323777648622e-02 1.07323777648622e-02
-

Index: regressions/eigen-sqrt.cc
===================================================================
RCS file: regressions/eigen-sqrt.cc
diff -N regressions/eigen-sqrt.cc
--- regressions/eigen-sqrt.cc   29 Sep 2009 15:38:05 -0000      1.2
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,41 +0,0 @@
-#include <iostream>
-#include <TooN/TooN.h>
-#include <TooN/SymEigen.h>
-
-using namespace std;
-using namespace TooN;
-
-int main() {
-  // construct M
-  Matrix<3> M = Data(4,0,2,
-                     0,5,3,
-                     2,3,6);
- 
-  Vector<3> dg(makeVector(2,4,9));
-  // create the eigen decomposition of M
-  SymEigen<3> eigM(M);
-  cout << M << endl;
-
-  cout << endl;
-
-  // Print the eigenvalues and eigenvectors
-  cout << eigM.get_evalues() << endl;
-  cout << eigM.get_evectors() << endl << endl;
-
-  // print the square root of the matrix.
-  cout << eigM.get_sqrtm() << endl << endl;
-
-  // print the square root of the matrix squared.
-  cout << eigM.get_sqrtm().T() * eigM.get_sqrtm() << endl << endl;
-
-  // print the inverse of the matrix.
-  cout << eigM.get_pinv() << endl;
-
-  // print the inverse square root of the matrix.
-  cout << eigM.get_isqrtm() << endl;
-
-  // print the inverse square root of the matrix squared.
-  cout << eigM.get_isqrtm().T() * eigM.get_isqrtm() << endl;
-  
-  return 0;
-}

Index: regressions/eigen-sqrt.txt
===================================================================
RCS file: regressions/eigen-sqrt.txt
diff -N regressions/eigen-sqrt.txt
--- regressions/eigen-sqrt.txt  7 Dec 2009 19:17:51 -0000       1.2
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,37 +0,0 @@
-# A
-4 0 2
-0 5 3
-2 3 6
-
-# Eigenvalues of A
-1.63463 4.33626 9.02911
-
-# Eigenvectors of A
--0.533741 -0.562714 0.631247
--0.789159 0.599687 -0.13268
-0.30389 0.568971 0.764149
-
-# R=sqrt(A)
-1.93856 -0.0819276 0.485048
--0.0819276 2.12647 0.686608
-0.485048 0.686608 2.30072
-
-# R^T*R (should equal A)
-4 0 2
-0 5 3
-2 3 6
-
-# A^-1
-0.328125 0.09375 -0.15625
-0.09375 0.3125 -0.1875
--0.15625 -0.1875 0.3125
-
-# Q=isqrt(A)
-0.552621 0.0651912 -0.135961
-0.0651912 0.528101 -0.171346
--0.135961 -0.171346 0.514446
-
-# Q^T*Q (should equal A^-1)
-0.328125 0.09375 -0.15625
-0.09375 0.3125 -0.1875
--0.15625 -0.1875 0.3125

Index: regressions/fill.cc
===================================================================
RCS file: regressions/fill.cc
diff -N regressions/fill.cc
--- regressions/fill.cc 9 Dec 2009 18:51:13 -0000       1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,61 +0,0 @@
-#include <TooN/TooN.h>
-using namespace TooN;
-using namespace std;
-
-int main()
-{
-       {
-               Matrix <3,2> A;
-               Fill(A) =  1,2,
-                                  3,4,
-                                  5,6;
-
-               cout << A << endl;
-
-               Matrix <2,3> B;
-               Fill(B) =  1,2,3,
-                                  4,5,6;
-
-               cout << B << endl;
-
-               Matrix <3,2,float,ColMajor> C;
-               Fill(C) =  1,2,
-                                  3,4,
-                                  5,6;
-
-               cout << C << endl;
-
-               Matrix <2,3, float,ColMajor> D;
-               Fill(D) =  1,2,3,
-                                  4,5,6;
-
-               cout << D << endl;
-       }
-       {
-               Matrix<> A(3,2);
-               Fill(A) =  1,2,
-                                  3,4,
-                                  5,6;
-
-               cout << A << endl;
-
-               Matrix<> B(2,3);
-               Fill(B) =  1,2,3,
-                                  4,5,6;
-
-               cout << B << endl;
-
-               Matrix <Dynamic,Dynamic,float,ColMajor> C(3,2);
-               Fill(C) =  1,2,
-                                  3,4,
-                                  5,6;
-
-               cout << C << endl;
-
-               Matrix <Dynamic,Dynamic, float,ColMajor> D(2,3);
-               Fill(D) =  1,2,3,
-                                  4,5,6;
-
-               cout << D << endl;
-       }
-}

Index: regressions/fill.txt
===================================================================
RCS file: regressions/fill.txt
diff -N regressions/fill.txt
--- regressions/fill.txt        9 Dec 2009 18:51:13 -0000       1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,28 +0,0 @@
-1 2
-3 4
-5 6
-
-1 2 3
-4 5 6
-
-1 2
-3 4
-5 6
-
-1 2 3
-4 5 6
-
-1 2
-3 4
-5 6
-
-1 2 3
-4 5 6
-
-1 2
-3 4
-5 6
-
-1 2 3
-4 5 6
-

Index: regressions/gauss_jordan.cc
===================================================================
RCS file: regressions/gauss_jordan.cc
diff -N regressions/gauss_jordan.cc
--- regressions/gauss_jordan.cc 28 Sep 2009 10:48:13 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,34 +0,0 @@
-#include "regressions/regression.h"
-#include <TooN/gauss_jordan.h>
-
-
-template<int C, int D>
-void test(Matrix<C, D> m)
-{
-       gauss_jordan(m);
-
-       cout << setprecision(10) << m << endl;
-}
-
-int main()
-{
-       Matrix<10, 20> m;
-       
-       m.slice<0,10,10,10>() = Identity;
-       m.slice<0,0,10,10>()= Data(
-                       0.34797399, 0.99949284, 0.79089508, 0.77106323, 
0.42008832, 0.34115353, 0.82386306, 0.30355494, 0.43675765, 0.14701409,
-                       0.79196638, 0.89361322, 0.01607914, 0.80605940, 
0.65770431, 0.78196315, 0.72096826, 0.72992854, 0.59231807, 0.29441620,
-                       0.87756469, 0.13676905, 0.24987969, 0.70330337, 
0.14679752, 0.24212448, 0.54797729, 0.39780385, 0.28859592, 0.56037868,
-                       0.28673516, 0.50161131, 0.68057626, 0.49395349, 
0.40353230, 0.87453874, 0.40320916, 0.81494509, 0.08367898, 0.30109605,
-                       0.63965121, 0.81584239, 0.41207698, 0.62649440, 
0.17279511, 0.20152095, 0.68882719, 0.25012805, 0.59680722, 0.08332985,
-                       0.28651408, 0.79504551, 0.33326702, 0.26440896, 
0.95748781, 0.22512739, 0.01047784, 0.85470217, 0.85677470, 0.65734012,
-                       0.59521552, 0.78840112, 0.96281698, 0.31079097, 
0.31028381, 0.10117889, 0.87224212, 0.29233044, 0.63348397, 0.45734703,
-                       0.76090196, 0.19765961, 0.34467370, 0.13664008, 
0.03025330, 0.04633244, 0.85239184, 0.51009616, 0.29205931, 0.01302757,
-                       0.74295611, 0.33527418, 0.62969038, 0.50725507, 
0.64402412, 0.89390381, 0.59720718, 0.74400470, 0.98612919, 0.53410648,
-                       0.93191033, 0.22050625, 0.78088493, 0.06762009, 
0.56923140, 0.24980766, 0.74376115, 0.14729345, 0.02183219, 0.42504135);
-
-       test(m);
-
-       Matrix<> md = m;
-       test(md);
-}

Index: regressions/gauss_jordan.txt
===================================================================
RCS file: regressions/gauss_jordan.txt
diff -N regressions/gauss_jordan.txt
--- regressions/gauss_jordan.txt        28 Sep 2009 10:48:13 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,28 +0,0 @@
-# Range of the matrix is 0--1, and the matrix is 10x10. Errors should be small
-#> t 1e-18
-
-1 0 0 0 0 0 0 0 0 0 -1.551543207 -0.6170670429 -0.01958382347 0.5329244158 
2.811560915 0.2566023602 -0.960779849 -0.2223209796 -0.2455688735 1.013525462
-0 1 0 0 0 0 0 0 0 0 -1.426671321 0.710147444 -0.5562041531 0.7238990064 
1.303602262 0.01983165255 1.157534206 -0.7281900184 -1.027510747 0.003788887042
-0 0 1 0 0 0 0 0 0 0 0.3009307806 -1.566556566 -0.07073552232 0.6160470071 
1.224820531 0.2588621457 -0.7573429524 -0.02303798156 0.2934242048 0.4443150044
-0 0 0 1 0 0 0 0 0 0 1.764758704 -0.8150240542 1.098587487 -0.3268667315 
0.02153549423 0.2168926172 -1.594789032 0.03681640417 0.2301763236 -0.1767072075
-0 0 0 0 1 0 0 0 0 0 1.897529332 -0.04294243314 -0.249874082 -1.030103757 
-1.160903179 0.6282496553 -1.602078304 0.3579156554 0.4060880781 0.8911522925
-0 0 0 0 0 1 0 0 0 0 -1.105668985 0.8301231929 -0.5990176892 0.6342165265 
0.2529281369 -0.861275016 0.7874166282 -0.8958773159 0.4667702043 0.02395407106
-0 0 0 0 0 0 1 0 0 0 1.306478199 1.436191451 -0.002947540335 -1.025853643 
-3.239998669 -0.747333896 1.377343306 0.8332918069 0.1386250684 -0.6068951722
-0 0 0 0 0 0 0 1 0 0 0.03043670964 -0.4138316668 0.1953495288 0.692959407 
-0.2368993519 0.6543598778 -0.4719442413 1.236594252 -0.3576214366 -0.518558341
-0 0 0 0 0 0 0 0 1 0 -0.02115899807 -0.2928083293 -0.2559350939 -0.6613822999 
0.3744957069 0.03602627845 0.08987841652 0.06119708305 1.00709108 -0.477145536
-0 0 0 0 0 0 0 0 0 1 -0.8787238558 1.207196902 0.9239763198 -0.02805539928 
-1.955888008 -0.3390472793 2.582672951 -0.9409297108 -0.4927776515 -0.600961771
-
-
-
-1 0 0 0 0 0 0 0 0 0 -1.551543207 -0.6170670429 -0.01958382347 0.5329244158 
2.811560915 0.2566023602 -0.960779849 -0.2223209796 -0.2455688735 1.013525462
-0 1 0 0 0 0 0 0 0 0 -1.426671321 0.710147444 -0.5562041531 0.7238990064 
1.303602262 0.01983165255 1.157534206 -0.7281900184 -1.027510747 0.003788887042
-0 0 1 0 0 0 0 0 0 0 0.3009307806 -1.566556566 -0.07073552232 0.6160470071 
1.224820531 0.2588621457 -0.7573429524 -0.02303798156 0.2934242048 0.4443150044
-0 0 0 1 0 0 0 0 0 0 1.764758704 -0.8150240542 1.098587487 -0.3268667315 
0.02153549423 0.2168926172 -1.594789032 0.03681640417 0.2301763236 -0.1767072075
-0 0 0 0 1 0 0 0 0 0 1.897529332 -0.04294243314 -0.249874082 -1.030103757 
-1.160903179 0.6282496553 -1.602078304 0.3579156554 0.4060880781 0.8911522925
-0 0 0 0 0 1 0 0 0 0 -1.105668985 0.8301231929 -0.5990176892 0.6342165265 
0.2529281369 -0.861275016 0.7874166282 -0.8958773159 0.4667702043 0.02395407106
-0 0 0 0 0 0 1 0 0 0 1.306478199 1.436191451 -0.002947540335 -1.025853643 
-3.239998669 -0.747333896 1.377343306 0.8332918069 0.1386250684 -0.6068951722
-0 0 0 0 0 0 0 1 0 0 0.03043670964 -0.4138316668 0.1953495288 0.692959407 
-0.2368993519 0.6543598778 -0.4719442413 1.236594252 -0.3576214366 -0.518558341
-0 0 0 0 0 0 0 0 1 0 -0.02115899807 -0.2928083293 -0.2559350939 -0.6613822999 
0.3744957069 0.03602627845 0.08987841652 0.06119708305 1.00709108 -0.477145536
-0 0 0 0 0 0 0 0 0 1 -0.8787238558 1.207196902 0.9239763198 -0.02805539928 
-1.955888008 -0.3390472793 2.582672951 -0.9409297108 -0.4927776515 -0.600961771
-
-

Index: regressions/gr_svd.cc
===================================================================
RCS file: regressions/gr_svd.cc
diff -N regressions/gr_svd.cc
--- regressions/gr_svd.cc       15 Aug 2011 15:21:19 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,16 +0,0 @@
-#include <TooN/GR_SVD.h>
-#include <iomanip>
-
-using namespace TooN;
-using namespace std;
-
-
-int main()
-{
-       Matrix<6,4> m=Data(7.1259081599432528e-01, 4.2097952268306421e-01, 
8.3341077322495927e-01, 9.9124489489770040e-01, 3.1784660216412347e-01, 
4.1949631857048914e-01, 4.7727559718070028e-01, 7.9377920184015760e-01, 
7.6661245683649937e-01, 2.1747993041326713e-01, 1.8637696266582987e-01, 
3.7701050694140509e-01, 6.0122381327712404e-01, 9.9548617645170079e-01, 
5.0222598175122368e-01, 2.2963368033181392e-01, 5.6726962865418729e-01, 
1.7610468108004690e-01, 5.5242462794417013e-01, 4.9506236661284891e-01, 
8.8282275746795025e-01, 3.7981396117759264e-01, 3.3036735284418856e-01, 
9.2338197268264907e-02);
-
-       GR_SVD<6,4> a(m);
-       cout << setprecision(16);
-       cout << "Static: \n";
-       cout << a.get_pinv() <<endl;
-}

Index: regressions/gr_svd.txt
===================================================================
RCS file: regressions/gr_svd.txt
diff -N regressions/gr_svd.txt
--- regressions/gr_svd.txt      15 Aug 2011 15:21:19 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,5 +0,0 @@
-Static:
--1.8712565837520495e-01 -2.3766012444527243e-01 9.9519392834221043e-01 
-3.1103047736112704e-01 9.5429169776037916e-03 7.1083458548222378e-01
--4.1122220484940036e-01 6.4866010459986645e-01 2.2396268548558237e-01 
1.1277570186057504e+00 -8.5118604842904577e-01 -3.1718281779348056e-01
-9.8048445768524128e-01 -1.3527076460898442e+00 -2.4150494006184768e+00 
1.7181247915959696e-01 1.8776834558707587e+00 4.6920597539449482e-01
-6.9575344532331468e-02 1.3264615471015562e+00 1.1958329878124880e+00 
-4.1340372438583223e-01 -8.2303665335837262e-01 -7.6175953318789391e-01

Index: regressions/lu.cc
===================================================================
RCS file: regressions/lu.cc
diff -N regressions/lu.cc
--- regressions/lu.cc   28 Sep 2009 10:48:14 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,29 +0,0 @@
-#include "regressions/regression.h"
-
-
-template<int C>
-void test(const Matrix<10, 10>& m)
-{
-       LU<C> lu(m);
-       cout << setprecision(10) << lu.get_inverse() << endl
-            << lu.get_inverse() * m << endl;
-
-}
-
-int main()
-{
-       Matrix<10> m = Data(
-                       0.34797399, 0.99949284, 0.79089508, 0.77106323, 
0.42008832, 0.34115353, 0.82386306, 0.30355494, 0.43675765, 0.14701409,
-                       0.79196638, 0.89361322, 0.01607914, 0.80605940, 
0.65770431, 0.78196315, 0.72096826, 0.72992854, 0.59231807, 0.29441620,
-                       0.87756469, 0.13676905, 0.24987969, 0.70330337, 
0.14679752, 0.24212448, 0.54797729, 0.39780385, 0.28859592, 0.56037868,
-                       0.28673516, 0.50161131, 0.68057626, 0.49395349, 
0.40353230, 0.87453874, 0.40320916, 0.81494509, 0.08367898, 0.30109605,
-                       0.63965121, 0.81584239, 0.41207698, 0.62649440, 
0.17279511, 0.20152095, 0.68882719, 0.25012805, 0.59680722, 0.08332985,
-                       0.28651408, 0.79504551, 0.33326702, 0.26440896, 
0.95748781, 0.22512739, 0.01047784, 0.85470217, 0.85677470, 0.65734012,
-                       0.59521552, 0.78840112, 0.96281698, 0.31079097, 
0.31028381, 0.10117889, 0.87224212, 0.29233044, 0.63348397, 0.45734703,
-                       0.76090196, 0.19765961, 0.34467370, 0.13664008, 
0.03025330, 0.04633244, 0.85239184, 0.51009616, 0.29205931, 0.01302757,
-                       0.74295611, 0.33527418, 0.62969038, 0.50725507, 
0.64402412, 0.89390381, 0.59720718, 0.74400470, 0.98612919, 0.53410648,
-                       0.93191033, 0.22050625, 0.78088493, 0.06762009, 
0.56923140, 0.24980766, 0.74376115, 0.14729345, 0.02183219, 0.42504135);
-
-       test<Dynamic>(m);
-       test<10>(m);
-}

Index: regressions/lu.txt
===================================================================
RCS file: regressions/lu.txt
diff -N regressions/lu.txt
--- regressions/lu.txt  28 Sep 2009 10:48:14 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,50 +0,0 @@
-# Range of the matrix is 0--1, and the matrix is 10x10. Errors should be small
-#> t 1e-18
-
--1.551543207 -0.6170670429 -0.01958382347 0.5329244158 2.811560915 
0.2566023602 -0.960779849 -0.2223209796 -0.2455688735 1.013525462
--1.426671321 0.710147444 -0.5562041531 0.7238990064 1.303602262 0.01983165255 
1.157534206 -0.7281900184 -1.027510747 0.003788887042
-0.3009307806 -1.566556566 -0.07073552232 0.6160470071 1.224820531 0.2588621457 
-0.7573429524 -0.02303798156 0.2934242048 0.4443150044
-1.764758704 -0.8150240542 1.098587487 -0.3268667315 0.02153549423 0.2168926172 
-1.594789032 0.03681640417 0.2301763236 -0.1767072075
-1.897529332 -0.04294243314 -0.249874082 -1.030103757 -1.160903179 0.6282496553 
-1.602078304 0.3579156554 0.4060880781 0.8911522925
--1.105668985 0.8301231929 -0.5990176892 0.6342165265 0.2529281369 -0.861275016 
0.7874166282 -0.8958773159 0.4667702043 0.02395407106
-1.306478199 1.436191451 -0.002947540335 -1.025853643 -3.239998669 -0.747333896 
1.377343306 0.8332918069 0.1386250684 -0.6068951722
-0.03043670964 -0.4138316668 0.1953495288 0.692959407 -0.2368993519 
0.6543598778 -0.4719442413 1.236594252 -0.3576214366 -0.518558341
--0.02115899807 -0.2928083293 -0.2559350939 -0.6613822999 0.3744957069 
0.03602627845 0.08987841652 0.06119708305 1.00709108 -0.477145536
--0.8787238558 1.207196902 0.9239763198 -0.02805539928 -1.955888008 
-0.3390472793 2.582672951 -0.9409297108 -0.4927776515 -0.600961771
-
-#More errors in matrix-matrix multiply
-#> t 2e-15
-1 0 0 0 0 0 0 0 0 0
-0 1 0 0 0 0 0 0 0 0
-0 0 1 0 0 0 0 0 0 0
-0 0 0 1 0 0 0 0 0 0
-0 0 0 0 1 0 0 0 0 0
-0 0 0 0 0 1 0 0 0 0
-0 0 0 0 0 0 1 0 0 0
-0 0 0 0 0 0 0 1 0 0
-0 0 0 0 0 0 0 0 1 0
-0 0 0 0 0 0 0 0 0 1
-
-#> t 1e-18
--1.551543207 -0.6170670429 -0.01958382347 0.5329244158 2.811560915 
0.2566023602 -0.960779849 -0.2223209796 -0.2455688735 1.013525462
--1.426671321 0.710147444 -0.5562041531 0.7238990064 1.303602262 0.01983165255 
1.157534206 -0.7281900184 -1.027510747 0.003788887042
-0.3009307806 -1.566556566 -0.07073552232 0.6160470071 1.224820531 0.2588621457 
-0.7573429524 -0.02303798156 0.2934242048 0.4443150044
-1.764758704 -0.8150240542 1.098587487 -0.3268667315 0.02153549423 0.2168926172 
-1.594789032 0.03681640417 0.2301763236 -0.1767072075
-1.897529332 -0.04294243314 -0.249874082 -1.030103757 -1.160903179 0.6282496553 
-1.602078304 0.3579156554 0.4060880781 0.8911522925
--1.105668985 0.8301231929 -0.5990176892 0.6342165265 0.2529281369 -0.861275016 
0.7874166282 -0.8958773159 0.4667702043 0.02395407106
-1.306478199 1.436191451 -0.002947540335 -1.025853643 -3.239998669 -0.747333896 
1.377343306 0.8332918069 0.1386250684 -0.6068951722
-0.03043670964 -0.4138316668 0.1953495288 0.692959407 -0.2368993519 
0.6543598778 -0.4719442413 1.236594252 -0.3576214366 -0.518558341
--0.02115899807 -0.2928083293 -0.2559350939 -0.6613822999 0.3744957069 
0.03602627845 0.08987841652 0.06119708305 1.00709108 -0.477145536
--0.8787238558 1.207196902 0.9239763198 -0.02805539928 -1.955888008 
-0.3390472793 2.582672951 -0.9409297108 -0.4927776515 -0.600961771
-
-#> t 2e-15
-1 0 0 0 0 0 0 0 0 0
-0 1 0 0 0 0 0 0 0 0
-0 0 1 0 0 0 0 0 0 0
-0 0 0 1 0 0 0 0 0 0
-0 0 0 0 1 0 0 0 0 0
-0 0 0 0 0 1 0 0 0 0
-0 0 0 0 0 0 1 0 0 0
-0 0 0 0 0 0 0 1 0 0
-0 0 0 0 0 0 0 0 1 0
-0 0 0 0 0 0 0 0 0 1

Index: regressions/qr.cc
===================================================================
RCS file: regressions/qr.cc
diff -N regressions/qr.cc
--- regressions/qr.cc   6 Apr 2010 16:58:55 -0000       1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,33 +0,0 @@
-#include "regressions/regression.h"
-using namespace TooN;
-using namespace std;
-
-int main()
-{
-       Matrix<3,4> m;
-       
-       m = Data(5.4388593399963903e-01,
-9.9370462412085203e-01,
-1.0969746452319418e-01,
-4.4837291206649532e-01,
-7.2104662057981139e-01,
-2.1867663239963386e-01,
-6.3591370975105699e-02,
-3.6581617683817125e-01,
-5.2249530577710213e-01,
-1.0579827325022817e-01,
-4.0457999585762583e-01,
-7.6350464084881342e-01);
-       
-       cout << setprecision(20) << scientific;
-       cout << m << endl;
-
-       QR_Lapack<3, 4> q(m);
-
-       cout << q.get_R() << endl;
-       cout << q.get_Q() << endl;
-
-       cout << q.get_Q() * q.get_R() - m << endl;
-
-}
-

Index: regressions/qr.txt
===================================================================
RCS file: regressions/qr.txt
diff -N regressions/qr.txt
--- regressions/qr.txt  6 Apr 2010 16:58:55 -0000       1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,23 +0,0 @@
-#The matrix
-5.4388593399963903e-01 9.9370462412085203e-01 1.0969746452319418e-01 
4.4837291206649532e-01
-7.2104662057981139e-01 2.1867663239963386e-01 6.3591370975105699e-02 
3.6581617683817125e-01
-5.2249530577710213e-01 1.0579827325022817e-01 4.0457999585762583e-01 
7.6350464084881342e-01
-
-#QR decomp computed using MATLAB
-
-#> t 1e-10
-
-#R
--1.0434181725517979e+00 -7.2206631564721513e-01 -3.0371945598870015e-01 
-8.6883845111442815e-01
-0.0000000000000000e+00 7.2462532386550971e-01 -7.3953941785256813e-02 
-2.9029928014361439e-02
-0.0000000000000000e+00 0.0000000000000000e+00 2.8643965469504806e-01 
4.0258674748893997e-01
-
-#Q
--5.2125403630790146e-01 8.5192253468958445e-01 5.0221753461968818e-02
--6.9104280483864855e-01 -3.8682349403614080e-01 -6.1059595997877780e-01
--5.0075350374555994e-01 -3.5298099006850986e-01 7.9034824548220517e-01
-
-#Difference
-0 0 0 0 
-0 0 0 0 
-0 0 0 0 

Index: regressions/regression.h
===================================================================
RCS file: regressions/regression.h
diff -N regressions/regression.h
--- regressions/regression.h    6 Apr 2010 16:58:55 -0000       1.3
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,9 +0,0 @@
-#include <TooN/TooN.h>
-#include <TooN/LU.h>
-#include <TooN/SVD.h>
-#include <TooN/QR_Lapack.h>
-#include <TooN/helpers.h>
-#include <TooN/determinant.h>
-#include <iomanip>
-using namespace std;
-using namespace TooN;

Index: regressions/simplex.cc
===================================================================
RCS file: regressions/simplex.cc
diff -N regressions/simplex.cc
--- regressions/simplex.cc      29 Jun 2010 14:03:07 -0000      1.3
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,56 +0,0 @@
-#include <TooN/optimization/downhill_simplex.h>
-#include <iomanip>
-using namespace std;
-using namespace TooN;
-
-
-double sq(double x)
-{
-       return x*x;
-}
-
-double Rosenbrock(const Vector<2>& v)
-{
-               return sq(1 - v[0]) + 100 * sq(v[1] - sq(v[0]));
-}
-
-double Spiral(const Vector<2>& v)
-{
-       double x = v[0];
-       double y = v[1];
-       return sin(20.0*sqrt(x*x+y*y)+2.0*atan(y/x))+2.0*x*x+2.0*y*y;
-}
-
-
-int main()
-{
-       cout << setprecision(16);
-       Vector<2> starting_point = makeVector(1.5, 1.5);
-
-       DownhillSimplex<2> dh_fixed(Spiral, starting_point, .001);
-       
-       cout << "#> ignore" << endl;
-
-       while(dh_fixed.iterate(Spiral))
-       {
-               cout << dh_fixed.get_simplex()[0] << dh_fixed.get_values()[0] 
<< endl;
-               cout << dh_fixed.get_simplex()[1] << dh_fixed.get_values()[1] 
<< endl;
-               cout << dh_fixed.get_simplex()[2] << dh_fixed.get_values()[2] 
<< endl;
-               cout << endl;
-       }
-
-       cout << "#> resume" << endl;
-
-       cout << dh_fixed.get_simplex()[dh_fixed.get_best()] << endl
-            << dh_fixed.get_values()[dh_fixed.get_best()] << endl;
-
-       DownhillSimplex<> dh_variable(Spiral, starting_point, .001);
-
-       while(dh_variable.iterate(Spiral))
-       {}
-
-       cout << dh_variable.get_simplex()[dh_variable.get_best()] << endl
-            << dh_variable.get_values()[dh_variable.get_best()] << endl;
-}
-
-

Index: regressions/simplex.txt
===================================================================
RCS file: regressions/simplex.txt
diff -N regressions/simplex.txt
--- regressions/simplex.txt     21 Oct 2009 12:35:07 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,10 +0,0 @@
-#The minimm is at f(0, 0) = -1
-#> t 1e-7
-
-#Fixed sized solver
-0 0
--1
-
-#Variable sized solver
-0 0 
--1

Index: regressions/slice.cc
===================================================================
RCS file: regressions/slice.cc
diff -N regressions/slice.cc
--- regressions/slice.cc        14 Feb 2010 12:25:09 -0000      1.4
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,20 +0,0 @@
-#include "regressions/regression.h"
-
-int main()
-{
-       Vector<5> v = makeVector(1, 2, 3, 4, 5);
-       cout << v.slice<0,3>() << endl;
-
-       Matrix<3> m = Data(1, 2, 3, 4, 5, 6, 7, 8, 9);
-       const Matrix<3> n = m;
-
-       cout << m.slice<0,0,2,2>() << endl;
-       cout << n.slice<0,0,2,2>() << endl;
-
-       cout << m.slice(0,0,2,2) << endl;
-       cout << n.slice(0,0,2,2) << endl;
-
-       const Vector<4> cv = makeVector(3,4,5,6);
-       cout << cv.slice<0,2>() << endl;
-       cout << cv.slice(0,2) << endl;
-}

Index: regressions/slice.txt
===================================================================
RCS file: regressions/slice.txt
diff -N regressions/slice.txt
--- regressions/slice.txt       14 Feb 2010 12:25:10 -0000      1.4
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,16 +0,0 @@
-1 2 3
-
-1 2
-4 5
-
-1 2
-4 5
- 
-1 2
-4 5
-
-1 2
-4 5
-
-3 4
-3 4

Index: regressions/so3.cc
===================================================================
RCS file: regressions/so3.cc
diff -N regressions/so3.cc
--- regressions/so3.cc  18 Jan 2010 15:24:12 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,19 +0,0 @@
-#include <TooN/so3.h>
-#include <cmath>
-
-using namespace TooN;
-using namespace std;
-
-int main()
-{
-       Vector<3> v = makeVector(M_PI, 0, 0);
-
-       cout << SO3<>::exp(v);
-
-       const Vector<3>& u(v);
-
-       cout << SO3<>::exp(u);
-
-       cout << SO3<>::exp(u.as_slice());
-
-}

Index: regressions/so3.txt
===================================================================
RCS file: regressions/so3.txt
diff -N regressions/so3.txt
--- regressions/so3.txt 18 Jan 2010 15:24:12 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,12 +0,0 @@
-#< t 1e-15
-1  0  0
-0 -1  0
-0  0 -1
-
-1  0  0
-0 -1  0
-0  0 -1
-
-1  0  0
-0 -1  0
-0  0 -1

Index: regressions/sym_eigen.cc
===================================================================
RCS file: regressions/sym_eigen.cc
diff -N regressions/sym_eigen.cc
--- regressions/sym_eigen.cc    7 Dec 2009 12:45:29 -0000       1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,95 +0,0 @@
-#include <TooN/SymEigen.h>
-#include <TooN/SymEigen.h>
-#include <iomanip>
-
-using namespace TooN;
-using namespace std;
-
-template<int Size, int Size2>
-void test_(const Matrix<Size>& m)
-{
-       Matrix<Size2> M = m;
-       SymEigen<> e(M);
-       cout << setprecision(15);
-       cout << e.get_evectors() << endl;
-       cout << e.get_evalues() << endl;
-       cout << endl << endl;
-}
-
-template<int Size>
-void test(const Matrix<Size>& m)
-{
-       test_<Size, Size>(m);
-       test_<Size, Dynamic>(m);
-}
-
-int main()
-{
-       //Size 2 (special case)
-       test<2>(Data(
-                 -1,  0,
-                  0, -2));
-
-       test<3>(Data(
-                 -1,  0,  0,
-                  0, -2,  0, 
-                  0,  0, -3));
-
-       test<4>(Data(
-                 -1,  0,  0, 0,
-                  0, -2,  0, 0,
-                  0,  0, -3, 0,
-                  0,  0,  0, -4));
-
-test<2>(Data(2.687284882248026e-01,1.611208355913847e+00,1.611208355913847e+00,5.101380514788435e-01));
-test<2>(Data(9.908701741838820e-01,1.101084037511501e+00,1.101084037511501e+00,1.577446702271026e+00));
-test<2>(Data(1.877191735484699e-01,8.641125804418760e-01,8.641125804418760e-01,8.655341358101069e-01));
-test<2>(Data(1.524560164915884e+00,4.474932474059122e-01,4.474932474059122e-01,1.443080064681565e+00));
-test<2>(Data(4.575244425409054e-01,1.846698153165406e+00,1.846698153165406e+00,6.117996606710716e-02));
-test<2>(Data(5.089172198692169e-02,1.480561635572007e+00,1.480561635572007e+00,7.624084753764250e-01));
-test<2>(Data(4.331987942612269e-01,4.511573631575854e-01,4.511573631575854e-01,4.433833325460702e-01));
-test<2>(Data(8.757751873011442e-01,7.288966916394234e-01,7.288966916394234e-01,4.617330830819687e-01));
-test<2>(Data(4.375620746753773e-01,7.493850803282193e-01,7.493850803282193e-01,4.297941053181784e-02));
-test<2>(Data(1.675155951325146e+00,1.198748685584879e+00,1.198748685584879e+00,3.718125317894355e-01));
-test<3>(Data(1.985086824352130e+00,1.192641714155419e+00,1.057330546605266e+00,1.192641714155419e+00,1.442968815166537e+00,1.133298769656695e+00,1.057330546605266e+00,1.133298769656695e+00,1.660071386548654e+00));
-test<3>(Data(1.340611132828142e+00,1.185847511764775e+00,1.176582864126111e+00,1.185847511764775e+00,1.692394836856626e+00,5.398096507309420e-01,1.176582864126111e+00,5.398096507309420e-01,4.854799470861354e-01));
-test<3>(Data(1.594808495108606e+00,9.631127606889274e-01,5.477104220806913e-01,9.631127606889274e-01,1.406081524131263e+00,1.113447460546890e+00,5.477104220806913e-01,1.113447460546890e+00,1.016852976499964e+00));
-test<3>(Data(1.556885230000292e+00,1.010631938075403e+00,1.096637183568062e+00,1.010631938075403e+00,5.914992793381422e-02,1.026675007666201e+00,1.096637183568062e+00,1.026675007666201e+00,1.186367460760115e+00));
-test<3>(Data(7.871993727558281e-01,1.152425834394216e+00,1.362528337354033e+00,1.152425834394216e+00,1.541046279661601e+00,7.717935765127935e-01,1.362528337354033e+00,7.717935765127935e-01,1.027543326375274e+00));
-test<3>(Data(1.904934776536539e+00,8.470742852426243e-01,4.648408613610614e-01,8.470742852426243e-01,1.095992618932498e+00,1.740771514075617e+00,4.648408613610614e-01,1.740771514075617e+00,1.640971823850964e+00));
-test<3>(Data(1.772359161652016e+00,1.259181695356198e+00,8.652631983932200e-01,1.259181695356198e+00,1.122715729556758e+00,1.296100834864790e+00,8.652631983932200e-01,1.296100834864790e+00,1.139998667752760e+00));
-test<3>(Data(3.996788403542862e-01,8.615104319738192e-01,1.108414565025239e+00,8.615104319738192e-01,6.921558380363099e-01,1.150931260520570e+00,1.108414565025239e+00,1.150931260520570e+00,9.162936001994489e-01));
-test<3>(Data(5.594996816768481e-02,8.140659020554653e-01,9.743088215740789e-01,8.140659020554653e-01,1.722017721706650e+00,1.614876311138117e+00,9.743088215740789e-01,1.614876311138117e+00,5.105880801746120e-01));
-test<3>(Data(1.683489664548192e+00,6.898041555542667e-01,3.327933634573208e-01,6.898041555542667e-01,2.911994984962472e-02,8.650754025465576e-01,3.327933634573208e-01,8.650754025465576e-01,1.249604168304953e+00));
-test<4>(Data(6.888457281929899e-01,2.376603247532757e-01,4.816272910811735e-01,9.482990782570888e-01,2.376603247532757e-01,5.458288736373603e-01,1.185360941355552e+00,6.427409347969769e-01,4.816272910811735e-01,1.185360941355552e+00,4.726915526397422e-02,4.953187972068833e-01,9.482990782570888e-01,6.427409347969769e-01,4.953187972068833e-01,1.799637000712040e+00));
-test<4>(Data(1.020231961857353e+00,2.299091010610576e-01,7.658762326637212e-01,1.037639416400564e+00,2.299091010610576e-01,3.572904165559074e-02,8.510673682513485e-01,1.694429990579673e+00,7.658762326637212e-01,8.510673682513485e-01,1.356351590553895e+00,1.342513021285055e+00,1.037639416400564e+00,1.694429990579673e+00,1.342513021285055e+00,1.033199033898786e+00));
-test<4>(Data(4.463915604933416e-01,9.697522274443817e-01,1.362801320009189e+00,8.862095901411908e-01,9.697522274443817e-01,1.261895722542694e+00,9.343193604416505e-01,1.237894381758296e+00,1.362801320009189e+00,9.343193604416505e-01,6.127732406664920e-01,1.602356525023680e+00,8.862095901411908e-01,1.237894381758296e+00,1.602356525023680e+00,8.323445255300511e-01));
-test<4>(Data(5.047162045596708e-01,8.278943730764661e-01,1.746498962643840e+00,4.158853649421888e-01,8.278943730764661e-01,1.924402250361636e+00,1.544055806404872e+00,5.184479797403404e-01,1.746498962643840e+00,1.544055806404872e+00,1.408046284660143e+00,7.146355033725953e-01,4.158853649421888e-01,5.184479797403404e-01,7.146355033725953e-01,1.348306028493728e+00));
-test<4>(Data(8.659002422006327e-01,4.901913180683413e-01,1.004102492476296e+00,1.653007246206709e+00,4.901913180683413e-01,9.995998444736033e-01,3.434386385164682e-01,1.654321883152931e+00,1.004102492476296e+00,3.434386385164682e-01,4.017060228815189e-01,6.668363529472013e-01,1.653007246206709e+00,1.654321883152931e+00,6.668363529472013e-01,4.260595927616276e-01));
-test<4>(Data(1.348910139447526e+00,1.720094272620428e+00,1.166827906764666e+00,1.254837598298888e+00,1.720094272620428e+00,1.374220364307315e+00,1.209963908853767e+00,1.198476424817222e+00,1.166827906764666e+00,1.209963908853767e+00,1.693604608329685e-01,9.288103245108279e-01,1.254837598298888e+00,1.198476424817222e+00,9.288103245108279e-01,1.200417660264499e+00));
-test<4>(Data(1.682264391411710e+00,1.235527822992552e+00,4.756312123974411e-01,3.644087062434833e-01,1.235527822992552e+00,1.207965057783422e+00,1.505477931241406e+00,1.753433462083535e+00,4.756312123974411e-01,1.505477931241406e+00,2.085499960292273e-01,8.272542473221369e-01,3.644087062434833e-01,1.753433462083535e+00,8.272542473221369e-01,1.657011942938227e+00));
-test<4>(Data(6.817949282331669e-01,1.185967558158060e+00,1.672671729488060e+00,6.552223949460858e-01,1.185967558158060e+00,4.474281454975385e-01,6.461900955925911e-01,1.053738306542065e+00,1.672671729488060e+00,6.461900955925911e-01,1.850134404216947e+00,1.285537415686975e+00,6.552223949460858e-01,1.053738306542065e+00,1.285537415686975e+00,2.476348897333334e-02));
-test<4>(Data(1.340823278047862e+00,1.317066595066826e-01,2.306606790202007e-01,9.878942163659709e-01,1.317066595066826e-01,4.792667297350187e-01,1.155541936067364e+00,1.331778005709601e+00,2.306606790202007e-01,1.155541936067364e+00,4.828405701956863e-01,1.122283687081234e+00,9.878942163659709e-01,1.331778005709601e+00,1.122283687081234e+00,1.940528073056421e+00));
-test<4>(Data(1.818445456301423e+00,3.941527288989999e-01,1.235993762591590e+00,7.902909570411959e-01,3.941527288989999e-01,1.304100398978834e+00,3.351700734626224e-01,7.347094156631770e-02,1.235993762591590e+00,3.351700734626224e-01,1.193141286376883e+00,1.363236551796038e+00,7.902909570411959e-01,7.347094156631770e-02,1.363236551796038e+00,1.939626553676231e+00));
-test<5>(Data(1.939593008992940e+00,6.542755076116075e-01,5.225143878486120e-01,1.065709120544851e+00,1.286737180741591e+00,6.542755076116075e-01,1.376379616095425e+00,9.082156249604416e-01,9.110965263663156e-01,8.688436776000987e-01,5.225143878486120e-01,9.082156249604416e-01,1.627375307675757e-01,9.242528038345172e-01,1.300111864105005e+00,1.065709120544851e+00,9.110965263663156e-01,9.242528038345172e-01,1.881469044498000e+00,1.237613316965138e+00,1.286737180741591e+00,8.688436776000987e-01,1.300111864105005e+00,1.237613316965138e+00,1.787000491043202e+00));
-test<5>(Data(6.056186593450327e-01,5.794314095460106e-01,6.151417817217186e-01,1.072246479067222e+00,6.730695262649204e-01,5.794314095460106e-01,4.074805689250480e-02,3.188890920824389e-01,9.349765116511203e-01,1.500432703888442e+00,6.151417817217186e-01,3.188890920824389e-01,1.270764187126114e+00,4.450011465822398e-01,9.654268662538961e-01,1.072246479067222e+00,9.349765116511203e-01,4.450011465822398e-01,1.002859171893387e+00,1.571192476731960e+00,6.730695262649204e-01,1.500432703888442e+00,9.654268662538961e-01,1.571192476731960e+00,1.969791742288145e+00));
-test<5>(Data(1.643100289487029e+00,6.132734971636735e-01,4.229464123424428e-01,1.260543136459771e+00,1.634181391179499e+00,6.132734971636735e-01,1.787517595391580e+00,1.044768930740807e+00,1.600076853692999e+00,6.995386855828787e-01,4.229464123424428e-01,1.044768930740807e+00,1.607712561967944e+00,1.085308632641121e+00,1.093304930040621e+00,1.260543136459771e+00,1.600076853692999e+00,1.085308632641121e+00,8.652760019524740e-01,2.223111370998220e-01,1.634181391179499e+00,6.995386855828787e-01,1.093304930040621e+00,2.223111370998220e-01,1.926771766643151e+00));
-test<5>(Data(1.616505256744793e+00,9.449803761132867e-01,9.580615342833907e-01,9.764216816168703e-01,1.065754600615157e+00,9.449803761132867e-01,6.773382897901178e-01,8.285727240494942e-01,2.835214717409323e-01,8.799684972959469e-01,9.580615342833907e-01,8.285727240494942e-01,1.246432616070422e-01,1.183877824671454e+00,1.457612869972322e-01,9.764216816168703e-01,2.835214717409323e-01,1.183877824671454e+00,7.955946261297456e-01,9.297838918076147e-01,1.065754600615157e+00,8.799684972959469e-01,1.457612869972322e-01,9.297838918076147e-01,1.001799239114453e+00));
-test<5>(Data(1.297679184681707e+00,9.333892063577268e-01,1.593452635164049e+00,8.029733373889689e-01,1.121384244537570e+00,9.333892063577268e-01,9.576537751635869e-01,1.142768668876989e+00,9.239378421175475e-01,8.722094663232913e-01,1.593452635164049e+00,1.142768668876989e+00,5.504507269315982e-01,1.523839254589076e+00,7.407543079642184e-01,8.029733373889689e-01,9.239378421175475e-01,1.523839254589076e+00,3.189354615156622e-01,1.615018981283887e+00,1.121384244537570e+00,8.722094663232913e-01,7.407543079642184e-01,1.615018981283887e+00,7.432286614951299e-01));
-test<5>(Data(1.402565325815617e+00,1.696496933540177e+00,1.164095154438696e+00,1.204258646869812e+00,1.877825429264508e+00,1.696496933540177e+00,1.142465388435091e+00,9.340260098729121e-01,7.656512131707212e-01,1.025562421954253e+00,1.164095154438696e+00,9.340260098729121e-01,1.042664422843730e-01,8.464346076386431e-01,1.345601765349651e+00,1.204258646869812e+00,7.656512131707212e-01,8.464346076386431e-01,1.459792300973997e+00,3.082349319836607e-01,1.877825429264508e+00,1.025562421954253e+00,1.345601765349651e+00,3.082349319836607e-01,1.825725780184864e+00));
-test<5>(Data(1.918877675754143e+00,8.395339254382015e-01,1.578468781116072e+00,1.750815618446228e+00,7.778073873157717e-01,8.395339254382015e-01,8.901174642290234e-01,1.357229394005464e+00,1.930631608240425e+00,6.778288276319916e-01,1.578468781116072e+00,1.357229394005464e+00,3.295084373665477e-01,4.446540092631389e-01,3.745464459154907e-01,1.750815618446228e+00,1.930631608240425e+00,4.446540092631389e-01,1.201358162374117e+00,1.157800908898340e+00,7.778073873157717e-01,6.778288276319916e-01,3.745464459154907e-01,1.157800908898340e+00,8.017911908091957e-03));
-test<5>(Data(3.796774078661674e-01,1.274105421002801e+00,6.067727564888302e-01,1.601142698087327e+00,1.176172167965539e+00,1.274105421002801e+00,4.132116313703694e-01,5.356638430115981e-01,1.087716434578617e+00,6.564820819791958e-01,6.067727564888302e-01,5.356638430115981e-01,1.367054305171915e+00,1.281899998197016e+00,1.092702065897367e+00,1.601142698087327e+00,1.087716434578617e+00,1.281899998197016e+00,1.711395399597287e+00,8.772065945935473e-01,1.176172167965539e+00,6.564820819791958e-01,1.092702065897367e+00,8.772065945935473e-01,1.615098178746561e+00));
-test<5>(Data(2.361430610613312e-01,1.720785019268097e+00,1.048319577974643e+00,1.414497472525587e+00,1.253364792744898e+00,1.720785019268097e+00,2.731880258796152e-01,8.571902374352325e-01,8.773774753866661e-01,9.589196991546567e-01,1.048319577974643e+00,8.571902374352325e-01,1.056787942702887e+00,4.002474655454302e-01,8.198725439634420e-01,1.414497472525587e+00,8.773774753866661e-01,4.002474655454302e-01,1.566174622343982e+00,8.873269343994827e-01,1.253364792744898e+00,9.589196991546567e-01,8.198725439634420e-01,8.873269343994827e-01,7.751315755111543e-03));
-test<5>(Data(5.552425032188438e-01,1.585182343763088e+00,1.869254624293378e+00,1.188843281973684e+00,1.372205516848743e+00,1.585182343763088e+00,9.231619477396068e-01,1.139930078534815e+00,4.124845833780225e-01,1.329058644820864e+00,1.869254624293378e+00,1.139930078534815e+00,3.406256504265687e-01,1.009196350337465e+00,1.264786972827202e+00,1.188843281973684e+00,4.124845833780225e-01,1.009196350337465e+00,8.517389442073203e-01,1.303161243375429e+00,1.372205516848743e+00,1.329058644820864e+00,1.264786972827202e+00,1.303161243375429e+00,1.497546927150275e+00));
-test<6>(Data(9.854041038100939e-01,1.375030371574434e+00,1.455681262486292e+00,1.192992192466221e+00,1.139956281478751e+00,9.141625719631343e-01,1.375030371574434e+00,1.267465021891255e+00,1.542580354269188e+00,9.345436523283233e-01,1.591015732055808e+00,1.713626885675192e+00,1.455681262486292e+00,1.542580354269188e+00,6.989001767733675e-01,1.097558543515565e+00,1.130617838210569e+00,1.564389666751667e+00,1.192992192466221e+00,9.345436523283233e-01,1.097558543515565e+00,9.690861578229354e-01,8.222799418667358e-01,4.473117881029319e-01,1.139956281478751e+00,1.591015732055808e+00,1.130617838210569e+00,8.222799418667358e-01,1.313687077797704e+00,7.086496236915464e-01,9.141625719631343e-01,1.713626885675192e+00,1.564389666751667e+00,4.473117881029319e-01,7.086496236915464e-01,1.209987838631917e+00));
-test<6>(Data(4.177787829651355e-01,7.309060983063167e-01,1.599462288098870e+00,4.414321821345253e-01,7.815750907616501e-01,1.262443213488635e+00,7.309060983063167e-01,7.364163319459055e-01,1.326522366061011e+00,1.526493313232542e+00,1.012346230132255e+00,1.414659991737551e+00,1.599462288098870e+00,1.326522366061011e+00,5.395212673522768e-01,1.476384195314694e+00,2.626483533109071e-01,1.346456629550510e+00,4.414321821345253e-01,1.526493313232542e+00,1.476384195314694e+00,6.592871206410572e-01,1.121711873465768e+00,1.153689285237264e+00,7.815750907616501e-01,1.012346230132255e+00,2.626483533109071e-01,1.121711873465768e+00,1.244904121795273e+00,9.424156595790476e-01,1.262443213488635e+00,1.414659991737551e+00,1.346456629550510e+00,1.153689285237264e+00,9.424156595790476e-01,3.312590550043154e-01));
-test<6>(Data(1.946099662470022e+00,9.701688792107175e-01,1.153638609117045e+00,1.220609345114130e+00,8.228176953552302e-01,6.044271969967835e-01,9.701688792107175e-01,2.772394832739716e-01,8.562561355535638e-01,8.157239809334441e-01,3.958032042102687e-01,1.589244929517287e+00,1.153638609117045e+00,8.562561355535638e-01,1.436953852793555e+00,4.922571414202965e-01,8.103090282988242e-01,5.150749604002565e-01,1.220609345114130e+00,8.157239809334441e-01,4.922571414202965e-01,1.106861056309610e-01,1.412424130344729e+00,1.581513061561543e+00,8.228176953552302e-01,3.958032042102687e-01,8.103090282988242e-01,1.412424130344729e+00,1.928243173467779e+00,7.084098060753384e-01,6.044271969967835e-01,1.589244929517287e+00,5.150749604002565e-01,1.581513061561543e+00,7.084098060753384e-01,7.994114940347977e-01));
-test<6>(Data(9.900457628043579e-01,9.578270177558510e-01,1.162990987690468e+00,8.119710722785607e-01,1.733829917863744e+00,5.925546633194234e-01,9.578270177558510e-01,4.238140352323191e-01,7.611530070996787e-01,1.248957490117976e+00,6.087996400759921e-01,1.372376336649072e+00,1.162990987690468e+00,7.611530070996787e-01,1.594885423857382e+00,1.257516418698924e+00,4.647526872540805e-01,1.223127969736719e+00,8.119710722785607e-01,1.248957490117976e+00,1.257516418698924e+00,1.760060337546824e+00,1.423371741090863e+00,1.058357431055412e+00,1.733829917863744e+00,6.087996400759921e-01,4.647526872540805e-01,1.423371741090863e+00,1.142393732777850e-01,4.149595259960687e-01,5.925546633194234e-01,1.372376336649072e+00,1.223127969736719e+00,1.058357431055412e+00,4.149595259960687e-01,1.217035133377292e-01));
-test<6>(Data(1.681248070730645e+00,6.803277959204640e-01,9.046532887873564e-01,7.079322159870449e-01,4.442652593332287e-01,7.411693391707319e-01,6.803277959204640e-01,1.489228535879713e+00,1.656366184927379e+00,1.195237514528635e+00,1.075666211438244e+00,1.132984987947849e+00,9.046532887873564e-01,1.656366184927379e+00,1.283206666046505e+00,8.484444837531611e-01,2.595524363187953e-01,1.656281290652794e+00,7.079322159870449e-01,1.195237514528635e+00,8.484444837531611e-01,1.120515192126947e+00,1.402277004015053e+00,8.130131436685561e-01,4.442652593332287e-01,1.075666211438244e+00,2.595524363187953e-01,1.402277004015053e+00,8.482395547616589e-01,9.139663595532090e-01,7.411693391707319e-01,1.132984987947849e+00,1.656281290652794e+00,8.130131436685561e-01,9.139663595532090e-01,1.952807353385793e+00));
-test<6>(Data(3.020195075677202e-01,1.731703197331623e+00,1.297918551358270e+00,1.376673849783057e+00,7.854174293438340e-01,3.949625567079564e-01,1.731703197331623e+00,9.383336529303760e-01,4.984563141666034e-01,1.075064067264616e+00,3.533246283370877e-01,9.562954148245784e-01,1.297918551358270e+00,4.984563141666034e-01,7.903765255719749e-01,1.508040861965537e+00,1.012320508855456e+00,2.700097057175970e-01,1.376673849783057e+00,1.075064067264616e+00,1.508040861965537e+00,1.715705588734092e-01,8.287655431023101e-01,9.414136950937948e-01,7.854174293438340e-01,3.533246283370877e-01,1.012320508855456e+00,8.287655431023101e-01,1.613838763790370e+00,1.185966965562320e+00,3.949625567079564e-01,9.562954148245784e-01,2.700097057175970e-01,9.414136950937948e-01,1.185966965562320e+00,6.773266719180365e-01));
-test<6>(Data(1.567242836819473e+00,1.944326717066535e+00,1.415757383944767e+00,4.500672165758181e-01,9.508959139397790e-01,5.973682168189969e-01,1.944326717066535e+00,1.438762990295974e+00,1.126111994121538e+00,1.276191924400192e+00,8.882351465742122e-01,1.811236394245852e+00,1.415757383944767e+00,1.126111994121538e+00,3.140637904401750e-01,4.139264873395463e-01,8.463663687777288e-01,4.229530185029624e-01,4.500672165758181e-01,1.276191924400192e+00,4.139264873395463e-01,1.629897353037659e+00,1.399630822642031e+00,6.412146239779757e-01,9.508959139397790e-01,8.882351465742122e-01,8.463663687777288e-01,1.399630822642031e+00,1.002113714942505e+00,5.949745369976590e-01,5.973682168189969e-01,1.811236394245852e+00,4.229530185029624e-01,6.412146239779757e-01,5.949745369976590e-01,1.958823163503591e+00));
-test<6>(Data(9.593956836185179e-01,1.835174060934281e+00,1.711565792463736e+00,1.372326751708358e+00,1.502871484389261e+00,9.755482590936007e-01,1.835174060934281e+00,1.602735356332371e+00,8.374974326976390e-01,9.882832995834494e-01,1.138379543919168e+00,1.091719934571643e+00,1.711565792463736e+00,8.374974326976390e-01,1.493298073688877e+00,1.341332691394209e+00,1.849119819027721e+00,1.189208791043249e+00,1.372326751708358e+00,9.882832995834494e-01,1.341332691394209e+00,1.064256794863076e+00,3.523978799238592e-01,4.140842107294748e-01,1.502871484389261e+00,1.138379543919168e+00,1.849119819027721e+00,3.523978799238592e-01,8.222176274537402e-01,8.348978148702458e-01,9.755482590936007e-01,1.091719934571643e+00,1.189208791043249e+00,4.140842107294748e-01,8.348978148702458e-01,5.233951369937245e-01));
-test<6>(Data(1.264282175469642e+00,6.997446950711939e-01,3.622491663328203e-01,7.484117832882142e-01,1.848786944103862e+00,1.130314774175558e+00,6.997446950711939e-01,1.723668134690669e+00,9.131308778430866e-01,9.125811071145220e-01,1.104190922483678e+00,1.114021483237272e+00,3.622491663328203e-01,9.131308778430866e-01,1.196156002485981e+00,1.810228557047883e+00,1.094157004680496e+00,1.308141007738278e+00,7.484117832882142e-01,9.125811071145220e-01,1.810228557047883e+00,1.596321485670778e+00,1.472601313923906e+00,1.610264252268397e+00,1.848786944103862e+00,1.104190922483678e+00,1.094157004680496e+00,1.472601313923906e+00,1.540665021251389e+00,1.098881395918645e+00,1.130314774175558e+00,1.114021483237272e+00,1.308141007738278e+00,1.610264252268397e+00,1.098881395918645e+00,8.023816871384190e-02));
-test<6>(Data(1.702283188520101e+00,5.784983249624531e-01,7.617287557893517e-01,7.076550446358687e-01,1.241328942884413e+00,5.714155925588476e-01,5.784983249624531e-01,6.053072737528674e-01,1.438568161997491e+00,1.376825682048585e+00,1.947371428840764e+00,9.113918920302084e-01,7.617287557893517e-01,1.438568161997491e+00,1.051254427603433e+00,8.497999786745636e-01,9.815387888217955e-01,1.355507618184534e+00,7.076550446358687e-01,1.376825682048585e+00,8.497999786745636e-01,6.038207729301405e-01,1.142981763584831e+00,1.522790750856093e+00,1.241328942884413e+00,1.947371428840764e+00,9.815387888217955e-01,1.142981763584831e+00,1.989062017562657e+00,1.631465736125124e+00,5.714155925588476e-01,9.113918920302084e-01,1.355507618184534e+00,1.522790750856093e+00,1.631465736125124e+00,1.339352578197877e+00));
-
-}

Index: regressions/sym_eigen.m
===================================================================
RCS file: regressions/sym_eigen.m
diff -N regressions/sym_eigen.m
--- regressions/sym_eigen.m     7 Dec 2009 12:45:29 -0000       1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,35 +0,0 @@
-rand('state', 1)
-o = fopen('tmpfile', 'w')
-for r=[2 3 4 5 6]
-       
-       for n =1:10
-               m = rand(r,r);
-               m = m + m';
-
-               ml = m';
-               ml = ml(:);
-
-               %fprintf('test<%i>(Data(%.15e', r, ml(1));
-               %fprintf(',%.15e', ml(2:end));
-               %fprintf('));\n');
-
-               [vec, tmp] = eig(m);
-               vals = eig(m);
-
-               for i=1:r
-                       fprintf(o, '%.15e ', vec(:,i))
-                       fprintf(o, '\n');
-               end
-               fprintf(o, '%.15e ', vals)
-               fprintf(o, '\n\n\n\n\n');
-
-               for i=1:r
-                       fprintf(o, '%.15e ', vec(:,i))
-                       fprintf(o, '\n');
-               end
-               fprintf(o, '%.15e ', vals)
-               fprintf(o, '\n\n\n\n\n');
-
-
-       end
-end

Index: regressions/sym_eigen.txt
===================================================================
RCS file: regressions/sym_eigen.txt
diff -N regressions/sym_eigen.txt
--- regressions/sym_eigen.txt   7 Dec 2009 12:45:29 -0000       1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,932 +0,0 @@
-#Some simple matrices with easy decompositions
-0 1
-1 0
--2 -1
-
-0 1
-1 0
--2 -1
-
-0 0 1
-0 1 0
-1 0 0 
--3 -2 -1
-
-0 0 1
-0 1 0
-1 0 0 
--3 -2 -1
-
-0 0 0 1
-0 0 1 0
-0 1 0 0
-1 0 0 0
--4 -3 -2 -1
-
-0 0 0 1
-0 0 1 0
-0 1 0 0
-1 0 0 0
--4 -3 -2 -1
-
-
--7.330437713167527e-01 6.801814679434544e-01 
-6.801814679434544e-01 7.330437713167527e-01 
--1.226290100801157e+00 2.005156640504803e+00 
-
-
-
-
--7.330437713167527e-01 6.801814679434544e-01 
-6.801814679434544e-01 7.330437713167527e-01 
--1.226290100801157e+00 2.005156640504803e+00 
-
-
-
-
--7.929025360489435e-01 6.093484785630910e-01 
-6.093484785630910e-01 7.929025360489435e-01 
-1.446830925142084e-01 2.423633783940700e+00 
-
-
-
-
--7.929025360489435e-01 6.093484785630910e-01 
-6.093484785630910e-01 7.929025360489435e-01 
-1.446830925142084e-01 2.423633783940700e+00 
-
-
-
-
--8.261733154916449e-01 5.634160565421817e-01 
-5.634160565421817e-01 8.261733154916449e-01 
--4.015698937113818e-01 1.454823203069959e+00 
-
-
-
-
--8.261733154916449e-01 5.634160565421817e-01 
-5.634160565421817e-01 8.261733154916449e-01 
--4.015698937113818e-01 1.454823203069959e+00 
-
-
-
-
-6.742901336853773e-01 -7.384665297862566e-01 
--7.384665297862566e-01 -6.742901336853773e-01 
-1.034476195114216e+00 1.933164034483233e+00 
-
-
-
-
-6.742901336853773e-01 -7.384665297862566e-01 
--7.384665297862566e-01 -6.742901336853773e-01 
-1.034476195114216e+00 1.933164034483233e+00 
-
-
-
-
-6.683191403556208e-01 -7.438746713219397e-01 
--7.438746713219397e-01 -6.683191403556208e-01 
--1.597948607334309e+00 2.116653015942321e+00 
-
-
-
-
-6.683191403556208e-01 -7.438746713219397e-01 
--7.438746713219397e-01 -6.683191403556208e-01 
--1.597948607334309e+00 2.116653015942321e+00 
-
-
-
-
--7.853776074151738e-01 6.190169737340140e-01 
-6.190169737340140e-01 7.853776074151738e-01 
--1.116053673992494e+00 1.929353871355841e+00 
-
-
-
-
--7.853776074151738e-01 6.190169737340140e-01 
-6.190169737340140e-01 7.853776074151738e-01 
--1.116053673992494e+00 1.929353871355841e+00 
-
-
-
-
--7.110859319288821e-01 7.031051112122804e-01 
-7.031051112122804e-01 7.110859319288821e-01 
--1.289503737553571e-02 8.894771641828327e-01 
-
-
-
-
--7.110859319288821e-01 7.031051112122804e-01 
-7.031051112122804e-01 7.110859319288821e-01 
--1.289503737553571e-02 8.894771641828327e-01 
-
-
-
-
-6.028209746850798e-01 -7.978764769560077e-01 
--7.978764769560077e-01 -6.028209746850798e-01 
--8.897147682077167e-02 1.426479747203885e+00 
-
-
-
-
-6.028209746850798e-01 -7.978764769560077e-01 
--7.978764769560077e-01 -6.028209746850798e-01 
--8.897147682077167e-02 1.426479747203885e+00 
-
-
-
-
-6.104934238500411e-01 -7.920213251143268e-01 
--7.920213251143268e-01 -6.104934238500411e-01 
--5.346498135369585e-01 1.015191298744154e+00 
-
-
-
-
-6.104934238500411e-01 -7.920213251143268e-01 
--7.920213251143268e-01 -6.104934238500411e-01 
--5.346498135369585e-01 1.015191298744154e+00 
-
-
-
-
-5.110704706978412e-01 -8.595388147027958e-01 
--8.595388147027958e-01 -5.110704706978412e-01 
--3.409476653194266e-01 2.387916148434008e+00 
-
-
-
-
-5.110704706978412e-01 -8.595388147027958e-01 
--8.595388147027958e-01 -5.110704706978412e-01 
--3.409476653194266e-01 2.387916148434008e+00 
-
-
-
-
--2.925511478444040e-01 8.259687004064847e-01 -4.818604900214833e-01 
--7.225774383909924e-01 1.391097847253069e-01 6.771486641218382e-01 
-6.263351111212215e-01 5.462821374917006e-01 5.561296205330787e-01 
-3.593919163199494e-01 7.646251099049126e-01 3.964109999842459e+00 
-
-
-
-
--2.925511478444040e-01 8.259687004064847e-01 -4.818604900214833e-01 
--7.225774383909924e-01 1.391097847253069e-01 6.771486641218382e-01 
-6.263351111212215e-01 5.462821374917006e-01 5.561296205330787e-01 
-3.593919163199494e-01 7.646251099049126e-01 3.964109999842459e+00 
-
-
-
-
--6.317513385784829e-01 1.642750082985154e-01 7.575644974870576e-01 
-4.195247108862840e-01 -7.493358586166384e-01 5.123424518298724e-01 
-6.518353037079805e-01 6.414900565400744e-01 4.044765063636415e-01 
--3.786452418294332e-01 6.594004517563857e-01 3.237730706843951e+00 
-
-
-
-
--6.317513385784829e-01 1.642750082985154e-01 7.575644974870576e-01 
-4.195247108862840e-01 -7.493358586166384e-01 5.123424518298724e-01 
-6.518353037079805e-01 6.414900565400744e-01 4.044765063636415e-01 
--3.786452418294332e-01 6.594004517563857e-01 3.237730706843951e+00 
-
-
-
-
--1.890826857486807e-01 6.977193704855051e-01 -6.909670165784879e-01 
-7.901250961542813e-01 -3.097040193962511e-01 -5.289477788940928e-01 
-5.830523736142865e-01 6.459652470676089e-01 4.927259169189596e-01 
-4.240515559530612e-02 8.506350633118052e-01 3.124702776832721e+00 
-
-
-
-
--1.890826857486807e-01 6.977193704855051e-01 -6.909670165784879e-01 
-7.901250961542813e-01 -3.097040193962511e-01 -5.289477788940928e-01 
-5.830523736142865e-01 6.459652470676089e-01 4.927259169189596e-01 
-4.240515559530612e-02 8.506350633118052e-01 3.124702776832721e+00 
-
-
-
-
-2.305962867628513e-01 -8.996575529332176e-01 3.707312233699765e-01 
-6.959881813873389e-01 -1.137656109854453e-01 -7.089836649220156e-01 
-6.800189731914319e-01 4.215135504433078e-01 5.999170966828231e-01 
--6.229634515390925e-01 2.745746487582436e-01 3.150791421475071e+00 
-
-
-
-
-2.305962867628513e-01 -8.996575529332176e-01 3.707312233699765e-01 
-6.959881813873389e-01 -1.137656109854453e-01 -7.089836649220156e-01 
-6.800189731914319e-01 4.215135504433078e-01 5.999170966828231e-01 
--6.229634515390925e-01 2.745746487582436e-01 3.150791421475071e+00 
-
-
-
-
--7.867475961643343e-01 2.225864082610682e-01 5.757460471310926e-01 
-2.295263543739330e-01 -7.603543438159911e-01 6.076009582678137e-01 
-5.730147228278285e-01 6.101774845875509e-01 5.471175054089898e-01 
--5.359500549334532e-01 5.764241622314963e-01 3.315314871494660e+00 
-
-
-
-
--7.867475961643343e-01 2.225864082610682e-01 5.757460471310926e-01 
-2.295263543739330e-01 -7.603543438159911e-01 6.076009582678137e-01 
-5.730147228278285e-01 6.101774845875509e-01 5.471175054089898e-01 
--5.359500549334532e-01 5.764241622314963e-01 3.315314871494660e+00 
-
-
-
-
--1.585059616151579e-01 7.756243931419496e-01 -6.109686251319595e-01 
-8.667112804023592e-01 -1.871077946385571e-01 -4.623875318483394e-01 
-4.729560408280641e-01 6.028245797482700e-01 6.425847099764855e-01 
--4.483413568380354e-01 1.474075240682319e+00 3.616165335475717e+00 
-
-
-
-
--1.585059616151579e-01 7.756243931419496e-01 -6.109686251319595e-01 
-8.667112804023592e-01 -1.871077946385571e-01 -4.623875318483394e-01 
-4.729560408280641e-01 6.028245797482700e-01 6.425847099764855e-01 
--4.483413568380354e-01 1.474075240682319e+00 3.616165335475717e+00 
-
-
-
-
--2.354087906486791e-01 7.766341740506593e-01 -5.843133243234977e-01 
--7.407803734269822e-01 2.458072084936994e-01 6.251585835593368e-01 
-6.291479473309179e-01 5.800156687100665e-01 5.174501757851737e-01 
--2.341025290231517e-01 6.243230047259110e-01 3.644853083258775e+00 
-
-
-
-
--2.354087906486791e-01 7.766341740506593e-01 -5.843133243234977e-01 
--7.407803734269822e-01 2.458072084936994e-01 6.251585835593368e-01 
-6.291479473309179e-01 5.800156687100665e-01 5.174501757851737e-01 
--2.341025290231517e-01 6.243230047259110e-01 3.644853083258775e+00 
-
-
-
-
-7.139130396186190e-01 1.467897599629723e-01 -6.846757905991102e-01 
-4.831787556617894e-01 -8.109714073237786e-01 3.299449447717221e-01 
-5.068199502186439e-01 5.663727949622075e-01 6.498887560091097e-01 
--4.862045572133646e-01 -2.893923182989530e-01 2.783725154102363e+00 
-
-
-
-
-7.139130396186190e-01 1.467897599629723e-01 -6.846757905991102e-01 
-4.831787556617894e-01 -8.109714073237786e-01 3.299449447717221e-01 
-5.068199502186439e-01 5.663727949622075e-01 6.498887560091097e-01 
--4.862045572133646e-01 -2.893923182989530e-01 2.783725154102363e+00 
-
-
-
-
-5.573466180221305e-01 3.086614606681087e-01 -7.707741887722521e-01 
-7.505353195934499e-01 -5.842771878337137e-01 3.087343547775088e-01 
-3.550513785666116e-01 7.505653006070537e-01 5.573062426553217e-01 
--8.406219405794609e-01 -1.770004686968730e-01 3.306178179325281e+00 
-
-
-
-
-5.573466180221305e-01 3.086614606681087e-01 -7.707741887722521e-01 
-7.505353195934499e-01 -5.842771878337137e-01 3.087343547775088e-01 
-3.550513785666116e-01 7.505653006070537e-01 5.573062426553217e-01 
--8.406219405794609e-01 -1.770004686968730e-01 3.306178179325281e+00 
-
-
-
-
-2.195198832745897e-01 -8.923681785283119e-01 3.943222727632481e-01 
--6.588899445594716e-01 1.624711347423700e-01 7.344842893717626e-01 
--7.194963945743764e-01 -4.210488859094508e-01 -5.523067751430210e-01 
--5.228318548030702e-01 1.142420911089146e+00 2.342624726416693e+00 
-
-
-
-
-2.195198832745897e-01 -8.923681785283119e-01 3.943222727632481e-01 
--6.588899445594716e-01 1.624711347423700e-01 7.344842893717626e-01 
--7.194963945743764e-01 -4.210488859094508e-01 -5.523067751430210e-01 
--5.228318548030702e-01 1.142420911089146e+00 2.342624726416693e+00 
-
-
-
-
-1.745036706837127e-01 6.084895934886567e-01 -7.715452590449434e-01 
-6.329926365441604e-02 
-8.517857940671616e-01 -1.257265182187516e-01 1.337523291176090e-01 
-4.906772035641974e-01 
--2.578775307914516e-01 6.673312495415888e-01 5.073830467112391e-01 
-4.803442790418002e-01 
-4.213177056049155e-01 4.106120561038868e-01 3.597091486338747e-01 
7.242226582447150e-01 
--9.558764195770446e-01 1.831197862210291e-01 8.925949772572170e-01 
2.961742413905164e+00 
-
-
-
-
-1.745036706837127e-01 6.084895934886567e-01 -7.715452590449434e-01 
-6.329926365441604e-02 
-8.517857940671616e-01 -1.257265182187516e-01 1.337523291176090e-01 
-4.906772035641974e-01 
--2.578775307914516e-01 6.673312495415888e-01 5.073830467112391e-01 
-4.803442790418002e-01 
-4.213177056049155e-01 4.106120561038868e-01 3.597091486338747e-01 
7.242226582447150e-01 
--9.558764195770446e-01 1.831197862210291e-01 8.925949772572170e-01 
2.961742413905164e+00 
-
-
-
-
-2.006655340341692e-01 7.436077366994062e-01 2.573561484702026e-02 
-6.372743173077152e-01 
--1.249863984149555e-01 -3.588770103460867e-01 8.215936954009566e-01 
-4.249346906687114e-01 
-8.910662419510055e-01 -3.935458487392852e-01 -1.314841878875224e-01 
-1.839416367518428e-01 
-3.874437973659561e-01 4.041985778128340e-01 5.541059340427652e-01 
6.160173921532777e-01 
--1.324906534059865e+00 1.737317803839640e-01 5.914810324555660e-01 
4.005205349185958e+00 
-
-
-
-
-2.006655340341692e-01 7.436077366994062e-01 2.573561484702026e-02 
-6.372743173077152e-01 
--1.249863984149555e-01 -3.588770103460867e-01 8.215936954009566e-01 
-4.249346906687114e-01 
-8.910662419510055e-01 -3.935458487392852e-01 -1.314841878875224e-01 
-1.839416367518428e-01 
-3.874437973659561e-01 4.041985778128340e-01 5.541059340427652e-01 
6.160173921532777e-01 
--1.324906534059865e+00 1.737317803839640e-01 5.914810324555660e-01 
4.005205349185958e+00 
-
-
-
-
--4.522812872727979e-01 1.538543358469097e-01 7.284432601964753e-01 
-4.910609913221545e-01 
--7.388285201590450e-01 -7.859532850133297e-02 9.017218706850256e-03 
6.692338021231113e-01 
-2.495064918245388e-01 -8.415741422769657e-01 4.476603793420972e-01 
1.705862197115872e-01 
-4.328054592075610e-01 5.117661387095311e-01 5.185453608011672e-01 
5.309289618603010e-01 
--1.116222417734015e+00 -2.698126489081321e-01 2.264730369556669e-01 
4.312967078919057e+00 
-
-
-
-
--4.522812872727979e-01 1.538543358469097e-01 7.284432601964753e-01 
-4.910609913221545e-01 
--7.388285201590450e-01 -7.859532850133297e-02 9.017218706850256e-03 
6.692338021231113e-01 
-2.495064918245388e-01 -8.415741422769657e-01 4.476603793420972e-01 
1.705862197115872e-01 
-4.328054592075610e-01 5.117661387095311e-01 5.185453608011672e-01 
5.309289618603010e-01 
--1.116222417734015e+00 -2.698126489081321e-01 2.264730369556669e-01 
4.312967078919057e+00 
-
-
-
-
--7.332148023786648e-01 -1.404349546358577e-01 6.639372088538912e-01 
-4.314463800455926e-02 
-5.211955132254980e-01 -7.278748011741064e-01 4.103304307956386e-01 
-1.737309654967427e-01 
--7.482986486068154e-02 -3.286882298796398e-01 -9.127015522973948e-02 
9.370348433371412e-01 
-4.302926700414003e-01 5.851840265000138e-01 6.184545893003858e-01 
2.998696286908108e-01 
--8.937240764459061e-01 5.848896758998551e-01 1.063627940347960e+00 
4.430677228273270e+00 
-
-
-
-
--7.332148023786648e-01 -1.404349546358577e-01 6.639372088538912e-01 
-4.314463800455926e-02 
-5.211955132254980e-01 -7.278748011741064e-01 4.103304307956386e-01 
-1.737309654967427e-01 
--7.482986486068154e-02 -3.286882298796398e-01 -9.127015522973948e-02 
9.370348433371412e-01 
-4.302926700414003e-01 5.851840265000138e-01 6.184545893003858e-01 
2.998696286908108e-01 
--8.937240764459061e-01 5.848896758998551e-01 1.063627940347960e+00 
4.430677228273270e+00 
-
-
-
-
-4.782842207455735e-01 4.259136469593428e-01 -6.189513572851921e-02 
-7.655133974612983e-01 
--4.883368996272124e-01 2.612568579365179e-01 8.017712221150022e-01 
-2.245770113609927e-01 
-4.878646268269655e-01 -7.093300511265634e-01 4.919731102299614e-01 
-1.296203813851452e-01 
-5.429174730465641e-01 4.971853759753165e-01 3.336080909870469e-01 
5.888573350184189e-01 
--1.473229991698197e+00 -2.847375641693361e-01 7.265594651866293e-01 
3.724673792998284e+00 
-
-
-
-
-4.782842207455735e-01 4.259136469593428e-01 -6.189513572851921e-02 
-7.655133974612983e-01 
--4.883368996272124e-01 2.612568579365179e-01 8.017712221150022e-01 
-2.245770113609927e-01 
-4.878646268269655e-01 -7.093300511265634e-01 4.919731102299614e-01 
-1.296203813851452e-01 
-5.429174730465641e-01 4.971853759753165e-01 3.336080909870469e-01 
5.888573350184189e-01 
--1.473229991698197e+00 -2.847375641693361e-01 7.265594651866293e-01 
3.724673792998284e+00 
-
-
-
-
--1.717534497477702e-01 -3.293182557575385e-01 9.187821511960753e-01 
-1.337520002394877e-01 
-7.564191641333334e-01 -6.443931739253521e-01 -9.761781972388042e-02 
-5.530141772681495e-02 
-2.826806048372501e-01 3.962478941373131e-01 6.809040347426501e-02 
-8.708863180664299e-01 
-5.642893551011001e-01 5.650615278135359e-01 3.763958247252208e-01 
4.696905115435457e-01 
--6.176597920606820e-01 -3.587601093871445e-01 1.751919080721307e-01 
4.894136618228003e+00 
-
-
-
-
--1.717534497477702e-01 -3.293182557575385e-01 9.187821511960753e-01 
-1.337520002394877e-01 
-7.564191641333334e-01 -6.443931739253521e-01 -9.761781972388042e-02 
-5.530141772681495e-02 
-2.826806048372501e-01 3.962478941373131e-01 6.809040347426501e-02 
-8.708863180664299e-01 
-5.642893551011001e-01 5.650615278135359e-01 3.763958247252208e-01 
4.696905115435457e-01 
--6.176597920606820e-01 -3.587601093871445e-01 1.751919080721307e-01 
4.894136618228003e+00 
-
-
-
-
-1.812496708134000e-01 -7.142223893495678e-01 6.293177709685605e-01 
2.469697927378791e-01 
--2.890260196428837e-01 3.156298742062503e-01 6.766071357979609e-01 
-5.992032428694102e-01 
-8.452204875472442e-01 -4.225318576167194e-02 -8.499271710818025e-02 
-5.259213189840819e-01 
-4.113573194071349e-01 6.232806986850553e-01 3.727441011860698e-01 
5.507886722217831e-01 
--1.038405470170682e+00 -2.495243897795223e-02 1.345925545717675e+00 
4.473223751593547e+00 
-
-
-
-
-1.812496708134000e-01 -7.142223893495678e-01 6.293177709685605e-01 
2.469697927378791e-01 
--2.890260196428837e-01 3.156298742062503e-01 6.766071357979609e-01 
-5.992032428694102e-01 
-8.452204875472442e-01 -4.225318576167194e-02 -8.499271710818025e-02 
-5.259213189840819e-01 
-4.113573194071349e-01 6.232806986850553e-01 3.727441011860698e-01 
5.507886722217831e-01 
--1.038405470170682e+00 -2.495243897795223e-02 1.345925545717675e+00 
4.473223751593547e+00 
-
-
-
-
--4.593728511628734e-01 5.422076972216936e-01 3.797204021229634e-01 
-5.922835578501365e-01 
-7.145755436892980e-01 -5.432720538841424e-02 -1.274933898207296e-01 
-6.856936507419692e-01 
-1.239065216495209e-01 7.469768746725121e-01 -6.260568763153024e-01 
1.863478205279832e-01 
-5.128406671358601e-01 3.809001398433975e-01 6.690370986589015e-01 
3.798669427799758e-01 
--1.255870449497408e+00 -3.355456936568422e-01 3.654432767853303e-01 
4.230093833289906e+00 
-
-
-
-
--4.593728511628734e-01 5.422076972216936e-01 3.797204021229634e-01 
-5.922835578501365e-01 
-7.145755436892980e-01 -5.432720538841424e-02 -1.274933898207296e-01 
-6.856936507419692e-01 
-1.239065216495209e-01 7.469768746725121e-01 -6.260568763153024e-01 
1.863478205279832e-01 
-5.128406671358601e-01 3.809001398433975e-01 6.690370986589015e-01 
3.798669427799758e-01 
--1.255870449497408e+00 -3.355456936568422e-01 3.654432767853303e-01 
4.230093833289906e+00 
-
-
-
-
--9.883221317836195e-02 -7.685894459128155e-01 6.101852074766242e-01 
1.648528733337916e-01 
-3.389318571278148e-01 2.831408984925041e-01 5.933560568755192e-01 
-6.729673228277008e-01 
-8.704073318348786e-01 -3.702703179743314e-01 -3.244668396063575e-01 
-3.498329763908415e-03 
-3.431449643375882e-01 4.381796285308986e-01 4.127031285824062e-01 
7.210591336697516e-01 
--7.068348633711856e-01 -1.068573185563028e-01 1.194840146551414e+00 
3.862310686411061e+00 
-
-
-
-
--9.883221317836195e-02 -7.685894459128155e-01 6.101852074766242e-01 
1.648528733337916e-01 
-3.389318571278148e-01 2.831408984925041e-01 5.933560568755192e-01 
-6.729673228277008e-01 
-8.704073318348786e-01 -3.702703179743314e-01 -3.244668396063575e-01 
-3.498329763908415e-03 
-3.431449643375882e-01 4.381796285308986e-01 4.127031285824062e-01 
7.210591336697516e-01 
--7.068348633711856e-01 -1.068573185563028e-01 1.194840146551414e+00 
3.862310686411061e+00 
-
-
-
-
--3.512980667337405e-01 -7.976191089261551e-02 8.305742855627329e-01 
-4.247046762655800e-01 
--6.694764424279641e-01 5.814721405609833e-01 9.010048705333557e-03 
4.621799019946153e-01 
--3.374012039622536e-01 -7.921081526224081e-01 4.049257087259139e-02 
5.070359492364085e-01 
-5.608488110961412e-01 1.676092535372148e-01 5.553607178117766e-01 
5.907031592367954e-01 
--5.889478228874484e-02 9.138851855059573e-01 1.407827773139910e+00 
3.992495518976249e+00 
-
-
-
-
--3.512980667337405e-01 -7.976191089261551e-02 8.305742855627329e-01 
-4.247046762655800e-01 
--6.694764424279641e-01 5.814721405609833e-01 9.010048705333557e-03 
4.621799019946153e-01 
--3.374012039622536e-01 -7.921081526224081e-01 4.049257087259139e-02 
5.070359492364085e-01 
-5.608488110961412e-01 1.676092535372148e-01 5.553607178117766e-01 
5.907031592367954e-01 
--5.889478228874484e-02 9.138851855059573e-01 1.407827773139910e+00 
3.992495518976249e+00 
-
-
-
-
-1.126903457816873e-01 -2.132427806241485e-01 8.794504852223903e-01 
-9.550780250414066e-02 -3.990908495345603e-01 
-3.902250282433807e-01 5.829969519747666e-01 -2.092018130973974e-01 
6.571722251405171e-02 -6.780522320458681e-01 
--1.210879646707044e-01 -4.175928505986716e-01 -1.339613322972906e-01 
8.361506255033196e-01 -3.063664617093762e-01 
-7.776307211178637e-01 -5.491109422028977e-01 -2.392349193351118e-01 
-1.886199254755747e-01 3.093237480485315e-02 
-4.643850554073351e-01 3.724720859094461e-01 3.280586232043302e-01 
5.018308096459042e-01 5.349340555283508e-01 
--6.808849508674600e-01 5.806081508113478e-01 6.705756205908355e-01 
1.109525923820229e+00 5.467354947042192e+00 
-
-
-
-
-1.126903457816873e-01 -2.132427806241485e-01 8.794504852223903e-01 
-9.550780250414066e-02 -3.990908495345603e-01 
-3.902250282433807e-01 5.829969519747666e-01 -2.092018130973974e-01 
6.571722251405171e-02 -6.780522320458681e-01 
--1.210879646707044e-01 -4.175928505986716e-01 -1.339613322972906e-01 
8.361506255033196e-01 -3.063664617093762e-01 
-7.776307211178637e-01 -5.491109422028977e-01 -2.392349193351118e-01 
-1.886199254755747e-01 3.093237480485315e-02 
-4.643850554073351e-01 3.724720859094461e-01 3.280586232043302e-01 
5.018308096459042e-01 5.349340555283508e-01 
--6.808849508674600e-01 5.806081508113478e-01 6.705756205908355e-01 
1.109525923820229e+00 5.467354947042192e+00 
-
-
-
-
-2.399084105938364e-01 -8.199156632724238e-01 -1.468556513662684e-01 
-1.036291696234024e-01 4.877260219752828e-01 
-5.173301536283527e-01 3.701731239492196e-01 -1.528566236498531e-01 
-7.380772697930937e-01 1.649792922571808e-01 
--7.503794535680051e-01 1.283227306638754e-01 8.256472122761258e-02 
-3.594855621789139e-01 5.333077440385293e-01 
--7.605329525433589e-02 2.098718106418744e-01 -9.171623142322998e-01 
2.807260084648509e-01 1.737121668228891e-01 
-3.255150359309738e-01 3.608285788557844e-01 3.272073141432134e-01 
4.862776755869421e-01 6.483148107676679e-01 
--8.460370969224187e-01 -4.766626974234105e-01 4.741661092102514e-01 
9.297426959074777e-01 4.808572806773286e+00 
-
-
-
-
-2.399084105938364e-01 -8.199156632724238e-01 -1.468556513662684e-01 
-1.036291696234024e-01 4.877260219752828e-01 
-5.173301536283527e-01 3.701731239492196e-01 -1.528566236498531e-01 
-7.380772697930937e-01 1.649792922571808e-01 
--7.503794535680051e-01 1.283227306638754e-01 8.256472122761258e-02 
-3.594855621789139e-01 5.333077440385293e-01 
--7.605329525433589e-02 2.098718106418744e-01 -9.171623142322998e-01 
2.807260084648509e-01 1.737121668228891e-01 
-3.255150359309738e-01 3.608285788557844e-01 3.272073141432134e-01 
4.862776755869421e-01 6.483148107676679e-01 
--8.460370969224187e-01 -4.766626974234105e-01 4.741661092102514e-01 
9.297426959074777e-01 4.808572806773286e+00 
-
-
-
-
-4.643181595995797e-01 3.007427155644508e-01 2.578052840512478e-01 
-6.944899455641037e-01 -3.810283673515695e-01 
--3.240754644473464e-01 6.307018321589047e-01 -4.609741863673111e-01 
-3.401907040159594e-01 4.110515498800106e-01 
-5.309641589902672e-01 1.410607263502268e-01 -7.017523238514534e-01 
3.276488504306092e-01 -3.136380718756725e-01 
-4.316608360581408e-01 -5.220373596269243e-01 -2.148474131968292e-01 
-3.515720109436437e-01 6.094125268904548e-01 
-4.594885466370631e-01 4.683459027061266e-01 4.271106414384522e-01 
4.135182611977807e-01 4.648672268010940e-01 
--9.513031811942269e-01 3.016439799045426e-01 1.059594211790030e+00 
1.971363346943218e+00 5.449079857998610e+00 
-
-
-
-
-4.643181595995797e-01 3.007427155644508e-01 2.578052840512478e-01 
-6.944899455641037e-01 -3.810283673515695e-01 
--3.240754644473464e-01 6.307018321589047e-01 -4.609741863673111e-01 
-3.401907040159594e-01 4.110515498800106e-01 
-5.309641589902672e-01 1.410607263502268e-01 -7.017523238514534e-01 
3.276488504306092e-01 -3.136380718756725e-01 
-4.316608360581408e-01 -5.220373596269243e-01 -2.148474131968292e-01 
-3.515720109436437e-01 6.094125268904548e-01 
-4.594885466370631e-01 4.683459027061266e-01 4.271106414384522e-01 
4.135182611977807e-01 4.648672268010940e-01 
--9.513031811942269e-01 3.016439799045426e-01 1.059594211790030e+00 
1.971363346943218e+00 5.449079857998610e+00 
-
-
-
-
-7.767808831005923e-02 3.646739114118812e-01 -7.018444840392036e-01 
4.957775401707000e-01 -3.501399774634271e-01 
-7.272588337899031e-01 -5.831901039238396e-01 -3.118967967103085e-01 
-1.719458719469341e-01 -6.433425745361655e-02 
--3.312092217584604e-01 -4.887985865989355e-01 -2.476991677611306e-01 
4.827449436234412e-01 5.974770580176967e-01 
-2.233407290416226e-02 3.805221738854893e-01 -4.739548657788930e-01 
-5.504269356756305e-01 5.719274762207358e-01 
-5.957032347408494e-01 3.783927297679026e-01 3.523444563499590e-01 
4.343118184800358e-01 4.349519819314549e-01 
--1.175477274237896e+00 1.227100834687710e-01 3.819066730931511e-01 
6.132671045836237e-01 4.273474086478503e+00 
-
-
-
-
-7.767808831005923e-02 3.646739114118812e-01 -7.018444840392036e-01 
4.957775401707000e-01 -3.501399774634271e-01 
-7.272588337899031e-01 -5.831901039238396e-01 -3.118967967103085e-01 
-1.719458719469341e-01 -6.433425745361655e-02 
--3.312092217584604e-01 -4.887985865989355e-01 -2.476991677611306e-01 
4.827449436234412e-01 5.974770580176967e-01 
-2.233407290416226e-02 3.805221738854893e-01 -4.739548657788930e-01 
-5.504269356756305e-01 5.719274762207358e-01 
-5.957032347408494e-01 3.783927297679026e-01 3.523444563499590e-01 
4.343118184800358e-01 4.349519819314549e-01 
--1.175477274237896e+00 1.227100834687710e-01 3.819066730931511e-01 
6.132671045836237e-01 4.273474086478503e+00 
-
-
-
-
-2.679692645140601e-01 5.588804148500556e-02 -5.488582145967431e-01 
6.612984819384541e-01 -4.318656945745243e-01 
-3.468425862502820e-01 3.131137376283768e-01 -6.453848331037914e-01 
-4.171682182468861e-01 4.371602710172939e-01 
-3.444396267481218e-01 -8.550337374614948e-01 -6.078135129875599e-02 
1.197322880035634e-01 3.636598106362198e-01 
--6.707876463033207e-01 4.227461404002595e-02 -2.422294773708286e-01 
4.284559660977147e-01 5.531791355271346e-01 
-4.891809182004913e-01 4.073898365665899e-01 4.688961346569405e-01 
4.367432424151754e-01 4.291005773000441e-01 
--1.597043132448454e+00 -3.770964027718842e-01 1.625390360436832e-01 
3.766089222363822e-01 5.302939386727957e+00 
-
-
-
-
-2.679692645140601e-01 5.588804148500556e-02 -5.488582145967431e-01 
6.612984819384541e-01 -4.318656945745243e-01 
-3.468425862502820e-01 3.131137376283768e-01 -6.453848331037914e-01 
-4.171682182468861e-01 4.371602710172939e-01 
-3.444396267481218e-01 -8.550337374614948e-01 -6.078135129875599e-02 
1.197322880035634e-01 3.636598106362198e-01 
--6.707876463033207e-01 4.227461404002595e-02 -2.422294773708286e-01 
4.284559660977147e-01 5.531791355271346e-01 
-4.891809182004913e-01 4.073898365665899e-01 4.688961346569405e-01 
4.367432424151754e-01 4.291005773000441e-01 
--1.597043132448454e+00 -3.770964027718842e-01 1.625390360436832e-01 
3.766089222363822e-01 5.302939386727957e+00 
-
-
-
-
--4.248207777788632e-01 3.081543815715569e-01 -6.524032579056086e-01 
2.888234948583828e-01 4.642404137702258e-01 
-7.007743600304472e-01 -2.940125858186907e-01 -6.469905468634042e-01 
-2.636312172604470e-02 -5.639249760717245e-02 
--1.176201924672430e-01 -7.895130953092817e-01 1.784150062215736e-01 
3.846002347305631e-01 4.278846896761756e-01 
--5.264533739138185e-04 -7.720248805705239e-02 1.706392423034223e-02 
-8.111866718905099e-01 5.794173836896034e-01 
-5.608991141569866e-01 4.350934665924270e-01 3.516392034292506e-01 
3.315792777346634e-01 5.123386694903016e-01 
--9.111259739286577e-01 -5.803743669239112e-01 2.553438705661870e-01 
1.295470063179634e+00 5.875501644800687e+00 
-
-
-
-
--4.248207777788632e-01 3.081543815715569e-01 -6.524032579056086e-01 
2.888234948583828e-01 4.642404137702258e-01 
-7.007743600304472e-01 -2.940125858186907e-01 -6.469905468634042e-01 
-2.636312172604470e-02 -5.639249760717245e-02 
--1.176201924672430e-01 -7.895130953092817e-01 1.784150062215736e-01 
3.846002347305631e-01 4.278846896761756e-01 
--5.264533739138185e-04 -7.720248805705239e-02 1.706392423034223e-02 
-8.111866718905099e-01 5.794173836896034e-01 
-5.608991141569866e-01 4.350934665924270e-01 3.516392034292506e-01 
3.315792777346634e-01 5.123386694903016e-01 
--9.111259739286577e-01 -5.803743669239112e-01 2.553438705661870e-01 
1.295470063179634e+00 5.875501644800687e+00 
-
-
-
-
-3.453272665021765e-01 5.428381708532641e-01 -5.389446614135307e-01 
-5.329208153723399e-01 1.077490406061804e-01 
--1.723093129679299e-01 -1.166116201618508e-01 2.853877401115589e-01 
-3.430707601952551e-01 8.703835487880132e-01 
--3.058997839021336e-01 5.213369585855451e-01 6.221122602550599e-01 
-3.647588619775162e-01 -3.384677326874906e-01 
-6.639375455785335e-01 -4.596066993236052e-01 3.444733259037498e-01 
-4.292194519695547e-01 -2.122673015322385e-01 
--5.627351397011170e-01 -4.568346614011958e-01 -3.498670506192639e-01 
-5.301127169779589e-01 -2.668422921450861e-01 
--1.684122927494687e+00 -5.703280933871090e-01 2.262428444856792e-01 
7.761463660192378e-01 5.599941462008801e+00 
-
-
-
-
-3.453272665021765e-01 5.428381708532641e-01 -5.389446614135307e-01 
-5.329208153723399e-01 1.077490406061804e-01 
--1.723093129679299e-01 -1.166116201618508e-01 2.853877401115589e-01 
-3.430707601952551e-01 8.703835487880132e-01 
--3.058997839021336e-01 5.213369585855451e-01 6.221122602550599e-01 
-3.647588619775162e-01 -3.384677326874906e-01 
-6.639375455785335e-01 -4.596066993236052e-01 3.444733259037498e-01 
-4.292194519695547e-01 -2.122673015322385e-01 
--5.627351397011170e-01 -4.568346614011958e-01 -3.498670506192639e-01 
-5.301127169779589e-01 -2.668422921450861e-01 
--1.684122927494687e+00 -5.703280933871090e-01 2.262428444856792e-01 
7.761463660192378e-01 5.599941462008801e+00 
-
-
-
-
-8.118551279037912e-01 -4.358239931154506e-01 1.419010204210150e-01 
-2.948578008036665e-01 -2.094556660248748e-01 
--6.865603661440077e-02 -7.220806421071168e-01 -3.266329430385047e-01 
5.644199884059273e-01 2.205150610285696e-01 
--3.094462861982769e-01 -2.657134837430276e-01 7.388398659469521e-01 
2.378455710417188e-01 -4.808164694959671e-01 
-2.338568919801007e-01 3.162303763277439e-01 -3.871186735067871e-01 
4.763983689471513e-01 -6.844655066896068e-01 
-4.309658338711129e-01 3.435865057941521e-01 4.212241755114670e-01 
5.576405942839980e-01 4.558770937908769e-01 
--1.083205978139631e+00 -2.740420753074780e-01 6.218433065151973e-01 
9.174005513145952e-01 5.304441118369613e+00 
-
-
-
-
-8.118551279037912e-01 -4.358239931154506e-01 1.419010204210150e-01 
-2.948578008036665e-01 -2.094556660248748e-01 
--6.865603661440077e-02 -7.220806421071168e-01 -3.266329430385047e-01 
5.644199884059273e-01 2.205150610285696e-01 
--3.094462861982769e-01 -2.657134837430276e-01 7.388398659469521e-01 
2.378455710417188e-01 -4.808164694959671e-01 
-2.338568919801007e-01 3.162303763277439e-01 -3.871186735067871e-01 
4.763983689471513e-01 -6.844655066896068e-01 
-4.309658338711129e-01 3.435865057941521e-01 4.212241755114670e-01 
5.576405942839980e-01 4.558770937908769e-01 
--1.083205978139631e+00 -2.740420753074780e-01 6.218433065151973e-01 
9.174005513145952e-01 5.304441118369613e+00 
-
-
-
-
-7.988115637076142e-01 -5.496903906644495e-01 -5.861166406917204e-02 
-1.457234397623667e-01 -1.872696239036855e-01 
--1.210357085478833e-01 -4.449725650397308e-01 -9.716520784094612e-02 
-7.521790421682431e-02 8.787781078797587e-01 
-2.877104564361402e-01 5.375790194213599e-01 -6.036893759275860e-01 
-4.710215699976705e-01 2.047664746103943e-01 
--1.782725052022233e-02 -1.146195792512178e-01 -6.903621558265087e-01 
7.100429221878538e-01 -7.605053349366717e-02 
--5.139604316866289e-01 -4.446470968120347e-01 -3.822078314412277e-01 
-4.970761261989105e-01 -3.807441822342174e-01 
--1.576781789818185e+00 -8.170311930007375e-01 -1.719519390893216e-01 
9.048362537397884e-01 4.800973635911384e+00 
-
-
-
-
-7.988115637076142e-01 -5.496903906644495e-01 -5.861166406917204e-02 
-1.457234397623667e-01 -1.872696239036855e-01 
--1.210357085478833e-01 -4.449725650397308e-01 -9.716520784094612e-02 
-7.521790421682431e-02 8.787781078797587e-01 
-2.877104564361402e-01 5.375790194213599e-01 -6.036893759275860e-01 
-4.710215699976705e-01 2.047664746103943e-01 
--1.782725052022233e-02 -1.146195792512178e-01 -6.903621558265087e-01 
7.100429221878538e-01 -7.605053349366717e-02 
--5.139604316866289e-01 -4.446470968120347e-01 -3.822078314412277e-01 
-4.970761261989105e-01 -3.807441822342174e-01 
--1.576781789818185e+00 -8.170311930007375e-01 -1.719519390893216e-01 
9.048362537397884e-01 4.800973635911384e+00 
-
-
-
-
-7.516280244323545e-01 -2.194282907959706e-01 -6.086261375558498e-01 
-1.137019262306734e-01 5.960398259812207e-02 
-1.624328796094681e-01 -5.978985967297156e-01 5.368934740532384e-01 
-5.142077695704967e-01 2.519297419575398e-01 
-3.828052419550129e-01 -1.076546349627441e-01 3.853553635597494e-01 
2.610588064929912e-01 -7.907086502821319e-01 
-1.532066144009700e-01 6.367796108197967e-01 7.324482616263035e-02 
-7.207873049781185e-01 -2.148029724439781e-01 
-4.885271257005580e-01 4.210590220411180e-01 4.329619630164204e-01 
3.673910753129500e-01 5.114863475928666e-01 
--1.492174412809116e+00 -7.363725989345967e-01 -3.247592489304325e-02 
5.204401994854023e-01 5.908898709893968e+00 
-
-
-
-
-7.516280244323545e-01 -2.194282907959706e-01 -6.086261375558498e-01 
-1.137019262306734e-01 5.960398259812207e-02 
-1.624328796094681e-01 -5.978985967297156e-01 5.368934740532384e-01 
-5.142077695704967e-01 2.519297419575398e-01 
-3.828052419550129e-01 -1.076546349627441e-01 3.853553635597494e-01 
2.610588064929912e-01 -7.907086502821319e-01 
-1.532066144009700e-01 6.367796108197967e-01 7.324482616263035e-02 
-7.207873049781185e-01 -2.148029724439781e-01 
-4.885271257005580e-01 4.210590220411180e-01 4.329619630164204e-01 
3.673910753129500e-01 5.114863475928666e-01 
--1.492174412809116e+00 -7.363725989345967e-01 -3.247592489304325e-02 
5.204401994854023e-01 5.908898709893968e+00 
-
-
-
-
-2.659443666628657e-01 -2.953107211060925e-01 -7.035062192340094e-01 
1.726794355495321e-01 1.958495627646433e-01 5.281750965753210e-01 
--1.546539895314332e-01 -7.485304635216515e-01 5.055737233117751e-01 
-2.663433545332037e-02 3.350964809631909e-01 2.172106342235273e-01 
--7.841488825224693e-01 1.702064892191044e-01 -8.546600436608338e-02 
5.617012961726728e-01 8.833399513012195e-02 1.597642085902122e-01 
-2.142336619105054e-01 -2.034476652215557e-01 2.174945934483410e-01 
4.575374970571844e-01 -7.826343079150749e-01 2.086913182238114e-01 
--2.788443936833848e-01 2.119421401191199e-01 8.929458650893947e-02 
-5.879935323821798e-01 -2.715004144820696e-01 6.707487912669394e-01 
-4.084311565206817e-01 4.870452247637709e-01 4.323104793251873e-01 
3.144632303697326e-01 3.941084464023707e-01 3.935352564934346e-01 
--9.625182230049598e-01 -6.665978353645320e-01 -3.236335893373759e-01 
4.313531917491394e-01 9.007171581945860e-01 7.065209674490413e+00 
-
-
-
-
-2.659443666628657e-01 -2.953107211060925e-01 -7.035062192340094e-01 
1.726794355495321e-01 1.958495627646433e-01 5.281750965753210e-01 
--1.546539895314332e-01 -7.485304635216515e-01 5.055737233117751e-01 
-2.663433545332037e-02 3.350964809631909e-01 2.172106342235273e-01 
--7.841488825224693e-01 1.702064892191044e-01 -8.546600436608338e-02 
5.617012961726728e-01 8.833399513012195e-02 1.597642085902122e-01 
-2.142336619105054e-01 -2.034476652215557e-01 2.174945934483410e-01 
4.575374970571844e-01 -7.826343079150749e-01 2.086913182238114e-01 
--2.788443936833848e-01 2.119421401191199e-01 8.929458650893947e-02 
-5.879935323821798e-01 -2.715004144820696e-01 6.707487912669394e-01 
-4.084311565206817e-01 4.870452247637709e-01 4.323104793251873e-01 
3.144632303697326e-01 3.941084464023707e-01 3.935352564934346e-01 
--9.625182230049598e-01 -6.665978353645320e-01 -3.236335893373759e-01 
4.313531917491394e-01 9.007171581945860e-01 7.065209674490413e+00 
-
-
-
-
-5.434275996048500e-01 8.576718749033821e-02 -6.595400486726808e-01 
4.338100095793030e-01 -2.568553468177228e-01 -9.039670422364525e-02 
--2.259399171899226e-01 -4.911311357275643e-01 -1.912551951706730e-01 
1.934064749741055e-01 -1.021272916642099e-01 7.895104580655127e-01 
--7.171480676360155e-02 6.294600987091417e-01 -3.412050555570318e-01 
-5.478423059890672e-01 -1.333354825949893e-01 4.053474281847632e-01 
--6.510453376278271e-01 3.886745603526119e-01 1.867450105470222e-02 
5.241246114166759e-01 -3.694794614958230e-01 -1.161965435725404e-01 
--3.184766878478870e-01 5.302379355754073e-02 -4.716774799267544e-01 
1.269860946936541e-01 8.045274971652442e-01 -9.945586761792609e-02 
-3.510087633511286e-01 4.487034038799998e-01 4.349472410760780e-01 
4.282984266341045e-01 3.493385607507790e-01 4.252082179272242e-01 
--1.635109998158498e+00 -1.075501398529785e+00 -6.979294345336865e-01 
2.490474371336928e-01 9.087971771084727e-01 6.179862896683766e+00 
-
-
-
-
-5.434275996048500e-01 8.576718749033821e-02 -6.595400486726808e-01 
4.338100095793030e-01 -2.568553468177228e-01 -9.039670422364525e-02 
--2.259399171899226e-01 -4.911311357275643e-01 -1.912551951706730e-01 
1.934064749741055e-01 -1.021272916642099e-01 7.895104580655127e-01 
--7.171480676360155e-02 6.294600987091417e-01 -3.412050555570318e-01 
-5.478423059890672e-01 -1.333354825949893e-01 4.053474281847632e-01 
--6.510453376278271e-01 3.886745603526119e-01 1.867450105470222e-02 
5.241246114166759e-01 -3.694794614958230e-01 -1.161965435725404e-01 
--3.184766878478870e-01 5.302379355754073e-02 -4.716774799267544e-01 
1.269860946936541e-01 8.045274971652442e-01 -9.945586761792609e-02 
-3.510087633511286e-01 4.487034038799998e-01 4.349472410760780e-01 
4.282984266341045e-01 3.493385607507790e-01 4.252082179272242e-01 
--1.635109998158498e+00 -1.075501398529785e+00 -6.979294345336865e-01 
2.490474371336928e-01 9.087971771084727e-01 6.179862896683766e+00 
-
-
-
-
--1.975493393291708e-01 3.628098951201348e-01 5.613702835084554e-03 
6.665241984693777e-01 -1.439902118974554e-01 -6.035926081443375e-01 
--4.240751851661650e-02 -7.253130386113864e-01 2.156671550178644e-01 
5.390498858999336e-01 -2.771617030123918e-01 2.412817596392649e-01 
--6.403592398875414e-01 1.498227035692187e-01 7.246680914328499e-01 
-1.709060430477634e-01 3.296940489557107e-02 1.097884394438651e-01 
-2.551692122792396e-01 -4.194660525030919e-01 3.471182003907994e-01 
-1.607323544096525e-01 4.738582637537283e-01 -6.229520968565326e-01 
-5.017117103454434e-01 1.524295982582293e-01 4.139269180990506e-01 
-2.165162548054248e-01 -6.977462677046359e-01 -1.413716416378822e-01 
--4.819646642665452e-01 -3.473565630454574e-01 -3.694398236202010e-01 
-4.040391806084410e-01 -4.358551587148903e-01 -3.966740707256231e-01 
--1.540235643966588e+00 -9.043111937355246e-01 5.933654865489751e-01 
1.204138712131551e+00 1.351247933312719e+00 5.794428477379958e+00 
-
-
-
-
--1.975493393291708e-01 3.628098951201348e-01 5.613702835084554e-03 
6.665241984693777e-01 -1.439902118974554e-01 -6.035926081443375e-01 
--4.240751851661650e-02 -7.253130386113864e-01 2.156671550178644e-01 
5.390498858999336e-01 -2.771617030123918e-01 2.412817596392649e-01 
--6.403592398875414e-01 1.498227035692187e-01 7.246680914328499e-01 
-1.709060430477634e-01 3.296940489557107e-02 1.097884394438651e-01 
-2.551692122792396e-01 -4.194660525030919e-01 3.471182003907994e-01 
-1.607323544096525e-01 4.738582637537283e-01 -6.229520968565326e-01 
-5.017117103454434e-01 1.524295982582293e-01 4.139269180990506e-01 
-2.165162548054248e-01 -6.977462677046359e-01 -1.413716416378822e-01 
--4.819646642665452e-01 -3.473565630454574e-01 -3.694398236202010e-01 
-4.040391806084410e-01 -4.358551587148903e-01 -3.966740707256231e-01 
--1.540235643966588e+00 -9.043111937355246e-01 5.933654865489751e-01 
1.204138712131551e+00 1.351247933312719e+00 5.794428477379958e+00 
-
-
-
-
--5.362120436015715e-01 2.694925483559780e-01 2.153035295488570e-01 
-2.927944317888171e-01 6.909692701077174e-01 -1.741484691902395e-01 
--1.042245381322811e-01 -5.516725395823808e-01 -1.409778333557348e-01 
-1.001067289667746e-01 3.228216624251575e-01 7.420813448058049e-01 
--1.419108455391606e-01 -6.590936524011860e-01 3.794690230307565e-01 
4.548753323781894e-01 1.140575385481304e-01 -4.260744532790968e-01 
-4.745057243243608e-01 -2.037804262196131e-01 5.455155097965021e-01 
-6.569105894339243e-01 -1.643243151652446e-02 -6.268282642524950e-02 
-5.341577382124200e-01 -1.145528027588575e-01 -5.409669026943921e-01 
-8.127530949744917e-03 5.367374636187990e-01 -3.474979347648526e-01 
-4.135154533476419e-01 3.660299524432867e-01 4.466996082233658e-01 
5.155006462198702e-01 3.420254234391365e-01 3.358038076590664e-01 
--1.556732925309316e+00 -1.176382996068255e+00 1.116708522562520e-01 
6.533096469219145e-01 9.511793948239564e-01 6.021704473431841e+00 
-
-
-
-
--5.362120436015715e-01 2.694925483559780e-01 2.153035295488570e-01 
-2.927944317888171e-01 6.909692701077174e-01 -1.741484691902395e-01 
--1.042245381322811e-01 -5.516725395823808e-01 -1.409778333557348e-01 
-1.001067289667746e-01 3.228216624251575e-01 7.420813448058049e-01 
--1.419108455391606e-01 -6.590936524011860e-01 3.794690230307565e-01 
4.548753323781894e-01 1.140575385481304e-01 -4.260744532790968e-01 
-4.745057243243608e-01 -2.037804262196131e-01 5.455155097965021e-01 
-6.569105894339243e-01 -1.643243151652446e-02 -6.268282642524950e-02 
-5.341577382124200e-01 -1.145528027588575e-01 -5.409669026943921e-01 
-8.127530949744917e-03 5.367374636187990e-01 -3.474979347648526e-01 
-4.135154533476419e-01 3.660299524432867e-01 4.466996082233658e-01 
5.155006462198702e-01 3.420254234391365e-01 3.358038076590664e-01 
--1.556732925309316e+00 -1.176382996068255e+00 1.116708522562520e-01 
6.533096469219145e-01 9.511793948239564e-01 6.021704473431841e+00 
-
-
-
-
--4.203103602395475e-02 -3.819015790579684e-01 5.930735912208028e-01 
-3.011812814002314e-01 5.725569018582659e-01 -2.865601528280273e-01 
--1.362881024938410e-01 -4.779791091333059e-01 3.590959180635832e-01 
6.904511094651612e-01 -3.760214919380147e-01 -7.679029248459854e-02 
--8.756026991937640e-02 6.018779993491106e-01 3.440428551583078e-01 
-1.222216393383081e-02 -2.940798808178964e-01 -6.519802368573642e-01 
--8.808159889244790e-01 1.605260817365599e-01 1.861414487469910e-01 
-1.335832801206178e-01 -3.008855693960768e-02 3.807835576927917e-01 
-3.072522318749196e-01 -1.224461697347328e-01 4.076410544077556e-01 
-5.181656025596264e-01 -5.862863870750865e-01 3.349693313438831e-01 
-3.189849587737646e-01 4.718774646497479e-01 4.473572204187134e-01 
3.822010406545918e-01 3.156998677621511e-01 4.792783427076326e-01 
--8.280720568784058e-01 -2.594900612257998e-01 5.599160581029079e-01 
1.168208202469537e+00 1.376763671056561e+00 6.357919559406460e+00 
-
-
-
-
--4.203103602395475e-02 -3.819015790579684e-01 5.930735912208028e-01 
-3.011812814002314e-01 5.725569018582659e-01 -2.865601528280273e-01 
--1.362881024938410e-01 -4.779791091333059e-01 3.590959180635832e-01 
6.904511094651612e-01 -3.760214919380147e-01 -7.679029248459854e-02 
--8.756026991937640e-02 6.018779993491106e-01 3.440428551583078e-01 
-1.222216393383081e-02 -2.940798808178964e-01 -6.519802368573642e-01 
--8.808159889244790e-01 1.605260817365599e-01 1.861414487469910e-01 
-1.335832801206178e-01 -3.008855693960768e-02 3.807835576927917e-01 
-3.072522318749196e-01 -1.224461697347328e-01 4.076410544077556e-01 
-5.181656025596264e-01 -5.862863870750865e-01 3.349693313438831e-01 
-3.189849587737646e-01 4.718774646497479e-01 4.473572204187134e-01 
3.822010406545918e-01 3.156998677621511e-01 4.792783427076326e-01 
--8.280720568784058e-01 -2.594900612257998e-01 5.599160581029079e-01 
1.168208202469537e+00 1.376763671056561e+00 6.357919559406460e+00 
-
-
-
-
-7.383737415736171e-01 -4.434259115668057e-01 -4.640952031749857e-02 
-3.823959833726365e-01 -1.339439504503543e-01 3.030778203165849e-01 
--2.216670073270925e-01 3.129831236284963e-01 5.728090064286107e-01 
-6.998424058643440e-01 -5.157228861800690e-02 1.798778761865279e-01 
--3.052913523453123e-01 -3.226864519867036e-01 2.946885577764434e-01 
3.781157102652544e-01 -4.889074277469106e-01 5.777779284011674e-01 
--9.710605536200372e-02 4.442809185415260e-01 -6.439650989777963e-01 
-1.421411146247407e-01 -2.385989834024033e-02 5.980973495300552e-01 
-3.318445914953981e-01 4.845344834712695e-01 2.689580617033173e-02 
1.171222969530233e-01 -7.501492091209332e-01 -2.791785246837884e-01 
-4.392205902592482e-01 4.112533023894860e-01 4.092434720344024e-01 
4.325513837624014e-01 4.208036520573283e-01 3.260358289877573e-01 
--1.512847197171928e+00 -1.288374247359846e+00 -3.151968896853013e-01 
7.617996751727477e-01 1.313855664415570e+00 5.534228675280641e+00 
-
-
-
-
-7.383737415736171e-01 -4.434259115668057e-01 -4.640952031749857e-02 
-3.823959833726365e-01 -1.339439504503543e-01 3.030778203165849e-01 
--2.216670073270925e-01 3.129831236284963e-01 5.728090064286107e-01 
-6.998424058643440e-01 -5.157228861800690e-02 1.798778761865279e-01 
--3.052913523453123e-01 -3.226864519867036e-01 2.946885577764434e-01 
3.781157102652544e-01 -4.889074277469106e-01 5.777779284011674e-01 
--9.710605536200372e-02 4.442809185415260e-01 -6.439650989777963e-01 
-1.421411146247407e-01 -2.385989834024033e-02 5.980973495300552e-01 
-3.318445914953981e-01 4.845344834712695e-01 2.689580617033173e-02 
1.171222969530233e-01 -7.501492091209332e-01 -2.791785246837884e-01 
-4.392205902592482e-01 4.112533023894860e-01 4.092434720344024e-01 
4.325513837624014e-01 4.208036520573283e-01 3.260358289877573e-01 
--1.512847197171928e+00 -1.288374247359846e+00 -3.151968896853013e-01 
7.617996751727477e-01 1.313855664415570e+00 5.534228675280641e+00 
-
-
-
-
-4.711208236941604e-01 -7.174579774163908e-01 6.611476835277785e-02 
3.119160082422628e-01 -2.467156558035018e-01 3.174395163060775e-01 
-4.194361196398944e-01 3.944720745394789e-02 -8.535505772554891e-01 
-1.176395492189159e-01 2.823248022131177e-01 -2.055027851948987e-02 
--1.286292217502161e-01 -3.849791326550860e-01 2.123791540740980e-01 
-4.396982355969924e-01 7.234773681758607e-01 2.708996954539876e-01 
-5.257297282651870e-01 -6.870252548075782e-02 3.419735788535205e-01 
-1.483056783123216e-01 1.462377795069084e-01 -7.473702059903817e-01 
-3.260612869388650e-01 1.998658463958251e-01 1.178012525578953e-01 
-7.358062240538160e-01 -4.391331980754333e-01 3.249796616586186e-01 
-4.504057329931335e-01 5.392797440316583e-01 3.019143597928989e-01 
3.634961186844529e-01 3.489715391934318e-01 4.015584506011762e-01 
--9.925245164756216e-01 -6.464019027722173e-01 -1.899798679549305e-02 
1.522401620356648e+00 1.569643600779526e+00 6.476783033946536e+00 
-
-
-
-
-4.711208236941604e-01 -7.174579774163908e-01 6.611476835277785e-02 
3.119160082422628e-01 -2.467156558035018e-01 3.174395163060775e-01 
-4.194361196398944e-01 3.944720745394789e-02 -8.535505772554891e-01 
-1.176395492189159e-01 2.823248022131177e-01 -2.055027851948987e-02 
--1.286292217502161e-01 -3.849791326550860e-01 2.123791540740980e-01 
-4.396982355969924e-01 7.234773681758607e-01 2.708996954539876e-01 
-5.257297282651870e-01 -6.870252548075782e-02 3.419735788535205e-01 
-1.483056783123216e-01 1.462377795069084e-01 -7.473702059903817e-01 
-3.260612869388650e-01 1.998658463958251e-01 1.178012525578953e-01 
-7.358062240538160e-01 -4.391331980754333e-01 3.249796616586186e-01 
-4.504057329931335e-01 5.392797440316583e-01 3.019143597928989e-01 
3.634961186844529e-01 3.489715391934318e-01 4.015584506011762e-01 
--9.925245164756216e-01 -6.464019027722173e-01 -1.899798679549305e-02 
1.522401620356648e+00 1.569643600779526e+00 6.476783033946536e+00 
-
-
-
-
-1.638280838562708e-01 2.112162199675415e-01 5.732847009585642e-01 
-4.038204990787153e-01 -6.177952087449721e-01 -2.348420822276731e-01 
-8.205033858792915e-01 -4.197383687665013e-01 -2.950475832887508e-01 
-1.562759597607628e-01 -1.476048876495065e-01 1.316489296734033e-01 
--2.271217151997271e-01 -1.105412986713064e-01 6.890171220946420e-02 
1.018854088799706e-01 -4.273379485984418e-01 8.593314511714535e-01 
--4.460637292432069e-02 2.939733246455958e-01 -1.518637464966054e-01 
-8.128388038109494e-01 3.598789404297606e-01 3.135404051246082e-01 
--1.291116859620226e-01 -7.027826595612452e-01 5.699973272298382e-01 
-1.816304977475485e-01 3.613569832747487e-01 3.100396499576799e-02 
--4.792606005378672e-01 -4.320465823412551e-01 -4.812323542196397e-01 
-3.292865525483738e-01 -3.922147801334553e-01 -2.996637803726368e-01 
--1.133696300125424e+00 -9.700896998303117e-01 -1.456181883445540e-01 
7.169956822080666e-01 8.825474986744725e-01 7.115159680368060e+00 
-
-
-
-
-1.638280838562708e-01 2.112162199675415e-01 5.732847009585642e-01 
-4.038204990787153e-01 -6.177952087449721e-01 -2.348420822276731e-01 
-8.205033858792915e-01 -4.197383687665013e-01 -2.950475832887508e-01 
-1.562759597607628e-01 -1.476048876495065e-01 1.316489296734033e-01 
--2.271217151997271e-01 -1.105412986713064e-01 6.890171220946420e-02 
1.018854088799706e-01 -4.273379485984418e-01 8.593314511714535e-01 
--4.460637292432069e-02 2.939733246455958e-01 -1.518637464966054e-01 
-8.128388038109494e-01 3.598789404297606e-01 3.135404051246082e-01 
--1.291116859620226e-01 -7.027826595612452e-01 5.699973272298382e-01 
-1.816304977475485e-01 3.613569832747487e-01 3.100396499576799e-02 
--4.792606005378672e-01 -4.320465823412551e-01 -4.812323542196397e-01 
-3.292865525483738e-01 -3.922147801334553e-01 -2.996637803726368e-01 
--1.133696300125424e+00 -9.700896998303117e-01 -1.456181883445540e-01 
7.169956822080666e-01 8.825474986744725e-01 7.115159680368060e+00 
-
-
-
-
--3.665274153284634e-01 -1.453397125488743e-01 -2.001950915088147e-01 
-3.032844518137726e-01 2.174593419399191e-01 8.155893102509996e-01 
-3.613647627828262e-01 -7.619986246209208e-02 6.392281708997040e-01 
-5.652408380601890e-01 -3.205298751010762e-01 1.809967647904060e-01 
-3.888643644465979e-01 1.655458519923372e-02 -3.586313721306580e-01 
3.453752767070446e-01 -6.663172046999507e-01 3.957667136792625e-01 
-1.601095030834153e-01 -9.145949651351237e-01 1.438411263394654e-01 
3.028635606646981e-01 1.589127664229609e-01 1.453008721789950e-02 
-6.592125684821983e-01 -2.322870740583713e-02 -4.958729525627328e-01 
-3.895394427084412e-01 4.008166214568953e-01 -8.132828636060432e-02 
--3.516552355256167e-01 -3.684730268657203e-01 -3.951108136685071e-01 
-4.751525446764074e-01 -4.691334406363207e-01 -3.722869093673725e-01 
--1.253144203655759e+00 -4.868614811682946e-01 -3.928112731892212e-01 
9.458090785418302e-01 1.509541964793517e+00 7.078796902960230e+00 
-
-
-
-
--3.665274153284634e-01 -1.453397125488743e-01 -2.001950915088147e-01 
-3.032844518137726e-01 2.174593419399191e-01 8.155893102509996e-01 
-3.613647627828262e-01 -7.619986246209208e-02 6.392281708997040e-01 
-5.652408380601890e-01 -3.205298751010762e-01 1.809967647904060e-01 
-3.888643644465979e-01 1.655458519923372e-02 -3.586313721306580e-01 
3.453752767070446e-01 -6.663172046999507e-01 3.957667136792625e-01 
-1.601095030834153e-01 -9.145949651351237e-01 1.438411263394654e-01 
3.028635606646981e-01 1.589127664229609e-01 1.453008721789950e-02 
-6.592125684821983e-01 -2.322870740583713e-02 -4.958729525627328e-01 
-3.895394427084412e-01 4.008166214568953e-01 -8.132828636060432e-02 
--3.516552355256167e-01 -3.684730268657203e-01 -3.951108136685071e-01 
-4.751525446764074e-01 -4.691334406363207e-01 -3.722869093673725e-01 
--1.253144203655759e+00 -4.868614811682946e-01 -3.928112731892212e-01 
9.458090785418302e-01 1.509541964793517e+00 7.078796902960230e+00 
-
-
-
-
--1.298284350754059e-01 -6.619030822325785e-01 3.330961250308446e-01 
4.197390828205370e-01 3.587623315700036e-01 -3.594225235927060e-01 
-4.477470361063483e-02 3.499639423322862e-01 -2.766492120924991e-01 
7.492707067288757e-01 -3.233153510105820e-01 -3.647550825846559e-01 
--9.549408964941636e-02 4.519965047933334e-01 5.802941196717089e-01 
-2.890256782524210e-01 -7.566254725340159e-03 -6.051823545603717e-01 
-2.607313689288576e-01 -2.179617677864380e-01 5.559997825474779e-01 
1.268160220084779e-01 -6.945411530955434e-01 2.773199344903117e-01 
--8.978049944998852e-01 1.441943654297635e-01 1.675630118112525e-01 
1.715652612968461e-01 -8.539193136009517e-02 3.291662088927854e-01 
-3.130271989971884e-01 4.084230174887136e-01 3.722335268247227e-01 
3.651845086799332e-01 5.263272078774732e-01 4.315863272267982e-01 
--1.438877553097935e+00 -2.591000865584778e-01 1.967176059028085e-01 
4.883264665372929e-01 1.240541477377041e+00 7.063472348406348e+00 
-
-
-
-
--1.298284350754059e-01 -6.619030822325785e-01 3.330961250308446e-01 
4.197390828205370e-01 3.587623315700036e-01 -3.594225235927060e-01 
-4.477470361063483e-02 3.499639423322862e-01 -2.766492120924991e-01 
7.492707067288757e-01 -3.233153510105820e-01 -3.647550825846559e-01 
--9.549408964941636e-02 4.519965047933334e-01 5.802941196717089e-01 
-2.890256782524210e-01 -7.566254725340159e-03 -6.051823545603717e-01 
-2.607313689288576e-01 -2.179617677864380e-01 5.559997825474779e-01 
1.268160220084779e-01 -6.945411530955434e-01 2.773199344903117e-01 
--8.978049944998852e-01 1.441943654297635e-01 1.675630118112525e-01 
1.715652612968461e-01 -8.539193136009517e-02 3.291662088927854e-01 
-3.130271989971884e-01 4.084230174887136e-01 3.722335268247227e-01 
3.651845086799332e-01 5.263272078774732e-01 4.315863272267982e-01 
--1.438877553097935e+00 -2.591000865584778e-01 1.967176059028085e-01 
4.883264665372929e-01 1.240541477377041e+00 7.063472348406348e+00 
-
-
-
-

Index: regressions/vector_resize.cc
===================================================================
RCS file: regressions/vector_resize.cc
diff -N regressions/vector_resize.cc
--- regressions/vector_resize.cc        18 Jan 2010 15:32:13 -0000      1.2
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,40 +0,0 @@
-#include <TooN/TooN.h>
-using namespace std;
-using namespace TooN;
-
-int main()
-{
-       Vector<Resizable> r = makeVector(4.);
-       cout << r << endl;
-       
-       //Test simple resize
-       Vector<> v1(makeVector(1, 2));
-       r.resize(v1.size());
-       r = v1;
-       cout << r << endl;
-
-       //Test automatic resize
-       Vector<3> v2 = makeVector(2, 3, 4);
-       r = v2;
-       cout << r << endl;
-       
-       //Test non-sized operator
-       r.resize(10);
-       r = Ones;
-       cout << r << endl;
-       
-       //Test sized operator
-       r = Zeros(3);
-       cout << r << endl;
-
-       r = makeVector(6, 7, 8, 9, 0);
-       cout << r << endl;
-
-       r.resize(2);
-       r[0]= 5; 
-       r[1] = 6;
-
-       cout << r << endl;
-
-
-}

Index: regressions/vector_resize.txt
===================================================================
RCS file: regressions/vector_resize.txt
diff -N regressions/vector_resize.txt
--- regressions/vector_resize.txt       18 Jan 2010 15:32:13 -0000      1.2
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,7 +0,0 @@
-4 
-1 2 
-2 3 4 
-1 1 1 1 1 1 1 1 1 1 
-0 0 0
-6 7 8 9 0 
-5 6 

Index: test/SXX_test.cc
===================================================================
RCS file: test/SXX_test.cc
diff -N test/SXX_test.cc
--- test/SXX_test.cc    30 Jun 2011 17:53:05 -0000      1.12
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,443 +0,0 @@
-#include <iostream>
-#include <sstream>
-
-using namespace std;
-
-#include <TooN/so2.h>
-#include <TooN/se2.h>
-#include <TooN/so3.h>
-#include <TooN/se3.h>
-#include <TooN/sim2.h>
-#include <TooN/sim3.h>
-
-void test_so2(){
-    cout << "---------------SO2 Tests---------------\n";
-    
-    TooN::SO2<> r1;
-    cout << "default constructor\n";
-    cout << r1 << endl;
-    cout << "default constructor <int>\n";
-    TooN::SO2<int> r2;
-    cout << r2 << endl;
-    TooN::SO2<> r(0.1);
-    cout << "constructor with 0.1\n";
-    cout << r << endl;
-    cout << "generator\n";
-    cout << r.generator() << endl;
-    cout << "ln()\n";
-    cout << r.ln() << endl;
-    cout << "inverse\n";
-    cout << r.inverse() << endl;
-    cout << "times\n";
-    cout << r * r.inverse() << endl;
-    cout << (r *= r.inverse()) << endl;
-    r = TooN::SO2<>::exp(0.1);
-
-    TooN::Vector<2> t = TooN::makeVector(0,1);
-    cout << "right and left multiply with vector " << t << "\n";
-    cout << r * t << endl;
-    cout << t * r << endl;
-    TooN::Matrix<2> l = TooN::Identity;
-    cout << "right and left multiply with matrix\n" << l << "\n";
-    cout << r * l << endl;
-    cout << l * r << endl;
-    TooN::Matrix<2,3> l2(TooN::Zeros);
-    l2[0] = TooN::makeVector(0,1,2);
-    cout << "right with rectangular matrix\n";
-    cout << r * l2 << endl;
-    cout << l2.T() * r << endl;
-
-    TooN::Matrix<2> m;
-    m[0] = TooN::makeVector(0.5, 1);
-    m[1] = TooN::makeVector(1,1);
-    cout << "set from matrix (uses coerce) " << m << "\n";
-    r = m;
-    cout << r << endl;
-
-    cout << "read from istream\n";
-    istringstream is("0 -1 1 0");
-    is >> r;
-    cout << r << endl;
-}
-
-void test_se2(){
-    cout << "---------------SE2 Tests---------------\n";
-
-    TooN::SE2<> r1;
-    cout << "default constructor\n";
-    cout << r1 << endl;
-    cout << "default constructor <int>\n";
-    TooN::SE2<int> r2;
-    cout << r2 << endl;
-    
-    cout << "from vector 1 1 0\n";
-    cout << TooN::SE2<>::exp(TooN::makeVector(1,1,0)) << endl;
-    
-    TooN::SE2<> r3(TooN::makeVector(1,1,1));
-    cout << "from vector 1 1 1\n";
-    cout << r3 << endl;
-    cout << r3.ln() << endl;
-    
-    cout << "generators 0,1,2\n";
-    cout << TooN::SE2<>::generator(0) ;
-    cout << TooN::SE2<>::generator(1) ;
-    cout << TooN::SE2<>::generator(2) << endl;
-
-    TooN::Vector<2> t1 = TooN::makeVector(0,1);
-    TooN::Vector<> t2(3); t2 = TooN::makeVector(1,0,1);
-    cout << "se2 * vector\n";
-    cout << r3 * t1 << endl;
-    cout << r3 * t2 << endl;
-    cout << "vector * se3\n";    
-    // cout << t1 * r3 << endl; // this is not well defined, should the output 
be a 3 vector ?
-    cout << t2 * r3 << endl;    
-
-    TooN::Matrix<3> m1;
-    TooN::Matrix<> m2(3,3);
-    TooN::Matrix<3,10> m3;
-    cout << "se2 * matrix\n";
-    cout << r3 * m1 << endl;
-    cout << r3 * m2 << endl;
-    cout << r3 * m3 << endl;
-    cout << "matrix * se2\n";
-    cout << m1 * r3 << endl;
-    cout << m2 * r3 << endl;
-    cout << m3.T() * r3 << endl;
-
-    TooN::SO2<> r(-1);
-    cout << "so2 * se2\n";
-    cout << r * r3 << endl;
-    
-    cout << "read from istream\n";
-    istringstream is("0 -1 2 1 0 3");
-    is >> r3;
-    cout << r3 << endl;
-}
-
-void test_so3(){
-    cout << "---------------SO3 Tests---------------\n";
-    
-    TooN::SO3<> r1;
-    cout << "default constructor\n";
-    cout << r1 << endl;
-    cout << "default constructor <int>\n";
-    TooN::SO3<int> r2;
-    cout << r2 << endl;
-    TooN::SO3<> r(TooN::makeVector(0.1, 0.1, 0.1));
-    cout << "constructor with 0.1\n";
-    cout << r << endl;
-    cout << "generator 0,1,2\n";
-    cout << TooN::SO3<>::generator(0) ;
-    cout << TooN::SO3<>::generator(1) ;
-    cout << TooN::SO3<>::generator(2) << endl;
-    cout << "ln()\n";
-    cout << r.ln() << endl;
-    cout << "inverse\n";
-    cout << r.inverse() << endl;
-    cout << "times\n";
-    cout << r * r.inverse() << endl;
-    cout << (r *= r.inverse()) << endl;
-    r = TooN::SO3<>::exp(TooN::makeVector(0.1, 0.1, 0.1));
-
-    TooN::Vector<3> t = TooN::makeVector(0,1,2);
-    cout << "right and left multiply with vector " << t << "\n";
-    cout << r * t << endl;
-    cout << t * r << endl;
-    TooN::Matrix<3> l = TooN::Identity;
-    cout << "right and left multiply with matrix\n" << l << "\n";
-    cout << r * l << endl;
-    cout << l * r << endl;
-    TooN::Matrix<3,6> l2(TooN::Zeros);
-    l2[0] = TooN::makeVector(0,1,2,3,4,5);
-    cout << "right with rectangular matrix\n";
-    cout << r * l2 << endl;
-    cout << l2.T() * r << endl;
-
-    TooN::Matrix<3> m;
-    m[0] = TooN::makeVector(0.5, 1,2);
-    m[1] = TooN::makeVector(1,1,0);
-    m[2] = TooN::makeVector(0,1,0);
-    cout << "set from matrix (uses coerce)\n" << m << "\n";
-    r = m;
-    cout << r << endl;
-    TooN::SO3<> r5(m);
-    cout << r5 << endl;
-
-    cout << "read from istream\n";
-    istringstream is("0 -1 0 1 0 0 0 0 1");
-    is >> r;
-    cout << r << endl;
-
-    cout << "test rotation constructor\n";
-    TooN::Vector<3> a = TooN::makeVector(1,0,0), b = TooN::makeVector(0,1,1);
-    TooN::SO3<> rr(a,b);
-    cout << "a " << a << " to b " << b << " is\n" << rr << endl;
-    cout << "R * a " << rr * a << endl;
-    cout << "a " << a << " to itself is\n" << TooN::SO3<>(a,a) << endl;
-}
-
-void test_se3(){
-    cout << "---------------SE3 Tests---------------\n";
-    
-    TooN::SE3<> r1;
-    cout << "default constructor\n";
-    cout << r1 << endl;
-    cout << "default constructor <int>\n";
-    TooN::SE3<int> r2;
-    cout << r2 << endl;
-    TooN::SE3<> r(TooN::makeVector(0.1, 0.1, 0.1, 0.2, -0.2, 0.2));
-    cout << "constructor\n";
-    cout << r << endl;
-    cout << "generator 0,1,2,3,4,5\n";
-    cout << TooN::SE3<>::generator(0) ;
-    cout << TooN::SE3<>::generator(1) ;
-    cout << TooN::SE3<>::generator(2) << endl;
-    cout << TooN::SE3<>::generator(3) ;
-    cout << TooN::SE3<>::generator(4) ;
-    cout << TooN::SE3<>::generator(5) << endl;
-    cout << "ln()\n";
-    cout << r.ln() << endl;
-    cout << "inverse\n";
-    cout << r.inverse() << endl;
-    cout << "times\n";
-    cout << r * r.inverse() << endl;
-    cout << (r *= r.inverse()) << endl;
-    r = TooN::SE3<>::exp(TooN::makeVector(0.1, 0.1, 0.1, 0.2, -0.2, 0.2));
-
-    TooN::Vector<4> t = TooN::makeVector(0,1,2,3);
-    cout << "right and left multiply with vector " << t << "\n";
-    cout << r * t << endl;
-    cout << t * r << endl;
-    TooN::Vector<3> t3 = TooN::makeVector(0,1,2);
-    cout << "right with a 3 vector " << t3 << "\n";
-    cout << r * t3 << endl;
-
-    TooN::Matrix<4> l = TooN::Identity;
-    cout << "right and left multiply with matrix\n" << l << "\n";
-    cout << r * l << endl;
-    cout << l * r << endl;
-    TooN::Matrix<4,6> l2(TooN::Zeros);
-    l2[0] = TooN::makeVector(0,1,2,3,4,5);
-    cout << "right with rectangular matrix\n";
-    cout << r * l2 << endl;
-    cout << l2.T() * r << endl;
-    
-    TooN::SO3<> rot(TooN::makeVector(-0.2, 0.2, -0.2));
-    cout << "mult with SO3\n";
-    cout << rot * r << endl;
-    
-    TooN::Vector<6> a = TooN::makeVector(0,1,2,0.1, 0.2, 0.3);
-    cout << "adjoint with a " << a << "\n";
-    cout << r.adjoint(a) << endl;
-    cout << "0 0 0 0 0 0 = " << r.adjoint(a) - (r * TooN::SE3<>(a) * 
r.inverse()).ln() << endl;
-    cout << "trinvadjoint with a " << a << "\n";
-    cout << r.trinvadjoint(a) << endl;
-    cout << "0 = " << r.trinvadjoint(a) * r.adjoint(a) - a * a << endl; 
-
-    TooN::Matrix<6> ma(TooN::Identity);
-    ma[0] = TooN::makeVector(0.1, 0.2, 0.1, 0.2, 0.1, 0.3);
-    ma = ma.T() * ma;
-    cout << "adjoint with ma\n" << ma << "\n";
-    cout << r.adjoint(ma) << endl;
-    cout << "trinvadjoint with ma\n";
-    cout << r.trinvadjoint(ma) << endl;
-
-    cout << "read from istream\n";
-    istringstream is("0 -1 0 1 1 0 0 2 0 0 1 3");
-    is >> r;
-    cout << r << endl;
-}
-
-void test_sim3(){
-    cout << "---------------SIM3 Tests---------------\n";
-    
-    TooN::SIM3<> r1;
-    cout << "default constructor\n";
-    cout << r1 << endl;
-    cout << "default constructor <int>\n";
-    TooN::SIM3<int> r2;
-    cout << r2 << endl;
-    TooN::SIM3<> r(TooN::makeVector(0.1, 0.1, 0.1, 0.2, -0.2, 0.2, 0.5));
-    cout << "constructor\n";
-    cout << r << endl;
-    cout << "different cases\n";
-    cout << TooN::SIM3<>(TooN::makeVector(0.0, 0, 0, 0, 0, 0, 0)) << endl;
-    cout << TooN::SIM3<>(TooN::makeVector(0.0001, 0, 0, 0, 0, 0, 0)) << endl;
-    cout << TooN::SIM3<>(TooN::makeVector(0.0, 0, 0, 0.01, 0, 0, 0)) << endl;
-    cout << TooN::SIM3<>(TooN::makeVector(0.0, 0, 0, 0.0, 0, 0, 0.0001)) << 
endl;
-    cout << "generator 0,1,2,3,4,5,6\n";
-    cout << TooN::SIM3<>::generator(0) ;
-    cout << TooN::SIM3<>::generator(1) ;
-    cout << TooN::SIM3<>::generator(2) << endl;
-    cout << TooN::SIM3<>::generator(3) ;
-    cout << TooN::SIM3<>::generator(4) ;
-    cout << TooN::SIM3<>::generator(5) << endl;
-    cout << TooN::SIM3<>::generator(6) << endl;
-    cout << "ln()\n";
-    cout << r.ln() << endl;
-    cout << "inverse\n";
-    cout << r.inverse() << endl;
-    cout << "inverse.ln()\n";
-    cout << r.inverse().ln() << endl;
-    cout << "times\n";
-    cout << r * r.inverse() << endl;
-    cout << (r *= r.inverse()) << endl;
-    r = TooN::SIM3<>::exp(TooN::makeVector(0.1, 0.1, 0.1, 0.2, -0.2, 0.2, 
0.5));
-
-    TooN::Vector<4> t = TooN::makeVector(0,1,2,3);
-    cout << "right and left multiply with vector " << t << "\n";
-    cout << r * t << endl;
-    cout << t * r << endl;
-    TooN::Vector<3> t3 = TooN::makeVector(0,1,2);
-    cout << "right with a 3 vector " << t3 << "\n";
-    cout << r * t3 << endl;
-
-    TooN::Matrix<4> l = TooN::Identity;
-    cout << "right and left multiply with matrix\n" << l << "\n";
-    cout << r * l << endl;
-    cout << l * r << endl;
-    TooN::Matrix<4,6> l2(TooN::Zeros);
-    l2[0] = TooN::makeVector(0,1,2,3,4,5);
-    cout << "right with rectangular matrix\n";
-    cout << r * l2 << endl;
-    cout << l2.T() * r << endl;
-
-#if 0    
-    TooN::SO3<> rot(TooN::makeVector(-0.2, 0.2, -0.2));
-    cout << "mult with SO3\n";
-    cout << rot * r << endl;
-    
-    TooN::Vector<6> a = TooN::makeVector(0,1,2,0.1, 0.2, 0.3);
-    cout << "adjoint with a " << a << "\n";
-    cout << r.adjoint(a) << endl;
-    cout << "0 0 0 0 0 0 = " << r.adjoint(a) - (r * TooN::SE3<>(a) * 
r.inverse()).ln() << endl;
-    cout << "trinvadjoint with a " << a << "\n";
-    cout << r.trinvadjoint(a) << endl;
-    cout << "0 = " << r.trinvadjoint(a) * r.adjoint(a) - a * a << endl; 
-
-    TooN::Matrix<6> ma(TooN::Identity);
-    ma[0] = TooN::makeVector(0.1, 0.2, 0.1, 0.2, 0.1, 0.3);
-    ma = ma.T() * ma;
-    cout << "adjoint with ma\n" << ma << "\n";
-    cout << r.adjoint(ma) << endl;
-    cout << "trinvadjoint with ma\n";
-    cout << r.trinvadjoint(ma) << endl;
-#endif
-
-    cout << "read from istream\n";
-    istringstream is("0 -1 0 1 1 0 0 2 0 0 1 3");
-    is >> r;
-    cout << r << endl;
-    cout << r.get_rotation() << "\n" << r.get_translation() << "\n" << 
r.get_scale() << endl;
-}
-
-void test_sim2(){
-    cout << "---------------SIM2 Tests---------------\n";
-    
-    TooN::SIM2<> r1;
-    cout << "default constructor\n";
-    cout << r1 << endl;
-    cout << "default constructor <int>\n";
-    TooN::SIM2<int> r2;
-    cout << r2 << endl;
-    TooN::SIM2<> r(TooN::makeVector(0.1, 0.1, 0.1, 0.2));
-    cout << "constructor\n";
-    cout << r << endl;
-    cout << "different cases\n";
-    cout << TooN::SIM2<>(TooN::makeVector(0.0, 0, 0, 0)) << endl;
-    cout << TooN::SIM2<>(TooN::makeVector(0.0001, 0, 0, 0)) << endl;
-    cout << TooN::SIM2<>(TooN::makeVector(0.0, 0, 0.0001, 0)) << endl;
-    cout << TooN::SIM2<>(TooN::makeVector(0.0, 0, 0, 0.0001)) << endl;
-    cout << "generator 0,1,2,3\n";
-    cout << TooN::SIM2<>::generator(0);
-    cout << TooN::SIM2<>::generator(1);
-    cout << TooN::SIM2<>::generator(2) << endl;
-    cout << TooN::SIM2<>::generator(3) << endl;
-    cout << "ln()\n";
-    cout << r.ln() << endl;
-    cout << "inverse\n";
-    cout << r.inverse() << endl;
-    cout << "inverse.ln()\n";
-    cout << r.inverse().ln() << endl;
-    cout << "times\n";
-    cout << r * r.inverse() << endl;
-    cout << (r *= r.inverse()) << endl;
-    r = TooN::SIM2<>::exp(TooN::makeVector(0.1, 0.1, 0.1, 0.2));
-
-    TooN::Vector<3> t = TooN::makeVector(0,1,2);
-    cout << "right and left multiply with vector " << t << "\n";
-    cout << r * t << endl;
-    cout << t * r << endl;
-    TooN::Vector<2> t3 = TooN::makeVector(0,1);
-    cout << "right with a 2 vector " << t3 << "\n";
-    cout << r * t3 << endl;
-
-    TooN::Matrix<3> l = TooN::Identity;
-    cout << "right and left multiply with matrix\n" << l << "\n";
-    cout << r * l << endl;
-    cout << l * r << endl;
-    TooN::Matrix<3,6> l2(TooN::Zeros);
-    l2[0] = TooN::makeVector(0,1,2,3,4,5);
-    cout << "right with rectangular matrix\n" << l2 << "\n";
-    cout << r * l2 << endl;
-    cout << l2.T() * r << endl;
-
-#if 0    
-    TooN::SO3<> rot(TooN::makeVector(-0.2, 0.2, -0.2));
-    cout << "mult with SO3\n";
-    cout << rot * r << endl;
-    
-    TooN::Vector<6> a = TooN::makeVector(0,1,2,0.1, 0.2, 0.3);
-    cout << "adjoint with a " << a << "\n";
-    cout << r.adjoint(a) << endl;
-    cout << "0 0 0 0 0 0 = " << r.adjoint(a) - (r * TooN::SE3<>(a) * 
r.inverse()).ln() << endl;
-    cout << "trinvadjoint with a " << a << "\n";
-    cout << r.trinvadjoint(a) << endl;
-    cout << "0 = " << r.trinvadjoint(a) * r.adjoint(a) - a * a << endl; 
-
-    TooN::Matrix<6> ma(TooN::Identity);
-    ma[0] = TooN::makeVector(0.1, 0.2, 0.1, 0.2, 0.1, 0.3);
-    ma = ma.T() * ma;
-    cout << "adjoint with ma\n" << ma << "\n";
-    cout << r.adjoint(ma) << endl;
-    cout << "trinvadjoint with ma\n";
-    cout << r.trinvadjoint(ma) << endl;
-#endif
-
-    cout << "read from istream\n";
-    istringstream is("0 -1 0 1 1 0");
-    is >> r;
-    cout << r << endl;
-    cout << r.get_rotation() << "\n" << r.get_translation() << "\n" << 
r.get_scale() << endl;
-}
-
-void test_se2_exp(){
-    cout << "------------------SE2 check------------------\n";
-
-    TooN::SE2<> s2(TooN::makeVector(1,0,1));
-    TooN::SE3<> s3(TooN::makeVector(0,1,0,1,0,0));
-    cout << s2 << endl;
-    cout << s3 << endl;
-    
-    cout << s2.ln() << "\tvs\t" << s3.ln() << endl;
-    
-}
-
-int main(int, char* *){
- 
- #if 0
-    test_so2();
-    test_so3();
-    test_se2();
-    test_se3();
-    test_sim2();
-    test_sim3();
- 
-    test_se2_exp();
-#endif
-
-    test_sim3();
-    test_sim2();
-    
-    return 0;
-}

Index: test/as_foo.cc
===================================================================
RCS file: test/as_foo.cc
diff -N test/as_foo.cc
--- test/as_foo.cc      16 Apr 2009 17:54:10 -0000      1.2
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,20 +0,0 @@
-#include <TooN/TooN.h>
-using namespace TooN;
-using namespace std;
-
-int main()
-{
-       Vector<3> v = makeVector(1, 2, 3);
-
-       cout << v.as_row() << endl;
-       cout << v.as_col() << endl;
-       cout << v.as_slice() << endl;
-
-       Vector<> u = makeVector(1, 2, 3);
-
-       cout << u.as_row() << endl;
-       cout << u.as_col() << endl;
-
-       cout << v.as_slice() << endl;
-
-}

Index: test/brent_test.cc
===================================================================
RCS file: test/brent_test.cc
diff -N test/brent_test.cc
--- test/brent_test.cc  8 Apr 2009 15:04:25 -0000       1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,23 +0,0 @@
-#include <TooN/optimization/brent.h>
-#include <iostream>
-#include <cmath>
-#include <cstdlib>
-
-using namespace TooN;
-using namespace std;
-
-
-
-double f(double x)
-{
-       return abs(x-1.2) + .2 * sin(5*x);
-}
-
-
-int main()
-{
-       cout << brent_line_search(-3., .5, 3., f(.5), f, 100) << endl;
-
-       cout << "Value should be: " << "  1.2000  -0.0559 " << endl;
-}
-

Index: test/cg_test.cc
===================================================================
RCS file: test/cg_test.cc
diff -N test/cg_test.cc
--- test/cg_test.cc     15 Apr 2009 15:50:36 -0000      1.2
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,68 +0,0 @@
-#include <TooN/optimization/golden_section.h>
-#include <TooN/optimization/conjugate_gradient.h>
-#include <iostream>
-#include <cmath>
-#include <cassert>
-#include <cstdlib>
-
-using namespace TooN;
-using namespace std;
-
-double sq(double d)
-{
-       return d*d;
-}
-
-double Rosenbrock(const Vector<2>& v)
-{
-               return sq(1 - v[0]) + 100 * sq(v[1] - sq(v[0]));
-}
-
-Vector<2> RosenbrockDerivatives(const Vector<2>& v)
-{
-       double x = v[0];
-       double y = v[1];
-
-       Vector<2> ret;
-       ret[0] = -2+2*x-400*(y-sq(x))*x;
-       ret[1] = 200*y-200*sq(x);
-
-       return ret;
-}
-
-int evals=0;
-
-double Spiral(const Vector<2>& v)
-{
-       double x = v[0];
-       double y = v[1];
-       evals++;
-       
-       return sin(20.0*sqrt(x*x+y*y)+2.0*atan(y/x))+2.0*x*x+2.0*y*y;
-}
-
-
-Vector<2> SpiralDerivatives(const Vector<2>& v)
-{
-       double x = v[0];
-       double y = v[1];
-
-       double dx 
=2.0*(10.0*cos(20.0*sqrt(x*x+y*y)+2.0*atan(y/x))*x*x*x+10.0*cos(20.0*sqrt(x*x+y*y)+2.0*atan(y/x))*x*y*y-cos(20.0*sqrt(x*x+y*y)+2.0*atan(y/x))*y*sqrt(x*x+y*y)+2.0*x*x*x*sqrt(x*x+y*y)+2.0*x*sqrt(x*x+y*y)*y*y)/sqrt(pow(x*x+y*y,3.0));
-       double dy =  
2.0*(10.0*cos(20.0*sqrt(x*x+y*y)+2.0*atan(y/x))*y*x*x+10.0*cos(20.0*sqrt(x*x+y*y)+2.0*atan(y/x))*y*y*y+cos(20.0*sqrt(x*x+y*y)+2.0*atan(y/x))*x*sqrt(x*x+y*y)+2.0*y*sqrt(x*x+y*y)*x*x+2.0*y*y*y*sqrt(x*x+y*y))/sqrt(pow(x*x+y*y,3.0));
-
-       return makeVector(dx, dy);
-}
-
-int main()
-{
-       ConjugateGradient<2> cg(makeVector(1.5, 1.5), Spiral, 
SpiralDerivatives);
-       cg.bracket_initial_lambda=1e-7; //Prevent the bracket from jumping over 
spiral arms for a prettier display
-
-       cout << cg.x << " " << cg.y << endl;
-       while(cg.iterate(Spiral, SpiralDerivatives))
-               cout << cg.x << " " << cg.y << endl;
-       cout << cg.x << " " << cg.y << endl;
-
-       cerr << "Total evaluations: " << evals << endl;
-}
-

Index: test/cg_view.gnuplot
===================================================================
RCS file: test/cg_view.gnuplot
diff -N test/cg_view.gnuplot
--- test/cg_view.gnuplot        7 Apr 2009 14:33:06 -0000       1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,19 +0,0 @@
-####
-#### Compile cg_test.cc to cg_test
-####
-
-set multiplot
-set nocontour
-set pm3d
-unset surface
-set view 0,0
-set isosample 100
-
-splot [-2:2] [-2:2] sin(20*sqrt(x**2 + y**2) + atan(y/x)*2) + 1*(x**2 + y**2)
-unset pm3d
-set surface
-splot [-2:2] [-2:2] '< ./cg_test' using 1:2:3 with linespoints title 
'Conjugate Gradient path'
-unset multiplot
-
-
-

Index: test/deriv_test.cc
===================================================================
RCS file: test/deriv_test.cc
diff -N test/deriv_test.cc
--- test/deriv_test.cc  1 Sep 2009 19:07:32 -0000       1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,46 +0,0 @@
-#include <TooN/functions/derivatives.h>
-
-using namespace TooN;
-
-
-double f(const Vector<2>& x)
-{
-       return (1 + x[1]*x[1])*cos(x[0]);
-}
-
-Vector<2> grad(const Vector<2>& x)
-{
-   return makeVector(-sin(x[0])*(x[1]*x[1] + 1), 2*x[1]*cos(x[0]));
-}
-
-Matrix<2> hess(const Vector<2>& x)
-{
-
-  return Data(-cos(x[0])*(x[1]*x[1] + 1), (-2)*x[1]*sin(x[0]),
-                     (-2)*x[1]*sin(x[0]),      2*cos(x[0]));
-}
-
-template<int N> ostream& operator<<(ostream& o, const pair<Matrix<N>, 
Matrix<N> >& m)
-{
-       o << m.first << endl << m.second << endl;
-       return o;
-}
-
-int main()
-{
-       cout << grad(Zeros) << endl;
-       cout << numerical_gradient_with_errors(f, Vector<2>(Zeros)).T() << endl 
<< endl;
-
-       cout << hess(Zeros) << endl;
-       cout << numerical_hessian_with_errors(f, Vector<2>(Zeros)) << endl;
-       
-
-       Vector<2> v;
-       for(v[0] = -10; v[0] < 10; v[0] += 4.3)
-               for(v[1] = -10; v[1] < 10; v[1] += 4.3)
-               {
-                       cout << grad(v) << endl;
-                       cout << numerical_gradient(f, v) << endl;
-                       cout << norm_fro(hess(v) - numerical_hessian(f, v)) << 
endl << endl;
-               }
-}

Index: test/diagslice.cc
===================================================================
RCS file: test/diagslice.cc
diff -N test/diagslice.cc
--- test/diagslice.cc   1 May 2009 09:47:16 -0000       1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,35 +0,0 @@
-#include <TooN/TooN.h>
-#include <cstdlib>
-using namespace TooN;
-using namespace std;
-
-template<int R, int C> void test(int r, int c)
-{
-       Matrix<R,C> m(r,c);
-       for(int r=0; r < m.num_rows(); r++)
-               for(int c=0; c < m.num_cols(); c++)
-                       m[r][c] = rand()*.1/RAND_MAX;
-       
-       cout << m << endl;
-       cout << "Diag: " << m.diagonal_slice() << endl << endl;
-}
-
-int main()
-{
-       test<3,3>(3,3);
-       test<3,2>(3,2);
-       test<2,3>(2,3);
-
-       test<3,Dynamic>(3,3);
-       test<3,Dynamic>(3,2);
-       test<2,Dynamic>(2,3);
-
-       test<Dynamic,3>(3,3);
-       test<Dynamic,2>(3,2);
-       test<Dynamic,3>(2,3);
-
-
-       test<Dynamic,Dynamic>(3,3);
-       test<Dynamic,Dynamic>(3,2);
-       test<Dynamic,Dynamic>(2,3);
-}

Index: test/dynamic_test.cc
===================================================================
RCS file: test/dynamic_test.cc
diff -N test/dynamic_test.cc
--- test/dynamic_test.cc        1 Apr 2009 15:48:45 -0000       1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,27 +0,0 @@
-#include <TooN/TooN.h>
-
-using namespace TooN;
-extern "C"{
-
-Vector<3> add_static(const Vector<3>& a, const Vector<3>& b)
-{
-       Vector<3> t;
-       for(int i=0; i < 3; i++)
-               t[i] = a[i] + b[i];
-
-       Vector<3> t1 = t;
-       Vector<3> t2 = t1;
-       return t2;
-}
-
-Vector<-1> add_dynamic(const Vector<-1>& a, const Vector<-1>& b)
-{
-       Vector<> t(a.size());
-       for(int i=0; i < 3; i++)
-               t[i] = a[i] + b[i];
-       Vector<> t1 = t;
-       Vector<> t2 = t1;
-       return t2;
-}
-
-}

Index: test/fadbad.cpp
===================================================================
RCS file: test/fadbad.cpp
diff -N test/fadbad.cpp
--- test/fadbad.cpp     4 Jun 2011 09:31:00 -0000       1.2
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,45 +0,0 @@
-#include <TooN/functions/fadbad.h>
-
-#include <TooN/se2.h>
-
-using namespace std;
-using namespace TooN;
-using namespace fadbad;
-
-void test() {
-    SE3<F<double, 6> > se3id = make_fad_se3<double, 6>();
-    cout << "SE3 derivatives\n";
-    for(int i = 0; i < 6; ++i)
-        cout << get_derivative(se3id.get_rotation().get_matrix(), i) << 
get_derivative(se3id.get_translation(), i) <<  "\n\n";
-
-    SO3<F<double, 6> > so3id = make_fad_so3<double, 6>();
-    cout << "SO3 derivatives\n";
-    for(int i = 0; i < 3; ++i)
-        cout << get_derivative(so3id.get_matrix(), i) << "\n";
-
-    SE2<F<double> > se2id = make_fad_se2<double>();
-    cout << "SE2 derivatives\n";
-    for(int i = 0; i < 3; ++i)
-        cout << get_derivative(se2id.get_rotation().get_matrix(), i) << 
get_derivative(se2id.get_translation(), i) <<  "\n\n";
-    
-    SO2<F<double> > so2id = make_fad_so2<double>();
-    cout << "SO2 derivatives\n";
-    cout << get_derivative(so2id.get_matrix(), 0) << "\n";
-    // cout << get_derivative((so2id * SO2<>(0.1)).get_matrix(), 0) << "\n";
-}
-
-int main(int argc, char ** argv){
-    test();
-
-#if 0
-    SE3<> id(makeVector(1,0,0,0,0,0));
-    
-    const SE3<F<double> > g = make_left_fad_se3(id);
-    for(int i = 0; i < 6; ++i)
-        cout << get_derivative(g.get_rotation().get_matrix(), i) << 
get_derivative(g.get_translation(), i) <<  "\n\n";
-
-    Vector<3> in = makeVector(1,2,3);
-    const Vector<3, F<double> > p = g * in;
-    cout << p << "\n" << get_jacobian<3,6>(p) << endl;
-#endif
-}

Index: test/gaussian_elimination_test.cc
===================================================================
RCS file: test/gaussian_elimination_test.cc
diff -N test/gaussian_elimination_test.cc
--- test/gaussian_elimination_test.cc   20 Mar 2009 16:49:25 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,50 +0,0 @@
-#include <cstdlib>
-#include <cmath>
-#include <iostream>
-#include <fstream>
-#include <TooN/TooN.h>
-#include <TooN/helpers.h>
-#include <TooN/gaussian_elimination.h>
-#include <tr1/random>
-
-using namespace TooN;
-using namespace std;
-using namespace tr1;
-
-
-int main()
-{
-       
-       unsigned int s;
-       ifstream("/dev/urandom").read((char*)&s, 4);
-       
-       std::tr1::mt19937 eng;
-       std::tr1::uniform_real<double> rnd;
-       eng.seed(s);
-       Matrix<5,5> m(5,5);
-
-       for(int i=0; i< m.num_rows(); i++)
-               for(int j=0; j< m.num_rows(); j++)
-                       m[i][j] = rnd(eng);
-
-       cout << m << endl;
-       
-       Matrix<5,5> i;
-       Identity(i);
-
-       Matrix<5,5> inv = gaussian_elimination(m, i);
-       
-       Matrix<5,5> a = m*inv;
-
-       for(int i=0; i< m.num_rows(); i++)
-               for(int j=0; j< m.num_rows(); j++)
-               {
-                       if(round(a[i][j]) < 1e-10)
-                               a[i][j] = 0;
-               }
-
-       cout << a;
-
-
-
-}

Index: test/golden_test.cc
===================================================================
RCS file: test/golden_test.cc
diff -N test/golden_test.cc
--- test/golden_test.cc 3 Apr 2009 17:21:48 -0000       1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,23 +0,0 @@
-#include <TooN/optimization/golden_section.h>
-#include <iostream>
-#include <cmath>
-#include <cstdlib>
-
-using namespace TooN;
-using namespace std;
-
-
-
-double f(double x)
-{
-       return abs(x-1.2) + .2 * sin(5*x);
-}
-
-
-int main()
-{
-       cout << golden_section_search(-3., .5, 3., f) << endl;
-
-       cout << "Value should be: " << "  1.2000  -0.0559 " << endl;
-}
-

Index: test/identity_test.cc
===================================================================
RCS file: test/identity_test.cc
diff -N test/identity_test.cc
--- test/identity_test.cc       18 Jun 2009 14:52:49 -0000      1.5
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,32 +0,0 @@
-#include <TooN/helpers.h>
-
-using namespace TooN;
-using namespace std;
-
-int main()
-{
-       Matrix<3> m = Identity;
-
-       cout << m << endl;
-
-       Matrix<3> n = 2 * Identity;
-
-       cout << n << endl;
-
-       n = Identity * 3;
-
-       cout << n << endl;
-
-
-       Matrix<> q = 5.5 * Identity(6) * 2;
-
-       cout << q << endl;
-       cout << q - 3.*Identity/4 << endl;
-
-       Matrix<3> p = Ones * 2;
-
-       cout <<  Identity - p << endl;
-
-       Matrix<3> g = -Identity * 2;
-       cout << g << endl;
-}

Index: test/log.cc
===================================================================
RCS file: test/log.cc
diff -N test/log.cc
--- test/log.cc 31 Mar 2011 21:04:44 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,20 +0,0 @@
-#include <TooN/TooN.h>
-
-#include <iostream>
-
-using namespace std;
-using namespace TooN;
-
-int main(int argc, char ** argv){
-    Matrix<2> t;
-    t[0] = makeVector(10.0, 17.182818284590450);
-    t[1] = makeVector( 0.0, 27.182818284590450);
-    
-    Matrix<2> s = sqrt(t);
-    Matrix<2> l = log(t);
-    
-    cout << "input\n" << t << endl;
-    cout << "square root\n" << s << endl;
-    cout << "log\n" << l << endl;
-    cout << "difference exp(l) - t\n" << exp(l) - t << endl;
-}

Index: test/lutest.cc
===================================================================
RCS file: test/lutest.cc
diff -N test/lutest.cc
--- test/lutest.cc      27 Feb 2009 12:46:55 -0000      1.2
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,34 +0,0 @@
-#include <cstdlib>
-#include <cmath>
-#include <iostream>
-#include <TooN/TooN.h>
-#include <TooN/LU.h>
-
-using namespace TooN;
-using namespace std;
-
-
-int main()
-{
-       Matrix<-1,5,float> m(5,5);
-
-       for(int i=0; i< m.num_rows(); i++)
-               for(int j=0; j< m.num_rows(); j++)
-                       m[i][j] = drand48();
-
-       
-       LU<-1,float> mlu(m);
-       Matrix<5,5,float> a = m*mlu.get_inverse();
-
-       for(int i=0; i< m.num_rows(); i++)
-               for(int j=0; j< m.num_rows(); j++)
-               {
-                       if(round(a[i][j]) < 1e-10)
-                               a[i][j] = 0;
-               }
-
-       cout << a;
-
-
-
-}

Index: test/make_vector.cc
===================================================================
RCS file: test/make_vector.cc
diff -N test/make_vector.cc
--- test/make_vector.cc 13 Jan 2009 15:06:53 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,12 +0,0 @@
-#include <TooN/TooN.h>
-using namespace TooN;
-
-Vector<5> return_a_vector()
-{
-       return makeVector(1, 2, 3, 4, 5);
-}
-
-double return_a_double()
-{
-       return makeVector(4, 5, 6, 7)[3] -6;
-}

Index: test/makevector.cc
===================================================================
RCS file: test/makevector.cc
diff -N test/makevector.cc
--- test/makevector.cc  20 Mar 2009 12:23:58 -0000      1.2
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,38 +0,0 @@
-#include <TooN/TooN.h>
-#include <cstdarg>
-using namespace TooN;
-
-
-template<int N, typename Precision> Vector<N, Precision> makeVector(const 
Precision& x, ...)
-{
-       Vector<N> retval;
-       retval[0] = N;
-
-       va_list ap;
-       int i;
-       va_start(ap, x);
-       for(int i=1; i < N; i++)
-               retval[i] = va_arg(ap, Precision);
-       va_end(ap);
-       return retval;
-
-}
-
-extern "C"{
-double use_make_vector_double(const Vector<4>& v)
-{
-       return v * makeVector(0,0,2.0,0);
-}
-
-double use_make_vector_int(const Vector<4>& v)
-{
-       return v * makeVector<int>(0,0,2,0);
-}
-
-double use_make_vector_var(const Vector<4>& v)
-{
-       return v * makeVector<4, double>(0.0,0.0,2.0,0.0);
-}
-
-}
-

Index: test/mat_test.cc
===================================================================
RCS file: test/mat_test.cc
diff -N test/mat_test.cc
--- test/mat_test.cc    6 Mar 2009 14:51:41 -0000       1.6
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,62 +0,0 @@
-#include <TooN/TooN.h>
-#include <iterator>
-#include <iostream>
-
-using namespace TooN;
-using namespace std;
-
-
-template<int R, int C, class P, class L> void set(Matrix<R,C,P,L>& m)
-{
-       m[0][0] = 1;
-       m[0][1] = 2;
-       m[0][2] = 3;
-       m[0][3] = 4;
-       m[1][0] = 5;
-       m[1][1] = 6;
-       m[1][2] = 7;
-       m[1][3] = 8;
-       m[2][0] = 9;
-       m[2][1] = 10;
-       m[2][2] = 11;
-       m[2][3] = 12;
-}
-
-template<int R, int C, class P, class L> void foo(const Matrix<R,C,P,L>& m)
-{
-       cout << "In foo:\n";
-       
-       cout << "Slices:\n";
-       cout << m << endl;
-       cout << m.template slice<0,0,2,3>() << endl;
-       cout << m.template slice<0,0,2,3>().template slice<0,1,2,2>() << endl;
-
-       cout << "Transposes:\n";
-       cout << m.T() << endl;
-       cout << m.T().template slice<0,0,2,3>() << endl;
-       cout << m.T().template slice<0,0,2,3>().template slice<0,1,2,2>() << 
endl;
-
-       cout << "Subscripts:\n";
-       cout << m[0] << ", " << m[1] << ", " << m[2] << endl;
-
-       cout << m.template slice<1,1,2,2>()[0] << ", " << m.template 
slice<1,1,2,2>()[1] << endl;
-
-       cout << "Layout:\n";
-
-       copy(&m[0][0], &m[0][0]+m.num_rows()*m.num_cols(), 
ostream_iterator<double>(cout, " "));
-       cout << endl;
-}
-
-
-int main()
-{
-       Matrix<3,4> m;  
-       set(m);
-       foo(m);
-       
-       cout << m.my_data << endl;
-
-       Matrix<3,4,double,ColMajor> n;  
-       set(n);
-       foo(n);
-}

Index: test/mat_test2.cc
===================================================================
RCS file: test/mat_test2.cc
diff -N test/mat_test2.cc
--- test/mat_test2.cc   7 Feb 2009 15:32:56 -0000       1.4
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,91 +0,0 @@
-#include <TooN/TooN.h>
-using namespace TooN;
-using namespace std;
-
-template<int R, int C, class B> void statictest(Matrix<R,C,double,B> m)
-{
-       for(int i=0; i < 12; i++)
-               (&m[0][0])[i] = i;
-
-       cout << m << endl;
-
-       cout << "Accessing rows as vectors:\n";
-       for(int i=0; i < 3; i++)
-               cout << "...  " << m[i] << "...\n";
-       cout << endl;
-
-       cout << "Slice, from [1,1], size [2,3]:\n";
-       cout << m.template slice<1,1,2,3>() << endl;
-
-       cout << "Accessing rows of a slice as vectors:\n";
-       for(int i=0; i < 2; i++)
-               cout << "...  " << m.template slice<1,1,2,3>()[i] << "...\n";
-       cout << endl;
-
-
-
-       cout << "Slice, of the above slice from [0,0], size [2,1]:\n";
-       cout << m.template slice<1,1,2,3>().template slice<0,0,2,1>() << endl;
-
-       cout << "Accessing rows of a slice of a slice as vectors:\n";
-       for(int i=0; i < 2; i++)
-               cout << "...  " << m.template slice<1,1,2,3>().template 
slice<0,0,2,1>()[i] << "...\n";
-       cout << endl;
-}
-
-template<int R, int C, class B> void staticdynamictest(Matrix<R,C,double,B> m)
-{
-       for(int i=0; i < 12; i++)
-               (&m[0][0])[i] = i;
-
-       cout << m << endl;
-
-       cout << "Dynamic slice, from [1,1], size [2,3]:\n";
-       cout << m.slice(1,1,2,3) << endl;
-
-       cout << "Accessing rows of a slice as vectors:\n";
-       for(int i=0; i < 2; i++)
-               cout << "...  " << m.slice(1,1,2,3)[i] << "...\n";
-       cout << endl;
-
-
-       cout << "Static slice, of the above slice from [0,0], size [2,1]:\n";
-       cout << m.slice(1,1,2,3).template slice<0,0,2,1>() << endl;
-
-       cout << "Accessing rows of a slice of a slice as vectors:\n";
-       for(int i=0; i < 2; i++)
-               cout << "...  " << m.slice(1,1,2,3).template 
slice<0,0,2,1>()[i] << "...\n";
-       cout << endl;
-
-
-       cout << "Dynamic slice, of the above slice from [0,0], size [2,1]:\n";
-       cout << m.slice(1,1,2,3).slice(0,0,2,1) << endl;
-
-       cout << "Accessing rows of a slice of a slice as vectors:\n";
-       for(int i=0; i < 2; i++)
-               cout << "...  " << m.slice(1,1,2,3).slice(0,0,2,1)[i] << 
"...\n";
-       cout << endl;
-
-       cout << "Dynamic slice, of static version of the above slice from 
[0,0], size [2,1]:\n";
-       cout << m.template slice<1,1,2,3>().slice(0,0,2,1) << endl;
-
-       cout << "Accessing rows of a slice of a slice as vectors:\n";
-       for(int i=0; i < 2; i++)
-               cout << "...  " << m.template 
slice<1,1,2,3>().slice(0,0,2,1)[i] << "...\n";
-       cout << endl;
-}
-
-int main()
-{
-       cout << "-------------- STATIC MATRIX STATIC SLICE\n";
-       statictest(Matrix<3,4>());
-
-       cout << "-------------- DYNAMIC MATRIX STATIC SLICE\n";
-       statictest(Matrix<>(3,4));
-
-       cout << "-------------- STATIC MATRIX MIXED SLICE\n";
-       staticdynamictest(Matrix<3,4>());
-
-       cout << "-------------- DYNAMIC MATRIX MIXED SLICE\n";
-       staticdynamictest(Matrix<>(3,4));
-}

Index: test/mmult_test.cc
===================================================================
RCS file: test/mmult_test.cc
diff -N test/mmult_test.cc
--- test/mmult_test.cc  10 Mar 2009 15:00:10 -0000      1.3
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,50 +0,0 @@
-#include <TooN/TooN.h>
-#include <TooN/helpers.h>
-
-using namespace std;
-using namespace TooN;
-
-template<class C> void type(const C&)
-{
-       cout << __PRETTY_FUNCTION__ << endl;
-}
-
-#define V(a,N) (a==-1?-1:N)
-
-template<int a, int b> void mmult_test()
-{
-       cout << "\n\n\n----------------------------------------------\n\n";
-       cout << "Testing " << (a==-1?"dynamic":"static") << " * " << 
(b==-1?"dynamic":"static") << ":\n";
-
-       Matrix<V(a,2),V(a,3)> m3(2,3);
-       m3[0] = makeVector(0, 1, 2);
-       m3[1] = makeVector(3, 4, 5);
-       Matrix<V(b,3),V(b,2)> m4(3,2);
-       m4[0] = makeVector(6, 7);
-       m4[1] = makeVector(8, 9);
-       m4[2] = makeVector(10, 11);
-
-       Vector<V(a,3)> v(3);
-       v = makeVector(6,8,10);
-
-       cout << m3<<endl;
-       cout << m4<<endl;
-       cout << m3*m4;
-       
-       cout << "\n should be: \n    28    31\n  100   112\n";
-
-       cout << endl << v << endl;
-       cout << endl <<  m3*v << endl;
-
-       cout << "\n should be: \n    28    100\n" << endl;
-
-}
-
-int main()
-{
-       mmult_test<1,1>();
-       mmult_test<1,-1>();
-       mmult_test<-1,1>();
-       mmult_test<-1,-1>();
-}
-

Index: test/normalize_test.cc
===================================================================
RCS file: test/normalize_test.cc
diff -N test/normalize_test.cc
--- test/normalize_test.cc      25 Mar 2009 20:18:16 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,36 +0,0 @@
-#include <TooN/TooN.h>
-#include <cmath>
-
-using namespace TooN;
-using namespace std;
-
-extern Vector<4>& v;
-
-inline void norm_in_place(Vector<4>& v)
-{
-       v/=sqrt(v*v);   
-}
-
-
-inline Vector<4> unit(const Vector<4>& v)
-{
-       return v/sqrt(v*v);     
-}
-
-
-void norm_v_1()
-{
-       norm_in_place(v);
-}
-
-void norm_v_2()
-{
-       v = unit(v);
-}
-
-
-void norm_v_3()
-{
-       v.slice<0,4>() = unit(v.slice<0,4>());
-}
-

Index: test/normalize_test2.cc
===================================================================
RCS file: test/normalize_test2.cc
diff -N test/normalize_test2.cc
--- test/normalize_test2.cc     16 Apr 2009 17:59:08 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,38 +0,0 @@
-#include <TooN/helpers.h>
-
-using namespace std;
-using namespace TooN;
-
-int main()
-{
-       {
-               Vector<4> v;
-               
-               v = makeVector(1,1,1,1);
-               normalize(v);
-               cout << v << endl;
-
-               v = makeVector(1,1,1,1);
-               normalize(v.slice<0,2>());
-               cout << v << endl;
-
-               v = makeVector(1,1,1,1);
-               normalize(v.slice(0,3));
-               cout << v << endl;
-       }
-       
-       {
-               Vector<> v = makeVector(1,1,1,1);
-               
-               normalize(v);
-               cout << v << endl;
-
-               v = makeVector(1,1,1,1);
-               normalize(v.slice<0,2>());
-               cout << v << endl;
-
-               v = makeVector(1,1,1,1);
-               normalize(v.slice(0,3));
-               cout << v << endl;
-       }
-}

Index: test/scalars.cc
===================================================================
RCS file: test/scalars.cc
diff -N test/scalars.cc
--- test/scalars.cc     5 May 2009 16:26:38 -0000       1.5
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,33 +0,0 @@
-#include <TooN/TooN.h>
-#include <TooN/helpers.h>
-using namespace TooN;
-using namespace std;
-int main()
-{
-       Vector<> v = Ones(5);
-
-       cout << v << endl;
-
-       cout << v + Ones*3 << endl;
-       
-       cout << v.slice(2,3) + Ones*3 << endl;
-
-       v+= Ones;
-       cout << v << endl;
-       v.slice(0,3) += Ones * 3;
-       cout << v << endl;
-
-       Matrix<> m = 3*Ones(4,4) * 2;
-       cout << m << endl;
-       cout << m.slice<0,0,2,3>() - 2*Ones << endl;
-
-       m+= Ones;
-       cout << m << endl;
-       m.slice<0,0,3,2>() += Ones*2;
-       cout << m << endl;
-
-
-       Matrix<3> p = Identity;
-       cout << p - Ones << endl;
-       cout << Ones - p << endl;
-}

Index: test/simplex_view.gnuplot
===================================================================
RCS file: test/simplex_view.gnuplot
diff -N test/simplex_view.gnuplot
--- test/simplex_view.gnuplot   21 Oct 2009 12:35:07 -0000      1.2
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,19 +0,0 @@
-####
-#### Compile cg_test.cc to cg_test
-####
-
-set multiplot
-set nocontour
-set pm3d
-unset surface
-set view 0,0
-set isosample 100
-
-splot [-2:2] [-2:2] sin(20*sqrt(x**2 + y**2) + atan(y/x)*2) + 1*(x**2 + y**2)
-unset pm3d
-set surface
-splot [-2:2] [-2:2] '< regressions/simplex.test' using 1:2:3 with linespoints 
title 'Simplex path'
-unset multiplot
-
-
-

Index: test/sl.cc
===================================================================
RCS file: test/sl.cc
diff -N test/sl.cc
--- test/sl.cc  31 Mar 2011 21:04:44 -0000      1.5
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,55 +0,0 @@
-#include <TooN/TooN.h>
-#include <TooN/sl.h>
-
-#include <iostream>
-#include <iomanip>
-
-using namespace TooN;
-using namespace std;
-
-int main(int , char ** ){
-       SL<3> h(makeVector(1,0,-1,0,0,0,0,0));
-       cout << h << endl;
-       cout << h.inverse() << endl;
-       cout << SL<3>::exp(makeVector(-1,0,1,0,0,0,0,0)) << endl;
-       cout << h * h.inverse() << endl;
-       h *= h.inverse();
-       cout << h << endl;
-       
-       for(int i = 0; i < SL<3>::dim; ++i)
-               cout << "generator " << i << "\n" << SL<3>::generator(i) << 
endl;
-
-       for(int i = 0; i < SL<2>::dim; ++i)
-               cout << "generator " << i << "\n" << SL<2>::generator(i) << 
endl;
-       
-       cout << SL<2>::exp(makeVector(1,2,3)) << endl;
-       
-       h = SL<3>::exp(makeVector(1,0,-1,0,0,0,1,0));
-       
-       cout << h << "\n";
-       Vector<3> t = makeVector(0,1,2);
-       cout << "with vector " << t << "\n";
-       cout << h * t << "\n";
-       cout << t * h << "\n";
-       
-       Matrix<3,5> m = Zeros;
-       m[0] = makeVector(0,1,2,3,4);
-       m[1] = makeVector(1,2,3,4,-5);
-       m[2] = makeVector(2,3,4,5,8);
-       
-       cout << "with matrix " << m << "\n";
-       cout << h * m << "\n";
-       cout << m.T() * h << "\n";
-       
-       cout << endl;
-       
-       cout << "log(h)\t" << h.ln() << endl;
-       cout << "diff\n" << h.get_matrix() - SL<3>::exp(h.ln()).get_matrix() << 
endl;
-       
-/*
-       SO3<> so3(makeVector(1,0,1));
-       h = so3;
-       cout << so3.get_matrix() << h.get_matrix() << "\n";
-*/     
-       return 0;
-}

Index: test/slice_test.cc
===================================================================
RCS file: test/slice_test.cc
diff -N test/slice_test.cc
--- test/slice_test.cc  14 Oct 2009 11:20:36 -0000      1.7
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,93 +0,0 @@
-#include <TooN/TooN.h>
-using namespace std;
-using namespace TooN;
-
-template<class M> void row(const M& m)
-{
-       for(int r=0; r< m.num_rows(); r++)
-               cout << m[r];
-       cout << endl;
-}
-
-int main()
-{
-       Vector<6> v = makeVector(1, 2, 3, 4, 5, 6);
-       Vector<>  u = v;
-
-       cout << v.slice<0,3>() << endl;
-       cout << u.slice<0,3>() << endl << endl;
-
-       cout << v.slice<1,3>(1, 3) << endl;
-       cout << u.slice<1,3>(1, 3) << endl;
-       cout << v.slice<Dynamic,3>(1, 3) << endl;
-       cout << u.slice<Dynamic,3>(1, 3) << endl;
-       cout << v.slice<1,Dynamic>(1, 3) << endl;
-       cout << u.slice<1,Dynamic>(1, 3) << endl;
-       cout << v.slice<Dynamic,Dynamic>(1, 3) << endl;
-       cout << u.slice<Dynamic,Dynamic>(1, 3) << endl << endl;
-
-       cout << v.slice(2, 3) << endl;
-       cout << u.slice(2, 3) << endl << endl;
-       
-       cout << project(v) << endl;
-       cout << project(u) << endl;
-       cout << project(v.slice<1,End<0> >()) << endl;
-       cout << project(u.slice<1,End<0> >()) << endl;
-       cout << unproject(v) << endl;
-       cout << unproject(u) << endl;
-
-       cout << v.slice<1, End<0> >() << endl;  
-       cout << u.slice<1, End<0> >() << endl;  
-       cout << v.slice<1, End<-1> >() << endl; 
-       cout << u.slice<1, End<-1> >() << endl; 
-       cout << v.slice(2, End) << endl;        
-       cout << u.slice(2, End) << endl;        
-       cout << v.slice(2, End(-1)) << endl << endl;    
-       cout << u.slice(2, End(-1)) << endl << endl;    
-
-       Vector<200> w = Zeros;
-
-       cout << w.slice<100,End<-99> >() << endl;
-
-       cout << endl << endl << endl;
-
-       Matrix<3> m = Data(1, 2, 3, 4, 5, 6, 7, 8, 9);
-       Matrix<>  n = m;
-       
-       row(m.slice<0,1,2,2>());
-       row(n.slice<0,1,2,2>());
-       row(m.slice(0,1,2,2));
-       row(n.slice(0,1,2,2));
-       row(m.slice<0      ,1      ,2      ,2      >(0, 1, 2, 2));
-       row(n.slice<0      ,1      ,2      ,2      >(0, 1, 2, 2));
-       row(m.slice<0      ,1      ,2      ,Dynamic>(0, 1, 2, 2));
-       row(n.slice<0      ,1      ,2      ,Dynamic>(0, 1, 2, 2));
-       row(m.slice<0      ,1      ,Dynamic,2      >(0, 1, 2, 2));
-       row(n.slice<0      ,1      ,Dynamic,2      >(0, 1, 2, 2));
-       row(m.slice<0      ,1      ,Dynamic,Dynamic>(0, 1, 2, 2));
-       row(n.slice<0      ,1      ,Dynamic,Dynamic>(0, 1, 2, 2));
-       row(m.slice<0      ,Dynamic,2      ,2      >(0, 1, 2, 2));
-       row(n.slice<0      ,Dynamic,2      ,2      >(0, 1, 2, 2));
-       row(m.slice<0      ,Dynamic,2      ,Dynamic>(0, 1, 2, 2));
-       row(n.slice<0      ,Dynamic,2      ,Dynamic>(0, 1, 2, 2));
-       row(m.slice<0      ,Dynamic,Dynamic,2      >(0, 1, 2, 2));
-       row(n.slice<0      ,Dynamic,Dynamic,2      >(0, 1, 2, 2));
-       row(m.slice<0      ,Dynamic,Dynamic,Dynamic>(0, 1, 2, 2));
-       row(n.slice<0      ,Dynamic,Dynamic,Dynamic>(0, 1, 2, 2));
-       row(m.slice<Dynamic,1      ,2      ,2      >(0, 1, 2, 2));
-       row(n.slice<Dynamic,1      ,2      ,2      >(0, 1, 2, 2));
-       row(m.slice<Dynamic,1      ,2      ,Dynamic>(0, 1, 2, 2));
-       row(n.slice<Dynamic,1      ,2      ,Dynamic>(0, 1, 2, 2));
-       row(m.slice<Dynamic,1      ,Dynamic,2      >(0, 1, 2, 2));
-       row(n.slice<Dynamic,1      ,Dynamic,2      >(0, 1, 2, 2));
-       row(m.slice<Dynamic,1      ,Dynamic,Dynamic>(0, 1, 2, 2));
-       row(n.slice<Dynamic,1      ,Dynamic,Dynamic>(0, 1, 2, 2));
-       row(m.slice<Dynamic,Dynamic,2      ,2      >(0, 1, 2, 2));
-       row(n.slice<Dynamic,Dynamic,2      ,2      >(0, 1, 2, 2));
-       row(m.slice<Dynamic,Dynamic,2      ,Dynamic>(0, 1, 2, 2));
-       row(n.slice<Dynamic,Dynamic,2      ,Dynamic>(0, 1, 2, 2));
-       row(m.slice<Dynamic,Dynamic,Dynamic,2      >(0, 1, 2, 2));
-       row(n.slice<Dynamic,Dynamic,Dynamic,2      >(0, 1, 2, 2));
-       row(m.slice<Dynamic,Dynamic,Dynamic,Dynamic>(0, 1, 2, 2));
-       row(n.slice<Dynamic,Dynamic,Dynamic,Dynamic>(0, 1, 2, 2));
-}

Index: test/svd_test.cc
===================================================================
RCS file: test/svd_test.cc
diff -N test/svd_test.cc
--- test/svd_test.cc    29 Apr 2009 22:54:50 -0000      1.3
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,30 +0,0 @@
-#include <TooN/SVD.h>
-#include <TooN/helpers.h>
-using namespace TooN;
-using namespace std;
-
-int main()
-{
-       Matrix<3, 4> m = Zeros;
-       m[0] = makeVector(1, 2, 3, 4);
-       m[1] = makeVector(1, 1, 1, 1);
-       m[2] = makeVector(3, 2, 6, 7);  
-
-       cout << m << endl;
-
-       SVD<-1, -1> svdm(m);
-
-       Matrix<3,4> temp =diagmult(svdm.get_diagonal(), svdm.get_VT());
-
-       cout << svdm.get_U() * temp << endl;
-
-       Matrix<4,3> m2 = m.T();
-       SVD<-1,-1> svdm2(m2);
-
-       cout << svdm2.get_U() * diagmult(svdm2.get_diagonal(), svdm2.get_VT()) 
<< endl;
-
-
-
-
-
-}

Index: test/sym.cc
===================================================================
RCS file: test/sym.cc
diff -N test/sym.cc
--- test/sym.cc 14 Apr 2009 14:56:11 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,47 +0,0 @@
-
-#include <iostream>
-
-using namespace std;
-
-#include <TooN/SymEigen.h>
-
-int main(int, char **){
-
-    TooN::Matrix<> mt(3,3);
-    cout << mt * TooN::makeVector(0,1,2) << endl;
-
-    TooN::Matrix<2> tt;
-    tt[0] = TooN::makeVector(1,2);
-    tt[1] = TooN::makeVector(2,1);
-    
-    TooN::SymEigen<2> symt(tt);
-    cout << symt.get_evectors() << symt.get_evalues() << endl;
-
-    TooN::Matrix<3> t;
-
-    t[0] = TooN::makeVector(1,0.5, 0.5);
-    t[1] = TooN::makeVector(0.5, 2, 0.7);
-    t[2] = TooN::makeVector(0.5,0.7, 3);
-    
-    TooN::SymEigen<3> sym(t);
-    cout << sym.backsub(TooN::makeVector(0,1,2)) << endl;
-    
-    TooN::Matrix<> t2(3,3);
-
-    t2[0] = TooN::makeVector(1,0.5, 0.5);
-    t2[1] = TooN::makeVector(0.5, 2, 0.7);
-    t2[2] = TooN::makeVector(0.5,0.7, 3);
-    
-    TooN::SymEigen<> sym2(t2);
-    cout << sym2.backsub(TooN::makeVector(0,1,2)) << endl;
-
-    
-    TooN::Matrix<-1, -1, float> t2f(3,3);
-
-    t2f[0] = TooN::makeVector(1,0.5, 0.5);
-    t2f[1] = TooN::makeVector(0.5, 2, 0.7);
-    t2f[2] = TooN::makeVector(0.5,0.7, 3);
-    
-    TooN::SymEigen<TooN::Dynamic,float> symf(t2f);
-    cout << symf.backsub(TooN::makeVector(0,1,2)) << endl;
-}

Index: test/test2.cc
===================================================================
RCS file: test/test2.cc
diff -N test/test2.cc
--- test/test2.cc       24 Aug 2009 13:00:16 -0000      1.7
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,33 +0,0 @@
-#include <TooN/TooN.h>
-#include <TooN/helpers.h>
-
-using namespace std;
-using namespace TooN;
-
-template<class C> void type(const C&)
-{
-       cout << __PRETTY_FUNCTION__ << endl;
-}
-
-void make_a_copy_constructor_happen(const Vector<4>& v)
-{
-       cout << "Pre CC\n";
-       Vector<4> v2(v);
-       cout << "Post CC\n";
-}
-
-int main()
-{
-       Vector<4> v1 = makeVector(1, 2, 3, 4);
-       Vector<4> v2 = makeVector(5, 6, 7, 8);
-
-       make_a_copy_constructor_happen(v1);
-
-       cout << Ones + (v1 + v2)+2*Ones << endl;
-
-       v1.slice<0, 2>() /= 2;
-       cout << v1 << endl;
-
-       type(Vector<2>() + Vector<2, int>());
-}
-

Index: test/test3.cc
===================================================================
RCS file: test/test3.cc
diff -N test/test3.cc
--- test/test3.cc       24 Aug 2009 13:00:16 -0000      1.7
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,44 +0,0 @@
-#include <TooN/TooN.h>
-#include <TooN/helpers.h>
-
-using namespace std;
-using namespace TooN;
-
-template<class C> void type(const C&)
-{
-       cout << __PRETTY_FUNCTION__ << endl;
-}
-
-int main()
-{
-       Matrix<3> m1(Zeros);
-       Matrix<3> m2(Zeros);
-
-       m1.slice<0,0,2,2>()+=3;
-       m2.slice<1,1,2,2>()+=2;
-
-       cout << m1 << endl;
-       cout << m2 << endl;
-       
-       m1+=m2;
-       cout << m1 << endl;
-
-       cout << (m1+m2) << endl;
-       cout << (m1+m2) << endl;
-
-       Matrix<2,3> m3;
-       m3[0] = makeVector(0, 1, 2);
-       m3[1] = makeVector(3, 4, 5);
-       Matrix<3,2> m4;
-       m4[0] = makeVector(6, 7);
-       m4[1] = makeVector(8, 9);
-       m4[2] = makeVector(10, 11);
-
-       cout << m3<<endl;
-       cout << m4<<endl;
-       cout << m3*m4;
-
-       
-       cout << makeVector(1,2).as_col() * makeVector(3,4).as_row() << endl;
-}
-

Index: test/test_data.cc
===================================================================
RCS file: test/test_data.cc
diff -N test/test_data.cc
--- test/test_data.cc   18 Aug 2009 14:15:39 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,20 +0,0 @@
-#include <TooN/TooN.h>
-using namespace TooN;
-using namespace std;
-
-void foo(Matrix<2>& foo)
-{
-       foo = Data(1, 2, 3, 4);
-}
-
-int main()
-{
-       Matrix<2> m = Data(1, 2, 3, 4);
-
-       cout << m << endl;
-
-       Matrix<4> n = Zeros;
-       n.slice<0,0,2,2>() = Data(2, 3, 4, 5);
-
-       cout << n << endl;
-}

Index: test/test_foreign.cc
===================================================================
RCS file: test/test_foreign.cc
diff -N test/test_foreign.cc
--- test/test_foreign.cc        15 Apr 2009 16:24:19 -0000      1.6
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,29 +0,0 @@
-#include <TooN/TooN.h>
-#include <TooN/helpers.h>
-
-using namespace std;
-using namespace TooN;
-
-int main()
-{
-       double data[]={1, 2, 3, 4, 5, 6};
-
-
-       cout << Matrix<2,3,double, Reference::RowMajor> (data) << endl;
-       cout << Matrix<2,-1,double, Reference::RowMajor> (data,2,3) << endl;
-       cout << Matrix<-1,3,double, Reference::RowMajor> (data,2,3) << endl;
-       cout << Matrix<-1,-1,double, Reference::RowMajor> (data,2,3) << endl;
-
-
-
-       cout << Matrix<2,3,double, Reference::ColMajor> (data) << endl;
-       cout << Matrix<2,-1,double, Reference::ColMajor> (data,2,3) << endl;
-       cout << Matrix<-1,3,double, Reference::ColMajor> (data,2,3) << endl;
-       cout << Matrix<-1,-1,double, Reference::ColMajor> (data,2,3) << endl;
-
-       cout << wrapVector<6>(data) << endl;
-       cout << wrapVector(data, 6) << endl;
-       cout << Vector<6,double,Reference> (data) << endl;
-       cout << Vector<-1,double,Reference> (data,6) << endl;
-
-};

Index: test/un_project.cc
===================================================================
RCS file: test/un_project.cc
diff -N test/un_project.cc
--- test/un_project.cc  3 Apr 2009 16:14:53 -0000       1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,15 +0,0 @@
-#include <TooN/helpers.h>
-
-#include <iostream>
-
-using namespace std;
-
-int main(int, char **) {
-    TooN::Vector<3> t = TooN::makeVector(0,1,2);
-    TooN::Vector<> t2 = TooN::makeVector(0,1,2);    
-    
-    cout << t << "\t" << TooN::project(t) << "\t" << TooN::unproject(t) << 
endl;
-    cout << t2 << "\t" << TooN::project(t2) << "\t" << TooN::unproject(t2) << 
endl;
-    
-    return 0;
-}

Index: test/vec_test.cc
===================================================================
RCS file: test/vec_test.cc
diff -N test/vec_test.cc
--- test/vec_test.cc    18 Jun 2009 14:52:49 -0000      1.5
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,217 +0,0 @@
-#define TOON_TEST_INTERNALS
-#include <TooN/TooN.h>
-#include <string>
-
-using namespace TooN;
-using namespace std;
-
-int lineno;
-
-template<class A, class B> struct no_duplicates
-{
-       typedef B type;
-};
-
-
-template<class A> struct no_duplicates<A, A>
-{
-       typedef class IgnoreMe{} type;
-};
-
-namespace TooN{namespace Internal{
-struct NoError{};
-}}
-
-#define TRY lineno = __LINE__; try{
-
-#define EXPECT_CATCH(X, Y) \
-catch(no_duplicates<TooN::Internal::X, TooN::Internal::Y>::type e)\
-{\
-    cerr << "Test FAILED on line " << lineno << " from " << func_lineno << ". 
Expected " << #X << ", got " << #Y << "." << endl;\
-}\
-
-#define EXPECT(X) \
-       throw TooN::Internal::NoError();\
-}\
-catch(TooN::Internal::X e)\
-{\
-    cerr << "Test OK on line " << lineno << " from " << func_lineno << endl;\
-}\
-EXPECT_CATCH(X, BadIndex)\
-EXPECT_CATCH(X, SliceError)\
-EXPECT_CATCH(X, StaticSliceError)\
-EXPECT_CATCH(X, SizeMismatch)\
-EXPECT_CATCH(X, StaticSizeMismatch)\
-EXPECT_CATCH(X, NoError)
-
-#define test_static_static_slices(...) test_static_static_slices_(__LINE__ , 
__VA_ARGS__)
-template<class C> void test_static_static_slices_(int func_lineno, C v)
-{
-       TRY{
-               v.template slice<0, 3>();
-       }
-       EXPECT(StaticSliceError);
-
-       TRY{
-               v.template slice<2, 2>();
-       }
-       EXPECT(StaticSliceError);
-
-       TRY{
-               v.template slice<-1, 1>();
-       }
-       EXPECT(StaticSliceError);
-
-       TRY{
-               v.template slice<0, 2>();
-       }
-       EXPECT(NoError)
-
-}
-
-#define test_static_dynamic_slices(...) test_static_dynamic_slices_(__LINE__ , 
__VA_ARGS__)
-template<class C> void test_static_dynamic_slices_(int func_lineno, C v)
-{
-       TRY{
-               v.template slice<0, 3>();
-       }
-       EXPECT(SliceError);
-
-       TRY{
-               v.template slice<2, 2>();
-       }
-       EXPECT(SliceError);
-
-       TRY{
-               v.template slice<-1, 1>();
-       }
-       EXPECT(StaticSliceError);
-
-       TRY{
-               v.template slice<0, 2>();
-       }
-       EXPECT(NoError);
-
-}
-
-#define test_dynamic_slices(...) test_dynamic_slices_(__LINE__, __VA_ARGS__)
-template<class C> void test_dynamic_slices_(int func_lineno, C v)
-{
-       TRY{
-               v.slice(0,3);
-       }
-       EXPECT(SliceError);
-
-       TRY{
-               v.slice(2,2);
-       }
-       EXPECT(SliceError);
-
-       TRY{
-               v.slice(-1,1);
-       }
-       EXPECT(SliceError);
-
-       TRY{
-               v.template slice(0, 2);
-       }
-       EXPECT(NoError);
-}
-
-
-#define test_index(...) test_index_(__LINE__, __VA_ARGS__)
-template<class C> void test_index_(int func_lineno, C v)
-{
-       TRY{
-               v[-2];
-       }
-       EXPECT(BadIndex);
-
-       TRY{
-               v[-1];
-       }
-       EXPECT(BadIndex);
-
-       TRY{
-               v[0];
-       }
-       EXPECT(NoError);
-
-       TRY{
-               v[1];
-       }
-       EXPECT(NoError);
-
-       TRY{
-               v[2];
-       }
-       EXPECT(BadIndex);
-}
-
-
-
-#define test_comma(...) test_comma_(__LINE__, __VA_ARGS__)
-template<class C> void test_comma_(int func_lineno)
-{
-       TRY{
-               Vector<4> v;
-               Fill(v) = 1,2,3,4;
-       }
-       EXPECT(NoError);
-
-       TRY{
-               Vector<4> v(4);
-               Fill(v) = 1,2,3,4;
-       }
-       EXPECT(NoError);
-
-       TRY{
-               Vector<4> v;
-               Fill(v) = 1,2,3,4,5;
-       }
-       EXPECT(StaticVectorOverfill);
-
-       TRY{
-               Vector<> v(4);
-               Fill(v) = 1,2,3,4,5;
-       }
-       EXPECT(VectorOverfill);
-
-       TRY{
-               Vector<4> v;
-               Fill(v) = 1,2,3;
-       }
-       EXPECT(Underfill);
-
-       TRY{
-               Vector<> v(4);
-               Fill(v) = 1,2,3;
-       }
-       EXPECT(Underfill);
-}
-
-
-
-int main()
-{
-       test_static_static_slices(Vector<2>());
-       test_dynamic_slices(Vector<2>());
-       
-       test_static_static_slices(Vector<4>().slice<0,2>());
-       test_dynamic_slices(Vector<4>().slice<0,2>());
-
-       test_static_dynamic_slices(Vector<4>().slice(0,2));
-       test_dynamic_slices(Vector<4>().slice(0,2));
-       
-       test_static_dynamic_slices(Vector<>(2));
-       test_dynamic_slices(Vector<>(2));
-
-       test_static_static_slices(Vector<>(4).slice<0,2>());
-       test_dynamic_slices(Vector<>(4).slice<0,2>());
-
-       test_static_dynamic_slices(Vector<>(4).slice(0,2));
-       test_dynamic_slices(Vector<>(4).slice(0,2));
-
-       test_index(Vector<2>());
-       test_index(Vector<>(2));
-}



reply via email to

[Prev in Thread] Current Thread [Next in Thread]