From a1232ef3c23d3af7673c96ec4f0e0c652054564a Mon Sep 17 00:00:00 2001 From: "Vladimir V. Kisil" Date: Sun, 25 Jan 2015 11:39:04 +0100 Subject: [PATCH] Small optimization in simplify_indexed. If the new expression is product again then we call the same function return simplify_indexed_product() rather than the its mother implify_indexed(). --- ginac/indexed.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/ginac/indexed.cpp b/ginac/indexed.cpp index e8ca5cec..0c4103c2 100644 --- a/ginac/indexed.cpp +++ b/ginac/indexed.cpp @@ -874,8 +874,16 @@ contraction_done: // Non-commutative products are always re-expanded to give // eval_ncmul() the chance to re-order and canonicalize // the product + bool is_a_product = (is_exactly_a(*it1) || is_exactly_a(*it1)) && + (is_exactly_a(*it2) || is_exactly_a(*it2)); ex r = (non_commutative ? ex(ncmul(v, true)) : ex(mul(v))); - return simplify_indexed(r, free_indices, dummy_indices, sp); + + // If new expression is a product we can call this function again, + // otherwise we need to pass argument to simplify_indexed() to be expanded + if (is_a_product) + return simplify_indexed_product(r, free_indices, dummy_indices, sp); + else + return simplify_indexed(r, free_indices, dummy_indices, sp); } // Both objects may have new indices now or they might -- 2.44.0