-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathtest_contraction_sequence.jl
59 lines (58 loc) · 2.42 KB
/
test_contraction_sequence.jl
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
@eval module $(gensym())
using EinExprs: Exhaustive, Greedy
using ITensorNetworks:
contraction_sequence, norm_sqr_network, random_tensornetwork, siteinds
using ITensors: ITensors, contract
using NamedGraphs.NamedGraphGenerators: named_grid
using OMEinsumContractionOrders: OMEinsumContractionOrders
using StableRNGs: StableRNG
using TensorOperations: TensorOperations
using Test: @test, @testset
@testset "contraction_sequence" begin
ITensors.@disable_warn_order begin
dims = (2, 3)
g = named_grid(dims)
s = siteinds("S=1/2", g)
χ = 10
rng = StableRNG(1234)
ψ = random_tensornetwork(rng, s; link_space=χ)
tn = norm_sqr_network(ψ)
seq_optimal = contraction_sequence(tn; alg="optimal")
res_optimal = contract(tn; sequence=seq_optimal)[]
seq_greedy = contraction_sequence(tn; alg="greedy")
res_greedy = contract(tn; sequence=seq_greedy)[]
seq_tree_sa = contraction_sequence(tn; alg="tree_sa")
res_tree_sa = contract(tn; sequence=seq_tree_sa)[]
seq_sa_bipartite = contraction_sequence(tn; alg="sa_bipartite")
res_sa_bipartite = contract(tn; sequence=seq_sa_bipartite)[]
seq_einexprs_exhaustive = contraction_sequence(
tn; alg="einexpr", optimizer=Exhaustive()
)
res_einexprs_exhaustive = contract(tn; sequence=seq_einexprs_exhaustive)[]
seq_einexprs_greedy = contraction_sequence(tn; alg="einexpr", optimizer=Greedy())
res_einexprs_greedy = contract(tn; sequence=seq_einexprs_exhaustive)[]
@test res_greedy ≈ res_optimal
@test res_tree_sa ≈ res_optimal
@test res_sa_bipartite ≈ res_optimal
@test res_einexprs_exhaustive ≈ res_optimal
@test res_einexprs_greedy ≈ res_optimal
if !Sys.iswindows()
# KaHyPar doesn't work on Windows
# https://github.com/kahypar/KaHyPar.jl/issues/9
using Pkg
Pkg.add("KaHyPar"; io=devnull)
using KaHyPar
seq_kahypar_bipartite = contraction_sequence(
tn; alg="kahypar_bipartite", sc_target=200
)
Pkg.rm("KaHyPar"; io=devnull)
res_kahypar_bipartite = contract(tn; sequence=seq_kahypar_bipartite)[]
@test res_optimal ≈ res_kahypar_bipartite
#These tests were leading to CI issues that need to be investigated
# seq_einexprs_kahypar = contraction_sequence(tn; alg="einexpr", optimizer=HyPar())
# res_einexprs_kahypar = contract(tn; sequence=seq_einexprs_kahypar)[]
# @test res_einexprs_kahypar ≈ res_optimal
end
end
end
end