Fix SparseNormalCholeskySolver with dynamic sparsity. The previous implementation incorrectly cached the outer product matrix pattern even when `dynamic_sparsity = true`. Change-Id: I1e58315a9b44f2f457d07c56b203ab2668bfb8a2
diff --git a/internal/ceres/sparse_normal_cholesky_solver.cc b/internal/ceres/sparse_normal_cholesky_solver.cc index 495ed87..ef9bcc7 100644 --- a/internal/ceres/sparse_normal_cholesky_solver.cc +++ b/internal/ceres/sparse_normal_cholesky_solver.cc
@@ -203,7 +203,7 @@ // // TODO(sameeragarwal): See note about how this maybe a bad idea for // dynamic sparsity. - if (outer_product_.get() == NULL) { + if (outer_product_.get() == NULL || options_.dynamic_sparsity) { outer_product_.reset( CompressedRowSparseMatrix::CreateOuterProductMatrixAndProgram( *A, &pattern_)); @@ -306,7 +306,7 @@ // TODO(sameeragarwal): If dynamic sparsity is enabled, then this is // not a good idea performance wise, since the jacobian has far too // many entries and the program will go crazy with memory. - if (outer_product_.get() == NULL) { + if (outer_product_.get() == NULL || options_.dynamic_sparsity) { outer_product_.reset( CompressedRowSparseMatrix::CreateOuterProductMatrixAndProgram( *A, &pattern_));