Multiplication by a Mul does not work the way you expect it to.
First off, the printing order has nothing to do with anything. If that's all you care about, you can change it by modifying the printer.
You should instead look at the object's .args
. But even here, this does not matter. When you multiply something by a multiplication, it does not "apply" each multiplication in the order it is seen. Rather, it creates a new Mul
object with all the args combined (to be sure, in the commutative=False
case, the args are kept in order). Mul does not call any special submethods on these objects. This is a feature we want (see https://code.google.com/p/sympy/issues/detail?q=1941&id=1941 and https://github.com/sympy/sympy/wiki/Canonicalization), but for now, it is not done.