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

Type promotion causes stack overflow

Open kaandocal opened this issue 3 years ago • 3 comments

The following causes a StackOverflowError:

using DynamicPolynomials

promote_type(Any, Polynomial{true,Any})

Here Any can be replaced by various types. Output:

ERROR: StackOverflowError:
Stacktrace:
 [1] promote_result(#unused#::Type, #unused#::Type, #unused#::Type{Any}, #unused#::Type{DynamicPolynomials.Polynomial{true, Any}})
   @ Base ./promotion.jl:247

What happens is that promote_rule(Any, Polynomial{true,Any}) returns Any and promote_rule(Polynomial{true,Any}, Any) returns Polynomial{true,Any}, and promote_result keeps calling itself with the exact same type arguments...

This originally came up trying to run MomentClosure.jl with SymbolicUtils version >= 0.12 (expanding some polynomial expressions). I'm currently trying to figure out the intended semantics behind this and trying to find a fix but I thought it might be useful to point it out :)

kaandocal avatar Sep 02 '21 12:09 kaandocal

Seems related:

using DynamicPolynomials
@ncpolyvar x1
@polyvar x2
promote_type(typeof(x1), typeof(x2)) # stack overflow

kbarros avatar Oct 09 '22 20:10 kbarros

Thanks for reporting these. I would find the root cause of what outputed Polynomial{true,Any}. The coefficient type of a polynomial is not supposed to be Any, e.g., we should be able to call zero on it. Of course, a StackOverflow is still a but, even if the users does not provide the exptected types.

blegat avatar Oct 10 '22 12:10 blegat

I think in my case I was accidentally adding commuting and noncommuting polynomial variables,

using DynamicPolynomials
@polyvar x
@ncpolyvar y
x + y

Perhaps it's not the same issue as Polynomial{true,Any}.

kbarros avatar Oct 12 '22 03:10 kbarros