Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r64420 - in sandbox/numeric_bindings: boost/numeric/bindings/blas/level2 boost/numeric/bindings/blas/level3 libs/numeric/bindings/blas/test libs/numeric/bindings/doc/blas/level2 libs/numeric/bindings/doc/blas/level3 libs/numeric/bindings/tools
From: thomas.klimpel_at_[hidden]
Date: 2010-07-28 18:32:49


Author: klimpel
Date: 2010-07-28 18:32:45 EDT (Wed, 28 Jul 2010)
New Revision: 64420
URL: http://svn.boost.org/trac/boost/changeset/64420

Log:
add real symmetric matrices as special cases of complex hermitian (for blas)
Text files modified:
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hbmv.hpp | 87 +++++++++++++++++++++++++++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hemv.hpp | 83 ++++++++++++++++++++++++++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her.hpp | 78 +++++++++++++++++++++++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her2.hpp | 83 ++++++++++++++++++++++++++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpmv.hpp | 83 ++++++++++++++++++++++++++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr.hpp | 74 ++++++++++++++++++++++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr2.hpp | 80 ++++++++++++++++++++++++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/hemm.hpp | 92 ++++++++++++++++++++++++++++++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/her2k.hpp | 92 ++++++++++++++++++++++++++++++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/herk.hpp | 84 ++++++++++++++++++++++++++++++++++++
   sandbox/numeric_bindings/libs/numeric/bindings/blas/test/blas3.cpp | 29 -----------
   sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level2/hbmv.qbk | 15 ++++-
   sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level2/hemv.qbk | 15 ++++-
   sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level2/her.qbk | 8 ++-
   sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level2/her2.qbk | 15 ++++-
   sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level2/hpmv.qbk | 15 ++++-
   sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level2/hpr.qbk | 8 ++-
   sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level2/hpr2.qbk | 15 ++++-
   sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level3/hemm.qbk | 15 ++++-
   sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level3/her2k.qbk | 15 ++++-
   sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level3/herk.qbk | 8 ++-
   sandbox/numeric_bindings/libs/numeric/bindings/tools/blas_generator.py | 42 ++++++++++++++++--
   22 files changed, 967 insertions(+), 69 deletions(-)

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 2010-07-28 18:32:45 EDT (Wed, 28 Jul 2010)
@@ -61,6 +61,34 @@
 //
 // Overloaded function for dispatching to
 // * CBLAS backend, and
+// * float value-type.
+//
+template< typename Order, typename UpLo >
+inline void hbmv( const Order order, const UpLo uplo, const int n,
+ const int k, const float alpha, const float* a, const int lda,
+ const float* x, const int incx, const float beta, float* y,
+ const int incy ) {
+ cblas_ssbmv( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
+ k, alpha, a, lda, x, incx, beta, y, incy );
+}
+
+//
+// Overloaded function for dispatching to
+// * CBLAS backend, and
+// * double value-type.
+//
+template< typename Order, typename UpLo >
+inline void hbmv( const Order order, const UpLo uplo, const int n,
+ const int k, const double alpha, const double* a, const int lda,
+ const double* x, const int incx, const double beta, double* y,
+ const int incy ) {
+ cblas_dsbmv( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
+ k, alpha, a, lda, x, incx, beta, y, incy );
+}
+
+//
+// Overloaded function for dispatching to
+// * CBLAS backend, and
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
@@ -94,6 +122,35 @@
 //
 // Overloaded function for dispatching to
 // * CUBLAS backend, and
+// * float value-type.
+//
+template< typename Order, typename UpLo >
+inline void hbmv( const Order order, const UpLo uplo, const int n,
+ const int k, const float alpha, const float* a, const int lda,
+ const float* x, const int incx, const float beta, float* y,
+ const int incy ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ cublasSsbmv( blas_option< UpLo >::value, n, k, alpha, a, lda, x, incx,
+ beta, y, incy );
+}
+
+//
+// Overloaded function for dispatching to
+// * CUBLAS backend, and
+// * double value-type.
+//
+template< typename Order, typename UpLo >
+inline void hbmv( const Order order, const UpLo uplo, const int n,
+ const int k, const double alpha, const double* a, const int lda,
+ const double* x, const int incx, const double beta, double* y,
+ const int incy ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ // NOT FOUND();
+}
+
+//
+// Overloaded function for dispatching to
+// * CUBLAS backend, and
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
@@ -128,6 +185,36 @@
 //
 // Overloaded function for dispatching to
 // * netlib-compatible BLAS backend (the default), and
+// * float value-type.
+//
+template< typename Order, typename UpLo >
+inline void hbmv( const Order order, const UpLo uplo, const fortran_int_t n,
+ const fortran_int_t k, const float alpha, const float* a,
+ const fortran_int_t lda, const float* x, const fortran_int_t incx,
+ const float beta, float* y, const fortran_int_t incy ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ BLAS_SSBMV( &blas_option< UpLo >::value, &n, &k, &alpha, a, &lda, x,
+ &incx, &beta, y, &incy );
+}
+
+//
+// Overloaded function for dispatching to
+// * netlib-compatible BLAS backend (the default), and
+// * double value-type.
+//
+template< typename Order, typename UpLo >
+inline void hbmv( const Order order, const UpLo uplo, const fortran_int_t n,
+ const fortran_int_t k, const double alpha, const double* a,
+ const fortran_int_t lda, const double* x, const fortran_int_t incx,
+ const double beta, double* y, const fortran_int_t incy ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ BLAS_DSBMV( &blas_option< UpLo >::value, &n, &k, &alpha, a, &lda, x,
+ &incx, &beta, y, &incy );
+}
+
+//
+// Overloaded function for dispatching to
+// * netlib-compatible BLAS backend (the default), and
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >

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 2010-07-28 18:32:45 EDT (Wed, 28 Jul 2010)
@@ -60,6 +60,32 @@
 //
 // Overloaded function for dispatching to
 // * CBLAS backend, and
+// * float value-type.
+//
+template< typename Order, typename UpLo >
+inline void hemv( const Order order, const UpLo uplo, const int n,
+ const float alpha, const float* a, const int lda, const float* x,
+ const int incx, const float beta, float* y, const int incy ) {
+ cblas_ssymv( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
+ alpha, a, lda, x, incx, beta, y, incy );
+}
+
+//
+// Overloaded function for dispatching to
+// * CBLAS backend, and
+// * double value-type.
+//
+template< typename Order, typename UpLo >
+inline void hemv( const Order order, const UpLo uplo, const int n,
+ const double alpha, const double* a, const int lda, const double* x,
+ const int incx, const double beta, double* y, const int incy ) {
+ cblas_dsymv( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
+ alpha, a, lda, x, incx, beta, y, incy );
+}
+
+//
+// Overloaded function for dispatching to
+// * CBLAS backend, and
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
@@ -91,6 +117,33 @@
 //
 // Overloaded function for dispatching to
 // * CUBLAS backend, and
+// * float value-type.
+//
+template< typename Order, typename UpLo >
+inline void hemv( const Order order, const UpLo uplo, const int n,
+ const float alpha, const float* a, const int lda, const float* x,
+ const int incx, const float beta, float* y, const int incy ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ cublasSsymv( blas_option< UpLo >::value, n, alpha, a, lda, x, incx, beta,
+ y, incy );
+}
+
+//
+// Overloaded function for dispatching to
+// * CUBLAS backend, and
+// * double value-type.
+//
+template< typename Order, typename UpLo >
+inline void hemv( const Order order, const UpLo uplo, const int n,
+ const double alpha, const double* a, const int lda, const double* x,
+ const int incx, const double beta, double* y, const int incy ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ // NOT FOUND();
+}
+
+//
+// Overloaded function for dispatching to
+// * CUBLAS backend, and
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
@@ -123,6 +176,36 @@
 //
 // Overloaded function for dispatching to
 // * netlib-compatible BLAS backend (the default), and
+// * float value-type.
+//
+template< typename Order, typename UpLo >
+inline void hemv( const Order order, const UpLo uplo, const fortran_int_t n,
+ const float alpha, const float* a, const fortran_int_t lda,
+ const float* x, const fortran_int_t incx, const float beta, float* y,
+ const fortran_int_t incy ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ BLAS_SSYMV( &blas_option< UpLo >::value, &n, &alpha, a, &lda, x, &incx,
+ &beta, y, &incy );
+}
+
+//
+// Overloaded function for dispatching to
+// * netlib-compatible BLAS backend (the default), and
+// * double value-type.
+//
+template< typename Order, typename UpLo >
+inline void hemv( const Order order, const UpLo uplo, const fortran_int_t n,
+ const double alpha, const double* a, const fortran_int_t lda,
+ const double* x, const fortran_int_t incx, const double beta,
+ double* y, const fortran_int_t incy ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ BLAS_DSYMV( &blas_option< UpLo >::value, &n, &alpha, a, &lda, x, &incx,
+ &beta, y, &incy );
+}
+
+//
+// Overloaded function for dispatching to
+// * netlib-compatible BLAS backend (the default), and
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >

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 2010-07-28 18:32:45 EDT (Wed, 28 Jul 2010)
@@ -60,6 +60,32 @@
 //
 // Overloaded function for dispatching to
 // * CBLAS backend, and
+// * float value-type.
+//
+template< typename Order, typename UpLo >
+inline void her( const Order order, const UpLo uplo, const int n,
+ const float alpha, const float* x, const int incx, float* a,
+ const int lda ) {
+ cblas_ssyr( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
+ alpha, x, incx, a, lda );
+}
+
+//
+// Overloaded function for dispatching to
+// * CBLAS backend, and
+// * double value-type.
+//
+template< typename Order, typename UpLo >
+inline void her( const Order order, const UpLo uplo, const int n,
+ const double alpha, const double* x, const int incx, double* a,
+ const int lda ) {
+ cblas_dsyr( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
+ alpha, x, incx, a, lda );
+}
+
+//
+// Overloaded function for dispatching to
+// * CBLAS backend, and
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
@@ -87,6 +113,32 @@
 //
 // Overloaded function for dispatching to
 // * CUBLAS backend, and
+// * float value-type.
+//
+template< typename Order, typename UpLo >
+inline void her( const Order order, const UpLo uplo, const int n,
+ const float alpha, const float* x, const int incx, float* a,
+ const int lda ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ cublasSsyr( blas_option< UpLo >::value, n, alpha, x, incx, a, lda );
+}
+
+//
+// Overloaded function for dispatching to
+// * CUBLAS backend, and
+// * double value-type.
+//
+template< typename Order, typename UpLo >
+inline void her( const Order order, const UpLo uplo, const int n,
+ const double alpha, const double* x, const int incx, double* a,
+ const int lda ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ cublasDsyr( blas_option< UpLo >::value, n, alpha, x, incx, a, lda );
+}
+
+//
+// Overloaded function for dispatching to
+// * CUBLAS backend, and
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
@@ -114,6 +166,32 @@
 //
 // Overloaded function for dispatching to
 // * netlib-compatible BLAS backend (the default), and
+// * float value-type.
+//
+template< typename Order, typename UpLo >
+inline void her( const Order order, const UpLo uplo, const fortran_int_t n,
+ const float alpha, const float* x, const fortran_int_t incx, float* a,
+ const fortran_int_t lda ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ BLAS_SSYR( &blas_option< UpLo >::value, &n, &alpha, x, &incx, a, &lda );
+}
+
+//
+// Overloaded function for dispatching to
+// * netlib-compatible BLAS backend (the default), and
+// * double value-type.
+//
+template< typename Order, typename UpLo >
+inline void her( const Order order, const UpLo uplo, const fortran_int_t n,
+ const double alpha, const double* x, const fortran_int_t incx,
+ double* a, const fortran_int_t lda ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ BLAS_DSYR( &blas_option< UpLo >::value, &n, &alpha, x, &incx, a, &lda );
+}
+
+//
+// Overloaded function for dispatching to
+// * netlib-compatible BLAS backend (the default), and
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >

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 2010-07-28 18:32:45 EDT (Wed, 28 Jul 2010)
@@ -60,6 +60,32 @@
 //
 // Overloaded function for dispatching to
 // * CBLAS backend, and
+// * float value-type.
+//
+template< typename Order, typename UpLo >
+inline void her2( const Order order, const UpLo uplo, const int n,
+ const float alpha, const float* x, const int incx, const float* y,
+ const int incy, float* a, const int lda ) {
+ cblas_ssyr2( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
+ alpha, x, incx, y, incy, a, lda );
+}
+
+//
+// Overloaded function for dispatching to
+// * CBLAS backend, and
+// * double value-type.
+//
+template< typename Order, typename UpLo >
+inline void her2( const Order order, const UpLo uplo, const int n,
+ const double alpha, const double* x, const int incx, const double* y,
+ const int incy, double* a, const int lda ) {
+ cblas_dsyr2( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
+ alpha, x, incx, y, incy, a, lda );
+}
+
+//
+// Overloaded function for dispatching to
+// * CBLAS backend, and
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
@@ -89,6 +115,33 @@
 //
 // Overloaded function for dispatching to
 // * CUBLAS backend, and
+// * float value-type.
+//
+template< typename Order, typename UpLo >
+inline void her2( const Order order, const UpLo uplo, const int n,
+ const float alpha, const float* x, const int incx, const float* y,
+ const int incy, float* a, const int lda ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ cublasSsyr2( blas_option< UpLo >::value, n, alpha, x, incx, y, incy, a,
+ lda );
+}
+
+//
+// Overloaded function for dispatching to
+// * CUBLAS backend, and
+// * double value-type.
+//
+template< typename Order, typename UpLo >
+inline void her2( const Order order, const UpLo uplo, const int n,
+ const double alpha, const double* x, const int incx, const double* y,
+ const int incy, double* a, const int lda ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ // NOT FOUND();
+}
+
+//
+// Overloaded function for dispatching to
+// * CUBLAS backend, and
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
@@ -119,6 +172,36 @@
 //
 // Overloaded function for dispatching to
 // * netlib-compatible BLAS backend (the default), and
+// * float value-type.
+//
+template< typename Order, typename UpLo >
+inline void her2( const Order order, const UpLo uplo, const fortran_int_t n,
+ const float alpha, const float* x, const fortran_int_t incx,
+ const float* y, const fortran_int_t incy, float* a,
+ const fortran_int_t lda ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ BLAS_SSYR2( &blas_option< UpLo >::value, &n, &alpha, x, &incx, y, &incy,
+ a, &lda );
+}
+
+//
+// Overloaded function for dispatching to
+// * netlib-compatible BLAS backend (the default), and
+// * double value-type.
+//
+template< typename Order, typename UpLo >
+inline void her2( const Order order, const UpLo uplo, const fortran_int_t n,
+ const double alpha, const double* x, const fortran_int_t incx,
+ const double* y, const fortran_int_t incy, double* a,
+ const fortran_int_t lda ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ BLAS_DSYR2( &blas_option< UpLo >::value, &n, &alpha, x, &incx, y, &incy,
+ a, &lda );
+}
+
+//
+// Overloaded function for dispatching to
+// * netlib-compatible BLAS backend (the default), and
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >

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 2010-07-28 18:32:45 EDT (Wed, 28 Jul 2010)
@@ -60,6 +60,32 @@
 //
 // Overloaded function for dispatching to
 // * CBLAS backend, and
+// * float value-type.
+//
+template< typename Order, typename UpLo >
+inline void hpmv( const Order order, const UpLo uplo, const int n,
+ const float alpha, const float* ap, const float* x, const int incx,
+ const float beta, float* y, const int incy ) {
+ cblas_sspmv( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
+ alpha, ap, x, incx, beta, y, incy );
+}
+
+//
+// Overloaded function for dispatching to
+// * CBLAS backend, and
+// * double value-type.
+//
+template< typename Order, typename UpLo >
+inline void hpmv( const Order order, const UpLo uplo, const int n,
+ const double alpha, const double* ap, const double* x, const int incx,
+ const double beta, double* y, const int incy ) {
+ cblas_dspmv( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
+ alpha, ap, x, incx, beta, y, incy );
+}
+
+//
+// Overloaded function for dispatching to
+// * CBLAS backend, and
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
@@ -91,6 +117,33 @@
 //
 // Overloaded function for dispatching to
 // * CUBLAS backend, and
+// * float value-type.
+//
+template< typename Order, typename UpLo >
+inline void hpmv( const Order order, const UpLo uplo, const int n,
+ const float alpha, const float* ap, const float* x, const int incx,
+ const float beta, float* y, const int incy ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ cublasSspmv( blas_option< UpLo >::value, n, alpha, ap, x, incx, beta, y,
+ incy );
+}
+
+//
+// Overloaded function for dispatching to
+// * CUBLAS backend, and
+// * double value-type.
+//
+template< typename Order, typename UpLo >
+inline void hpmv( const Order order, const UpLo uplo, const int n,
+ const double alpha, const double* ap, const double* x, const int incx,
+ const double beta, double* y, const int incy ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ // NOT FOUND();
+}
+
+//
+// Overloaded function for dispatching to
+// * CUBLAS backend, and
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
@@ -123,6 +176,36 @@
 //
 // Overloaded function for dispatching to
 // * netlib-compatible BLAS backend (the default), and
+// * float value-type.
+//
+template< typename Order, typename UpLo >
+inline void hpmv( const Order order, const UpLo uplo, const fortran_int_t n,
+ const float alpha, const float* ap, const float* x,
+ const fortran_int_t incx, const float beta, float* y,
+ const fortran_int_t incy ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ BLAS_SSPMV( &blas_option< UpLo >::value, &n, &alpha, ap, x, &incx, &beta,
+ y, &incy );
+}
+
+//
+// Overloaded function for dispatching to
+// * netlib-compatible BLAS backend (the default), and
+// * double value-type.
+//
+template< typename Order, typename UpLo >
+inline void hpmv( const Order order, const UpLo uplo, const fortran_int_t n,
+ const double alpha, const double* ap, const double* x,
+ const fortran_int_t incx, const double beta, double* y,
+ const fortran_int_t incy ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ BLAS_DSPMV( &blas_option< UpLo >::value, &n, &alpha, ap, x, &incx, &beta,
+ y, &incy );
+}
+
+//
+// Overloaded function for dispatching to
+// * netlib-compatible BLAS backend (the default), and
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >

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 2010-07-28 18:32:45 EDT (Wed, 28 Jul 2010)
@@ -60,6 +60,30 @@
 //
 // Overloaded function for dispatching to
 // * CBLAS backend, and
+// * float value-type.
+//
+template< typename Order, typename UpLo >
+inline void hpr( const Order order, const UpLo uplo, const int n,
+ const float alpha, const float* x, const int incx, float* ap ) {
+ cblas_sspr( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
+ alpha, x, incx, ap );
+}
+
+//
+// Overloaded function for dispatching to
+// * CBLAS backend, and
+// * double value-type.
+//
+template< typename Order, typename UpLo >
+inline void hpr( const Order order, const UpLo uplo, const int n,
+ const double alpha, const double* x, const int incx, double* ap ) {
+ cblas_dspr( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
+ alpha, x, incx, ap );
+}
+
+//
+// Overloaded function for dispatching to
+// * CBLAS backend, and
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
@@ -87,6 +111,30 @@
 //
 // Overloaded function for dispatching to
 // * CUBLAS backend, and
+// * float value-type.
+//
+template< typename Order, typename UpLo >
+inline void hpr( const Order order, const UpLo uplo, const int n,
+ const float alpha, const float* x, const int incx, float* ap ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ cublasSspr( blas_option< UpLo >::value, n, alpha, x, incx, ap );
+}
+
+//
+// Overloaded function for dispatching to
+// * CUBLAS backend, and
+// * double value-type.
+//
+template< typename Order, typename UpLo >
+inline void hpr( const Order order, const UpLo uplo, const int n,
+ const double alpha, const double* x, const int incx, double* ap ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ // NOT FOUND();
+}
+
+//
+// Overloaded function for dispatching to
+// * CUBLAS backend, and
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
@@ -114,6 +162,32 @@
 //
 // Overloaded function for dispatching to
 // * netlib-compatible BLAS backend (the default), and
+// * float value-type.
+//
+template< typename Order, typename UpLo >
+inline void hpr( const Order order, const UpLo uplo, const fortran_int_t n,
+ const float alpha, const float* x, const fortran_int_t incx,
+ float* ap ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ BLAS_SSPR( &blas_option< UpLo >::value, &n, &alpha, x, &incx, ap );
+}
+
+//
+// Overloaded function for dispatching to
+// * netlib-compatible BLAS backend (the default), and
+// * double value-type.
+//
+template< typename Order, typename UpLo >
+inline void hpr( const Order order, const UpLo uplo, const fortran_int_t n,
+ const double alpha, const double* x, const fortran_int_t incx,
+ double* ap ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ BLAS_DSPR( &blas_option< UpLo >::value, &n, &alpha, x, &incx, ap );
+}
+
+//
+// Overloaded function for dispatching to
+// * netlib-compatible BLAS backend (the default), and
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >

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 2010-07-28 18:32:45 EDT (Wed, 28 Jul 2010)
@@ -60,6 +60,32 @@
 //
 // Overloaded function for dispatching to
 // * CBLAS backend, and
+// * float value-type.
+//
+template< typename Order, typename UpLo >
+inline void hpr2( const Order order, const UpLo uplo, const int n,
+ const float alpha, const float* x, const int incx, const float* y,
+ const int incy, float* ap ) {
+ cblas_sspr2( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
+ alpha, x, incx, y, incy, ap );
+}
+
+//
+// Overloaded function for dispatching to
+// * CBLAS backend, and
+// * double value-type.
+//
+template< typename Order, typename UpLo >
+inline void hpr2( const Order order, const UpLo uplo, const int n,
+ const double alpha, const double* x, const int incx, const double* y,
+ const int incy, double* ap ) {
+ cblas_dspr2( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
+ alpha, x, incx, y, incy, ap );
+}
+
+//
+// Overloaded function for dispatching to
+// * CBLAS backend, and
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
@@ -89,6 +115,32 @@
 //
 // Overloaded function for dispatching to
 // * CUBLAS backend, and
+// * float value-type.
+//
+template< typename Order, typename UpLo >
+inline void hpr2( const Order order, const UpLo uplo, const int n,
+ const float alpha, const float* x, const int incx, const float* y,
+ const int incy, float* ap ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ cublasSspr2( blas_option< UpLo >::value, n, alpha, x, incx, y, incy, ap );
+}
+
+//
+// Overloaded function for dispatching to
+// * CUBLAS backend, and
+// * double value-type.
+//
+template< typename Order, typename UpLo >
+inline void hpr2( const Order order, const UpLo uplo, const int n,
+ const double alpha, const double* x, const int incx, const double* y,
+ const int incy, double* ap ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ // NOT FOUND();
+}
+
+//
+// Overloaded function for dispatching to
+// * CUBLAS backend, and
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
@@ -118,6 +170,34 @@
 //
 // Overloaded function for dispatching to
 // * netlib-compatible BLAS backend (the default), and
+// * float value-type.
+//
+template< typename Order, typename UpLo >
+inline void hpr2( const Order order, const UpLo uplo, const fortran_int_t n,
+ const float alpha, const float* x, const fortran_int_t incx,
+ const float* y, const fortran_int_t incy, float* ap ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ BLAS_SSPR2( &blas_option< UpLo >::value, &n, &alpha, x, &incx, y, &incy,
+ ap );
+}
+
+//
+// Overloaded function for dispatching to
+// * netlib-compatible BLAS backend (the default), and
+// * double value-type.
+//
+template< typename Order, typename UpLo >
+inline void hpr2( const Order order, const UpLo uplo, const fortran_int_t n,
+ const double alpha, const double* x, const fortran_int_t incx,
+ const double* y, const fortran_int_t incy, double* ap ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ BLAS_DSPR2( &blas_option< UpLo >::value, &n, &alpha, x, &incx, y, &incy,
+ ap );
+}
+
+//
+// Overloaded function for dispatching to
+// * netlib-compatible BLAS backend (the default), and
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >

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 2010-07-28 18:32:45 EDT (Wed, 28 Jul 2010)
@@ -60,6 +60,36 @@
 //
 // Overloaded function for dispatching to
 // * CBLAS backend, and
+// * float value-type.
+//
+template< typename Order, typename Side, typename UpLo >
+inline void hemm( const Order order, const Side side, const UpLo uplo,
+ const int m, const int n, const float alpha, const float* a,
+ const int lda, const float* b, const int ldb, const float beta,
+ float* c, const int ldc ) {
+ cblas_ssymm( cblas_option< Order >::value, cblas_option< Side >::value,
+ cblas_option< UpLo >::value, m, n, alpha, a, lda, b, ldb, beta, c,
+ ldc );
+}
+
+//
+// Overloaded function for dispatching to
+// * CBLAS backend, and
+// * double value-type.
+//
+template< typename Order, typename Side, typename UpLo >
+inline void hemm( const Order order, const Side side, const UpLo uplo,
+ const int m, const int n, const double alpha, const double* a,
+ const int lda, const double* b, const int ldb, const double beta,
+ double* c, const int ldc ) {
+ cblas_dsymm( cblas_option< Order >::value, cblas_option< Side >::value,
+ cblas_option< UpLo >::value, m, n, alpha, a, lda, b, ldb, beta, c,
+ ldc );
+}
+
+//
+// Overloaded function for dispatching to
+// * CBLAS backend, and
 // * complex<float> value-type.
 //
 template< typename Order, typename Side, typename UpLo >
@@ -95,6 +125,36 @@
 //
 // Overloaded function for dispatching to
 // * CUBLAS backend, and
+// * float value-type.
+//
+template< typename Order, typename Side, typename UpLo >
+inline void hemm( const Order order, const Side side, const UpLo uplo,
+ const int m, const int n, const float alpha, const float* a,
+ const int lda, const float* b, const int ldb, const float beta,
+ float* c, const int ldc ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ cublasSsymm( blas_option< Side >::value, blas_option< UpLo >::value, m, n,
+ alpha, a, lda, b, ldb, beta, c, ldc );
+}
+
+//
+// Overloaded function for dispatching to
+// * CUBLAS backend, and
+// * double value-type.
+//
+template< typename Order, typename Side, typename UpLo >
+inline void hemm( const Order order, const Side side, const UpLo uplo,
+ const int m, const int n, const double alpha, const double* a,
+ const int lda, const double* b, const int ldb, const double beta,
+ double* c, const int ldc ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ cublasDsymm( blas_option< Side >::value, blas_option< UpLo >::value, m, n,
+ alpha, a, lda, b, ldb, beta, c, ldc );
+}
+
+//
+// Overloaded function for dispatching to
+// * CUBLAS backend, and
 // * complex<float> value-type.
 //
 template< typename Order, typename Side, typename UpLo >
@@ -129,6 +189,38 @@
 //
 // Overloaded function for dispatching to
 // * netlib-compatible BLAS backend (the default), and
+// * float value-type.
+//
+template< typename Order, typename Side, typename UpLo >
+inline void hemm( const Order order, const Side side, const UpLo uplo,
+ const fortran_int_t m, const fortran_int_t n, const float alpha,
+ const float* a, const fortran_int_t lda, const float* b,
+ const fortran_int_t ldb, const float beta, float* c,
+ const fortran_int_t ldc ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ BLAS_SSYMM( &blas_option< Side >::value, &blas_option< UpLo >::value, &m,
+ &n, &alpha, a, &lda, b, &ldb, &beta, c, &ldc );
+}
+
+//
+// Overloaded function for dispatching to
+// * netlib-compatible BLAS backend (the default), and
+// * double value-type.
+//
+template< typename Order, typename Side, typename UpLo >
+inline void hemm( const Order order, const Side side, const UpLo uplo,
+ const fortran_int_t m, const fortran_int_t n, const double alpha,
+ const double* a, const fortran_int_t lda, const double* b,
+ const fortran_int_t ldb, const double beta, double* c,
+ const fortran_int_t ldc ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ BLAS_DSYMM( &blas_option< Side >::value, &blas_option< UpLo >::value, &m,
+ &n, &alpha, a, &lda, b, &ldb, &beta, c, &ldc );
+}
+
+//
+// Overloaded function for dispatching to
+// * netlib-compatible BLAS backend (the default), and
 // * complex<float> value-type.
 //
 template< typename Order, typename Side, typename UpLo >

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 2010-07-28 18:32:45 EDT (Wed, 28 Jul 2010)
@@ -61,6 +61,36 @@
 //
 // Overloaded function for dispatching to
 // * CBLAS backend, and
+// * float value-type.
+//
+template< typename Order, typename UpLo, typename Trans >
+inline void her2k( const Order order, const UpLo uplo, const Trans trans,
+ const int n, const int k, const float alpha, const float* a,
+ const int lda, const float* b, const int ldb, const float beta,
+ float* c, const int ldc ) {
+ cblas_ssyr2k( cblas_option< Order >::value, cblas_option< UpLo >::value,
+ cblas_option< Trans >::value, n, k, alpha, a, lda, b, ldb, beta,
+ c, ldc );
+}
+
+//
+// Overloaded function for dispatching to
+// * CBLAS backend, and
+// * double value-type.
+//
+template< typename Order, typename UpLo, typename Trans >
+inline void her2k( const Order order, const UpLo uplo, const Trans trans,
+ const int n, const int k, const double alpha, const double* a,
+ const int lda, const double* b, const int ldb, const double beta,
+ double* c, const int ldc ) {
+ cblas_dsyr2k( cblas_option< Order >::value, cblas_option< UpLo >::value,
+ cblas_option< Trans >::value, n, k, alpha, a, lda, b, ldb, beta,
+ c, ldc );
+}
+
+//
+// Overloaded function for dispatching to
+// * CBLAS backend, and
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
@@ -94,6 +124,36 @@
 //
 // Overloaded function for dispatching to
 // * CUBLAS backend, and
+// * float value-type.
+//
+template< typename Order, typename UpLo, typename Trans >
+inline void her2k( const Order order, const UpLo uplo, const Trans trans,
+ const int n, const int k, const float alpha, const float* a,
+ const int lda, const float* b, const int ldb, const float beta,
+ float* c, const int ldc ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ cublasSsyr2k( blas_option< UpLo >::value, blas_option< Trans >::value, n,
+ k, alpha, a, lda, b, ldb, beta, c, ldc );
+}
+
+//
+// Overloaded function for dispatching to
+// * CUBLAS backend, and
+// * double value-type.
+//
+template< typename Order, typename UpLo, typename Trans >
+inline void her2k( const Order order, const UpLo uplo, const Trans trans,
+ const int n, const int k, const double alpha, const double* a,
+ const int lda, const double* b, const int ldb, const double beta,
+ double* c, const int ldc ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ cublasDsyr2k( blas_option< UpLo >::value, blas_option< Trans >::value, n,
+ k, alpha, a, lda, b, ldb, beta, c, ldc );
+}
+
+//
+// Overloaded function for dispatching to
+// * CUBLAS backend, and
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
@@ -126,6 +186,38 @@
 //
 // Overloaded function for dispatching to
 // * netlib-compatible BLAS backend (the default), and
+// * float value-type.
+//
+template< typename Order, typename UpLo, typename Trans >
+inline void her2k( const Order order, const UpLo uplo, const Trans trans,
+ const fortran_int_t n, const fortran_int_t k, const float alpha,
+ const float* a, const fortran_int_t lda, const float* b,
+ const fortran_int_t ldb, const float beta, float* c,
+ const fortran_int_t ldc ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ BLAS_SSYR2K( &blas_option< UpLo >::value, &blas_option< Trans >::value,
+ &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc );
+}
+
+//
+// Overloaded function for dispatching to
+// * netlib-compatible BLAS backend (the default), and
+// * double value-type.
+//
+template< typename Order, typename UpLo, typename Trans >
+inline void her2k( const Order order, const UpLo uplo, const Trans trans,
+ const fortran_int_t n, const fortran_int_t k, const double alpha,
+ const double* a, const fortran_int_t lda, const double* b,
+ const fortran_int_t ldb, const double beta, double* c,
+ const fortran_int_t ldc ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ BLAS_DSYR2K( &blas_option< UpLo >::value, &blas_option< Trans >::value,
+ &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc );
+}
+
+//
+// Overloaded function for dispatching to
+// * netlib-compatible BLAS backend (the default), and
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >

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 2010-07-28 18:32:45 EDT (Wed, 28 Jul 2010)
@@ -61,6 +61,32 @@
 //
 // Overloaded function for dispatching to
 // * CBLAS backend, and
+// * float value-type.
+//
+template< typename Order, typename UpLo, typename Trans >
+inline void herk( const Order order, const UpLo uplo, const Trans trans,
+ const int n, const int k, const float alpha, const float* a,
+ const int lda, const float beta, float* c, const int ldc ) {
+ cblas_ssyrk( cblas_option< Order >::value, cblas_option< UpLo >::value,
+ cblas_option< Trans >::value, n, k, alpha, a, lda, beta, c, ldc );
+}
+
+//
+// Overloaded function for dispatching to
+// * CBLAS backend, and
+// * double value-type.
+//
+template< typename Order, typename UpLo, typename Trans >
+inline void herk( const Order order, const UpLo uplo, const Trans trans,
+ const int n, const int k, const double alpha, const double* a,
+ const int lda, const double beta, double* c, const int ldc ) {
+ cblas_dsyrk( cblas_option< Order >::value, cblas_option< UpLo >::value,
+ cblas_option< Trans >::value, n, k, alpha, a, lda, beta, c, ldc );
+}
+
+//
+// Overloaded function for dispatching to
+// * CBLAS backend, and
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
@@ -90,6 +116,34 @@
 //
 // Overloaded function for dispatching to
 // * CUBLAS backend, and
+// * float value-type.
+//
+template< typename Order, typename UpLo, typename Trans >
+inline void herk( const Order order, const UpLo uplo, const Trans trans,
+ const int n, const int k, const float alpha, const float* a,
+ const int lda, const float beta, float* c, const int ldc ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ cublasSsyrk( blas_option< UpLo >::value, blas_option< Trans >::value, n,
+ k, alpha, a, lda, beta, c, ldc );
+}
+
+//
+// Overloaded function for dispatching to
+// * CUBLAS backend, and
+// * double value-type.
+//
+template< typename Order, typename UpLo, typename Trans >
+inline void herk( const Order order, const UpLo uplo, const Trans trans,
+ const int n, const int k, const double alpha, const double* a,
+ const int lda, const double beta, double* c, const int ldc ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ cublasDsyrk( blas_option< UpLo >::value, blas_option< Trans >::value, n,
+ k, alpha, a, lda, beta, c, ldc );
+}
+
+//
+// Overloaded function for dispatching to
+// * CUBLAS backend, and
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
@@ -120,6 +174,36 @@
 //
 // Overloaded function for dispatching to
 // * netlib-compatible BLAS backend (the default), and
+// * float value-type.
+//
+template< typename Order, typename UpLo, typename Trans >
+inline void herk( const Order order, const UpLo uplo, const Trans trans,
+ const fortran_int_t n, const fortran_int_t k, const float alpha,
+ const float* a, const fortran_int_t lda, const float beta, float* c,
+ const fortran_int_t ldc ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ BLAS_SSYRK( &blas_option< UpLo >::value, &blas_option< Trans >::value, &n,
+ &k, &alpha, a, &lda, &beta, c, &ldc );
+}
+
+//
+// Overloaded function for dispatching to
+// * netlib-compatible BLAS backend (the default), and
+// * double value-type.
+//
+template< typename Order, typename UpLo, typename Trans >
+inline void herk( const Order order, const UpLo uplo, const Trans trans,
+ const fortran_int_t n, const fortran_int_t k, const double alpha,
+ const double* a, const fortran_int_t lda, const double beta,
+ double* c, const fortran_int_t ldc ) {
+ BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
+ BLAS_DSYRK( &blas_option< UpLo >::value, &blas_option< Trans >::value, &n,
+ &k, &alpha, a, &lda, &beta, c, &ldc );
+}
+
+//
+// Overloaded function for dispatching to
+// * netlib-compatible BLAS backend (the default), and
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >

Modified: sandbox/numeric_bindings/libs/numeric/bindings/blas/test/blas3.cpp
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/blas/test/blas3.cpp (original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/blas/test/blas3.cpp 2010-07-28 18:32:45 EDT (Wed, 28 Jul 2010)
@@ -28,30 +28,6 @@
 
 namespace bindings = boost::numeric::bindings;
 
-struct apply_real {
- template< typename MatrixA, typename MatrixC >
- static inline typename bindings::blas::herk_impl< typename bindings::value_type<
- MatrixA >::type >::result_type
- herk( const typename bindings::remove_imaginary< typename bindings::value_type<
- MatrixA >::type >::type alpha, const MatrixA& a,
- const typename bindings::remove_imaginary< typename bindings::value_type<
- MatrixA >::type >::type beta, MatrixC& c ) {
- return bindings::blas::syrk( alpha, a, beta, c );
- }
-};
-
-struct apply_complex {
- template< typename MatrixA, typename MatrixC >
- static inline typename bindings::blas::herk_impl< typename bindings::value_type<
- MatrixA >::type >::result_type
- herk( const typename bindings::remove_imaginary< typename bindings::value_type<
- MatrixA >::type >::type alpha, const MatrixA& a,
- const typename bindings::remove_imaginary< typename bindings::value_type<
- MatrixA >::type >::type beta, MatrixC& c ) {
- return bindings::blas::herk( alpha, a, beta, c );
- }
-};
-
 // Randomize a matrix
 template <typename M>
 void randomize(M& m) {
@@ -132,7 +108,6 @@
    typedef boost::numeric::ublas::matrix<value_type, boost::numeric::ublas::column_major> ref_matrix_type ;
    typedef typename bindings::remove_imaginary<value_type>::type real_type ;
    typedef typename ref_matrix_type::size_type size_type ;
- typedef typename boost::mpl::if_<boost::is_complex<value_type>, apply_complex, apply_real>::type apply_t;
 
    Syrk2(const M1& a,
         const ref_matrix_type& a_ref)
@@ -167,14 +142,14 @@
       c.assign( c_ref_ );
       //boost::numeric::bindings::blas::herk( 'U', 'N', alpha, a_, beta, c ) ;
       hermitian_adaptor<M, upper> hc( c );
- apply_t::herk( alpha, a_, beta, hc ) ;
+ boost::numeric::bindings::blas::herk( alpha, a_, beta, hc ) ;
       if ( norm_frobenius( upper_part( c - (beta*c_ref_ + alpha * prod( a_ref_, herm( a_ref_ ) ) ) ) )
> std::numeric_limits< real_type >::epsilon() * norm_frobenius( upper_part(c) ) ) return 255;
 
       c.assign( c_ref_ );
       hermitian_adaptor<M, upper> c_h( c );
       //boost::numeric::bindings::blas::herk( 'U', 'N', alpha, a_, beta, c_h ) ;
- apply_t::herk( alpha, a_, beta, c_h ) ;
+ boost::numeric::bindings::blas::herk( alpha, a_, beta, c_h ) ;
       if ( norm_frobenius( upper_part( c_h - (beta*c_ref_ + alpha * prod( a_ref_, herm( a_ref_ ) ) ) ) )
> std::numeric_limits< real_type >::epsilon() * norm_frobenius( upper_part(c_h) ) ) return 255;
 

Modified: sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level2/hbmv.qbk
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level2/hbmv.qbk (original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level2/hbmv.qbk 2010-07-28 18:32:45 EDT (Wed, 28 Jul 2010)
@@ -7,7 +7,12 @@
 [section hbmv]
 
 [heading Prototype]
-There is one prototype of `hbmv` available, please see below.
+There are two prototypes of `hbmv` available, please see below.
+``
+hbmv( const Scalar >, const MatrixA& a, const VectorViewX& x,
+ const Scalar >, VectorViewY& y );
+``
+
 ``
 hbmv( const Scalar alpha, const MatrixA& a, const VectorViewX& x,
         const Scalar beta, VectorViewY& y );
@@ -17,7 +22,7 @@
 [heading Description]
 
 `hbmv` (short for hermitian, banded, matrix-vector operation) provides a C++
-interface to BLAS routines CHBMV and ZHBMV.
+interface to BLAS routines SSBMV, DSBMV, CHBMV, and ZHBMV.
 `hbmv` performs the matrix-vector operation
 
 y := alpha*A*x + beta*y,
@@ -33,12 +38,14 @@
 
 [table Dispatching of hbmv.
 [ [ Value type of MatrixA ] [BLAS routine] [CBLAS routine] [CUBLAS routine] ]
+[ [`float`][SSBMV][cblas_ssbmv][cublasSsbmv] ]
+[ [`double`][DSBMV][cblas_dsbmv][Unavailable] ]
 [ [`complex<float>`][CHBMV][cblas_chbmv][cublasChbmv] ]
 [ [`complex<double>`][ZHBMV][cblas_zhbmv][Unavailable] ]
 
 ]
 
-The original routines CHBMV and ZHBMV have eleven arguments,
+The original routines SSBMV, DSBMV, CHBMV, and ZHBMV have eleven arguments,
 whereas `hbmv` requires five arguments.
 
 [table Deduction of arguments of hbmv.
@@ -80,6 +87,6 @@
 
 [heading See Also]
 
-* Originating Fortran source files [@http://www.netlib.org/blas/chbmv.f chbmv.f] and [@http://www.netlib.org/blas/zhbmv.f zhbmv.f] at Netlib.
+* Originating Fortran source files [@http://www.netlib.org/blas/ssbmv.f ssbmv.f], [@http://www.netlib.org/blas/dsbmv.f dsbmv.f], [@http://www.netlib.org/blas/chbmv.f chbmv.f], and [@http://www.netlib.org/blas/zhbmv.f zhbmv.f] at Netlib.
 
 [endsect]

Modified: sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level2/hemv.qbk
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level2/hemv.qbk (original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level2/hemv.qbk 2010-07-28 18:32:45 EDT (Wed, 28 Jul 2010)
@@ -7,7 +7,12 @@
 [section hemv]
 
 [heading Prototype]
-There is one prototype of `hemv` available, please see below.
+There are two prototypes of `hemv` available, please see below.
+``
+hemv( const Scalar >, const MatrixA& a, const VectorViewX& x,
+ const Scalar >, VectorViewY& y );
+``
+
 ``
 hemv( const Scalar alpha, const MatrixA& a, const VectorViewX& x,
         const Scalar beta, VectorViewY& y );
@@ -17,7 +22,7 @@
 [heading Description]
 
 `hemv` (short for hermitian matrix-vector operation) provides a C++
-interface to BLAS routines CHEMV and ZHEMV.
+interface to BLAS routines SSYMV, DSYMV, CHEMV, and ZHEMV.
 `hemv` performs the matrix-vector operation
 
 y := alpha*A*x + beta*y,
@@ -33,12 +38,14 @@
 
 [table Dispatching of hemv.
 [ [ Value type of MatrixA ] [BLAS routine] [CBLAS routine] [CUBLAS routine] ]
+[ [`float`][SSYMV][cblas_ssymv][cublasSsymv] ]
+[ [`double`][DSYMV][cblas_dsymv][Unavailable] ]
 [ [`complex<float>`][CHEMV][cblas_chemv][cublasChemv] ]
 [ [`complex<double>`][ZHEMV][cblas_zhemv][Unavailable] ]
 
 ]
 
-The original routines CHEMV and ZHEMV have ten arguments,
+The original routines SSYMV, DSYMV, CHEMV, and ZHEMV have ten arguments,
 whereas `hemv` requires five arguments.
 
 [table Deduction of arguments of hemv.
@@ -80,6 +87,6 @@
 
 [heading See Also]
 
-* Originating Fortran source files [@http://www.netlib.org/blas/chemv.f chemv.f] and [@http://www.netlib.org/blas/zhemv.f zhemv.f] at Netlib.
+* Originating Fortran source files [@http://www.netlib.org/blas/ssymv.f ssymv.f], [@http://www.netlib.org/blas/dsymv.f dsymv.f], [@http://www.netlib.org/blas/chemv.f chemv.f], and [@http://www.netlib.org/blas/zhemv.f zhemv.f] at Netlib.
 
 [endsect]

Modified: sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level2/her.qbk
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level2/her.qbk (original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level2/her.qbk 2010-07-28 18:32:45 EDT (Wed, 28 Jul 2010)
@@ -16,7 +16,7 @@
 [heading Description]
 
 `her` (short for hermitian rank-1 update) provides a C++
-interface to BLAS routines CHER and ZHER.
+interface to BLAS routines SSYR, DSYR, CHER, and ZHER.
 `her` performs the hermitian rank 1 operation
 
 A := alpha*x*conjg( x' ) + A,
@@ -32,12 +32,14 @@
 
 [table Dispatching of her.
 [ [ Value type of VectorViewX ] [BLAS routine] [CBLAS routine] [CUBLAS routine] ]
+[ [`float`][SSYR][cblas_ssyr][cublasSsyr] ]
+[ [`double`][DSYR][cblas_dsyr][cublasDsyr] ]
 [ [`complex<float>`][CHER][cblas_cher][cublasCher] ]
 [ [`complex<double>`][ZHER][cblas_zher][Unavailable] ]
 
 ]
 
-The original routines CHER and ZHER have seven arguments,
+The original routines SSYR, DSYR, CHER, and ZHER have seven arguments,
 whereas `her` requires three arguments.
 
 [table Deduction of arguments of her.
@@ -79,6 +81,6 @@
 
 [heading See Also]
 
-* Originating Fortran source files [@http://www.netlib.org/blas/cher.f cher.f] and [@http://www.netlib.org/blas/zher.f zher.f] at Netlib.
+* Originating Fortran source files [@http://www.netlib.org/blas/ssyr.f ssyr.f], [@http://www.netlib.org/blas/dsyr.f dsyr.f], [@http://www.netlib.org/blas/cher.f cher.f], and [@http://www.netlib.org/blas/zher.f zher.f] at Netlib.
 
 [endsect]

Modified: sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level2/her2.qbk
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level2/her2.qbk (original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level2/her2.qbk 2010-07-28 18:32:45 EDT (Wed, 28 Jul 2010)
@@ -7,7 +7,12 @@
 [section her2]
 
 [heading Prototype]
-There is one prototype of `her2` available, please see below.
+There are two prototypes of `her2` available, please see below.
+``
+her2( const Scalar >, const VectorViewX& x, const VectorViewY& y,
+ MatrixA& a );
+``
+
 ``
 her2( const Scalar alpha, const VectorViewX& x, const VectorViewY& y,
         MatrixA& a );
@@ -17,7 +22,7 @@
 [heading Description]
 
 `her2` (short for hermitian rank-2 update) provides a C++
-interface to BLAS routines CHER2 and ZHER2.
+interface to BLAS routines SSYR2, DSYR2, CHER2, and ZHER2.
 `her2` performs the hermitian rank 2 operation
 
 A := alpha*x*conjg( y' ) + conjg( alpha )*y*conjg( x' ) + A,
@@ -33,12 +38,14 @@
 
 [table Dispatching of her2.
 [ [ Value type of VectorViewX ] [BLAS routine] [CBLAS routine] [CUBLAS routine] ]
+[ [`float`][SSYR2][cblas_ssyr2][cublasSsyr2] ]
+[ [`double`][DSYR2][cblas_dsyr2][Unavailable] ]
 [ [`complex<float>`][CHER2][cblas_cher2][cublasCher2] ]
 [ [`complex<double>`][ZHER2][cblas_zher2][Unavailable] ]
 
 ]
 
-The original routines CHER2 and ZHER2 have nine arguments,
+The original routines SSYR2, DSYR2, CHER2, and ZHER2 have nine arguments,
 whereas `her2` requires four arguments.
 
 [table Deduction of arguments of her2.
@@ -80,6 +87,6 @@
 
 [heading See Also]
 
-* Originating Fortran source files [@http://www.netlib.org/blas/cher2.f cher2.f] and [@http://www.netlib.org/blas/zher2.f zher2.f] at Netlib.
+* Originating Fortran source files [@http://www.netlib.org/blas/ssyr2.f ssyr2.f], [@http://www.netlib.org/blas/dsyr2.f dsyr2.f], [@http://www.netlib.org/blas/cher2.f cher2.f], and [@http://www.netlib.org/blas/zher2.f zher2.f] at Netlib.
 
 [endsect]

Modified: sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level2/hpmv.qbk
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level2/hpmv.qbk (original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level2/hpmv.qbk 2010-07-28 18:32:45 EDT (Wed, 28 Jul 2010)
@@ -7,7 +7,12 @@
 [section hpmv]
 
 [heading Prototype]
-There is one prototype of `hpmv` available, please see below.
+There are two prototypes of `hpmv` available, please see below.
+``
+hpmv( const Scalar >, const MatrixAP& ap, const VectorViewX& x,
+ const Scalar >, VectorViewY& y );
+``
+
 ``
 hpmv( const Scalar alpha, const MatrixAP& ap, const VectorViewX& x,
         const Scalar beta, VectorViewY& y );
@@ -17,7 +22,7 @@
 [heading Description]
 
 `hpmv` (short for hermitian, packed, matrix-vector operation) provides a C++
-interface to BLAS routines CHPMV and ZHPMV.
+interface to BLAS routines SSPMV, DSPMV, CHPMV, and ZHPMV.
 `hpmv` performs the matrix-vector operation
 
 y := alpha*A*x + beta*y,
@@ -33,12 +38,14 @@
 
 [table Dispatching of hpmv.
 [ [ Value type of MatrixAP ] [BLAS routine] [CBLAS routine] [CUBLAS routine] ]
+[ [`float`][SSPMV][cblas_sspmv][cublasSspmv] ]
+[ [`double`][DSPMV][cblas_dspmv][Unavailable] ]
 [ [`complex<float>`][CHPMV][cblas_chpmv][cublasChpmv] ]
 [ [`complex<double>`][ZHPMV][cblas_zhpmv][Unavailable] ]
 
 ]
 
-The original routines CHPMV and ZHPMV have nine arguments,
+The original routines SSPMV, DSPMV, CHPMV, and ZHPMV have nine arguments,
 whereas `hpmv` requires five arguments.
 
 [table Deduction of arguments of hpmv.
@@ -80,6 +87,6 @@
 
 [heading See Also]
 
-* Originating Fortran source files [@http://www.netlib.org/blas/chpmv.f chpmv.f] and [@http://www.netlib.org/blas/zhpmv.f zhpmv.f] at Netlib.
+* Originating Fortran source files [@http://www.netlib.org/blas/sspmv.f sspmv.f], [@http://www.netlib.org/blas/dspmv.f dspmv.f], [@http://www.netlib.org/blas/chpmv.f chpmv.f], and [@http://www.netlib.org/blas/zhpmv.f zhpmv.f] at Netlib.
 
 [endsect]

Modified: sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level2/hpr.qbk
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level2/hpr.qbk (original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level2/hpr.qbk 2010-07-28 18:32:45 EDT (Wed, 28 Jul 2010)
@@ -16,7 +16,7 @@
 [heading Description]
 
 `hpr` (short for hermitian, packed, rank-1 update) provides a C++
-interface to BLAS routines CHPR and ZHPR.
+interface to BLAS routines SSPR, DSPR, CHPR, and ZHPR.
 `hpr` performs the hermitian rank 1 operation
 
 A := alpha*x*conjg( x' ) + A,
@@ -32,12 +32,14 @@
 
 [table Dispatching of hpr.
 [ [ Value type of VectorViewX ] [BLAS routine] [CBLAS routine] [CUBLAS routine] ]
+[ [`float`][SSPR][cblas_sspr][cublasSspr] ]
+[ [`double`][DSPR][cblas_dspr][Unavailable] ]
 [ [`complex<float>`][CHPR][cblas_chpr][cublasChpr] ]
 [ [`complex<double>`][ZHPR][cblas_zhpr][Unavailable] ]
 
 ]
 
-The original routines CHPR and ZHPR have six arguments,
+The original routines SSPR, DSPR, CHPR, and ZHPR have six arguments,
 whereas `hpr` requires three arguments.
 
 [table Deduction of arguments of hpr.
@@ -79,6 +81,6 @@
 
 [heading See Also]
 
-* Originating Fortran source files [@http://www.netlib.org/blas/chpr.f chpr.f] and [@http://www.netlib.org/blas/zhpr.f zhpr.f] at Netlib.
+* Originating Fortran source files [@http://www.netlib.org/blas/sspr.f sspr.f], [@http://www.netlib.org/blas/dspr.f dspr.f], [@http://www.netlib.org/blas/chpr.f chpr.f], and [@http://www.netlib.org/blas/zhpr.f zhpr.f] at Netlib.
 
 [endsect]

Modified: sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level2/hpr2.qbk
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level2/hpr2.qbk (original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level2/hpr2.qbk 2010-07-28 18:32:45 EDT (Wed, 28 Jul 2010)
@@ -7,7 +7,12 @@
 [section hpr2]
 
 [heading Prototype]
-There is one prototype of `hpr2` available, please see below.
+There are two prototypes of `hpr2` available, please see below.
+``
+hpr2( const Scalar >, const VectorViewX& x, const VectorViewY& y,
+ MatrixAP& ap );
+``
+
 ``
 hpr2( const Scalar alpha, const VectorViewX& x, const VectorViewY& y,
         MatrixAP& ap );
@@ -17,7 +22,7 @@
 [heading Description]
 
 `hpr2` (short for hermitian, packed, rank-2 update) provides a C++
-interface to BLAS routines CHPR2 and ZHPR2.
+interface to BLAS routines SSPR2, DSPR2, CHPR2, and ZHPR2.
 `hpr2` performs the hermitian rank 2 operation
 
 A := alpha*x*conjg( y' ) + conjg( alpha )*y*conjg( x' ) + A,
@@ -33,12 +38,14 @@
 
 [table Dispatching of hpr2.
 [ [ Value type of VectorViewX ] [BLAS routine] [CBLAS routine] [CUBLAS routine] ]
+[ [`float`][SSPR2][cblas_sspr2][cublasSspr2] ]
+[ [`double`][DSPR2][cblas_dspr2][Unavailable] ]
 [ [`complex<float>`][CHPR2][cblas_chpr2][cublasChpr2] ]
 [ [`complex<double>`][ZHPR2][cblas_zhpr2][Unavailable] ]
 
 ]
 
-The original routines CHPR2 and ZHPR2 have eight arguments,
+The original routines SSPR2, DSPR2, CHPR2, and ZHPR2 have eight arguments,
 whereas `hpr2` requires four arguments.
 
 [table Deduction of arguments of hpr2.
@@ -80,6 +87,6 @@
 
 [heading See Also]
 
-* Originating Fortran source files [@http://www.netlib.org/blas/chpr2.f chpr2.f] and [@http://www.netlib.org/blas/zhpr2.f zhpr2.f] at Netlib.
+* Originating Fortran source files [@http://www.netlib.org/blas/sspr2.f sspr2.f], [@http://www.netlib.org/blas/dspr2.f dspr2.f], [@http://www.netlib.org/blas/chpr2.f chpr2.f], and [@http://www.netlib.org/blas/zhpr2.f zhpr2.f] at Netlib.
 
 [endsect]

Modified: sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level3/hemm.qbk
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level3/hemm.qbk (original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level3/hemm.qbk 2010-07-28 18:32:45 EDT (Wed, 28 Jul 2010)
@@ -7,7 +7,12 @@
 [section hemm]
 
 [heading Prototype]
-There is one prototype of `hemm` available, please see below.
+There are two prototypes of `hemm` available, please see below.
+``
+hemm( const Side side, const Scalar >, const MatrixA& a,
+ const MatrixB& b, const Scalar >, MatrixC& c );
+``
+
 ``
 hemm( const Side side, const Scalar alpha, const MatrixA& a,
         const MatrixB& b, const Scalar beta, MatrixC& c );
@@ -17,7 +22,7 @@
 [heading Description]
 
 `hemm` (short for hermitian matrix-matrix operation) provides a C++
-interface to BLAS routines CHEMM and ZHEMM.
+interface to BLAS routines SSYMM, DSYMM, CHEMM, and ZHEMM.
 `hemm` performs one of the matrix-matrix operations
 
 C := alpha*A*B + beta*C,
@@ -37,12 +42,14 @@
 
 [table Dispatching of hemm.
 [ [ Value type of MatrixA ] [BLAS routine] [CBLAS routine] [CUBLAS routine] ]
+[ [`float`][SSYMM][cblas_ssymm][cublasSsymm] ]
+[ [`double`][DSYMM][cblas_dsymm][cublasDsymm] ]
 [ [`complex<float>`][CHEMM][cblas_chemm][cublasChemm] ]
 [ [`complex<double>`][ZHEMM][cblas_zhemm][Unavailable] ]
 
 ]
 
-The original routines CHEMM and ZHEMM have twelve arguments,
+The original routines SSYMM, DSYMM, CHEMM, and ZHEMM have twelve arguments,
 whereas `hemm` requires six arguments.
 
 [table Deduction of arguments of hemm.
@@ -84,6 +91,6 @@
 
 [heading See Also]
 
-* Originating Fortran source files [@http://www.netlib.org/blas/chemm.f chemm.f] and [@http://www.netlib.org/blas/zhemm.f zhemm.f] at Netlib.
+* Originating Fortran source files [@http://www.netlib.org/blas/ssymm.f ssymm.f], [@http://www.netlib.org/blas/dsymm.f dsymm.f], [@http://www.netlib.org/blas/chemm.f chemm.f], and [@http://www.netlib.org/blas/zhemm.f zhemm.f] at Netlib.
 
 [endsect]

Modified: sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level3/her2k.qbk
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level3/her2k.qbk (original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level3/her2k.qbk 2010-07-28 18:32:45 EDT (Wed, 28 Jul 2010)
@@ -7,7 +7,12 @@
 [section her2k]
 
 [heading Prototype]
-There is one prototype of `her2k` available, please see below.
+There are two prototypes of `her2k` available, please see below.
+``
+her2k( const Scalar >, const MatrixA& a, const MatrixB& b,
+ const Scalar >, MatrixC& c );
+``
+
 ``
 her2k( const Scalar alpha, const MatrixA& a, const MatrixB& b,
         const Scalar >, MatrixC& c );
@@ -17,7 +22,7 @@
 [heading Description]
 
 `her2k` (short for hermitian rank-2k update) provides a C++
-interface to BLAS routines CHER2K and ZHER2K.
+interface to BLAS routines SSYR2K, DSYR2K, CHER2K, and ZHER2K.
 `her2k` performs one of the hermitian rank 2k operations
 
 C := alpha*A*conjg( B' ) + conjg( alpha )*B*conjg( A' ) + beta*C,
@@ -38,12 +43,14 @@
 
 [table Dispatching of her2k.
 [ [ Value type of MatrixA ] [BLAS routine] [CBLAS routine] [CUBLAS routine] ]
+[ [`float`][SSYR2K][cblas_ssyr2k][cublasSsyr2k] ]
+[ [`double`][DSYR2K][cblas_dsyr2k][cublasDsyr2k] ]
 [ [`complex<float>`][CHER2K][cblas_cher2k][cublasCher2k] ]
 [ [`complex<double>`][ZHER2K][cblas_zher2k][Unavailable] ]
 
 ]
 
-The original routines CHER2K and ZHER2K have twelve arguments,
+The original routines SSYR2K, DSYR2K, CHER2K, and ZHER2K have twelve arguments,
 whereas `her2k` requires five arguments.
 
 [table Deduction of arguments of her2k.
@@ -85,6 +92,6 @@
 
 [heading See Also]
 
-* Originating Fortran source files [@http://www.netlib.org/blas/cher2k.f cher2k.f] and [@http://www.netlib.org/blas/zher2k.f zher2k.f] at Netlib.
+* Originating Fortran source files [@http://www.netlib.org/blas/ssyr2k.f ssyr2k.f], [@http://www.netlib.org/blas/dsyr2k.f dsyr2k.f], [@http://www.netlib.org/blas/cher2k.f cher2k.f], and [@http://www.netlib.org/blas/zher2k.f zher2k.f] at Netlib.
 
 [endsect]

Modified: sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level3/herk.qbk
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level3/herk.qbk (original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/doc/blas/level3/herk.qbk 2010-07-28 18:32:45 EDT (Wed, 28 Jul 2010)
@@ -16,7 +16,7 @@
 [heading Description]
 
 `herk` (short for hermitian rank-k update) provides a C++
-interface to BLAS routines CHERK and ZHERK.
+interface to BLAS routines SSYRK, DSYRK, CHERK, and ZHERK.
 `herk` performs one of the hermitian rank k operations
 
 C := alpha*A*conjg( A' ) + beta*C,
@@ -37,12 +37,14 @@
 
 [table Dispatching of herk.
 [ [ Value type of MatrixA ] [BLAS routine] [CBLAS routine] [CUBLAS routine] ]
+[ [`float`][SSYRK][cblas_ssyrk][cublasSsyrk] ]
+[ [`double`][DSYRK][cblas_dsyrk][cublasDsyrk] ]
 [ [`complex<float>`][CHERK][cblas_cherk][cublasCherk] ]
 [ [`complex<double>`][ZHERK][cblas_zherk][Unavailable] ]
 
 ]
 
-The original routines CHERK and ZHERK have ten arguments,
+The original routines SSYRK, DSYRK, CHERK, and ZHERK have ten arguments,
 whereas `herk` requires four arguments.
 
 [table Deduction of arguments of herk.
@@ -84,6 +86,6 @@
 
 [heading See Also]
 
-* Originating Fortran source files [@http://www.netlib.org/blas/cherk.f cherk.f] and [@http://www.netlib.org/blas/zherk.f zherk.f] at Netlib.
+* Originating Fortran source files [@http://www.netlib.org/blas/ssyrk.f ssyrk.f], [@http://www.netlib.org/blas/dsyrk.f dsyrk.f], [@http://www.netlib.org/blas/cherk.f cherk.f], and [@http://www.netlib.org/blas/zherk.f zherk.f] at Netlib.
 
 [endsect]

Modified: sandbox/numeric_bindings/libs/numeric/bindings/tools/blas_generator.py
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/tools/blas_generator.py (original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/tools/blas_generator.py 2010-07-28 18:32:45 EDT (Wed, 28 Jul 2010)
@@ -37,6 +37,28 @@
               insert_at = i+1
       group_map[ subroutine_group_name ].insert( insert_at, subroutine_name )
 
+# add real symmetric or orthogonal matrices as special cases
+# of complex hermitian or unitary matrices.
+ real_as_complex_matrix = \
+ { 'OR' : 'UN',
+ 'OP' : 'UP',
+ 'SB' : 'HB',
+ 'SP' : 'HP',
+ 'SY' : 'HE' }
+ for subroutine_name in global_info_map.keys():
+ subroutine_group_name = global_info_map[ subroutine_name ][ 'group_name' ]
+ if global_info_map[ subroutine_name ][ 'value_type' ] == 'real' and \
+ subroutine_group_name[0:2] in real_as_complex_matrix:
+ complex_group_name = real_as_complex_matrix[ subroutine_group_name[0:2] ] + subroutine_group_name[2:]
+ if group_map.has_key( complex_group_name ):
+ insert_at = 0
+ for i in range( 0, len(group_map[ complex_group_name ]) ):
+ if bindings.subroutine_less( subroutine_name,
+ group_map[ complex_group_name ][ i ],
+ global_info_map ):
+ insert_at = i+1
+ group_map[ complex_group_name ].insert( insert_at, subroutine_name )
+
   return group_map
  
 #
@@ -67,8 +89,10 @@
       '#include <boost/assert.hpp>',
     ]
       
- if template_map.has_key( group_name.lower() + '.includes' ):
- includes += template_map[ group_name.lower() + '.includes' ].splitlines()
+ for subroutine in subroutines:
+ group_name_l = info_map[ subroutine ][ 'group_name' ].lower()
+ if template_map.has_key( group_name_l + '.includes' ):
+ includes += template_map[ group_name_l + '.includes' ].splitlines()
 
     #
     # LEVEL 0 HANDLING
@@ -77,6 +101,7 @@
     for select_backend in [ 'blas_overloads', 'cblas_overloads', 'cublas_overloads' ]:
       sub_overloads = ''
       for subroutine in subroutines:
+ group_name_l = info_map[ subroutine ][ 'group_name' ].lower()
 
         # stuff like float, complex<double>, etc.
         subroutine_value_type = documentation. \
@@ -149,7 +174,7 @@
         sub_template = sub_template.replace( '$groupname', group_name.lower() )
         sub_template = sub_template.replace( '$RESULT_TYPE', info_map[ subroutine ][ 'return_value_type' ] )
         sub_template = sub_template.replace( '$RETURN_STATEMENT', info_map[ subroutine ][ 'return_statement' ] )
- sub_template = bindings.search_replace( sub_template, group_name.lower() + '.level0.gsub', template_map )
+ sub_template = bindings.search_replace( sub_template, group_name_l + '.level0.gsub', template_map )
 
         sub_overloads += bindings.proper_indent( sub_template )
 
@@ -186,9 +211,16 @@
       level1_template = template_map[ 'blas_level1' ]
       level2_template = template_map[ 'blas_level2' ]
 
+ subroutine = case_map[ 'subroutines' ][ 0 ]
+ group_name_l = info_map[ subroutine ][ 'group_name' ].lower()
+
+ # take this subroutine for arguments etc.
+ # (last entry -> complex version if available, which can be important)
+ subroutine = subroutines[-1]
+
       # include templates come before anything else; they can hold any
       # $ID
- my_include_key = group_name.lower() + '.' + value_type + '.include_templates'
+ my_include_key = group_name_l + '.' + value_type + '.include_templates'
       if netlib.my_has_key( my_include_key, template_map ):
         include_template_list = template_map[ netlib.my_has_key( my_include_key, template_map ) ].strip().replace(' ','').split(",")
         include_templates = ''
@@ -360,7 +392,7 @@
       #level2_template = level2_template.replace( "$LEVEL2", ", ".join( level2_arg_list ) )
 
       if len(level1_type_arg_list)>0:
- my_key = group_name.lower() + '.' + value_type + '.first_typename'
+ my_key = group_name_l + '.' + value_type + '.first_typename'
         if netlib.my_has_key( my_key, template_map ):
             first_typename = template_map[ netlib.my_has_key( \
                 my_key, template_map ) ].strip()


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk