forked from QuEraComputing/GenericTensorNetworks.jl
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfileio.jl
More file actions
80 lines (70 loc) · 2.72 KB
/
Copy pathfileio.jl
File metadata and controls
80 lines (70 loc) · 2.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
using GenericTensorNetworks, Graphs, Test
@testset "save load" begin
M = 10
fname = tempname()
m = ConfigEnumerator([StaticBitVector(rand(Bool, 300)) for i=1:M])
bm = GenericTensorNetworks.plain_matrix(m)
rm = GenericTensorNetworks.raw_matrix(m)
m1 = GenericTensorNetworks.from_raw_matrix(rm; bitlength=300, num_flavors=2)
m2 = GenericTensorNetworks.from_plain_matrix(bm; num_flavors=2)
@test m1 == m
@test m2 == m
save_configs(fname, m; format=:binary)
@test_throws ErrorException load_configs("_test.bin"; format=:binary)
ma = load_configs(fname; format=:binary, bitlength=300, num_flavors=2)
@test ma == m
fname = tempname()
save_configs(fname, m; format=:text)
mb = load_configs(fname; format=:text, num_flavors=2)
@test mb == m
M = 10
m = ConfigEnumerator([StaticElementVector(3, rand(0:2, 300)) for i=1:M])
bm = GenericTensorNetworks.plain_matrix(m)
rm = GenericTensorNetworks.raw_matrix(m)
m1 = GenericTensorNetworks.from_raw_matrix(rm; bitlength=300, num_flavors=3)
m2 = GenericTensorNetworks.from_plain_matrix(bm; num_flavors=3)
@test m1 == m
@test m2 == m
@test Matrix(m) == bm
@test Vector(m.data[1]) == bm[:,1]
fname = tempname()
save_configs(fname, m; format=:binary)
@test_throws ErrorException load_configs(fname; format=:binary)
ma = load_configs(fname; format=:binary, bitlength=300, num_flavors=3)
@test ma == m
fname = tempname()
save_configs(fname, m; format=:text)
mb = load_configs(fname; format=:text, num_flavors=3)
@test mb == m
end
@testset "save load tree" begin
fname = tempname()
tree = solve(GenericTensorNetwork(IndependentSet(smallgraph(:petersen))), ConfigsAll(; tree_storage=true))[]
save_sumproduct(fname, tree)
ma = load_sumproduct(fname)
@test ma == tree
end
@testset "save load GenericTensorNetwork" begin
g = smallgraph(:petersen)
problem = IndependentSet(g, UnitWeight(10))
tn = GenericTensorNetwork(problem; fixedvertices=Dict(1=>0, 2=>1))
folder = tempname()
save_tensor_network(tn; folder=folder)
tn2 = load_tensor_network(folder)
@test tn.problem == tn2.problem
@test tn.code == tn2.code
@test tn.fixedvertices == tn2.fixedvertices
@test solve(tn, SizeMax()) == solve(tn2, SizeMax())
# test with empty fixedvertices
tn3 = GenericTensorNetwork(problem)
folder2 = tempname()
save_tensor_network(tn3; folder=folder2)
tn4 = load_tensor_network(folder2)
@test tn3.problem == tn4.problem
@test tn3.code == tn4.code
@test tn3.fixedvertices == tn4.fixedvertices
# test error cases
empty_folder = tempname()
mkpath(empty_folder)
@test_throws SystemError load_tensor_network(empty_folder)
end