Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r51469 - in sandbox/numeric_bindings: boost/numeric/bindings/blas/level1 boost/numeric/bindings/blas/level2 boost/numeric/bindings/blas/level3 boost/numeric/bindings/lapack/computational boost/numeric/bindings/lapack/driver libs/numeric/bindings/tools libs/numeric/bindings/tools/templates
From: rutger_at_[hidden]
Date: 2009-02-27 08:13:15


Author: rutger
Date: 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
New Revision: 51469
URL: http://svn.boost.org/trac/boost/changeset/51469

Log:
Added initial support for static assert on value type types for both BLAS and LAPACK

Text files modified:
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/asum.hpp | 8 ++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/axpy.hpp | 15 +++-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/copy.hpp | 10 ++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/dot.hpp | 10 ++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/dotc.hpp | 10 ++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/dotu.hpp | 10 ++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/drot.hpp | 10 ++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/nrm2.hpp | 8 ++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rot.hpp | 14 +++-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rotg.hpp | 15 +++-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rotm.hpp | 16 ++++-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rotmg.hpp | 12 ++-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/scal.hpp | 11 ++-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/sdot.hpp | 12 +++-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/srot.hpp | 10 ++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/swap.hpp | 10 ++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gbmv.hpp | 22 +++++--
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gemv.hpp | 22 +++++--
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/ger.hpp | 14 +++-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gerc.hpp | 17 ++++-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/geru.hpp | 17 ++++-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hbmv.hpp | 22 +++++--
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hemv.hpp | 20 +++++-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her.hpp | 11 ++-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her2.hpp | 17 ++++-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpmv.hpp | 21 +++++-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr.hpp | 11 ++-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr2.hpp | 17 ++++-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/sbmv.hpp | 16 ++++-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spmv.hpp | 16 ++++-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr.hpp | 11 ++-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr2.hpp | 14 +++-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/symv.hpp | 19 ++++--
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr.hpp | 11 ++-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr2.hpp | 14 +++-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbmv.hpp | 12 +++-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbsv.hpp | 12 +++-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpmv.hpp | 11 ++-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpsv.hpp | 11 ++-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trmv.hpp | 11 ++-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trsv.hpp | 11 ++-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/gemm.hpp | 24 ++++++--
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/hemm.hpp | 22 +++++--
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/her2k.hpp | 21 +++++--
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/herk.hpp | 15 +++-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/symm.hpp | 22 +++++--
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syr2k.hpp | 22 +++++--
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syrk.hpp | 19 ++++--
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trmm.hpp | 17 +++--
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trsm.hpp | 17 +++--
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/bdsdc.hpp | 15 +++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/bdsqr.hpp | 24 ++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbbrd.hpp | 30 ++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbcon.hpp | 12 ++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbequ.hpp | 55 +++++++++++++++++--
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbrfs.hpp | 30 ++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbtrf.hpp | 4 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbtrs.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gebak.hpp | 47 +++++++++++++++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gebal.hpp | 39 +++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gebrd.hpp | 32 +++++++++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gecon.hpp | 5 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/geequ.hpp | 46 +++++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gehrd.hpp | 17 ++++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gelqf.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/geqlf.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/geqp3.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/geqrf.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gerfs.hpp | 30 ++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gerqf.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/getrf.hpp | 4 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/getri.hpp | 5 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/getrs.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggbak.hpp | 54 ++++++++++++++++++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggbal.hpp | 88 ++++++++++++++++++++++++++++++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gghrd.hpp | 12 +++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggqrf.hpp | 29 ++++++++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggrqf.hpp | 29 ++++++++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggsvp.hpp | 41 ++++++++++++--
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gtrfs.hpp | 60 +++++++++++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gttrs.hpp | 15 +++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hbgst.hpp | 13 +++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hbtrd.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hecon.hpp | 4 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hegst.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/herfs.hpp | 15 +++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetrd.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetrf.hpp | 4 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetri.hpp | 4 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetrs.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hgeqz.hpp | 37 ++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hprfs.hpp | 15 +++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hptrs.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hsein.hpp | 37 +++++++++++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hseqr.hpp | 19 ++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/labrd.hpp | 36 ++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/lacon.hpp | 5 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/laebz.hpp | 18 ++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/larz.hpp | 30 ++++------
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/latrd.hpp | 18 ++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/latrs.hpp | 49 ++++++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/latrz.hpp | 17 ++++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/opgtr.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/opmtr.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orgbr.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orghr.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orglq.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orgql.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orgqr.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orgrq.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orgtr.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormbr.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormhr.hpp | 13 +++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormlq.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormql.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormqr.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormrq.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormrz.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormtr.hpp | 13 +++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbcon.hpp | 12 ++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbequ.hpp | 46 ++++++++++++++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbrfs.hpp | 30 ++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbstf.hpp | 4 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbtrf.hpp | 4 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbtrs.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pocon.hpp | 12 ++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/poequ.hpp | 38 ++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/porfs.hpp | 30 ++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/potrf.hpp | 4 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/potri.hpp | 4 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/potrs.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pprfs.hpp | 30 ++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pptrs.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pteqr.hpp | 72 ++++++++++++++++++++++++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ptrfs.hpp | 43 ++++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pttrs.hpp | 13 +++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sbgst.hpp | 13 +++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sbtrd.hpp | 12 +++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sprfs.hpp | 30 ++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sptrs.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/stebz.hpp | 27 ++++++---
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/stedc.hpp | 12 +++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/stegr.hpp | 112 +++++++++++++++++++++++++++++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/stein.hpp | 111 ++++++++++++++++++++++++++++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/steqr.hpp | 72 ++++++++++++++++++++++++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sterf.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sycon.hpp | 5 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sygst.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/syrfs.hpp | 30 ++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytrd.hpp | 12 +++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytrf.hpp | 5 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytri.hpp | 5 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytrs.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tbcon.hpp | 5 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tbrfs.hpp | 24 ++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tbtrs.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgevc.hpp | 24 +++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgexc.hpp | 22 +++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgsen.hpp | 54 ++++++++++++++++--
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgsja.hpp | 54 +++++++++++++++---
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgsna.hpp | 33 +++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgsyl.hpp | 33 +++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tprfs.hpp | 24 ++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tptrs.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trcon.hpp | 18 +++--
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trevc.hpp | 18 +++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trexc.hpp | 10 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trrfs.hpp | 24 ++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trsen.hpp | 18 ++++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trsna.hpp | 27 ++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trsyl.hpp | 19 +++++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trtri.hpp | 4 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trtrs.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tzrzf.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ungbr.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unghr.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unglq.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ungql.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ungqr.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ungrq.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ungtr.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmbr.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmhr.hpp | 13 +++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmlq.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmql.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmqr.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmrq.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmrz.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmtr.hpp | 13 +++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/upgtr.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/upmtr.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/cgesv.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gbsv.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gbsvx.hpp | 42 ++++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gees.hpp | 19 ++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/geesx.hpp | 26 +++++++--
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/geev.hpp | 25 ++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/geevx.hpp | 54 +++++++++++++++---
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gegv.hpp | 37 ++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gels.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gelsd.hpp | 16 ++++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gelss.hpp | 14 ++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gelsy.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gesdd.hpp | 22 ++++++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gesv.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gesvd.hpp | 20 ++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gesvx.hpp | 47 +++++++++++++++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gges.hpp | 37 ++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ggesx.hpp | 46 +++++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ggev.hpp | 37 ++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ggevx.hpp | 67 +++++++++++++++++++++--
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ggglm.hpp | 27 +++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gglse.hpp | 27 +++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ggsvd.hpp | 36 ++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gtsv.hpp | 12 +++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gtsvx.hpp | 60 +++++++++++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbev.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbevd.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbevx.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbgv.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbgvd.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbgvx.hpp | 12 +++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heev.hpp | 4 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heevd.hpp | 4 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heevr.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heevx.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hegv.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hegvd.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hegvx.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hesv.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hesvx.hpp | 15 +++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpev.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpevd.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpevx.hpp | 18 +++--
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpgv.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpgvd.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpgvx.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpsv.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpsvx.hpp | 15 +++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/lacgv.hpp | 4 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/lalsd.hpp | 16 ++++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/largv.hpp | 44 +++++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/pbsv.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/pbsvx.hpp | 41 +++++++++++++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/posv.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/posvx.hpp | 36 ++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ppsv.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ppsvx.hpp | 36 ++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ptsv.hpp | 45 +++++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ptsvx.hpp | 42 ++++++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbev.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbevd.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbevx.hpp | 12 +++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbgv.hpp | 12 +++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbgvd.hpp | 12 +++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbgvx.hpp | 15 +++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sgesv.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spev.hpp | 13 +++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spevd.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spevx.hpp | 21 +++++--
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spgv.hpp | 12 +++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spgvd.hpp | 12 +++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spgvx.hpp | 12 +++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spsv.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spsvx.hpp | 30 ++++++++++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/stev.hpp | 13 +++-
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/stevd.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/stevr.hpp | 12 +++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/stevx.hpp | 12 +++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syev.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syevd.hpp | 6 +
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syevr.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syevx.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sygv.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sygvd.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sygvx.hpp | 12 +++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sysv.hpp | 9 ++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sysvx.hpp | 30 ++++++++++
   sandbox/numeric_bindings/libs/numeric/bindings/tools/bindings.py | 2
   sandbox/numeric_bindings/libs/numeric/bindings/tools/blas_generator.py | 28 +++++++++
   sandbox/numeric_bindings/libs/numeric/bindings/tools/lapack_generator.py | 59 ++++++++++++++------
   sandbox/numeric_bindings/libs/numeric/bindings/tools/netlib.py | 22 +++++++
   sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/blas.hpp | 5 +
   sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/lapack.hpp | 6 +-
   284 files changed, 4414 insertions(+), 654 deletions(-)

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/asum.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/asum.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/asum.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -46,6 +48,7 @@
     // templated specialization
     template< typename VectorX >
     static return_type compute( VectorX& x ) {
+
         return detail::asum( traits::vector_size(x),
                 traits::vector_storage(x), traits::vector_stride(x) );
     }
@@ -53,12 +56,13 @@
 
 // template function to call asum
 template< typename VectorX >
-inline integer_t asum( VectorX& x ) {
+inline typename asum_impl< typename traits::vector_traits<
+ VectorX >::value_type >::return_type
+asum( VectorX& x ) {
     typedef typename traits::vector_traits< VectorX >::value_type value_type;
     return asum_impl< value_type >::compute( x );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/axpy.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/axpy.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/axpy.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -59,8 +61,10 @@
 
     // templated specialization
     template< typename VectorX, typename VectorY >
- static return_type compute( traits::complex_d const a, VectorX& x,
- VectorY& y ) {
+ static return_type compute( value_type const a, VectorX& x, VectorY& y ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::vector_traits<
+ VectorY >::value_type > );
         detail::axpy( traits::vector_size(x), a,
                 traits::vector_storage(x), traits::vector_stride(x),
                 traits::vector_storage(y), traits::vector_stride(y) );
@@ -69,13 +73,14 @@
 
 // template function to call axpy
 template< typename VectorX, typename VectorY >
-inline integer_t axpy( traits::complex_d const a, VectorX& x,
- VectorY& y ) {
+inline typename axpy_impl< typename traits::vector_traits<
+ VectorX >::value_type >::return_type
+axpy( typename traits::vector_traits< VectorX >::value_type const a,
+ VectorX& x, VectorY& y ) {
     typedef typename traits::vector_traits< VectorX >::value_type value_type;
     axpy_impl< value_type >::compute( a, x, y );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/copy.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/copy.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/copy.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -60,6 +62,9 @@
     // templated specialization
     template< typename VectorX, typename VectorY >
     static return_type compute( VectorX& x, VectorY& y ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::vector_traits<
+ VectorY >::value_type > );
         detail::copy( traits::vector_size(x), traits::vector_storage(x),
                 traits::vector_stride(x), traits::vector_storage(y),
                 traits::vector_stride(y) );
@@ -68,12 +73,13 @@
 
 // template function to call copy
 template< typename VectorX, typename VectorY >
-inline integer_t copy( VectorX& x, VectorY& y ) {
+inline typename copy_impl< typename traits::vector_traits<
+ VectorX >::value_type >::return_type
+copy( VectorX& x, VectorY& y ) {
     typedef typename traits::vector_traits< VectorX >::value_type value_type;
     copy_impl< value_type >::compute( x, y );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/dot.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/dot.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/dot.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -48,6 +50,9 @@
     // templated specialization
     template< typename VectorX, typename VectorY >
     static return_type compute( VectorX& x, VectorY& y ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::vector_traits<
+ VectorY >::value_type > );
         return detail::dot( traits::vector_size(x),
                 traits::vector_storage(x), traits::vector_stride(x),
                 traits::vector_storage(y), traits::vector_stride(y) );
@@ -56,12 +61,13 @@
 
 // template function to call dot
 template< typename VectorX, typename VectorY >
-inline integer_t dot( VectorX& x, VectorY& y ) {
+inline typename dot_impl< typename traits::vector_traits<
+ VectorX >::value_type >::return_type
+dot( VectorX& x, VectorY& y ) {
     typedef typename traits::vector_traits< VectorX >::value_type value_type;
     return dot_impl< value_type >::compute( x, y );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/dotc.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/dotc.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/dotc.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -52,6 +54,9 @@
     // templated specialization
     template< typename VectorX, typename VectorY >
     static return_type compute( VectorX& x, VectorY& y ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::vector_traits<
+ VectorY >::value_type > );
         return detail::dotc( traits::vector_size(x),
                 traits::vector_storage(x), traits::vector_stride(x),
                 traits::vector_storage(y), traits::vector_stride(y) );
@@ -60,12 +65,13 @@
 
 // template function to call dotc
 template< typename VectorX, typename VectorY >
-inline integer_t dotc( VectorX& x, VectorY& y ) {
+inline typename dotc_impl< typename traits::vector_traits<
+ VectorX >::value_type >::return_type
+dotc( VectorX& x, VectorY& y ) {
     typedef typename traits::vector_traits< VectorX >::value_type value_type;
     return dotc_impl< value_type >::compute( x, y );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/dotu.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/dotu.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/dotu.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -52,6 +54,9 @@
     // templated specialization
     template< typename VectorX, typename VectorY >
     static return_type compute( VectorX& x, VectorY& y ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::vector_traits<
+ VectorY >::value_type > );
         return detail::dotu( traits::vector_size(x),
                 traits::vector_storage(x), traits::vector_stride(x),
                 traits::vector_storage(y), traits::vector_stride(y) );
@@ -60,12 +65,13 @@
 
 // template function to call dotu
 template< typename VectorX, typename VectorY >
-inline integer_t dotu( VectorX& x, VectorY& y ) {
+inline typename dotu_impl< typename traits::vector_traits<
+ VectorX >::value_type >::return_type
+dotu( VectorX& x, VectorY& y ) {
     typedef typename traits::vector_traits< VectorX >::value_type value_type;
     return dotu_impl< value_type >::compute( x, y );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/drot.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/drot.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/drot.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -47,6 +49,9 @@
     template< typename VectorCX, typename VectorCY >
     static return_type compute( integer_t const n, VectorCX& cx, VectorCY& cy,
             real_type const c, real_type const s ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorCX >::value_type, typename traits::vector_traits<
+ VectorCY >::value_type > );
         detail::drot( n, traits::vector_storage(cx),
                 traits::vector_stride(cx), traits::vector_storage(cy),
                 traits::vector_stride(cy), c, s );
@@ -55,14 +60,15 @@
 
 // template function to call drot
 template< typename VectorCX, typename VectorCY >
-inline integer_t drot( integer_t const n, VectorCX& cx, VectorCY& cy,
+inline typename drot_impl< typename traits::vector_traits<
+ VectorCX >::value_type >::return_type
+drot( integer_t const n, VectorCX& cx, VectorCY& cy,
         typename traits::vector_traits< VectorCX >::value_type const c,
         typename traits::vector_traits< VectorCX >::value_type const s ) {
     typedef typename traits::vector_traits< VectorCX >::value_type value_type;
     drot_impl< value_type >::compute( n, cx, cy, c, s );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/nrm2.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/nrm2.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/nrm2.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -46,6 +48,7 @@
     // templated specialization
     template< typename VectorX >
     static return_type compute( VectorX& x ) {
+
         return detail::nrm2( traits::vector_size(x),
                 traits::vector_storage(x), traits::vector_stride(x) );
     }
@@ -53,12 +56,13 @@
 
 // template function to call nrm2
 template< typename VectorX >
-inline integer_t nrm2( VectorX& x ) {
+inline typename nrm2_impl< typename traits::vector_traits<
+ VectorX >::value_type >::return_type
+nrm2( VectorX& x ) {
     typedef typename traits::vector_traits< VectorX >::value_type value_type;
     return nrm2_impl< value_type >::compute( x );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rot.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rot.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rot.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -49,6 +51,9 @@
     template< typename VectorX, typename VectorY >
     static return_type compute( VectorX& x, VectorY& y, real_type const c,
             real_type const s ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::vector_traits<
+ VectorY >::value_type > );
         detail::rot( traits::vector_size(x), traits::vector_storage(x),
                 traits::vector_stride(x), traits::vector_storage(y),
                 traits::vector_stride(y), c, s );
@@ -57,14 +62,15 @@
 
 // template function to call rot
 template< typename VectorX, typename VectorY >
-inline integer_t rot( VectorX& x, VectorY& y,
- typename traits::vector_traits< VectorX >::value_type const c,
- typename traits::vector_traits< VectorX >::value_type const s ) {
+inline typename rot_impl< typename traits::vector_traits<
+ VectorX >::value_type >::return_type
+rot( VectorX& x, VectorY& y, typename traits::vector_traits<
+ VectorX >::value_type const c, typename traits::vector_traits<
+ VectorX >::value_type const s ) {
     typedef typename traits::vector_traits< VectorX >::value_type value_type;
     rot_impl< value_type >::compute( x, y, c, s );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rotg.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rotg.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rotg.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -55,22 +57,25 @@
 
     // templated specialization
     template< >
- static return_type compute( traits::complex_d& a, traits::complex_d& b,
- real_type& c, traits::complex_d& s ) {
+ static return_type compute( value_type& a, value_type& b, real_type& c,
+ value_type& s ) {
+
         detail::rotg( a, b, c, s );
     }
 };
 
 // template function to call rotg
 template< >
-inline integer_t rotg( traits::complex_d& a, traits::complex_d& b,
+inline typename rotg_impl< typename traits::TODO_traits<
+ TODO >::value_type >::return_type
+rotg( typename traits::TODO_traits< TODO >::value_type& a,
+ typename traits::TODO_traits< TODO >::value_type& b,
         typename traits::TODO_traits< TODO >::value_type& c,
- traits::complex_d& s ) {
+ typename traits::TODO_traits< TODO >::value_type& s ) {
     typedef typename traits::TODO_traits< TODO >::value_type value_type;
     rotg_impl< value_type >::compute( a, b, c, s );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rotm.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rotm.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rotm.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -50,6 +52,12 @@
     static return_type compute( integer_t const n, VectorX& x,
             integer_t const incx, VectorY& y, integer_t const incy,
             VectorPARAM& param ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::vector_traits<
+ VectorY >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::vector_traits<
+ VectorPARAM >::value_type > );
         detail::rotm( n, traits::vector_storage(x), incx,
                 traits::vector_storage(y), incy,
                 traits::vector_storage(param) );
@@ -58,14 +66,14 @@
 
 // template function to call rotm
 template< typename VectorX, typename VectorY, typename VectorPARAM >
-inline integer_t rotm( integer_t const n, VectorX& x,
- integer_t const incx, VectorY& y, integer_t const incy,
- VectorPARAM& param ) {
+inline typename rotm_impl< typename traits::vector_traits<
+ VectorX >::value_type >::return_type
+rotm( integer_t const n, VectorX& x, integer_t const incx, VectorY& y,
+ integer_t const incy, VectorPARAM& param ) {
     typedef typename traits::vector_traits< VectorX >::value_type value_type;
     rotm_impl< value_type >::compute( n, x, incx, y, incy, param );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rotmg.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rotmg.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/rotmg.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -49,23 +51,25 @@
     template< typename VectorDPARAM >
     static return_type compute( real_type& d1, real_type& d2, real_type& x1,
             real_type const y1, VectorDPARAM& dparam ) {
+
         detail::rotmg( d1, d2, x1, y1, traits::vector_storage(dparam) );
     }
 };
 
 // template function to call rotmg
 template< typename VectorDPARAM >
-
- inline integer_t rotmg( typename traits::vector_traits< VectorDPARAM >::value_type& d1,
+inline typename rotmg_impl< typename traits::vector_traits<
+ VectorDPARAM >::value_type >::return_type
+rotmg( typename traits::vector_traits< VectorDPARAM >::value_type& d1,
         typename traits::vector_traits< VectorDPARAM >::value_type& d2,
         typename traits::vector_traits< VectorDPARAM >::value_type& x1,
         typename traits::vector_traits< VectorDPARAM >::value_type const y1,
         VectorDPARAM& dparam ) {
- typedef typename traits::vector_traits< VectorDPARAM >::value_type value_type;
+ typedef typename traits::vector_traits<
+ VectorDPARAM >::value_type value_type;
     rotmg_impl< value_type >::compute( d1, d2, x1, y1, dparam );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/scal.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/scal.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/scal.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -57,7 +59,8 @@
 
     // templated specialization
     template< typename VectorX >
- static return_type compute( traits::complex_d const a, VectorX& x ) {
+ static return_type compute( value_type const a, VectorX& x ) {
+
         detail::scal( traits::vector_size(x), a,
                 traits::vector_storage(x), traits::vector_stride(x) );
     }
@@ -65,12 +68,14 @@
 
 // template function to call scal
 template< typename VectorX >
-inline integer_t scal( traits::complex_d const a, VectorX& x ) {
+inline typename scal_impl< typename traits::vector_traits<
+ VectorX >::value_type >::return_type
+scal( typename traits::vector_traits< VectorX >::value_type const a,
+ VectorX& x ) {
     typedef typename traits::vector_traits< VectorX >::value_type value_type;
     scal_impl< value_type >::compute( a, x );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/sdot.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/sdot.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/sdot.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -45,6 +47,9 @@
     template< typename VectorSX, typename VectorSY >
     static return_type compute( integer_t const n, VectorSX& sx,
             integer_t const incx, VectorSY& sy, integer_t const incy ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorSX >::value_type, typename traits::vector_traits<
+ VectorSY >::value_type > );
         return detail::sdot( n, traits::vector_storage(sx), incx,
                 traits::vector_storage(sy), incy );
     }
@@ -52,13 +57,14 @@
 
 // template function to call sdot
 template< typename VectorSX, typename VectorSY >
-inline integer_t sdot( integer_t const n, VectorSX& sx,
- integer_t const incx, VectorSY& sy, integer_t const incy ) {
+inline typename sdot_impl< typename traits::vector_traits<
+ VectorSX >::value_type >::return_type
+sdot( integer_t const n, VectorSX& sx, integer_t const incx,
+ VectorSY& sy, integer_t const incy ) {
     typedef typename traits::vector_traits< VectorSX >::value_type value_type;
     return sdot_impl< value_type >::compute( n, sx, incx, sy, incy );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/srot.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/srot.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/srot.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -47,6 +49,9 @@
     template< typename VectorCX, typename VectorCY >
     static return_type compute( integer_t const n, VectorCX& cx, VectorCY& cy,
             real_type const c, real_type const s ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorCX >::value_type, typename traits::vector_traits<
+ VectorCY >::value_type > );
         detail::srot( n, traits::vector_storage(cx),
                 traits::vector_stride(cx), traits::vector_storage(cy),
                 traits::vector_stride(cy), c, s );
@@ -55,14 +60,15 @@
 
 // template function to call srot
 template< typename VectorCX, typename VectorCY >
-inline integer_t srot( integer_t const n, VectorCX& cx, VectorCY& cy,
+inline typename srot_impl< typename traits::vector_traits<
+ VectorCX >::value_type >::return_type
+srot( integer_t const n, VectorCX& cx, VectorCY& cy,
         typename traits::vector_traits< VectorCX >::value_type const c,
         typename traits::vector_traits< VectorCX >::value_type const s ) {
     typedef typename traits::vector_traits< VectorCX >::value_type value_type;
     srot_impl< value_type >::compute( n, cx, cy, c, s );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/swap.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/swap.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level1/swap.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -60,6 +62,9 @@
     // templated specialization
     template< typename VectorX, typename VectorY >
     static return_type compute( VectorX& x, VectorY& y ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::vector_traits<
+ VectorY >::value_type > );
         detail::swap( traits::vector_size(x), traits::vector_storage(x),
                 traits::vector_stride(x), traits::vector_storage(y),
                 traits::vector_stride(y) );
@@ -68,12 +73,13 @@
 
 // template function to call swap
 template< typename VectorX, typename VectorY >
-inline integer_t swap( VectorX& x, VectorY& y ) {
+inline typename swap_impl< typename traits::vector_traits<
+ VectorX >::value_type >::return_type
+swap( VectorX& x, VectorY& y ) {
     typedef typename traits::vector_traits< VectorX >::value_type value_type;
     swap_impl< value_type >::compute( x, y );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gbmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gbmv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gbmv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -74,8 +76,14 @@
     // templated specialization
     template< typename MatrixA, typename VectorX, typename VectorY >
     static return_type compute( char const trans, integer_t const kl,
- integer_t const ku, traits::complex_d const alpha, MatrixA& a,
- VectorX& x, traits::complex_d const beta, VectorY& y ) {
+ integer_t const ku, value_type const alpha, MatrixA& a,
+ VectorX& x, value_type const beta, VectorY& y ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorY >::value_type > );
         detail::gbmv( trans, traits::matrix_size1(a),
                 traits::matrix_size2(a), kl, ku, alpha,
                 traits::matrix_storage(a), traits::leading_dimension(a),
@@ -86,15 +94,17 @@
 
 // template function to call gbmv
 template< typename MatrixA, typename VectorX, typename VectorY >
-inline integer_t gbmv( char const trans, integer_t const kl,
- integer_t const ku, traits::complex_d const alpha, MatrixA& a,
- VectorX& x, traits::complex_d const beta, VectorY& y ) {
+inline typename gbmv_impl< typename traits::matrix_traits<
+ MatrixA >::value_type >::return_type
+gbmv( char const trans, integer_t const kl, integer_t const ku,
+ typename traits::matrix_traits< MatrixA >::value_type const alpha,
+ MatrixA& a, VectorX& x, typename traits::matrix_traits<
+ MatrixA >::value_type const beta, VectorY& y ) {
     typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
     gbmv_impl< value_type >::compute( trans, kl, ku, alpha, a, x, beta,
             y );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gemv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gemv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gemv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -71,9 +73,14 @@
 
     // templated specialization
     template< typename MatrixA, typename VectorX, typename VectorY >
- static return_type compute( char const trans,
- traits::complex_d const alpha, MatrixA& a, VectorX& x,
- traits::complex_d const beta, VectorY& y ) {
+ static return_type compute( char const trans, value_type const alpha,
+ MatrixA& a, VectorX& x, value_type const beta, VectorY& y ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorY >::value_type > );
         detail::gemv( trans, traits::matrix_size1(a),
                 traits::matrix_size2(a), alpha, traits::matrix_storage(a),
                 traits::leading_dimension(a), traits::vector_storage(x),
@@ -84,13 +91,16 @@
 
 // template function to call gemv
 template< typename MatrixA, typename VectorX, typename VectorY >
-inline integer_t gemv( char const trans, traits::complex_d const alpha,
- MatrixA& a, VectorX& x, traits::complex_d const beta, VectorY& y ) {
+inline typename gemv_impl< typename traits::matrix_traits<
+ MatrixA >::value_type >::return_type
+gemv( char const trans, typename traits::matrix_traits<
+ MatrixA >::value_type const alpha, MatrixA& a, VectorX& x,
+ typename traits::matrix_traits< MatrixA >::value_type const beta,
+ VectorY& y ) {
     typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
     gemv_impl< value_type >::compute( trans, alpha, a, x, beta, y );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/ger.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/ger.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/ger.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -51,6 +53,12 @@
     template< typename VectorX, typename VectorY, typename MatrixA >
     static return_type compute( real_type const alpha, VectorX& x, VectorY& y,
             MatrixA& a ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::vector_traits<
+ VectorY >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::matrix_traits<
+ MatrixA >::value_type > );
         detail::ger( traits::matrix_size1(a), traits::matrix_size2(a),
                 alpha, traits::vector_storage(x), traits::vector_stride(x),
                 traits::vector_storage(y), traits::vector_stride(y),
@@ -60,14 +68,14 @@
 
 // template function to call ger
 template< typename VectorX, typename VectorY, typename MatrixA >
-
- inline integer_t ger( typename traits::vector_traits< VectorX >::value_type const alpha,
+inline typename ger_impl< typename traits::vector_traits<
+ VectorX >::value_type >::return_type
+ger( typename traits::vector_traits< VectorX >::value_type const alpha,
         VectorX& x, VectorY& y, MatrixA& a ) {
     typedef typename traits::vector_traits< VectorX >::value_type value_type;
     ger_impl< value_type >::compute( alpha, x, y, a );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gerc.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gerc.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gerc.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -55,8 +57,14 @@
 
     // templated specialization
     template< typename VectorX, typename VectorY, typename MatrixA >
- static return_type compute( traits::complex_d const alpha, VectorX& x,
+ static return_type compute( value_type const alpha, VectorX& x,
             VectorY& y, MatrixA& a ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::vector_traits<
+ VectorY >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::matrix_traits<
+ MatrixA >::value_type > );
         detail::gerc( traits::matrix_size1(a), traits::matrix_size2(a),
                 alpha, traits::vector_storage(x), traits::vector_stride(x),
                 traits::vector_storage(y), traits::vector_stride(y),
@@ -66,13 +74,14 @@
 
 // template function to call gerc
 template< typename VectorX, typename VectorY, typename MatrixA >
-inline integer_t gerc( traits::complex_d const alpha, VectorX& x,
- VectorY& y, MatrixA& a ) {
+inline typename gerc_impl< typename traits::vector_traits<
+ VectorX >::value_type >::return_type
+gerc( typename traits::vector_traits< VectorX >::value_type const alpha,
+ VectorX& x, VectorY& y, MatrixA& a ) {
     typedef typename traits::vector_traits< VectorX >::value_type value_type;
     gerc_impl< value_type >::compute( alpha, x, y, a );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/geru.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/geru.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/geru.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -55,8 +57,14 @@
 
     // templated specialization
     template< typename VectorX, typename VectorY, typename MatrixA >
- static return_type compute( traits::complex_d const alpha, VectorX& x,
+ static return_type compute( value_type const alpha, VectorX& x,
             VectorY& y, MatrixA& a ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::vector_traits<
+ VectorY >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::matrix_traits<
+ MatrixA >::value_type > );
         detail::geru( traits::matrix_size1(a), traits::matrix_size2(a),
                 alpha, traits::vector_storage(x), traits::vector_stride(x),
                 traits::vector_storage(y), traits::vector_stride(y),
@@ -66,13 +74,14 @@
 
 // template function to call geru
 template< typename VectorX, typename VectorY, typename MatrixA >
-inline integer_t geru( traits::complex_d const alpha, VectorX& x,
- VectorY& y, MatrixA& a ) {
+inline typename geru_impl< typename traits::vector_traits<
+ VectorX >::value_type >::return_type
+geru( typename traits::vector_traits< VectorX >::value_type const alpha,
+ VectorX& x, VectorY& y, MatrixA& a ) {
     typedef typename traits::vector_traits< VectorX >::value_type value_type;
     geru_impl< value_type >::compute( alpha, x, y, a );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hbmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hbmv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hbmv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -57,9 +59,14 @@
 
     // templated specialization
     template< typename MatrixA, typename VectorX, typename VectorY >
- static return_type compute( integer_t const k,
- traits::complex_d const alpha, MatrixA& a, VectorX& x,
- traits::complex_d const beta, VectorY& y ) {
+ static return_type compute( integer_t const k, value_type const alpha,
+ MatrixA& a, VectorX& x, value_type const beta, VectorY& y ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorY >::value_type > );
         detail::hbmv( traits::matrix_uplo_tag(a),
                 traits::matrix_size2(a), k, alpha, traits::matrix_storage(a),
                 traits::leading_dimension(a), traits::vector_storage(x),
@@ -70,13 +77,16 @@
 
 // template function to call hbmv
 template< typename MatrixA, typename VectorX, typename VectorY >
-inline integer_t hbmv( integer_t const k, traits::complex_d const alpha,
- MatrixA& a, VectorX& x, traits::complex_d const beta, VectorY& y ) {
+inline typename hbmv_impl< typename traits::matrix_traits<
+ MatrixA >::value_type >::return_type
+hbmv( integer_t const k, typename traits::matrix_traits<
+ MatrixA >::value_type const alpha, MatrixA& a, VectorX& x,
+ typename traits::matrix_traits< MatrixA >::value_type const beta,
+ VectorY& y ) {
     typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
     hbmv_impl< value_type >::compute( k, alpha, a, x, beta, y );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hemv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hemv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hemv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -57,8 +59,14 @@
 
     // templated specialization
     template< typename MatrixA, typename VectorX, typename VectorY >
- static return_type compute( traits::complex_d const alpha, MatrixA& a,
- VectorX& x, traits::complex_d const beta, VectorY& y ) {
+ static return_type compute( value_type const alpha, MatrixA& a,
+ VectorX& x, value_type const beta, VectorY& y ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorY >::value_type > );
         detail::hemv( traits::matrix_uplo_tag(a),
                 traits::matrix_size2(a), alpha, traits::matrix_storage(a),
                 traits::leading_dimension(a), traits::vector_storage(x),
@@ -69,13 +77,15 @@
 
 // template function to call hemv
 template< typename MatrixA, typename VectorX, typename VectorY >
-inline integer_t hemv( traits::complex_d const alpha, MatrixA& a,
- VectorX& x, traits::complex_d const beta, VectorY& y ) {
+inline typename hemv_impl< typename traits::matrix_traits<
+ MatrixA >::value_type >::return_type
+hemv( typename traits::matrix_traits< MatrixA >::value_type const alpha,
+ MatrixA& a, VectorX& x, typename traits::matrix_traits<
+ MatrixA >::value_type const beta, VectorY& y ) {
     typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
     hemv_impl< value_type >::compute( alpha, a, x, beta, y );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -53,6 +55,9 @@
     template< typename VectorX, typename MatrixA >
     static return_type compute( real_type const alpha, VectorX& x,
             MatrixA& a ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::matrix_traits<
+ MatrixA >::value_type > );
         detail::her( traits::matrix_uplo_tag(a),
                 traits::matrix_size2(a), alpha, traits::vector_storage(x),
                 traits::vector_stride(x), traits::matrix_storage(a),
@@ -62,14 +67,14 @@
 
 // template function to call her
 template< typename VectorX, typename MatrixA >
-
- inline integer_t her( typename traits::vector_traits< VectorX >::value_type const alpha,
+inline typename her_impl< typename traits::vector_traits<
+ VectorX >::value_type >::return_type
+her( typename traits::vector_traits< VectorX >::value_type const alpha,
         VectorX& x, MatrixA& a ) {
     typedef typename traits::vector_traits< VectorX >::value_type value_type;
     her_impl< value_type >::compute( alpha, x, a );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her2.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her2.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her2.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -55,8 +57,14 @@
 
     // templated specialization
     template< typename VectorX, typename VectorY, typename MatrixA >
- static return_type compute( traits::complex_d const alpha, VectorX& x,
+ static return_type compute( value_type const alpha, VectorX& x,
             VectorY& y, MatrixA& a ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::vector_traits<
+ VectorY >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::matrix_traits<
+ MatrixA >::value_type > );
         detail::her2( traits::matrix_uplo_tag(a),
                 traits::matrix_size2(a), alpha, traits::vector_storage(x),
                 traits::vector_stride(x), traits::vector_storage(y),
@@ -67,13 +75,14 @@
 
 // template function to call her2
 template< typename VectorX, typename VectorY, typename MatrixA >
-inline integer_t her2( traits::complex_d const alpha, VectorX& x,
- VectorY& y, MatrixA& a ) {
+inline typename her2_impl< typename traits::vector_traits<
+ VectorX >::value_type >::return_type
+her2( typename traits::vector_traits< VectorX >::value_type const alpha,
+ VectorX& x, VectorY& y, MatrixA& a ) {
     typedef typename traits::vector_traits< VectorX >::value_type value_type;
     her2_impl< value_type >::compute( alpha, x, y, a );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpmv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpmv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -57,8 +59,14 @@
 
     // templated specialization
     template< typename MatrixAP, typename VectorX, typename VectorY >
- static return_type compute( traits::complex_d const alpha, MatrixAP& ap,
- VectorX& x, traits::complex_d const beta, VectorY& y ) {
+ static return_type compute( value_type const alpha, MatrixAP& ap,
+ VectorX& x, value_type const beta, VectorY& y ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::vector_traits<
+ VectorX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::vector_traits<
+ VectorY >::value_type > );
         detail::hpmv( traits::matrix_uplo_tag(ap),
                 traits::matrix_size2(ap), alpha, traits::matrix_storage(ap),
                 traits::vector_storage(x), traits::vector_stride(x), beta,
@@ -68,13 +76,16 @@
 
 // template function to call hpmv
 template< typename MatrixAP, typename VectorX, typename VectorY >
-inline integer_t hpmv( traits::complex_d const alpha, MatrixAP& ap,
- VectorX& x, traits::complex_d const beta, VectorY& y ) {
+inline typename hpmv_impl< typename traits::matrix_traits<
+ MatrixAP >::value_type >::return_type
+hpmv( typename traits::matrix_traits<
+ MatrixAP >::value_type const alpha, MatrixAP& ap, VectorX& x,
+ typename traits::matrix_traits< MatrixAP >::value_type const beta,
+ VectorY& y ) {
     typedef typename traits::matrix_traits< MatrixAP >::value_type value_type;
     hpmv_impl< value_type >::compute( alpha, ap, x, beta, y );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -53,6 +55,9 @@
     template< typename VectorX, typename MatrixAP >
     static return_type compute( real_type const alpha, VectorX& x,
             MatrixAP& ap ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::matrix_traits<
+ MatrixAP >::value_type > );
         detail::hpr( traits::matrix_uplo_tag(ap),
                 traits::matrix_size2(ap), alpha, traits::vector_storage(x),
                 traits::vector_stride(x), traits::matrix_storage(ap) );
@@ -61,14 +66,14 @@
 
 // template function to call hpr
 template< typename VectorX, typename MatrixAP >
-
- inline integer_t hpr( typename traits::vector_traits< VectorX >::value_type const alpha,
+inline typename hpr_impl< typename traits::vector_traits<
+ VectorX >::value_type >::return_type
+hpr( typename traits::vector_traits< VectorX >::value_type const alpha,
         VectorX& x, MatrixAP& ap ) {
     typedef typename traits::vector_traits< VectorX >::value_type value_type;
     hpr_impl< value_type >::compute( alpha, x, ap );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr2.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr2.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr2.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -55,8 +57,14 @@
 
     // templated specialization
     template< typename VectorX, typename VectorY, typename MatrixAP >
- static return_type compute( traits::complex_d const alpha, VectorX& x,
+ static return_type compute( value_type const alpha, VectorX& x,
             VectorY& y, MatrixAP& ap ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::vector_traits<
+ VectorY >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::matrix_traits<
+ MatrixAP >::value_type > );
         detail::hpr2( traits::matrix_uplo_tag(ap),
                 traits::matrix_size2(ap), alpha, traits::vector_storage(x),
                 traits::vector_stride(x), traits::vector_storage(y),
@@ -66,13 +74,14 @@
 
 // template function to call hpr2
 template< typename VectorX, typename VectorY, typename MatrixAP >
-inline integer_t hpr2( traits::complex_d const alpha, VectorX& x,
- VectorY& y, MatrixAP& ap ) {
+inline typename hpr2_impl< typename traits::vector_traits<
+ VectorX >::value_type >::return_type
+hpr2( typename traits::vector_traits< VectorX >::value_type const alpha,
+ VectorX& x, VectorY& y, MatrixAP& ap ) {
     typedef typename traits::vector_traits< VectorX >::value_type value_type;
     hpr2_impl< value_type >::compute( alpha, x, y, ap );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/sbmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/sbmv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/sbmv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -55,6 +57,12 @@
     template< typename MatrixA, typename VectorX, typename VectorY >
     static return_type compute( integer_t const k, real_type const alpha,
             MatrixA& a, VectorX& x, real_type const beta, VectorY& y ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorY >::value_type > );
         detail::sbmv( traits::matrix_uplo_tag(a),
                 traits::matrix_size2(a), k, alpha, traits::matrix_storage(a),
                 traits::leading_dimension(a), traits::vector_storage(x),
@@ -65,16 +73,16 @@
 
 // template function to call sbmv
 template< typename MatrixA, typename VectorX, typename VectorY >
-inline integer_t sbmv( integer_t const k,
- typename traits::matrix_traits< MatrixA >::value_type const alpha,
- MatrixA& a, VectorX& x,
+inline typename sbmv_impl< typename traits::matrix_traits<
+ MatrixA >::value_type >::return_type
+sbmv( integer_t const k, typename traits::matrix_traits<
+ MatrixA >::value_type const alpha, MatrixA& a, VectorX& x,
         typename traits::matrix_traits< MatrixA >::value_type const beta,
         VectorY& y ) {
     typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
     sbmv_impl< value_type >::compute( k, alpha, a, x, beta, y );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spmv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spmv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -51,6 +53,12 @@
     template< typename MatrixAP, typename VectorX, typename VectorY >
     static return_type compute( real_type const alpha, MatrixAP& ap,
             VectorX& x, real_type const beta, VectorY& y ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::vector_traits<
+ VectorX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::vector_traits<
+ VectorY >::value_type > );
         detail::spmv( traits::matrix_uplo_tag(ap),
                 traits::matrix_size2(ap), alpha, traits::matrix_storage(ap),
                 traits::vector_storage(x), traits::vector_stride(x), beta,
@@ -60,16 +68,16 @@
 
 // template function to call spmv
 template< typename MatrixAP, typename VectorX, typename VectorY >
-
- inline integer_t spmv( typename traits::matrix_traits< MatrixAP >::value_type const alpha,
- MatrixAP& ap, VectorX& x,
+inline typename spmv_impl< typename traits::matrix_traits<
+ MatrixAP >::value_type >::return_type
+spmv( typename traits::matrix_traits<
+ MatrixAP >::value_type const alpha, MatrixAP& ap, VectorX& x,
         typename traits::matrix_traits< MatrixAP >::value_type const beta,
         VectorY& y ) {
     typedef typename traits::matrix_traits< MatrixAP >::value_type value_type;
     spmv_impl< value_type >::compute( alpha, ap, x, beta, y );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -49,6 +51,9 @@
     template< typename VectorX, typename MatrixAP >
     static return_type compute( real_type const alpha, VectorX& x,
             MatrixAP& ap ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::matrix_traits<
+ MatrixAP >::value_type > );
         detail::spr( traits::matrix_uplo_tag(ap),
                 traits::matrix_size2(ap), alpha, traits::vector_storage(x),
                 traits::vector_stride(x), traits::matrix_storage(ap) );
@@ -57,14 +62,14 @@
 
 // template function to call spr
 template< typename VectorX, typename MatrixAP >
-
- inline integer_t spr( typename traits::vector_traits< VectorX >::value_type const alpha,
+inline typename spr_impl< typename traits::vector_traits<
+ VectorX >::value_type >::return_type
+spr( typename traits::vector_traits< VectorX >::value_type const alpha,
         VectorX& x, MatrixAP& ap ) {
     typedef typename traits::vector_traits< VectorX >::value_type value_type;
     spr_impl< value_type >::compute( alpha, x, ap );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr2.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr2.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr2.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -51,6 +53,12 @@
     template< typename VectorX, typename VectorY, typename MatrixAP >
     static return_type compute( real_type const alpha, VectorX& x, VectorY& y,
             MatrixAP& ap ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::vector_traits<
+ VectorY >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::matrix_traits<
+ MatrixAP >::value_type > );
         detail::spr2( traits::matrix_uplo_tag(ap),
                 traits::matrix_size2(ap), alpha, traits::vector_storage(x),
                 traits::vector_stride(x), traits::vector_storage(y),
@@ -60,14 +68,14 @@
 
 // template function to call spr2
 template< typename VectorX, typename VectorY, typename MatrixAP >
-
- inline integer_t spr2( typename traits::vector_traits< VectorX >::value_type const alpha,
+inline typename spr2_impl< typename traits::vector_traits<
+ VectorX >::value_type >::return_type
+spr2( typename traits::vector_traits< VectorX >::value_type const alpha,
         VectorX& x, VectorY& y, MatrixAP& ap ) {
     typedef typename traits::vector_traits< VectorX >::value_type value_type;
     spr2_impl< value_type >::compute( alpha, x, y, ap );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/symv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/symv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/symv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -51,6 +53,12 @@
     template< typename MatrixA, typename VectorX, typename VectorY >
     static return_type compute( real_type const alpha, MatrixA& a, VectorX& x,
             real_type const beta, VectorY& y ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorY >::value_type > );
         detail::symv( traits::matrix_uplo_tag(a),
                 traits::matrix_size2(a), alpha, traits::matrix_storage(a),
                 traits::leading_dimension(a), traits::vector_storage(x),
@@ -61,16 +69,15 @@
 
 // template function to call symv
 template< typename MatrixA, typename VectorX, typename VectorY >
-
- inline integer_t symv( typename traits::matrix_traits< MatrixA >::value_type const alpha,
- MatrixA& a, VectorX& x,
- typename traits::matrix_traits< MatrixA >::value_type const beta,
- VectorY& y ) {
+inline typename symv_impl< typename traits::matrix_traits<
+ MatrixA >::value_type >::return_type
+symv( typename traits::matrix_traits< MatrixA >::value_type const alpha,
+ MatrixA& a, VectorX& x, typename traits::matrix_traits<
+ MatrixA >::value_type const beta, VectorY& y ) {
     typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
     symv_impl< value_type >::compute( alpha, a, x, beta, y );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -49,6 +51,9 @@
     template< typename VectorX, typename MatrixA >
     static return_type compute( real_type const alpha, VectorX& x,
             MatrixA& a ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::matrix_traits<
+ MatrixA >::value_type > );
         detail::syr( traits::matrix_uplo_tag(a),
                 traits::matrix_size2(a), alpha, traits::vector_storage(x),
                 traits::vector_stride(x), traits::matrix_storage(a),
@@ -58,14 +63,14 @@
 
 // template function to call syr
 template< typename VectorX, typename MatrixA >
-
- inline integer_t syr( typename traits::vector_traits< VectorX >::value_type const alpha,
+inline typename syr_impl< typename traits::vector_traits<
+ VectorX >::value_type >::return_type
+syr( typename traits::vector_traits< VectorX >::value_type const alpha,
         VectorX& x, MatrixA& a ) {
     typedef typename traits::vector_traits< VectorX >::value_type value_type;
     syr_impl< value_type >::compute( alpha, x, a );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr2.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr2.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr2.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -51,6 +53,12 @@
     template< typename VectorX, typename VectorY, typename MatrixA >
     static return_type compute( real_type const alpha, VectorX& x, VectorY& y,
             MatrixA& a ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::vector_traits<
+ VectorY >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::matrix_traits<
+ MatrixA >::value_type > );
         detail::syr2( traits::matrix_uplo_tag(a),
                 traits::matrix_size2(a), alpha, traits::vector_storage(x),
                 traits::vector_stride(x), traits::vector_storage(y),
@@ -61,14 +69,14 @@
 
 // template function to call syr2
 template< typename VectorX, typename VectorY, typename MatrixA >
-
- inline integer_t syr2( typename traits::vector_traits< VectorX >::value_type const alpha,
+inline typename syr2_impl< typename traits::vector_traits<
+ VectorX >::value_type >::return_type
+syr2( typename traits::vector_traits< VectorX >::value_type const alpha,
         VectorX& x, VectorY& y, MatrixA& a ) {
     typedef typename traits::vector_traits< VectorX >::value_type value_type;
     syr2_impl< value_type >::compute( alpha, x, y, a );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbmv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbmv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -63,6 +65,9 @@
     template< typename MatrixA, typename VectorX >
     static return_type compute( char const trans, char const diag,
             integer_t const k, MatrixA& a, VectorX& x ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorX >::value_type > );
         detail::tbmv( traits::matrix_uplo_tag(a), trans, diag,
                 traits::matrix_size2(a), k, traits::matrix_storage(a),
                 traits::leading_dimension(a), traits::vector_storage(x),
@@ -72,13 +77,14 @@
 
 // template function to call tbmv
 template< typename MatrixA, typename VectorX >
-inline integer_t tbmv( char const trans, char const diag,
- integer_t const k, MatrixA& a, VectorX& x ) {
+inline typename tbmv_impl< typename traits::matrix_traits<
+ MatrixA >::value_type >::return_type
+tbmv( char const trans, char const diag, integer_t const k, MatrixA& a,
+ VectorX& x ) {
     typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
     tbmv_impl< value_type >::compute( trans, diag, k, a, x );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbsv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbsv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbsv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -63,6 +65,9 @@
     template< typename MatrixA, typename VectorX >
     static return_type compute( char const trans, char const diag,
             integer_t const k, MatrixA& a, VectorX& x ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorX >::value_type > );
         detail::tbsv( traits::matrix_uplo_tag(a), trans, diag,
                 traits::matrix_size2(a), k, traits::matrix_storage(a),
                 traits::leading_dimension(a), traits::vector_storage(x),
@@ -72,13 +77,14 @@
 
 // template function to call tbsv
 template< typename MatrixA, typename VectorX >
-inline integer_t tbsv( char const trans, char const diag,
- integer_t const k, MatrixA& a, VectorX& x ) {
+inline typename tbsv_impl< typename traits::matrix_traits<
+ MatrixA >::value_type >::return_type
+tbsv( char const trans, char const diag, integer_t const k, MatrixA& a,
+ VectorX& x ) {
     typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
     tbsv_impl< value_type >::compute( trans, diag, k, a, x );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpmv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpmv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -61,6 +63,9 @@
     template< typename MatrixAP, typename VectorX >
     static return_type compute( char const trans, char const diag,
             MatrixAP& ap, VectorX& x ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::vector_traits<
+ VectorX >::value_type > );
         detail::tpmv( traits::matrix_uplo_tag(ap), trans, diag,
                 traits::matrix_size2(ap), traits::matrix_storage(ap),
                 traits::vector_storage(x), traits::vector_stride(x) );
@@ -69,13 +74,13 @@
 
 // template function to call tpmv
 template< typename MatrixAP, typename VectorX >
-inline integer_t tpmv( char const trans, char const diag, MatrixAP& ap,
- VectorX& x ) {
+inline typename tpmv_impl< typename traits::matrix_traits<
+ MatrixAP >::value_type >::return_type
+tpmv( char const trans, char const diag, MatrixAP& ap, VectorX& x ) {
     typedef typename traits::matrix_traits< MatrixAP >::value_type value_type;
     tpmv_impl< value_type >::compute( trans, diag, ap, x );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpsv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpsv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpsv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -61,6 +63,9 @@
     template< typename MatrixAP, typename VectorX >
     static return_type compute( char const trans, char const diag,
             MatrixAP& ap, VectorX& x ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::vector_traits<
+ VectorX >::value_type > );
         detail::tpsv( traits::matrix_uplo_tag(ap), trans, diag,
                 traits::matrix_size2(ap), traits::matrix_storage(ap),
                 traits::vector_storage(x), traits::vector_stride(x) );
@@ -69,13 +74,13 @@
 
 // template function to call tpsv
 template< typename MatrixAP, typename VectorX >
-inline integer_t tpsv( char const trans, char const diag, MatrixAP& ap,
- VectorX& x ) {
+inline typename tpsv_impl< typename traits::matrix_traits<
+ MatrixAP >::value_type >::return_type
+tpsv( char const trans, char const diag, MatrixAP& ap, VectorX& x ) {
     typedef typename traits::matrix_traits< MatrixAP >::value_type value_type;
     tpsv_impl< value_type >::compute( trans, diag, ap, x );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trmv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trmv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -63,6 +65,9 @@
     template< typename MatrixA, typename VectorX >
     static return_type compute( char const trans, char const diag, MatrixA& a,
             VectorX& x ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorX >::value_type > );
         detail::trmv( traits::matrix_uplo_tag(a), trans, diag,
                 traits::matrix_size2(a), traits::matrix_storage(a),
                 traits::leading_dimension(a), traits::vector_storage(x),
@@ -72,13 +77,13 @@
 
 // template function to call trmv
 template< typename MatrixA, typename VectorX >
-inline integer_t trmv( char const trans, char const diag, MatrixA& a,
- VectorX& x ) {
+inline typename trmv_impl< typename traits::matrix_traits<
+ MatrixA >::value_type >::return_type
+trmv( char const trans, char const diag, MatrixA& a, VectorX& x ) {
     typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
     trmv_impl< value_type >::compute( trans, diag, a, x );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trsv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trsv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trsv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -63,6 +65,9 @@
     template< typename MatrixA, typename VectorX >
     static return_type compute( char const trans, char const diag, MatrixA& a,
             VectorX& x ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorX >::value_type > );
         detail::trsv( traits::matrix_uplo_tag(a), trans, diag,
                 traits::matrix_size2(a), traits::matrix_storage(a),
                 traits::leading_dimension(a), traits::vector_storage(x),
@@ -72,13 +77,13 @@
 
 // template function to call trsv
 template< typename MatrixA, typename VectorX >
-inline integer_t trsv( char const trans, char const diag, MatrixA& a,
- VectorX& x ) {
+inline typename trsv_impl< typename traits::matrix_traits<
+ MatrixA >::value_type >::return_type
+trsv( char const trans, char const diag, MatrixA& a, VectorX& x ) {
     typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
     trsv_impl< value_type >::compute( trans, diag, a, x );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/gemm.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/gemm.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/gemm.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -74,9 +76,14 @@
     // templated specialization
     template< typename MatrixA, typename MatrixB, typename MatrixC >
     static return_type compute( char const transa, char const transb,
- integer_t const m, integer_t const k,
- traits::complex_d const alpha, MatrixA& a, MatrixB& b,
- traits::complex_d const beta, MatrixC& c ) {
+ integer_t const m, integer_t const k, value_type const alpha,
+ MatrixA& a, MatrixB& b, value_type const beta, MatrixC& c ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
         detail::gemm( transa, transb, m, traits::matrix_size2(c), k,
                 alpha, traits::matrix_storage(a),
                 traits::leading_dimension(a), traits::matrix_storage(b),
@@ -87,15 +94,18 @@
 
 // template function to call gemm
 template< typename MatrixA, typename MatrixB, typename MatrixC >
-inline integer_t gemm( char const transa, char const transb,
- integer_t const m, integer_t const k, traits::complex_d const alpha,
- MatrixA& a, MatrixB& b, traits::complex_d const beta, MatrixC& c ) {
+inline typename gemm_impl< typename traits::matrix_traits<
+ MatrixA >::value_type >::return_type
+gemm( char const transa, char const transb, integer_t const m,
+ integer_t const k, typename traits::matrix_traits<
+ MatrixA >::value_type const alpha, MatrixA& a, MatrixB& b,
+ typename traits::matrix_traits< MatrixA >::value_type const beta,
+ MatrixC& c ) {
     typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
     gemm_impl< value_type >::compute( transa, transb, m, k, alpha, a, b,
             beta, c );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/hemm.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/hemm.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/hemm.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -57,9 +59,14 @@
 
     // templated specialization
     template< typename MatrixA, typename MatrixB, typename MatrixC >
- static return_type compute( char const side,
- traits::complex_d const alpha, MatrixA& a, MatrixB& b,
- traits::complex_d const beta, MatrixC& c ) {
+ static return_type compute( char const side, value_type const alpha,
+ MatrixA& a, MatrixB& b, value_type const beta, MatrixC& c ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
         detail::hemm( side, traits::matrix_uplo_tag(a),
                 traits::matrix_size1(c), traits::matrix_size2(c), alpha,
                 traits::matrix_storage(a), traits::leading_dimension(a),
@@ -70,13 +77,16 @@
 
 // template function to call hemm
 template< typename MatrixA, typename MatrixB, typename MatrixC >
-inline integer_t hemm( char const side, traits::complex_d const alpha,
- MatrixA& a, MatrixB& b, traits::complex_d const beta, MatrixC& c ) {
+inline typename hemm_impl< typename traits::matrix_traits<
+ MatrixA >::value_type >::return_type
+hemm( char const side, typename traits::matrix_traits<
+ MatrixA >::value_type const alpha, MatrixA& a, MatrixB& b,
+ typename traits::matrix_traits< MatrixA >::value_type const beta,
+ MatrixC& c ) {
     typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
     hemm_impl< value_type >::compute( side, alpha, a, b, beta, c );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/her2k.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/her2k.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/her2k.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -58,8 +60,14 @@
     // templated specialization
     template< typename MatrixA, typename MatrixB, typename MatrixC >
     static return_type compute( char const trans, integer_t const k,
- traits::complex_d const alpha, MatrixA& a, MatrixB& b,
+ value_type const alpha, MatrixA& a, MatrixB& b,
             real_type const beta, MatrixC& c ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
         detail::her2k( traits::matrix_uplo_tag(c), trans,
                 traits::matrix_size2(c), k, alpha, traits::matrix_storage(a),
                 traits::leading_dimension(a), traits::matrix_storage(b),
@@ -70,15 +78,16 @@
 
 // template function to call her2k
 template< typename MatrixA, typename MatrixB, typename MatrixC >
-inline integer_t her2k( char const trans, integer_t const k,
- traits::complex_d const alpha, MatrixA& a, MatrixB& b,
- typename traits::matrix_traits< MatrixA >::value_type const beta,
- MatrixC& c ) {
+inline typename her2k_impl< typename traits::matrix_traits<
+ MatrixA >::value_type >::return_type
+her2k( char const trans, integer_t const k,
+ typename traits::matrix_traits< MatrixA >::value_type const alpha,
+ MatrixA& a, MatrixB& b, typename traits::matrix_traits<
+ MatrixA >::value_type const beta, MatrixC& c ) {
     typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
     her2k_impl< value_type >::compute( trans, k, alpha, a, b, beta, c );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/herk.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/herk.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/herk.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -56,6 +58,9 @@
     static return_type compute( char const trans, integer_t const k,
             real_type const alpha, MatrixA& a, real_type const beta,
             MatrixC& c ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
         detail::herk( traits::matrix_uplo_tag(c), trans,
                 traits::matrix_size2(c), k, alpha, traits::matrix_storage(a),
                 traits::leading_dimension(a), beta, traits::matrix_storage(c),
@@ -65,16 +70,16 @@
 
 // template function to call herk
 template< typename MatrixA, typename MatrixC >
-inline integer_t herk( char const trans, integer_t const k,
+inline typename herk_impl< typename traits::matrix_traits<
+ MatrixA >::value_type >::return_type
+herk( char const trans, integer_t const k,
         typename traits::matrix_traits< MatrixA >::value_type const alpha,
- MatrixA& a,
- typename traits::matrix_traits< MatrixA >::value_type const beta,
- MatrixC& c ) {
+ MatrixA& a, typename traits::matrix_traits<
+ MatrixA >::value_type const beta, MatrixC& c ) {
     typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
     herk_impl< value_type >::compute( trans, k, alpha, a, beta, c );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/symm.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/symm.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/symm.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -71,9 +73,14 @@
 
     // templated specialization
     template< typename MatrixA, typename MatrixB, typename MatrixC >
- static return_type compute( char const side,
- traits::complex_d const alpha, MatrixA& a, MatrixB& b,
- traits::complex_d const beta, MatrixC& c ) {
+ static return_type compute( char const side, value_type const alpha,
+ MatrixA& a, MatrixB& b, value_type const beta, MatrixC& c ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
         detail::symm( side, traits::matrix_uplo_tag(a),
                 traits::matrix_size1(c), traits::matrix_size2(c), alpha,
                 traits::matrix_storage(a), traits::leading_dimension(a),
@@ -84,13 +91,16 @@
 
 // template function to call symm
 template< typename MatrixA, typename MatrixB, typename MatrixC >
-inline integer_t symm( char const side, traits::complex_d const alpha,
- MatrixA& a, MatrixB& b, traits::complex_d const beta, MatrixC& c ) {
+inline typename symm_impl< typename traits::matrix_traits<
+ MatrixA >::value_type >::return_type
+symm( char const side, typename traits::matrix_traits<
+ MatrixA >::value_type const alpha, MatrixA& a, MatrixB& b,
+ typename traits::matrix_traits< MatrixA >::value_type const beta,
+ MatrixC& c ) {
     typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
     symm_impl< value_type >::compute( side, alpha, a, b, beta, c );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syr2k.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syr2k.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syr2k.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -72,8 +74,14 @@
     // templated specialization
     template< typename MatrixA, typename MatrixB, typename MatrixC >
     static return_type compute( char const trans, integer_t const k,
- traits::complex_d const alpha, MatrixA& a, MatrixB& b,
- traits::complex_d const beta, MatrixC& c ) {
+ value_type const alpha, MatrixA& a, MatrixB& b,
+ value_type const beta, MatrixC& c ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
         detail::syr2k( traits::matrix_uplo_tag(c), trans,
                 traits::matrix_size2(c), k, alpha, traits::matrix_storage(a),
                 traits::leading_dimension(a), traits::matrix_storage(b),
@@ -84,14 +92,16 @@
 
 // template function to call syr2k
 template< typename MatrixA, typename MatrixB, typename MatrixC >
-inline integer_t syr2k( char const trans, integer_t const k,
- traits::complex_d const alpha, MatrixA& a, MatrixB& b,
- traits::complex_d const beta, MatrixC& c ) {
+inline typename syr2k_impl< typename traits::matrix_traits<
+ MatrixA >::value_type >::return_type
+syr2k( char const trans, integer_t const k,
+ typename traits::matrix_traits< MatrixA >::value_type const alpha,
+ MatrixA& a, MatrixB& b, typename traits::matrix_traits<
+ MatrixA >::value_type const beta, MatrixC& c ) {
     typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
     syr2k_impl< value_type >::compute( trans, k, alpha, a, b, beta, c );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syrk.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syrk.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syrk.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -70,8 +72,11 @@
     // templated specialization
     template< typename MatrixA, typename MatrixC >
     static return_type compute( char const trans, integer_t const k,
- traits::complex_d const alpha, MatrixA& a,
- traits::complex_d const beta, MatrixC& c ) {
+ value_type const alpha, MatrixA& a, value_type const beta,
+ MatrixC& c ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
         detail::syrk( traits::matrix_uplo_tag(c), trans,
                 traits::matrix_size2(c), k, alpha, traits::matrix_storage(a),
                 traits::leading_dimension(a), beta, traits::matrix_storage(c),
@@ -81,14 +86,16 @@
 
 // template function to call syrk
 template< typename MatrixA, typename MatrixC >
-inline integer_t syrk( char const trans, integer_t const k,
- traits::complex_d const alpha, MatrixA& a,
- traits::complex_d const beta, MatrixC& c ) {
+inline typename syrk_impl< typename traits::matrix_traits<
+ MatrixA >::value_type >::return_type
+syrk( char const trans, integer_t const k,
+ typename traits::matrix_traits< MatrixA >::value_type const alpha,
+ MatrixA& a, typename traits::matrix_traits<
+ MatrixA >::value_type const beta, MatrixC& c ) {
     typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
     syrk_impl< value_type >::compute( trans, k, alpha, a, beta, c );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trmm.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trmm.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trmm.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -70,8 +72,10 @@
     // templated specialization
     template< typename MatrixA, typename MatrixB >
     static return_type compute( char const side, char const transa,
- char const diag, traits::complex_d const alpha, MatrixA& a,
- MatrixB& b ) {
+ char const diag, value_type const alpha, MatrixA& a, MatrixB& b ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
         detail::trmm( side, traits::matrix_uplo_tag(a), transa, diag,
                 traits::matrix_size1(b), traits::matrix_size2(b), alpha,
                 traits::matrix_storage(a), traits::leading_dimension(a),
@@ -81,14 +85,15 @@
 
 // template function to call trmm
 template< typename MatrixA, typename MatrixB >
-inline integer_t trmm( char const side, char const transa,
- char const diag, traits::complex_d const alpha, MatrixA& a,
- MatrixB& b ) {
+inline typename trmm_impl< typename traits::matrix_traits<
+ MatrixA >::value_type >::return_type
+trmm( char const side, char const transa, char const diag,
+ typename traits::matrix_traits< MatrixA >::value_type const alpha,
+ MatrixA& a, MatrixB& b ) {
     typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
     trmm_impl< value_type >::compute( side, transa, diag, alpha, a, b );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trsm.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trsm.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trsm.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/blas/blas.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -70,8 +72,10 @@
     // templated specialization
     template< typename MatrixA, typename MatrixB >
     static return_type compute( char const side, char const transa,
- char const diag, traits::complex_d const alpha, MatrixA& a,
- MatrixB& b ) {
+ char const diag, value_type const alpha, MatrixA& a, MatrixB& b ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
         detail::trsm( side, traits::matrix_uplo_tag(a), transa, diag,
                 traits::matrix_size1(b), traits::matrix_size2(b), alpha,
                 traits::matrix_storage(a), traits::leading_dimension(a),
@@ -81,14 +85,15 @@
 
 // template function to call trsm
 template< typename MatrixA, typename MatrixB >
-inline integer_t trsm( char const side, char const transa,
- char const diag, traits::complex_d const alpha, MatrixA& a,
- MatrixB& b ) {
+inline typename trsm_impl< typename traits::matrix_traits<
+ MatrixA >::value_type >::return_type
+trsm( char const side, char const transa, char const diag,
+ typename traits::matrix_traits< MatrixA >::value_type const alpha,
+ MatrixA& a, MatrixB& b ) {
     typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
     trsm_impl< value_type >::compute( side, transa, diag, alpha, a, b );
 }
 
-
 }}}} // namespace boost::numeric::bindings::blas
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/bdsdc.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/bdsdc.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/bdsdc.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -61,6 +63,18 @@
             VectorD& d, VectorE& e, MatrixU& u, MatrixVT& vt, VectorQ& q,
             VectorIQ& iq, integer_t& info, detail::workspace2< WORK,
             IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::matrix_traits<
+ MatrixU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::matrix_traits<
+ MatrixVT >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorQ >::value_type > );
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( compq == 'N' || compq == 'P' || compq == 'I' );
@@ -131,7 +145,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/bdsqr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/bdsqr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/bdsqr.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -86,6 +88,18 @@
     static void compute( char const uplo, integer_t const n, VectorD& d,
             VectorE& e, MatrixVT& vt, MatrixU& u, MatrixC& c, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::matrix_traits<
+ MatrixVT >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::matrix_traits<
+ MatrixU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( n >= 0 );
@@ -150,6 +164,15 @@
     static void compute( char const uplo, integer_t const n, VectorD& d,
             VectorE& e, MatrixVT& vt, MatrixU& u, MatrixC& c, integer_t& info,
             detail::workspace1< RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixVT >::value_type, typename traits::matrix_traits<
+ MatrixU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixVT >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( n >= 0 );
@@ -215,7 +238,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbbrd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbbrd.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbbrd.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -92,6 +94,21 @@
             integer_t const n, integer_t const kl, integer_t const ku,
             MatrixAB& ab, VectorD& d, VectorE& e, MatrixQ& q, MatrixPT& pt,
             MatrixC& c, integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::vector_traits<
+ VectorD >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixQ >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixPT >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
 #ifndef NDEBUG
         assert( vect == 'N' || vect == 'Q' || vect == 'P' || vect == 'B' );
         assert( m >= 0 );
@@ -158,6 +175,18 @@
             MatrixAB& ab, VectorD& d, VectorE& e, MatrixQ& q, MatrixPT& pt,
             MatrixC& c, integer_t& info, detail::workspace2< WORK,
             RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixQ >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixPT >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
 #ifndef NDEBUG
         assert( vect == 'N' || vect == 'Q' || vect == 'P' || vect == 'B' );
         assert( m >= 0 );
@@ -232,7 +261,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbcon.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbcon.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbcon.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -83,6 +85,7 @@
             integer_t const kl, integer_t const ku, MatrixAB& ab,
             VectorIPIV& ipiv, real_type const anorm, real_type& rcond,
             integer_t& info, detail::workspace2< WORK, IWORK > work ) {
+
 #ifndef NDEBUG
         assert( norm == '1' || norm == 'O' || norm == 'I' );
         assert( n >= 0 );
@@ -147,6 +150,7 @@
             integer_t const kl, integer_t const ku, MatrixAB& ab,
             VectorIPIV& ipiv, real_type const anorm, real_type& rcond,
             integer_t& info, detail::workspace2< WORK, RWORK > work ) {
+
 #ifndef NDEBUG
         assert( norm == '1' || norm == 'O' || norm == 'I' );
         assert( n >= 0 );
@@ -202,10 +206,9 @@
 template< typename MatrixAB, typename VectorIPIV, typename Workspace >
 inline integer_t gbcon( char const norm, integer_t const n,
         integer_t const kl, integer_t const ku, MatrixAB& ab,
- VectorIPIV& ipiv,
- typename traits::matrix_traits< MatrixAB >::value_type const anorm,
- typename traits::matrix_traits< MatrixAB >::value_type& rcond,
- Workspace work = optimal_workspace() ) {
+ VectorIPIV& ipiv, typename traits::matrix_traits<
+ MatrixAB >::value_type const anorm, typename traits::matrix_traits<
+ MatrixAB >::value_type& rcond, Workspace work = optimal_workspace() ) {
     typedef typename traits::matrix_traits< MatrixAB >::value_type value_type;
     integer_t info(0);
     gbcon_impl< value_type >::compute( norm, n, kl, ku, ab, ipiv, anorm,
@@ -213,7 +216,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbequ.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbequ.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbequ.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -15,8 +15,13 @@
 #define BOOST_NUMERIC_BINDINGS_LAPACK_GBEQU_HPP
 
 #include <boost/numeric/bindings/lapack/lapack.h>
+#include <boost/numeric/bindings/traits/is_complex.hpp>
+#include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
 #include <cassert>
 
 namespace boost {
@@ -59,8 +64,44 @@
 }
 
 // value-type based template
+template< typename ValueType, typename Enable = void >
+struct gbequ_impl{};
+
+// real specialization
+template< typename ValueType >
+struct gbequ_impl< ValueType, typename boost::enable_if< traits::is_real<ValueType> >::type > {
+
+ typedef ValueType value_type;
+ typedef typename traits::type_traits<ValueType>::real_type real_type;
+
+ // templated specialization
+ template< typename MatrixAB, typename VectorR, typename VectorC >
+ static void compute( integer_t const m, integer_t const n,
+ integer_t const kl, integer_t const ku, MatrixAB& ab, VectorR& r,
+ VectorC& c, real_type& rowcnd, real_type& colcnd, real_type& amax,
+ integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::vector_traits<
+ VectorR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::vector_traits<
+ VectorC >::value_type > );
+#ifndef NDEBUG
+ assert( m >= 0 );
+ assert( n >= 0 );
+ assert( kl >= 0 );
+ assert( ku >= 0 );
+ assert( traits::leading_dimension(ab) >= kl+ku+1 );
+#endif
+ detail::gbequ( m, n, kl, ku, traits::matrix_storage(ab),
+ traits::leading_dimension(ab), traits::vector_storage(r),
+ traits::vector_storage(c), rowcnd, colcnd, amax, info );
+ }
+};
+
+// complex specialization
 template< typename ValueType >
-struct gbequ_impl {
+struct gbequ_impl< ValueType, typename boost::enable_if< traits::is_complex<ValueType> >::type > {
 
     typedef ValueType value_type;
     typedef typename traits::type_traits<ValueType>::real_type real_type;
@@ -71,6 +112,9 @@
             integer_t const kl, integer_t const ku, MatrixAB& ab, VectorR& r,
             VectorC& c, real_type& rowcnd, real_type& colcnd, real_type& amax,
             integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorR >::value_type, typename traits::vector_traits<
+ VectorC >::value_type > );
 #ifndef NDEBUG
         assert( m >= 0 );
         assert( n >= 0 );
@@ -89,10 +133,10 @@
 template< typename MatrixAB, typename VectorR, typename VectorC >
 inline integer_t gbequ( integer_t const m, integer_t const n,
         integer_t const kl, integer_t const ku, MatrixAB& ab, VectorR& r,
- VectorC& c,
- typename traits::matrix_traits< MatrixAB >::value_type& rowcnd,
- typename traits::matrix_traits< MatrixAB >::value_type& colcnd,
- typename traits::matrix_traits< MatrixAB >::value_type& amax ) {
+ VectorC& c, typename traits::matrix_traits<
+ MatrixAB >::value_type& rowcnd, typename traits::matrix_traits<
+ MatrixAB >::value_type& colcnd, typename traits::matrix_traits<
+ MatrixAB >::value_type& amax ) {
     typedef typename traits::matrix_traits< MatrixAB >::value_type value_type;
     integer_t info(0);
     gbequ_impl< value_type >::compute( m, n, kl, ku, ab, r, c, rowcnd,
@@ -100,7 +144,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbrfs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbrfs.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbrfs.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -97,6 +99,21 @@
             MatrixAFB& afb, VectorIPIV& ipiv, MatrixB& b, MatrixX& x,
             VectorFERR& ferr, VectorBERR& berr, integer_t& info,
             detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixAFB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::vector_traits<
+ VectorFERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
 #ifndef NDEBUG
         assert( trans == 'N' || trans == 'T' || trans == 'C' );
         assert( n >= 0 );
@@ -178,6 +195,18 @@
             MatrixAFB& afb, VectorIPIV& ipiv, MatrixB& b, MatrixX& x,
             VectorFERR& ferr, VectorBERR& berr, integer_t& info,
             detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorFERR >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixAFB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
 #ifndef NDEBUG
         assert( trans == 'N' || trans == 'T' || trans == 'C' );
         assert( n >= 0 );
@@ -259,7 +288,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbtrf.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbtrf.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbtrf.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -64,6 +66,7 @@
     static void compute( integer_t const m, integer_t const n,
             integer_t const kl, integer_t const ku, MatrixAB& ab,
             VectorIPIV& ipiv, integer_t& info ) {
+
 #ifndef NDEBUG
         assert( m >= 0 );
         assert( n >= 0 );
@@ -90,7 +93,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbtrs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbtrs.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbtrs.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -70,6 +72,9 @@
     static void compute( char const trans, integer_t const n,
             integer_t const kl, integer_t const ku, MatrixAB& ab,
             VectorIPIV& ipiv, MatrixB& b, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( trans == 'N' || trans == 'T' || trans == 'C' );
         assert( n >= 0 );
@@ -100,7 +105,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gebak.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gebak.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gebak.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -15,8 +15,13 @@
 #define BOOST_NUMERIC_BINDINGS_LAPACK_GEBAK_HPP
 
 #include <boost/numeric/bindings/lapack/lapack.h>
+#include <boost/numeric/bindings/traits/is_complex.hpp>
+#include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
 #include <cassert>
 
 namespace boost {
@@ -59,8 +64,43 @@
 }
 
 // value-type based template
+template< typename ValueType, typename Enable = void >
+struct gebak_impl{};
+
+// real specialization
+template< typename ValueType >
+struct gebak_impl< ValueType, typename boost::enable_if< traits::is_real<ValueType> >::type > {
+
+ typedef ValueType value_type;
+ typedef typename traits::type_traits<ValueType>::real_type real_type;
+
+ // templated specialization
+ template< typename VectorSCALE, typename MatrixV >
+ static void compute( char const job, char const side, integer_t const ilo,
+ integer_t const ihi, VectorSCALE& scale, MatrixV& v,
+ integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorSCALE >::value_type, typename traits::matrix_traits<
+ MatrixV >::value_type > );
+#ifndef NDEBUG
+ assert( job == 'N' || job == 'P' || job == 'S' || job == 'B' );
+ assert( side == 'R' || side == 'L' );
+ assert( traits::matrix_size1(v) >= 0 );
+ assert( traits::vector_size(scale) >= traits::matrix_size1(v) );
+ assert( traits::matrix_size2(v) >= 0 );
+ assert( traits::leading_dimension(v) >= std::max(1,
+ traits::matrix_size1(v)) );
+#endif
+ detail::gebak( job, side, traits::matrix_size1(v), ilo, ihi,
+ traits::vector_storage(scale), traits::matrix_size2(v),
+ traits::matrix_storage(v), traits::leading_dimension(v),
+ info );
+ }
+};
+
+// complex specialization
 template< typename ValueType >
-struct gebak_impl {
+struct gebak_impl< ValueType, typename boost::enable_if< traits::is_complex<ValueType> >::type > {
 
     typedef ValueType value_type;
     typedef typename traits::type_traits<ValueType>::real_type real_type;
@@ -70,6 +110,7 @@
     static void compute( char const job, char const side, integer_t const ilo,
             integer_t const ihi, VectorSCALE& scale, MatrixV& v,
             integer_t& info ) {
+
 #ifndef NDEBUG
         assert( job == 'N' || job == 'P' || job == 'S' || job == 'B' );
         assert( side == 'R' || side == 'L' );
@@ -92,14 +133,14 @@
 inline integer_t gebak( char const job, char const side,
         integer_t const ilo, integer_t const ihi, VectorSCALE& scale,
         MatrixV& v ) {
- typedef typename traits::vector_traits< VectorSCALE >::value_type value_type;
+ typedef typename traits::vector_traits<
+ VectorSCALE >::value_type value_type;
     integer_t info(0);
     gebak_impl< value_type >::compute( job, side, ilo, ihi, scale, v,
             info );
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gebal.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gebal.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gebal.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -15,8 +15,13 @@
 #define BOOST_NUMERIC_BINDINGS_LAPACK_GEBAL_HPP
 
 #include <boost/numeric/bindings/lapack/lapack.h>
+#include <boost/numeric/bindings/traits/is_complex.hpp>
+#include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
 #include <cassert>
 
 namespace boost {
@@ -53,8 +58,12 @@
 }
 
 // value-type based template
+template< typename ValueType, typename Enable = void >
+struct gebal_impl{};
+
+// real specialization
 template< typename ValueType >
-struct gebal_impl {
+struct gebal_impl< ValueType, typename boost::enable_if< traits::is_real<ValueType> >::type > {
 
     typedef ValueType value_type;
     typedef typename traits::type_traits<ValueType>::real_type real_type;
@@ -63,6 +72,33 @@
     template< typename MatrixA, typename VectorSCALE >
     static void compute( char const job, MatrixA& a, integer_t& ilo,
             integer_t& ihi, VectorSCALE& scale, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorSCALE >::value_type > );
+#ifndef NDEBUG
+ assert( job == 'N' || job == 'P' || job == 'S' || job == 'B' );
+ assert( traits::matrix_size2(a) >= 0 );
+ assert( traits::leading_dimension(a) >= std::max(1,
+ traits::matrix_size2(a)) );
+#endif
+ detail::gebal( job, traits::matrix_size2(a),
+ traits::matrix_storage(a), traits::leading_dimension(a), ilo,
+ ihi, traits::vector_storage(scale), info );
+ }
+};
+
+// complex specialization
+template< typename ValueType >
+struct gebal_impl< ValueType, typename boost::enable_if< traits::is_complex<ValueType> >::type > {
+
+ typedef ValueType value_type;
+ typedef typename traits::type_traits<ValueType>::real_type real_type;
+
+ // templated specialization
+ template< typename MatrixA, typename VectorSCALE >
+ static void compute( char const job, MatrixA& a, integer_t& ilo,
+ integer_t& ihi, VectorSCALE& scale, integer_t& info ) {
+
 #ifndef NDEBUG
         assert( job == 'N' || job == 'P' || job == 'S' || job == 'B' );
         assert( traits::matrix_size2(a) >= 0 );
@@ -86,7 +122,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gebrd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gebrd.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gebrd.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -80,8 +82,20 @@
     template< typename MatrixA, typename VectorD, typename VectorE,
             typename VectorTAUQ, typename VectorTAUP, typename WORK >
     static void compute( MatrixA& a, VectorD& d, VectorE& e, VectorTAUQ& tauq,
- VectorTAUP& taup, integer_t& info,
- detail::workspace1< WORK > work ) {
+ VectorTAUP& taup, integer_t& info, detail::workspace1<
+ WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorD >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAUQ >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAUP >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size2(a) >= 0 );
@@ -146,8 +160,17 @@
     template< typename MatrixA, typename VectorD, typename VectorE,
             typename VectorTAUQ, typename VectorTAUP, typename WORK >
     static void compute( MatrixA& a, VectorD& d, VectorE& e, VectorTAUQ& tauq,
- VectorTAUP& taup, integer_t& info,
- detail::workspace1< WORK > work ) {
+ VectorTAUP& taup, integer_t& info, detail::workspace1<
+ WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAUQ >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAUP >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size2(a) >= 0 );
@@ -215,7 +238,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gecon.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gecon.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gecon.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -77,6 +79,7 @@
     static void compute( char const norm, MatrixA& a, real_type const anorm,
             real_type& rcond, integer_t& info, detail::workspace2< WORK,
             IWORK > work ) {
+
 #ifndef NDEBUG
         assert( norm == '1' || norm == 'O' || norm == 'I' );
         assert( traits::matrix_size2(a) >= 0 );
@@ -134,6 +137,7 @@
     static void compute( char const norm, MatrixA& a, real_type const anorm,
             real_type& rcond, integer_t& info, detail::workspace2< WORK,
             RWORK > work ) {
+
 #ifndef NDEBUG
         assert( norm == '1' || norm == 'O' || norm == 'I' );
         assert( traits::matrix_size2(a) >= 0 );
@@ -193,7 +197,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/geequ.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/geequ.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/geequ.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -15,8 +15,13 @@
 #define BOOST_NUMERIC_BINDINGS_LAPACK_GEEQU_HPP
 
 #include <boost/numeric/bindings/lapack/lapack.h>
+#include <boost/numeric/bindings/traits/is_complex.hpp>
+#include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
 #include <cassert>
 
 namespace boost {
@@ -53,8 +58,12 @@
 }
 
 // value-type based template
+template< typename ValueType, typename Enable = void >
+struct geequ_impl{};
+
+// real specialization
 template< typename ValueType >
-struct geequ_impl {
+struct geequ_impl< ValueType, typename boost::enable_if< traits::is_real<ValueType> >::type > {
 
     typedef ValueType value_type;
     typedef typename traits::type_traits<ValueType>::real_type real_type;
@@ -64,6 +73,40 @@
     static void compute( MatrixA& a, VectorR& r, VectorC& c,
             real_type& rowcnd, real_type& colcnd, real_type& amax,
             integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorC >::value_type > );
+#ifndef NDEBUG
+ assert( traits::matrix_size1(a) >= 0 );
+ assert( traits::matrix_size2(a) >= 0 );
+ assert( traits::leading_dimension(a) >= std::max(1,
+ traits::matrix_size1(a)) );
+#endif
+ detail::geequ( traits::matrix_size1(a), traits::matrix_size2(a),
+ traits::matrix_storage(a), traits::leading_dimension(a),
+ traits::vector_storage(r), traits::vector_storage(c), rowcnd,
+ colcnd, amax, info );
+ }
+};
+
+// complex specialization
+template< typename ValueType >
+struct geequ_impl< ValueType, typename boost::enable_if< traits::is_complex<ValueType> >::type > {
+
+ typedef ValueType value_type;
+ typedef typename traits::type_traits<ValueType>::real_type real_type;
+
+ // templated specialization
+ template< typename MatrixA, typename VectorR, typename VectorC >
+ static void compute( MatrixA& a, VectorR& r, VectorC& c,
+ real_type& rowcnd, real_type& colcnd, real_type& amax,
+ integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorR >::value_type, typename traits::vector_traits<
+ VectorC >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size2(a) >= 0 );
@@ -91,7 +134,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gehrd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gehrd.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gehrd.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -76,8 +78,11 @@
     // user-defined workspace specialization
     template< typename MatrixA, typename VectorTAU, typename WORK >
     static void compute( integer_t const ilo, integer_t const ihi, MatrixA& a,
- VectorTAU& tau, integer_t& info,
- detail::workspace1< WORK > work ) {
+ VectorTAU& tau, integer_t& info, detail::workspace1<
+ WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size2(a) >= 0 );
         assert( traits::leading_dimension(a) >= std::max(1,
@@ -130,8 +135,11 @@
     // user-defined workspace specialization
     template< typename MatrixA, typename VectorTAU, typename WORK >
     static void compute( integer_t const ilo, integer_t const ihi, MatrixA& a,
- VectorTAU& tau, integer_t& info,
- detail::workspace1< WORK > work ) {
+ VectorTAU& tau, integer_t& info, detail::workspace1<
+ WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size2(a) >= 0 );
         assert( traits::leading_dimension(a) >= std::max(1,
@@ -185,7 +193,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gelqf.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gelqf.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gelqf.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -75,6 +77,9 @@
     template< typename MatrixA, typename VectorTAU, typename WORK >
     static void compute( MatrixA& a, VectorTAU& tau, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size2(a) >= 0 );
@@ -130,6 +135,9 @@
     template< typename MatrixA, typename VectorTAU, typename WORK >
     static void compute( MatrixA& a, VectorTAU& tau, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size2(a) >= 0 );
@@ -185,7 +193,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/geqlf.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/geqlf.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/geqlf.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -75,6 +77,9 @@
     template< typename MatrixA, typename VectorTAU, typename WORK >
     static void compute( MatrixA& a, VectorTAU& tau, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size2(a) >= 0 );
@@ -130,6 +135,9 @@
     template< typename MatrixA, typename VectorTAU, typename WORK >
     static void compute( MatrixA& a, VectorTAU& tau, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size2(a) >= 0 );
@@ -185,7 +193,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/geqp3.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/geqp3.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/geqp3.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -78,6 +80,9 @@
             typename WORK >
     static void compute( MatrixA& a, VectorJPVT& jpvt, VectorTAU& tau,
             integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size2(a) >= 0 );
@@ -135,6 +140,9 @@
             typename WORK, typename RWORK >
     static void compute( MatrixA& a, VectorJPVT& jpvt, VectorTAU& tau,
             integer_t& info, detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size2(a) >= 0 );
@@ -203,7 +211,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/geqrf.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/geqrf.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/geqrf.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -75,6 +77,9 @@
     template< typename MatrixA, typename VectorTAU, typename WORK >
     static void compute( MatrixA& a, VectorTAU& tau, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size2(a) >= 0 );
@@ -130,6 +135,9 @@
     template< typename MatrixA, typename VectorTAU, typename WORK >
     static void compute( MatrixA& a, VectorTAU& tau, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size2(a) >= 0 );
@@ -185,7 +193,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gerfs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gerfs.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gerfs.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -92,6 +94,21 @@
             VectorIPIV& ipiv, MatrixB& b, MatrixX& x, VectorFERR& ferr,
             VectorBERR& berr, integer_t& info, detail::workspace2< WORK,
             IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixAF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorFERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
 #ifndef NDEBUG
         assert( trans == 'N' || trans == 'T' || trans == 'C' );
         assert( traits::matrix_size2(a) >= 0 );
@@ -172,6 +189,18 @@
             VectorIPIV& ipiv, MatrixB& b, MatrixX& x, VectorFERR& ferr,
             VectorBERR& berr, integer_t& info, detail::workspace2< WORK,
             RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorFERR >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixAF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
 #ifndef NDEBUG
         assert( trans == 'N' || trans == 'T' || trans == 'C' );
         assert( traits::matrix_size2(a) >= 0 );
@@ -252,7 +281,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gerqf.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gerqf.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gerqf.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -75,6 +77,9 @@
     template< typename MatrixA, typename VectorTAU, typename WORK >
     static void compute( MatrixA& a, VectorTAU& tau, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size2(a) >= 0 );
@@ -130,6 +135,9 @@
     template< typename MatrixA, typename VectorTAU, typename WORK >
     static void compute( MatrixA& a, VectorTAU& tau, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size2(a) >= 0 );
@@ -185,7 +193,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/getrf.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/getrf.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/getrf.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -58,6 +60,7 @@
     // templated specialization
     template< typename MatrixA, typename VectorIPIV >
     static void compute( MatrixA& a, VectorIPIV& ipiv, integer_t& info ) {
+
 #ifndef NDEBUG
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size2(a) >= 0 );
@@ -82,7 +85,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/getri.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/getri.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/getri.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -73,6 +75,7 @@
     template< typename MatrixA, typename VectorIPIV, typename WORK >
     static void compute( MatrixA& a, VectorIPIV& ipiv, integer_t& info,
             detail::workspace1< WORK > work ) {
+
 #ifndef NDEBUG
         assert( traits::matrix_size2(a) >= 0 );
         assert( traits::leading_dimension(a) >= std::max(1,
@@ -125,6 +128,7 @@
     template< typename MatrixA, typename VectorIPIV, typename WORK >
     static void compute( MatrixA& a, VectorIPIV& ipiv, integer_t& info,
             detail::workspace1< WORK > work ) {
+
 #ifndef NDEBUG
         assert( traits::matrix_size2(a) >= 0 );
         assert( traits::leading_dimension(a) >= std::max(1,
@@ -177,7 +181,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/getrs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/getrs.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/getrs.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -66,6 +68,9 @@
     template< typename MatrixA, typename VectorIPIV, typename MatrixB >
     static void compute( char const trans, MatrixA& a, VectorIPIV& ipiv,
             MatrixB& b, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( trans == 'N' || trans == 'T' || trans == 'C' );
         assert( traits::matrix_size2(a) >= 0 );
@@ -95,7 +100,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggbak.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggbak.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggbak.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -15,8 +15,13 @@
 #define BOOST_NUMERIC_BINDINGS_LAPACK_GGBAK_HPP
 
 #include <boost/numeric/bindings/lapack/lapack.h>
+#include <boost/numeric/bindings/traits/is_complex.hpp>
+#include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
 #include <cassert>
 
 namespace boost {
@@ -59,8 +64,48 @@
 }
 
 // value-type based template
+template< typename ValueType, typename Enable = void >
+struct ggbak_impl{};
+
+// real specialization
+template< typename ValueType >
+struct ggbak_impl< ValueType, typename boost::enable_if< traits::is_real<ValueType> >::type > {
+
+ typedef ValueType value_type;
+ typedef typename traits::type_traits<ValueType>::real_type real_type;
+
+ // templated specialization
+ template< typename VectorLSCALE, typename VectorRSCALE, typename MatrixV >
+ static void compute( char const job, char const side, integer_t const ilo,
+ integer_t const ihi, VectorLSCALE& lscale, VectorRSCALE& rscale,
+ MatrixV& v, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorLSCALE >::value_type, typename traits::vector_traits<
+ VectorRSCALE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorLSCALE >::value_type, typename traits::matrix_traits<
+ MatrixV >::value_type > );
+#ifndef NDEBUG
+ assert( job == 'N' || job == 'P' || job == 'S' || job == 'B' );
+ assert( side == 'R' || side == 'L' );
+ assert( traits::matrix_size1(v) >= 0 );
+ assert( traits::vector_size(lscale) >= traits::matrix_size1(v) );
+ assert( traits::vector_size(rscale) >= traits::matrix_size1(v) );
+ assert( traits::matrix_size2(v) >= 0 );
+ assert( traits::leading_dimension(v) >= std::max(1,
+ traits::matrix_size1(v)) );
+#endif
+ detail::ggbak( job, side, traits::matrix_size1(v), ilo, ihi,
+ traits::vector_storage(lscale),
+ traits::vector_storage(rscale), traits::matrix_size2(v),
+ traits::matrix_storage(v), traits::leading_dimension(v),
+ info );
+ }
+};
+
+// complex specialization
 template< typename ValueType >
-struct ggbak_impl {
+struct ggbak_impl< ValueType, typename boost::enable_if< traits::is_complex<ValueType> >::type > {
 
     typedef ValueType value_type;
     typedef typename traits::type_traits<ValueType>::real_type real_type;
@@ -70,6 +115,9 @@
     static void compute( char const job, char const side, integer_t const ilo,
             integer_t const ihi, VectorLSCALE& lscale, VectorRSCALE& rscale,
             MatrixV& v, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorLSCALE >::value_type, typename traits::vector_traits<
+ VectorRSCALE >::value_type > );
 #ifndef NDEBUG
         assert( job == 'N' || job == 'P' || job == 'S' || job == 'B' );
         assert( side == 'R' || side == 'L' );
@@ -94,14 +142,14 @@
 inline integer_t ggbak( char const job, char const side,
         integer_t const ilo, integer_t const ihi, VectorLSCALE& lscale,
         VectorRSCALE& rscale, MatrixV& v ) {
- typedef typename traits::vector_traits< VectorLSCALE >::value_type value_type;
+ typedef typename traits::vector_traits<
+ VectorLSCALE >::value_type value_type;
     integer_t info(0);
     ggbak_impl< value_type >::compute( job, side, ilo, ihi, lscale,
             rscale, v, info );
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggbal.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggbal.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggbal.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,8 +17,13 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/lapack/workspace.hpp>
 #include <boost/numeric/bindings/traits/detail/array.hpp>
+#include <boost/numeric/bindings/traits/is_complex.hpp>
+#include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
 #include <cassert>
 
 namespace boost {
@@ -63,8 +68,12 @@
 }
 
 // value-type based template
+template< typename ValueType, typename Enable = void >
+struct ggbal_impl{};
+
+// real specialization
 template< typename ValueType >
-struct ggbal_impl {
+struct ggbal_impl< ValueType, typename boost::enable_if< traits::is_real<ValueType> >::type > {
 
     typedef ValueType value_type;
     typedef typename traits::type_traits<ValueType>::real_type real_type;
@@ -74,8 +83,80 @@
             typename VectorRSCALE, typename WORK >
     static void compute( char const job, integer_t const n, MatrixA& a,
             MatrixB& b, integer_t& ilo, integer_t& ihi, VectorLSCALE& lscale,
- VectorRSCALE& rscale, integer_t& info,
- detail::workspace1< WORK > work ) {
+ VectorRSCALE& rscale, integer_t& info, detail::workspace1<
+ WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorLSCALE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorRSCALE >::value_type > );
+#ifndef NDEBUG
+ assert( job == 'N' || job == 'P' || job == 'S' || job == 'B' );
+ assert( n >= 0 );
+ assert( traits::leading_dimension(a) >= std::max(1,n) );
+ assert( traits::leading_dimension(b) >= std::max(1,n) );
+ assert( traits::vector_size(work.select(real_type()) >= min_size_work(
+ $CALL_MIN_SIZE )));
+#endif
+ detail::ggbal( job, n, traits::matrix_storage(a),
+ traits::leading_dimension(a), traits::matrix_storage(b),
+ traits::leading_dimension(b), ilo, ihi,
+ traits::vector_storage(lscale),
+ traits::vector_storage(rscale),
+ traits::vector_storage(work.select(real_type())), info );
+ }
+
+ // minimal workspace specialization
+ template< typename MatrixA, typename MatrixB, typename VectorLSCALE,
+ typename VectorRSCALE >
+ static void compute( char const job, integer_t const n, MatrixA& a,
+ MatrixB& b, integer_t& ilo, integer_t& ihi, VectorLSCALE& lscale,
+ VectorRSCALE& rscale, integer_t& info, minimal_workspace work ) {
+ traits::detail::array< real_type > tmp_work( min_size_work(
+ $CALL_MIN_SIZE ) );
+ compute( job, n, a, b, ilo, ihi, lscale, rscale, info,
+ workspace( tmp_work ) );
+ }
+
+ // optimal workspace specialization
+ template< typename MatrixA, typename MatrixB, typename VectorLSCALE,
+ typename VectorRSCALE >
+ static void compute( char const job, integer_t const n, MatrixA& a,
+ MatrixB& b, integer_t& ilo, integer_t& ihi, VectorLSCALE& lscale,
+ VectorRSCALE& rscale, integer_t& info, optimal_workspace work ) {
+ compute( job, n, a, b, ilo, ihi, lscale, rscale, info,
+ minimal_workspace() );
+ }
+
+ static integer_t min_size_work( $ARGUMENTS ) {
+ $MIN_SIZE
+ }
+};
+
+// complex specialization
+template< typename ValueType >
+struct ggbal_impl< ValueType, typename boost::enable_if< traits::is_complex<ValueType> >::type > {
+
+ typedef ValueType value_type;
+ typedef typename traits::type_traits<ValueType>::real_type real_type;
+
+ // user-defined workspace specialization
+ template< typename MatrixA, typename MatrixB, typename VectorLSCALE,
+ typename VectorRSCALE, typename WORK >
+ static void compute( char const job, integer_t const n, MatrixA& a,
+ MatrixB& b, integer_t& ilo, integer_t& ihi, VectorLSCALE& lscale,
+ VectorRSCALE& rscale, integer_t& info, detail::workspace1<
+ WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorLSCALE >::value_type, typename traits::vector_traits<
+ VectorRSCALE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( job == 'N' || job == 'P' || job == 'S' || job == 'B' );
         assert( n >= 0 );
@@ -133,7 +214,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gghrd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gghrd.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gghrd.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -77,6 +79,15 @@
     static void compute( char const compq, char const compz,
             integer_t const n, integer_t const ilo, MatrixA& a, MatrixB& b,
             MatrixQ& q, MatrixZ& z, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixQ >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( compq == 'N' || compq == 'I' || compq == 'V' );
         assert( compz == 'N' || compz == 'I' || compz == 'V' );
@@ -107,7 +118,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggqrf.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggqrf.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggqrf.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -85,8 +87,17 @@
     template< typename MatrixA, typename VectorTAUA, typename MatrixB,
             typename VectorTAUB, typename WORK >
     static void compute( MatrixA& a, VectorTAUA& taua, MatrixB& b,
- VectorTAUB& taub, integer_t& info,
- detail::workspace1< WORK > work ) {
+ VectorTAUB& taub, integer_t& info, detail::workspace1<
+ WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAUA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAUB >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size1(b) >= 0 );
         assert( traits::matrix_size2(a) >= 0 );
@@ -153,8 +164,17 @@
     template< typename MatrixA, typename VectorTAUA, typename MatrixB,
             typename VectorTAUB, typename WORK >
     static void compute( MatrixA& a, VectorTAUA& taua, MatrixB& b,
- VectorTAUB& taub, integer_t& info,
- detail::workspace1< WORK > work ) {
+ VectorTAUB& taub, integer_t& info, detail::workspace1<
+ WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAUA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAUB >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size1(b) >= 0 );
         assert( traits::matrix_size2(a) >= 0 );
@@ -222,7 +242,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggrqf.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggrqf.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggrqf.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -85,8 +87,17 @@
     template< typename MatrixA, typename VectorTAUA, typename MatrixB,
             typename VectorTAUB, typename WORK >
     static void compute( MatrixA& a, VectorTAUA& taua, MatrixB& b,
- VectorTAUB& taub, integer_t& info,
- detail::workspace1< WORK > work ) {
+ VectorTAUB& taub, integer_t& info, detail::workspace1<
+ WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAUA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAUB >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size1(b) >= 0 );
@@ -153,8 +164,17 @@
     template< typename MatrixA, typename VectorTAUA, typename MatrixB,
             typename VectorTAUB, typename WORK >
     static void compute( MatrixA& a, VectorTAUA& taua, MatrixB& b,
- VectorTAUB& taub, integer_t& info,
- detail::workspace1< WORK > work ) {
+ VectorTAUB& taub, integer_t& info, detail::workspace1<
+ WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAUA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAUB >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size1(b) >= 0 );
@@ -222,7 +242,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggsvp.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggsvp.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggsvp.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -107,8 +109,20 @@
     static void compute( char const jobu, char const jobv, char const jobq,
             MatrixA& a, MatrixB& b, real_type const tola,
             real_type const tolb, integer_t& k, integer_t& l, MatrixU& u,
- MatrixV& v, MatrixQ& q, integer_t& info,
- detail::workspace3< IWORK, TAU, WORK > work ) {
+ MatrixV& v, MatrixQ& q, integer_t& info, detail::workspace3<
+ IWORK, TAU, WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixV >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixQ >::value_type > );
 #ifndef NDEBUG
         assert( jobu == 'U' || jobu == 'N' );
         assert( jobv == 'V' || jobv == 'N' );
@@ -150,7 +164,8 @@
             MatrixV& v, MatrixQ& q, integer_t& info, minimal_workspace work ) {
         traits::detail::array< integer_t > tmp_iwork( min_size_iwork(
                 traits::matrix_size2(b) ) );
- traits::detail::array< real_type > tmp_tau( min_size_tau( traits::matrix_size2(b) ) );
+ traits::detail::array<
+ real_type > tmp_tau( min_size_tau( traits::matrix_size2(b) ) );
         traits::detail::array< real_type > tmp_work( min_size_work(
                 traits::matrix_size2(b), traits::matrix_size1(a),
                 traits::matrix_size1(b) ) );
@@ -197,8 +212,20 @@
     static void compute( char const jobu, char const jobv, char const jobq,
             MatrixA& a, MatrixB& b, real_type const tola,
             real_type const tolb, integer_t& k, integer_t& l, MatrixU& u,
- MatrixV& v, MatrixQ& q, integer_t& info,
- detail::workspace4< IWORK, RWORK, TAU, WORK > work ) {
+ MatrixV& v, MatrixQ& q, integer_t& info, detail::workspace4<
+ IWORK, RWORK, TAU, WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixV >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixQ >::value_type > );
 #ifndef NDEBUG
         assert( jobu == 'U' || jobu == 'N' );
         assert( jobv == 'V' || jobv == 'N' );
@@ -245,7 +272,8 @@
                 traits::matrix_size2(b) ) );
         traits::detail::array< real_type > tmp_rwork( min_size_rwork(
                 traits::matrix_size2(b) ) );
- traits::detail::array< value_type > tmp_tau( min_size_tau( traits::matrix_size2(b) ) );
+ traits::detail::array<
+ value_type > tmp_tau( min_size_tau( traits::matrix_size2(b) ) );
         traits::detail::array< value_type > tmp_work( min_size_work(
                 traits::matrix_size2(b), traits::matrix_size1(a),
                 traits::matrix_size1(b) ) );
@@ -299,7 +327,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gtrfs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gtrfs.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gtrfs.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -104,6 +106,36 @@
             VectorDUF& duf, VectorDU2& du2, VectorIPIV& ipiv, MatrixB& b,
             MatrixX& x, VectorFERR& ferr, VectorBERR& berr, integer_t& info,
             detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorD >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorDU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorDLF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorDF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorDUF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorDU2 >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorFERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
 #ifndef NDEBUG
         assert( trans == 'N' || trans == 'T' || trans == 'C' );
         assert( n >= 0 );
@@ -193,6 +225,33 @@
             VectorDUF& duf, VectorDU2& du2, VectorIPIV& ipiv, MatrixB& b,
             MatrixX& x, VectorFERR& ferr, VectorBERR& berr, integer_t& info,
             detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorFERR >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorD >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorDU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorDLF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorDF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorDUF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorDU2 >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
 #ifndef NDEBUG
         assert( trans == 'N' || trans == 'T' || trans == 'C' );
         assert( n >= 0 );
@@ -283,7 +342,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gttrs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gttrs.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gttrs.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -74,6 +76,18 @@
     static void compute( char const trans, integer_t const n, VectorDL& dl,
             VectorD& d, VectorDU& du, VectorDU2& du2, VectorIPIV& ipiv,
             MatrixB& b, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorD >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorDU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorDU2 >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( trans == 'N' || trans == 'T' || trans == 'C' );
         assert( traits::matrix_size2(b) >= 0 );
@@ -106,7 +120,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hbgst.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hbgst.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hbgst.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -62,8 +64,14 @@
             typename WORK, typename RWORK >
     static void compute( char const vect, integer_t const n,
             integer_t const ka, integer_t const kb, MatrixAB& ab,
- MatrixBB& bb, MatrixX& x, integer_t& info,
- detail::workspace2< WORK, RWORK > work ) {
+ MatrixBB& bb, MatrixX& x, integer_t& info, detail::workspace2<
+ WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixBB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
 #ifndef NDEBUG
         assert( vect == 'N' || vect == 'V' );
         assert( traits::matrix_uplo_tag(a) == 'U' ||
@@ -130,7 +138,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hbtrd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hbtrd.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hbtrd.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -61,6 +63,12 @@
     static void compute( char const vect, integer_t const n,
             integer_t const kd, MatrixAB& ab, VectorD& d, VectorE& e,
             MatrixQ& q, integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixQ >::value_type > );
 #ifndef NDEBUG
         assert( vect == 'N' || vect == 'V' || vect == 'U' );
         assert( traits::matrix_uplo_tag(a) == 'U' ||
@@ -117,7 +125,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hecon.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hecon.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hecon.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -58,6 +60,7 @@
     static void compute( char const uplo, MatrixA& a, VectorIPIV& ipiv,
             real_type const anorm, real_type& rcond, integer_t& info,
             detail::workspace1< WORK > work ) {
+
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( traits::matrix_size2(a) >= 0 );
@@ -110,7 +113,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hegst.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hegst.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hegst.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -53,6 +55,9 @@
     template< typename MatrixA, typename MatrixB >
     static void compute( integer_t const itype, integer_t const n, MatrixA& a,
             MatrixB& b, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -78,7 +83,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/herfs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/herfs.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/herfs.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -68,6 +70,18 @@
     static void compute( MatrixA& a, MatrixAF& af, VectorIPIV& ipiv,
             MatrixB& b, MatrixX& x, VectorFERR& ferr, VectorBERR& berr,
             integer_t& info, detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorFERR >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixAF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -148,7 +162,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetrd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetrd.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetrd.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -61,6 +63,12 @@
             typename VectorTAU, typename WORK >
     static void compute( MatrixA& a, VectorD& d, VectorE& e, VectorTAU& tau,
             integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -122,7 +130,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetrf.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetrf.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetrf.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -55,6 +57,7 @@
     template< typename MatrixA, typename VectorIPIV, typename WORK >
     static void compute( MatrixA& a, VectorIPIV& ipiv, integer_t& info,
             detail::workspace1< WORK > work ) {
+
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -102,7 +105,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetri.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetri.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetri.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -55,6 +57,7 @@
     template< typename MatrixA, typename VectorIPIV, typename WORK >
     static void compute( char const uplo, MatrixA& a, VectorIPIV& ipiv,
             integer_t& info, detail::workspace1< WORK > work ) {
+
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( traits::matrix_size2(a) >= 0 );
@@ -102,7 +105,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetrs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetrs.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetrs.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -55,6 +57,9 @@
     template< typename MatrixA, typename VectorIPIV, typename MatrixB >
     static void compute( char const uplo, MatrixA& a, VectorIPIV& ipiv,
             MatrixB& b, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( traits::matrix_size2(a) >= 0 );
@@ -83,7 +88,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hgeqz.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hgeqz.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hgeqz.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -101,6 +103,24 @@
             integer_t const ilo, MatrixH& h, MatrixT& t, VectorALPHAR& alphar,
             VectorALPHAI& alphai, VectorBETA& beta, MatrixQ& q, MatrixZ& z,
             integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixH >::value_type, typename traits::matrix_traits<
+ MatrixT >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixH >::value_type, typename traits::vector_traits<
+ VectorALPHAR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixH >::value_type, typename traits::vector_traits<
+ VectorALPHAI >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixH >::value_type, typename traits::vector_traits<
+ VectorBETA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixH >::value_type, typename traits::matrix_traits<
+ MatrixQ >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixH >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( job == 'E' || job == 'S' );
         assert( compq == 'N' || compq == 'I' || compq == 'V' );
@@ -179,6 +199,21 @@
             integer_t const ilo, MatrixH& h, MatrixT& t, VectorALPHA& alpha,
             VectorBETA& beta, MatrixQ& q, MatrixZ& z, integer_t& info,
             detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixH >::value_type, typename traits::matrix_traits<
+ MatrixT >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixH >::value_type, typename traits::vector_traits<
+ VectorALPHA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixH >::value_type, typename traits::vector_traits<
+ VectorBETA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixH >::value_type, typename traits::matrix_traits<
+ MatrixQ >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixH >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( job == 'E' || job == 'S' );
         assert( compq == 'N' || compq == 'I' || compq == 'V' );
@@ -266,7 +301,6 @@
             alphar, alphai, beta, q, z, info, work );
     return info;
 }
-
 // template function to call hgeqz
 template< typename MatrixH, typename MatrixT, typename VectorALPHA,
         typename VectorBETA, typename MatrixQ, typename MatrixZ,
@@ -282,7 +316,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hprfs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hprfs.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hprfs.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -69,6 +71,18 @@
             VectorIPIV& ipiv, MatrixB& b, MatrixX& x, VectorFERR& ferr,
             VectorBERR& berr, integer_t& info, detail::workspace2< WORK,
             RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorFERR >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixAFP >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -142,7 +156,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hptrs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hptrs.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hptrs.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -53,6 +55,9 @@
     template< typename MatrixAP, typename VectorIPIV, typename MatrixB >
     static void compute( char const uplo, integer_t const n, MatrixAP& ap,
             VectorIPIV& ipiv, MatrixB& b, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( n >= 0 );
@@ -79,7 +84,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hsein.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hsein.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hsein.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -99,6 +101,21 @@
             MatrixVL& vl, MatrixVR& vr, integer_t const mm, integer_t& m,
             VectorIFAILL& ifaill, VectorIFAILR& ifailr, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixH >::value_type, typename traits::vector_traits<
+ VectorWR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixH >::value_type, typename traits::vector_traits<
+ VectorWI >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixH >::value_type, typename traits::matrix_traits<
+ MatrixVL >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixH >::value_type, typename traits::matrix_traits<
+ MatrixVR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorIFAILL >::value_type, typename traits::vector_traits<
+ VectorIFAILR >::value_type > );
 #ifndef NDEBUG
         assert( side == 'R' || side == 'L' || side == 'B' );
         assert( eigsrc == 'Q' || eigsrc == 'N' );
@@ -173,6 +190,18 @@
             MatrixVR& vr, integer_t const mm, integer_t& m,
             VectorIFAILL& ifaill, VectorIFAILR& ifailr, integer_t& info,
             detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorIFAILL >::value_type, typename traits::vector_traits<
+ VectorIFAILR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixH >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixH >::value_type, typename traits::matrix_traits<
+ MatrixVL >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixH >::value_type, typename traits::matrix_traits<
+ MatrixVR >::value_type > );
 #ifndef NDEBUG
         assert( side == 'R' || side == 'L' || side == 'B' );
         assert( eigsrc == 'Q' || eigsrc == 'N' );
@@ -248,13 +277,13 @@
         VectorWI& wi, MatrixVL& vl, MatrixVR& vr, integer_t const mm,
         integer_t& m, VectorIFAILL& ifaill, VectorIFAILR& ifailr,
         Workspace work = optimal_workspace() ) {
- typedef typename traits::vector_traits< VectorSELECT >::value_type value_type;
+ typedef typename traits::vector_traits<
+ VectorSELECT >::value_type value_type;
     integer_t info(0);
     hsein_impl< value_type >::compute( side, eigsrc, initv, select, h,
             wr, wi, vl, vr, mm, m, ifaill, ifailr, info, work );
     return info;
 }
-
 // template function to call hsein
 template< typename VectorSELECT, typename MatrixH, typename VectorW,
         typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
@@ -264,14 +293,14 @@
         MatrixVL& vl, MatrixVR& vr, integer_t const mm, integer_t& m,
         VectorIFAILL& ifaill, VectorIFAILR& ifailr,
         Workspace work = optimal_workspace() ) {
- typedef typename traits::vector_traits< VectorSELECT >::value_type value_type;
+ typedef typename traits::vector_traits<
+ VectorSELECT >::value_type value_type;
     integer_t info(0);
     hsein_impl< value_type >::compute( side, eigsrc, initv, select, h, w,
             vl, vr, mm, m, ifaill, ifailr, info, work );
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hseqr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hseqr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hseqr.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -87,6 +89,15 @@
             integer_t const ilo, integer_t const ihi, MatrixH& h,
             VectorWR& wr, VectorWI& wi, MatrixZ& z, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixH >::value_type, typename traits::vector_traits<
+ VectorWR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixH >::value_type, typename traits::vector_traits<
+ VectorWI >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixH >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( job == 'E' || job == 'S' );
         assert( compz == 'N' || compz == 'I' || compz == 'V' );
@@ -144,6 +155,12 @@
     static void compute( char const job, char const compz,
             integer_t const ilo, integer_t const ihi, MatrixH& h, VectorW& w,
             MatrixZ& z, integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixH >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixH >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( job == 'E' || job == 'S' );
         assert( compz == 'N' || compz == 'I' || compz == 'V' );
@@ -194,7 +211,6 @@
             z, info, work );
     return info;
 }
-
 // template function to call hseqr
 template< typename MatrixH, typename VectorW, typename MatrixZ,
         typename Workspace >
@@ -208,7 +224,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/labrd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/labrd.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/labrd.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -82,6 +84,24 @@
             typename MatrixY >
     static void compute( MatrixA& a, VectorD& d, VectorE& e, VectorTAUQ& tauq,
             VectorTAUP& taup, MatrixX& x, MatrixY& y ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorD >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAUQ >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAUP >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixY >::value_type > );
 #ifndef NDEBUG
         assert( traits::leading_dimension(a) >= std::max(1,
                 traits::matrix_size1(a)) );
@@ -115,6 +135,21 @@
             typename MatrixY >
     static void compute( MatrixA& a, VectorD& d, VectorE& e, VectorTAUQ& tauq,
             VectorTAUP& taup, MatrixX& x, MatrixY& y ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAUQ >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAUP >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixY >::value_type > );
 #ifndef NDEBUG
         assert( traits::leading_dimension(a) >= std::max(1,
                 traits::matrix_size1(a)) );
@@ -150,7 +185,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/lacon.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/lacon.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/lacon.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -68,6 +70,7 @@
     template< typename VectorX, typename V, typename ISGN >
     static void compute( integer_t const n, VectorX& x, real_type& est,
             integer_t& kase, detail::workspace2< V, ISGN > work ) {
+
 #ifndef NDEBUG
         assert( n >= 1 );
         assert( traits::vector_size(work.select(real_type()) >=
@@ -116,6 +119,7 @@
     template< typename VectorX, typename V >
     static void compute( integer_t const n, VectorX& x, real_type& est,
             integer_t& kase, detail::workspace1< V > work ) {
+
 #ifndef NDEBUG
         assert( n >= 1 );
         assert( traits::vector_size(work.select(value_type()) >=
@@ -157,7 +161,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/laebz.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/laebz.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/laebz.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -70,6 +72,21 @@
             VectorNVAL& nval, MatrixAB& ab, VectorC& c, integer_t& mout,
             MatrixNAB& nab, integer_t& info, detail::workspace2< WORK,
             IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE2 >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::matrix_traits<
+ MatrixAB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorC >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorNVAL >::value_type, typename traits::matrix_traits<
+ MatrixNAB >::value_type > );
 #ifndef NDEBUG
         assert( traits::vector_size(d) >= n );
         assert( traits::vector_size(e) >= n );
@@ -151,7 +168,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/larz.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/larz.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/larz.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -77,6 +79,9 @@
     static void compute( char const side, integer_t const l, VectorV& v,
             integer_t const incv, real_type const tau, MatrixC& c,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorV >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
 #ifndef NDEBUG
         assert( side == 'L' || side == 'R' );
         assert( traits::leading_dimension(c) >= std::max(1,
@@ -127,8 +132,11 @@
     // user-defined workspace specialization
     template< typename VectorV, typename MatrixC, typename WORK >
     static void compute( char const side, integer_t const l, VectorV& v,
- integer_t const incv, traits::complex_f const tau, MatrixC& c,
+ integer_t const incv, value_type const tau, MatrixC& c,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorV >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
 #ifndef NDEBUG
         assert( side == 'L' || side == 'R' );
         assert( traits::leading_dimension(c) >= std::max(1,
@@ -146,7 +154,7 @@
     // minimal workspace specialization
     template< typename VectorV, typename MatrixC >
     static void compute( char const side, integer_t const l, VectorV& v,
- integer_t const incv, traits::complex_f const tau, MatrixC& c,
+ integer_t const incv, value_type const tau, MatrixC& c,
             minimal_workspace work ) {
         traits::detail::array< value_type > tmp_work( min_size_work( side,
                 traits::matrix_size1(c), traits::matrix_size2(c) ) );
@@ -156,7 +164,7 @@
     // optimal workspace specialization
     template< typename VectorV, typename MatrixC >
     static void compute( char const side, integer_t const l, VectorV& v,
- integer_t const incv, traits::complex_f const tau, MatrixC& c,
+ integer_t const incv, value_type const tau, MatrixC& c,
             optimal_workspace work ) {
         compute( side, l, v, incv, tau, c, minimal_workspace() );
     }
@@ -174,19 +182,8 @@
 // template function to call larz
 template< typename VectorV, typename MatrixC, typename Workspace >
 inline integer_t larz( char const side, integer_t const l, VectorV& v,
- integer_t const incv,
- typename traits::vector_traits< VectorV >::value_type const tau,
- MatrixC& c, Workspace work = optimal_workspace() ) {
- typedef typename traits::vector_traits< VectorV >::value_type value_type;
- integer_t info(0);
- larz_impl< value_type >::compute( side, l, v, incv, tau, c, work );
- return info;
-}
-
-// template function to call larz
-template< typename VectorV, typename MatrixC, typename Workspace >
-inline integer_t larz( char const side, integer_t const l, VectorV& v,
- integer_t const incv, traits::complex_f const tau, MatrixC& c,
+ integer_t const incv, typename traits::vector_traits<
+ VectorV >::value_type const tau, MatrixC& c,
         Workspace work = optimal_workspace() ) {
     typedef typename traits::vector_traits< VectorV >::value_type value_type;
     integer_t info(0);
@@ -194,7 +191,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/latrd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/latrd.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/latrd.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -73,6 +75,15 @@
             typename MatrixW >
     static void compute( integer_t const nb, MatrixA& a, VectorE& e,
             VectorTAU& tau, MatrixW& w ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixW >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -99,6 +110,12 @@
             typename MatrixW >
     static void compute( integer_t const nb, MatrixA& a, VectorE& e,
             VectorTAU& tau, MatrixW& w ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixW >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(h) == 'U' ||
                 traits::matrix_uplo_tag(h) == 'L' );
@@ -126,7 +143,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/latrs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/latrs.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/latrs.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -15,8 +15,13 @@
 #define BOOST_NUMERIC_BINDINGS_LAPACK_LATRS_HPP
 
 #include <boost/numeric/bindings/lapack/lapack.h>
+#include <boost/numeric/bindings/traits/is_complex.hpp>
+#include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
 #include <cassert>
 
 namespace boost {
@@ -61,8 +66,46 @@
 }
 
 // value-type based template
+template< typename ValueType, typename Enable = void >
+struct latrs_impl{};
+
+// real specialization
+template< typename ValueType >
+struct latrs_impl< ValueType, typename boost::enable_if< traits::is_real<ValueType> >::type > {
+
+ typedef ValueType value_type;
+ typedef typename traits::type_traits<ValueType>::real_type real_type;
+
+ // templated specialization
+ template< typename MatrixA, typename VectorX, typename VectorCNORM >
+ static void compute( char const uplo, char const trans, char const diag,
+ char const normin, MatrixA& a, VectorX& x, real_type& scale,
+ VectorCNORM& cnorm, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorCNORM >::value_type > );
+#ifndef NDEBUG
+ assert( uplo == 'U' || uplo == 'L' );
+ assert( trans == 'N' || trans == 'T' || trans == 'C' );
+ assert( diag == 'N' || diag == 'U' );
+ assert( normin == 'Y' || normin == 'N' );
+ assert( traits::matrix_size2(a) >= 0 );
+ assert( traits::leading_dimension(a) >= ?MAX );
+ assert( traits::vector_size(x) >= traits::matrix_size2(a) );
+#endif
+ detail::latrs( uplo, trans, diag, normin, traits::matrix_size2(a),
+ traits::matrix_storage(a), traits::leading_dimension(a),
+ traits::vector_storage(x), scale,
+ traits::vector_storage(cnorm), info );
+ }
+};
+
+// complex specialization
 template< typename ValueType >
-struct latrs_impl {
+struct latrs_impl< ValueType, typename boost::enable_if< traits::is_complex<ValueType> >::type > {
 
     typedef ValueType value_type;
     typedef typename traits::type_traits<ValueType>::real_type real_type;
@@ -72,6 +115,9 @@
     static void compute( char const uplo, char const trans, char const diag,
             char const normin, MatrixA& a, VectorX& x, real_type& scale,
             VectorCNORM& cnorm, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorX >::value_type > );
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( trans == 'N' || trans == 'T' || trans == 'C' );
@@ -102,7 +148,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/latrz.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/latrz.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/latrz.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -70,8 +72,11 @@
 
     // user-defined workspace specialization
     template< typename MatrixA, typename VectorTAU, typename WORK >
- static void compute( MatrixA& a, VectorTAU& tau,
- detail::workspace1< WORK > work ) {
+ static void compute( MatrixA& a, VectorTAU& tau, detail::workspace1<
+ WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size2(a) >= 0 );
@@ -116,8 +121,11 @@
 
     // user-defined workspace specialization
     template< typename MatrixA, typename VectorTAU, typename WORK >
- static void compute( MatrixA& a, VectorTAU& tau,
- detail::workspace1< WORK > work ) {
+ static void compute( MatrixA& a, VectorTAU& tau, detail::workspace1<
+ WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size2(a) >= 0 );
@@ -164,7 +172,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/opgtr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/opgtr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/opgtr.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -54,6 +56,12 @@
             typename WORK >
     static void compute( char const uplo, VectorAP& ap, VectorTAU& tau,
             MatrixQ& q, integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorAP >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorAP >::value_type, typename traits::matrix_traits<
+ MatrixQ >::value_type > );
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( traits::matrix_size2(q) >= 0 );
@@ -104,7 +112,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/opmtr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/opmtr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/opmtr.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -57,6 +59,12 @@
     static void compute( char const side, char const uplo, char const trans,
             VectorAP& ap, VectorTAU& tau, MatrixC& c, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorAP >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorAP >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
 #ifndef NDEBUG
         assert( side == 'L' || side == 'R' );
         assert( uplo == 'U' || uplo == 'L' );
@@ -116,7 +124,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orgbr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orgbr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orgbr.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -55,6 +57,9 @@
     static void compute( char const vect, integer_t const m,
             integer_t const n, integer_t const k, MatrixA& a, VectorTAU& tau,
             integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( vect == 'Q' || vect == 'P' );
         assert( m >= 0 );
@@ -110,7 +115,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orghr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orghr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orghr.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -55,6 +57,9 @@
     static void compute( integer_t const n, integer_t const ilo,
             integer_t const ihi, MatrixA& a, VectorTAU& tau, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( n >= 0 );
         assert( traits::leading_dimension(a) >= std::max(1,n) );
@@ -109,7 +114,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orglq.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orglq.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orglq.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -55,6 +57,9 @@
     static void compute( integer_t const m, integer_t const n,
             integer_t const k, MatrixA& a, VectorTAU& tau, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( m >= 0 );
         assert( n >= m );
@@ -110,7 +115,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orgql.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orgql.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orgql.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -55,6 +57,9 @@
     static void compute( integer_t const m, integer_t const n,
             integer_t const k, MatrixA& a, VectorTAU& tau, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( m >= 0 );
         assert( n >= n );
@@ -110,7 +115,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orgqr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orgqr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orgqr.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -55,6 +57,9 @@
     static void compute( integer_t const m, integer_t const n,
             integer_t const k, MatrixA& a, VectorTAU& tau, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( m >= 0 );
         assert( n >= n );
@@ -110,7 +115,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orgrq.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orgrq.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orgrq.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -55,6 +57,9 @@
     static void compute( integer_t const m, integer_t const n,
             integer_t const k, MatrixA& a, VectorTAU& tau, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( m >= 0 );
         assert( n >= m );
@@ -110,7 +115,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orgtr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orgtr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orgtr.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -54,6 +56,9 @@
     template< typename MatrixA, typename VectorTAU, typename WORK >
     static void compute( integer_t const n, MatrixA& a, VectorTAU& tau,
             integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -107,7 +112,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

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 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -61,6 +63,12 @@
     static void compute( char const vect, char const side, char const trans,
             integer_t const k, MatrixA& a, VectorTAU& tau, MatrixC& c,
             integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
 #ifndef NDEBUG
         assert( vect == 'Q' || vect == 'P' );
         assert( side == 'L' || side == 'R' );
@@ -133,7 +141,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormhr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormhr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormhr.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -61,8 +63,14 @@
             typename WORK >
     static void compute( char const side, char const trans,
             integer_t const ilo, integer_t const ihi, MatrixA& a,
- VectorTAU& tau, MatrixC& c, integer_t& info,
- detail::workspace1< WORK > work ) {
+ VectorTAU& tau, MatrixC& c, integer_t& info, detail::workspace1<
+ WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
 #ifndef NDEBUG
         assert( side == 'L' || side == 'R' );
         assert( trans == 'N' || trans == 'T' );
@@ -134,7 +142,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

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 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -60,6 +62,12 @@
     static void compute( char const side, char const trans, integer_t const k,
             MatrixA& a, VectorTAU& tau, MatrixC& c, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
 #ifndef NDEBUG
         assert( side == 'L' || side == 'R' );
         assert( trans == 'N' || trans == 'T' );
@@ -129,7 +137,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

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 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -60,6 +62,12 @@
     static void compute( char const side, char const trans, integer_t const k,
             MatrixA& a, VectorTAU& tau, MatrixC& c, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
 #ifndef NDEBUG
         assert( side == 'L' || side == 'R' );
         assert( trans == 'N' || trans == 'T' );
@@ -128,7 +136,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormqr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormqr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormqr.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -60,6 +62,12 @@
     static void compute( char const side, char const trans, integer_t const k,
             MatrixA& a, VectorTAU& tau, MatrixC& c, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
 #ifndef NDEBUG
         assert( side == 'L' || side == 'R' );
         assert( trans == 'N' || trans == 'T' );
@@ -128,7 +136,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

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 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -60,6 +62,12 @@
     static void compute( char const side, char const trans, integer_t const k,
             MatrixA& a, VectorTAU& tau, MatrixC& c, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
 #ifndef NDEBUG
         assert( side == 'L' || side == 'R' );
         assert( trans == 'N' || trans == 'T' );
@@ -129,7 +137,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

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 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -61,6 +63,12 @@
     static void compute( char const side, char const trans, integer_t const k,
             MatrixA& a, VectorTAU& tau, MatrixC& c, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
 #ifndef NDEBUG
         assert( side == 'L' || side == 'R' );
         assert( trans == 'N' || trans == 'T' );
@@ -127,7 +135,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormtr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormtr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormtr.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -58,8 +60,14 @@
     template< typename MatrixA, typename VectorTAU, typename MatrixC,
             typename WORK >
     static void compute( char const side, char const trans, MatrixA& a,
- VectorTAU& tau, MatrixC& c, integer_t& info,
- detail::workspace1< WORK > work ) {
+ VectorTAU& tau, MatrixC& c, integer_t& info, detail::workspace1<
+ WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
 #ifndef NDEBUG
         assert( side == 'L' || side == 'R' );
         assert( traits::matrix_uplo_tag(a) == 'U' ||
@@ -129,7 +137,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbcon.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbcon.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbcon.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -78,6 +80,7 @@
             integer_t const kd, MatrixAB& ab, real_type const anorm,
             real_type& rcond, integer_t& info, detail::workspace2< WORK,
             IWORK > work ) {
+
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( n >= 0 );
@@ -135,6 +138,7 @@
             integer_t const kd, MatrixAB& ab, real_type const anorm,
             real_type& rcond, integer_t& info, detail::workspace2< WORK,
             RWORK > work ) {
+
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( n >= 0 );
@@ -183,10 +187,9 @@
 // template function to call pbcon
 template< typename MatrixAB, typename Workspace >
 inline integer_t pbcon( char const uplo, integer_t const n,
- integer_t const kd, MatrixAB& ab,
- typename traits::matrix_traits< MatrixAB >::value_type const anorm,
- typename traits::matrix_traits< MatrixAB >::value_type& rcond,
- Workspace work = optimal_workspace() ) {
+ integer_t const kd, MatrixAB& ab, typename traits::matrix_traits<
+ MatrixAB >::value_type const anorm, typename traits::matrix_traits<
+ MatrixAB >::value_type& rcond, Workspace work = optimal_workspace() ) {
     typedef typename traits::matrix_traits< MatrixAB >::value_type value_type;
     integer_t info(0);
     pbcon_impl< value_type >::compute( uplo, n, kd, ab, anorm, rcond,
@@ -194,7 +197,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbequ.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbequ.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbequ.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -15,8 +15,13 @@
 #define BOOST_NUMERIC_BINDINGS_LAPACK_PBEQU_HPP
 
 #include <boost/numeric/bindings/lapack/lapack.h>
+#include <boost/numeric/bindings/traits/is_complex.hpp>
+#include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
 #include <cassert>
 
 namespace boost {
@@ -53,8 +58,39 @@
 }
 
 // value-type based template
+template< typename ValueType, typename Enable = void >
+struct pbequ_impl{};
+
+// real specialization
+template< typename ValueType >
+struct pbequ_impl< ValueType, typename boost::enable_if< traits::is_real<ValueType> >::type > {
+
+ typedef ValueType value_type;
+ typedef typename traits::type_traits<ValueType>::real_type real_type;
+
+ // templated specialization
+ template< typename MatrixAB, typename VectorS >
+ static void compute( integer_t const n, integer_t const kd, MatrixAB& ab,
+ VectorS& s, real_type& scond, real_type& amax, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::vector_traits<
+ VectorS >::value_type > );
+#ifndef NDEBUG
+ assert( traits::matrix_uplo_tag(a) == 'U' ||
+ traits::matrix_uplo_tag(a) == 'L' );
+ assert( n >= 0 );
+ assert( kd >= 0 );
+ assert( traits::leading_dimension(ab) >= kd+1 );
+#endif
+ detail::pbequ( traits::matrix_uplo_tag(a), n, kd,
+ traits::matrix_storage(ab), traits::leading_dimension(ab),
+ traits::vector_storage(s), scond, amax, info );
+ }
+};
+
+// complex specialization
 template< typename ValueType >
-struct pbequ_impl {
+struct pbequ_impl< ValueType, typename boost::enable_if< traits::is_complex<ValueType> >::type > {
 
     typedef ValueType value_type;
     typedef typename traits::type_traits<ValueType>::real_type real_type;
@@ -63,6 +99,7 @@
     template< typename MatrixAB, typename VectorS >
     static void compute( integer_t const n, integer_t const kd, MatrixAB& ab,
             VectorS& s, real_type& scond, real_type& amax, integer_t& info ) {
+
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -80,16 +117,15 @@
 // template function to call pbequ
 template< typename MatrixAB, typename VectorS >
 inline integer_t pbequ( integer_t const n, integer_t const kd,
- MatrixAB& ab, VectorS& s,
- typename traits::matrix_traits< MatrixAB >::value_type& scond,
- typename traits::matrix_traits< MatrixAB >::value_type& amax ) {
+ MatrixAB& ab, VectorS& s, typename traits::matrix_traits<
+ MatrixAB >::value_type& scond, typename traits::matrix_traits<
+ MatrixAB >::value_type& amax ) {
     typedef typename traits::matrix_traits< MatrixAB >::value_type value_type;
     integer_t info(0);
     pbequ_impl< value_type >::compute( n, kd, ab, s, scond, amax, info );
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbrfs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbrfs.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbrfs.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -92,6 +94,21 @@
             MatrixAFB& afb, MatrixB& b, MatrixX& x, VectorFERR& ferr,
             VectorBERR& berr, integer_t& info, detail::workspace2< WORK,
             IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixAFB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::vector_traits<
+ VectorFERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -164,6 +181,18 @@
             MatrixAFB& afb, MatrixB& b, MatrixX& x, VectorFERR& ferr,
             VectorBERR& berr, integer_t& info, detail::workspace2< WORK,
             RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorFERR >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixAFB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -237,7 +266,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbstf.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbstf.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbstf.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -57,6 +59,7 @@
     template< typename MatrixAB >
     static void compute( integer_t const n, integer_t const kd, MatrixAB& ab,
             integer_t& info ) {
+
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -81,7 +84,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbtrf.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbtrf.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbtrf.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -57,6 +59,7 @@
     template< typename MatrixAB >
     static void compute( integer_t const n, integer_t const kd, MatrixAB& ab,
             integer_t& info ) {
+
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -81,7 +84,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbtrs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbtrs.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbtrs.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -63,6 +65,9 @@
     template< typename MatrixAB, typename MatrixB >
     static void compute( char const uplo, integer_t const n,
             integer_t const kd, MatrixAB& ab, MatrixB& b, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( n >= 0 );
@@ -89,7 +94,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pocon.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pocon.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pocon.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -76,6 +78,7 @@
     template< typename MatrixA, typename WORK, typename IWORK >
     static void compute( MatrixA& a, real_type const anorm, real_type& rcond,
             integer_t& info, detail::workspace2< WORK, IWORK > work ) {
+
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -132,6 +135,7 @@
     template< typename MatrixA, typename WORK, typename RWORK >
     static void compute( MatrixA& a, real_type const anorm, real_type& rcond,
             integer_t& info, detail::workspace2< WORK, RWORK > work ) {
+
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -180,17 +184,15 @@
 
 // template function to call pocon
 template< typename MatrixA, typename Workspace >
-inline integer_t pocon( MatrixA& a,
- typename traits::matrix_traits< MatrixA >::value_type const anorm,
- typename traits::matrix_traits< MatrixA >::value_type& rcond,
- Workspace work = optimal_workspace() ) {
+inline integer_t pocon( MatrixA& a, typename traits::matrix_traits<
+ MatrixA >::value_type const anorm, typename traits::matrix_traits<
+ MatrixA >::value_type& rcond, Workspace work = optimal_workspace() ) {
     typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
     integer_t info(0);
     pocon_impl< value_type >::compute( a, anorm, rcond, info, work );
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/poequ.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/poequ.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/poequ.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -15,8 +15,13 @@
 #define BOOST_NUMERIC_BINDINGS_LAPACK_POEQU_HPP
 
 #include <boost/numeric/bindings/lapack/lapack.h>
+#include <boost/numeric/bindings/traits/is_complex.hpp>
+#include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
 #include <cassert>
 
 namespace boost {
@@ -51,8 +56,37 @@
 }
 
 // value-type based template
+template< typename ValueType, typename Enable = void >
+struct poequ_impl{};
+
+// real specialization
+template< typename ValueType >
+struct poequ_impl< ValueType, typename boost::enable_if< traits::is_real<ValueType> >::type > {
+
+ typedef ValueType value_type;
+ typedef typename traits::type_traits<ValueType>::real_type real_type;
+
+ // templated specialization
+ template< typename MatrixA, typename VectorS >
+ static void compute( MatrixA& a, VectorS& s, real_type& scond,
+ real_type& amax, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorS >::value_type > );
+#ifndef NDEBUG
+ assert( traits::matrix_size2(a) >= 0 );
+ assert( traits::leading_dimension(a) >= std::max(1,
+ traits::matrix_size2(a)) );
+#endif
+ detail::poequ( traits::matrix_size2(a), traits::matrix_storage(a),
+ traits::leading_dimension(a), traits::vector_storage(s),
+ scond, amax, info );
+ }
+};
+
+// complex specialization
 template< typename ValueType >
-struct poequ_impl {
+struct poequ_impl< ValueType, typename boost::enable_if< traits::is_complex<ValueType> >::type > {
 
     typedef ValueType value_type;
     typedef typename traits::type_traits<ValueType>::real_type real_type;
@@ -61,6 +95,7 @@
     template< typename MatrixA, typename VectorS >
     static void compute( MatrixA& a, VectorS& s, real_type& scond,
             real_type& amax, integer_t& info ) {
+
 #ifndef NDEBUG
         assert( traits::matrix_size2(a) >= 0 );
         assert( traits::leading_dimension(a) >= std::max(1,
@@ -84,7 +119,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/porfs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/porfs.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/porfs.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -91,6 +93,21 @@
     static void compute( MatrixA& a, MatrixAF& af, MatrixB& b, MatrixX& x,
             VectorFERR& ferr, VectorBERR& berr, integer_t& info,
             detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixAF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorFERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -167,6 +184,18 @@
     static void compute( MatrixA& a, MatrixAF& af, MatrixB& b, MatrixX& x,
             VectorFERR& ferr, VectorBERR& berr, integer_t& info,
             detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorFERR >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixAF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -244,7 +273,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/potrf.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/potrf.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/potrf.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -56,6 +58,7 @@
     // templated specialization
     template< typename MatrixA >
     static void compute( MatrixA& a, integer_t& info ) {
+
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -79,7 +82,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/potri.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/potri.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/potri.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -56,6 +58,7 @@
     // templated specialization
     template< typename MatrixA >
     static void compute( MatrixA& a, integer_t& info ) {
+
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -79,7 +82,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/potrs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/potrs.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/potrs.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -62,6 +64,9 @@
     // templated specialization
     template< typename MatrixA, typename MatrixB >
     static void compute( MatrixA& a, MatrixB& b, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -89,7 +94,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pprfs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pprfs.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pprfs.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -89,6 +91,21 @@
     static void compute( integer_t const n, MatrixAP& ap, VectorAFP& afp,
             MatrixB& b, MatrixX& x, VectorFERR& ferr, VectorBERR& berr,
             integer_t& info, detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::vector_traits<
+ VectorAFP >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::vector_traits<
+ VectorFERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -156,6 +173,18 @@
     static void compute( integer_t const n, MatrixAP& ap, VectorAFP& afp,
             MatrixB& b, MatrixX& x, VectorFERR& ferr, VectorBERR& berr,
             integer_t& info, detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorFERR >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::vector_traits<
+ VectorAFP >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -224,7 +253,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pptrs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pptrs.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pptrs.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -63,6 +65,9 @@
     template< typename VectorAP, typename MatrixB >
     static void compute( integer_t const n, VectorAP& ap, MatrixB& b,
             integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorAP >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -86,7 +91,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pteqr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pteqr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pteqr.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,8 +17,13 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/lapack/workspace.hpp>
 #include <boost/numeric/bindings/traits/detail/array.hpp>
+#include <boost/numeric/bindings/traits/is_complex.hpp>
+#include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
 #include <cassert>
 
 namespace boost {
@@ -55,8 +60,12 @@
 }
 
 // value-type based template
+template< typename ValueType, typename Enable = void >
+struct pteqr_impl{};
+
+// real specialization
 template< typename ValueType >
-struct pteqr_impl {
+struct pteqr_impl< ValueType, typename boost::enable_if< traits::is_real<ValueType> >::type > {
 
     typedef ValueType value_type;
     typedef typename traits::type_traits<ValueType>::real_type real_type;
@@ -65,8 +74,64 @@
     template< typename VectorD, typename VectorE, typename MatrixZ,
             typename WORK >
     static void compute( char const compz, integer_t const n, VectorD& d,
- VectorE& e, MatrixZ& z, integer_t& info,
- detail::workspace1< WORK > work ) {
+ VectorE& e, MatrixZ& z, integer_t& info, detail::workspace1<
+ WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
+#ifndef NDEBUG
+ assert( compz == 'N' || compz == 'V' || compz == 'I' );
+ assert( n >= 0 );
+ assert( traits::vector_size(d) >= n );
+ assert( traits::vector_size(e) >= n-1 );
+ assert( traits::vector_size(work.select(real_type()) >= min_size_work(
+ n )));
+#endif
+ detail::pteqr( compz, n, traits::vector_storage(d),
+ traits::vector_storage(e), traits::matrix_storage(z),
+ traits::leading_dimension(z),
+ traits::vector_storage(work.select(real_type())), info );
+ }
+
+ // minimal workspace specialization
+ template< typename VectorD, typename VectorE, typename MatrixZ >
+ static void compute( char const compz, integer_t const n, VectorD& d,
+ VectorE& e, MatrixZ& z, integer_t& info, minimal_workspace work ) {
+ traits::detail::array< real_type > tmp_work( min_size_work( n ) );
+ compute( compz, n, d, e, z, info, workspace( tmp_work ) );
+ }
+
+ // optimal workspace specialization
+ template< typename VectorD, typename VectorE, typename MatrixZ >
+ static void compute( char const compz, integer_t const n, VectorD& d,
+ VectorE& e, MatrixZ& z, integer_t& info, optimal_workspace work ) {
+ compute( compz, n, d, e, z, info, minimal_workspace() );
+ }
+
+ static integer_t min_size_work( integer_t const n ) {
+ return 4*n;
+ }
+};
+
+// complex specialization
+template< typename ValueType >
+struct pteqr_impl< ValueType, typename boost::enable_if< traits::is_complex<ValueType> >::type > {
+
+ typedef ValueType value_type;
+ typedef typename traits::type_traits<ValueType>::real_type real_type;
+
+ // user-defined workspace specialization
+ template< typename VectorD, typename VectorE, typename MatrixZ,
+ typename WORK >
+ static void compute( char const compz, integer_t const n, VectorD& d,
+ VectorE& e, MatrixZ& z, integer_t& info, detail::workspace1<
+ WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
 #ifndef NDEBUG
         assert( compz == 'N' || compz == 'V' || compz == 'I' );
         assert( n >= 0 );
@@ -113,7 +178,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ptrfs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ptrfs.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ptrfs.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -90,6 +92,27 @@
             VectorDF& df, VectorEF& ef, MatrixB& b, MatrixX& x,
             VectorFERR& ferr, VectorBERR& berr, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorDF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorEF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorFERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
 #ifndef NDEBUG
         assert( n >= 0 );
         assert( traits::matrix_size2(b) >= 0 );
@@ -158,6 +181,24 @@
             VectorE& e, VectorDF& df, VectorEF& ef, MatrixB& b, MatrixX& x,
             VectorFERR& ferr, VectorBERR& berr, integer_t& info,
             detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorDF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorFERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorE >::value_type, typename traits::vector_traits<
+ VectorEF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorE >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorE >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( n >= 0 );
@@ -233,7 +274,6 @@
             info, work );
     return info;
 }
-
 // template function to call ptrfs
 template< typename VectorD, typename VectorE, typename VectorDF,
         typename VectorEF, typename MatrixB, typename MatrixX,
@@ -249,7 +289,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pttrs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pttrs.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pttrs.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -68,6 +70,12 @@
     template< typename VectorD, typename VectorE, typename MatrixB >
     static void compute( integer_t const n, VectorD& d, VectorE& e,
             MatrixB& b, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( n >= 0 );
         assert( traits::matrix_size2(b) >= 0 );
@@ -92,6 +100,9 @@
     template< typename VectorD, typename VectorE, typename MatrixB >
     static void compute( char const uplo, integer_t const n, VectorD& d,
             VectorE& e, MatrixB& b, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorE >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( n >= 0 );
@@ -116,7 +127,6 @@
     pttrs_impl< value_type >::compute( n, d, e, b, info );
     return info;
 }
-
 // template function to call pttrs
 template< typename VectorD, typename VectorE, typename MatrixB >
 inline integer_t pttrs( char const uplo, integer_t const n, VectorD& d,
@@ -127,7 +137,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sbgst.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sbgst.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sbgst.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -58,8 +60,14 @@
             typename WORK >
     static void compute( char const vect, integer_t const n,
             integer_t const ka, integer_t const kb, MatrixAB& ab,
- MatrixBB& bb, MatrixX& x, integer_t& info,
- detail::workspace1< WORK > work ) {
+ MatrixBB& bb, MatrixX& x, integer_t& info, detail::workspace1<
+ WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixBB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
 #ifndef NDEBUG
         assert( vect == 'N' || vect == 'V' );
         assert( traits::matrix_uplo_tag(a) == 'U' ||
@@ -117,7 +125,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sbtrd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sbtrd.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sbtrd.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -59,6 +61,15 @@
     static void compute( char const vect, integer_t const n,
             integer_t const kd, MatrixAB& ab, VectorD& d, VectorE& e,
             MatrixQ& q, integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::vector_traits<
+ VectorD >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixQ >::value_type > );
 #ifndef NDEBUG
         assert( vect == 'N' || vect == 'V' || vect == 'U' );
         assert( traits::matrix_uplo_tag(a) == 'U' ||
@@ -115,7 +126,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sprfs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sprfs.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sprfs.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -92,6 +94,21 @@
             VectorIPIV& ipiv, MatrixB& b, MatrixX& x, VectorFERR& ferr,
             VectorBERR& berr, integer_t& info, detail::workspace2< WORK,
             IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixAFP >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::vector_traits<
+ VectorFERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -165,6 +182,18 @@
             VectorIPIV& ipiv, MatrixB& b, MatrixX& x, VectorFERR& ferr,
             VectorBERR& berr, integer_t& info, detail::workspace2< WORK,
             RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorFERR >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixAFP >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -238,7 +267,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sptrs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sptrs.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sptrs.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -63,6 +65,9 @@
     template< typename MatrixAP, typename VectorIPIV, typename MatrixB >
     static void compute( char const uplo, integer_t const n, MatrixAP& ap,
             VectorIPIV& ipiv, MatrixB& b, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( n >= 0 );
@@ -89,7 +94,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/stebz.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/stebz.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/stebz.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -67,6 +69,15 @@
             VectorD& d, VectorE& e, integer_t& m, integer_t& nsplit,
             VectorW& w, VectorIBLOCK& iblock, VectorISPLIT& isplit,
             integer_t& info, detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorIBLOCK >::value_type, typename traits::vector_traits<
+ VectorISPLIT >::value_type > );
 #ifndef NDEBUG
         assert( range == 'A' || range == 'V' || range == 'I' );
         assert( order == 'B' || order == 'E' );
@@ -131,14 +142,13 @@
 template< typename VectorD, typename VectorE, typename VectorW,
         typename VectorIBLOCK, typename VectorISPLIT, typename Workspace >
 inline integer_t stebz( char const range, char const order,
- integer_t const n,
- typename traits::vector_traits< VectorD >::value_type const vl,
- typename traits::vector_traits< VectorD >::value_type const vu,
- integer_t const il, integer_t const iu,
- typename traits::vector_traits< VectorD >::value_type const abstol,
- VectorD& d, VectorE& e, integer_t& m, integer_t& nsplit, VectorW& w,
- VectorIBLOCK& iblock, VectorISPLIT& isplit,
- Workspace work = optimal_workspace() ) {
+ integer_t const n, typename traits::vector_traits<
+ VectorD >::value_type const vl, typename traits::vector_traits<
+ VectorD >::value_type const vu, integer_t const il,
+ integer_t const iu, typename traits::vector_traits<
+ VectorD >::value_type const abstol, VectorD& d, VectorE& e,
+ integer_t& m, integer_t& nsplit, VectorW& w, VectorIBLOCK& iblock,
+ VectorISPLIT& isplit, Workspace work = optimal_workspace() ) {
     typedef typename traits::vector_traits< VectorD >::value_type value_type;
     integer_t info(0);
     stebz_impl< value_type >::compute( range, order, n, vl, vu, il, iu,
@@ -146,7 +156,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/stedc.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/stedc.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/stedc.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -85,6 +87,12 @@
     static void compute( char const compz, integer_t const n, VectorD& d,
             VectorE& e, MatrixZ& z, integer_t& info, detail::workspace2< WORK,
             IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( compz == 'N' || compz == 'I' || compz == 'V' );
         assert( n >= 0 );
@@ -152,6 +160,9 @@
     static void compute( char const compz, integer_t const n, VectorD& d,
             VectorE& e, MatrixZ& z, integer_t& info, detail::workspace3< WORK,
             RWORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
 #ifndef NDEBUG
         assert( compz == 'N' || compz == 'I' || compz == 'V' );
         assert( n >= 0 );
@@ -233,7 +244,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/stegr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/stegr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/stegr.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -18,8 +18,13 @@
 #include <boost/numeric/bindings/lapack/workspace.hpp>
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
+#include <boost/numeric/bindings/traits/is_complex.hpp>
+#include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
 #include <cassert>
 
 namespace boost {
@@ -73,8 +78,12 @@
 }
 
 // value-type based template
+template< typename ValueType, typename Enable = void >
+struct stegr_impl{};
+
+// real specialization
 template< typename ValueType >
-struct stegr_impl {
+struct stegr_impl< ValueType, typename boost::enable_if< traits::is_real<ValueType> >::type > {
 
     typedef ValueType value_type;
     typedef typename traits::type_traits<ValueType>::real_type real_type;
@@ -88,6 +97,106 @@
             integer_t const il, integer_t const iu, real_type const abstol,
             integer_t& m, VectorW& w, MatrixZ& z, VectorISUPPZ& isuppz,
             integer_t& info, detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
+#ifndef NDEBUG
+ assert( jobz == 'N' || jobz == 'V' );
+ assert( range == 'A' || range == 'V' || range == 'I' );
+ assert( n >= 0 );
+ assert( traits::vector_size(d) >= n );
+ assert( traits::vector_size(e) >= n );
+ assert( traits::vector_size(w) >= n );
+ assert( traits::vector_size(work.select(real_type()) >= min_size_work(
+ $CALL_MIN_SIZE )));
+ assert( traits::vector_size(work.select(integer_t()) >=
+ min_size_iwork( $CALL_MIN_SIZE )));
+#endif
+ detail::stegr( jobz, range, n, traits::vector_storage(d),
+ traits::vector_storage(e), vl, vu, il, iu, abstol, m,
+ traits::vector_storage(w), traits::matrix_storage(z),
+ traits::leading_dimension(z), traits::vector_storage(isuppz),
+ traits::vector_storage(work.select(real_type())),
+ traits::vector_size(work.select(real_type())),
+ traits::vector_storage(work.select(integer_t())),
+ traits::vector_size(work.select(integer_t())), info );
+ }
+
+ // minimal workspace specialization
+ template< typename VectorD, typename VectorE, typename VectorW,
+ typename MatrixZ, typename VectorISUPPZ >
+ static void compute( char const jobz, char const range, integer_t const n,
+ VectorD& d, VectorE& e, real_type const vl, real_type const vu,
+ integer_t const il, integer_t const iu, real_type const abstol,
+ integer_t& m, VectorW& w, MatrixZ& z, VectorISUPPZ& isuppz,
+ integer_t& info, minimal_workspace work ) {
+ traits::detail::array< real_type > tmp_work( min_size_work(
+ $CALL_MIN_SIZE ) );
+ traits::detail::array< integer_t > tmp_iwork( min_size_iwork(
+ $CALL_MIN_SIZE ) );
+ compute( jobz, range, n, d, e, vl, vu, il, iu, abstol, m, w, z,
+ isuppz, info, workspace( tmp_work, tmp_iwork ) );
+ }
+
+ // optimal workspace specialization
+ template< typename VectorD, typename VectorE, typename VectorW,
+ typename MatrixZ, typename VectorISUPPZ >
+ static void compute( char const jobz, char const range, integer_t const n,
+ VectorD& d, VectorE& e, real_type const vl, real_type const vu,
+ integer_t const il, integer_t const iu, real_type const abstol,
+ integer_t& m, VectorW& w, MatrixZ& z, VectorISUPPZ& isuppz,
+ integer_t& info, optimal_workspace work ) {
+ real_type opt_size_work;
+ integer_t opt_size_iwork;
+ detail::stegr( jobz, range, n, traits::vector_storage(d),
+ traits::vector_storage(e), vl, vu, il, iu, abstol, m,
+ traits::vector_storage(w), traits::matrix_storage(z),
+ traits::leading_dimension(z), traits::vector_storage(isuppz),
+ &opt_size_work, -1, &opt_size_iwork, -1, info );
+ traits::detail::array< real_type > tmp_work(
+ traits::detail::to_int( opt_size_work ) );
+ traits::detail::array< integer_t > tmp_iwork( opt_size_iwork );
+ compute( jobz, range, n, d, e, vl, vu, il, iu, abstol, m, w, z,
+ isuppz, info, workspace( tmp_work, tmp_iwork ) );
+ }
+
+ static integer_t min_size_work( $ARGUMENTS ) {
+ $MIN_SIZE
+ }
+
+ static integer_t min_size_iwork( $ARGUMENTS ) {
+ $MIN_SIZE
+ }
+};
+
+// complex specialization
+template< typename ValueType >
+struct stegr_impl< ValueType, typename boost::enable_if< traits::is_complex<ValueType> >::type > {
+
+ typedef ValueType value_type;
+ typedef typename traits::type_traits<ValueType>::real_type real_type;
+
+ // user-defined workspace specialization
+ template< typename VectorD, typename VectorE, typename VectorW,
+ typename MatrixZ, typename VectorISUPPZ, typename WORK,
+ typename IWORK >
+ static void compute( char const jobz, char const range, integer_t const n,
+ VectorD& d, VectorE& e, real_type const vl, real_type const vu,
+ integer_t const il, integer_t const iu, real_type const abstol,
+ integer_t& m, VectorW& w, MatrixZ& z, VectorISUPPZ& isuppz,
+ integer_t& info, detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( range == 'A' || range == 'V' || range == 'I' );
@@ -176,7 +285,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/stein.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/stein.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/stein.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,8 +17,13 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/lapack/workspace.hpp>
 #include <boost/numeric/bindings/traits/detail/array.hpp>
+#include <boost/numeric/bindings/traits/is_complex.hpp>
+#include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
 #include <cassert>
 
 namespace boost {
@@ -62,8 +67,99 @@
 }
 
 // value-type based template
+template< typename ValueType, typename Enable = void >
+struct stein_impl{};
+
+// real specialization
+template< typename ValueType >
+struct stein_impl< ValueType, typename boost::enable_if< traits::is_real<ValueType> >::type > {
+
+ typedef ValueType value_type;
+ typedef typename traits::type_traits<ValueType>::real_type real_type;
+
+ // user-defined workspace specialization
+ template< typename VectorD, typename VectorE, typename VectorW,
+ typename VectorIBLOCK, typename VectorISPLIT, typename MatrixZ,
+ typename VectorIFAIL, typename WORK, typename IWORK >
+ static void compute( integer_t const n, VectorD& d, VectorE& e,
+ integer_t const m, VectorW& w, VectorIBLOCK& iblock,
+ VectorISPLIT& isplit, MatrixZ& z, VectorIFAIL& ifail,
+ integer_t& info, detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorIBLOCK >::value_type, typename traits::vector_traits<
+ VectorISPLIT >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorIBLOCK >::value_type, typename traits::vector_traits<
+ VectorIFAIL >::value_type > );
+#ifndef NDEBUG
+ assert( n >= 0 );
+ assert( traits::vector_size(d) >= n );
+ assert( traits::vector_size(e) >= n-1 );
+ assert( traits::vector_size(w) >= n );
+ assert( traits::vector_size(isplit) >= n );
+ assert( traits::leading_dimension(z) >= std::max(1,n) );
+ assert( traits::vector_size(work.select(real_type()) >= min_size_work(
+ n )));
+ assert( traits::vector_size(work.select(integer_t()) >=
+ min_size_iwork( n )));
+#endif
+ detail::stein( n, traits::vector_storage(d),
+ traits::vector_storage(e), m, traits::vector_storage(w),
+ traits::vector_storage(iblock),
+ traits::vector_storage(isplit), traits::matrix_storage(z),
+ traits::leading_dimension(z),
+ traits::vector_storage(work.select(real_type())),
+ traits::vector_storage(work.select(integer_t())),
+ traits::vector_storage(ifail), info );
+ }
+
+ // minimal workspace specialization
+ template< typename VectorD, typename VectorE, typename VectorW,
+ typename VectorIBLOCK, typename VectorISPLIT, typename MatrixZ,
+ typename VectorIFAIL >
+ static void compute( integer_t const n, VectorD& d, VectorE& e,
+ integer_t const m, VectorW& w, VectorIBLOCK& iblock,
+ VectorISPLIT& isplit, MatrixZ& z, VectorIFAIL& ifail,
+ integer_t& info, minimal_workspace work ) {
+ traits::detail::array< real_type > tmp_work( min_size_work( n ) );
+ traits::detail::array< integer_t > tmp_iwork( min_size_iwork( n ) );
+ compute( n, d, e, m, w, iblock, isplit, z, ifail, info,
+ workspace( tmp_work, tmp_iwork ) );
+ }
+
+ // optimal workspace specialization
+ template< typename VectorD, typename VectorE, typename VectorW,
+ typename VectorIBLOCK, typename VectorISPLIT, typename MatrixZ,
+ typename VectorIFAIL >
+ static void compute( integer_t const n, VectorD& d, VectorE& e,
+ integer_t const m, VectorW& w, VectorIBLOCK& iblock,
+ VectorISPLIT& isplit, MatrixZ& z, VectorIFAIL& ifail,
+ integer_t& info, optimal_workspace work ) {
+ compute( n, d, e, m, w, iblock, isplit, z, ifail, info,
+ minimal_workspace() );
+ }
+
+ static integer_t min_size_work( integer_t const n ) {
+ return 5*n;
+ }
+
+ static integer_t min_size_iwork( integer_t const n ) {
+ return n;
+ }
+};
+
+// complex specialization
 template< typename ValueType >
-struct stein_impl {
+struct stein_impl< ValueType, typename boost::enable_if< traits::is_complex<ValueType> >::type > {
 
     typedef ValueType value_type;
     typedef typename traits::type_traits<ValueType>::real_type real_type;
@@ -76,6 +172,18 @@
             integer_t const m, VectorW& w, VectorIBLOCK& iblock,
             VectorISPLIT& isplit, MatrixZ& z, VectorIFAIL& ifail,
             integer_t& info, detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorIBLOCK >::value_type, typename traits::vector_traits<
+ VectorISPLIT >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorIBLOCK >::value_type, typename traits::vector_traits<
+ VectorIFAIL >::value_type > );
 #ifndef NDEBUG
         assert( n >= 0 );
         assert( traits::vector_size(d) >= n );
@@ -149,7 +257,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/steqr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/steqr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/steqr.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,8 +17,13 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/lapack/workspace.hpp>
 #include <boost/numeric/bindings/traits/detail/array.hpp>
+#include <boost/numeric/bindings/traits/is_complex.hpp>
+#include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
 #include <cassert>
 
 namespace boost {
@@ -55,8 +60,12 @@
 }
 
 // value-type based template
+template< typename ValueType, typename Enable = void >
+struct steqr_impl{};
+
+// real specialization
 template< typename ValueType >
-struct steqr_impl {
+struct steqr_impl< ValueType, typename boost::enable_if< traits::is_real<ValueType> >::type > {
 
     typedef ValueType value_type;
     typedef typename traits::type_traits<ValueType>::real_type real_type;
@@ -65,8 +74,64 @@
     template< typename VectorD, typename VectorE, typename MatrixZ,
             typename WORK >
     static void compute( char const compz, integer_t const n, VectorD& d,
- VectorE& e, MatrixZ& z, integer_t& info,
- detail::workspace1< WORK > work ) {
+ VectorE& e, MatrixZ& z, integer_t& info, detail::workspace1<
+ WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
+#ifndef NDEBUG
+ assert( compz == 'N' || compz == 'V' || compz == 'I' );
+ assert( n >= 0 );
+ assert( traits::vector_size(e) >= n-1 );
+ assert( traits::vector_size(work.select(real_type()) >= min_size_work(
+ $CALL_MIN_SIZE )));
+#endif
+ detail::steqr( compz, n, traits::vector_storage(d),
+ traits::vector_storage(e), traits::matrix_storage(z),
+ traits::leading_dimension(z),
+ traits::vector_storage(work.select(real_type())), info );
+ }
+
+ // minimal workspace specialization
+ template< typename VectorD, typename VectorE, typename MatrixZ >
+ static void compute( char const compz, integer_t const n, VectorD& d,
+ VectorE& e, MatrixZ& z, integer_t& info, minimal_workspace work ) {
+ traits::detail::array< real_type > tmp_work( min_size_work(
+ $CALL_MIN_SIZE ) );
+ compute( compz, n, d, e, z, info, workspace( tmp_work ) );
+ }
+
+ // optimal workspace specialization
+ template< typename VectorD, typename VectorE, typename MatrixZ >
+ static void compute( char const compz, integer_t const n, VectorD& d,
+ VectorE& e, MatrixZ& z, integer_t& info, optimal_workspace work ) {
+ compute( compz, n, d, e, z, info, minimal_workspace() );
+ }
+
+ static integer_t min_size_work( $ARGUMENTS ) {
+ $MIN_SIZE
+ }
+};
+
+// complex specialization
+template< typename ValueType >
+struct steqr_impl< ValueType, typename boost::enable_if< traits::is_complex<ValueType> >::type > {
+
+ typedef ValueType value_type;
+ typedef typename traits::type_traits<ValueType>::real_type real_type;
+
+ // user-defined workspace specialization
+ template< typename VectorD, typename VectorE, typename MatrixZ,
+ typename WORK >
+ static void compute( char const compz, integer_t const n, VectorD& d,
+ VectorE& e, MatrixZ& z, integer_t& info, detail::workspace1<
+ WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
 #ifndef NDEBUG
         assert( compz == 'N' || compz == 'V' || compz == 'I' );
         assert( n >= 0 );
@@ -113,7 +178,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sterf.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sterf.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sterf.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -49,6 +51,9 @@
     template< typename VectorD, typename VectorE >
     static void compute( integer_t const n, VectorD& d, VectorE& e,
             integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
 #ifndef NDEBUG
         assert( n >= 0 );
         assert( traits::vector_size(e) >= n-1 );
@@ -68,7 +73,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sycon.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sycon.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sycon.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -78,6 +80,7 @@
     static void compute( char const uplo, MatrixA& a, VectorIPIV& ipiv,
             real_type const anorm, real_type& rcond, integer_t& info,
             detail::workspace2< WORK, IWORK > work ) {
+
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( traits::matrix_size2(a) >= 0 );
@@ -138,6 +141,7 @@
     static void compute( char const uplo, MatrixA& a, VectorIPIV& ipiv,
             real_type const anorm, real_type& rcond, integer_t& info,
             detail::workspace1< WORK > work ) {
+
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( traits::matrix_size2(a) >= 0 );
@@ -190,7 +194,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sygst.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sygst.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sygst.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -51,6 +53,9 @@
     template< typename MatrixA, typename MatrixB >
     static void compute( integer_t const itype, integer_t const n, MatrixA& a,
             MatrixB& b, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -76,7 +81,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/syrfs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/syrfs.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/syrfs.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -91,6 +93,21 @@
     static void compute( MatrixA& a, MatrixAF& af, VectorIPIV& ipiv,
             MatrixB& b, MatrixX& x, VectorFERR& ferr, VectorBERR& berr,
             integer_t& info, detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixAF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorFERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -170,6 +187,18 @@
     static void compute( MatrixA& a, MatrixAF& af, VectorIPIV& ipiv,
             MatrixB& b, MatrixX& x, VectorFERR& ferr, VectorBERR& berr,
             integer_t& info, detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorFERR >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixAF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -250,7 +279,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytrd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytrd.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytrd.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -55,6 +57,15 @@
             typename VectorTAU, typename WORK >
     static void compute( MatrixA& a, VectorD& d, VectorE& e, VectorTAU& tau,
             integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorD >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -117,7 +128,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytrf.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytrf.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytrf.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -73,6 +75,7 @@
     template< typename MatrixA, typename VectorIPIV, typename WORK >
     static void compute( MatrixA& a, VectorIPIV& ipiv, integer_t& info,
             detail::workspace1< WORK > work ) {
+
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -128,6 +131,7 @@
     template< typename MatrixA, typename VectorIPIV, typename WORK >
     static void compute( MatrixA& a, VectorIPIV& ipiv, integer_t& info,
             detail::workspace1< WORK > work ) {
+
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -183,7 +187,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytri.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytri.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytri.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -72,6 +74,7 @@
     template< typename MatrixA, typename VectorIPIV, typename WORK >
     static void compute( char const uplo, MatrixA& a, VectorIPIV& ipiv,
             integer_t& info, detail::workspace1< WORK > work ) {
+
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( traits::matrix_size2(a) >= 0 );
@@ -119,6 +122,7 @@
     template< typename MatrixA, typename VectorIPIV, typename WORK >
     static void compute( char const uplo, MatrixA& a, VectorIPIV& ipiv,
             integer_t& info, detail::workspace1< WORK > work ) {
+
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( traits::matrix_size2(a) >= 0 );
@@ -166,7 +170,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytrs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytrs.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytrs.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -66,6 +68,9 @@
     template< typename MatrixA, typename VectorIPIV, typename MatrixB >
     static void compute( char const uplo, MatrixA& a, VectorIPIV& ipiv,
             MatrixB& b, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( traits::matrix_size2(a) >= 0 );
@@ -94,7 +99,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tbcon.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tbcon.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tbcon.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -80,6 +82,7 @@
             integer_t const n, integer_t const kd, MatrixAB& ab,
             real_type& rcond, integer_t& info, detail::workspace2< WORK,
             IWORK > work ) {
+
 #ifndef NDEBUG
         assert( norm == '1' || norm == 'O' || norm == 'I' );
         assert( uplo == 'U' || uplo == 'L' );
@@ -140,6 +143,7 @@
             integer_t const n, integer_t const kd, MatrixAB& ab,
             real_type& rcond, integer_t& info, detail::workspace2< WORK,
             RWORK > work ) {
+
 #ifndef NDEBUG
         assert( norm == '1' || norm == 'O' || norm == 'I' );
         assert( uplo == 'U' || uplo == 'L' );
@@ -201,7 +205,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tbrfs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tbrfs.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tbrfs.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -92,6 +94,18 @@
             integer_t const n, integer_t const kd, MatrixAB& ab, MatrixB& b,
             MatrixX& x, VectorFERR& ferr, VectorBERR& berr, integer_t& info,
             detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::vector_traits<
+ VectorFERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( trans == 'N' || trans == 'T' || trans == 'C' );
@@ -165,6 +179,15 @@
             integer_t const n, integer_t const kd, MatrixAB& ab, MatrixB& b,
             MatrixX& x, VectorFERR& ferr, VectorBERR& berr, integer_t& info,
             detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorFERR >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( trans == 'N' || trans == 'T' || trans == 'C' );
@@ -238,7 +261,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tbtrs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tbtrs.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tbtrs.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -72,6 +74,9 @@
     static void compute( char const uplo, char const trans, char const diag,
             integer_t const n, integer_t const kd, MatrixAB& ab, MatrixB& b,
             integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( trans == 'N' || trans == 'T' || trans == 'C' );
@@ -102,7 +107,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgevc.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgevc.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgevc.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -91,6 +93,15 @@
             VectorSELECT& select, integer_t const n, MatrixS& s, MatrixP& p,
             MatrixVL& vl, MatrixVR& vr, integer_t const mm, integer_t& m,
             integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixS >::value_type, typename traits::matrix_traits<
+ MatrixP >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixS >::value_type, typename traits::matrix_traits<
+ MatrixVL >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixS >::value_type, typename traits::matrix_traits<
+ MatrixVR >::value_type > );
 #ifndef NDEBUG
         assert( side == 'R' || side == 'L' || side == 'B' );
         assert( howmny == 'A' || howmny == 'B' || howmny == 'S' );
@@ -152,6 +163,15 @@
             VectorSELECT& select, integer_t const n, MatrixS& s, MatrixP& p,
             MatrixVL& vl, MatrixVR& vr, integer_t const mm, integer_t& m,
             integer_t& info, detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixS >::value_type, typename traits::matrix_traits<
+ MatrixP >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixS >::value_type, typename traits::matrix_traits<
+ MatrixVL >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixS >::value_type, typename traits::matrix_traits<
+ MatrixVR >::value_type > );
 #ifndef NDEBUG
         assert( side == 'R' || side == 'L' || side == 'B' );
         assert( howmny == 'A' || howmny == 'B' || howmny == 'S' );
@@ -214,14 +234,14 @@
         VectorSELECT& select, integer_t const n, MatrixS& s, MatrixP& p,
         MatrixVL& vl, MatrixVR& vr, integer_t const mm, integer_t& m,
         Workspace work = optimal_workspace() ) {
- typedef typename traits::vector_traits< VectorSELECT >::value_type value_type;
+ typedef typename traits::vector_traits<
+ VectorSELECT >::value_type value_type;
     integer_t info(0);
     tgevc_impl< value_type >::compute( side, howmny, select, n, s, p, vl,
             vr, mm, m, info, work );
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgexc.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgexc.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgexc.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -87,6 +89,15 @@
     static void compute( logical_t const wantq, logical_t const wantz,
             integer_t const n, MatrixA& a, MatrixB& b, MatrixQ& q, MatrixZ& z,
             integer_t& ifst, integer_t& ilst, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixQ >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( n >= 0 );
         assert( traits::leading_dimension(a) >= std::max(1,n) );
@@ -118,6 +129,15 @@
             integer_t const n, MatrixA& a, MatrixB& b, MatrixQ& q, MatrixZ& z,
             integer_t const ifst, integer_t& ilst, integer_t& info,
             detail::workspace$WORKSPACE_SIZE< $WORKSPACE_TYPES > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixQ >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( n >= 0 );
         assert( traits::leading_dimension(a) >= std::max(1,n) );
@@ -168,7 +188,6 @@
             ilst, info );
     return info;
 }
-
 // template function to call tgexc
 template< typename MatrixA, typename MatrixB, typename MatrixQ,
         typename MatrixZ, typename Workspace >
@@ -183,7 +202,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgsen.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgsen.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgsen.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -114,6 +116,27 @@
             VectorALPHAI& alphai, VectorBETA& beta, MatrixQ& q, MatrixZ& z,
             integer_t& m, real_type& pl, real_type& pr, VectorDIF& dif,
             integer_t& info, detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorALPHAR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorALPHAI >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorBETA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixQ >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorDIF >::value_type > );
 #ifndef NDEBUG
         assert( traits::vector_size(select) >= n );
         assert( n >= 0 );
@@ -213,6 +236,21 @@
             MatrixQ& q, MatrixZ& z, integer_t& m, real_type& pl,
             real_type& pr, VectorDIF& dif, integer_t& info,
             detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorALPHA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorBETA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixQ >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( traits::vector_size(select) >= n );
         assert( n >= 0 );
@@ -305,13 +343,13 @@
         typename traits::vector_traits< VectorSELECT >::value_type& pl,
         typename traits::vector_traits< VectorSELECT >::value_type& pr,
         VectorDIF& dif, Workspace work = optimal_workspace() ) {
- typedef typename traits::vector_traits< VectorSELECT >::value_type value_type;
+ typedef typename traits::vector_traits<
+ VectorSELECT >::value_type value_type;
     integer_t info(0);
     tgsen_impl< value_type >::compute( ijob, wantq, wantz, select, n, a,
             b, alphar, alphai, beta, q, z, m, pl, pr, dif, info, work );
     return info;
 }
-
 // template function to call tgsen
 template< typename VectorSELECT, typename MatrixA, typename MatrixB,
         typename VectorALPHA, typename VectorBETA, typename MatrixQ,
@@ -319,18 +357,18 @@
 inline integer_t tgsen( integer_t const ijob, logical_t const wantq,
         logical_t const wantz, VectorSELECT& select, integer_t const n,
         MatrixA& a, MatrixB& b, VectorALPHA& alpha, VectorBETA& beta,
- MatrixQ& q, MatrixZ& z, integer_t& m,
- typename traits::vector_traits< VectorSELECT >::value_type& pl,
- typename traits::vector_traits< VectorSELECT >::value_type& pr,
- VectorDIF& dif, Workspace work = optimal_workspace() ) {
- typedef typename traits::vector_traits< VectorSELECT >::value_type value_type;
+ MatrixQ& q, MatrixZ& z, integer_t& m, typename traits::vector_traits<
+ VectorSELECT >::value_type& pl, typename traits::vector_traits<
+ VectorSELECT >::value_type& pr, VectorDIF& dif,
+ Workspace work = optimal_workspace() ) {
+ typedef typename traits::vector_traits<
+ VectorSELECT >::value_type value_type;
     integer_t info(0);
     tgsen_impl< value_type >::compute( ijob, wantq, wantz, select, n, a,
             b, alpha, beta, q, z, m, pl, pr, dif, info, work );
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgsja.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgsja.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgsja.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -106,8 +108,26 @@
             integer_t const k, integer_t const l, MatrixA& a, MatrixB& b,
             real_type const tola, real_type const tolb, VectorALPHA& alpha,
             VectorBETA& beta, MatrixU& u, MatrixV& v, MatrixQ& q,
- integer_t& ncycle, integer_t& info,
- detail::workspace1< WORK > work ) {
+ integer_t& ncycle, integer_t& info, detail::workspace1<
+ WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorALPHA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorBETA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixV >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixQ >::value_type > );
 #ifndef NDEBUG
         assert( jobu == 'U' || jobu == 'I' || jobu == 'N' );
         assert( jobv == 'V' || jobv == 'I' || jobv == 'N' );
@@ -184,8 +204,23 @@
             integer_t const k, integer_t const l, MatrixA& a, MatrixB& b,
             real_type const tola, real_type const tolb, VectorALPHA& alpha,
             VectorBETA& beta, MatrixU& u, MatrixV& v, MatrixQ& q,
- integer_t& ncycle, integer_t& info,
- detail::workspace1< WORK > work ) {
+ integer_t& ncycle, integer_t& info, detail::workspace1<
+ WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorALPHA >::value_type, typename traits::vector_traits<
+ VectorBETA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixV >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixQ >::value_type > );
 #ifndef NDEBUG
         assert( jobu == 'U' || jobu == 'I' || jobu == 'N' );
         assert( jobv == 'V' || jobv == 'I' || jobv == 'N' );
@@ -254,11 +289,11 @@
         typename MatrixQ, typename Workspace >
 inline integer_t tgsja( char const jobu, char const jobv,
         char const jobq, integer_t const k, integer_t const l, MatrixA& a,
- MatrixB& b,
- typename traits::matrix_traits< MatrixA >::value_type const tola,
- typename traits::matrix_traits< MatrixA >::value_type const tolb,
- VectorALPHA& alpha, VectorBETA& beta, MatrixU& u, MatrixV& v,
- MatrixQ& q, integer_t& ncycle, Workspace work = optimal_workspace() ) {
+ MatrixB& b, typename traits::matrix_traits<
+ MatrixA >::value_type const tola, typename traits::matrix_traits<
+ MatrixA >::value_type const tolb, VectorALPHA& alpha,
+ VectorBETA& beta, MatrixU& u, MatrixV& v, MatrixQ& q,
+ integer_t& ncycle, Workspace work = optimal_workspace() ) {
     typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
     integer_t info(0);
     tgsja_impl< value_type >::compute( jobu, jobv, jobq, k, l, a, b,
@@ -266,7 +301,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgsna.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgsna.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgsna.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -98,6 +100,21 @@
             MatrixVL& vl, MatrixVR& vr, VectorS& s, VectorDIF& dif,
             integer_t const mm, integer_t& m, integer_t& info,
             detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVL >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorS >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorDIF >::value_type > );
 #ifndef NDEBUG
         assert( job == 'E' || job == 'V' || job == 'B' );
         assert( howmny == 'A' || howmny == 'S' );
@@ -188,6 +205,18 @@
             MatrixVL& vl, MatrixVR& vr, VectorS& s, VectorDIF& dif,
             integer_t const mm, integer_t& m, integer_t& info,
             detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorS >::value_type, typename traits::vector_traits<
+ VectorDIF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVL >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVR >::value_type > );
 #ifndef NDEBUG
         assert( job == 'E' || job == 'V' || job == 'B' );
         assert( howmny == 'A' || howmny == 'S' );
@@ -260,14 +289,14 @@
         MatrixVL& vl, MatrixVR& vr, VectorS& s, VectorDIF& dif,
         integer_t const mm, integer_t& m,
         Workspace work = optimal_workspace() ) {
- typedef typename traits::vector_traits< VectorSELECT >::value_type value_type;
+ typedef typename traits::vector_traits<
+ VectorSELECT >::value_type value_type;
     integer_t info(0);
     tgsna_impl< value_type >::compute( job, howmny, select, n, a, b, vl,
             vr, s, dif, mm, m, info, work );
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgsyl.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgsyl.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgsyl.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -106,6 +108,21 @@
             MatrixC& c, MatrixD& d, MatrixE& e, MatrixF& f, real_type& scale,
             real_type& dif, integer_t& info, detail::workspace2< WORK,
             IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixD >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixF >::value_type > );
 #ifndef NDEBUG
         assert( trans == 'N' || trans == 'T' );
         assert( traits::vector_size(work.select(real_type()) >= min_size_work(
@@ -187,6 +204,21 @@
             MatrixC& c, MatrixD& d, MatrixE& e, MatrixF& f, real_type& scale,
             real_type& dif, integer_t& info, detail::workspace2< WORK,
             IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixD >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixF >::value_type > );
 #ifndef NDEBUG
         assert( trans == 'N' || trans == 'C' );
         assert( traits::vector_size(work.select(value_type()) >=
@@ -270,7 +302,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tprfs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tprfs.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tprfs.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -88,6 +90,18 @@
             integer_t const n, MatrixAP& ap, MatrixB& b, MatrixX& x,
             VectorFERR& ferr, VectorBERR& berr, integer_t& info,
             detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::vector_traits<
+ VectorFERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( trans == 'N' || trans == 'T' || trans == 'C' );
@@ -159,6 +173,15 @@
             integer_t const n, MatrixAP& ap, MatrixB& b, MatrixX& x,
             VectorFERR& ferr, VectorBERR& berr, integer_t& info,
             detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorFERR >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( trans == 'N' || trans == 'T' || trans == 'C' );
@@ -230,7 +253,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tptrs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tptrs.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tptrs.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -63,6 +65,9 @@
     template< typename MatrixAP, typename MatrixB >
     static void compute( char const uplo, char const trans, char const diag,
             integer_t const n, MatrixAP& ap, MatrixB& b, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( trans == 'N' || trans == 'T' || trans == 'C' );
@@ -89,7 +94,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trcon.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trcon.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trcon.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -75,8 +77,9 @@
     // user-defined workspace specialization
     template< typename MatrixA, typename WORK, typename IWORK >
     static void compute( char const norm, char const uplo, char const diag,
- MatrixA& a, real_type& rcond, integer_t& info,
- detail::workspace2< WORK, IWORK > work ) {
+ MatrixA& a, real_type& rcond, integer_t& info, detail::workspace2<
+ WORK, IWORK > work ) {
+
 #ifndef NDEBUG
         assert( norm == '1' || norm == 'O' || norm == 'I' );
         assert( uplo == 'U' || uplo == 'L' );
@@ -135,8 +138,9 @@
     // user-defined workspace specialization
     template< typename MatrixA, typename WORK, typename RWORK >
     static void compute( char const norm, char const uplo, char const diag,
- MatrixA& a, real_type& rcond, integer_t& info,
- detail::workspace2< WORK, RWORK > work ) {
+ MatrixA& a, real_type& rcond, integer_t& info, detail::workspace2<
+ WORK, RWORK > work ) {
+
 #ifndef NDEBUG
         assert( norm == '1' || norm == 'O' || norm == 'I' );
         assert( uplo == 'U' || uplo == 'L' );
@@ -189,9 +193,8 @@
 // template function to call trcon
 template< typename MatrixA, typename Workspace >
 inline integer_t trcon( char const norm, char const uplo,
- char const diag, MatrixA& a,
- typename traits::matrix_traits< MatrixA >::value_type& rcond,
- Workspace work = optimal_workspace() ) {
+ char const diag, MatrixA& a, typename traits::matrix_traits<
+ MatrixA >::value_type& rcond, Workspace work = optimal_workspace() ) {
     typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
     integer_t info(0);
     trcon_impl< value_type >::compute( norm, uplo, diag, a, rcond, info,
@@ -199,7 +202,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trevc.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trevc.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trevc.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -87,6 +89,12 @@
             VectorSELECT& select, MatrixT& t, MatrixVL& vl, MatrixVR& vr,
             integer_t const mm, integer_t& m, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixT >::value_type, typename traits::matrix_traits<
+ MatrixVL >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixT >::value_type, typename traits::matrix_traits<
+ MatrixVR >::value_type > );
 #ifndef NDEBUG
         assert( side == 'R' || side == 'L' || side == 'B' );
         assert( howmny == 'A' || howmny == 'B' || howmny == 'S' );
@@ -148,6 +156,12 @@
             VectorSELECT& select, MatrixT& t, MatrixVL& vl, MatrixVR& vr,
             integer_t const mm, integer_t& m, integer_t& info,
             detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixT >::value_type, typename traits::matrix_traits<
+ MatrixVL >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixT >::value_type, typename traits::matrix_traits<
+ MatrixVR >::value_type > );
 #ifndef NDEBUG
         assert( side == 'R' || side == 'L' || side == 'B' );
         assert( howmny == 'A' || howmny == 'B' || howmny == 'S' );
@@ -212,14 +226,14 @@
         VectorSELECT& select, MatrixT& t, MatrixVL& vl, MatrixVR& vr,
         integer_t const mm, integer_t& m,
         Workspace work = optimal_workspace() ) {
- typedef typename traits::vector_traits< VectorSELECT >::value_type value_type;
+ typedef typename traits::vector_traits<
+ VectorSELECT >::value_type value_type;
     integer_t info(0);
     trevc_impl< value_type >::compute( side, howmny, select, t, vl, vr,
             mm, m, info, work );
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trexc.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trexc.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trexc.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -76,6 +78,9 @@
     template< typename MatrixT, typename MatrixQ >
     static void compute( char const compq, MatrixT& t, MatrixQ& q,
             integer_t& ifst, integer_t& ilst, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixT >::value_type, typename traits::matrix_traits<
+ MatrixQ >::value_type > );
 #ifndef NDEBUG
         assert( compq == 'V' || compq == 'N' );
         assert( traits::matrix_size2(t) >= 0 );
@@ -105,6 +110,9 @@
     static void compute( char const compq, MatrixT& t, MatrixQ& q,
             integer_t const ifst, integer_t const ilst, integer_t& info,
             detail::workspace$WORKSPACE_SIZE< $WORKSPACE_TYPES > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixT >::value_type, typename traits::matrix_traits<
+ MatrixQ >::value_type > );
 #ifndef NDEBUG
         assert( compq == 'V' || compq == 'N' );
         assert( traits::matrix_size2(t) >= 0 );
@@ -149,7 +157,6 @@
     trexc_impl< value_type >::compute( compq, t, q, ifst, ilst, info );
     return info;
 }
-
 // template function to call trexc
 template< typename MatrixT, typename MatrixQ, typename Workspace >
 inline integer_t trexc( char const compq, MatrixT& t, MatrixQ& q,
@@ -162,7 +169,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trrfs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trrfs.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trrfs.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -92,6 +94,18 @@
             MatrixA& a, MatrixB& b, MatrixX& x, VectorFERR& ferr,
             VectorBERR& berr, integer_t& info, detail::workspace2< WORK,
             IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorFERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( trans == 'N' || trans == 'T' || trans == 'C' );
@@ -168,6 +182,15 @@
             MatrixA& a, MatrixB& b, MatrixX& x, VectorFERR& ferr,
             VectorBERR& berr, integer_t& info, detail::workspace2< WORK,
             RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorFERR >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( trans == 'N' || trans == 'T' || trans == 'C' );
@@ -243,7 +266,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trsen.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trsen.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trsen.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -65,6 +67,12 @@
             VectorSELECT& select, MatrixT& t, MatrixQ& q, VectorW& w,
             integer_t& m, real_type& s, real_type& sep, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixT >::value_type, typename traits::matrix_traits<
+ MatrixQ >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixT >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
 #ifndef NDEBUG
         assert( job == 'N' || job == 'E' || job == 'V' || job == 'B' );
         assert( compq == 'V' || compq == 'N' );
@@ -127,18 +135,18 @@
         typename VectorW, typename Workspace >
 inline integer_t trsen( char const job, char const compq,
         VectorSELECT& select, MatrixT& t, MatrixQ& q, VectorW& w,
- integer_t& m,
- typename traits::vector_traits< VectorSELECT >::value_type& s,
- typename traits::vector_traits< VectorSELECT >::value_type& sep,
+ integer_t& m, typename traits::vector_traits<
+ VectorSELECT >::value_type& s, typename traits::vector_traits<
+ VectorSELECT >::value_type& sep,
         Workspace work = optimal_workspace() ) {
- typedef typename traits::vector_traits< VectorSELECT >::value_type value_type;
+ typedef typename traits::vector_traits<
+ VectorSELECT >::value_type value_type;
     integer_t info(0);
     trsen_impl< value_type >::compute( job, compq, select, t, q, w, m, s,
             sep, info, work );
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trsna.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trsna.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trsna.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -93,6 +95,18 @@
             VectorSELECT& select, MatrixT& t, MatrixVL& vl, MatrixVR& vr,
             VectorS& s, VectorSEP& sep, integer_t const mm, integer_t& m,
             integer_t& info, detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixT >::value_type, typename traits::matrix_traits<
+ MatrixVL >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixT >::value_type, typename traits::matrix_traits<
+ MatrixVR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixT >::value_type, typename traits::vector_traits<
+ VectorS >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixT >::value_type, typename traits::vector_traits<
+ VectorSEP >::value_type > );
 #ifndef NDEBUG
         assert( job == 'E' || job == 'V' || job == 'B' );
         assert( howmny == 'A' || howmny == 'S' );
@@ -165,6 +179,15 @@
             VectorSELECT& select, MatrixT& t, MatrixVL& vl, MatrixVR& vr,
             VectorS& s, VectorSEP& sep, integer_t const mm, integer_t& m,
             integer_t& info, detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorS >::value_type, typename traits::vector_traits<
+ VectorSEP >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixT >::value_type, typename traits::matrix_traits<
+ MatrixVL >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixT >::value_type, typename traits::matrix_traits<
+ MatrixVR >::value_type > );
 #ifndef NDEBUG
         assert( job == 'E' || job == 'V' || job == 'B' );
         assert( howmny == 'A' || howmny == 'S' );
@@ -231,14 +254,14 @@
         VectorSELECT& select, MatrixT& t, MatrixVL& vl, MatrixVR& vr,
         VectorS& s, VectorSEP& sep, integer_t const mm, integer_t& m,
         Workspace work = optimal_workspace() ) {
- typedef typename traits::vector_traits< VectorSELECT >::value_type value_type;
+ typedef typename traits::vector_traits<
+ VectorSELECT >::value_type value_type;
     integer_t info(0);
     trsna_impl< value_type >::compute( job, howmny, select, t, vl, vr, s,
             sep, mm, m, info, work );
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trsyl.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trsyl.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trsyl.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -82,6 +84,12 @@
             integer_t const isgn, integer_t const m, integer_t const n,
             MatrixA& a, MatrixB& b, MatrixC& c, real_type& scale,
             integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
 #ifndef NDEBUG
         assert( trana == 'N' || trana == 'T' || trana == 'C' );
         assert( tranb == 'N' || tranb == 'T' || tranb == 'C' );
@@ -111,6 +119,12 @@
             integer_t const isgn, integer_t const m, integer_t const n,
             MatrixA& a, MatrixB& b, MatrixC& c, real_type& scale,
             integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
 #ifndef NDEBUG
         assert( trana == 'N' || trana == 'C' );
         assert( tranb == 'N' || tranb == 'C' );
@@ -132,8 +146,8 @@
 template< typename MatrixA, typename MatrixB, typename MatrixC >
 inline integer_t trsyl( char const trana, char const tranb,
         integer_t const isgn, integer_t const m, integer_t const n,
- MatrixA& a, MatrixB& b, MatrixC& c,
- typename traits::matrix_traits< MatrixA >::value_type& scale ) {
+ MatrixA& a, MatrixB& b, MatrixC& c, typename traits::matrix_traits<
+ MatrixA >::value_type& scale ) {
     typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
     integer_t info(0);
     trsyl_impl< value_type >::compute( trana, tranb, isgn, m, n, a, b, c,
@@ -141,7 +155,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trtri.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trtri.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trtri.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -57,6 +59,7 @@
     template< typename MatrixA >
     static void compute( char const uplo, char const diag, MatrixA& a,
             integer_t& info ) {
+
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( diag == 'N' || diag == 'U' );
@@ -80,7 +83,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trtrs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trtrs.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trtrs.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -71,6 +73,9 @@
     template< typename MatrixA, typename MatrixB >
     static void compute( char const uplo, char const trans, char const diag,
             MatrixA& a, MatrixB& b, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( trans == 'N' || trans == 'T' || trans == 'C' );
@@ -100,7 +105,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tzrzf.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tzrzf.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tzrzf.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -75,6 +77,9 @@
     template< typename MatrixA, typename VectorTAU, typename WORK >
     static void compute( MatrixA& a, VectorTAU& tau, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size2(a) >= traits::matrix_size1(a) );
@@ -129,6 +134,9 @@
     template< typename MatrixA, typename VectorTAU, typename WORK >
     static void compute( MatrixA& a, VectorTAU& tau, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size2(a) >= traits::matrix_size1(a) );
@@ -183,7 +191,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ungbr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ungbr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ungbr.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -61,6 +63,9 @@
     static void compute( char const vect, integer_t const m,
             integer_t const n, integer_t const k, MatrixA& a, VectorTAU& tau,
             integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( vect == 'Q' || vect == 'P' );
         assert( m >= 0 );
@@ -116,7 +121,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unghr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unghr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unghr.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -61,6 +63,9 @@
     static void compute( integer_t const n, integer_t const ilo,
             integer_t const ihi, MatrixA& a, VectorTAU& tau, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( n >= 0 );
         assert( traits::leading_dimension(a) >= std::max(1,n) );
@@ -115,7 +120,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unglq.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unglq.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unglq.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -61,6 +63,9 @@
     static void compute( integer_t const m, integer_t const n,
             integer_t const k, MatrixA& a, VectorTAU& tau, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( m >= 0 );
         assert( n >= m );
@@ -116,7 +121,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ungql.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ungql.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ungql.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -61,6 +63,9 @@
     static void compute( integer_t const m, integer_t const n,
             integer_t const k, MatrixA& a, VectorTAU& tau, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( m >= 0 );
         assert( n >= n );
@@ -116,7 +121,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ungqr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ungqr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ungqr.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -61,6 +63,9 @@
     static void compute( integer_t const m, integer_t const n,
             integer_t const k, MatrixA& a, VectorTAU& tau, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( m >= 0 );
         assert( n >= n );
@@ -116,7 +121,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ungrq.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ungrq.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ungrq.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -61,6 +63,9 @@
     static void compute( integer_t const m, integer_t const n,
             integer_t const k, MatrixA& a, VectorTAU& tau, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( m >= 0 );
         assert( n >= m );
@@ -116,7 +121,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ungtr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ungtr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ungtr.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -58,6 +60,9 @@
     template< typename MatrixA, typename VectorTAU, typename WORK >
     static void compute( integer_t const n, MatrixA& a, VectorTAU& tau,
             integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -116,7 +121,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

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 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -66,6 +68,12 @@
     static void compute( char const vect, char const side, char const trans,
             integer_t const k, MatrixA& a, VectorTAU& tau, MatrixC& c,
             integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
 #ifndef NDEBUG
         assert( vect == 'Q' || vect == 'P' );
         assert( side == 'L' || side == 'R' );
@@ -139,7 +147,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmhr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmhr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmhr.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -65,8 +67,14 @@
             typename WORK >
     static void compute( char const side, char const trans,
             integer_t const ilo, integer_t const ihi, MatrixA& a,
- VectorTAU& tau, MatrixC& c, integer_t& info,
- detail::workspace1< WORK > work ) {
+ VectorTAU& tau, MatrixC& c, integer_t& info, detail::workspace1<
+ WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
 #ifndef NDEBUG
         assert( side == 'L' || side == 'R' );
         assert( trans == 'N' || trans == 'C' );
@@ -139,7 +147,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

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 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -64,6 +66,12 @@
     static void compute( char const side, char const trans, integer_t const k,
             MatrixA& a, VectorTAU& tau, MatrixC& c, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
 #ifndef NDEBUG
         assert( side == 'L' || side == 'R' );
         assert( trans == 'N' || trans == 'C' );
@@ -134,7 +142,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

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 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -64,6 +66,12 @@
     static void compute( char const side, char const trans, integer_t const k,
             MatrixA& a, VectorTAU& tau, MatrixC& c, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
 #ifndef NDEBUG
         assert( side == 'L' || side == 'R' );
         assert( trans == 'N' || trans == 'C' );
@@ -133,7 +141,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmqr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmqr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmqr.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -64,6 +66,12 @@
     static void compute( char const side, char const trans, integer_t const k,
             MatrixA& a, VectorTAU& tau, MatrixC& c, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
 #ifndef NDEBUG
         assert( side == 'L' || side == 'R' );
         assert( trans == 'N' || trans == 'C' );
@@ -133,7 +141,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

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 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -64,6 +66,12 @@
     static void compute( char const side, char const trans, integer_t const k,
             MatrixA& a, VectorTAU& tau, MatrixC& c, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
 #ifndef NDEBUG
         assert( side == 'L' || side == 'R' );
         assert( trans == 'N' || trans == 'C' );
@@ -134,7 +142,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

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 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -64,6 +66,12 @@
     static void compute( char const side, char const trans, integer_t const k,
             MatrixA& a, VectorTAU& tau, MatrixC& c, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
 #ifndef NDEBUG
         assert( side == 'L' || side == 'R' );
         assert( trans == 'N' || trans == 'C' );
@@ -130,7 +138,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmtr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmtr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmtr.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -62,8 +64,14 @@
     template< typename MatrixA, typename VectorTAU, typename MatrixC,
             typename WORK >
     static void compute( char const side, char const trans, MatrixA& a,
- VectorTAU& tau, MatrixC& c, integer_t& info,
- detail::workspace1< WORK > work ) {
+ VectorTAU& tau, MatrixC& c, integer_t& info, detail::workspace1<
+ WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
 #ifndef NDEBUG
         assert( side == 'L' || side == 'R' );
         assert( traits::matrix_uplo_tag(a) == 'U' ||
@@ -134,7 +142,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/upgtr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/upgtr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/upgtr.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -60,6 +62,12 @@
             typename WORK >
     static void compute( char const uplo, VectorAP& ap, VectorTAU& tau,
             MatrixQ& q, integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorAP >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorAP >::value_type, typename traits::matrix_traits<
+ MatrixQ >::value_type > );
 #ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( traits::matrix_size2(q) >= 0 );
@@ -110,7 +118,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/upmtr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/upmtr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/upmtr.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -61,6 +63,12 @@
     static void compute( char const side, char const uplo, char const trans,
             VectorAP& ap, VectorTAU& tau, MatrixC& c, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorAP >::value_type, typename traits::vector_traits<
+ VectorTAU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorAP >::value_type, typename traits::matrix_traits<
+ MatrixC >::value_type > );
 #ifndef NDEBUG
         assert( side == 'L' || side == 'R' );
         assert( uplo == 'U' || uplo == 'L' );
@@ -116,7 +124,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/cgesv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/cgesv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/cgesv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -55,6 +57,12 @@
     static void compute( MatrixA& a, VectorIPIV& ipiv, MatrixB& b, MatrixX& x,
             integer_t& iter, integer_t& info, detail::workspace2< WORK,
             SWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size2(a) >= 0 );
         assert( traits::matrix_size2(b) >= 0 );
@@ -122,7 +130,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gbsv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gbsv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gbsv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -67,6 +69,9 @@
     template< typename MatrixAB, typename VectorIPIV, typename MatrixB >
     static void compute( integer_t const kl, integer_t const ku, MatrixAB& ab,
             VectorIPIV& ipiv, MatrixB& b, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size2(ab) >= 0 );
         assert( kl >= 0 );
@@ -96,7 +101,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gbsvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gbsvx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gbsvx.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -107,6 +109,27 @@
             VectorC& c, MatrixB& b, MatrixX& x, real_type& rcond,
             VectorFERR& ferr, VectorBERR& berr, integer_t& info,
             detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixAFB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::vector_traits<
+ VectorR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::vector_traits<
+ VectorC >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::vector_traits<
+ VectorFERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
 #ifndef NDEBUG
         assert( fact == 'F' || fact == 'N' || fact == 'E' );
         assert( trans == 'N' || trans == 'T' || trans == 'C' );
@@ -195,6 +218,24 @@
             VectorC& c, MatrixB& b, MatrixX& x, real_type& rcond,
             VectorFERR& ferr, VectorBERR& berr, integer_t& info,
             detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorR >::value_type, typename traits::vector_traits<
+ VectorC >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorR >::value_type, typename traits::vector_traits<
+ VectorFERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorR >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixAFB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
 #ifndef NDEBUG
         assert( fact == 'F' || fact == 'N' || fact == 'E' );
         assert( trans == 'N' || trans == 'T' || trans == 'C' );
@@ -285,7 +326,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gees.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gees.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gees.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -92,6 +94,15 @@
             MatrixA& a, integer_t& sdim, VectorWR& wr, VectorWI& wi,
             MatrixVS& vs, integer_t& info, detail::workspace2< WORK,
             BWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorWR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorWI >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVS >::value_type > );
 #ifndef NDEBUG
         assert( jobvs == 'N' || jobvs == 'V' );
         assert( sort == 'N' || sort == 'S' );
@@ -173,6 +184,12 @@
     static void compute( char const jobvs, char const sort, logical_t* select,
             MatrixA& a, integer_t& sdim, VectorW& w, MatrixVS& vs,
             integer_t& info, detail::workspace3< WORK, RWORK, BWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVS >::value_type > );
 #ifndef NDEBUG
         assert( jobvs == 'N' || jobvs == 'V' );
         assert( sort == 'N' || sort == 'S' );
@@ -263,7 +280,6 @@
             wi, vs, info, work );
     return info;
 }
-
 // template function to call gees
 template< typename MatrixA, typename VectorW, typename MatrixVS,
         typename Workspace >
@@ -277,7 +293,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/geesx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/geesx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/geesx.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -96,6 +98,15 @@
             char const sense, MatrixA& a, integer_t& sdim, VectorWR& wr,
             VectorWI& wi, MatrixVS& vs, real_type& rconde, real_type& rcondv,
             integer_t& info, detail::workspace3< WORK, IWORK, BWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorWR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorWI >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVS >::value_type > );
 #ifndef NDEBUG
         assert( jobvs == 'N' || jobvs == 'V' );
         assert( sort == 'N' || sort == 'S' );
@@ -202,6 +213,12 @@
             char const sense, MatrixA& a, integer_t& sdim, VectorW& w,
             MatrixVS& vs, real_type& rconde, real_type& rcondv,
             integer_t& info, detail::workspace3< WORK, RWORK, BWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVS >::value_type > );
 #ifndef NDEBUG
         assert( jobvs == 'N' || jobvs == 'V' );
         assert( sort == 'N' || sort == 'S' );
@@ -302,16 +319,14 @@
             sdim, wr, wi, vs, rconde, rcondv, info, work );
     return info;
 }
-
 // template function to call geesx
 template< typename MatrixA, typename VectorW, typename MatrixVS,
         typename Workspace >
 inline integer_t geesx( char const jobvs, char const sort,
         logical_t* select, char const sense, MatrixA& a, integer_t& sdim,
- VectorW& w, MatrixVS& vs,
- typename traits::matrix_traits< MatrixA >::value_type& rconde,
- typename traits::matrix_traits< MatrixA >::value_type& rcondv,
- Workspace work = optimal_workspace() ) {
+ VectorW& w, MatrixVS& vs, typename traits::matrix_traits<
+ MatrixA >::value_type& rconde, typename traits::matrix_traits<
+ MatrixA >::value_type& rcondv, Workspace work = optimal_workspace() ) {
     typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
     integer_t info(0);
     geesx_impl< value_type >::compute( jobvs, sort, select, sense, a,
@@ -319,7 +334,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/geev.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/geev.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/geev.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -90,6 +92,18 @@
     static void compute( char const jobvl, char const jobvr, MatrixA& a,
             VectorWR& wr, VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
             integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorWR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorWI >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVL >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVR >::value_type > );
 #ifndef NDEBUG
         assert( jobvl == 'N' || jobvl == 'V' );
         assert( jobvr == 'N' || jobvr == 'V' );
@@ -163,6 +177,15 @@
     static void compute( char const jobvl, char const jobvr, MatrixA& a,
             VectorW& w, MatrixVL& vl, MatrixVR& vr, integer_t& info,
             detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVL >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVR >::value_type > );
 #ifndef NDEBUG
         assert( jobvl == 'N' || jobvl == 'V' );
         assert( jobvr == 'N' || jobvr == 'V' );
@@ -242,7 +265,6 @@
             info, work );
     return info;
 }
-
 // template function to call geev
 template< typename MatrixA, typename VectorW, typename MatrixVL,
         typename MatrixVR, typename Workspace >
@@ -256,7 +278,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/geevx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/geevx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/geevx.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -106,6 +108,27 @@
             integer_t& ihi, VectorSCALE& scale, real_type& abnrm,
             VectorRCONDE& rconde, VectorRCONDV& rcondv, integer_t& info,
             detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorWR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorWI >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVL >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorSCALE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorRCONDE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorRCONDV >::value_type > );
 #ifndef NDEBUG
         assert( balanc == 'N' || balanc == 'P' || balanc == 'S' ||
                 balanc == 'B' );
@@ -222,6 +245,21 @@
             VectorSCALE& scale, real_type& abnrm, VectorRCONDE& rconde,
             VectorRCONDV& rcondv, integer_t& info, detail::workspace2< WORK,
             RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorSCALE >::value_type, typename traits::vector_traits<
+ VectorRCONDE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorSCALE >::value_type, typename traits::vector_traits<
+ VectorRCONDV >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVL >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVR >::value_type > );
 #ifndef NDEBUG
         assert( balanc == 'N' || balanc == 'P' || balanc == 'S' ||
                 balanc == 'B' );
@@ -318,10 +356,9 @@
 inline integer_t geevx( char const balanc, char const jobvl,
         char const jobvr, char const sense, MatrixA& a, VectorWR& wr,
         VectorWI& wi, MatrixVL& vl, MatrixVR& vr, integer_t& ilo,
- integer_t& ihi, VectorSCALE& scale,
- typename traits::matrix_traits< MatrixA >::value_type& abnrm,
- VectorRCONDE& rconde, VectorRCONDV& rcondv,
- Workspace work = optimal_workspace() ) {
+ integer_t& ihi, VectorSCALE& scale, typename traits::matrix_traits<
+ MatrixA >::value_type& abnrm, VectorRCONDE& rconde,
+ VectorRCONDV& rcondv, Workspace work = optimal_workspace() ) {
     typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
     integer_t info(0);
     geevx_impl< value_type >::compute( balanc, jobvl, jobvr, sense, a,
@@ -329,7 +366,6 @@
             work );
     return info;
 }
-
 // template function to call geevx
 template< typename MatrixA, typename VectorW, typename MatrixVL,
         typename MatrixVR, typename VectorSCALE, typename VectorRCONDE,
@@ -337,10 +373,9 @@
 inline integer_t geevx( char const balanc, char const jobvl,
         char const jobvr, char const sense, MatrixA& a, VectorW& w,
         MatrixVL& vl, MatrixVR& vr, integer_t& ilo, integer_t& ihi,
- VectorSCALE& scale,
- typename traits::matrix_traits< MatrixA >::value_type& abnrm,
- VectorRCONDE& rconde, VectorRCONDV& rcondv,
- Workspace work = optimal_workspace() ) {
+ VectorSCALE& scale, typename traits::matrix_traits<
+ MatrixA >::value_type& abnrm, VectorRCONDE& rconde,
+ VectorRCONDV& rcondv, Workspace work = optimal_workspace() ) {
     typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
     integer_t info(0);
     geevx_impl< value_type >::compute( balanc, jobvl, jobvr, sense, a, w,
@@ -348,7 +383,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gegv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gegv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gegv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -97,6 +99,24 @@
             MatrixB& b, VectorALPHAR& alphar, VectorALPHAI& alphai,
             VectorBETA& beta, MatrixVL& vl, MatrixVR& vr, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorALPHAR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorALPHAI >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorBETA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVL >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVR >::value_type > );
 #ifndef NDEBUG
         assert( jobvl == 'N' || jobvl == 'V' );
         assert( jobvr == 'N' || jobvr == 'V' );
@@ -178,6 +198,21 @@
             MatrixB& b, VectorALPHA& alpha, VectorBETA& beta, MatrixVL& vl,
             MatrixVR& vr, integer_t& info, detail::workspace2< WORK,
             RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorALPHA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorBETA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVL >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVR >::value_type > );
 #ifndef NDEBUG
         assert( jobvl == 'N' || jobvl == 'V' );
         assert( jobvr == 'N' || jobvr == 'V' );
@@ -264,7 +299,6 @@
             alphai, beta, vl, vr, info, work );
     return info;
 }
-
 // template function to call gegv
 template< typename MatrixA, typename MatrixB, typename VectorALPHA,
         typename VectorBETA, typename MatrixVL, typename MatrixVR,
@@ -279,7 +313,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gels.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gels.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gels.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -81,6 +83,9 @@
     template< typename MatrixA, typename MatrixB, typename WORK >
     static void compute( char const trans, MatrixA& a, MatrixB& b,
             integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( trans == 'N' || trans == 'T' );
         assert( traits::matrix_size1(a) >= 0 );
@@ -145,6 +150,9 @@
     template< typename MatrixA, typename MatrixB, typename WORK >
     static void compute( char const trans, MatrixA& a, MatrixB& b,
             integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( trans == 'N' || trans == 'C' );
         assert( traits::matrix_size1(a) >= 0 );
@@ -209,7 +217,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gelsd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gelsd.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gelsd.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -23,6 +23,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -90,13 +92,19 @@
     static void compute( MatrixA& a, MatrixB& b, VectorS& s,
             real_type const rcond, integer_t& rank, integer_t& info,
             detail::workspace2< WORK, IWORK > work ) {
-#ifndef NDEBUG
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorS >::value_type > );
         integer_t minmn = std::min( traits::matrix_size1(a),
                 traits::matrix_size2(a) );
         integer_t smlsiz = ilaenv(9, "GELSD", "");
         integer_t nlvl = static_cast<integer_t>(((std::log(
                 static_cast<real_type>(minmn)) /
                 std::log(static_cast<real_type>(2.))) / (smlsiz+1)) + 1);
+#ifndef NDEBUG
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size2(a) >= 0 );
         assert( traits::matrix_size2(b) >= 0 );
@@ -185,13 +193,16 @@
     static void compute( MatrixA& a, MatrixB& b, VectorS& s,
             real_type const rcond, integer_t& rank, integer_t& info,
             detail::workspace3< WORK, RWORK, IWORK > work ) {
-#ifndef NDEBUG
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
         integer_t minmn = std::min( traits::matrix_size1(a),
                 traits::matrix_size2(a) );
         integer_t smlsiz = ilaenv(9, "GELSD", "");
         integer_t nlvl = static_cast<integer_t>(((std::log(
                 static_cast<real_type>(minmn)) /
                 std::log(static_cast<real_type>(2.))) / (smlsiz+1)) + 1);
+#ifndef NDEBUG
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size2(a) >= 0 );
         assert( traits::matrix_size2(b) >= 0 );
@@ -296,7 +307,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gelss.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gelss.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gelss.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -86,6 +88,12 @@
     static void compute( MatrixA& a, MatrixB& b, VectorS& s,
             real_type const rcond, integer_t& rank, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorS >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size2(a) >= 0 );
@@ -156,9 +164,12 @@
     static void compute( MatrixA& a, MatrixB& b, VectorS& s,
             real_type const rcond, integer_t& rank, integer_t& info,
             detail::workspace2< WORK, RWORK > work ) {
-#ifndef NDEBUG
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
         integer_t minmn = std::min( traits::matrix_size1(a),
                 traits::matrix_size2(a) );
+#ifndef NDEBUG
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size2(a) >= 0 );
         assert( traits::matrix_size2(b) >= 0 );
@@ -245,7 +256,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gelsy.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gelsy.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gelsy.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -87,6 +89,9 @@
     static void compute( MatrixA& a, MatrixB& b, VectorJPVT& jpvt,
             real_type const rcond, integer_t& rank, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size2(a) >= 0 );
@@ -154,6 +159,9 @@
     static void compute( MatrixA& a, MatrixB& b, VectorJPVT& jpvt,
             real_type const rcond, integer_t& rank, integer_t& info,
             detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size2(a) >= 0 );
@@ -237,7 +245,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gesdd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gesdd.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gesdd.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -88,9 +90,18 @@
     static void compute( char const jobz, MatrixA& a, VectorS& s, MatrixU& u,
             MatrixVT& vt, integer_t& info, detail::workspace2< WORK,
             IWORK > work ) {
-#ifndef NDEBUG
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorS >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVT >::value_type > );
         integer_t minmn = std::min( traits::matrix_size1(a),
                 traits::matrix_size2(a) );
+#ifndef NDEBUG
         assert( jobz == 'A' || jobz == 'S' || jobz == 'O' || jobz == 'N' );
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size2(a) >= 0 );
@@ -165,9 +176,15 @@
     static void compute( char const jobz, MatrixA& a, VectorS& s, MatrixU& u,
             MatrixVT& vt, integer_t& info, detail::workspace3< WORK, RWORK,
             IWORK > work ) {
-#ifndef NDEBUG
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVT >::value_type > );
         integer_t minmn = std::min( traits::matrix_size1(a),
                 traits::matrix_size2(a) );
+#ifndef NDEBUG
         assert( jobz == 'A' || jobz == 'S' || jobz == 'O' || jobz == 'N' );
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size2(a) >= 0 );
@@ -267,7 +284,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gesv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gesv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gesv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -63,6 +65,9 @@
     template< typename MatrixA, typename VectorIPIV, typename MatrixB >
     static void compute( MatrixA& a, VectorIPIV& ipiv, MatrixB& b,
             integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size2(a) >= 0 );
         assert( traits::matrix_size2(b) >= 0 );
@@ -89,7 +94,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gesvd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gesvd.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gesvd.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -87,6 +89,15 @@
     static void compute( char const jobu, char const jobvt, MatrixA& a,
             VectorS& s, MatrixU& u, MatrixVT& vt, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorS >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVT >::value_type > );
 #ifndef NDEBUG
         assert( jobu == 'A' || jobu == 'S' || jobu == 'O' || jobu == 'N' );
         assert( jobvt == 'A' || jobvt == 'S' || jobvt == 'O' || jobvt == 'N' );
@@ -156,9 +167,15 @@
     static void compute( char const jobu, char const jobvt, MatrixA& a,
             VectorS& s, MatrixU& u, MatrixVT& vt, integer_t& info,
             detail::workspace2< WORK, RWORK > work ) {
-#ifndef NDEBUG
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVT >::value_type > );
         integer_t minmn = std::min( traits::matrix_size1(a),
                 traits::matrix_size2(a) );
+#ifndef NDEBUG
         assert( jobu == 'A' || jobu == 'S' || jobu == 'O' || jobu == 'N' );
         assert( jobvt == 'A' || jobvt == 'S' || jobvt == 'O' || jobvt == 'N' );
         assert( traits::matrix_size1(a) >= 0 );
@@ -246,7 +263,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gesvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gesvx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gesvx.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -100,6 +102,27 @@
             VectorC& c, MatrixB& b, MatrixX& x, real_type& rcond,
             VectorFERR& ferr, VectorBERR& berr, integer_t& info,
             detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixAF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorC >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorFERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
 #ifndef NDEBUG
         assert( fact == 'F' || fact == 'N' || fact == 'E' );
         assert( trans == 'N' || trans == 'T' || trans == 'C' );
@@ -189,6 +212,24 @@
             VectorC& c, MatrixB& b, MatrixX& x, real_type& rcond,
             VectorFERR& ferr, VectorBERR& berr, integer_t& info,
             detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorR >::value_type, typename traits::vector_traits<
+ VectorC >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorR >::value_type, typename traits::vector_traits<
+ VectorFERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorR >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixAF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
 #ifndef NDEBUG
         assert( fact == 'F' || fact == 'N' || fact == 'E' );
         assert( trans == 'N' || trans == 'T' || trans == 'C' );
@@ -269,9 +310,8 @@
         typename Workspace >
 inline integer_t gesvx( char const fact, char const trans, MatrixA& a,
         MatrixAF& af, VectorIPIV& ipiv, char& equed, VectorR& r, VectorC& c,
- MatrixB& b, MatrixX& x,
- typename traits::matrix_traits< MatrixA >::value_type& rcond,
- VectorFERR& ferr, VectorBERR& berr,
+ MatrixB& b, MatrixX& x, typename traits::matrix_traits<
+ MatrixA >::value_type& rcond, VectorFERR& ferr, VectorBERR& berr,
         Workspace work = optimal_workspace() ) {
     typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
     integer_t info(0);
@@ -280,7 +320,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gges.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gges.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gges.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -110,6 +112,24 @@
             integer_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
             VectorBETA& beta, MatrixVSL& vsl, MatrixVSR& vsr, integer_t& info,
             detail::workspace2< WORK, BWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorALPHAR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorALPHAI >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorBETA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVSL >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVSR >::value_type > );
 #ifndef NDEBUG
         assert( jobvsl == 'N' || jobvsl == 'V' );
         assert( jobvsr == 'N' || jobvsr == 'V' );
@@ -210,6 +230,21 @@
             integer_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
             MatrixVSL& vsl, MatrixVSR& vsr, integer_t& info,
             detail::workspace3< WORK, RWORK, BWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorALPHA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorBETA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVSL >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVSR >::value_type > );
 #ifndef NDEBUG
         assert( jobvsl == 'N' || jobvsl == 'V' );
         assert( jobvsr == 'N' || jobvsr == 'V' );
@@ -318,7 +353,6 @@
             b, sdim, alphar, alphai, beta, vsl, vsr, info, work );
     return info;
 }
-
 // template function to call gges
 template< typename MatrixA, typename MatrixB, typename VectorALPHA,
         typename VectorBETA, typename MatrixVSL, typename MatrixVSR,
@@ -334,7 +368,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ggesx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ggesx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ggesx.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -118,6 +120,30 @@
             VectorALPHAI& alphai, VectorBETA& beta, MatrixVSL& vsl,
             MatrixVSR& vsr, VectorRCONDE& rconde, VectorRCONDV& rcondv,
             integer_t& info, detail::workspace3< WORK, IWORK, BWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorALPHAR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorALPHAI >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorBETA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVSL >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVSR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorRCONDE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorRCONDV >::value_type > );
 #ifndef NDEBUG
         assert( jobvsl == 'N' || jobvsl == 'V' );
         assert( jobvsr == 'N' || jobvsr == 'V' );
@@ -250,6 +276,24 @@
             MatrixVSL& vsl, MatrixVSR& vsr, VectorRCONDE& rconde,
             VectorRCONDV& rcondv, integer_t& info, detail::workspace4< WORK,
             RWORK, IWORK, BWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorRCONDE >::value_type, typename traits::vector_traits<
+ VectorRCONDV >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorALPHA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorBETA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVSL >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVSR >::value_type > );
 #ifndef NDEBUG
         assert( jobvsl == 'N' || jobvsl == 'V' );
         assert( jobvsr == 'N' || jobvsr == 'V' );
@@ -389,7 +433,6 @@
             info, work );
     return info;
 }
-
 // template function to call ggesx
 template< typename MatrixA, typename MatrixB, typename VectorALPHA,
         typename VectorBETA, typename MatrixVSL, typename MatrixVSR,
@@ -407,7 +450,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ggev.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ggev.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ggev.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -97,6 +99,24 @@
             MatrixB& b, VectorALPHAR& alphar, VectorALPHAI& alphai,
             VectorBETA& beta, MatrixVL& vl, MatrixVR& vr, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorALPHAR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorALPHAI >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorBETA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVL >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVR >::value_type > );
 #ifndef NDEBUG
         assert( jobvl == 'N' || jobvl == 'V' );
         assert( jobvr == 'N' || jobvr == 'V' );
@@ -178,6 +198,21 @@
             MatrixB& b, VectorALPHA& alpha, VectorBETA& beta, MatrixVL& vl,
             MatrixVR& vr, integer_t& info, detail::workspace2< WORK,
             RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorALPHA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorBETA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVL >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVR >::value_type > );
 #ifndef NDEBUG
         assert( jobvl == 'N' || jobvl == 'V' );
         assert( jobvr == 'N' || jobvr == 'V' );
@@ -264,7 +299,6 @@
             alphai, beta, vl, vr, info, work );
     return info;
 }
-
 // template function to call ggev
 template< typename MatrixA, typename MatrixB, typename VectorALPHA,
         typename VectorBETA, typename MatrixVL, typename MatrixVR,
@@ -279,7 +313,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ggevx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ggevx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ggevx.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -123,6 +125,36 @@
             VectorLSCALE& lscale, VectorRSCALE& rscale, real_type& abnrm,
             real_type& bbnrm, VectorRCONDE& rconde, VectorRCONDV& rcondv,
             integer_t& info, detail::workspace3< WORK, IWORK, BWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorALPHAR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorALPHAI >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorBETA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVL >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorLSCALE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorRSCALE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorRCONDE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorRCONDV >::value_type > );
 #ifndef NDEBUG
         assert( balanc == 'N' || balanc == 'P' || balanc == 'S' ||
                 balanc == 'B' );
@@ -266,6 +298,30 @@
             VectorRSCALE& rscale, real_type& abnrm, real_type& bbnrm,
             VectorRCONDE& rconde, VectorRCONDV& rcondv, integer_t& info,
             detail::workspace4< WORK, RWORK, IWORK, BWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorLSCALE >::value_type, typename traits::vector_traits<
+ VectorRSCALE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorLSCALE >::value_type, typename traits::vector_traits<
+ VectorRCONDE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorLSCALE >::value_type, typename traits::vector_traits<
+ VectorRCONDV >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorALPHA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorBETA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVL >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixVR >::value_type > );
 #ifndef NDEBUG
         assert( balanc == 'N' || balanc == 'P' || balanc == 'S' ||
                 balanc == 'B' );
@@ -425,7 +481,6 @@
             bbnrm, rconde, rcondv, info, work );
     return info;
 }
-
 // template function to call ggevx
 template< typename MatrixA, typename MatrixB, typename VectorALPHA,
         typename VectorBETA, typename MatrixVL, typename MatrixVR,
@@ -435,11 +490,10 @@
         char const jobvr, char const sense, MatrixA& a, MatrixB& b,
         VectorALPHA& alpha, VectorBETA& beta, MatrixVL& vl, MatrixVR& vr,
         integer_t& ilo, integer_t& ihi, VectorLSCALE& lscale,
- VectorRSCALE& rscale,
- typename traits::matrix_traits< MatrixA >::value_type& abnrm,
- typename traits::matrix_traits< MatrixA >::value_type& bbnrm,
- VectorRCONDE& rconde, VectorRCONDV& rcondv,
- Workspace work = optimal_workspace() ) {
+ VectorRSCALE& rscale, typename traits::matrix_traits<
+ MatrixA >::value_type& abnrm, typename traits::matrix_traits<
+ MatrixA >::value_type& bbnrm, VectorRCONDE& rconde,
+ VectorRCONDV& rcondv, Workspace work = optimal_workspace() ) {
     typedef typename traits::matrix_traits< MatrixA >::value_type value_type;
     integer_t info(0);
     ggevx_impl< value_type >::compute( balanc, jobvl, jobvr, sense, a, b,
@@ -448,7 +502,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ggglm.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ggglm.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ggglm.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -86,6 +88,18 @@
             typename VectorX, typename VectorY, typename WORK >
     static void compute( MatrixA& a, MatrixB& b, VectorD& d, VectorX& x,
             VectorY& y, integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorD >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorY >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size1(b) >= 0 );
         assert( traits::matrix_size2(b) >=
@@ -156,6 +170,18 @@
             typename VectorX, typename VectorY, typename WORK >
     static void compute( MatrixA& a, MatrixB& b, VectorD& d, VectorX& x,
             VectorY& y, integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorD >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorY >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size1(b) >= 0 );
         assert( traits::matrix_size2(b) >=
@@ -226,7 +252,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gglse.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gglse.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gglse.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -86,6 +88,18 @@
             typename VectorD, typename VectorX, typename WORK >
     static void compute( MatrixA& a, MatrixB& b, VectorC& c, VectorD& d,
             VectorX& x, integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorC >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorD >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorX >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size2(b) >= 0 );
@@ -155,6 +169,18 @@
             typename VectorD, typename VectorX, typename WORK >
     static void compute( MatrixA& a, MatrixB& b, VectorC& c, VectorD& d,
             VectorX& x, integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorC >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorD >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorX >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size1(a) >= 0 );
         assert( traits::matrix_size2(b) >= 0 );
@@ -224,7 +250,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ggsvd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ggsvd.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ggsvd.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -107,6 +109,24 @@
             VectorALPHA& alpha, VectorBETA& beta, MatrixU& u, MatrixV& v,
             MatrixQ& q, integer_t& info, detail::workspace2< WORK,
             IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorALPHA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorBETA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixV >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixQ >::value_type > );
 #ifndef NDEBUG
         assert( jobu == 'U' || jobu == 'N' );
         assert( jobv == 'V' || jobv == 'N' );
@@ -192,6 +212,21 @@
             VectorALPHA& alpha, VectorBETA& beta, MatrixU& u, MatrixV& v,
             MatrixQ& q, integer_t& info, detail::workspace3< WORK, RWORK,
             IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorALPHA >::value_type, typename traits::vector_traits<
+ VectorBETA >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixV >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixQ >::value_type > );
 #ifndef NDEBUG
         assert( jobu == 'U' || jobu == 'N' );
         assert( jobv == 'V' || jobv == 'N' );
@@ -286,7 +321,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gtsv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gtsv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gtsv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -68,6 +70,15 @@
             typename MatrixB >
     static void compute( integer_t const n, VectorDL& dl, VectorD& d,
             VectorDU& du, MatrixB& b, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorD >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorDU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( n >= 0 );
         assert( traits::matrix_size2(b) >= 0 );
@@ -95,7 +106,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gtsvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gtsvx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gtsvx.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -108,6 +110,36 @@
             MatrixB& b, MatrixX& x, real_type& rcond, VectorFERR& ferr,
             VectorBERR& berr, integer_t& info, detail::workspace2< WORK,
             IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorD >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorDU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorDLF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorDF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorDUF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorDU2 >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorFERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
 #ifndef NDEBUG
         assert( fact == 'F' || fact == 'N' );
         assert( trans == 'N' || trans == 'T' || trans == 'C' );
@@ -195,6 +227,33 @@
             MatrixB& b, MatrixX& x, real_type& rcond, VectorFERR& ferr,
             VectorBERR& berr, integer_t& info, detail::workspace2< WORK,
             RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorFERR >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorD >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorDU >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorDLF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorDF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorDUF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::vector_traits<
+ VectorDU2 >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorDL >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
 #ifndef NDEBUG
         assert( fact == 'F' || fact == 'N' );
         assert( trans == 'N' || trans == 'T' || trans == 'C' );
@@ -284,7 +343,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbev.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbev.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbev.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -61,6 +63,9 @@
     static void compute( char const jobz, integer_t const n,
             integer_t const kd, MatrixAB& ab, VectorW& w, MatrixZ& z,
             integer_t& info, detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( traits::matrix_uplo_tag(ab) == 'U' ||
@@ -123,7 +128,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbevd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbevd.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbevd.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -66,6 +68,9 @@
     static void compute( char const jobz, integer_t const n,
             integer_t const kd, MatrixAB& ab, VectorW& w, MatrixZ& z,
             integer_t& info, detail::workspace3< WORK, RWORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( traits::matrix_uplo_tag(ab) == 'U' ||
@@ -173,7 +178,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbevx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbevx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbevx.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -75,6 +77,12 @@
             real_type const abstol, integer_t& m, VectorW& w, MatrixZ& z,
             VectorIFAIL& ifail, integer_t& info, detail::workspace3< WORK,
             RWORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixQ >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( range == 'A' || range == 'V' || range == 'I' );
@@ -162,7 +170,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbgv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbgv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbgv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -66,6 +68,12 @@
             integer_t const ka, integer_t const kb, MatrixAB& ab,
             MatrixBB& bb, VectorW& w, MatrixZ& z, integer_t& info,
             detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixBB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( traits::matrix_uplo_tag(ab) == 'U' ||
@@ -135,7 +143,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbgvd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbgvd.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbgvd.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -71,6 +73,12 @@
             integer_t const ka, integer_t const kb, MatrixAB& ab,
             MatrixBB& bb, VectorW& w, MatrixZ& z, integer_t& info,
             detail::workspace3< WORK, RWORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixBB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( traits::matrix_uplo_tag(ab) == 'U' ||
@@ -186,7 +194,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbgvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbgvx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbgvx.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -79,6 +81,15 @@
             integer_t const il, integer_t const iu, real_type const abstol,
             integer_t& m, VectorW& w, MatrixZ& z, VectorIFAIL& ifail,
             integer_t& info, detail::workspace3< WORK, RWORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixBB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixQ >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( range == 'A' || range == 'V' || range == 'I' );
@@ -172,7 +183,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heev.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heev.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heev.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -59,6 +61,7 @@
             typename RWORK >
     static void compute( char const jobz, MatrixA& a, VectorW& w,
             integer_t& info, detail::workspace2< WORK, RWORK > work ) {
+
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( traits::matrix_uplo_tag(a) == 'U' ||
@@ -126,7 +129,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heevd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heevd.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heevd.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -63,6 +65,7 @@
             typename RWORK, typename IWORK >
     static void compute( char const jobz, MatrixA& a, VectorW& w,
             integer_t& info, detail::workspace3< WORK, RWORK, IWORK > work ) {
+
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( traits::matrix_uplo_tag(a) == 'U' ||
@@ -164,7 +167,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heevr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heevr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heevr.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -75,6 +77,9 @@
             integer_t const iu, real_type const abstol, integer_t& m,
             VectorW& w, MatrixZ& z, VectorISUPPZ& isuppz, integer_t& info,
             detail::workspace3< WORK, RWORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( range == 'A' || range == 'V' || range == 'I' );
@@ -181,7 +186,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heevx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heevx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heevx.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -73,6 +75,9 @@
             integer_t const iu, real_type const abstol, integer_t& m,
             VectorW& w, MatrixZ& z, VectorIFAIL& ifail, integer_t& info,
             detail::workspace3< WORK, RWORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( range == 'A' || range == 'V' || range == 'I' );
@@ -177,7 +182,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hegv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hegv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hegv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -64,6 +66,9 @@
     static void compute( integer_t const itype, char const jobz,
             integer_t const n, MatrixA& a, MatrixB& b, VectorW& w,
             integer_t& info, detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( traits::matrix_uplo_tag(a) == 'U' ||
@@ -137,7 +142,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hegvd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hegvd.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hegvd.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -66,6 +68,9 @@
     static void compute( integer_t const itype, char const jobz,
             integer_t const n, MatrixA& a, MatrixB& b, VectorW& w,
             integer_t& info, detail::workspace3< WORK, RWORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( traits::matrix_uplo_tag(a) == 'U' ||
@@ -173,7 +178,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hegvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hegvx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hegvx.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -79,6 +81,12 @@
             integer_t const iu, real_type const abstol, integer_t& m,
             VectorW& w, MatrixZ& z, VectorIFAIL& ifail, integer_t& info,
             detail::workspace3< WORK, RWORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( range == 'A' || range == 'V' || range == 'I' );
@@ -181,7 +189,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hesv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hesv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hesv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -61,6 +63,9 @@
             typename WORK >
     static void compute( MatrixA& a, VectorIPIV& ipiv, MatrixB& b,
             integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -121,7 +126,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hesvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hesvx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hesvx.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -72,6 +74,18 @@
             VectorIPIV& ipiv, MatrixB& b, MatrixX& x, real_type& rcond,
             VectorFERR& ferr, VectorBERR& berr, integer_t& info,
             detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorFERR >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixAF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
 #ifndef NDEBUG
         assert( fact == 'F' || fact == 'N' );
         assert( traits::matrix_uplo_tag(a) == 'U' ||
@@ -173,7 +187,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpev.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpev.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpev.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -61,6 +63,9 @@
     static void compute( char const jobz, integer_t const n, MatrixAP& ap,
             VectorW& w, MatrixZ& z, integer_t& info, detail::workspace2< WORK,
             RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( traits::matrix_uplo_tag(ap) == 'U' ||
@@ -115,7 +120,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpevd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpevd.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpevd.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -64,6 +66,9 @@
     static void compute( char const jobz, integer_t const n, MatrixAP& ap,
             VectorW& w, MatrixZ& z, integer_t& info, detail::workspace3< WORK,
             RWORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( traits::matrix_uplo_tag(ap) == 'U' ||
@@ -164,7 +169,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpevx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpevx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpevx.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -69,6 +71,9 @@
             integer_t const il, integer_t const iu, real_type const abstol,
             integer_t& m, VectorW& w, MatrixZ& z, VectorIFAIL& ifail,
             integer_t& info, detail::workspace3< WORK, RWORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( range == 'A' || range == 'V' || range == 'I' );
@@ -137,12 +142,12 @@
 template< typename MatrixAP, typename VectorW, typename MatrixZ,
         typename VectorIFAIL, typename Workspace >
 inline integer_t hpevx( char const jobz, char const range,
- integer_t const n, MatrixAP& ap,
- typename traits::matrix_traits< MatrixAP >::value_type const vl,
- typename traits::matrix_traits< MatrixAP >::value_type const vu,
- integer_t const il, integer_t const iu,
- typename traits::matrix_traits< MatrixAP >::value_type const abstol,
- integer_t& m, VectorW& w, MatrixZ& z, VectorIFAIL& ifail,
+ integer_t const n, MatrixAP& ap, typename traits::matrix_traits<
+ MatrixAP >::value_type const vl, typename traits::matrix_traits<
+ MatrixAP >::value_type const vu, integer_t const il,
+ integer_t const iu, typename traits::matrix_traits<
+ MatrixAP >::value_type const abstol, integer_t& m, VectorW& w,
+ MatrixZ& z, VectorIFAIL& ifail,
         Workspace work = optimal_workspace() ) {
     typedef typename traits::matrix_traits< MatrixAP >::value_type value_type;
     integer_t info(0);
@@ -151,7 +156,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpgv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpgv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpgv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -62,6 +64,12 @@
             integer_t const n, MatrixAP& ap, MatrixBP& bp, VectorW& w,
             MatrixZ& z, integer_t& info, detail::workspace2< WORK,
             RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixBP >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( traits::matrix_uplo_tag(ap) == 'U' ||
@@ -124,7 +132,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpgvd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpgvd.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpgvd.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -69,6 +71,12 @@
             integer_t const n, MatrixAP& ap, MatrixBP& bp, VectorW& w,
             MatrixZ& z, integer_t& info, detail::workspace3< WORK, RWORK,
             IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixBP >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( traits::matrix_uplo_tag(ap) == 'U' ||
@@ -176,7 +184,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpgvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpgvx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpgvx.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -74,6 +76,12 @@
             integer_t const iu, real_type const abstol, integer_t& m,
             VectorW& w, MatrixZ& z, VectorIFAIL& ifail, integer_t& info,
             detail::workspace3< WORK, RWORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixBP >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( range == 'A' || range == 'V' || range == 'I' );
@@ -159,7 +167,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpsv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpsv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpsv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -53,6 +55,9 @@
     template< typename MatrixAP, typename VectorIPIV, typename MatrixB >
     static void compute( MatrixAP& ap, VectorIPIV& ipiv, MatrixB& b,
             integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(ap) == 'U' ||
                 traits::matrix_uplo_tag(ap) == 'L' );
@@ -78,7 +83,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpsvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpsvx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpsvx.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -69,6 +71,18 @@
             MatrixAFP& afp, VectorIPIV& ipiv, MatrixB& b, MatrixX& x,
             real_type& rcond, VectorFERR& ferr, VectorBERR& berr,
             integer_t& info, detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorFERR >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixAFP >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
 #ifndef NDEBUG
         assert( fact == 'F' || fact == 'N' );
         assert( traits::matrix_uplo_tag(ap) == 'U' ||
@@ -146,7 +160,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/lacgv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/lacgv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/lacgv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -49,6 +51,7 @@
     template< typename VectorX >
     static void compute( integer_t const n, VectorX& x,
             integer_t const incx ) {
+
 #ifndef NDEBUG
         assert( n >= 0 );
 #endif
@@ -67,7 +70,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/lalsd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/lalsd.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/lalsd.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -86,11 +88,17 @@
             integer_t const n, VectorD& d, VectorE& e, MatrixB& b,
             real_type const rcond, integer_t& rank, integer_t& info,
             detail::workspace2< WORK, IWORK > work ) {
-#ifndef NDEBUG
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
         integer_t nlvl = std::max( 0, static_cast<integer_t>(
             std::log(static_cast<real_type>(n)/static_cast<real_type>(smlsiz+
                     1)) /
             std::log(static_cast<real_type>(2.)) ) + 1 );
+#ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( n >= 0 );
         assert( traits::matrix_size2(b) >= 1 );
@@ -163,12 +171,15 @@
             integer_t const n, VectorD& d, VectorE& e, MatrixB& b,
             real_type const rcond, integer_t& rank, integer_t& info,
             detail::workspace3< WORK, RWORK, IWORK > work ) {
-#ifndef NDEBUG
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
         integer_t nlvl = std::max( 0, static_cast<integer_t>(
             std::log(static_cast<real_type>(std::min(traits::matrix_size2(b),
                     n))/
             static_cast<real_type>(smlsiz+1)) /
             std::log(static_cast<real_type>(2.))) + 1 );
+#ifndef NDEBUG
         assert( uplo == 'U' || uplo == 'L' );
         assert( n >= 0 );
         assert( traits::matrix_size2(b) >= 1 );
@@ -254,7 +265,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/largv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/largv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/largv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -15,8 +15,13 @@
 #define BOOST_NUMERIC_BINDINGS_LAPACK_LARGV_HPP
 
 #include <boost/numeric/bindings/lapack/lapack.h>
+#include <boost/numeric/bindings/traits/is_complex.hpp>
+#include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
 #include <cassert>
 
 namespace boost {
@@ -52,8 +57,12 @@
 }
 
 // value-type based template
+template< typename ValueType, typename Enable = void >
+struct largv_impl{};
+
+// real specialization
 template< typename ValueType >
-struct largv_impl {
+struct largv_impl< ValueType, typename boost::enable_if< traits::is_real<ValueType> >::type > {
 
     typedef ValueType value_type;
     typedef typename traits::type_traits<ValueType>::real_type real_type;
@@ -63,6 +72,38 @@
     static void compute( integer_t const n, VectorX& x, integer_t const incx,
             VectorY& y, integer_t const incy, VectorC& c,
             integer_t const incc ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::vector_traits<
+ VectorY >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::vector_traits<
+ VectorC >::value_type > );
+#ifndef NDEBUG
+ assert( traits::vector_size(x) >= 1+(n-1)*incx );
+ assert( traits::vector_size(y) >= 1+(n-1)*incy );
+ assert( traits::vector_size(c) >= 1+(n-1)*incc );
+#endif
+ detail::largv( n, traits::vector_storage(x), incx,
+ traits::vector_storage(y), incy, traits::vector_storage(c),
+ incc );
+ }
+};
+
+// complex specialization
+template< typename ValueType >
+struct largv_impl< ValueType, typename boost::enable_if< traits::is_complex<ValueType> >::type > {
+
+ typedef ValueType value_type;
+ typedef typename traits::type_traits<ValueType>::real_type real_type;
+
+ // templated specialization
+ template< typename VectorX, typename VectorY, typename VectorC >
+ static void compute( integer_t const n, VectorX& x, integer_t const incx,
+ VectorY& y, integer_t const incy, VectorC& c,
+ integer_t const incc ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorX >::value_type, typename traits::vector_traits<
+ VectorY >::value_type > );
 #ifndef NDEBUG
         assert( traits::vector_size(x) >= 1+(n-1)*incx );
         assert( traits::vector_size(y) >= 1+(n-1)*incy );
@@ -86,7 +127,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/pbsv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/pbsv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/pbsv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -63,6 +65,9 @@
     template< typename MatrixAB, typename MatrixB >
     static void compute( integer_t const kd, MatrixAB& ab, MatrixB& b,
             integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(ab) == 'U' ||
                 traits::matrix_uplo_tag(ab) == 'L' );
@@ -90,7 +95,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/pbsvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/pbsvx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/pbsvx.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -99,6 +101,24 @@
             VectorS& s, MatrixB& b, MatrixX& x, real_type& rcond,
             VectorFERR& ferr, VectorBERR& berr, integer_t& info,
             detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixAFB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::vector_traits<
+ VectorS >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::vector_traits<
+ VectorFERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
 #ifndef NDEBUG
         assert( fact == 'F' || fact == 'Y' || fact == 'N' || fact == 'E' );
         assert( traits::matrix_uplo_tag(ab) == 'U' ||
@@ -182,6 +202,21 @@
             VectorS& s, MatrixB& b, MatrixX& x, real_type& rcond,
             VectorFERR& ferr, VectorBERR& berr, integer_t& info,
             detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorS >::value_type, typename traits::vector_traits<
+ VectorFERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorS >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixAFB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
 #ifndef NDEBUG
         assert( fact == 'F' || fact == 'Y' || fact == 'N' || fact == 'E' );
         assert( traits::matrix_uplo_tag(ab) == 'U' ||
@@ -256,9 +291,8 @@
         typename VectorBERR, typename Workspace >
 inline integer_t pbsvx( char const fact, integer_t const n,
         integer_t const kd, MatrixAB& ab, MatrixAFB& afb, char& equed,
- VectorS& s, MatrixB& b, MatrixX& x,
- typename traits::matrix_traits< MatrixAB >::value_type& rcond,
- VectorFERR& ferr, VectorBERR& berr,
+ VectorS& s, MatrixB& b, MatrixX& x, typename traits::matrix_traits<
+ MatrixAB >::value_type& rcond, VectorFERR& ferr, VectorBERR& berr,
         Workspace work = optimal_workspace() ) {
     typedef typename traits::matrix_traits< MatrixAB >::value_type value_type;
     integer_t info(0);
@@ -267,7 +301,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/posv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/posv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/posv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -62,6 +64,9 @@
     // templated specialization
     template< typename MatrixA, typename MatrixB >
     static void compute( MatrixA& a, MatrixB& b, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -89,7 +94,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/posvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/posvx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/posvx.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -96,6 +98,24 @@
             char& equed, VectorS& s, MatrixB& b, MatrixX& x, real_type& rcond,
             VectorFERR& ferr, VectorBERR& berr, integer_t& info,
             detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixAF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorS >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorFERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
 #ifndef NDEBUG
         assert( fact == 'F' || fact == 'Y' || fact == 'N' || fact == 'E' );
         assert( traits::matrix_uplo_tag(a) == 'U' ||
@@ -181,6 +201,21 @@
             char& equed, VectorS& s, MatrixB& b, MatrixX& x, real_type& rcond,
             VectorFERR& ferr, VectorBERR& berr, integer_t& info,
             detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorS >::value_type, typename traits::vector_traits<
+ VectorFERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorS >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixAF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
 #ifndef NDEBUG
         assert( fact == 'F' || fact == 'Y' || fact == 'N' || fact == 'E' );
         assert( traits::matrix_uplo_tag(a) == 'U' ||
@@ -268,7 +303,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ppsv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ppsv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ppsv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -62,6 +64,9 @@
     // templated specialization
     template< typename MatrixAP, typename MatrixB >
     static void compute( MatrixAP& ap, MatrixB& b, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(ap) == 'U' ||
                 traits::matrix_uplo_tag(ap) == 'L' );
@@ -87,7 +92,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ppsvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ppsvx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ppsvx.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -92,6 +94,24 @@
             char& equed, VectorS& s, MatrixB& b, MatrixX& x, real_type& rcond,
             VectorFERR& ferr, VectorBERR& berr, integer_t& info,
             detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::vector_traits<
+ VectorAFP >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::vector_traits<
+ VectorS >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::vector_traits<
+ VectorFERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
 #ifndef NDEBUG
         assert( fact == 'F' || fact == 'Y' || fact == 'N' || fact == 'E' );
         assert( traits::matrix_uplo_tag(ap) == 'U' ||
@@ -172,6 +192,21 @@
             char& equed, VectorS& s, MatrixB& b, MatrixX& x, real_type& rcond,
             VectorFERR& ferr, VectorBERR& berr, integer_t& info,
             detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorS >::value_type, typename traits::vector_traits<
+ VectorFERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorS >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::vector_traits<
+ VectorAFP >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
 #ifndef NDEBUG
         assert( fact == 'F' || fact == 'Y' || fact == 'N' || fact == 'E' );
         assert( traits::matrix_uplo_tag(ap) == 'U' ||
@@ -254,7 +289,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ptsv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ptsv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ptsv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -15,8 +15,13 @@
 #define BOOST_NUMERIC_BINDINGS_LAPACK_PTSV_HPP
 
 #include <boost/numeric/bindings/lapack/lapack.h>
+#include <boost/numeric/bindings/traits/is_complex.hpp>
+#include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
 #include <cassert>
 
 namespace boost {
@@ -51,8 +56,42 @@
 }
 
 // value-type based template
+template< typename ValueType, typename Enable = void >
+struct ptsv_impl{};
+
+// real specialization
+template< typename ValueType >
+struct ptsv_impl< ValueType, typename boost::enable_if< traits::is_real<ValueType> >::type > {
+
+ typedef ValueType value_type;
+ typedef typename traits::type_traits<ValueType>::real_type real_type;
+
+ // templated specialization
+ template< typename VectorD, typename VectorE, typename MatrixB >
+ static void compute( integer_t const n, VectorD& d, VectorE& e,
+ MatrixB& b, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+#ifndef NDEBUG
+ assert( n >= 0 );
+ assert( traits::matrix_size2(b) >= 0 );
+ assert( traits::vector_size(d) >= n );
+ assert( traits::vector_size(e) >= n-1 );
+ assert( traits::leading_dimension(b) >= std::max(1,n) );
+#endif
+ detail::ptsv( n, traits::matrix_size2(b), traits::vector_storage(d),
+ traits::vector_storage(e), traits::matrix_storage(b),
+ traits::leading_dimension(b), info );
+ }
+};
+
+// complex specialization
 template< typename ValueType >
-struct ptsv_impl {
+struct ptsv_impl< ValueType, typename boost::enable_if< traits::is_complex<ValueType> >::type > {
 
     typedef ValueType value_type;
     typedef typename traits::type_traits<ValueType>::real_type real_type;
@@ -61,6 +100,9 @@
     template< typename VectorD, typename VectorE, typename MatrixB >
     static void compute( integer_t const n, VectorD& d, VectorE& e,
             MatrixB& b, integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorE >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( n >= 0 );
         assert( traits::matrix_size2(b) >= 0 );
@@ -85,7 +127,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ptsvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ptsvx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ptsvx.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -92,6 +94,27 @@
             VectorE& e, VectorDF& df, VectorEF& ef, MatrixB& b, MatrixX& x,
             real_type& rcond, VectorFERR& ferr, VectorBERR& berr,
             integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorDF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorEF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorFERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
 #ifndef NDEBUG
         assert( fact == 'F' || fact == 'N' );
         assert( n >= 0 );
@@ -160,6 +183,24 @@
             VectorE& e, VectorDF& df, VectorEF& ef, MatrixB& b, MatrixX& x,
             real_type& rcond, VectorFERR& ferr, VectorBERR& berr,
             integer_t& info, detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorDF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorFERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorE >::value_type, typename traits::vector_traits<
+ VectorEF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorE >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorE >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
 #ifndef NDEBUG
         assert( fact == 'F' || fact == 'N' );
         assert( n >= 0 );
@@ -237,7 +278,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbev.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbev.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbev.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -57,6 +59,12 @@
     static void compute( char const jobz, integer_t const n,
             integer_t const kd, MatrixAB& ab, VectorW& w, MatrixZ& z,
             integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( traits::matrix_uplo_tag(ab) == 'U' ||
@@ -110,7 +118,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbevd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbevd.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbevd.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -62,6 +64,12 @@
             integer_t const kd, MatrixAB& ab, VectorW& w, MatrixZ& z,
             integer_t const liwork, integer_t& info, detail::workspace2< WORK,
             IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( traits::matrix_uplo_tag(ab) == 'U' ||
@@ -149,7 +157,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbevx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbevx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbevx.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -71,6 +73,15 @@
             real_type const abstol, integer_t& m, VectorW& w, MatrixZ& z,
             VectorIFAIL& ifail, integer_t& info, detail::workspace2< WORK,
             IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixQ >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( range == 'A' || range == 'V' || range == 'I' );
@@ -150,7 +161,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbgv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbgv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbgv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -60,6 +62,15 @@
             integer_t const ka, integer_t const kb, MatrixAB& ab,
             MatrixBB& bb, VectorW& w, MatrixZ& z, integer_t& info,
             detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixBB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( traits::matrix_uplo_tag(ab) == 'U' ||
@@ -120,7 +131,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbgvd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbgvd.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbgvd.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -64,6 +66,15 @@
             integer_t const ka, integer_t const kb, MatrixAB& ab,
             MatrixBB& bb, VectorW& w, MatrixZ& z, integer_t& info,
             detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixBB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( traits::matrix_uplo_tag(ab) == 'U' ||
@@ -159,7 +170,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbgvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbgvx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbgvx.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -73,6 +75,18 @@
             integer_t const il, integer_t const iu, real_type const abstol,
             integer_t& m, VectorW& w, MatrixZ& z, VectorIFAIL& ifail,
             integer_t& info, detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixBB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixQ >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAB >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( range == 'A' || range == 'V' || range == 'I' );
@@ -157,7 +171,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sgesv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sgesv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sgesv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -52,6 +54,12 @@
     static void compute( MatrixA& a, VectorIPIV& ipiv, MatrixB& b, MatrixX& x,
             integer_t& iter, integer_t& info, detail::workspace2< WORK,
             SWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_size2(a) >= 0 );
         assert( traits::matrix_size2(b) >= 0 );
@@ -118,7 +126,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spev.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spev.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spev.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -53,8 +55,14 @@
     template< typename MatrixAP, typename VectorW, typename MatrixZ,
             typename WORK >
     static void compute( char const jobz, integer_t const n, MatrixAP& ap,
- VectorW& w, MatrixZ& z, integer_t& info,
- detail::workspace1< WORK > work ) {
+ VectorW& w, MatrixZ& z, integer_t& info, detail::workspace1<
+ WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( traits::matrix_uplo_tag(ap) == 'U' ||
@@ -101,7 +109,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spevd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spevd.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spevd.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -60,6 +62,12 @@
     static void compute( char const jobz, integer_t const n, MatrixAP& ap,
             VectorW& w, MatrixZ& z, integer_t& info, detail::workspace2< WORK,
             IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( traits::matrix_uplo_tag(ap) == 'U' ||
@@ -137,7 +145,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spevx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spevx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spevx.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -65,6 +67,12 @@
             integer_t const il, integer_t const iu, real_type const abstol,
             integer_t& m, VectorW& w, MatrixZ& z, VectorIFAIL& ifail,
             integer_t& info, detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( range == 'A' || range == 'V' || range == 'I' );
@@ -125,12 +133,12 @@
 template< typename MatrixAP, typename VectorW, typename MatrixZ,
         typename VectorIFAIL, typename Workspace >
 inline integer_t spevx( char const jobz, char const range,
- integer_t const n, MatrixAP& ap,
- typename traits::matrix_traits< MatrixAP >::value_type const vl,
- typename traits::matrix_traits< MatrixAP >::value_type const vu,
- integer_t const il, integer_t const iu,
- typename traits::matrix_traits< MatrixAP >::value_type const abstol,
- integer_t& m, VectorW& w, MatrixZ& z, VectorIFAIL& ifail,
+ integer_t const n, MatrixAP& ap, typename traits::matrix_traits<
+ MatrixAP >::value_type const vl, typename traits::matrix_traits<
+ MatrixAP >::value_type const vu, integer_t const il,
+ integer_t const iu, typename traits::matrix_traits<
+ MatrixAP >::value_type const abstol, integer_t& m, VectorW& w,
+ MatrixZ& z, VectorIFAIL& ifail,
         Workspace work = optimal_workspace() ) {
     typedef typename traits::matrix_traits< MatrixAP >::value_type value_type;
     integer_t info(0);
@@ -139,7 +147,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spgv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spgv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spgv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -57,6 +59,15 @@
     static void compute( integer_t const itype, char const jobz,
             integer_t const n, MatrixAP& ap, MatrixBP& bp, VectorW& w,
             MatrixZ& z, integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixBP >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( traits::matrix_uplo_tag(ap) == 'U' ||
@@ -110,7 +121,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spgvd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spgvd.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spgvd.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -63,6 +65,15 @@
             integer_t const n, MatrixAP& ap, MatrixBP& bp, VectorW& w,
             MatrixZ& z, integer_t& info, detail::workspace2< WORK,
             IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixBP >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( traits::matrix_uplo_tag(ap) == 'U' ||
@@ -150,7 +161,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spgvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spgvx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spgvx.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -67,6 +69,15 @@
             integer_t const iu, real_type const abstol, integer_t& m,
             VectorW& w, MatrixZ& z, VectorIFAIL& ifail, integer_t& info,
             detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixBP >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( range == 'A' || range == 'V' || range == 'I' );
@@ -144,7 +155,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spsv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spsv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spsv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -17,6 +17,8 @@
 #include <boost/numeric/bindings/lapack/lapack.h>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -63,6 +65,9 @@
     template< typename MatrixAP, typename VectorIPIV, typename MatrixB >
     static void compute( MatrixAP& ap, VectorIPIV& ipiv, MatrixB& b,
             integer_t& info ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(ap) == 'U' ||
                 traits::matrix_uplo_tag(ap) == 'L' );
@@ -88,7 +93,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spsvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spsvx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spsvx.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -21,6 +21,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -92,6 +94,21 @@
             VectorIPIV& ipiv, MatrixB& b, MatrixX& x, real_type& rcond,
             VectorFERR& ferr, VectorBERR& berr, integer_t& info,
             detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixAFP >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::vector_traits<
+ VectorFERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
 #ifndef NDEBUG
         assert( fact == 'F' || fact == 'N' );
         assert( traits::matrix_uplo_tag(ap) == 'U' ||
@@ -171,6 +188,18 @@
             VectorIPIV& ipiv, MatrixB& b, MatrixX& x, real_type& rcond,
             VectorFERR& ferr, VectorBERR& berr, integer_t& info,
             detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorFERR >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixAFP >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixAP >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
 #ifndef NDEBUG
         assert( fact == 'F' || fact == 'N' );
         assert( traits::matrix_uplo_tag(ap) == 'U' ||
@@ -252,7 +281,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/stev.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/stev.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/stev.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -52,8 +54,14 @@
     template< typename VectorD, typename VectorE, typename MatrixZ,
             typename WORK >
     static void compute( char const jobz, integer_t const n, VectorD& d,
- VectorE& e, MatrixZ& z, integer_t& info,
- detail::workspace1< WORK > work ) {
+ VectorE& e, MatrixZ& z, integer_t& info, detail::workspace1<
+ WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( n >= 0 );
@@ -99,7 +107,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/stevd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/stevd.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/stevd.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -59,6 +61,12 @@
     static void compute( char const jobz, integer_t const n, VectorD& d,
             VectorE& e, MatrixZ& z, integer_t& info, detail::workspace2< WORK,
             IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( n >= 0 );
@@ -131,7 +139,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/stevr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/stevr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/stevr.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -67,6 +69,15 @@
             integer_t const il, integer_t const iu, real_type const abstol,
             integer_t& m, VectorW& w, MatrixZ& z, VectorISUPPZ& isuppz,
             integer_t& info, detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( range == 'A' || range == 'V' || range == 'I' );
@@ -154,7 +165,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/stevx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/stevx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/stevx.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -19,6 +19,8 @@
 #include <boost/numeric/bindings/traits/detail/array.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -66,6 +68,15 @@
             integer_t const il, integer_t const iu, real_type const abstol,
             integer_t& m, VectorW& w, MatrixZ& z, VectorIFAIL& ifail,
             integer_t& info, detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorE >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorD >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( range == 'A' || range == 'V' || range == 'I' );
@@ -141,7 +152,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syev.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syev.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syev.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -54,6 +56,9 @@
     template< typename MatrixA, typename VectorW, typename WORK >
     static void compute( char const jobz, MatrixA& a, VectorW& w,
             integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( traits::matrix_uplo_tag(a) == 'U' ||
@@ -110,7 +115,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syevd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syevd.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syevd.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -59,6 +61,9 @@
             typename IWORK >
     static void compute( char const jobz, MatrixA& a, VectorW& w,
             integer_t& info, detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( traits::matrix_uplo_tag(a) == 'U' ||
@@ -137,7 +142,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syevr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syevr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syevr.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -70,6 +72,12 @@
             integer_t const iu, real_type const abstol, integer_t& m,
             VectorW& w, MatrixZ& z, VectorISUPPZ& isuppz, integer_t& info,
             detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( range == 'A' || range == 'V' || range == 'I' );
@@ -162,7 +170,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syevx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syevx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syevx.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -67,6 +69,12 @@
             integer_t const iu, real_type const abstol, integer_t& m,
             VectorW& w, MatrixZ& z, VectorIFAIL& ifail, integer_t& info,
             detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( range == 'A' || range == 'V' || range == 'I' );
@@ -162,7 +170,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sygv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sygv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sygv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -60,6 +62,12 @@
     static void compute( integer_t const itype, char const jobz,
             integer_t const n, MatrixA& a, MatrixB& b, VectorW& w,
             integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( traits::matrix_uplo_tag(a) == 'U' ||
@@ -121,7 +129,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sygvd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sygvd.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sygvd.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -62,6 +64,12 @@
     static void compute( integer_t const itype, char const jobz,
             integer_t const n, MatrixA& a, MatrixB& b, VectorW& w,
             integer_t& info, detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( traits::matrix_uplo_tag(a) == 'U' ||
@@ -149,7 +157,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sygvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sygvx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sygvx.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -20,6 +20,8 @@
 #include <boost/numeric/bindings/traits/detail/utils.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <cassert>
 
 namespace boost {
@@ -73,6 +75,15 @@
             integer_t const iu, real_type const abstol, integer_t& m,
             VectorW& w, MatrixZ& z, VectorIFAIL& ifail, integer_t& info,
             detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorW >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixZ >::value_type > );
 #ifndef NDEBUG
         assert( jobz == 'N' || jobz == 'V' );
         assert( range == 'A' || range == 'V' || range == 'I' );
@@ -165,7 +176,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sysv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sysv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sysv.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -82,6 +84,9 @@
             typename WORK >
     static void compute( MatrixA& a, VectorIPIV& ipiv, MatrixB& b,
             integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -142,6 +147,9 @@
             typename WORK >
     static void compute( MatrixA& a, VectorIPIV& ipiv, MatrixB& b,
             integer_t& info, detail::workspace1< WORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
 #ifndef NDEBUG
         assert( traits::matrix_uplo_tag(a) == 'U' ||
                 traits::matrix_uplo_tag(a) == 'L' );
@@ -202,7 +210,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sysvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sysvx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sysvx.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -22,6 +22,8 @@
 #include <boost/numeric/bindings/traits/is_real.hpp>
 #include <boost/numeric/bindings/traits/traits.hpp>
 #include <boost/numeric/bindings/traits/type_traits.hpp>
+#include <boost/static_assert.hpp
+#include <boost/type_traits/is_same.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <cassert>
 
@@ -99,6 +101,21 @@
             VectorIPIV& ipiv, MatrixB& b, MatrixX& x, real_type& rcond,
             VectorFERR& ferr, VectorBERR& berr, integer_t& info,
             detail::workspace2< WORK, IWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixAF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorFERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
 #ifndef NDEBUG
         assert( fact == 'F' || fact == 'N' );
         assert( traits::matrix_uplo_tag(a) == 'U' ||
@@ -198,6 +215,18 @@
             VectorIPIV& ipiv, MatrixB& b, MatrixX& x, real_type& rcond,
             VectorFERR& ferr, VectorBERR& berr, integer_t& info,
             detail::workspace2< WORK, RWORK > work ) {
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::vector_traits<
+ VectorFERR >::value_type, typename traits::vector_traits<
+ VectorBERR >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixAF >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixB >::value_type > );
+ BOOST_STATIC_ASSERT( boost::is_same< typename traits::matrix_traits<
+ MatrixA >::value_type, typename traits::matrix_traits<
+ MatrixX >::value_type > );
 #ifndef NDEBUG
         assert( fact == 'F' || fact == 'N' );
         assert( traits::matrix_uplo_tag(a) == 'U' ||
@@ -299,7 +328,6 @@
     return info;
 }
 
-
 }}}} // namespace boost::numeric::bindings::lapack
 
 #endif

Modified: sandbox/numeric_bindings/libs/numeric/bindings/tools/bindings.py
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/tools/bindings.py (original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/tools/bindings.py 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -32,7 +32,7 @@
 def proper_indent( input_string ):
   max_chars = 80
   all_results = []
- find_delim = re.compile( "([\,\+/]|\|\||>=|std::log\(|work\()[ ]*" )
+ find_delim = re.compile( "([\,\+/]|\|\||>=|< |std::log\(|work\()[ ]*" )
   for input_line in input_string.splitlines():
     result = ''
     # extra indentation size is 8

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 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -50,7 +50,9 @@
     includes = [ '#include <cassert>',
       '#include <boost/numeric/bindings/traits/traits.hpp>',
       '#include <boost/numeric/bindings/traits/type_traits.hpp>',
- '#include <boost/numeric/bindings/blas/blas.h>' ]
+ '#include <boost/numeric/bindings/blas/blas.h>',
+ '#include <boost/type_traits/is_same.hpp>',
+ '#include <boost/static_assert.hpp' ]
       
     if template_map.has_key( group_name.lower() + '.includes' ):
       includes += template_map[ group_name.lower() + '.includes' ].splitlines()
@@ -91,6 +93,7 @@
           cases[ 'complex' ][ 'subroutines' ] = []
         cases[ 'complex' ][ 'subroutines' ] += [ subroutine ]
 
+
     #
     # LEVEL 1 and 2 HANDLING
     #
@@ -108,6 +111,28 @@
       call_level1_arg_list = []
       level1_type_arg_list = []
       level1_assert_list = []
+ level1_static_assert_list = []
+
+ #
+ # Create static assertions, first by value type
+ #
+ for value_type_tmp_key in info_map[ subroutine ][ 'grouped_arguments' ][ 'by_value_type' ].keys():
+ # look up whether they are template params
+ static_asserts = []
+ for arg in info_map[ subroutine ][ 'grouped_arguments' ][ 'by_value_type' ][ value_type_tmp_key ]:
+ if info_map[ subroutine ][ 'argument_map' ][ arg ][ 'code' ][ 'level_1_type' ] != None:
+ static_asserts.append( arg )
+ if len(static_asserts)>1:
+ arg_A = static_asserts[0]
+ for arg_B in static_asserts[1:]:
+ print "Adding static assert for argA", arg_A, " argb", arg_B
+ assert_line = 'BOOST_STATIC_ASSERT( boost::is_same< ' + \
+ info_map[ subroutine ][ 'argument_map' ][ arg_A ][ 'code' ][ 'level_1_static_assert' ] + ', ' + \
+ info_map[ subroutine ][ 'argument_map' ][ arg_B ][ 'code' ][ 'level_1_static_assert' ] + \
+ ' > );'
+ level1_static_assert_list += [ assert_line ]
+
+ # import the code by argument
       for arg in info_map[ subroutine ][ 'arguments' ]:
         level0_arg_list += [ info_map[ subroutine ][ 'argument_map' ][ arg ][ 'code' ][ 'call_level_0' ] ]
         if info_map[ subroutine ][ 'argument_map' ][ arg ][ 'code' ][ 'level_1' ] != None:
@@ -128,6 +153,7 @@
       level1_template = level1_template.replace( "$LEVEL1", ", ".join( level1_arg_list ) )
       level1_template = level1_template.replace( "$TYPES", ", ".join( level1_type_arg_list ) )
       level1_template = level1_template.replace( "$ASSERTS", "\n ".join( level1_assert_list ) )
+ level1_template = level1_template.replace( "$STATIC_ASSERTS", "\n ".join( level1_static_assert_list ) )
       level1_template = level1_template.replace( '$RETURN_TYPE', info_map[ subroutine ][ 'level1_return_type' ] )
       level1_template = level1_template.replace( '$RETURN_STATEMENT', info_map[ subroutine ][ 'return_statement' ] )
 

Modified: sandbox/numeric_bindings/libs/numeric/bindings/tools/lapack_generator.py
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/tools/lapack_generator.py (original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/tools/lapack_generator.py 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -58,8 +58,10 @@
     includes = [ '#include <cassert>',
       '#include <boost/numeric/bindings/traits/traits.hpp>',
       '#include <boost/numeric/bindings/traits/type_traits.hpp>',
- '#include <boost/numeric/bindings/lapack/lapack.h>' ]
-
+ '#include <boost/numeric/bindings/lapack/lapack.h>',
+ '#include <boost/type_traits/is_same.hpp>',
+ '#include <boost/static_assert.hpp' ]
+
     if template_map.has_key( group_name.lower() + '.includes' ):
       includes += template_map[ group_name.lower() + '.includes' ].splitlines()
 
@@ -125,10 +127,32 @@
       level2_arg_list = []
       level1_type_arg_list = []
       level1_assert_list = []
+ level1_static_assert_list = []
       call_level1_arg_list = []
       workspace_query_arg_list = []
       user_defined_arg_list = []
       user_defined_opt_arg_list = []
+
+ #
+ # Create static assertions, first by value type
+ #
+ for value_type_tmp_key in info_map[ subroutine ][ 'grouped_arguments' ][ 'by_value_type' ].keys():
+ # look up whether they are template params
+ static_asserts = []
+ for arg in info_map[ subroutine ][ 'grouped_arguments' ][ 'by_value_type' ][ value_type_tmp_key ]:
+ if info_map[ subroutine ][ 'argument_map' ][ arg ][ 'code' ][ 'level_1_type' ] != None:
+ static_asserts.append( arg )
+ if len(static_asserts)>1:
+ arg_A = static_asserts[0]
+ for arg_B in static_asserts[1:]:
+ print "Adding static assert for argA", arg_A, " argb", arg_B
+ assert_line = 'BOOST_STATIC_ASSERT( boost::is_same< ' + \
+ info_map[ subroutine ][ 'argument_map' ][ arg_A ][ 'code' ][ 'level_1_static_assert' ] + ', ' + \
+ info_map[ subroutine ][ 'argument_map' ][ arg_B ][ 'code' ][ 'level_1_static_assert' ] + \
+ ' > );'
+ level1_static_assert_list += [ assert_line ]
+
+ # import the code, by argument
       for arg in info_map[ subroutine ][ 'arguments' ]:
         level0_arg_list += [ info_map[ subroutine ][ 'argument_map' ][ arg ][ 'code' ][ 'call_level_0' ] ]
         if info_map[ subroutine ][ 'argument_map' ][ arg ][ 'code' ][ 'level_1' ] != None:
@@ -144,26 +168,28 @@
           call_level1_arg_list += [ info_map[ subroutine ][ 'argument_map' ][ arg ][ 'code' ][ 'call_level_1' ] ]
         if info_map[ subroutine ][ 'argument_map' ][ arg ][ 'code' ][ 'opt_workspace_query' ] != None:
           workspace_query_arg_list += [ info_map[ subroutine ][ 'argument_map' ][ arg ][ 'code' ][ 'opt_workspace_query' ] ]
-
+
       if info_map[ subroutine ][ 'user_defined_variables' ] != None:
         for arg in info_map[ subroutine ][ 'user_defined_variables' ]:
           print arg
           if info_map[ subroutine ][ 'argument_map' ][ arg ][ 'code' ][ 'user_defined_init' ] != None:
             user_defined_arg_list += [ info_map[ subroutine ][ 'argument_map' ][ arg ][ 'code' ][ 'user_defined_init' ] ]
-
+
       if info_map[ subroutine ][ 'user_defined_opt_variables' ] != None:
         for arg in info_map[ subroutine ][ 'user_defined_opt_variables' ]:
           print arg
           if info_map[ subroutine ][ 'argument_map' ][ arg ][ 'code' ][ 'user_defined_init' ] != None:
             user_defined_opt_arg_list += [ info_map[ subroutine ][ 'argument_map' ][ arg ][ 'code' ][ 'user_defined_init' ] ]
-
+
       # Level 1 replacements
       level1_template = level1_template.replace( "$CALL_LEVEL0", ", ".join( level0_arg_list ) )
       level1_template = level1_template.replace( "$CALL_LEVEL1", ", ".join( call_level1_arg_list ) )
       level1_template = level1_template.replace( "$LEVEL1", ", ".join( level1_arg_list ) )
       level1_template = level1_template.replace( "$TYPES", ", ".join( level1_type_arg_list ) )
       level1_template = level1_template.replace( "$ASSERTS", "\n ".join( level1_assert_list ) )
-
+ level1_template = level1_template.replace( "$STATIC_ASSERTS", "\n ".join( level1_static_assert_list ) )
+
+
       if len( user_defined_arg_list ) > 0:
         level1_template = level1_template.replace( "$INIT_USER_DEFINED_VARIABLES", indent_lines( "\n".join(user_defined_arg_list), 8 ) )
       else:
@@ -221,8 +247,8 @@
             setup_opt_workarrays_pre += [ info_map[ subroutine ][ 'argument_map' ][ name ][ 'code' ][ 'opt_workspace_pre' ] ]
           if info_map[ subroutine ][ 'argument_map' ][ name ][ 'code' ][ 'opt_workspace_post' ] != None:
             setup_opt_workarrays_post += [ info_map[ subroutine ][ 'argument_map' ][ name ][ 'code' ][ 'opt_workspace_post' ] ]
-
-
+
+
         # if the length of setup_opt_workarrays_post equals 0, it's equal to the minimal_case
         opt_workspace_template = ''
         if len( setup_opt_workarrays_post ) == 0:
@@ -231,7 +257,7 @@
         else:
           includes += [ '#include <boost/numeric/bindings/traits/detail/utils.hpp>' ]
           opt_workspace_template = template_map[ 'level1_opt_workspace' ]
-
+
         opt_workspace_template = opt_workspace_template.replace( "$WORKSPACE_QUERY", ", ".join( workspace_query_arg_list ) )
         opt_workspace_template = opt_workspace_template.replace( "$SETUP_OPT_WORKARRAYS_POST", "\n ".join( setup_opt_workarrays_post ) )
         opt_workspace_template = opt_workspace_template.replace( "$SETUP_OPT_WORKARRAYS_PRE", "\n ".join( setup_opt_workarrays_pre ) )
@@ -257,18 +283,13 @@
         for name in info_map[ subroutine ][ 'grouped_arguments' ][ 'by_io' ][ 'workspace' ]:
           sub_template = template_map[ 'min_size_func' ]
           sub_template = sub_template.replace( "$NAME", name.lower() )
-
+
           # first: user-defined stuff (overrules any auto-detected stuff)
+
           my_key = group_name.lower() + '.' + value_type + '.min_size_' + name.lower()
- my_key_all = group_name.lower() + '.all.min_size_' + name.lower()
- print my_key
- if template_map.has_key( my_key ):
- sub_template = sub_template.replace( "$MIN_SIZE", indent_lines( template_map[ my_key ].rstrip(), 8 ) )
-
- # if that fails, try the more generic key "all"
- elif template_map.has_key( my_key_all ):
- sub_template = sub_template.replace( "$MIN_SIZE", indent_lines( template_map[ my_key_all ].rstrip(), 8 ) )
-
+ if netlib.my_has_key( my_key, template_map ):
+ sub_template = sub_template.replace( "$MIN_SIZE", indent_lines( template_map[ netlib.my_has_key( my_key, template_map ) ].rstrip(), 8 ) )
+
           elif info_map[ subroutine ][ 'argument_map' ][ name ][ 'code' ][ 'min_workspace' ] != None:
             resulting_code = 'return ' + info_map[ subroutine ][ 'argument_map' ][ name ][ 'code' ][ 'min_workspace' ] + ';'
             sub_template = sub_template.replace( "$MIN_SIZE", resulting_code.rstrip() )

Modified: sandbox/numeric_bindings/libs/numeric/bindings/tools/netlib.py
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/tools/netlib.py (original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/tools/netlib.py 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -135,6 +135,11 @@
         result = result.replace( "float", "real_type" )
       if properties[ 'value_type' ] == 'DOUBLE PRECISION':
         result = result.replace( "double", "real_type" )
+ if properties[ 'value_type' ][ 0:7] == 'COMPLEX' or \
+ properties[ 'value_type' ] == 'DOUBLE COMPLEX':
+ result = result.replace( "traits::complex_d", "value_type" )
+ result = result.replace( "traits::complex_f", "value_type" )
+
   return result
 
 
@@ -147,7 +152,10 @@
     if properties[ 'value_type' ] == 'REAL' or properties[ 'value_type' ] == 'DOUBLE PRECISION':
       result = result.replace( "real_type", "typename traits::$TYPEOF_FIRST_TYPENAME" + \
         "_traits< $FIRST_TYPENAME >::value_type" )
-
+ if properties[ 'value_type' ][ 0:7] == 'COMPLEX' or \
+ properties[ 'value_type' ] == 'DOUBLE COMPLEX':
+ result = result.replace( "value_type", "typename traits::$TYPEOF_FIRST_TYPENAME" + \
+ "_traits< $FIRST_TYPENAME >::value_type" )
   return result
 
 
@@ -161,6 +169,17 @@
   return result
 
 
+def level1_static_assert( name, properties ):
+ result = None
+ if 'workspace' not in properties[ 'io' ]:
+ if properties[ 'type' ] == 'matrix':
+ result = "typename traits::matrix_traits< " + level1_typename( name, properties ).replace( "typename ", "") + " >::value_type"
+ elif properties[ 'type' ] == 'vector':
+ result = "typename traits::vector_traits< " + level1_typename( name, properties ).replace( "typename ", "") + " >::value_type"
+ elif properties[ 'type' ] == 'scalar':
+ result = "TODO"
+ return result
+
 
 def nested_list_args( arg ):
   print "finding nested list arguments of", arg
@@ -1111,6 +1130,7 @@
   # variables which have been assigned their code in pass 1.
   for argument_name, argument_properties in argument_map.iteritems():
     argument_properties[ 'code' ][ 'level_1_assert' ] = level1_assert( argument_name, argument_properties, argument_map )
+ argument_properties[ 'code' ][ 'level_1_static_assert' ] = level1_static_assert( argument_name, argument_properties )
     argument_properties[ 'code' ][ 'opt_workspace_query' ] = opt_workspace_query_type( argument_name, argument_properties, argument_map )
     argument_properties[ 'code' ][ 'opt_workspace_pre' ] = opt_workspace_pre_type( argument_name, argument_properties, argument_map )
     argument_properties[ 'code' ][ 'opt_workspace_post' ] = opt_workspace_post_type( argument_name, argument_properties )

Modified: sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/blas.hpp
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/blas.hpp (original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/blas.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -48,15 +48,16 @@
     // templated specialization
     template< $TYPES >
     static return_type compute( $LEVEL1 ) {
+ $STATIC_ASSERTS
         $RETURN_STATEMENTdetail::$groupname( $CALL_LEVEL0 );
     }
 };
 $TEMPLATE[blas_level2]
 // template function to call $groupname
 template< $TYPES >
-inline integer_t $groupname( $LEVEL2 ) {
+inline typename $groupname_impl< typename traits::$TYPEOF_FIRST_TYPENAME_traits< $FIRST_TYPENAME >::value_type >::return_type
+$groupname( $LEVEL2 ) {
     typedef typename traits::$TYPEOF_FIRST_TYPENAME_traits< $FIRST_TYPENAME >::value_type value_type;
     $RETURN_STATEMENT$groupname_impl< value_type >::compute( $CALL_LEVEL1 );
 }
-
 $TEMPLATE[end]

Modified: sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/lapack.hpp
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/lapack.hpp (original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/lapack.hpp 2009-02-27 08:12:50 EST (Fri, 27 Feb 2009)
@@ -59,8 +59,9 @@
     // user-defined workspace specialization
     template< $TYPES, $WORKSPACE_TYPENAMES >
     static void compute( $LEVEL1, detail::workspace$WORKSPACE_SIZE< $WORKSPACE_TYPES > work ) {
-#ifndef NDEBUG
+ $STATIC_ASSERTS
         $INIT_USER_DEFINED_VARIABLES
+#ifndef NDEBUG
         $ASSERTS
 #endif
         detail::$groupname( $CALL_LEVEL0 );
@@ -100,7 +101,6 @@
     $groupname_impl< value_type >::compute( $CALL_LEVEL1, work );
     return info;
 }
-
 $TEMPLATE[setup_min_workspace]
         traits::detail::array< $WORKSPACE_TYPE > tmp_$NAME( min_size_$NAME( $CALL_MIN_SIZE ) );
 $TEMPLATE[setup_opt_workspace]
@@ -117,6 +117,7 @@
     // templated specialization
     template< $TYPES >
     static void compute( $LEVEL1 ) {
+ $STATIC_ASSERTS
 #ifndef NDEBUG
         $ASSERTS
 #endif
@@ -133,5 +134,4 @@
     $groupname_impl< value_type >::compute( $CALL_LEVEL1 );
     return info;
 }
-
 $TEMPLATE[end]


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