Opened 16 years ago

Closed 15 years ago

#688 closed Bugs (fixed)

ublas: bug in mapped_vector_of_mapped_vector

Reported by: Matthias Troyer Owned by: Gunter
Milestone: Component: uBLAS
Version: None Severity: Problem
Keywords: Cc:

Description

There is a serious bug in the mapped_vector_of_mapped_vector spare  
matrix type. Rows containing only zero elements are not treated  
correctly in prod(). The following code should give a vector that  
contains only 1 in the last element. Instead prod() gives a vector  
containing 1 in each element. In debug mode this bug is found by the  
checks:

Check failed in file boost/boost/numeric/ublas/detail/ 
vector_assign.hpp at line 371:
detail::expression_type_check (v, cv)
Aborted

The bug appears in Boost 1.33 as well as in the CVS version


#include <boost/numeric/ublas/matrix_sparse.hpp>
#include <boost/numeric/ublas/vector.hpp>

int main()
{
   boost::numeric::ublas::mapped_vector_of_mapped_vector<double> 
m 
(64,64);
   boost::numeric::ublas::vector<double> v(64);
   boost::numeric::ublas::vector<double> w(64);
   v[63] = 1.;
   m(63,63) = 1.;
   w = boost::numeric::ublas::prod(m,v);
}


Change History (2)

comment:1 by Gunter, 15 years ago

Owner: changed from mistevens to Gunter
Severity: Problem
Status: assignednew

the issue was already solved at 07.11.2006 but the patch was never commited.

comment:2 by Gunter, 15 years ago

Resolution: Nonefixed
Status: newclosed

patch commited to SVN. See thread "Serious bug in mapped_vector_of_mapped_vector" of uBLAS mailing list (from sept. 2006!)

On Thursday 07 September 2006 14:04, Gunter Winkler wrote:

On Sunday 23 July 2006 11:13, Matthias Troyer wrote:

There is a serious bug in the mapped_vector_of_mapped_vector spare matrix type. Rows containing only zero elements are not treated correctly in prod(). The following code should give a vector that contains only 1 in the last element. Instead prod() gives a vector containing 1 in each element. In debug mode this bug is found by the

I could reproduce the bug. It is inside the vector_assign logic. The product is correctly computed, but the assignment fails. I will give more details shortly.

I finally found the bug and (hopefully) fixed it. The patch and sample program is attached. Is someone using mapped_vector_of_mapped_vector in a larger program? I'd like to know if the changes have any unexpected side affect.

I changed the behavior of the iterators: Even the outer iterators skip empty rows (or columns).

Note: See TracTickets for help on using tickets.