Skip to content

Commit 4d1a3ff

Browse files
Merge remote-tracking branch 'origin/master' into adv/serialize-many-to-one
2 parents c84fb14 + 5a737af commit 4d1a3ff

File tree

9 files changed

+259
-17
lines changed

9 files changed

+259
-17
lines changed

src/Serialization/Fields.jl

+2-2
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ function save_object(s::SerializerState, K::FqField)
191191
save_object(s, order(K))
192192
else
193193
save_data_dict(s) do
194-
save_typed_object(s, defining_polynomial(K))
194+
save_typed_object(s, defining_polynomial(K), :def_pol)
195195
end
196196
end
197197
end
@@ -202,7 +202,7 @@ function load_object(s::DeserializerState, ::Type{<: FqField})
202202
order = ZZRingElem(node)
203203
return finite_field(order)[1]
204204
else
205-
def_pol = load_typed_object(s)
205+
def_pol = load_typed_object(s, :def_pol)
206206
return finite_field(def_pol, cached=false)[1]
207207
end
208208
end

src/Serialization/Upgrades/1.3.0.jl

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
push!(upgrade_scripts_set, UpgradeScript(
2+
v"1.3.0",
3+
function upgrade_1_3_0(s::UpgradeState, dict::Dict)
4+
upgraded_dict = dict
5+
if haskey(dict, :_type) && dict[:_type] == "FqField"
6+
if dict[:data] isa Dict
7+
if !(haskey(dict[:data], :def_pol))
8+
upgraded_dict[:data][:def_pol] = copy(dict[:data])
9+
end
10+
end
11+
elseif haskey(dict, :data) && dict[:data] isa Dict
12+
upgraded_dict[:data] = upgrade_1_3_0(s, dict[:data])
13+
end
14+
if haskey(dict, :_refs)
15+
upgraded_refs = Dict()
16+
for (k, v) in dict[:_refs]
17+
upgraded_refs[k] = upgrade_1_3_0(s, v)
18+
end
19+
upgraded_dict[:_refs] = upgraded_refs
20+
end
21+
22+
return upgraded_dict
23+
end
24+
))

src/Serialization/Upgrades/main.jl

+1
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ include("0.13.0.jl")
141141
include("0.15.0.jl")
142142
include("1.1.0.jl")
143143
include("1.2.0.jl")
144+
include("1.3.0.jl")
144145

145146
const upgrade_scripts = collect(upgrade_scripts_set)
146147
sort!(upgrade_scripts; by=version)

test/Serialization/loading.jl

+23-15
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,25 @@
11
@testset "loading" begin
2-
3-
@testset "loading Vector{LinearProgram}" begin
4-
c = cube(3)
5-
LP0 = linear_program(c, [2,2,-3])
6-
LP1 = linear_program(c, [2,2,4])
7-
v = [LP0, LP1]
8-
loaded = load(joinpath(@__DIR__,"vlp.json"))
9-
@test length(v) == length(loaded)
10-
@test feasible_region(loaded[1]) == feasible_region(loaded[2])
11-
@test feasible_region(loaded[1]) == feasible_region(LP0)
12-
@test objective_function(loaded[1]) == objective_function(v[1])
13-
@test objective_function(loaded[2]) == objective_function(v[2])
14-
@test optimal_value(loaded[1]) == optimal_value(v[1])
15-
@test optimal_value(loaded[2]) == optimal_value(v[2])
16-
end
2+
@testset "loading file format paper example" begin
3+
F = GF(7, 2)
4+
o = gen(F)
5+
Fyz, (y, z) = F[:x, :y]
6+
load(joinpath(@__DIR__,"polynomial-example.mrdi");)
7+
loaded = load(joinpath(@__DIR__,"polynomial-example.mrdi"); params=Fyz)
8+
@test loaded == 2*y^3*z^4 + 5*o*y + (o + 3)*z^2 + 1
9+
end
10+
11+
@testset "loading Vector{LinearProgram}" begin
12+
c = cube(3)
13+
LP0 = linear_program(c, [2,2,-3])
14+
LP1 = linear_program(c, [2,2,4])
15+
v = [LP0, LP1]
16+
loaded = load(joinpath(@__DIR__,"vlp.json"))
17+
@test length(v) == length(loaded)
18+
@test feasible_region(loaded[1]) == feasible_region(loaded[2])
19+
@test feasible_region(loaded[1]) == feasible_region(LP0)
20+
@test objective_function(loaded[1]) == objective_function(v[1])
21+
@test objective_function(loaded[2]) == objective_function(v[2])
22+
@test optimal_value(loaded[1]) == optimal_value(v[1])
23+
@test optimal_value(loaded[2]) == optimal_value(v[2])
24+
end
1725
end
+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
{
2+
"_ns": { "Oscar": [ "https://github.com/oscar-system/Oscar.jl", "1.0.0" ] },
3+
"_type": {
4+
"name": "MPolyRingElem",
5+
"params": "869a359a-43d3-43f4-9821-0af9346be019"
6+
},
7+
"data": [[["3", "4"], [["0", "2"]]],
8+
[["0", "2"], [["0", "3"], ["1", "1"]]],
9+
[["1", "0"], [["1", "5"]]],
10+
[["0", "0"], [["0", "1"]]]],
11+
"_refs": {
12+
"152ac7bd-e85a-4b36-acc2-743ade2cad4f": {
13+
"data": { "base_ring": { "data": "7", "_type": "FqField"},
14+
"symbols": ["x"] },
15+
"_type": "PolyRing"
16+
},
17+
"869a359a-43d3-43f4-9821-0af9346be019": {
18+
"data": {
19+
"base_ring": "a8309b96-caec-443c-bedb-e23bb0634c14",
20+
"symbols": [ "y", "z" ]
21+
},
22+
"_type": "MPolyRing" },
23+
"a8309b96-caec-443c-bedb-e23bb0634c14": {
24+
"data": {
25+
"def_pol": {
26+
"data": [["0", "1"], ["2", "1"]],
27+
"_type": {
28+
"name": "PolyRingElem",
29+
"params": "152ac7bd-e85a-4b36-acc2-743ade2cad4f"
30+
}
31+
}
32+
},
33+
"_type": "FqField"
34+
}
35+
}
36+
}

test/Serialization/upgrades/GF_2.json

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"_ns": {
3+
"Oscar": [
4+
"https://github.com/oscar-system/Oscar.jl",
5+
"1.2.0"
6+
]
7+
},
8+
"_type": "FqField",
9+
"data": "2",
10+
"id": "4e298c21-11cb-45f1-bac0-62e2df5e6454"
11+
}
+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
{
2+
"_ns": {
3+
"Oscar": [
4+
"https://github.com/oscar-system/Oscar.jl",
5+
"1.2.0"
6+
]
7+
},
8+
"_refs": {
9+
"15ec4d5e-409d-4e80-a7a2-aa1b22b0db9d": {
10+
"_type": "PolyRing",
11+
"data": {
12+
"base_ring": "4e298c21-11cb-45f1-bac0-62e2df5e6454",
13+
"symbols": [
14+
"x"
15+
]
16+
}
17+
},
18+
"4e298c21-11cb-45f1-bac0-62e2df5e6454": {
19+
"_type": "FqField",
20+
"data": "2"
21+
}
22+
},
23+
"_type": "FqField",
24+
"data": {
25+
"_type": {
26+
"name": "PolyRingElem",
27+
"params": "15ec4d5e-409d-4e80-a7a2-aa1b22b0db9d"
28+
},
29+
"data": [
30+
[
31+
"0",
32+
"1"
33+
],
34+
[
35+
"1",
36+
"1"
37+
],
38+
[
39+
"2",
40+
"1"
41+
]
42+
]
43+
},
44+
"id": "b2e7bf06-d89a-4fea-8bf4-215a61c16ca2"
45+
}
+110
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
{
2+
"_ns": {
3+
"Oscar": [
4+
"https://github.com/oscar-system/Oscar.jl",
5+
"1.0.5"
6+
]
7+
},
8+
"_type": {
9+
"name": "MPolyRingElem",
10+
"params": "f0885e3e-71ff-4813-88fd-7ee05eeb3657"
11+
},
12+
"data": [
13+
[
14+
[
15+
"3",
16+
"4"
17+
],
18+
[
19+
[
20+
"0",
21+
"2"
22+
]
23+
]
24+
],
25+
[
26+
[
27+
"1",
28+
"0"
29+
],
30+
[
31+
[
32+
"1",
33+
"5"
34+
]
35+
]
36+
],
37+
[
38+
[
39+
"0",
40+
"2"
41+
],
42+
[
43+
[
44+
"0",
45+
"3"
46+
],
47+
[
48+
"1",
49+
"1"
50+
]
51+
]
52+
],
53+
[
54+
[
55+
"0",
56+
"0"
57+
],
58+
[
59+
[
60+
"0",
61+
"1"
62+
]
63+
]
64+
]
65+
],
66+
"_refs": {
67+
"f0885e3e-71ff-4813-88fd-7ee05eeb3657": {
68+
"_type": "MPolyRing",
69+
"data": {
70+
"base_ring": "e06a6ac9-954b-4fb7-89c6-f2a25489440e",
71+
"symbols": [
72+
"y",
73+
"z"
74+
]
75+
}
76+
},
77+
"e06a6ac9-954b-4fb7-89c6-f2a25489440e": {
78+
"_type": "FqField",
79+
"data": {
80+
"_type": {
81+
"name": "PolyRingElem",
82+
"params": "3a66dcbd-bd73-4bb7-8b99-42d9f5177893"
83+
},
84+
"data": [
85+
[
86+
"0",
87+
"1"
88+
],
89+
[
90+
"2",
91+
"1"
92+
]
93+
]
94+
}
95+
},
96+
"3a66dcbd-bd73-4bb7-8b99-42d9f5177893": {
97+
"_type": "PolyRing",
98+
"data": {
99+
"base_ring": "221dfa92-69df-4b5a-8f30-166aafddfaa9",
100+
"symbols": [
101+
"x"
102+
]
103+
}
104+
},
105+
"221dfa92-69df-4b5a-8f30-166aafddfaa9": {
106+
"_type": "FqField",
107+
"data": "7"
108+
}
109+
}
110+
}

test/Serialization/upgrades/runtests.jl

+7
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,11 @@
2727
loaded = load(joinpath(@__DIR__, "file_version_less_than_1.2.0.json"));
2828
@test loaded isa Dict
2929
end
30+
31+
@testset "< 1.3.0 Upgrade" begin
32+
load(joinpath(@__DIR__, "GF_2_2.json"));
33+
load(joinpath(@__DIR__, "GF_2.json"));
34+
Oscar.reset_global_serializer_state()
35+
load(joinpath(@__DIR__, "poly1.0.5.json"));
36+
end
3037
end

0 commit comments

Comments
 (0)