Skip to content

Conversation

@SoongNoonien
Copy link
Member

I've found another instance of base_ring for universal polynomials which will break after Nemocas/AbstractAlgebra.jl#2182. It took me quite some time to pinpoint the error I was seeing in the tests as the reported problem was just that a 1 (what ever its meaning was) was now of type Char and not String anymore.

@antonydellavecchia I don't fully understand the serialization code so I'm not sure if it might be worth it to add more of these "exclude from ring union" for multivariate polynomials or univariate polynomials, just to be more in line with the universal polynomials.

@antonydellavecchia
Copy link
Collaborator

@SoongNoonien
Can you post the error here?

@SoongNoonien
Copy link
Member Author

So, I ran julia> Oscar.test_module("Serialization/PolynomialsSeries",new=false) with Oscar master and Nemocas/AbstractAlgebra.jl#2182 which results in:

Universal Polynomial over Rationals: Error During Test at /home/marwagne/Dokumente/Programme/Oscar.jl/test/Serialization/PolynomialsSeries.jl:119
  Got exception outside of a @test
  MethodError: Cannot `convert` an object of type 
    Char to an object of type 
    Union{Dict{Symbol, Any}, Number, String, Symbol, QQFieldElem, ZZRingElem, JSON3.Array, JSON3.Object, TropicalSemiringElem, Vector}
  The function `convert` exists, but no method is defined for this combination of argument types.
  
  Closest candidates are:
    convert(::Type{T}, ::T) where T
     @ Base Base.jl:126
  
  Stacktrace:
    [1] setproperty!(x::Oscar.Serialization.DeserializerState{Oscar.Serialization.JSONSerializer}, f::Symbol, v::Char)
      @ Base ./Base.jl:52
    [2] load_node(f::Oscar.Serialization.var"#325#329"{DataType, MPolyBuildCtx{QQMPolyRingElem, DataType}, QQField, Oscar.Serialization.DeserializerState{Oscar.Serialization.JSONSerializer}}, s::Oscar.Serialization.DeserializerState{Oscar.Serialization.JSONSerializer}, key::Int64)
      @ Oscar.Serialization ~/Dokumente/Programme/Oscar.jl/src/Serialization/serializers.jl:244
    [3] (::Oscar.Serialization.var"#323#327"{Oscar.Serialization.DeserializerState{Oscar.Serialization.JSONSerializer}, QQMPolyRing})(terms::String)
      @ Oscar.Serialization ~/Dokumente/Programme/Oscar.jl/src/Serialization/Rings.jl:234
    [4] load_node(f::Oscar.Serialization.var"#323#327"{Oscar.Serialization.DeserializerState{Oscar.Serialization.JSONSerializer}, QQMPolyRing}, s::Oscar.Serialization.DeserializerState{Oscar.Serialization.JSONSerializer}, key::Nothing)
      @ Oscar.Serialization ~/Dokumente/Programme/Oscar.jl/src/Serialization/serializers.jl:246
    [5] load_node
      @ ~/Dokumente/Programme/Oscar.jl/src/Serialization/serializers.jl:238 [inlined]
    [6] load_object(s::Oscar.Serialization.DeserializerState{Oscar.Serialization.JSONSerializer}, ::Type{QQMPolyRingElem}, parent_ring::QQMPolyRing)
      @ Oscar.Serialization ~/Dokumente/Programme/Oscar.jl/src/Serialization/Rings.jl:228
    [7] (::Oscar.Serialization.var"#67#68"{Oscar.Serialization.DeserializerState{Oscar.Serialization.JSONSerializer}, DataType, QQMPolyRing})(::String)
      @ Oscar.Serialization ~/Dokumente/Programme/Oscar.jl/src/Serialization/main.jl:455
    [8] load_node(f::Oscar.Serialization.var"#67#68"{Oscar.Serialization.DeserializerState{Oscar.Serialization.JSONSerializer}, DataType, QQMPolyRing}, s::Oscar.Serialization.DeserializerState{Oscar.Serialization.JSONSerializer}, key::Int64)
      @ Oscar.Serialization ~/Dokumente/Programme/Oscar.jl/src/Serialization/serializers.jl:246
    [9] load_object
      @ ~/Dokumente/Programme/Oscar.jl/src/Serialization/main.jl:454 [inlined]
   [10] (::Oscar.Serialization.var"#325#329"{DataType, MPolyBuildCtx{AbstractAlgebra.Generic.UnivPoly{QQMPolyRingElem}, DataType}, QQMPolyRing, Oscar.Serialization.DeserializerState{Oscar.Serialization.JSONSerializer}})(::JSON3.Array{Any, Base.CodeUnits{UInt8, String}, SubArray{UInt64, 1, Vector{UInt64}, Tuple{UnitRange{Int64}}, true}})
      @ Oscar.Serialization ~/Dokumente/Programme/Oscar.jl/src/Serialization/Rings.jl:235
   [11] load_node(f::Oscar.Serialization.var"#325#329"{DataType, MPolyBuildCtx{AbstractAlgebra.Generic.UnivPoly{QQMPolyRingElem}, DataType}, QQMPolyRing, Oscar.Serialization.DeserializerState{Oscar.Serialization.JSONSerializer}}, s::Oscar.Serialization.DeserializerState{Oscar.Serialization.JSONSerializer}, key::Int64)
      @ Oscar.Serialization ~/Dokumente/Programme/Oscar.jl/src/Serialization/serializers.jl:246
   [12] (::Oscar.Serialization.var"#323#327"{Oscar.Serialization.DeserializerState{Oscar.Serialization.JSONSerializer}, AbstractAlgebra.Generic.UniversalPolyRing{QQMPolyRingElem}})(terms::JSON3.Array{JSON3.Array, Base.CodeUnits{UInt8, String}, SubArray{UInt64, 1, Vector{UInt64}, Tuple{UnitRange{Int64}}, true}})
      @ Oscar.Serialization ~/Dokumente/Programme/Oscar.jl/src/Serialization/Rings.jl:234
   [13] load_node(f::Oscar.Serialization.var"#323#327"{Oscar.Serialization.DeserializerState{Oscar.Serialization.JSONSerializer}, AbstractAlgebra.Generic.UniversalPolyRing{QQMPolyRingElem}}, s::Oscar.Serialization.DeserializerState{Oscar.Serialization.JSONSerializer}, key::Nothing)
      @ Oscar.Serialization ~/Dokumente/Programme/Oscar.jl/src/Serialization/serializers.jl:246
   [14] load_node
      @ ~/Dokumente/Programme/Oscar.jl/src/Serialization/serializers.jl:238 [inlined]
   [15] load_object(s::Oscar.Serialization.DeserializerState{Oscar.Serialization.JSONSerializer}, ::Type{UniversalPolyRingElem}, parent_ring::AbstractAlgebra.Generic.UniversalPolyRing{QQMPolyRingElem})
      @ Oscar.Serialization ~/Dokumente/Programme/Oscar.jl/src/Serialization/Rings.jl:228
   [16] (::Oscar.Serialization.var"#63#64"{Oscar.Serialization.DeserializerState{Oscar.Serialization.JSONSerializer}})(::JSON3.Array{JSON3.Array, Base.CodeUnits{UInt8, String}, SubArray{UInt64, 1, Vector{UInt64}, Tuple{UnitRange{Int64}}, true}})
      @ Oscar.Serialization ~/Dokumente/Programme/Oscar.jl/src/Serialization/main.jl:440
   [17] load_node(f::Oscar.Serialization.var"#63#64"{Oscar.Serialization.DeserializerState{Oscar.Serialization.JSONSerializer}}, s::Oscar.Serialization.DeserializerState{Oscar.Serialization.JSONSerializer}, key::Symbol)
      @ Oscar.Serialization ~/Dokumente/Programme/Oscar.jl/src/Serialization/serializers.jl:246
   [18] load_typed_object(s::Oscar.Serialization.DeserializerState{Oscar.Serialization.JSONSerializer}; override_params::Nothing)
      @ Oscar.Serialization ~/Dokumente/Programme/Oscar.jl/src/Serialization/main.jl:439
   [19] load(io::IOStream; params::Nothing, type::Nothing, serializer::Oscar.Serialization.JSONSerializer, with_attrs::Bool)
      @ Oscar.Serialization ~/Dokumente/Programme/Oscar.jl/src/Serialization/main.jl:825
   [20] load
      @ ~/Dokumente/Programme/Oscar.jl/src/Serialization/main.jl:760 [inlined]
   [21] #564
      @ ~/Dokumente/Programme/Oscar.jl/src/Serialization/main.jl:855 [inlined]
   [22] open(f::Oscar.Serialization.var"#564#565"{Nothing, Nothing, Oscar.Serialization.JSONSerializer}, args::String; kwargs::@Kwargs{})
      @ Base ./io.jl:410
   [23] open
      @ ./io.jl:407 [inlined]
   [24] #load#563
      @ ~/Dokumente/Programme/Oscar.jl/src/Serialization/main.jl:854 [inlined]
   [25] load
      @ ~/Dokumente/Programme/Oscar.jl/src/Serialization/main.jl:851 [inlined]
   [26] test_save_load_roundtrip(func::var"#15#39"{Tuple{QQField, QQFieldElem, QQFieldElem, String}, AbstractAlgebra.Generic.UnivPoly{QQFieldElem}, AbstractAlgebra.Generic.UnivPoly{QQFieldElem}}, path::String, original::AbstractAlgebra.Generic.UnivPoly{QQFieldElem}; params::Nothing, check_func::Nothing, kw::@Kwargs{})
      @ Main ~/Dokumente/Programme/Oscar.jl/test/Serialization/setup_tests.jl:60
   [27] test_save_load_roundtrip(func::Function, path::String, original::AbstractAlgebra.Generic.UnivPoly{QQFieldElem})
      @ Main ~/Dokumente/Programme/Oscar.jl/test/Serialization/setup_tests.jl:20
   [28] macro expansion
      @ ~/Dokumente/Programme/Oscar.jl/test/Serialization/PolynomialsSeries.jl:123 [inlined]
   [29] macro expansion
      @ ~/.julia/juliaup/julia-1.11.7+0.x64.linux.gnu/share/julia/stdlib/v1.11/Test/src/Test.jl:1709 [inlined]
   [30] (::var"#4#28")(path::String)
      @ Main ~/Dokumente/Programme/Oscar.jl/test/Serialization/PolynomialsSeries.jl:120
   [31] mktempdir(fn::var"#4#28", parent::String; prefix::String)
      @ Base.Filesystem ./file.jl:819
   [32] mktempdir(fn::Function, parent::String)
      @ Base.Filesystem ./file.jl:815
   [33] macro expansion
      @ ~/Dokumente/Programme/Oscar.jl/test/Serialization/PolynomialsSeries.jl:40 [inlined]
   [34] macro expansion
      @ ~/.julia/juliaup/julia-1.11.7+0.x64.linux.gnu/share/julia/stdlib/v1.11/Test/src/Test.jl:1709 [inlined]
   [35] top-level scope
      @ ~/Dokumente/Programme/Oscar.jl/test/Serialization/PolynomialsSeries.jl:40
   [36] include(mapexpr::Function, mod::Module, _path::String)
      @ Base ./Base.jl:563
   [37] (::Oscar.var"#46#47"{Bool, Bool, Bool, Vector{Any}})()
      @ Oscar ~/Dokumente/Programme/Oscar.jl/src/utils/tests.jl:243
   [38] with_unicode(f::Oscar.var"#46#47"{Bool, Bool, Bool, Vector{Any}}, allowed::Bool)
      @ AbstractAlgebra.PrettyPrinting ~/Dokumente/Programme/AbstractAlgebra.jl/src/PrettyPrinting.jl:1852
   [39] #test_module#45
      @ ~/Dokumente/Programme/Oscar.jl/src/utils/tests.jl:189 [inlined]
   [40] top-level scope
      @ REPL[7]:1

@fingolfin fingolfin added serialization release notes: not needed PRs introducing changes that are wholly irrelevant to the release notes labels Oct 9, 2025
Copy link
Member

@fingolfin fingolfin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me but @antonydellavecchia should decide

Copy link
Collaborator

@antonydellavecchia antonydellavecchia left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yup looks better

@fingolfin fingolfin merged commit f2a83dc into oscar-system:master Oct 9, 2025
35 of 37 checks passed
@SoongNoonien SoongNoonien deleted the serialization_coeff_ring branch November 3, 2025 14:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

release notes: not needed PRs introducing changes that are wholly irrelevant to the release notes serialization

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants