@@ -626,7 +626,7 @@ operation(a::Add) = +
626626
627627function 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)
631631end
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)
961962end
962963
963964function Base. hash (t:: Union{Add,Mul} , u:: UInt64 )
0 commit comments