Skip to content

Commit 4e35bae

Browse files
committed
Mul-Pow case
1 parent 32d38dd commit 4e35bae

File tree

3 files changed

+25
-2
lines changed

3 files changed

+25
-2
lines changed

src/polyform.jl

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export PolyForm, simplify_fractions
1+
export PolyForm, simplify_fractions, quick_cancel
22
using Bijections
33
using DynamicPolynomials: PolyVar
44

@@ -341,6 +341,27 @@ function quick_cancel(x::Mul, y)
341341
end
342342
end
343343

344+
function quick_cancel(x::Mul, y::Pow)
345+
if haskey(x.dict, y.base)
346+
d = copy(x.dict)
347+
if x.dict[y.base] > y.exp
348+
d[y.base] -= y.exp
349+
den = 1
350+
elseif x.dict[y.base] == y.exp
351+
delete!(d, y.base)
352+
den = 1
353+
else
354+
den = Pow{symtype(y)}(y.base, y.exp-d[y.base])
355+
delete!(d, y.base)
356+
end
357+
return Mul(symtype(x), x.coeff, d), den
358+
else
359+
return x, y
360+
end
361+
end
362+
363+
quick_cancel(x::Pow, y::Mul) = reverse(quick_cancel(y,x))
364+
344365
quick_cancel(y, x::Mul) = reverse(quick_cancel(x,y))
345366

346367
function quick_cancel(x::Mul, y::Mul)

test/polyform.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,6 @@ end
4343
@eqtest simplify_fractions(2x^3 * y / x) == 2y*x^2
4444
@eqtest simplify_fractions(x / (3(x^3)*y)) == simplify_fractions(1/(3*(y*x^2)))
4545
@eqtest simplify_fractions(2x / (3(x^3)*y)) == simplify_fractions(2/(3*(y*x^2)))
46+
@eqtest simplify_fractions(x^2 / (3(x^3)*y)) == simplify_fractions(1/(3*(y*x)))
47+
@eqtest simplify_fractions((3(x^3)*y) / x^2) == simplify_fractions(3*(y*x))
4648
end

test/rulesets.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ end
4242
@eqtest simplify(a + b + 0*c + d) == simplify(a + b + d)
4343
@eqtest simplify(a * b * c^0 * d) == simplify(a * b * d)
4444
@eqtest simplify(a * b * 1*c * d) == simplify(a * b * c * d)
45-
@eqtest repr(simplify_fractions(x^2.0/(x*y)^2.0)) == "1 / (y^2.0)"
45+
@eqtest simplify_fractions(x^2.0/(x*y)^2.0) == simplify_fractions(1 / (y^2.0))
4646

4747
@test simplify(Term(one, [a])) == 1
4848
@test simplify(Term(one, [b+1])) == 1

0 commit comments

Comments
 (0)