# untested but something like... m = {}
def func(nc): return 2*nc # whatever your rule is def product_bases(w): nc = w.args_cnc()[1] if len(nc) == 2 or len(nc) == 1 and nc[0].is_Pow and nc[0].exp == 2: return Mul._from_args(nc) def updater(p, func): p2 = product_bases(p) if p2 and p2 not in m: m[p2] = func(p2) return m[p2] return p (15*ex**2 + 6*ey*ex).xreplace(Transform(lambda k: updater(k, func), lambda w: w.is_Mul)) -- You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sympy+unsubscr...@googlegroups.com. To post to this group, send email to sympy@googlegroups.com. Visit this group at http://groups.google.com/group/sympy?hl=en-US. For more options, visit https://groups.google.com/groups/opt_out.