Skip to content

Commit da16055

Browse files
committed
some similarterm improvements
1 parent 8df86e5 commit da16055

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

src/types.jl

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -626,7 +626,7 @@ operation(a::Add) = +
626626

627627
function arguments(a::Add)
628628
a.sorted_args_cache[] !== nothing && return a.sorted_args_cache[]
629-
args = sort!([v*k for (k,v) in a.dict], lt=<ₑ)
629+
args = sort!([similarterm(k,*,[v,k]) for (k,v) in a.dict], lt=<ₑ)
630630
a.sorted_args_cache[] = iszero(a.coeff) ? args : vcat(a.coeff, args)
631631
end
632632

@@ -949,15 +949,16 @@ function similarterm(p::NumericTerm, f, args, T=nothing; metadata=nothing)
949949
if T === nothing
950950
T = _promote_symtype(f, args)
951951
end
952-
if f === (+)
953-
Add(T, makeadd(1, 0, args...)...; metadata=metadata)
954-
elseif f == (*)
955-
Mul(T, makemul(1, args...)...; metadata=metadata)
956-
elseif f == (^) && length(args) == 2
957-
Pow{T, typeof.(args)...}(args...; metadata=metadata)
958-
else
959-
Term{T}(f, args; metadata=metadata)
952+
if T <: Number
953+
if f === (+)
954+
return Add(T, makeadd(1, 0, args...)...; metadata=metadata)
955+
elseif f == (*)
956+
return Mul(T, makemul(1, args...)...; metadata=metadata)
957+
elseif f == (^) && length(args) == 2
958+
return Pow{T, typeof.(args)...}(args...; metadata=metadata)
959+
end
960960
end
961+
Term{T}(f, args; metadata=metadata)
961962
end
962963

963964
function Base.hash(t::Union{Add,Mul}, u::UInt64)

0 commit comments

Comments
 (0)