def breakup(eq): """break up powers assuming (not checking) that eq is a Mul: b**(Rational*e) -> b**e, Rational commutatives come back as a dictionary {b**e: Rational} noncommutatives come back as a list [(b**e, Rational)] """ (c, nc) = (dict(), list()) for (i, a) in enumerate( Mul.make_args(eq) or [eq]): # remove or [eq] after 2114 accepted a = powdenest(a) (b, e) = a.as_base_exp() if not e is S.One: (co, _) = e.as_coeff_mul() b = Pow(b, e / co) e = co if a.is_commutative: if b in c: # handle I and -1 like things where b, e for I is -1, 1/2 c[b] += e else: c[b] = e else: nc.append([b, e]) return (c, nc)
def breakup(eq): """break up powers of eq when treated as a Mul: b**(Rational*e) -> b**e, Rational commutatives come back as a dictionary {b**e: Rational} noncommutatives come back as a list [(b**e, Rational)] """ (c, nc) = (defaultdict(int), list()) for a in Mul.make_args(eq): a = powdenest(a) (b, e) = base_exp(a) if e is not S.One: (co, _) = e.as_coeff_mul() b = Pow(b, e/co) e = co if a.is_commutative: c[b] += e else: nc.append([b, e]) return (c, nc)
def breakup(eq): """break up powers assuming (not checking) that eq is a Mul: b**(Rational*e) -> b**e, Rational commutatives come back as a dictionary {b**e: Rational} noncommutatives come back as a list [(b**e, Rational)] """ (c, nc) = (dict(), list()) for (i, a) in enumerate(Mul.make_args(eq)): a = powdenest(a) (b, e) = a.as_base_exp() if e is not S.One: (co, _) = e.as_coeff_mul() b = Pow(b, e/co) e = co if a.is_commutative: if b in c: # handle I and -1 like things where b, e for I is -1, 1/2 c[b] += e else: c[b] = e else: nc.append([b, e]) return (c, nc)