Boost logo

Ublas :

Subject: [ublas] Test results for getri and getrf
From: Jesse Perla (jesseperla_at_[hidden])
Date: 2009-02-28 18:02:58


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"