Symbolics.jl
Symbolics.jl copied to clipboard
Errors when expanding polynomials with coefficient π
Here is an example:
julia> using Symbolics
julia> @variables x
1-element Vector{Num}:
x
julia> (x+π)^2 |> expand
ERROR: MethodError: no method matching Int64(::Irrational{:π})
Closest candidates are:
(::Type{T})(::T) where T<:Number at /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/base/boot.jl:770
(::Type{T})(::SymbolicUtils.Symbolic) where T<:Union{AbstractFloat, Integer, Complex{<:AbstractFloat}, Complex{<:Integer}} at ~/.julia/packages/Symbolics/8NTj0/src/Symbolics.jl:137
(::Type{T})(::AbstractChar) where T<:Union{Int32, Int64} at /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/base/char.jl:51
...
Stacktrace:
[1] convert(#unused#::Type{Int64}, x::Irrational{:π})
@ Base ./number.jl:7
[2] scaling_convert(T::Type, x::Irrational{:π})
@ MutableArithmetics ~/.julia/packages/MutableArithmetics/L8iac/src/MutableArithmetics.jl:79
[3] _plusorminus_to!(a::Vector{Int64}, Z::Vector{Vector{Int64}}, op::typeof(+), p::DynamicPolynomials.Term{true, Irrational{:π}}, q::DynamicPolynomials.Term{true, Int64}, maps::Vector{Vector{Int64}}, nvars::Int64)
@ DynamicPolynomials ~/.julia/packages/DynamicPolynomials/juS7t/src/operators.jl:27
[4] plusorminus(p::DynamicPolynomials.Term{true, Irrational{:π}}, q::DynamicPolynomials.Term{true, Int64}, op::Function)
@ DynamicPolynomials ~/.julia/packages/DynamicPolynomials/juS7t/src/operators.jl:52
[5] +
@ ~/.julia/packages/DynamicPolynomials/juS7t/src/operators.jl:130 [inlined]
[6] +(x::DynamicPolynomials.Term{true, Irrational{:π}}, y::DynamicPolynomials.PolyVar{true})
@ DynamicPolynomials ~/.julia/packages/DynamicPolynomials/juS7t/src/operators.jl:132
[7] plusconstant
@ ~/.julia/packages/MultivariatePolynomials/1bIGc/src/operators.jl:226 [inlined]
[8] +
@ ~/.julia/packages/MultivariatePolynomials/1bIGc/src/operators.jl:46 [inlined]
[9] add_sum(x::Irrational{:π}, y::DynamicPolynomials.PolyVar{true})
@ Base ./reduce.jl:24
[10] _mapreduce(f::SymbolicUtils.var"#local_polyize#91"{Bijections.Bijection{Any, Any}, Dict{SymbolicUtils.Sym, Any}, DataType, typeof(SymbolicUtils.pow), Union, Bool}, op::typeof(Base.add_sum), #unused#::IndexLinear, A::Vector{Any})
@ Base ./reduce.jl:410
[11] _mapreduce_dim(f::Function, op::Function, #unused#::Base._InitialValue, A::Vector{Any}, #unused#::Colon)
@ Base ./reducedim.jl:330
[12] #mapreduce#725
@ ./reducedim.jl:322 [inlined]
[13] mapreduce
@ ./reducedim.jl:322 [inlined]
[14] #_sum#735
@ ./reducedim.jl:894 [inlined]
[15] _sum
@ ./reducedim.jl:894 [inlined]
[16] #sum#733
@ ./reducedim.jl:890 [inlined]
[17] sum(f::Function, a::Vector{Any})
@ Base ./reducedim.jl:890
[18] polyize(x::SymbolicUtils.Add{Real, Irrational{:π}, Dict{Any, Number}, Nothing}, pvar2sym::Bijections.Bijection{Any, Any}, sym2term::Dict{SymbolicUtils.Sym, Any}, vtype::Type, pow::Function, Fs::Type, recurse::Bool)
@ SymbolicUtils ~/.julia/packages/SymbolicUtils/v2ZkM/src/polyform.jl:110
[19] (::SymbolicUtils.var"#local_polyize#91"{Bijections.Bijection{Any, Any}, Dict{SymbolicUtils.Sym, Any}, DataType, typeof(SymbolicUtils.pow), Union, Bool})(y::SymbolicUtils.Add{Real, Irrational{:π}, Dict{Any, Number}, Nothing})
@ SymbolicUtils ~/.julia/packages/SymbolicUtils/v2ZkM/src/polyform.jl:107
[20] polyize(x::SymbolicUtils.Pow{Real, SymbolicUtils.Add{Real, Irrational{:π}, Dict{Any, Number}, Nothing}, Int64, Nothing}, pvar2sym::Bijections.Bijection{Any, Any}, sym2term::Dict{SymbolicUtils.Sym, Any}, vtype::Type, pow::Function, Fs::Type, recurse::Bool)
@ SymbolicUtils ~/.julia/packages/SymbolicUtils/v2ZkM/src/polyform.jl:115
[21] PolyForm(x::SymbolicUtils.Pow{Real, SymbolicUtils.Add{Real, Irrational{:π}, Dict{Any, Number}, Nothing}, Int64, Nothing}, pvar2sym::Bijections.Bijection{Any, Any}, sym2term::Dict{SymbolicUtils.Sym, Any}, vtype::Type; Fs::Type, recurse::Bool, metadata::Nothing)
@ SymbolicUtils ~/.julia/packages/SymbolicUtils/v2ZkM/src/polyform.jl:168
[22] expand(expr::SymbolicUtils.Pow{Real, SymbolicUtils.Add{Real, Irrational{:π}, Dict{Any, Number}, Nothing}, Int64, Nothing})
@ SymbolicUtils ~/.julia/packages/SymbolicUtils/v2ZkM/src/polyform.jl:234
[23] expand(n::Num)
@ Symbolics ~/.julia/packages/Symbolics/8NTj0/src/Symbolics.jl:144
[24] |>(x::Num, f::typeof(expand))
@ Base ./operators.jl:966
[25] top-level scope
@ REPL[3]:1
See JuliaAlgebra/DynamicPolynomials.jl#114
This is fixed by https://github.com/jump-dev/MutableArithmetics.jl/pull/165