From 945ea75b1ab746e8a1250ecbe405ead20f682b79 Mon Sep 17 00:00:00 2001 From: Benjamin Lorenz Date: Thu, 22 Feb 2024 15:25:00 +0100 Subject: [PATCH] serialization: fix load distinction between different fields, fix loading float polytopes --- src/Serialization/PolyhedralGeometry.jl | 7 ++----- src/Serialization/polymake.jl | 9 +++++++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Serialization/PolyhedralGeometry.jl b/src/Serialization/PolyhedralGeometry.jl index 7f6b31d9315b..c16c4dc399b2 100644 --- a/src/Serialization/PolyhedralGeometry.jl +++ b/src/Serialization/PolyhedralGeometry.jl @@ -59,14 +59,11 @@ end function load_object(s::DeserializerState, T::Type{<:PolyhedralObject}, field::U) where {U <: Union{QQField, AbstractAlgebra.Floats}} - if U isa QQField - load_from_polymake(T, Dict{Symbol, Any}(s.obj)) - end - return load_from_polymake(T{QQFieldElem}, Dict{Symbol, Any}(s.obj)) + return load_from_polymake(T{elem_type(field)}, Dict{Symbol, Any}(s.obj)) end function load_object(s::DeserializerState, T::Type{<:PolyhedralObject{S}}, - field::U) where {S <: FieldElem, U <: Union{QQField, AbstractAlgebra.Floats}} + field::U) where {S <: Union{QQFieldElem, Float64}, U <: Union{QQField, AbstractAlgebra.Floats}} return load_from_polymake(T, Dict{Symbol, Any}(s.obj)) end diff --git a/src/Serialization/polymake.jl b/src/Serialization/polymake.jl index cb938af1e773..4b876581d5e3 100644 --- a/src/Serialization/polymake.jl +++ b/src/Serialization/polymake.jl @@ -35,9 +35,14 @@ const polymake2OscarTypes = Dict{String, Type}([ function load_from_polymake(::Type{T}, jsondict::Dict{Symbol, Any}) where { T<:Union{Cone{<:scalar_types}, Polyhedron{<:scalar_types}, PolyhedralFan{<:scalar_types}, PolyhedralComplex{<:scalar_types}, SubdivisionOfPoints{<:scalar_types}, SimplicialComplex}} - inner_object = Polymake.call_function(:common, :deserialize_json_string, json(jsondict)) - return T(inner_object) + if T <: PolyhedralObject{QQFieldElem} + return T(inner_object) + elseif T <: PolyhedralObject{Float64} + return T(inner_object, AbstractAlgebra.Floats{Float64}()) + else + error("Unsupported object type $T for loading polymake object") + end end