Skip to content

Commit 929b62d

Browse files
authored
Eager contraction sequence/order optimization (#21)
1 parent 4bcae2a commit 929b62d

18 files changed

+306
-518
lines changed

Project.toml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
name = "ITensorNetworksNext"
22
uuid = "302f2e75-49f0-4526-aef7-d8ba550cb06c"
33
authors = ["ITensor developers <[email protected]> and contributors"]
4-
version = "0.1.15"
4+
version = "0.2.0"
55

66
[deps]
77
AbstractTrees = "1520ce14-60c1-5f80-bbc7-55ef81b5835c"
88
Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e"
99
BackendSelection = "680c2d7c-f67a-4cc9-ae9c-da132b1447a5"
10+
Combinatorics = "861a8166-3701-5b0c-9a16-15d98fcdc6aa"
1011
DataGraphs = "b5a273c3-7e6c-41f6-98bd-8d7f1525a36a"
12+
DerivableInterfaces = "6c5e35bf-e59e-4898-b73c-732dcc4ba65f"
1113
DiagonalArrays = "74fd4be6-21e2-4f6f-823a-4360d37c7a77"
1214
Dictionaries = "85a47980-9c8c-11e8-2b9f-f7ca1fa99fb4"
1315
Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6"
@@ -31,7 +33,9 @@ ITensorNetworksNextTensorOperationsExt = "TensorOperations"
3133
AbstractTrees = "0.4.5"
3234
Adapt = "4.3"
3335
BackendSelection = "0.1.6"
36+
Combinatorics = "1"
3437
DataGraphs = "0.2.7"
38+
DerivableInterfaces = "0.5.5"
3539
DiagonalArrays = "0.3.23"
3640
Dictionaries = "0.4.5"
3741
Graphs = "1.13.1"

docs/Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ ITensorNetworksNext = "302f2e75-49f0-4526-aef7-d8ba550cb06c"
66
[compat]
77
Documenter = "1"
88
Literate = "2"
9-
ITensorNetworksNext = "0.1"
9+
ITensorNetworksNext = "0.2"

examples/Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
ITensorNetworksNext = "302f2e75-49f0-4526-aef7-d8ba550cb06c"
33

44
[compat]
5-
ITensorNetworksNext = "0.1"
5+
ITensorNetworksNext = "0.2"
Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,28 @@
11
module ITensorNetworksNextTensorOperationsExt
22

33
using BackendSelection: @Algorithm_str, Algorithm
4+
using ITensorNetworksNext.LazyNamedDimsArrays: LazyNamedDimsArrays, ismul, symnameddims,
5+
substitute
6+
using ITensorNetworksNext.LazyNamedDimsArrays.TermInterface: arguments
47
using NamedDimsArrays: inds
5-
using ITensorNetworksNext: ITensorNetworksNext, contraction_sequence_to_expr
68
using TensorOperations: TensorOperations, optimaltree
79

8-
function ITensorNetworksNext.contraction_sequence(::Algorithm"optimal", tn::Vector{<:AbstractArray})
9-
network = collect.(inds.(tn))
10-
#Converting dims to Float64 to minimize overflow issues
11-
inds_to_dims = Dict(i => Float64(length(i)) for i in unique(reduce(vcat, network)))
12-
seq, _ = optimaltree(network, inds_to_dims)
13-
return contraction_sequence_to_expr(seq)
10+
function contraction_tree_to_expr(f, tree)
11+
return if !(tree isa AbstractVector)
12+
f(tree)
13+
else
14+
prod(Base.Fix1(contraction_tree_to_expr, f), tree)
15+
end
16+
end
17+
18+
function LazyNamedDimsArrays.optimize_contraction_order(alg::Algorithm"optimal", a)
19+
@assert ismul(a)
20+
ts = arguments(a)
21+
inds_network = collect.(inds.(ts))
22+
# Converting dims to Float64 to minimize overflow issues
23+
inds_to_dims = Dict(i => Float64(length(i)) for i in reduce(, inds_network))
24+
tree, _ = optimaltree(inds_network, inds_to_dims)
25+
return contraction_tree_to_expr(i -> ts[i], tree)
1426
end
1527

1628
end

0 commit comments

Comments
 (0)