From 26e2662e3e963db592080c7dc573384850d4eade Mon Sep 17 00:00:00 2001 From: Richard Kreckel Date: Tue, 24 Nov 2015 11:14:51 +0100 Subject: [PATCH] mul::can_make_flat(): Finish ancient unfinished code. This makes mul(expairseq({a*b,2},{b})) construct the canonical mul(expairseq({a,3},{b,2})). Normally, such term rewriting is done by the .eval() methods, but this is not done when a plain object of a class derived from basic is constructed. --- ginac/mul.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/ginac/mul.cpp b/ginac/mul.cpp index f8ddd9b2..c899ee11 100644 --- a/ginac/mul.cpp +++ b/ginac/mul.cpp @@ -1047,10 +1047,9 @@ void mul::combine_overall_coeff(const ex & c1, const ex & c2) bool mul::can_make_flat(const expair & p) const { GINAC_ASSERT(is_exactly_a(p.coeff)); - // this assertion will probably fail somewhere - // it would require a more careful make_flat, obeying the power laws - // probably should return true only if p.coeff is integer - return ex_to(p.coeff).is_equal(*_num1_p); + + // (x*y)^c == x^c*y^c if c ∈ ℤ + return p.coeff.info(info_flags::integer); } bool mul::can_be_further_expanded(const ex & e) -- 2.44.0