You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When I try to sum an array of Symbolics I get a conversion error.
MWE:
@syms a b
l = [a, b]
sum(l, dims=1)
Output:
MethodError: Cannot `convert` an object of type SymbolicUtils.BasicSymbolic{Number} to an object of type Int64
Closest candidates are:convert(::Type{T}, !Matched::DualNumbers.Dual) where T<:Union{Real, Complex}
@ DualNumbers ~/.julia/packages/DualNumbers/5knFX/src/dual.jl:24convert(::Type{T}, !Matched::MultivariatePolynomials.AbstractPolynomialLike) where T<:Number
@ MultivariatePolynomials ~/.julia/packages/MultivariatePolynomials/TpRhf/src/conversion.jl:96convert(::Type{T}, !Matched::T) where T
@ Base Base.jl:84...setindex!(::Vector{Int64}, ::SymbolicUtils.BasicSymbolic{Number}, ::Int64)@array.jl:1021
setindex!@multidimensional.jl:698[inlined]
_mapreducedim!(::typeof(identity), ::typeof(Base.add_sum), ::Vector{Int64}, ::Vector{SymbolicUtils.BasicSymbolic{Number}})@reducedim.jl:311mapreducedim!(::Function, ::Function, ::Vector{Int64}, ::Vector{SymbolicUtils.BasicSymbolic{Number}})@reducedim.jl:324_mapreduce_dim(::Function, ::Function, ::Base._InitialValue, ::Vector{SymbolicUtils.BasicSymbolic{Number}}, ::Int64)@reducedim.jl:371
mapreduce@reducedim.jl:357[inlined]
_sum@reducedim.jl:1039[inlined]
_sum@reducedim.jl:1038[inlined]
sum@reducedim.jl:1010[inlined]
top-level scope@[Local:4](http://localhost:1234/edit?id=f65195a4-d00d-11ee-25e9-41c812cd54ea#)[inlined]
I think what's happening is roughly this: it creates an array to put the results of the summation into, and for some reason it thinks the appropriate type to use is Array{Int64, ...}. So then when it goes to place a BasicSymbolic{Number} in there we get an error. So I guess the problem is with the type prediction infrastructure.
The text was updated successfully, but these errors were encountered:
akriegman
changed the title
Cannot sum an array using dims keyword because of conversion error
Cannot sum an array of symbolics because of conversion error
Feb 21, 2024
I looked into this more, and I think the deeper problem is that when you call sum with dims it needs an init value, and there is no zero(Any) or zero(BasicSymbolic{Number}), so instead it uses zero(Int64). It would be fine if we had and Any[] full of zero(Int64)s, but instead we have an Int64[], so when we finally do the addition we promote the type correctly but can't store it in the result array.
Anyways, I found a workaround:
@syms a b c d
l = [
a b
c d
]
sum(eachslice(l, dims=1))
When I try to sum an array of Symbolics I get a conversion error.
MWE:
Output:
I think what's happening is roughly this: it creates an array to put the results of the summation into, and for some reason it thinks the appropriate type to use is
Array{Int64, ...}
. So then when it goes to place aBasicSymbolic{Number}
in there we get an error. So I guess the problem is with the type prediction infrastructure.The text was updated successfully, but these errors were encountered: