Skip to content

Commit f7a77d6

Browse files
committed
Define get_exp
1 parent 8e73313 commit f7a77d6

File tree

2 files changed

+20
-16
lines changed

2 files changed

+20
-16
lines changed

src/polyform.jl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -265,10 +265,10 @@ end
265265

266266
function polyform_factors(d, pvar2sym, sym2term)
267267
make(xs) = map(xs) do x
268-
if ispow(x) && x.impl.exp isa Integer && x.impl.exp > 0
268+
if ispow(x) && get_exp(x) isa Integer && get_exp(x) > 0
269269
# here we do want to recurse one level, that's why it's wrong to just
270270
# use Fs = Union{typeof(+), typeof(*)} here.
271-
_Pow(PolyForm(get_base(x), pvar2sym, sym2term), x.impl.exp)
271+
_Pow(PolyForm(get_base(x), pvar2sym, sym2term), get_exp(x))
272272
else
273273
PolyForm(x, pvar2sym, sym2term)
274274
end
@@ -417,7 +417,7 @@ Has optimized processes for `Mul` and `Pow` terms.
417417
"""
418418
function quick_cancel(d)
419419
if ispow(d) && isdiv(get_base(d))
420-
return quick_cancel((get_num(get_base(d))^d.impl.exp) / (get_den(get_base(d))^d.impl.exp))
420+
return quick_cancel((get_num(get_base(d))^get_exp(d)) / (get_den(get_base(d))^get_exp(d)))
421421
elseif ismul(d) && any(isdiv, arguments(d))
422422
return prod(arguments(d))
423423
elseif isdiv(d)
@@ -501,17 +501,17 @@ end
501501

502502
# mul, pow case
503503
function quick_mulpow(x, y)
504-
y.impl.exp isa Number || return (x, y)
504+
get_exp(y) isa Number || return (x, y)
505505
if haskey(get_dict(x), get_base(y))
506506
d = copy(get_dict(x))
507-
if get_dict(x)[get_base(y)] > y.impl.exp
508-
d[get_base(y)] -= y.impl.exp
507+
if get_dict(x)[get_base(y)] > get_exp(y)
508+
d[get_base(y)] -= get_exp(y)
509509
den = 1
510-
elseif get_dict(x)[get_base(y)] == y.impl.exp
510+
elseif get_dict(x)[get_base(y)] == get_exp(y)
511511
delete!(d, get_base(y))
512512
den = 1
513513
else
514-
den = _Pow(symtype(y), get_base(y), y.impl.exp-d[get_base(y)])
514+
den = _Pow(symtype(y), get_base(y), get_exp(y)-d[get_base(y)])
515515
delete!(d, get_base(y))
516516
end
517517
return _Mul(symtype(x), get_coeff(x), d), den

src/types.jl

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,10 @@ function get_base(x::BasicSymbolic)
8888
x.impl.base
8989
end
9090

91+
function get_exp(x::BasicSymbolic)
92+
x.impl.exp
93+
end
94+
9195
# Same but different error messages
9296
@noinline error_on_type() = error("Internal error: unreachable reached!")
9397
@noinline error_sym() = error("Sym doesn't have a operation or arguments!")
@@ -317,7 +321,7 @@ function _isequal(a, b, E)
317321
elseif E === DIV
318322
isequal(get_num(a), get_num(b)) && isequal(get_den(a), get_den(b))
319323
elseif E === POW
320-
isequal(a.impl.exp, b.impl.exp) && isequal(get_base(a), get_base(b))
324+
isequal(get_exp(a), get_exp(b)) && isequal(get_base(a), get_base(b))
321325
elseif E === TERM
322326
a1 = arguments(a)
323327
a2 = arguments(b)
@@ -363,7 +367,7 @@ function Base.hash(s::BasicSymbolic, salt::UInt)::UInt
363367
elseif E === DIV
364368
return hash(get_num(s), hash(get_den(s), salt DIV_SALT))
365369
elseif E === POW
366-
hash(s.impl.exp, hash(get_base(s), salt POW_SALT))
370+
hash(get_exp(s), hash(get_base(s), salt POW_SALT))
367371
elseif E === TERM
368372
!iszero(salt) && return hash(hash(s, zero(UInt)), salt)
369373
h = s.hash[]
@@ -566,7 +570,7 @@ function toterm(t::BasicSymbolic{T}) where {T}
566570
elseif E === DIV
567571
_Term(T, /, [get_num(t), get_den(t)])
568572
elseif E === POW
569-
_Term(T, ^, [get_base(t), t.impl.exp])
573+
_Term(T, ^, [get_base(t), get_exp(t)])
570574
else
571575
error_on_type()
572576
end
@@ -608,8 +612,8 @@ end
608612

609613
function makemul(coeff, xs...; d = Dict{BasicSymbolic, Any}())
610614
for x in xs
611-
if ispow(x) && x.impl.exp isa Number
612-
d[get_base(x)] = x.impl.exp + get(d, get_base(x), 0)
615+
if ispow(x) && get_exp(x) isa Number
616+
d[get_base(x)] = get_exp(x) + get(d, get_base(x), 0)
613617
elseif x isa Number
614618
coeff *= x
615619
elseif ismul(x)
@@ -634,7 +638,7 @@ function makepow(a, b)
634638
exp = b
635639
if ispow(a)
636640
base = get_base(a)
637-
exp = a.impl.exp * b
641+
exp = get_exp(a) * b
638642
end
639643
base, exp
640644
end
@@ -1312,10 +1316,10 @@ function *(a::SN, b::SN)
13121316
_Mul(mul_t(a, b), get_coeff(a) * get_coeff(b),
13131317
_merge(+, get_dict(a), get_dict(b), filter = _iszero))
13141318
elseif ismul(a) && ispow(b)
1315-
if b.impl.exp isa Number
1319+
if get_exp(b) isa Number
13161320
_Mul(mul_t(a, b),
13171321
get_coeff(a),
1318-
_merge(+, get_dict(a), Base.ImmutableDict(get_base(b) => b.impl.exp),
1322+
_merge(+, get_dict(a), Base.ImmutableDict(get_base(b) => get_exp(b)),
13191323
filter = _iszero))
13201324
else
13211325
_Mul(mul_t(a, b), get_coeff(a),

0 commit comments

Comments
 (0)