$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r52053 - in sandbox/numeric_bindings/boost/numeric/bindings: blas blas/level1 blas/level2 blas/level3 lapack lapack/computational lapack/detail lapack/driver
From: rutger_at_[hidden]
Date: 2009-03-30 03:05:28
Author: rutger
Date: 2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
New Revision: 52053
URL: http://svn.boost.org/trac/boost/changeset/52053
Log:
Sync of latest blas/lapack routines
Added:
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pftrs.hpp   (contents, props changed)
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/cposv.hpp   (contents, props changed)
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sposv.hpp   (contents, props changed)
Text files modified: 
   sandbox/numeric_bindings/boost/numeric/bindings/blas/dot.hpp                 |     4 ++--                                    
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/asum.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/axpy.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/copy.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/dot.hpp          |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/dotc.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/dotu.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/drot.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/nrm2.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rot.hpp          |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rotg.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rotm.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rotmg.hpp        |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/scal.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/sdot.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/srot.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/swap.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gbmv.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gemv.hpp         |     8 ++++++++                                
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/ger.hpp          |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gerc.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/geru.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hbmv.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hemv.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her.hpp          |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her2.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpmv.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr.hpp          |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr2.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/sbmv.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spmv.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr.hpp          |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr2.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/symv.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr.hpp          |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr2.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbmv.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbsv.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpmv.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpsv.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trmv.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trsv.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/gemm.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/hemm.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/her2k.hpp        |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/herk.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/symm.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syr2k.hpp        |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syrk.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trmm.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trsm.hpp         |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/detail/lapack.h       |    30 +++++++++++++++++++++++++++++-          
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/detail/lapack_names.h |    12 ++++++++++++                            
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/cgesv.hpp      |    28 +++++++++++++++++++---------            
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gbsv.hpp       |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gesv.hpp       |     1 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/solve.hpp             |    36 ++++++++++++++++++++++++++++++------    
   57 files changed, 151 insertions(+), 18 deletions(-)
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/dot.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/dot.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/dot.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -30,8 +30,8 @@
     typedef typename mpl::map<
         mpl::pair< float, level1::dot_impl< value_type > >,
         mpl::pair< double, level1::dot_impl< value_type > >,
-        mpl::pair< traits::complex_f, level1::dotu_impl< value_type > >,
-        mpl::pair< traits::complex_d, level1::dotu_impl< value_type > > > map;
+        mpl::pair< traits::complex_f, level1::dotc_impl< value_type > >,
+        mpl::pair< traits::complex_d, level1::dotc_impl< value_type > > > map;
     typedef typename mpl::at< map, value_type >::type routine;
 };
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/asum.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/asum.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/asum.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_ASUM_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_ASUM_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/axpy.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/axpy.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/axpy.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_AXPY_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_AXPY_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/copy.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/copy.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/copy.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_COPY_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_COPY_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/dot.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/dot.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/dot.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_DOT_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_DOT_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/dotc.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/dotc.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/dotc.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_DOTC_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_DOTC_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/dotu.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/dotu.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/dotu.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_DOTU_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_DOTU_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/drot.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/drot.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/drot.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_DROT_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_DROT_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/nrm2.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/nrm2.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/nrm2.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_NRM2_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_NRM2_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rot.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rot.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rot.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_ROT_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_ROT_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rotg.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rotg.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rotg.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_ROTG_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_ROTG_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rotm.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rotm.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rotm.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_ROTM_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_ROTM_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rotmg.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rotmg.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rotmg.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_ROTMG_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_ROTMG_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/scal.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/scal.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/scal.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_SCAL_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_SCAL_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/sdot.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/sdot.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/sdot.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_SDOT_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_SDOT_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/srot.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/srot.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/srot.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_SROT_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_SROT_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/swap.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/swap.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/swap.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_SWAP_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL1_SWAP_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gbmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gbmv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gbmv.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_GBMV_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_GBMV_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gemv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gemv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gemv.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_GEMV_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_GEMV_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
@@ -70,6 +71,13 @@
     typedef typename traits::type_traits<ValueType>::real_type real_type;
     typedef void return_type;
 
+    // high-level transform typedefs and functions
+    template< typename MatrixA, typename VectorX, typename VectorY >
+    static return_type transform( MatrixA& A, VectorX& x, VectorY& y,
+            const value_type alpha, const value_type beta ) {
+        invoke(  );
+    }
+
     // templated specialization
     template< typename MatrixA, typename VectorX, typename VectorY >
     static return_type invoke( char const trans, value_type const alpha,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/ger.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/ger.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/ger.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_GER_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_GER_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gerc.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gerc.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gerc.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_GERC_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_GERC_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/geru.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/geru.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/geru.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_GERU_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_GERU_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hbmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hbmv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hbmv.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_HBMV_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_HBMV_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hemv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hemv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hemv.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_HEMV_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_HEMV_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_HER_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_HER_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her2.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her2.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her2.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_HER2_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_HER2_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpmv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpmv.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_HPMV_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_HPMV_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_HPR_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_HPR_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr2.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr2.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr2.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_HPR2_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_HPR2_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/sbmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/sbmv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/sbmv.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_SBMV_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_SBMV_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spmv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spmv.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_SPMV_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_SPMV_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_SPR_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_SPR_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr2.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr2.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr2.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_SPR2_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_SPR2_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/symv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/symv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/symv.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_SYMV_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_SYMV_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_SYR_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_SYR_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr2.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr2.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr2.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_SYR2_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_SYR2_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbmv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbmv.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_TBMV_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_TBMV_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbsv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbsv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbsv.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_TBSV_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_TBSV_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpmv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpmv.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_TPMV_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_TPMV_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpsv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpsv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpsv.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_TPSV_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_TPSV_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trmv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trmv.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_TRMV_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_TRMV_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trsv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trsv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trsv.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_TRSV_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL2_TRSV_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/gemm.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/gemm.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/gemm.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL3_GEMM_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL3_GEMM_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/hemm.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/hemm.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/hemm.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL3_HEMM_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL3_HEMM_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/her2k.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/her2k.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/her2k.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL3_HER2K_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL3_HER2K_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/herk.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/herk.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/herk.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL3_HERK_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL3_HERK_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/symm.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/symm.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/symm.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL3_SYMM_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL3_SYMM_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syr2k.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syr2k.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syr2k.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL3_SYR2K_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL3_SYR2K_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syrk.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syrk.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syrk.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL3_SYRK_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL3_SYRK_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trmm.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trmm.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trmm.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL3_TRMM_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL3_TRMM_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trsm.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trsm.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trsm.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -14,6 +14,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_BLAS_LEVEL3_TRSM_HPP
 #define BOOST_NUMERIC_BINDINGS_BLAS_LEVEL3_TRSM_HPP
 
+#include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/blas/detail/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
Added: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pftrs.hpp
==============================================================================
--- (empty file)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pftrs.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -0,0 +1,134 @@
+//
+// Copyright (c) 2003--2009
+// Toon Knapen, Karl Meerbergen, Kresimir Fresl,
+// Thomas Klimpel and Rutger ter Borg
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// THIS FILE IS AUTOMATICALLY GENERATED
+// PLEASE DO NOT EDIT!
+//
+
+#ifndef BOOST_NUMERIC_BINDINGS_LAPACK_COMPUTATIONAL_PFTRS_HPP
+#define BOOST_NUMERIC_BINDINGS_LAPACK_COMPUTATIONAL_PFTRS_HPP
+
+#include <boost/assert.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/numeric/bindings/lapack/detail/lapack.h>
+#include <boost/numeric/bindings/traits/is_complex.hpp>
+#include <boost/numeric/bindings/traits/is_real.hpp>
+#include <boost/numeric/bindings/traits/traits.hpp>
+#include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost {
+namespace numeric {
+namespace bindings {
+namespace lapack {
+
+//$DESCRIPTION
+
+// overloaded functions to call lapack
+namespace detail {
+    inline void pftrs( char const transr, char const uplo, integer_t const n,
+            integer_t const nrhs, float* a, float* b, integer_t const ldb,
+            integer_t& info ) {
+        LAPACK_SPFTRS( &transr, &uplo, &n, &nrhs, a, b, &ldb, &info );
+    }
+    inline void pftrs( char const transr, char const uplo, integer_t const n,
+            integer_t const nrhs, double* a, double* b, integer_t const ldb,
+            integer_t& info ) {
+        LAPACK_DPFTRS( &transr, &uplo, &n, &nrhs, a, b, &ldb, &info );
+    }
+    inline void pftrs( char const transr, char const uplo, integer_t const n,
+            integer_t const nrhs, traits::complex_f* a, traits::complex_f* b,
+            integer_t const ldb, integer_t& info ) {
+        LAPACK_CPFTRS( &transr, &uplo, &n, &nrhs, traits::complex_ptr(a),
+                traits::complex_ptr(b), &ldb, &info );
+    }
+    inline void pftrs( char const transr, char const uplo, integer_t const n,
+            integer_t const nrhs, traits::complex_d* a, traits::complex_d* b,
+            integer_t const ldb, integer_t& info ) {
+        LAPACK_ZPFTRS( &transr, &uplo, &n, &nrhs, traits::complex_ptr(a),
+                traits::complex_ptr(b), &ldb, &info );
+    }
+}
+
+// value-type based template
+template< typename ValueType, typename Enable = void >
+struct pftrs_impl{};
+
+// real specialization
+template< typename ValueType >
+struct pftrs_impl< ValueType, typename boost::enable_if< traits::is_real<ValueType> >::type > {
+
+    typedef ValueType value_type;
+    typedef typename traits::type_traits<ValueType>::real_type real_type;
+
+    // templated specialization
+    template< typename VectorA, typename MatrixB >
+    static void invoke( char const transr, integer_t const n, VectorA& a,
+            MatrixB& b, integer_t& info ) {
+        BOOST_STATIC_ASSERT( (boost::is_same< typename traits::vector_traits<
+                VectorA >::value_type, typename traits::matrix_traits<
+                MatrixB >::value_type >::value) );
+        BOOST_ASSERT( transr == 'N' || transr == 'T' );
+        BOOST_ASSERT( traits::matrix_uplo_tag(rfp) == 'U' ||
+                traits::matrix_uplo_tag(rfp) == 'L' );
+        BOOST_ASSERT( n >= 0 );
+        BOOST_ASSERT( traits::matrix_num_columns(b) >= 0 );
+        BOOST_ASSERT( traits::vector_size(a) >= n*(n+1)/2 );
+        BOOST_ASSERT( traits::leading_dimension(b) >= std::max(1,n) );
+        detail::pftrs( transr, traits::matrix_uplo_tag(rfp), n,
+                traits::matrix_num_columns(b), traits::vector_storage(a),
+                traits::matrix_storage(b), traits::leading_dimension(b),
+                info );
+    }
+};
+
+// complex specialization
+template< typename ValueType >
+struct pftrs_impl< ValueType, typename boost::enable_if< traits::is_complex<ValueType> >::type > {
+
+    typedef ValueType value_type;
+    typedef typename traits::type_traits<ValueType>::real_type real_type;
+
+    // templated specialization
+    template< typename VectorA, typename MatrixB >
+    static void invoke( char const transr, integer_t const n, VectorA& a,
+            MatrixB& b, integer_t& info ) {
+        BOOST_STATIC_ASSERT( (boost::is_same< typename traits::vector_traits<
+                VectorA >::value_type, typename traits::matrix_traits<
+                MatrixB >::value_type >::value) );
+        BOOST_ASSERT( transr == 'N' || transr == 'C' );
+        BOOST_ASSERT( traits::matrix_uplo_tag(rfp) == 'U' ||
+                traits::matrix_uplo_tag(rfp) == 'L' );
+        BOOST_ASSERT( n >= 0 );
+        BOOST_ASSERT( traits::matrix_num_columns(b) >= 0 );
+        BOOST_ASSERT( traits::vector_size(a) >= n*(n+1)/2 );
+        BOOST_ASSERT( traits::leading_dimension(b) >= std::max(1,n) );
+        detail::pftrs( transr, traits::matrix_uplo_tag(rfp), n,
+                traits::matrix_num_columns(b), traits::vector_storage(a),
+                traits::matrix_storage(b), traits::leading_dimension(b),
+                info );
+    }
+};
+
+
+// template function to call pftrs
+template< typename VectorA, typename MatrixB >
+inline integer_t pftrs( char const transr, integer_t const n, VectorA& a,
+        MatrixB& b ) {
+    typedef typename traits::vector_traits< VectorA >::value_type value_type;
+    integer_t info(0);
+    pftrs_impl< value_type >::invoke( transr, n, a, b, info );
+    return info;
+}
+
+}}}} // namespace boost::numeric::bindings::lapack
+
+#endif
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/detail/lapack.h
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/detail/lapack.h	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/detail/lapack.h	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -1203,6 +1203,20 @@
         integer_t const* nrhs, dcomplex_t const* ab, integer_t const* ldab,
         dcomplex_t* b, integer_t const* ldb, integer_t* info );
 
+// Value-type variants of pftrs
+void LAPACK_SPFTRS( char const* transr, char const* uplo, integer_t const* n,
+        integer_t const* nrhs, float const* a, float* b, integer_t const* ldb,
+        integer_t* info );
+void LAPACK_DPFTRS( char const* transr, char const* uplo, integer_t const* n,
+        integer_t const* nrhs, double const* a, double* b,
+        integer_t const* ldb, integer_t* info );
+void LAPACK_CPFTRS( char const* transr, char const* uplo, integer_t const* n,
+        integer_t const* nrhs, fcomplex_t const* a, fcomplex_t* b,
+        integer_t const* ldb, integer_t* info );
+void LAPACK_ZPFTRS( char const* transr, char const* uplo, integer_t const* n,
+        integer_t const* nrhs, dcomplex_t const* a, dcomplex_t* b,
+        integer_t const* ldb, integer_t* info );
+
 // Value-type variants of pocon
 void LAPACK_SPOCON( char const* uplo, integer_t const* n, float const* a,
         integer_t const* lda, float const* anorm, float* rcond, float* work,
@@ -2667,9 +2681,16 @@
 void LAPACK_ZCGESV( integer_t const* n, integer_t const* nrhs, dcomplex_t* a,
         integer_t const* lda, integer_t* ipiv, dcomplex_t const* b,
         integer_t const* ldb, dcomplex_t* x, integer_t const* ldx,
-        dcomplex_t* work, fcomplex_t* swork, integer_t* iter,
+        dcomplex_t* work, fcomplex_t* swork, double* rwork, integer_t* iter,
         integer_t* info );
 
+// Value-type variants of cposv
+void LAPACK_ZCPOSV( char const* uplo, integer_t const* n,
+        integer_t const* nrhs, dcomplex_t* a, integer_t const* lda,
+        dcomplex_t const* b, integer_t const* ldb, dcomplex_t* x,
+        integer_t const* ldx, dcomplex_t* work, fcomplex_t* swork,
+        double* rwork, integer_t* iter, integer_t* info );
+
 // Value-type variants of gbsv
 void LAPACK_SGBSV( integer_t const* n, integer_t const* kl,
         integer_t const* ku, integer_t const* nrhs, float* ab,
@@ -2999,6 +3020,13 @@
         integer_t const* ldb, double* x, integer_t const* ldx, double* work,
         float* swork, integer_t* iter, integer_t* info );
 
+// Value-type variants of sposv
+void LAPACK_DSPOSV( char const* uplo, integer_t const* n,
+        integer_t const* nrhs, double* a, integer_t const* lda,
+        double const* b, integer_t const* ldb, double* x,
+        integer_t const* ldx, double* work, float* swork, integer_t* iter,
+        integer_t* info );
+
 // Value-type variants of spsv
 void LAPACK_SSPSV( char const* uplo, integer_t const* n,
         integer_t const* nrhs, float* ap, integer_t* ipiv, float* b,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/detail/lapack_names.h
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/detail/lapack_names.h	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/detail/lapack_names.h	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -444,6 +444,12 @@
 #define LAPACK_CPBTRS FORTRAN_ID( cpbtrs )
 #define LAPACK_ZPBTRS FORTRAN_ID( zpbtrs )
 
+// Value-type variants of pftrs
+#define LAPACK_SPFTRS FORTRAN_ID( spftrs )
+#define LAPACK_DPFTRS FORTRAN_ID( dpftrs )
+#define LAPACK_CPFTRS FORTRAN_ID( cpftrs )
+#define LAPACK_ZPFTRS FORTRAN_ID( zpftrs )
+
 // Value-type variants of pocon
 #define LAPACK_SPOCON FORTRAN_ID( spocon )
 #define LAPACK_DPOCON FORTRAN_ID( dpocon )
@@ -905,6 +911,9 @@
 // Value-type variants of cgesv
 #define LAPACK_ZCGESV FORTRAN_ID( zcgesv )
 
+// Value-type variants of cposv
+#define LAPACK_ZCPOSV FORTRAN_ID( zcposv )
+
 // Value-type variants of gbsv
 #define LAPACK_SGBSV FORTRAN_ID( sgbsv )
 #define LAPACK_DGBSV FORTRAN_ID( dgbsv )
@@ -1008,6 +1017,9 @@
 // Value-type variants of sgesv
 #define LAPACK_DSGESV FORTRAN_ID( dsgesv )
 
+// Value-type variants of sposv
+#define LAPACK_DSPOSV FORTRAN_ID( dsposv )
+
 // Value-type variants of spsv
 #define LAPACK_SSPSV FORTRAN_ID( sspsv )
 #define LAPACK_DSPSV FORTRAN_ID( dspsv )
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/cgesv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/cgesv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/cgesv.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -37,11 +37,12 @@
             traits::complex_d* a, integer_t const lda, integer_t* ipiv,
             traits::complex_d* b, integer_t const ldb, traits::complex_d* x,
             integer_t const ldx, traits::complex_d* work,
-            traits::complex_f* swork, integer_t& iter, integer_t& info ) {
+            traits::complex_f* swork, double* rwork, integer_t& iter,
+            integer_t& info ) {
         LAPACK_ZCGESV( &n, &nrhs, traits::complex_ptr(a), &lda, ipiv,
                 traits::complex_ptr(b), &ldb, traits::complex_ptr(x), &ldx,
-                traits::complex_ptr(work), traits::complex_ptr(swork), &iter,
-                &info );
+                traits::complex_ptr(work), traits::complex_ptr(swork), rwork,
+                &iter, &info );
     }
 }
 
@@ -54,10 +55,10 @@
 
     // user-defined workspace specialization
     template< typename MatrixA, typename VectorIPIV, typename MatrixB,
-            typename MatrixX, typename WORK, typename SWORK >
+            typename MatrixX, typename WORK, typename SWORK, typename RWORK >
     static void invoke( MatrixA& a, VectorIPIV& ipiv, MatrixB& b, MatrixX& x,
-            integer_t& iter, integer_t& info, detail::workspace2< WORK,
-            SWORK > work ) {
+            integer_t& iter, integer_t& info, detail::workspace3< WORK, SWORK,
+            RWORK > work ) {
         BOOST_STATIC_ASSERT( (boost::is_same< typename traits::matrix_traits<
                 MatrixA >::value_type, typename traits::matrix_traits<
                 MatrixB >::value_type >::value) );
@@ -79,14 +80,16 @@
         BOOST_ASSERT( traits::vector_size(work.select(value_type())) >=
                 min_size_swork( traits::matrix_num_columns(a),
                 traits::matrix_num_columns(b) ));
+        BOOST_ASSERT( traits::vector_size(work.select(real_type())) >=
+                min_size_rwork( traits::matrix_num_columns(a) ));
         detail::cgesv( traits::matrix_num_columns(a),
                 traits::matrix_num_columns(b), traits::matrix_storage(a),
                 traits::leading_dimension(a), traits::vector_storage(ipiv),
                 traits::matrix_storage(b), traits::leading_dimension(b),
                 traits::matrix_storage(x), traits::leading_dimension(x),
                 traits::matrix_storage(work),
-                traits::vector_storage(work.select(value_type())), iter,
-                info );
+                traits::vector_storage(work.select(value_type())),
+                traits::vector_storage(work.select(real_type())), iter, info );
     }
 
     // minimal workspace specialization
@@ -99,7 +102,10 @@
         traits::detail::array< value_type > tmp_swork( min_size_swork(
                 traits::matrix_num_columns(a),
                 traits::matrix_num_columns(b) ) );
-        invoke( a, ipiv, b, x, iter, info, workspace( tmp_work, tmp_swork ) );
+        traits::detail::array< real_type > tmp_rwork( min_size_rwork(
+                traits::matrix_num_columns(a) ) );
+        invoke( a, ipiv, b, x, iter, info, workspace( tmp_work, tmp_swork,
+                tmp_rwork ) );
     }
 
     // optimal workspace specialization
@@ -118,6 +124,10 @@
             integer_t const nrhs ) {
         return n*(n+nrhs);
     }
+
+    static integer_t min_size_rwork( integer_t const n ) {
+        return n;
+    }
 };
 
 
Added: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/cposv.hpp
==============================================================================
--- (empty file)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/cposv.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -0,0 +1,155 @@
+//
+// Copyright (c) 2003--2009
+// Toon Knapen, Karl Meerbergen, Kresimir Fresl,
+// Thomas Klimpel and Rutger ter Borg
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// THIS FILE IS AUTOMATICALLY GENERATED
+// PLEASE DO NOT EDIT!
+//
+
+#ifndef BOOST_NUMERIC_BINDINGS_LAPACK_DRIVER_CPOSV_HPP
+#define BOOST_NUMERIC_BINDINGS_LAPACK_DRIVER_CPOSV_HPP
+
+#include <boost/assert.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/numeric/bindings/lapack/detail/lapack.h>
+#include <boost/numeric/bindings/lapack/workspace.hpp>
+#include <boost/numeric/bindings/traits/detail/array.hpp>
+#include <boost/numeric/bindings/traits/traits.hpp>
+#include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost {
+namespace numeric {
+namespace bindings {
+namespace lapack {
+
+//$DESCRIPTION
+
+// overloaded functions to call lapack
+namespace detail {
+    inline void cposv( char const uplo, integer_t const n,
+            integer_t const nrhs, traits::complex_d* a, integer_t const lda,
+            traits::complex_d* b, integer_t const ldb, traits::complex_d* x,
+            integer_t const ldx, traits::complex_d* work,
+            traits::complex_f* swork, double* rwork, integer_t& iter,
+            integer_t& info ) {
+        LAPACK_ZCPOSV( &uplo, &n, &nrhs, traits::complex_ptr(a), &lda,
+                traits::complex_ptr(b), &ldb, traits::complex_ptr(x), &ldx,
+                traits::complex_ptr(work), traits::complex_ptr(swork), rwork,
+                &iter, &info );
+    }
+}
+
+// value-type based template
+template< typename ValueType >
+struct cposv_impl {
+
+    typedef ValueType value_type;
+    typedef typename traits::type_traits<ValueType>::real_type real_type;
+
+    // user-defined workspace specialization
+    template< typename MatrixA, typename MatrixB, typename MatrixX,
+            typename WORK, typename SWORK, typename RWORK >
+    static void invoke( MatrixA& a, MatrixB& b, MatrixX& x, integer_t& iter,
+            integer_t& info, detail::workspace3< WORK, SWORK, RWORK > work ) {
+        BOOST_STATIC_ASSERT( (boost::is_same< typename traits::matrix_traits<
+                MatrixA >::value_type, typename traits::matrix_traits<
+                MatrixB >::value_type >::value) );
+        BOOST_STATIC_ASSERT( (boost::is_same< typename traits::matrix_traits<
+                MatrixA >::value_type, typename traits::matrix_traits<
+                MatrixX >::value_type >::value) );
+        BOOST_ASSERT( traits::matrix_uplo_tag(a) == 'U' ||
+                traits::matrix_uplo_tag(a) == 'L' );
+        BOOST_ASSERT( traits::matrix_num_columns(a) >= 0 );
+        BOOST_ASSERT( traits::matrix_num_columns(b) >= 0 );
+        BOOST_ASSERT( traits::leading_dimension(a) >= std::max(1,
+                traits::matrix_num_columns(a)) );
+        BOOST_ASSERT( traits::leading_dimension(b) >= std::max(1,
+                traits::matrix_num_columns(a)) );
+        BOOST_ASSERT( traits::leading_dimension(x) >= std::max(1,
+                traits::matrix_num_columns(a)) );
+        BOOST_ASSERT( traits::vector_size(work.select(value_type())) >=
+                min_size_work( $CALL_MIN_SIZE ));
+        BOOST_ASSERT( traits::vector_size(work.select(value_type())) >=
+                min_size_swork( traits::matrix_num_columns(a),
+                traits::matrix_num_columns(b) ));
+        BOOST_ASSERT( traits::vector_size(work.select(real_type())) >=
+                min_size_rwork( traits::matrix_num_columns(a) ));
+        detail::cposv( traits::matrix_uplo_tag(a),
+                traits::matrix_num_columns(a), traits::matrix_num_columns(b),
+                traits::matrix_storage(a), traits::leading_dimension(a),
+                traits::matrix_storage(b), traits::leading_dimension(b),
+                traits::matrix_storage(x), traits::leading_dimension(x),
+                traits::matrix_storage(work),
+                traits::vector_storage(work.select(value_type())),
+                traits::vector_storage(work.select(real_type())), iter, info );
+    }
+
+    // minimal workspace specialization
+    template< typename MatrixA, typename MatrixB, typename MatrixX >
+    static void invoke( MatrixA& a, MatrixB& b, MatrixX& x, integer_t& iter,
+            integer_t& info, minimal_workspace work ) {
+        traits::detail::array< value_type > tmp_work( min_size_work(
+                $CALL_MIN_SIZE ) );
+        traits::detail::array< value_type > tmp_swork( min_size_swork(
+                traits::matrix_num_columns(a),
+                traits::matrix_num_columns(b) ) );
+        traits::detail::array< real_type > tmp_rwork( min_size_rwork(
+                traits::matrix_num_columns(a) ) );
+        invoke( a, b, x, iter, info, workspace( tmp_work, tmp_swork,
+                tmp_rwork ) );
+    }
+
+    // optimal workspace specialization
+    template< typename MatrixA, typename MatrixB, typename MatrixX >
+    static void invoke( MatrixA& a, MatrixB& b, MatrixX& x, integer_t& iter,
+            integer_t& info, optimal_workspace work ) {
+        invoke( a, b, x, iter, info, minimal_workspace() );
+    }
+
+    static integer_t min_size_work( $ARGUMENTS ) {
+        $MIN_SIZE
+    }
+
+    static integer_t min_size_swork( integer_t const n,
+            integer_t const nrhs ) {
+        return n*(n+nrhs);
+    }
+
+    static integer_t min_size_rwork( integer_t const n ) {
+        return n;
+    }
+};
+
+
+// template function to call cposv
+template< typename MatrixA, typename MatrixB, typename MatrixX,
+        typename Workspace >
+inline integer_t cposv( MatrixA& a, MatrixB& b, MatrixX& x,
+        integer_t& iter, Workspace work ) {
+    typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
+    integer_t info(0);
+    cposv_impl< value_type >::invoke( a, b, x, iter, info, work );
+    return info;
+}
+
+// template function to call cposv, default workspace type
+template< typename MatrixA, typename MatrixB, typename MatrixX >
+inline integer_t cposv( MatrixA& a, MatrixB& b, MatrixX& x,
+        integer_t& iter ) {
+    typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
+    integer_t info(0);
+    cposv_impl< value_type >::invoke( a, b, x, iter, info,
+            optimal_workspace() );
+    return info;
+}
+
+}}}} // namespace boost::numeric::bindings::lapack
+
+#endif
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gbsv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gbsv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gbsv.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -17,6 +17,7 @@
 #include <boost/assert.hpp>
 #include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/lapack/detail/lapack.h>
+#include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
 #include <boost/static_assert.hpp>
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gesv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gesv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gesv.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -17,6 +17,7 @@
 #include <boost/assert.hpp>
 #include <boost/mpl/bool.hpp>
 #include <boost/numeric/bindings/lapack/detail/lapack.h>
+#include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
 #include <boost/static_assert.hpp>
Added: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sposv.hpp
==============================================================================
--- (empty file)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sposv.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -0,0 +1,141 @@
+//
+// Copyright (c) 2003--2009
+// Toon Knapen, Karl Meerbergen, Kresimir Fresl,
+// Thomas Klimpel and Rutger ter Borg
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// THIS FILE IS AUTOMATICALLY GENERATED
+// PLEASE DO NOT EDIT!
+//
+
+#ifndef BOOST_NUMERIC_BINDINGS_LAPACK_DRIVER_SPOSV_HPP
+#define BOOST_NUMERIC_BINDINGS_LAPACK_DRIVER_SPOSV_HPP
+
+#include <boost/assert.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/numeric/bindings/lapack/detail/lapack.h>
+#include <boost/numeric/bindings/lapack/workspace.hpp>
+#include <boost/numeric/bindings/traits/detail/array.hpp>
+#include <boost/numeric/bindings/traits/traits.hpp>
+#include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost {
+namespace numeric {
+namespace bindings {
+namespace lapack {
+
+//$DESCRIPTION
+
+// overloaded functions to call lapack
+namespace detail {
+    inline void sposv( char const uplo, integer_t const n,
+            integer_t const nrhs, double* a, integer_t const lda, double* b,
+            integer_t const ldb, double* x, integer_t const ldx, double* work,
+            float* swork, integer_t& iter, integer_t& info ) {
+        LAPACK_DSPOSV( &uplo, &n, &nrhs, a, &lda, b, &ldb, x, &ldx, work,
+                swork, &iter, &info );
+    }
+}
+
+// value-type based template
+template< typename ValueType >
+struct sposv_impl {
+
+    typedef ValueType value_type;
+    typedef typename traits::type_traits<ValueType>::real_type real_type;
+
+    // user-defined workspace specialization
+    template< typename MatrixA, typename MatrixB, typename MatrixX,
+            typename WORK, typename SWORK >
+    static void invoke( MatrixA& a, MatrixB& b, MatrixX& x, integer_t& iter,
+            integer_t& info, detail::workspace2< WORK, SWORK > work ) {
+        BOOST_STATIC_ASSERT( (boost::is_same< typename traits::matrix_traits<
+                MatrixA >::value_type, typename traits::matrix_traits<
+                MatrixB >::value_type >::value) );
+        BOOST_STATIC_ASSERT( (boost::is_same< typename traits::matrix_traits<
+                MatrixA >::value_type, typename traits::matrix_traits<
+                MatrixX >::value_type >::value) );
+        BOOST_ASSERT( traits::matrix_uplo_tag(a) == 'U' ||
+                traits::matrix_uplo_tag(a) == 'L' );
+        BOOST_ASSERT( traits::matrix_num_columns(a) >= 0 );
+        BOOST_ASSERT( traits::matrix_num_columns(b) >= 0 );
+        BOOST_ASSERT( traits::leading_dimension(a) >= std::max(1,
+                traits::matrix_num_columns(a)) );
+        BOOST_ASSERT( traits::leading_dimension(b) >= std::max(1,
+                traits::matrix_num_columns(a)) );
+        BOOST_ASSERT( traits::leading_dimension(x) >= std::max(1,
+                traits::matrix_num_columns(a)) );
+        BOOST_ASSERT( traits::vector_size(work.select(real_type())) >=
+                min_size_work( $CALL_MIN_SIZE ));
+        BOOST_ASSERT( traits::vector_size(work.select(real_type())) >=
+                min_size_swork( traits::matrix_num_columns(a),
+                traits::matrix_num_columns(b) ));
+        detail::sposv( traits::matrix_uplo_tag(a),
+                traits::matrix_num_columns(a), traits::matrix_num_columns(b),
+                traits::matrix_storage(a), traits::leading_dimension(a),
+                traits::matrix_storage(b), traits::leading_dimension(b),
+                traits::matrix_storage(x), traits::leading_dimension(x),
+                traits::matrix_storage(work),
+                traits::vector_storage(work.select(real_type())), iter, info );
+    }
+
+    // minimal workspace specialization
+    template< typename MatrixA, typename MatrixB, typename MatrixX >
+    static void invoke( MatrixA& a, MatrixB& b, MatrixX& x, integer_t& iter,
+            integer_t& info, minimal_workspace work ) {
+        traits::detail::array< real_type > tmp_work( min_size_work(
+                $CALL_MIN_SIZE ) );
+        traits::detail::array< real_type > tmp_swork( min_size_swork(
+                traits::matrix_num_columns(a),
+                traits::matrix_num_columns(b) ) );
+        invoke( a, b, x, iter, info, workspace( tmp_work, tmp_swork ) );
+    }
+
+    // optimal workspace specialization
+    template< typename MatrixA, typename MatrixB, typename MatrixX >
+    static void invoke( MatrixA& a, MatrixB& b, MatrixX& x, integer_t& iter,
+            integer_t& info, optimal_workspace work ) {
+        invoke( a, b, x, iter, info, minimal_workspace() );
+    }
+
+    static integer_t min_size_work( $ARGUMENTS ) {
+        $MIN_SIZE
+    }
+
+    static integer_t min_size_swork( integer_t const n,
+            integer_t const nrhs ) {
+        return n*(n+nrhs);
+    }
+};
+
+
+// template function to call sposv
+template< typename MatrixA, typename MatrixB, typename MatrixX,
+        typename Workspace >
+inline integer_t sposv( MatrixA& a, MatrixB& b, MatrixX& x,
+        integer_t& iter, Workspace work ) {
+    typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
+    integer_t info(0);
+    sposv_impl< value_type >::invoke( a, b, x, iter, info, work );
+    return info;
+}
+
+// template function to call sposv, default workspace type
+template< typename MatrixA, typename MatrixB, typename MatrixX >
+inline integer_t sposv( MatrixA& a, MatrixB& b, MatrixX& x,
+        integer_t& iter ) {
+    typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
+    integer_t info(0);
+    sposv_impl< value_type >::invoke( a, b, x, iter, info,
+            optimal_workspace() );
+    return info;
+}
+
+}}}} // namespace boost::numeric::bindings::lapack
+
+#endif
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/solve.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/solve.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/solve.hpp	2009-03-30 03:05:21 EDT (Mon, 30 Mar 2009)
@@ -9,11 +9,10 @@
 #ifndef BOOST_NUMERIC_BINDINGS_LAPACK_SOLVE_HPP
 #define BOOST_NUMERIC_BINDINGS_LAPACK_SOLVE_HPP
 
-#include <boost/numeric/bindings/traits/traits.hpp>
-#include <boost/numeric/bindings/traits/detail/array.hpp>
+// LAPACK User's Guide table 2.2; simple driver routines
 #include <boost/numeric/bindings/lapack/driver/gesv.hpp>
-//#include <boost/numeric/bindings/lapack/driver/gbsv.hpp>
-//#include <boost/numeric/bindings/lapack/driver/gtsv.hpp>
+#include <boost/numeric/bindings/lapack/driver/gbsv.hpp>
+#include <boost/numeric/bindings/lapack/driver/gtsv.hpp>
 #include <boost/numeric/bindings/lapack/driver/hesv.hpp>
 #include <boost/numeric/bindings/lapack/driver/hpsv.hpp>
 #include <boost/numeric/bindings/lapack/driver/posv.hpp>
@@ -23,6 +22,20 @@
 #include <boost/numeric/bindings/lapack/driver/sysv.hpp>
 #include <boost/numeric/bindings/lapack/driver/spsv.hpp>
 
+// LAPACK User's guide table 2.2; expert driver routines
+#include <boost/numeric/bindings/lapack/driver/gesvx.hpp>
+#include <boost/numeric/bindings/lapack/driver/gbsvx.hpp>
+#include <boost/numeric/bindings/lapack/driver/gtsvx.hpp>
+#include <boost/numeric/bindings/lapack/driver/hesvx.hpp>
+#include <boost/numeric/bindings/lapack/driver/hpsvx.hpp>
+#include <boost/numeric/bindings/lapack/driver/posvx.hpp>
+#include <boost/numeric/bindings/lapack/driver/ppsvx.hpp>
+#include <boost/numeric/bindings/lapack/driver/pbsvx.hpp>
+#include <boost/numeric/bindings/lapack/driver/ptsvx.hpp>
+#include <boost/numeric/bindings/lapack/driver/sysvx.hpp>
+#include <boost/numeric/bindings/lapack/driver/spsvx.hpp>
+
+
 #include <boost/numeric/bindings/lapack/keywords.hpp>
 
 #include <boost/mpl/at.hpp>
@@ -53,7 +66,18 @@
   //      mpl::pair< traits::banded_t, gbsv_impl< value_type > >,
         mpl::pair< traits::unknown_structure_t, gesv_impl< value_type > > > simple_map;
 
-    typedef typename mpl::at< simple_map, matrix_structure >::type simple;
+    typedef typename mpl::at< simple_map, matrix_structure >::type simple_driver;
+
+    typedef typename mpl::map<
+        mpl::pair< traits::general_t, gesvx_impl< value_type > >,
+        mpl::pair< traits::symmetric_t, sysvx_impl< value_type > >,
+        mpl::pair< traits::symmetric_packed_t, spsvx_impl< value_type > >,
+        mpl::pair< traits::hermitian_t, hesvx_impl< value_type > >,
+        mpl::pair< traits::hermitian_packed_t, hpsvx_impl< value_type > >,
+  //      mpl::pair< traits::banded_t, gbsv_impl< value_type > >,
+        mpl::pair< traits::unknown_structure_t, gesvx_impl< value_type > > > expert_map;
+
+    typedef typename mpl::at< simple_map, matrix_structure >::type expert_driver;
 
 };
 
@@ -70,7 +94,7 @@
             typename solve_impl< A_type >::null_type() )
     )
     ) {
-        typedef typename solve_impl< A_type >::simple routine;
+        typedef typename solve_impl< A_type >::simple_driver routine;
         integer_t info(0);
         routine::solve( A, B, pivot, info );
     }