From f37a9876e21bf7ebdc60b28ef974852a141aafc8 Mon Sep 17 00:00:00 2001 From: Jens Vollinga Date: Mon, 15 Oct 2007 23:44:15 +0000 Subject: [PATCH] Synced to HEAD: - This helps mul::expand() and friends to recognize objects which have no indices at all [Sheplyakov]. --- ginac/flags.h | 3 ++- ginac/mul.cpp | 8 +++++++- ginac/power.cpp | 7 ++++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/ginac/flags.h b/ginac/flags.h index 372b8993..39a2113a 100644 --- a/ginac/flags.h +++ b/ginac/flags.h @@ -30,7 +30,8 @@ class expand_options { public: enum { expand_indexed = 0x0001, ///< expands (a+b).i to a.i+b.i - expand_function_args = 0x0002 ///< expands the arguments of functions + expand_function_args = 0x0002, ///< expands the arguments of functions + expand_rename_idx = 0x0004 ///< used internally by mul::expand() }; }; diff --git a/ginac/mul.cpp b/ginac/mul.cpp index 298715b3..4e95a638 100644 --- a/ginac/mul.cpp +++ b/ginac/mul.cpp @@ -1002,7 +1002,13 @@ ex mul::expand(unsigned options) const return (new mul(*this))->setflag(status_flags::dynallocated | status_flags::expanded); } - const bool skip_idx_rename = ! info(info_flags::has_indices); + // do not rename indices if the object has no indices at all + if ((!(options & expand_options::expand_rename_idx)) && + this->info(info_flags::has_indices)) + options |= expand_options::expand_rename_idx; + + const bool skip_idx_rename = !(options & expand_options::expand_rename_idx); + // First, expand the children std::auto_ptr expanded_seqp = expandchildren(options); const epvector & expanded_seq = (expanded_seqp.get() ? *expanded_seqp : seq); diff --git a/ginac/power.cpp b/ginac/power.cpp index cc003bce..7d909e85 100644 --- a/ginac/power.cpp +++ b/ginac/power.cpp @@ -1009,8 +1009,13 @@ ex power::expand_mul(const mul & m, const numeric & n, unsigned options, bool fr return _ex1; } + // do not bother to rename indices if there are no any. + if ((!(options & expand_options::expand_rename_idx)) + && m.info(info_flags::has_indices)) + options |= expand_options::expand_rename_idx; // Leave it to multiplication since dummy indices have to be renamed - if (get_all_dummy_indices(m).size() > 0 && n.is_positive()) { + if ((options & expand_options::expand_rename_idx) && + (get_all_dummy_indices(m).size() > 0) && n.is_positive()) { ex result = m; exvector va = get_all_dummy_indices(m); sort(va.begin(), va.end(), ex_is_less()); -- 2.49.0