Symbolics.jl icon indicating copy to clipboard operation
Symbolics.jl copied to clipboard

Errors when expanding polynomials with coefficient π

Open ChenZhao44 opened this issue 2 years ago • 1 comments

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

ChenZhao44 avatar May 31 '22 06:05 ChenZhao44

See JuliaAlgebra/DynamicPolynomials.jl#114

bowenszhu avatar Aug 10 '22 20:08 bowenszhu

This is fixed by https://github.com/jump-dev/MutableArithmetics.jl/pull/165

bowenszhu avatar Oct 09 '22 00:10 bowenszhu