JuliaAlgebra / DynamicPolynomials.jl

Multivariate polynomials implementation of commutative and non-commutative variables
Other
60 stars 20 forks source link

Converting polynomial coefficients into Integer? #140

Closed richardrl closed 11 months ago

richardrl commented 11 months ago

Is there any reason why the polynomial coefficients would be forced to convert into integer?

I have the following polynomial experssion that I am append!'ing to a list: 0.5rotmat_flat_var_original[1,1] - 0.5rotmat_flat_var_original[1,2] + rotmat_flat_var_original[1,4] - canonical_vertices_Bo_W[1,1,1]

However, the append throws an error:

ERROR: LoadError: InexactError: Int64(0.5)
Stacktrace:
 [1] Int64
   @ ./float.jl:788 [inlined]
 [2] convert
   @ ./number.jl:7 [inlined]
 [3] setindex!
   @ ./array.jl:966 [inlined]
 [4] getindex
   @ ./array.jl:407 [inlined]
 [5] convert(#unused#::Type{Polynomial{true, Int64}}, t::Term{true, Float64})
   @ DynamicPolynomials ~/.julia/packages/DynamicPolynomials/JQRi1/src/poly.jl:47
 [6] setindex!
   @ ./array.jl:966 [inlined]
 [7] _append!(a::Vector{Polynomial{true, Int64}}, #unused#::Base.HasLength, iter::Polynomial{true, Float64})
   @ Base ./array.jl:1123
 [8] append!(a::Vector{Polynomial{true, Int64}}, iter::Polynomial{true, Float64})
   @ Base ./array.jl:1113
 [9] top-level scope
   @ ~/improbable/drake-stacking-tssos/rotationtest.jl:154
in expression starting at /home/rli14/improbable/drake-stacking-tssos/rotationtest.jl:151

EDIT: Upon further investigation, I figured out the error. If you have a list of undefined data type, then you add a couple polynomials with only integer components, the list datatype becomes Vector{Polynomial{true, Int64}}. After you try to add non-integer coefficient polynomials, you will get the error above.

pop
25-element Vector{Polynomial{true, Int64}}:
 rotmat_flat_var_original₁₋₁² + rotmat_flat_var_original₂₋₁² + rotmat_flat_var_original₁₋₂² + rotmat_flat_var_original₂₋₂² + rotmat_flat_var_original₁₋₃² + rotmat_flat_var_original₂₋₃² + rotmat_flat_var_original₁₋₄² + rotmat_flat_var_original₂₋₄² + rotmat_flat_var_original₁₋₅² + rotmat_flat_var_original₂₋₅² + rotmat_flat_var_original₁₋₆² + rotmat_flat_var_original₂₋₆² - 2rotmat_flat_var_original₁₋₁ - 2rotmat_flat_var_original₂₋₁ - 2rotmat_flat_var_original₁₋₃ - 2rotmat_flat_var_original₂₋₃ - 2rotmat_flat_var_original₁₋₆ - 2rotmat_flat_var_original₂₋₆ + 6
 rotmat_flat_var_original₁₋₁ + 1
 rotmat_flat_var_original₁₋₂ + 1
 rotmat_flat_var_original₁₋₃ + 1
 rotmat_flat_var_original₁₋₄ + 1
 rotmat_flat_var_original₁₋₅ + 1
 rotmat_flat_var_original₁₋₆ + 1
 -rotmat_flat_var_original₁₋₁ + 1
 -rotmat_flat_var_original₁₋₂ + 1
 -rotmat_flat_var_original₁₋₃ + 1
 -rotmat_flat_var_original₁₋₄ + 1
 -rotmat_flat_var_original₁₋₅ + 1
 -rotmat_flat_var_original₁₋₆ + 1
 rotmat_flat_var_original₂₋₁ + 1
 rotmat_flat_var_original₂₋₂ + 1
 rotmat_flat_var_original₂₋₃ + 1
 rotmat_flat_var_original₂₋₄ + 1
 rotmat_flat_var_original₂₋₅ + 1
 rotmat_flat_var_original₂₋₆ + 1
 -rotmat_flat_var_original₂₋₁ + 1
 -rotmat_flat_var_original₂₋₂ + 1
 -rotmat_flat_var_original₂₋₃ + 1
 -rotmat_flat_var_original₂₋₄ + 1
 -rotmat_flat_var_original₂₋₅ + 1
 -rotmat_flat_var_original₂₋₆ + 1

infil> eq_constraints
66-element Vector{Any}:
 rotmat_flat_var_original₁₋₁² + rotmat_flat_var_original₁₋₂² + rotmat_flat_var_original₁₋₄² - 1
 rotmat_flat_var_original₁₋₁rotmat_flat_var_original₁₋₂ + rotmat_flat_var_original₁₋₂rotmat_flat_var_original₁₋₃ + rotmat_flat_var_original₁₋₄rotmat_flat_var_original₁₋₅
 rotmat_flat_var_original₁₋₁rotmat_flat_var_original₁₋₄ + rotmat_flat_var_original₁₋₂rotmat_flat_var_original₁₋₅ + rotmat_flat_var_original₁₋₄rotmat_flat_var_original₁₋₆
 rotmat_flat_var_original₁₋₁rotmat_flat_var_original₁₋₂ + rotmat_flat_var_original₁₋₂rotmat_flat_var_original₁₋₃ + rotmat_flat_var_original₁₋₄rotmat_flat_var_original₁₋₅
 rotmat_flat_var_original₁₋₂² + rotmat_flat_var_original₁₋₃² + rotmat_flat_var_original₁₋₅² - 1
 rotmat_flat_var_original₁₋₂rotmat_flat_var_original₁₋₄ + rotmat_flat_var_original₁₋₃rotmat_flat_var_original₁₋₅ + rotmat_flat_var_original₁₋₅rotmat_flat_var_original₁₋₆
 rotmat_flat_var_original₁₋₁rotmat_flat_var_original₁₋₄ + rotmat_flat_var_original₁₋₂rotmat_flat_var_original₁₋₅ + rotmat_flat_var_original₁₋₄rotmat_flat_var_original₁₋₆
 rotmat_flat_var_original₁₋₂rotmat_flat_var_original₁₋₄ + rotmat_flat_var_original₁₋₃rotmat_flat_var_original₁₋₅ + rotmat_flat_var_original₁₋₅rotmat_flat_var_original₁₋₆
 rotmat_flat_var_original₁₋₄² + rotmat_flat_var_original₁₋₅² + rotmat_flat_var_original₁₋₆² - 1
 rotmat_flat_var_original₂₋₁² + rotmat_flat_var_original₂₋₂² + rotmat_flat_var_original₂₋₄² - 1
 rotmat_flat_var_original₂₋₁rotmat_flat_var_original₂₋₂ + rotmat_flat_var_original₂₋₂rotmat_flat_var_original₂₋₃ + rotmat_flat_var_original₂₋₄rotmat_flat_var_original₂₋₅
 rotmat_flat_var_original₂₋₁rotmat_flat_var_original₂₋₄ + rotmat_flat_var_original₂₋₂rotmat_flat_var_original₂₋₅ + rotmat_flat_var_original₂₋₄rotmat_flat_var_original₂₋₆
 rotmat_flat_var_original₂₋₁rotmat_flat_var_original₂₋₂ + rotmat_flat_var_original₂₋₂rotmat_flat_var_original₂₋₃ + rotmat_flat_var_original₂₋₄rotmat_flat_var_original₂₋₅
 rotmat_flat_var_original₂₋₂² + rotmat_flat_var_original₂₋₃² + rotmat_flat_var_original₂₋₅² - 1
 rotmat_flat_var_original₂₋₂rotmat_flat_var_original₂₋₄ + rotmat_flat_var_original₂₋₃rotmat_flat_var_original₂₋₅ + rotmat_flat_var_original₂₋₅rotmat_flat_var_original₂₋₆
 rotmat_flat_var_original₂₋₁rotmat_flat_var_original₂₋₄ + rotmat_flat_var_original₂₋₂rotmat_flat_var_original₂₋₅ + rotmat_flat_var_original₂₋₄rotmat_flat_var_original₂₋₆
 rotmat_flat_var_original₂₋₂rotmat_flat_var_original₂₋₄ + rotmat_flat_var_original₂₋₃rotmat_flat_var_original₂₋₅ + rotmat_flat_var_original₂₋₅rotmat_flat_var_original₂₋₆
 rotmat_flat_var_original₂₋₄² + rotmat_flat_var_original₂₋₅² + rotmat_flat_var_original₂₋₆² - 1
 0.5rotmat_flat_var_original₁₋₁ - 0.5rotmat_flat_var_original₁₋₂ + rotmat_flat_var_original₁₋₄ - canonical_vertices_Bo_W₁₋₁₋₁
 0.5rotmat_flat_var_original₁₋₂ - 0.5rotmat_flat_var_original₁₋₃ + rotmat_flat_var_original₁₋₅ - canonical_vertices_Bo_W₁₋₁₋₂
 0.5rotmat_flat_var_original₁₋₄ - 0.5rotmat_flat_var_original₁₋₅ + rotmat_flat_var_original₁₋₆ - canonical_vertices_Bo_W₁₋₁₋₃
 0.5rotmat_flat_var_original₁₋₁ - 0.5rotmat_flat_var_original₁₋₂ - rotmat_flat_var_original₁₋₄ - canonical_vertices_Bo_W₁₋₂₋₁
 0.5rotmat_flat_var_original₁₋₂ - 0.5rotmat_flat_var_original₁₋₃ - rotmat_flat_var_original₁₋₅ - canonical_vertices_Bo_W₁₋₂₋₂
 0.5rotmat_flat_var_original₁₋₄ - 0.5rotmat_flat_var_original₁₋₅ - rotmat_flat_var_original₁₋₆ - canonical_vertices_Bo_W₁₋₂₋₃
 0.5rotmat_flat_var_original₁₋₁ + 0.5rotmat_flat_var_original₁₋₂ - rotmat_flat_var_original₁₋₄ - canonical_vertices_Bo_W₁₋₃₋₁
 0.5rotmat_flat_var_original₁₋₂ + 0.5rotmat_flat_var_original₁₋₃ - rotmat_flat_var_original₁₋₅ - canonical_vertices_Bo_W₁₋₃₋₂
 0.5rotmat_flat_var_original₁₋₄ + 0.5rotmat_flat_var_original₁₋₅ - rotmat_flat_var_original₁₋₆ - canonical_vertices_Bo_W₁₋₃₋₃
 0.5rotmat_flat_var_original₁₋₁ + 0.5rotmat_flat_var_original₁₋₂ + rotmat_flat_var_original₁₋₄ - canonical_vertices_Bo_W₁₋₄₋₁
 ⋮
 -0.5rotmat_flat_var_original₁₋₄ - 0.5rotmat_flat_var_original₁₋₅ - rotmat_flat_var_original₁₋₆ - canonical_vertices_Bo_W₁₋₇₋₃
 -0.5rotmat_flat_var_original₁₋₁ - 0.5rotmat_flat_var_original₁₋₂ + rotmat_flat_var_original₁₋₄ - canonical_vertices_Bo_W₁₋₈₋₁
 -0.5rotmat_flat_var_original₁₋₂ - 0.5rotmat_flat_var_original₁₋₃ + rotmat_flat_var_original₁₋₅ - canonical_vertices_Bo_W₁₋₈₋₂
 -0.5rotmat_flat_var_original₁₋₄ - 0.5rotmat_flat_var_original₁₋₅ + rotmat_flat_var_original₁₋₆ - canonical_vertices_Bo_W₁₋₈₋₃
 0.5rotmat_flat_var_original₂₋₁ - 0.5rotmat_flat_var_original₂₋₂ + rotmat_flat_var_original₂₋₄ - canonical_vertices_Bo_W₂₋₁₋₁
 0.5rotmat_flat_var_original₂₋₂ - 0.5rotmat_flat_var_original₂₋₃ + rotmat_flat_var_original₂₋₅ - canonical_vertices_Bo_W₂₋₁₋₂
 0.5rotmat_flat_var_original₂₋₄ - 0.5rotmat_flat_var_original₂₋₅ + rotmat_flat_var_original₂₋₆ - canonical_vertices_Bo_W₂₋₁₋₃
 0.5rotmat_flat_var_original₂₋₁ - 0.5rotmat_flat_var_original₂₋₂ - rotmat_flat_var_original₂₋₄ - canonical_vertices_Bo_W₂₋₂₋₁
 0.5rotmat_flat_var_original₂₋₂ - 0.5rotmat_flat_var_original₂₋₃ - rotmat_flat_var_original₂₋₅ - canonical_vertices_Bo_W₂₋₂₋₂
 0.5rotmat_flat_var_original₂₋₄ - 0.5rotmat_flat_var_original₂₋₅ - rotmat_flat_var_original₂₋₆ - canonical_vertices_Bo_W₂₋₂₋₃
 0.5rotmat_flat_var_original₂₋₁ + 0.5rotmat_flat_var_original₂₋₂ - rotmat_flat_var_original₂₋₄ - canonical_vertices_Bo_W₂₋₃₋₁
 0.5rotmat_flat_var_original₂₋₂ + 0.5rotmat_flat_var_original₂₋₃ - rotmat_flat_var_original₂₋₅ - canonical_vertices_Bo_W₂₋₃₋₂
 0.5rotmat_flat_var_original₂₋₄ + 0.5rotmat_flat_var_original₂₋₅ - rotmat_flat_var_original₂₋₆ - canonical_vertices_Bo_W₂₋₃₋₃
 0.5rotmat_flat_var_original₂₋₁ + 0.5rotmat_flat_var_original₂₋₂ + rotmat_flat_var_original₂₋₄ - canonical_vertices_Bo_W₂₋₄₋₁
 0.5rotmat_flat_var_original₂₋₂ + 0.5rotmat_flat_var_original₂₋₃ + rotmat_flat_var_original₂₋₅ - canonical_vertices_Bo_W₂₋₄₋₂
 0.5rotmat_flat_var_original₂₋₄ + 0.5rotmat_flat_var_original₂₋₅ + rotmat_flat_var_original₂₋₆ - canonical_vertices_Bo_W₂₋₄₋₃
 -0.5rotmat_flat_var_original₂₋₁ + 0.5rotmat_flat_var_original₂₋₂ - rotmat_flat_var_original₂₋₄ - canonical_vertices_Bo_W₂₋₅₋₁
 -0.5rotmat_flat_var_original₂₋₂ + 0.5rotmat_flat_var_original₂₋₃ - rotmat_flat_var_original₂₋₅ - canonical_vertices_Bo_W₂₋₅₋₂
 -0.5rotmat_flat_var_original₂₋₄ + 0.5rotmat_flat_var_original₂₋₅ - rotmat_flat_var_original₂₋₆ - canonical_vertices_Bo_W₂₋₅₋₃
 -0.5rotmat_flat_var_original₂₋₁ + 0.5rotmat_flat_var_original₂₋₂ + rotmat_flat_var_original₂₋₄ - canonical_vertices_Bo_W₂₋₆₋₁
 -0.5rotmat_flat_var_original₂₋₂ + 0.5rotmat_flat_var_original₂₋₃ + rotmat_flat_var_original₂₋₅ - canonical_vertices_Bo_W₂₋₆₋₂
 -0.5rotmat_flat_var_original₂₋₄ + 0.5rotmat_flat_var_original₂₋₅ + rotmat_flat_var_original₂₋₆ - canonical_vertices_Bo_W₂₋₆₋₃
 -0.5rotmat_flat_var_original₂₋₁ - 0.5rotmat_flat_var_original₂₋₂ - rotmat_flat_var_original₂₋₄ - canonical_vertices_Bo_W₂₋₇₋₁
 -0.5rotmat_flat_var_original₂₋₂ - 0.5rotmat_flat_var_original₂₋₃ - rotmat_flat_var_original₂₋₅ - canonical_vertices_Bo_W₂₋₇₋₂
 -0.5rotmat_flat_var_original₂₋₄ - 0.5rotmat_flat_var_original₂₋₅ - rotmat_flat_var_original₂₋₆ - canonical_vertices_Bo_W₂₋₇₋₃
 -0.5rotmat_flat_var_original₂₋₁ - 0.5rotmat_flat_var_original₂₋₂ + rotmat_flat_var_original₂₋₄ - canonical_vertices_Bo_W₂₋₈₋₁
 -0.5rotmat_flat_var_original₂₋₂ - 0.5rotmat_flat_var_original₂₋₃ + rotmat_flat_var_original₂₋₅ - canonical_vertices_Bo_W₂₋₈₋₂
 -0.5rotmat_flat_var_original₂₋₄ - 0.5rotmat_flat_var_original₂₋₅ + rotmat_flat_var_original₂₋₆ - canonical_vertices_Bo_W₂₋₈₋₃
richardrl commented 11 months ago

The solution to fix this error is to declare all lists explicitly as polynomials with floating point datatype, so:

Vector{Polynomial{true, Float64}}()

instead of: []

blegat commented 11 months ago

You have the polynomial_type function to help you for this (note that the polynomial type has changed with the latest release)