-
Notifications
You must be signed in to change notification settings - Fork 126
Description
Consider this simple code, simplifying the solution of some quadratic equation:
using Symbolics
@variables β
b = (1+8*β^2)/(2*(1-β^2))
x_coeff = (b^2 + 2*b - 2)
x2_coeff = 1
one_coeff = 1 - 2*b
sol = (- x_coeff + sqrt(x_coeff^2 - 4 * x2_coeff * one_coeff)) / (2 * x2_coeff)
# This works
simplify(sol, expand=false)
# This raises an exception
simplify(sol, expand=true)
# This works
expand(sol)
Strangely, the line simplify(sol, expand=true) causes an error, while simplification without expand, or just expand without simplification, work perfectly fine. simplify(expand(sol)) raises the same exception as well.
Stack trace:
ERROR: ArgumentError: array must be non-empty
Stacktrace:
[1] _throw_argerror(s::String)
@ Base .\array.jl:317
[2] pop!
@ .\array.jl:1613 [inlined]
[3] operate!(::typeof(MultivariatePolynomials.remove_leading_term), p::DynamicPolynomials.Polynomial{…})
@ DynamicPolynomials C:\Users\OmerChor.julia\packages\DynamicPolynomials\zmLM4\src\poly.jl:179
[4] buffered_operate!(buffer::Nothing, op::typeof(MultivariatePolynomials.pseudo_rem), f::DynamicPolynomials.Polynomial{…}, g::DynamicPolynomials.Polynomial{…}, algo::MultivariatePolynomials.SubresultantAlgorithm)
@ MultivariatePolynomials C:\Users\OmerChor.julia\packages\MultivariatePolynomials\yR88J\src\division.jl:318
[5] primitive_univariate_gcd!(p::DynamicPolynomials.Polynomial{…}, q::DynamicPolynomials.Polynomial{…}, algo::MultivariatePolynomials.SubresultantAlgorithm)
@ MultivariatePolynomials C:\Users\OmerChor.julia\packages\MultivariatePolynomials\yR88J\src\gcd.jl:598
[6] primitive_univariate_gcd!(p::DynamicPolynomials.Polynomial{…}, q::DynamicPolynomials.Polynomial{…}, algo::MultivariatePolynomials.SubresultantAlgorithm)
@ MultivariatePolynomials C:\Users\OmerChor.julia\packages\MultivariatePolynomials\yR88J\src\gcd.jl:604
[7] univariate_gcd(::MultivariatePolynomials.UniqueFactorizationDomain, p1::DynamicPolynomials.Polynomial{…}, p2::DynamicPolynomials.Polynomial{…}, algo::MultivariatePolynomials.SubresultantAlgorithm, m1::MutableArithmetics.IsNotMutable, m2::MutableArithmetics.IsNotMutable)
@ MultivariatePolynomials C:\Users\OmerChor.julia\packages\MultivariatePolynomials\yR88J\src\gcd.jl:773
[8] univariate_gcd
@ C:\Users\OmerChor.julia\packages\MultivariatePolynomials\yR88J\src\gcd.jl:754 [inlined]
[9] deflated_gcd(p1::DynamicPolynomials.Polynomial{…}, p2::DynamicPolynomials.Polynomial{…}, algo::MultivariatePolynomials.SubresultantAlgorithm, m1::MutableArithmetics.IsNotMutable, m2::MutableArithmetics.IsNotMutable)
@ MultivariatePolynomials C:\Users\OmerChor.julia\packages\MultivariatePolynomials\yR88J\src\gcd.jl:358
[10] gcd(p1::DynamicPolynomials.Polynomial{…}, p2::DynamicPolynomials.Polynomial{…}, algo::MultivariatePolynomials.SubresultantAlgorithm, m1::MutableArithmetics.IsNotMutable, m2::MutableArithmetics.IsNotMutable)
@ MultivariatePolynomials C:\Users\OmerChor.julia\packages\MultivariatePolynomials\yR88J\src\gcd.jl:207
[11] gcd (repeats 2 times)
@ C:\Users\OmerChor.julia\packages\MultivariatePolynomials\yR88J\src\gcd.jl:185 [inlined]
[12] gcd(p1::DynamicPolynomials.Polynomial{…}, p2::DynamicPolynomials.Polynomial{…})
@ MultivariatePolynomials C:\Users\OmerChor.julia\packages\MultivariatePolynomials\yR88J\src\gcd.jl:185
[13] safe_gcd(p1::DynamicPolynomials.Polynomial{…}, p2::DynamicPolynomials.Polynomial{…})
@ SymbolicUtils C:\Users\OmerChor.julia\packages\SymbolicUtils\OjG8E\src\polyform.jl:242
[14] simplify_div(num::SymbolicUtils.BasicSymbolicImpl.var"typeof(BasicSymbolicImpl)"{…}, den::SymbolicUtils.BasicSymbolicImpl.var"typeof(BasicSymbolicImpl)"{…})
@ SymbolicUtils C:\Users\OmerChor.julia\packages\SymbolicUtils\OjG8E\src\polyform.jl:251
[15] simplify_div(d::SymbolicUtils.BasicSymbolicImpl.var"typeof(BasicSymbolicImpl)"{SymReal})
@ SymbolicUtils C:\Users\OmerChor.julia\packages\SymbolicUtils\OjG8E\src\polyform.jl:198
[16] call_composed(fs::Tuple{…}, x::Tuple{…}, kw::@kwargs{})
@ Base .\operators.jl:1099
[17] (::ComposedFunction{…})(x::SymbolicUtils.BasicSymbolicImpl.var"typeof(BasicSymbolicImpl)"{…}; kw::@kwargs{})
@ Base .\operators.jl:1096
[18] macro expansion
@ .\some.jl:158 [inlined]
[19] (::SymbolicUtils.Rewriters.Walk{…})(x::SymbolicUtils.BasicSymbolicImpl.var"typeof(BasicSymbolicImpl)"{…})
@ SymbolicUtils.Rewriters C:\Users\OmerChor.julia\packages\SymbolicUtils\OjG8E\src\rewriters.jl:416
[20] (::SymbolicUtils.Rewriters.PassThrough{…})(x::SymbolicUtils.BasicSymbolicImpl.var"typeof(BasicSymbolicImpl)"{…})
@ SymbolicUtils.Rewriters C:\Users\OmerChor.julia\packages\SymbolicUtils\OjG8E\src\rewriters.jl:388
[21] (::SymbolicUtils.Rewriters.Walk{…})(x::SymbolicUtils.BasicSymbolicImpl.var"typeof(BasicSymbolicImpl)"{…})
@ SymbolicUtils.Rewriters C:\Users\OmerChor.julia\packages\SymbolicUtils\OjG8E\src\rewriters.jl:402
[22] (::SymbolicUtils.Rewriters.PassThrough{…})(x::SymbolicUtils.BasicSymbolicImpl.var"typeof(BasicSymbolicImpl)"{…})
@ SymbolicUtils.Rewriters C:\Users\OmerChor.julia\packages\SymbolicUtils\OjG8E\src\rewriters.jl:388
[23] (::SymbolicUtils.Rewriters.Walk{…})(x::SymbolicUtils.BasicSymbolicImpl.var"typeof(BasicSymbolicImpl)"{…})
@ SymbolicUtils.Rewriters C:\Users\OmerChor.julia\packages\SymbolicUtils\OjG8E\src\rewriters.jl:402
[24] (::SymbolicUtils.Rewriters.PassThrough{…})(x::SymbolicUtils.BasicSymbolicImpl.var"typeof(BasicSymbolicImpl)"{…})
@ SymbolicUtils.Rewriters C:\Users\OmerChor.julia\packages\SymbolicUtils\OjG8E\src\rewriters.jl:388
[25] (::SymbolicUtils.Rewriters.Walk{…})(x::SymbolicUtils.BasicSymbolicImpl.var"typeof(BasicSymbolicImpl)"{…})
@ SymbolicUtils.Rewriters C:\Users\OmerChor.julia\packages\SymbolicUtils\OjG8E\src\rewriters.jl:402
[26] (::SymbolicUtils.Rewriters.PassThrough{…})(x::SymbolicUtils.BasicSymbolicImpl.var"typeof(BasicSymbolicImpl)"{…})
@ SymbolicUtils.Rewriters C:\Users\OmerChor.julia\packages\SymbolicUtils\OjG8E\src\rewriters.jl:388
[27] (::SymbolicUtils.Rewriters.Walk{…})(x::SymbolicUtils.BasicSymbolicImpl.var"typeof(BasicSymbolicImpl)"{…})
@ SymbolicUtils.Rewriters C:\Users\OmerChor.julia\packages\SymbolicUtils\OjG8E\src\rewriters.jl:402
[28] call_composed(fs::Tuple{…}, x::Tuple{…}, kw::@kwargs{})
@ Base .\operators.jl:1099
[29] (::ComposedFunction{…})(x::SymbolicUtils.BasicSymbolicImpl.var"typeof(BasicSymbolicImpl)"{…}; kw::@kwargs{})
@ Base .\operators.jl:1096
[30] simplify_fractions
@ C:\Users\OmerChor.julia\packages\SymbolicUtils\OjG8E\src\polyform.jl:481 [inlined]
[31] #simplify#431
@ C:\Users\OmerChor.julia\packages\SymbolicUtils\OjG8E\src\simplify.jl:42 [inlined]
[32] simplify
@ C:\Users\OmerChor.julia\packages\SymbolicUtils\OjG8E\src\simplify.jl:16 [inlined]
[33] simplify(n::Num; kw::@kwargs{expand::Bool})
@ Symbolics C:\Users\OmerChor.julia\packages\Symbolics\29fkz\src\Symbolics.jl:231
[34] top-level scope
I'm running Julia 1.12.5 with Symbolics v7.15.1 and SymbolicUtils v4.18.5.