forked from JoeyT1994/TensorNetworkQuantumSimulator.jl
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcontract.jl
More file actions
17 lines (14 loc) · 963 Bytes
/
Copy pathcontract.jl
File metadata and controls
17 lines (14 loc) · 963 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function ITensors.contract(alg::Algorithm"exact", tn::AbstractTensorNetwork; contraction_sequence_kwargs = (; alg = "omeinsum", optimizer = GreedyMethod()))
tn_tensors = [tn[v] for v in vertices(tn)]
seq = contraction_sequence(tn_tensors; contraction_sequence_kwargs...)
return scalar(ITensors.contract(tn_tensors; sequence = seq))
end
function ITensors.contract(alg::Algorithm"bp", tn::TensorNetwork; bp_update_kwargs = default_bp_update_kwargs(tn))
return partitionfunction(update(BeliefPropagationCache(tn); bp_update_kwargs...))
end
function ITensors.contract(alg::Algorithm"boundarymps", tn::TensorNetwork; mps_bond_dimension::Integer, bmps_update_kwargs = default_bmps_update_kwargs(tn))
return partitionfunction(update(BoundaryMPSCache(tn, mps_bond_dimension); bmps_update_kwargs...))
end
function ITensors.contract(tn::AbstractTensorNetwork; alg = "exact", kwargs...)
return ITensors.contract(Algorithm(alg), tn; kwargs...)
end