All of these are based on the setup and changes described in my previous email.  lapack::gesv is working, from last email.

lapack::getrf seems to be working as well!


lapack::getri is failing to compile.  Looks like it is the "workspace" issue I had with an older routine.  Is this implemented?  Is there a workaround?

Code:
ublas::matrix<double, column_major> A(2,2);
...
std::vector<int> ipiv(2);
lapack::getri(A, ipiv);

Compile errors:
1>C:\working\etk_lib\test_suite\etk\test_ublas.cpp(102): error: no instance of function template "boost::numeric::bindings::lapack::getri" matches the argument list
1>            argument types are: (boost::numeric::ublas::matrix<double, boost::numeric::ublas::column_major, boost::numeric::ublas::unbounded_array<double, std::allocator<QuantLib::Real>>>, std::vector<ptrdiff_t, std::allocator<int>>)
1>   lapack::getri(A, ipiv);
1>   ^





Also, when I change the code to:
lapack::getri(A, ipiv, lapack::optimal_workspace());

Iit creates the following results, which look like traits problems.:

1>C:\working\libraries\boost\boost/numeric/bindings/lapack/computational/getri.hpp(84): error: no operator ">=" matches these operands
1>            operand types are: boost::numeric::bindings::traits::detail::array<double> >= integer_t
1>          assert( traits::vector_size(work.select(real_type()) >= min_size_work(
1>          ^
1>          detected during:
1>            instantiation of "void boost::numeric::bindings::lapack::getri_impl<ValueType, boost::enable_if<boost::numeric::bindings::traits::is_real<ValueType>, void>::type>::compute(MatrixA &, VectorIPIV &, integer_t={int} &, boost::numeric::bindings::lapack::detail::workspace1<WORK>) [with ValueType=double, MatrixA=boost::numeric::ublas::matrix<double, boost::numeric::ublas::column_major, boost::numeric::ublas::unbounded_array<double, std::allocator<QuantLib::Real={double}>>>,
1>                      VectorIPIV=std::vector<ptrdiff_t={int}, std::allocator<int>>, WORK=boost::numeric::bindings::traits::detail::array<double>]" at line 112
1>            instantiation of "void boost::numeric::bindings::lapack::getri_impl<ValueType, boost::enable_if<boost::numeric::bindings::traits::is_real<ValueType>, void>::type>::compute(MatrixA &, VectorIPIV &, integer_t={int} &, boost::numeric::bindings::lapack::optimal_workspace) [with ValueType=double, MatrixA=boost::numeric::ublas::matrix<double, boost::numeric::ublas::column_major, boost::numeric::ublas::unbounded_array<double, std::allocator<QuantLib::Real={double}>>>,
1>                      VectorIPIV=std::vector<ptrdiff_t={int}, std::allocator<int>>]" at line 180
1>            instantiation of "integer_t={int} boost::numeric::bindings::lapack::getri(MatrixA &, VectorIPIV &, Workspace) [with MatrixA=boost::numeric::ublas::matrix<double, boost::numeric::ublas::column_major, boost::numeric::ublas::unbounded_array<double, std::allocator<QuantLib::Real={double}>>>, VectorIPIV=std::vector<ptrdiff_t={int}, std::allocator<int>>, Workspace=boost::numeric::bindings::lapack::optimal_workspace]" at line 102 of "C:\working\etk_lib\test_suite\etk\test_ublas.cpp"
1>
1>C:\working\libraries\boost\boost/numeric/bindings/traits/vector_traits.hpp(51): error: name followed by "::" must be a class or namespace name
1>    struct vector_detail_traits : default_vector_traits<VType, typename VType::value_type > 
1>                                                                        ^
1>          detected during:
1>            instantiation of class "boost::numeric::bindings::traits::vector_detail_traits<VIdentifier, VType> [with VIdentifier=<error-type>, VType=<error-type>]" at line 59
1>            instantiation of class "boost::numeric::bindings::traits::vector_traits<V> [with V=<error-type>]" at line 77
1>            instantiation of "ptrdiff_t={int} boost::numeric::bindings::traits::vector_size(V &) [with V=<error-type>]" at line 84 of "C:\working\libraries\boost\boost/numeric/bindings/lapack/computational/getri.hpp"
1>            instantiation of "void boost::numeric::bindings::lapack::getri_impl<ValueType, boost::enable_if<boost::numeric::bindings::traits::is_real<ValueType>, void>::type>::compute(MatrixA &, VectorIPIV &, integer_t={int} &, boost::numeric::bindings::lapack::detail::workspace1<WORK>) [with ValueType=double, MatrixA=boost::numeric::ublas::matrix<double, boost::numeric::ublas::column_major, boost::numeric::ublas::unbounded_array<double, std::allocator<QuantLib::Real={double}>>>,
1>                      VectorIPIV=std::vector<ptrdiff_t={int}, std::allocator<int>>, WORK=boost::numeric::bindings::traits::detail::array<double>]" at line 112 of "C:\working\libraries\boost\boost/numeric/bindings/lapack/computational/getri.hpp"
1>            instantiation of "void boost::numeric::bindings::lapack::getri_impl<ValueType, boost::enable_if<boost::numeric::bindings::traits::is_real<ValueType>, void>::type>::compute(MatrixA &, VectorIPIV &, integer_t={int} &, boost::numeric::bindings::lapack::optimal_workspace) [with ValueType=double, MatrixA=boost::numeric::ublas::matrix<double, boost::numeric::ublas::column_major, boost::numeric::ublas::unbounded_array<double, std::allocator<QuantLib::Real={double}>>>,
1>                      VectorIPIV=std::vector<ptrdiff_t={int}, std::allocator<int>>]" at line 180 of "C:\working\libraries\boost\boost/numeric/bindings/lapack/computational/getri.hpp"
1>            instantiation of "integer_t={int} boost::numeric::bindings::lapack::getri(MatrixA &, VectorIPIV &, Workspace) [with MatrixA=boost::numeric::ublas::matrix<double, boost::numeric::ublas::column_major, boost::numeric::ublas::unbounded_array<double, std::allocator<QuantLib::Real={double}>>>, VectorIPIV=std::vector<ptrdiff_t={int}, std::allocator<int>>, Workspace=boost::numeric::bindings::lapack::optimal_workspace]" at line 102 of "C:\working\etk_lib\test_suite\etk\test_ublas.cpp"