From: Chris Dams Date: Thu, 15 Dec 2005 17:28:32 +0000 (+0000) Subject: Don't abort if cannot find minimal dimension of indices when trying use X-Git-Tag: release_1-4-0~125 X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=commitdiff_plain;h=b87f623d787279a123c8db77cef2c84bc5874239;ds=sidebyside Don't abort if cannot find minimal dimension of indices when trying use scalar_products. --- diff --git a/ginac/indexed.cpp b/ginac/indexed.cpp index 5ed31f32..0c1c904f 100644 --- a/ginac/indexed.cpp +++ b/ginac/indexed.cpp @@ -795,27 +795,29 @@ try_again: bool contracted = false; if (free.empty()) { - // Find minimal dimension of all indices of both factors - exvector::const_iterator dit = ex_to(*it1).seq.begin() + 1, ditend = ex_to(*it1).seq.end(); - ex dim = ex_to(*dit).get_dim(); - ++dit; - for (; dit != ditend; ++dit) { - dim = minimal_dim(dim, ex_to(*dit).get_dim()); - } - dit = ex_to(*it2).seq.begin() + 1; - ditend = ex_to(*it2).seq.end(); - for (; dit != ditend; ++dit) { - dim = minimal_dim(dim, ex_to(*dit).get_dim()); - } + try { + // Find minimal dimension of all indices of both factors + exvector::const_iterator dit = ex_to(*it1).seq.begin() + 1, ditend = ex_to(*it1).seq.end(); + ex dim = ex_to(*dit).get_dim(); + ++dit; + for (; dit != ditend; ++dit) { + dim = minimal_dim(dim, ex_to(*dit).get_dim()); + } + dit = ex_to(*it2).seq.begin() + 1; + ditend = ex_to(*it2).seq.end(); + for (; dit != ditend; ++dit) { + dim = minimal_dim(dim, ex_to(*dit).get_dim()); + } - // User-defined scalar product? - if (sp.is_defined(*it1, *it2, dim)) { + // User-defined scalar product? + if (sp.is_defined(*it1, *it2, dim)) { - // Yes, substitute it - *it1 = sp.evaluate(*it1, *it2, dim); - *it2 = _ex1; - goto contraction_done; - } + // Yes, substitute it + *it1 = sp.evaluate(*it1, *it2, dim); + *it2 = _ex1; + goto contraction_done; + } + } catch (const std::runtime_error&) {} } // Try to contract the first one with the second one