From: Richard Kreckel Date: Tue, 24 Nov 2015 10:14:51 +0000 (+0100) Subject: mul::can_make_flat(): Finish ancient unfinished code. X-Git-Tag: release_1-7-0~7^2~52 X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?a=commitdiff_plain;h=26e2662e;p=ginac.git 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. --- 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)