$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r64859 - in sandbox/numeric_bindings: boost/numeric/bindings/lapack/computational libs/numeric/bindings/doc/lapack/computational libs/numeric/bindings/tools/templates/computational
From: rutger_at_[hidden]
Date: 2010-08-17 06:39:15
Author: rutger
Date: 2010-08-17 06:39:08 EDT (Tue, 17 Aug 2010)
New Revision: 64859
URL: http://svn.boost.org/trac/boost/changeset/64859
Log:
Fixed orm* functions (added k as a trait of tau) of lapack computational routines
Text files modified: 
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormbr.hpp       |    45 +++++++++++++-------------              
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormlq.hpp       |    52 +++++++++++++++----------------         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormql.hpp       |    50 ++++++++++++++---------------           
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormrq.hpp       |    52 +++++++++++++++----------------         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormrz.hpp       |    47 +++++++++++++--------------             
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmbr.hpp       |    61 +++++++++++++++++++++++++++---------    
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmlq.hpp       |    66 +++++++++++++++++++++++++++------------ 
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmql.hpp       |    64 +++++++++++++++++++++++++++-----------  
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmrq.hpp       |    66 +++++++++++++++++++++++++++------------ 
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmrz.hpp       |    61 ++++++++++++++++++++++++++----------    
   sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/ormbr.qbk    |     4 +-                                      
   sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/ormlq.qbk    |     4 +-                                      
   sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/ormql.qbk    |     4 +-                                      
   sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/ormrq.qbk    |     4 +-                                      
   sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/ormrz.qbk    |     4 +-                                      
   sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/unmbr.qbk    |     7 +++                                     
   sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/unmlq.qbk    |     7 +++                                     
   sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/unmql.qbk    |     7 +++                                     
   sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/unmrq.qbk    |     7 +++                                     
   sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/unmrz.qbk    |     7 +++                                     
   sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/computational/orm.hpp |    14 ++++++++                                
   21 files changed, 400 insertions(+), 233 deletions(-)
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormbr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormbr.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormbr.hpp	2010-08-17 06:39:08 EDT (Tue, 17 Aug 2010)
@@ -104,8 +104,8 @@
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC, typename WORK >
     static std::ptrdiff_t invoke( const char vect, const Side side,
-            const fortran_int_t k, const MatrixA& a, const VectorTAU& tau,
-            MatrixC& c, detail::workspace1< WORK > work ) {
+            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
+            detail::workspace1< WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
@@ -118,6 +118,7 @@
                 typename remove_const< typename bindings::value_type<
                 MatrixC >::type >::type >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixC >::value) );
+        BOOST_ASSERT( bindings::size(tau) >= 0 );
         BOOST_ASSERT( bindings::size(work.select(real_type())) >=
                 min_size_work( side, bindings::size_row(c),
                 bindings::size_column(c) ));
@@ -129,12 +130,12 @@
         BOOST_ASSERT( bindings::size_row(c) >= 0 );
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
-        BOOST_ASSERT( k >= 0 );
         BOOST_ASSERT( vect == 'Q' || vect == 'P' );
         return detail::ormbr( vect, side, trans(), bindings::size_row(c),
-                bindings::size_column(c), k, bindings::begin_value(a),
-                bindings::stride_major(a), bindings::begin_value(tau),
-                bindings::begin_value(c), bindings::stride_major(c),
+                bindings::size_column(c), bindings::size(tau),
+                bindings::begin_value(a), bindings::stride_major(a),
+                bindings::begin_value(tau), bindings::begin_value(c),
+                bindings::stride_major(c),
                 bindings::begin_value(work.select(real_type())),
                 bindings::size(work.select(real_type())) );
     }
@@ -149,14 +150,14 @@
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC >
     static std::ptrdiff_t invoke( const char vect, const Side side,
-            const fortran_int_t k, const MatrixA& a, const VectorTAU& tau,
-            MatrixC& c, minimal_workspace ) {
+            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
+            minimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
         bindings::detail::array< real_type > tmp_work( min_size_work( side,
                 bindings::size_row(c), bindings::size_column(c) ) );
-        return invoke( vect, side, k, a, tau, c, workspace( tmp_work ) );
+        return invoke( vect, side, a, tau, c, workspace( tmp_work ) );
     }
 
     //
@@ -169,20 +170,20 @@
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC >
     static std::ptrdiff_t invoke( const char vect, const Side side,
-            const fortran_int_t k, const MatrixA& a, const VectorTAU& tau,
-            MatrixC& c, optimal_workspace ) {
+            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
+            optimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
         real_type opt_size_work;
         detail::ormbr( vect, side, trans(), bindings::size_row(c),
-                bindings::size_column(c), k, bindings::begin_value(a),
-                bindings::stride_major(a), bindings::begin_value(tau),
-                bindings::begin_value(c), bindings::stride_major(c),
-                &opt_size_work, -1 );
+                bindings::size_column(c), bindings::size(tau),
+                bindings::begin_value(a), bindings::stride_major(a),
+                bindings::begin_value(tau), bindings::begin_value(c),
+                bindings::stride_major(c), &opt_size_work, -1 );
         bindings::detail::array< real_type > tmp_work(
                 traits::detail::to_int( opt_size_work ) );
-        return invoke( vect, side, k, a, tau, c, workspace( tmp_work ) );
+        return invoke( vect, side, a, tau, c, workspace( tmp_work ) );
     }
 
     //
@@ -215,10 +216,10 @@
         typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-ormbr( const char vect, const Side side, const fortran_int_t k,
-        const MatrixA& a, const VectorTAU& tau, MatrixC& c, Workspace work ) {
+ormbr( const char vect, const Side side, const MatrixA& a,
+        const VectorTAU& tau, MatrixC& c, Workspace work ) {
     return ormbr_impl< typename bindings::value_type<
-            MatrixA >::type >::invoke( vect, side, k, a, tau, c, work );
+            MatrixA >::type >::invoke( vect, side, a, tau, c, work );
 }
 
 //
@@ -229,10 +230,10 @@
         typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-ormbr( const char vect, const Side side, const fortran_int_t k,
-        const MatrixA& a, const VectorTAU& tau, MatrixC& c ) {
+ormbr( const char vect, const Side side, const MatrixA& a,
+        const VectorTAU& tau, MatrixC& c ) {
     return ormbr_impl< typename bindings::value_type<
-            MatrixA >::type >::invoke( vect, side, k, a, tau, c,
+            MatrixA >::type >::invoke( vect, side, a, tau, c,
             optimal_workspace() );
 }
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormlq.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormlq.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormlq.hpp	2010-08-17 06:39:08 EDT (Tue, 17 Aug 2010)
@@ -102,9 +102,9 @@
     //
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC, typename WORK >
-    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
-            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
-            detail::workspace1< WORK > work ) {
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
+            const VectorTAU& tau, MatrixC& c, detail::workspace1<
+            WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
@@ -117,7 +117,7 @@
                 typename remove_const< typename bindings::value_type<
                 MatrixC >::type >::type >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixC >::value) );
-        BOOST_ASSERT( bindings::size(tau) >= k );
+        BOOST_ASSERT( bindings::size(tau) >= bindings::size(tau) );
         BOOST_ASSERT( bindings::size(work.select(real_type())) >=
                 min_size_work( side, bindings::size_row(c),
                 bindings::size_column(c) ));
@@ -128,13 +128,14 @@
                 bindings::stride_minor(c) == 1 );
         BOOST_ASSERT( bindings::size_row(c) >= 0 );
         BOOST_ASSERT( bindings::stride_major(a) >= std::max< std::ptrdiff_t >(1,
-                k) );
+                bindings::size(tau)) );
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
         return detail::ormlq( side, trans(), bindings::size_row(c),
-                bindings::size_column(c), k, bindings::begin_value(a),
-                bindings::stride_major(a), bindings::begin_value(tau),
-                bindings::begin_value(c), bindings::stride_major(c),
+                bindings::size_column(c), bindings::size(tau),
+                bindings::begin_value(a), bindings::stride_major(a),
+                bindings::begin_value(tau), bindings::begin_value(c),
+                bindings::stride_major(c),
                 bindings::begin_value(work.select(real_type())),
                 bindings::size(work.select(real_type())) );
     }
@@ -148,15 +149,14 @@
     //
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC >
-    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
-            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
-            minimal_workspace ) {
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
+            const VectorTAU& tau, MatrixC& c, minimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
         bindings::detail::array< real_type > tmp_work( min_size_work( side,
                 bindings::size_row(c), bindings::size_column(c) ) );
-        return invoke( side, k, a, tau, c, workspace( tmp_work ) );
+        return invoke( side, a, tau, c, workspace( tmp_work ) );
     }
 
     //
@@ -168,21 +168,20 @@
     //
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC >
-    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
-            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
-            optimal_workspace ) {
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
+            const VectorTAU& tau, MatrixC& c, optimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
         real_type opt_size_work;
         detail::ormlq( side, trans(), bindings::size_row(c),
-                bindings::size_column(c), k, bindings::begin_value(a),
-                bindings::stride_major(a), bindings::begin_value(tau),
-                bindings::begin_value(c), bindings::stride_major(c),
-                &opt_size_work, -1 );
+                bindings::size_column(c), bindings::size(tau),
+                bindings::begin_value(a), bindings::stride_major(a),
+                bindings::begin_value(tau), bindings::begin_value(c),
+                bindings::stride_major(c), &opt_size_work, -1 );
         bindings::detail::array< real_type > tmp_work(
                 traits::detail::to_int( opt_size_work ) );
-        return invoke( side, k, a, tau, c, workspace( tmp_work ) );
+        return invoke( side, a, tau, c, workspace( tmp_work ) );
     }
 
     //
@@ -215,10 +214,10 @@
         typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-ormlq( const Side side, const fortran_int_t k, const MatrixA& a,
-        const VectorTAU& tau, MatrixC& c, Workspace work ) {
+ormlq( const Side side, const MatrixA& a, const VectorTAU& tau,
+        MatrixC& c, Workspace work ) {
     return ormlq_impl< typename bindings::value_type<
-            MatrixA >::type >::invoke( side, k, a, tau, c, work );
+            MatrixA >::type >::invoke( side, a, tau, c, work );
 }
 
 //
@@ -229,11 +228,10 @@
         typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-ormlq( const Side side, const fortran_int_t k, const MatrixA& a,
-        const VectorTAU& tau, MatrixC& c ) {
+ormlq( const Side side, const MatrixA& a, const VectorTAU& tau,
+        MatrixC& c ) {
     return ormlq_impl< typename bindings::value_type<
-            MatrixA >::type >::invoke( side, k, a, tau, c,
-            optimal_workspace() );
+            MatrixA >::type >::invoke( side, a, tau, c, optimal_workspace() );
 }
 
 } // namespace lapack
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormql.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormql.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormql.hpp	2010-08-17 06:39:08 EDT (Tue, 17 Aug 2010)
@@ -102,9 +102,9 @@
     //
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC, typename WORK >
-    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
-            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
-            detail::workspace1< WORK > work ) {
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
+            const VectorTAU& tau, MatrixC& c, detail::workspace1<
+            WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
@@ -117,7 +117,7 @@
                 typename remove_const< typename bindings::value_type<
                 MatrixC >::type >::type >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixC >::value) );
-        BOOST_ASSERT( bindings::size(tau) >= k );
+        BOOST_ASSERT( bindings::size(tau) >= bindings::size(tau) );
         BOOST_ASSERT( bindings::size(work.select(real_type())) >=
                 min_size_work( side, bindings::size_row(c),
                 bindings::size_column(c) ));
@@ -130,9 +130,10 @@
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
         return detail::ormql( side, trans(), bindings::size_row(c),
-                bindings::size_column(c), k, bindings::begin_value(a),
-                bindings::stride_major(a), bindings::begin_value(tau),
-                bindings::begin_value(c), bindings::stride_major(c),
+                bindings::size_column(c), bindings::size(tau),
+                bindings::begin_value(a), bindings::stride_major(a),
+                bindings::begin_value(tau), bindings::begin_value(c),
+                bindings::stride_major(c),
                 bindings::begin_value(work.select(real_type())),
                 bindings::size(work.select(real_type())) );
     }
@@ -146,15 +147,14 @@
     //
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC >
-    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
-            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
-            minimal_workspace ) {
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
+            const VectorTAU& tau, MatrixC& c, minimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
         bindings::detail::array< real_type > tmp_work( min_size_work( side,
                 bindings::size_row(c), bindings::size_column(c) ) );
-        return invoke( side, k, a, tau, c, workspace( tmp_work ) );
+        return invoke( side, a, tau, c, workspace( tmp_work ) );
     }
 
     //
@@ -166,21 +166,20 @@
     //
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC >
-    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
-            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
-            optimal_workspace ) {
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
+            const VectorTAU& tau, MatrixC& c, optimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
         real_type opt_size_work;
         detail::ormql( side, trans(), bindings::size_row(c),
-                bindings::size_column(c), k, bindings::begin_value(a),
-                bindings::stride_major(a), bindings::begin_value(tau),
-                bindings::begin_value(c), bindings::stride_major(c),
-                &opt_size_work, -1 );
+                bindings::size_column(c), bindings::size(tau),
+                bindings::begin_value(a), bindings::stride_major(a),
+                bindings::begin_value(tau), bindings::begin_value(c),
+                bindings::stride_major(c), &opt_size_work, -1 );
         bindings::detail::array< real_type > tmp_work(
                 traits::detail::to_int( opt_size_work ) );
-        return invoke( side, k, a, tau, c, workspace( tmp_work ) );
+        return invoke( side, a, tau, c, workspace( tmp_work ) );
     }
 
     //
@@ -213,10 +212,10 @@
         typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-ormql( const Side side, const fortran_int_t k, const MatrixA& a,
-        const VectorTAU& tau, MatrixC& c, Workspace work ) {
+ormql( const Side side, const MatrixA& a, const VectorTAU& tau,
+        MatrixC& c, Workspace work ) {
     return ormql_impl< typename bindings::value_type<
-            MatrixA >::type >::invoke( side, k, a, tau, c, work );
+            MatrixA >::type >::invoke( side, a, tau, c, work );
 }
 
 //
@@ -227,11 +226,10 @@
         typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-ormql( const Side side, const fortran_int_t k, const MatrixA& a,
-        const VectorTAU& tau, MatrixC& c ) {
+ormql( const Side side, const MatrixA& a, const VectorTAU& tau,
+        MatrixC& c ) {
     return ormql_impl< typename bindings::value_type<
-            MatrixA >::type >::invoke( side, k, a, tau, c,
-            optimal_workspace() );
+            MatrixA >::type >::invoke( side, a, tau, c, optimal_workspace() );
 }
 
 } // namespace lapack
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormrq.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormrq.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormrq.hpp	2010-08-17 06:39:08 EDT (Tue, 17 Aug 2010)
@@ -102,9 +102,9 @@
     //
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC, typename WORK >
-    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
-            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
-            detail::workspace1< WORK > work ) {
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
+            const VectorTAU& tau, MatrixC& c, detail::workspace1<
+            WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
@@ -117,7 +117,7 @@
                 typename remove_const< typename bindings::value_type<
                 MatrixC >::type >::type >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixC >::value) );
-        BOOST_ASSERT( bindings::size(tau) >= k );
+        BOOST_ASSERT( bindings::size(tau) >= bindings::size(tau) );
         BOOST_ASSERT( bindings::size(work.select(real_type())) >=
                 min_size_work( side, bindings::size_row(c),
                 bindings::size_column(c) ));
@@ -128,13 +128,14 @@
                 bindings::stride_minor(c) == 1 );
         BOOST_ASSERT( bindings::size_row(c) >= 0 );
         BOOST_ASSERT( bindings::stride_major(a) >= std::max< std::ptrdiff_t >(1,
-                k) );
+                bindings::size(tau)) );
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
         return detail::ormrq( side, trans(), bindings::size_row(c),
-                bindings::size_column(c), k, bindings::begin_value(a),
-                bindings::stride_major(a), bindings::begin_value(tau),
-                bindings::begin_value(c), bindings::stride_major(c),
+                bindings::size_column(c), bindings::size(tau),
+                bindings::begin_value(a), bindings::stride_major(a),
+                bindings::begin_value(tau), bindings::begin_value(c),
+                bindings::stride_major(c),
                 bindings::begin_value(work.select(real_type())),
                 bindings::size(work.select(real_type())) );
     }
@@ -148,15 +149,14 @@
     //
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC >
-    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
-            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
-            minimal_workspace ) {
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
+            const VectorTAU& tau, MatrixC& c, minimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
         bindings::detail::array< real_type > tmp_work( min_size_work( side,
                 bindings::size_row(c), bindings::size_column(c) ) );
-        return invoke( side, k, a, tau, c, workspace( tmp_work ) );
+        return invoke( side, a, tau, c, workspace( tmp_work ) );
     }
 
     //
@@ -168,21 +168,20 @@
     //
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC >
-    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
-            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
-            optimal_workspace ) {
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
+            const VectorTAU& tau, MatrixC& c, optimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
         real_type opt_size_work;
         detail::ormrq( side, trans(), bindings::size_row(c),
-                bindings::size_column(c), k, bindings::begin_value(a),
-                bindings::stride_major(a), bindings::begin_value(tau),
-                bindings::begin_value(c), bindings::stride_major(c),
-                &opt_size_work, -1 );
+                bindings::size_column(c), bindings::size(tau),
+                bindings::begin_value(a), bindings::stride_major(a),
+                bindings::begin_value(tau), bindings::begin_value(c),
+                bindings::stride_major(c), &opt_size_work, -1 );
         bindings::detail::array< real_type > tmp_work(
                 traits::detail::to_int( opt_size_work ) );
-        return invoke( side, k, a, tau, c, workspace( tmp_work ) );
+        return invoke( side, a, tau, c, workspace( tmp_work ) );
     }
 
     //
@@ -215,10 +214,10 @@
         typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-ormrq( const Side side, const fortran_int_t k, const MatrixA& a,
-        const VectorTAU& tau, MatrixC& c, Workspace work ) {
+ormrq( const Side side, const MatrixA& a, const VectorTAU& tau,
+        MatrixC& c, Workspace work ) {
     return ormrq_impl< typename bindings::value_type<
-            MatrixA >::type >::invoke( side, k, a, tau, c, work );
+            MatrixA >::type >::invoke( side, a, tau, c, work );
 }
 
 //
@@ -229,11 +228,10 @@
         typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-ormrq( const Side side, const fortran_int_t k, const MatrixA& a,
-        const VectorTAU& tau, MatrixC& c ) {
+ormrq( const Side side, const MatrixA& a, const VectorTAU& tau,
+        MatrixC& c ) {
     return ormrq_impl< typename bindings::value_type<
-            MatrixA >::type >::invoke( side, k, a, tau, c,
-            optimal_workspace() );
+            MatrixA >::type >::invoke( side, a, tau, c, optimal_workspace() );
 }
 
 } // namespace lapack
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormrz.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormrz.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormrz.hpp	2010-08-17 06:39:08 EDT (Tue, 17 Aug 2010)
@@ -103,9 +103,9 @@
     //
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC, typename WORK >
-    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
-            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
-            detail::workspace1< WORK > work ) {
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
+            const VectorTAU& tau, MatrixC& c, detail::workspace1<
+            WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
@@ -118,7 +118,7 @@
                 typename remove_const< typename bindings::value_type<
                 MatrixC >::type >::type >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixC >::value) );
-        BOOST_ASSERT( bindings::size(tau) >= k );
+        BOOST_ASSERT( bindings::size(tau) >= bindings::size(tau) );
         BOOST_ASSERT( bindings::size(work.select(real_type())) >=
                 min_size_work( side, bindings::size_row(c),
                 bindings::size_column(c) ));
@@ -129,12 +129,13 @@
                 bindings::stride_minor(c) == 1 );
         BOOST_ASSERT( bindings::size_row(c) >= 0 );
         BOOST_ASSERT( bindings::stride_major(a) >= std::max< std::ptrdiff_t >(1,
-                k) );
+                bindings::size(tau)) );
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
         return detail::ormrz( side, trans(), bindings::size_row(c),
-                bindings::size_column(c), k, bindings::size_column_op(a,
-                trans()), bindings::begin_value(a), bindings::stride_major(a),
+                bindings::size_column(c), bindings::size(tau),
+                bindings::size_column_op(a, trans()),
+                bindings::begin_value(a), bindings::stride_major(a),
                 bindings::begin_value(tau), bindings::begin_value(c),
                 bindings::stride_major(c),
                 bindings::begin_value(work.select(real_type())),
@@ -150,15 +151,14 @@
     //
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC >
-    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
-            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
-            minimal_workspace ) {
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
+            const VectorTAU& tau, MatrixC& c, minimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
         bindings::detail::array< real_type > tmp_work( min_size_work( side,
                 bindings::size_row(c), bindings::size_column(c) ) );
-        return invoke( side, k, a, tau, c, workspace( tmp_work ) );
+        return invoke( side, a, tau, c, workspace( tmp_work ) );
     }
 
     //
@@ -170,21 +170,21 @@
     //
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC >
-    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
-            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
-            optimal_workspace ) {
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
+            const VectorTAU& tau, MatrixC& c, optimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
         real_type opt_size_work;
         detail::ormrz( side, trans(), bindings::size_row(c),
-                bindings::size_column(c), k, bindings::size_column_op(a,
-                trans()), bindings::begin_value(a), bindings::stride_major(a),
+                bindings::size_column(c), bindings::size(tau),
+                bindings::size_column_op(a, trans()),
+                bindings::begin_value(a), bindings::stride_major(a),
                 bindings::begin_value(tau), bindings::begin_value(c),
                 bindings::stride_major(c), &opt_size_work, -1 );
         bindings::detail::array< real_type > tmp_work(
                 traits::detail::to_int( opt_size_work ) );
-        return invoke( side, k, a, tau, c, workspace( tmp_work ) );
+        return invoke( side, a, tau, c, workspace( tmp_work ) );
     }
 
     //
@@ -217,10 +217,10 @@
         typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-ormrz( const Side side, const fortran_int_t k, const MatrixA& a,
-        const VectorTAU& tau, MatrixC& c, Workspace work ) {
+ormrz( const Side side, const MatrixA& a, const VectorTAU& tau,
+        MatrixC& c, Workspace work ) {
     return ormrz_impl< typename bindings::value_type<
-            MatrixA >::type >::invoke( side, k, a, tau, c, work );
+            MatrixA >::type >::invoke( side, a, tau, c, work );
 }
 
 //
@@ -231,11 +231,10 @@
         typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-ormrz( const Side side, const fortran_int_t k, const MatrixA& a,
-        const VectorTAU& tau, MatrixC& c ) {
+ormrz( const Side side, const MatrixA& a, const VectorTAU& tau,
+        MatrixC& c ) {
     return ormrz_impl< typename bindings::value_type<
-            MatrixA >::type >::invoke( side, k, a, tau, c,
-            optimal_workspace() );
+            MatrixA >::type >::invoke( side, a, tau, c, optimal_workspace() );
 }
 
 } // namespace lapack
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmbr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmbr.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmbr.hpp	2010-08-17 06:39:08 EDT (Tue, 17 Aug 2010)
@@ -151,8 +151,8 @@
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC, typename WORK >
     static std::ptrdiff_t invoke( const char vect, const Side side,
-            const fortran_int_t k, const MatrixA& a, const VectorTAU& tau,
-            MatrixC& c, detail::workspace1< WORK > work ) {
+            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
+            detail::workspace1< WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
@@ -165,6 +165,7 @@
                 typename remove_const< typename bindings::value_type<
                 MatrixC >::type >::type >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixC >::value) );
+        BOOST_ASSERT( bindings::size(tau) >= 0 );
         BOOST_ASSERT( bindings::size(work.select(real_type())) >=
                 min_size_work( side, bindings::size_row(c),
                 bindings::size_column(c) ));
@@ -176,12 +177,12 @@
         BOOST_ASSERT( bindings::size_row(c) >= 0 );
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
-        BOOST_ASSERT( k >= 0 );
         BOOST_ASSERT( vect == 'Q' || vect == 'P' );
         return detail::unmbr( vect, side, trans(), bindings::size_row(c),
-                bindings::size_column(c), k, bindings::begin_value(a),
-                bindings::stride_major(a), bindings::begin_value(tau),
-                bindings::begin_value(c), bindings::stride_major(c),
+                bindings::size_column(c), bindings::size(tau),
+                bindings::begin_value(a), bindings::stride_major(a),
+                bindings::begin_value(tau), bindings::begin_value(c),
+                bindings::stride_major(c),
                 bindings::begin_value(work.select(real_type())),
                 bindings::size(work.select(real_type())) );
     }
@@ -196,14 +197,14 @@
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC >
     static std::ptrdiff_t invoke( const char vect, const Side side,
-            const fortran_int_t k, const MatrixA& a, const VectorTAU& tau,
-            MatrixC& c, minimal_workspace ) {
+            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
+            minimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
         bindings::detail::array< real_type > tmp_work( min_size_work( side,
                 bindings::size_row(c), bindings::size_column(c) ) );
-        return invoke( vect, side, k, a, tau, c, workspace( tmp_work ) );
+        return invoke( vect, side, a, tau, c, workspace( tmp_work ) );
     }
 
     //
@@ -216,20 +217,20 @@
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC >
     static std::ptrdiff_t invoke( const char vect, const Side side,
-            const fortran_int_t k, const MatrixA& a, const VectorTAU& tau,
-            MatrixC& c, optimal_workspace ) {
+            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
+            optimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
         real_type opt_size_work;
         detail::unmbr( vect, side, trans(), bindings::size_row(c),
-                bindings::size_column(c), k, bindings::begin_value(a),
-                bindings::stride_major(a), bindings::begin_value(tau),
-                bindings::begin_value(c), bindings::stride_major(c),
-                &opt_size_work, -1 );
+                bindings::size_column(c), bindings::size(tau),
+                bindings::begin_value(a), bindings::stride_major(a),
+                bindings::begin_value(tau), bindings::begin_value(c),
+                bindings::stride_major(c), &opt_size_work, -1 );
         bindings::detail::array< real_type > tmp_work(
                 traits::detail::to_int( opt_size_work ) );
-        return invoke( vect, side, k, a, tau, c, workspace( tmp_work ) );
+        return invoke( vect, side, a, tau, c, workspace( tmp_work ) );
     }
 
     //
@@ -372,6 +373,34 @@
         typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
+unmbr( const char vect, const Side side, const MatrixA& a,
+        const VectorTAU& tau, MatrixC& c, Workspace work ) {
+    return unmbr_impl< typename bindings::value_type<
+            MatrixA >::type >::invoke( vect, side, a, tau, c, work );
+}
+
+//
+// Overloaded function for unmbr. Its overload differs for
+// * Default workspace-type (optimal)
+//
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
+inline typename boost::disable_if< detail::is_workspace< MatrixC >,
+        std::ptrdiff_t >::type
+unmbr( const char vect, const Side side, const MatrixA& a,
+        const VectorTAU& tau, MatrixC& c ) {
+    return unmbr_impl< typename bindings::value_type<
+            MatrixA >::type >::invoke( vect, side, a, tau, c,
+            optimal_workspace() );
+}
+//
+// Overloaded function for unmbr. Its overload differs for
+// * User-defined workspace
+//
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
+inline typename boost::enable_if< detail::is_workspace< Workspace >,
+        std::ptrdiff_t >::type
 unmbr( const char vect, const Side side, const fortran_int_t k,
         const MatrixA& a, const VectorTAU& tau, MatrixC& c, Workspace work ) {
     return unmbr_impl< typename bindings::value_type<
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmlq.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmlq.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmlq.hpp	2010-08-17 06:39:08 EDT (Tue, 17 Aug 2010)
@@ -149,9 +149,9 @@
     //
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC, typename WORK >
-    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
-            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
-            detail::workspace1< WORK > work ) {
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
+            const VectorTAU& tau, MatrixC& c, detail::workspace1<
+            WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
@@ -164,7 +164,7 @@
                 typename remove_const< typename bindings::value_type<
                 MatrixC >::type >::type >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixC >::value) );
-        BOOST_ASSERT( bindings::size(tau) >= k );
+        BOOST_ASSERT( bindings::size(tau) >= bindings::size(tau) );
         BOOST_ASSERT( bindings::size(work.select(real_type())) >=
                 min_size_work( side, bindings::size_row(c),
                 bindings::size_column(c) ));
@@ -175,13 +175,14 @@
                 bindings::stride_minor(c) == 1 );
         BOOST_ASSERT( bindings::size_row(c) >= 0 );
         BOOST_ASSERT( bindings::stride_major(a) >= std::max< std::ptrdiff_t >(1,
-                k) );
+                bindings::size(tau)) );
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
         return detail::unmlq( side, trans(), bindings::size_row(c),
-                bindings::size_column(c), k, bindings::begin_value(a),
-                bindings::stride_major(a), bindings::begin_value(tau),
-                bindings::begin_value(c), bindings::stride_major(c),
+                bindings::size_column(c), bindings::size(tau),
+                bindings::begin_value(a), bindings::stride_major(a),
+                bindings::begin_value(tau), bindings::begin_value(c),
+                bindings::stride_major(c),
                 bindings::begin_value(work.select(real_type())),
                 bindings::size(work.select(real_type())) );
     }
@@ -195,15 +196,14 @@
     //
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC >
-    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
-            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
-            minimal_workspace ) {
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
+            const VectorTAU& tau, MatrixC& c, minimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
         bindings::detail::array< real_type > tmp_work( min_size_work( side,
                 bindings::size_row(c), bindings::size_column(c) ) );
-        return invoke( side, k, a, tau, c, workspace( tmp_work ) );
+        return invoke( side, a, tau, c, workspace( tmp_work ) );
     }
 
     //
@@ -215,21 +215,20 @@
     //
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC >
-    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
-            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
-            optimal_workspace ) {
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
+            const VectorTAU& tau, MatrixC& c, optimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
         real_type opt_size_work;
         detail::unmlq( side, trans(), bindings::size_row(c),
-                bindings::size_column(c), k, bindings::begin_value(a),
-                bindings::stride_major(a), bindings::begin_value(tau),
-                bindings::begin_value(c), bindings::stride_major(c),
-                &opt_size_work, -1 );
+                bindings::size_column(c), bindings::size(tau),
+                bindings::begin_value(a), bindings::stride_major(a),
+                bindings::begin_value(tau), bindings::begin_value(c),
+                bindings::stride_major(c), &opt_size_work, -1 );
         bindings::detail::array< real_type > tmp_work(
                 traits::detail::to_int( opt_size_work ) );
-        return invoke( side, k, a, tau, c, workspace( tmp_work ) );
+        return invoke( side, a, tau, c, workspace( tmp_work ) );
     }
 
     //
@@ -373,6 +372,33 @@
         typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
+unmlq( const Side side, const MatrixA& a, const VectorTAU& tau,
+        MatrixC& c, Workspace work ) {
+    return unmlq_impl< typename bindings::value_type<
+            MatrixA >::type >::invoke( side, a, tau, c, work );
+}
+
+//
+// Overloaded function for unmlq. Its overload differs for
+// * Default workspace-type (optimal)
+//
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
+inline typename boost::disable_if< detail::is_workspace< MatrixC >,
+        std::ptrdiff_t >::type
+unmlq( const Side side, const MatrixA& a, const VectorTAU& tau,
+        MatrixC& c ) {
+    return unmlq_impl< typename bindings::value_type<
+            MatrixA >::type >::invoke( side, a, tau, c, optimal_workspace() );
+}
+//
+// Overloaded function for unmlq. Its overload differs for
+// * User-defined workspace
+//
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
+inline typename boost::enable_if< detail::is_workspace< Workspace >,
+        std::ptrdiff_t >::type
 unmlq( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, MatrixC& c, Workspace work ) {
     return unmlq_impl< typename bindings::value_type<
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmql.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmql.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmql.hpp	2010-08-17 06:39:08 EDT (Tue, 17 Aug 2010)
@@ -149,9 +149,9 @@
     //
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC, typename WORK >
-    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
-            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
-            detail::workspace1< WORK > work ) {
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
+            const VectorTAU& tau, MatrixC& c, detail::workspace1<
+            WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
@@ -164,7 +164,7 @@
                 typename remove_const< typename bindings::value_type<
                 MatrixC >::type >::type >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixC >::value) );
-        BOOST_ASSERT( bindings::size(tau) >= k );
+        BOOST_ASSERT( bindings::size(tau) >= bindings::size(tau) );
         BOOST_ASSERT( bindings::size(work.select(real_type())) >=
                 min_size_work( side, bindings::size_row(c),
                 bindings::size_column(c) ));
@@ -177,9 +177,10 @@
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
         return detail::unmql( side, trans(), bindings::size_row(c),
-                bindings::size_column(c), k, bindings::begin_value(a),
-                bindings::stride_major(a), bindings::begin_value(tau),
-                bindings::begin_value(c), bindings::stride_major(c),
+                bindings::size_column(c), bindings::size(tau),
+                bindings::begin_value(a), bindings::stride_major(a),
+                bindings::begin_value(tau), bindings::begin_value(c),
+                bindings::stride_major(c),
                 bindings::begin_value(work.select(real_type())),
                 bindings::size(work.select(real_type())) );
     }
@@ -193,15 +194,14 @@
     //
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC >
-    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
-            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
-            minimal_workspace ) {
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
+            const VectorTAU& tau, MatrixC& c, minimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
         bindings::detail::array< real_type > tmp_work( min_size_work( side,
                 bindings::size_row(c), bindings::size_column(c) ) );
-        return invoke( side, k, a, tau, c, workspace( tmp_work ) );
+        return invoke( side, a, tau, c, workspace( tmp_work ) );
     }
 
     //
@@ -213,21 +213,20 @@
     //
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC >
-    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
-            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
-            optimal_workspace ) {
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
+            const VectorTAU& tau, MatrixC& c, optimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
         real_type opt_size_work;
         detail::unmql( side, trans(), bindings::size_row(c),
-                bindings::size_column(c), k, bindings::begin_value(a),
-                bindings::stride_major(a), bindings::begin_value(tau),
-                bindings::begin_value(c), bindings::stride_major(c),
-                &opt_size_work, -1 );
+                bindings::size_column(c), bindings::size(tau),
+                bindings::begin_value(a), bindings::stride_major(a),
+                bindings::begin_value(tau), bindings::begin_value(c),
+                bindings::stride_major(c), &opt_size_work, -1 );
         bindings::detail::array< real_type > tmp_work(
                 traits::detail::to_int( opt_size_work ) );
-        return invoke( side, k, a, tau, c, workspace( tmp_work ) );
+        return invoke( side, a, tau, c, workspace( tmp_work ) );
     }
 
     //
@@ -369,6 +368,33 @@
         typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
+unmql( const Side side, const MatrixA& a, const VectorTAU& tau,
+        MatrixC& c, Workspace work ) {
+    return unmql_impl< typename bindings::value_type<
+            MatrixA >::type >::invoke( side, a, tau, c, work );
+}
+
+//
+// Overloaded function for unmql. Its overload differs for
+// * Default workspace-type (optimal)
+//
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
+inline typename boost::disable_if< detail::is_workspace< MatrixC >,
+        std::ptrdiff_t >::type
+unmql( const Side side, const MatrixA& a, const VectorTAU& tau,
+        MatrixC& c ) {
+    return unmql_impl< typename bindings::value_type<
+            MatrixA >::type >::invoke( side, a, tau, c, optimal_workspace() );
+}
+//
+// Overloaded function for unmql. Its overload differs for
+// * User-defined workspace
+//
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
+inline typename boost::enable_if< detail::is_workspace< Workspace >,
+        std::ptrdiff_t >::type
 unmql( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, MatrixC& c, Workspace work ) {
     return unmql_impl< typename bindings::value_type<
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmrq.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmrq.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmrq.hpp	2010-08-17 06:39:08 EDT (Tue, 17 Aug 2010)
@@ -149,9 +149,9 @@
     //
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC, typename WORK >
-    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
-            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
-            detail::workspace1< WORK > work ) {
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
+            const VectorTAU& tau, MatrixC& c, detail::workspace1<
+            WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
@@ -164,7 +164,7 @@
                 typename remove_const< typename bindings::value_type<
                 MatrixC >::type >::type >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixC >::value) );
-        BOOST_ASSERT( bindings::size(tau) >= k );
+        BOOST_ASSERT( bindings::size(tau) >= bindings::size(tau) );
         BOOST_ASSERT( bindings::size(work.select(real_type())) >=
                 min_size_work( side, bindings::size_row(c),
                 bindings::size_column(c) ));
@@ -175,13 +175,14 @@
                 bindings::stride_minor(c) == 1 );
         BOOST_ASSERT( bindings::size_row(c) >= 0 );
         BOOST_ASSERT( bindings::stride_major(a) >= std::max< std::ptrdiff_t >(1,
-                k) );
+                bindings::size(tau)) );
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
         return detail::unmrq( side, trans(), bindings::size_row(c),
-                bindings::size_column(c), k, bindings::begin_value(a),
-                bindings::stride_major(a), bindings::begin_value(tau),
-                bindings::begin_value(c), bindings::stride_major(c),
+                bindings::size_column(c), bindings::size(tau),
+                bindings::begin_value(a), bindings::stride_major(a),
+                bindings::begin_value(tau), bindings::begin_value(c),
+                bindings::stride_major(c),
                 bindings::begin_value(work.select(real_type())),
                 bindings::size(work.select(real_type())) );
     }
@@ -195,15 +196,14 @@
     //
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC >
-    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
-            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
-            minimal_workspace ) {
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
+            const VectorTAU& tau, MatrixC& c, minimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
         bindings::detail::array< real_type > tmp_work( min_size_work( side,
                 bindings::size_row(c), bindings::size_column(c) ) );
-        return invoke( side, k, a, tau, c, workspace( tmp_work ) );
+        return invoke( side, a, tau, c, workspace( tmp_work ) );
     }
 
     //
@@ -215,21 +215,20 @@
     //
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC >
-    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
-            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
-            optimal_workspace ) {
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
+            const VectorTAU& tau, MatrixC& c, optimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
         real_type opt_size_work;
         detail::unmrq( side, trans(), bindings::size_row(c),
-                bindings::size_column(c), k, bindings::begin_value(a),
-                bindings::stride_major(a), bindings::begin_value(tau),
-                bindings::begin_value(c), bindings::stride_major(c),
-                &opt_size_work, -1 );
+                bindings::size_column(c), bindings::size(tau),
+                bindings::begin_value(a), bindings::stride_major(a),
+                bindings::begin_value(tau), bindings::begin_value(c),
+                bindings::stride_major(c), &opt_size_work, -1 );
         bindings::detail::array< real_type > tmp_work(
                 traits::detail::to_int( opt_size_work ) );
-        return invoke( side, k, a, tau, c, workspace( tmp_work ) );
+        return invoke( side, a, tau, c, workspace( tmp_work ) );
     }
 
     //
@@ -373,6 +372,33 @@
         typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
+unmrq( const Side side, const MatrixA& a, const VectorTAU& tau,
+        MatrixC& c, Workspace work ) {
+    return unmrq_impl< typename bindings::value_type<
+            MatrixA >::type >::invoke( side, a, tau, c, work );
+}
+
+//
+// Overloaded function for unmrq. Its overload differs for
+// * Default workspace-type (optimal)
+//
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
+inline typename boost::disable_if< detail::is_workspace< MatrixC >,
+        std::ptrdiff_t >::type
+unmrq( const Side side, const MatrixA& a, const VectorTAU& tau,
+        MatrixC& c ) {
+    return unmrq_impl< typename bindings::value_type<
+            MatrixA >::type >::invoke( side, a, tau, c, optimal_workspace() );
+}
+//
+// Overloaded function for unmrq. Its overload differs for
+// * User-defined workspace
+//
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
+inline typename boost::enable_if< detail::is_workspace< Workspace >,
+        std::ptrdiff_t >::type
 unmrq( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, MatrixC& c, Workspace work ) {
     return unmrq_impl< typename bindings::value_type<
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmrz.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmrz.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmrz.hpp	2010-08-17 06:39:08 EDT (Tue, 17 Aug 2010)
@@ -150,9 +150,9 @@
     //
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC, typename WORK >
-    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
-            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
-            detail::workspace1< WORK > work ) {
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
+            const VectorTAU& tau, MatrixC& c, detail::workspace1<
+            WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
@@ -165,7 +165,7 @@
                 typename remove_const< typename bindings::value_type<
                 MatrixC >::type >::type >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixC >::value) );
-        BOOST_ASSERT( bindings::size(tau) >= k );
+        BOOST_ASSERT( bindings::size(tau) >= bindings::size(tau) );
         BOOST_ASSERT( bindings::size(work.select(real_type())) >=
                 min_size_work( side, bindings::size_row(c),
                 bindings::size_column(c) ));
@@ -176,12 +176,13 @@
                 bindings::stride_minor(c) == 1 );
         BOOST_ASSERT( bindings::size_row(c) >= 0 );
         BOOST_ASSERT( bindings::stride_major(a) >= std::max< std::ptrdiff_t >(1,
-                k) );
+                bindings::size(tau)) );
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
         return detail::unmrz( side, trans(), bindings::size_row(c),
-                bindings::size_column(c), k, bindings::size_column_op(a,
-                trans()), bindings::begin_value(a), bindings::stride_major(a),
+                bindings::size_column(c), bindings::size(tau),
+                bindings::size_column_op(a, trans()),
+                bindings::begin_value(a), bindings::stride_major(a),
                 bindings::begin_value(tau), bindings::begin_value(c),
                 bindings::stride_major(c),
                 bindings::begin_value(work.select(real_type())),
@@ -197,15 +198,14 @@
     //
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC >
-    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
-            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
-            minimal_workspace ) {
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
+            const VectorTAU& tau, MatrixC& c, minimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
         bindings::detail::array< real_type > tmp_work( min_size_work( side,
                 bindings::size_row(c), bindings::size_column(c) ) );
-        return invoke( side, k, a, tau, c, workspace( tmp_work ) );
+        return invoke( side, a, tau, c, workspace( tmp_work ) );
     }
 
     //
@@ -217,21 +217,21 @@
     //
     template< typename Side, typename MatrixA, typename VectorTAU,
             typename MatrixC >
-    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
-            const MatrixA& a, const VectorTAU& tau, MatrixC& c,
-            optimal_workspace ) {
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
+            const VectorTAU& tau, MatrixC& c, optimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixC >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
         real_type opt_size_work;
         detail::unmrz( side, trans(), bindings::size_row(c),
-                bindings::size_column(c), k, bindings::size_column_op(a,
-                trans()), bindings::begin_value(a), bindings::stride_major(a),
+                bindings::size_column(c), bindings::size(tau),
+                bindings::size_column_op(a, trans()),
+                bindings::begin_value(a), bindings::stride_major(a),
                 bindings::begin_value(tau), bindings::begin_value(c),
                 bindings::stride_major(c), &opt_size_work, -1 );
         bindings::detail::array< real_type > tmp_work(
                 traits::detail::to_int( opt_size_work ) );
-        return invoke( side, k, a, tau, c, workspace( tmp_work ) );
+        return invoke( side, a, tau, c, workspace( tmp_work ) );
     }
 
     //
@@ -376,6 +376,33 @@
         typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
+unmrz( const Side side, const MatrixA& a, const VectorTAU& tau,
+        MatrixC& c, Workspace work ) {
+    return unmrz_impl< typename bindings::value_type<
+            MatrixA >::type >::invoke( side, a, tau, c, work );
+}
+
+//
+// Overloaded function for unmrz. Its overload differs for
+// * Default workspace-type (optimal)
+//
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
+inline typename boost::disable_if< detail::is_workspace< MatrixC >,
+        std::ptrdiff_t >::type
+unmrz( const Side side, const MatrixA& a, const VectorTAU& tau,
+        MatrixC& c ) {
+    return unmrz_impl< typename bindings::value_type<
+            MatrixA >::type >::invoke( side, a, tau, c, optimal_workspace() );
+}
+//
+// Overloaded function for unmrz. Its overload differs for
+// * User-defined workspace
+//
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
+inline typename boost::enable_if< detail::is_workspace< Workspace >,
+        std::ptrdiff_t >::type
 unmrz( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, MatrixC& c, Workspace work ) {
     return unmrz_impl< typename bindings::value_type<
Modified: sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/ormbr.qbk
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/ormbr.qbk	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/ormbr.qbk	2010-08-17 06:39:08 EDT (Tue, 17 Aug 2010)
@@ -9,8 +9,8 @@
 [heading Prototype]
 There is one prototype of `ormbr` available, please see below.
 ``
-ormbr( const char vect, const Side side, const int_t k,
-        const MatrixA& a, const VectorTAU& tau, MatrixC& c );
+ormbr( const char vect, const Side side, const MatrixA& a,
+        const VectorTAU& tau, MatrixC& c );
 ``
 
 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/ormlq.qbk
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/ormlq.qbk	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/ormlq.qbk	2010-08-17 06:39:08 EDT (Tue, 17 Aug 2010)
@@ -9,8 +9,8 @@
 [heading Prototype]
 There is one prototype of `ormlq` available, please see below.
 ``
-ormlq( const Side side, const int_t k, const MatrixA& a,
-        const VectorTAU& tau, MatrixC& c );
+ormlq( const Side side, const MatrixA& a, const VectorTAU& tau,
+        MatrixC& c );
 ``
 
 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/ormql.qbk
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/ormql.qbk	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/ormql.qbk	2010-08-17 06:39:08 EDT (Tue, 17 Aug 2010)
@@ -9,8 +9,8 @@
 [heading Prototype]
 There is one prototype of `ormql` available, please see below.
 ``
-ormql( const Side side, const int_t k, const MatrixA& a,
-        const VectorTAU& tau, MatrixC& c );
+ormql( const Side side, const MatrixA& a, const VectorTAU& tau,
+        MatrixC& c );
 ``
 
 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/ormrq.qbk
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/ormrq.qbk	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/ormrq.qbk	2010-08-17 06:39:08 EDT (Tue, 17 Aug 2010)
@@ -9,8 +9,8 @@
 [heading Prototype]
 There is one prototype of `ormrq` available, please see below.
 ``
-ormrq( const Side side, const int_t k, const MatrixA& a,
-        const VectorTAU& tau, MatrixC& c );
+ormrq( const Side side, const MatrixA& a, const VectorTAU& tau,
+        MatrixC& c );
 ``
 
 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/ormrz.qbk
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/ormrz.qbk	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/ormrz.qbk	2010-08-17 06:39:08 EDT (Tue, 17 Aug 2010)
@@ -9,8 +9,8 @@
 [heading Prototype]
 There is one prototype of `ormrz` available, please see below.
 ``
-ormrz( const Side side, const int_t k, const MatrixA& a,
-        const VectorTAU& tau, MatrixC& c );
+ormrz( const Side side, const MatrixA& a, const VectorTAU& tau,
+        MatrixC& c );
 ``
 
 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/unmbr.qbk
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/unmbr.qbk	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/unmbr.qbk	2010-08-17 06:39:08 EDT (Tue, 17 Aug 2010)
@@ -7,7 +7,12 @@
 [section unmbr]
 
 [heading Prototype]
-There is one prototype of `unmbr` available, please see below.
+There are two prototypes of `unmbr` available, please see below.
+``
+unmbr( const char vect, const Side side, const MatrixA& a,
+        const VectorTAU& tau, MatrixC& c );
+``
+
 ``
 unmbr( const char vect, const Side side, const int_t k,
         const MatrixA& a, const VectorTAU& tau, MatrixC& c );
Modified: sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/unmlq.qbk
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/unmlq.qbk	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/unmlq.qbk	2010-08-17 06:39:08 EDT (Tue, 17 Aug 2010)
@@ -7,7 +7,12 @@
 [section unmlq]
 
 [heading Prototype]
-There is one prototype of `unmlq` available, please see below.
+There are two prototypes of `unmlq` available, please see below.
+``
+unmlq( const Side side, const MatrixA& a, const VectorTAU& tau,
+        MatrixC& c );
+``
+
 ``
 unmlq( const Side side, const int_t k, const MatrixA& a,
         const VectorTAU& tau, MatrixC& c );
Modified: sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/unmql.qbk
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/unmql.qbk	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/unmql.qbk	2010-08-17 06:39:08 EDT (Tue, 17 Aug 2010)
@@ -7,7 +7,12 @@
 [section unmql]
 
 [heading Prototype]
-There is one prototype of `unmql` available, please see below.
+There are two prototypes of `unmql` available, please see below.
+``
+unmql( const Side side, const MatrixA& a, const VectorTAU& tau,
+        MatrixC& c );
+``
+
 ``
 unmql( const Side side, const int_t k, const MatrixA& a,
         const VectorTAU& tau, MatrixC& c );
Modified: sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/unmrq.qbk
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/unmrq.qbk	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/unmrq.qbk	2010-08-17 06:39:08 EDT (Tue, 17 Aug 2010)
@@ -7,7 +7,12 @@
 [section unmrq]
 
 [heading Prototype]
-There is one prototype of `unmrq` available, please see below.
+There are two prototypes of `unmrq` available, please see below.
+``
+unmrq( const Side side, const MatrixA& a, const VectorTAU& tau,
+        MatrixC& c );
+``
+
 ``
 unmrq( const Side side, const int_t k, const MatrixA& a,
         const VectorTAU& tau, MatrixC& c );
Modified: sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/unmrz.qbk
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/unmrz.qbk	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/computational/unmrz.qbk	2010-08-17 06:39:08 EDT (Tue, 17 Aug 2010)
@@ -7,7 +7,12 @@
 [section unmrz]
 
 [heading Prototype]
-There is one prototype of `unmrz` available, please see below.
+There are two prototypes of `unmrz` available, please see below.
+``
+unmrz( const Side side, const MatrixA& a, const VectorTAU& tau,
+        MatrixC& c );
+``
+
 ``
 unmrz( const Side side, const int_t k, const MatrixA& a,
         const VectorTAU& tau, MatrixC& c );
Modified: sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/computational/orm.hpp
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/computational/orm.hpp	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/computational/orm.hpp	2010-08-17 06:39:08 EDT (Tue, 17 Aug 2010)
@@ -3,12 +3,16 @@
 so the init below is pretty useless right now. It only shows how it could work in theory.
 $TEMPLATE[ormbr.all.NQ.init]
 $INTEGER_TYPE nq = bindings::detail::if_left( side, bindings::size_row(c), bindings::size_column(c) );
+$TEMPLATE[ormbr.all.K.trait]
+size,TAU
 $TEMPLATE[ormbr.all.min_size_work.args]
 SIDE,M,N
 $TEMPLATE[ormbr.includes]
 #include <boost/numeric/bindings/detail/if_left.hpp>
 $TEMPLATE[ormbr.all.min_size_work]
 return std::max< $INTEGER_TYPE >( 1, bindings::detail::if_left( side, n, m ) );
+$TEMPLATE[ormlq.all.K.trait]
+size,TAU
 $TEMPLATE[ormlq.all.min_size_work.args]
 SIDE,M,N
 $TEMPLATE[ormlq.includes]
@@ -23,30 +27,40 @@
 #include <boost/numeric/bindings/detail/if_left.hpp>
 $TEMPLATE[ormqr.all.min_size_work]
 return std::max< $INTEGER_TYPE >( 1, bindings::detail::if_left( side, n, m ) );
+$TEMPLATE[ormrq.all.K.trait]
+size,TAU
 $TEMPLATE[ormrq.all.min_size_work.args]
 SIDE,M,N
 $TEMPLATE[ormrq.includes]
 #include <boost/numeric/bindings/detail/if_left.hpp>
 $TEMPLATE[ormrq.all.min_size_work]
 return std::max< $INTEGER_TYPE >( 1, bindings::detail::if_left( side, n, m ) );
+$TEMPLATE[ormrz.all.K.trait]
+size,TAU
 $TEMPLATE[ormrz.all.min_size_work.args]
 SIDE,M,N
 $TEMPLATE[ormrz.includes]
 #include <boost/numeric/bindings/detail/if_left.hpp>
 $TEMPLATE[ormrz.all.min_size_work]
 return std::max< $INTEGER_TYPE >( 1, bindings::detail::if_left( side, n, m ) );
+$TEMPLATE[ormtr.all.K.trait]
+size,TAU
 $TEMPLATE[ormtr.all.min_size_work.args]
 SIDE,M,N
 $TEMPLATE[ormtr.includes]
 #include <boost/numeric/bindings/detail/if_left.hpp>
 $TEMPLATE[ormtr.all.min_size_work]
 return std::max< $INTEGER_TYPE >( 1, bindings::detail::if_left( side, n, m ) );
+$TEMPLATE[ormql.all.K.trait]
+size,TAU
 $TEMPLATE[ormql.all.min_size_work.args]
 SIDE,M,N
 $TEMPLATE[ormql.includes]
 #include <boost/numeric/bindings/detail/if_left.hpp>
 $TEMPLATE[ormql.all.min_size_work]
 return std::max< $INTEGER_TYPE >( 1, bindings::detail::if_left( side, n, m ) );
+$TEMPLATE[ormhr.all.K.trait]
+size,TAU
 $TEMPLATE[ormhr.all.min_size_work.args]
 SIDE,M,N
 $TEMPLATE[ormhr.includes]