Skip to content

Commit 9dc6362

Browse files
authored
Make compatible with ITensors 0.9 (#221)
1 parent d4bfae1 commit 9dc6362

File tree

8 files changed

+45
-74
lines changed

8 files changed

+45
-74
lines changed

Project.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "ITensorNetworks"
22
uuid = "2919e153-833c-4bdc-8836-1ea460a35fc7"
33
authors = ["Matthew Fishman <[email protected]>, Joseph Tindall <[email protected]> and contributors"]
4-
version = "0.13.1"
4+
version = "0.13.2"
55

66
[deps]
77
AbstractTrees = "1520ce14-60c1-5f80-bbc7-55ef81b5835c"
@@ -62,7 +62,7 @@ DocStringExtensions = "0.9"
6262
EinExprs = "0.6.4"
6363
Graphs = "1.8"
6464
GraphsFlows = "0.1.1"
65-
ITensors = "0.7, 0.8"
65+
ITensors = "0.7, 0.8, 0.9"
6666
IsApprox = "0.1, 1, 2"
6767
IterTools = "1.4.0"
6868
KrylovKit = "0.6, 0.7, 0.8, 0.9"
@@ -78,7 +78,7 @@ SplitApplyCombine = "1.2"
7878
StaticArrays = "1.5.12"
7979
StructWalk = "0.2"
8080
Suppressor = "0.2"
81-
TensorOperations = "5.1.4"
81+
TensorOperations = "5.2.0"
8282
TimerOutputs = "0.5.22"
8383
TupleTools = "1.4"
8484
julia = "1.10"

examples/Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
ITensorNetworks = "2919e153-833c-4bdc-8836-1ea460a35fc7"
33

44
[compat]
5-
ITensorNetworks = "0.13.0"
5+
ITensorNetworks = "0.13.2"

ext/ITensorNetworksTensorOperationsExt/ITensorNetworksTensorOperationsExt.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ using TensorOperations: TensorOperations, optimaltree
77

88
function ITensorNetworks.contraction_sequence(::Algorithm"optimal", tn::ITensorList)
99
network = collect.(inds.(tn))
10-
inds_to_dims = Dict(i => dim(i) for i in unique(reduce(vcat, network)))
10+
#Converting dims to Float64 to minimize overflow issues
11+
inds_to_dims = Dict(i => Float64(dim(i)) for i in unique(reduce(vcat, network)))
1112
seq, _ = optimaltree(network, inds_to_dims)
1213
return seq
1314
end

src/apply.jl

Lines changed: 22 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ using ITensors:
2222
replaceinds,
2323
unioninds,
2424
uniqueinds
25-
using ITensors.ContractionSequenceOptimization: optimal_contraction_sequence
2625
using KrylovKit: linsolve
2726
using LinearAlgebra: eigen, norm, svd
2827
using NamedGraphs: NamedEdge, has_edge
@@ -406,7 +405,8 @@ function fidelity(
406405
],
407406
envs,
408407
)
409-
term1 = ITensors.contract(term1_tns; sequence=optimal_contraction_sequence(term1_tns))
408+
sequence = contraction_sequence(term1_tns; alg="optimal")
409+
term1 = ITensors.contract(term1_tns; sequence)
410410

411411
term2_tns = vcat(
412412
[
@@ -417,9 +417,11 @@ function fidelity(
417417
],
418418
envs,
419419
)
420-
term2 = ITensors.contract(term2_tns; sequence=optimal_contraction_sequence(term2_tns))
420+
sequence = contraction_sequence(term2_tns; alg="optimal")
421+
term2 = ITensors.contract(term2_tns; sequence)
421422
term3_tns = vcat([p_prev, q_prev, prime(dag(p_cur)), prime(dag(q_cur)), gate], envs)
422-
term3 = ITensors.contract(term3_tns; sequence=optimal_contraction_sequence(term3_tns))
423+
sequence = contraction_sequence(term3_tns; alg="optimal")
424+
term3 = ITensors.contract(term3_tns; sequence)
423425

424426
f = term3[] / sqrt(term1[] * term2[])
425427
return f * conj(f)
@@ -446,61 +448,32 @@ function optimise_p_q(
446448
qs_ind = setdiff(inds(q_cur), collect(Iterators.flatten(inds.(vcat(envs, p_cur)))))
447449
ps_ind = setdiff(inds(p_cur), collect(Iterators.flatten(inds.(vcat(envs, q_cur)))))
448450

449-
opt_b_seq = optimal_contraction_sequence(vcat(ITensor[p, q, o, dag(prime(q_cur))], envs))
450-
opt_b_tilde_seq = optimal_contraction_sequence(
451-
vcat(ITensor[p, q, o, dag(prime(p_cur))], envs)
452-
)
453-
opt_M_seq = optimal_contraction_sequence(
454-
vcat(ITensor[q_cur, replaceinds(prime(dag(q_cur)), prime(qs_ind), qs_ind), p_cur], envs)
455-
)
456-
opt_M_tilde_seq = optimal_contraction_sequence(
457-
vcat(ITensor[p_cur, replaceinds(prime(dag(p_cur)), prime(ps_ind), ps_ind), q_cur], envs)
458-
)
459-
460-
function b(
461-
p::ITensor,
462-
q::ITensor,
463-
o::ITensor,
464-
envs::Vector{ITensor},
465-
r::ITensor;
466-
opt_sequence=nothing,
467-
)
468-
return noprime(
469-
ITensors.contract(vcat(ITensor[p, q, o, dag(prime(r))], envs); sequence=opt_sequence)
470-
)
451+
function b(p::ITensor, q::ITensor, o::ITensor, envs::Vector{ITensor}, r::ITensor)
452+
ts = vcat(ITensor[p, q, o, dag(prime(r))], envs)
453+
sequence = contraction_sequence(ts; alg="optimal")
454+
return noprime(ITensors.contract(ts; sequence))
471455
end
472456

473-
function M_p(
474-
envs::Vector{ITensor},
475-
p_q_tensor::ITensor,
476-
s_ind,
477-
apply_tensor::ITensor;
478-
opt_sequence=nothing,
479-
)
480-
return noprime(
481-
ITensors.contract(
482-
vcat(
483-
ITensor[
484-
p_q_tensor,
485-
replaceinds(prime(dag(p_q_tensor)), prime(s_ind), s_ind),
486-
apply_tensor,
487-
],
488-
envs,
489-
);
490-
sequence=opt_sequence,
491-
),
457+
function M_p(envs::Vector{ITensor}, p_q_tensor::ITensor, s_ind, apply_tensor::ITensor)
458+
ts = vcat(
459+
ITensor[
460+
p_q_tensor, replaceinds(prime(dag(p_q_tensor)), prime(s_ind), s_ind), apply_tensor
461+
],
462+
envs,
492463
)
464+
sequence = contraction_sequence(ts; alg="optimal")
465+
return noprime(ITensors.contract(ts; sequence))
493466
end
494467
for i in 1:nfullupdatesweeps
495-
b_vec = b(p, q, o, envs, q_cur; opt_sequence=opt_b_seq)
496-
M_p_partial = partial(M_p, envs, q_cur, qs_ind; opt_sequence=opt_M_seq)
468+
b_vec = b(p, q, o, envs, q_cur)
469+
M_p_partial = partial(M_p, envs, q_cur, qs_ind)
497470

498471
p_cur, info = linsolve(
499472
M_p_partial, b_vec, p_cur; isposdef=envisposdef, ishermitian=false
500473
)
501474

502-
b_tilde_vec = b(p, q, o, envs, p_cur; opt_sequence=opt_b_tilde_seq)
503-
M_p_tilde_partial = partial(M_p, envs, p_cur, ps_ind; opt_sequence=opt_M_tilde_seq)
475+
b_tilde_vec = b(p, q, o, envs, p_cur)
476+
M_p_tilde_partial = partial(M_p, envs, p_cur, ps_ind)
504477

505478
q_cur, info = linsolve(
506479
M_p_tilde_partial, b_tilde_vec, q_cur; isposdef=envisposdef, ishermitian=false

src/caches/abstractbeliefpropagationcache.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ using NDTensors: NDTensors
1616
abstract type AbstractBeliefPropagationCache end
1717

1818
function default_message_update(contract_list::Vector{ITensor}; normalize=true, kwargs...)
19-
sequence = optimal_contraction_sequence(contract_list)
19+
sequence = contraction_sequence(contract_list; alg="optimal")
2020
updated_messages = contract(contract_list; sequence, kwargs...)
2121
message_norm = norm(updated_messages)
2222
if normalize && !iszero(message_norm)

src/caches/beliefpropagationcache.jl

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -93,22 +93,16 @@ function environment(bpc::BeliefPropagationCache, verts::Vector; kwargs...)
9393
return vcat(messages, central_tensors)
9494
end
9595

96-
function region_scalar(
97-
bp_cache::BeliefPropagationCache,
98-
pv::PartitionVertex;
99-
contract_kwargs=(; sequence="automatic"),
100-
)
96+
function region_scalar(bp_cache::BeliefPropagationCache, pv::PartitionVertex)
10197
incoming_mts = incoming_messages(bp_cache, [pv])
10298
local_state = factors(bp_cache, pv)
103-
return contract(vcat(incoming_mts, local_state); contract_kwargs...)[]
99+
ts = vcat(incoming_mts, local_state)
100+
sequence = contraction_sequence(ts; alg="optimal")
101+
return contract(ts; sequence)[]
104102
end
105103

106-
function region_scalar(
107-
bp_cache::BeliefPropagationCache,
108-
pe::PartitionEdge;
109-
contract_kwargs=(; sequence="automatic"),
110-
)
111-
return contract(
112-
vcat(message(bp_cache, pe), message(bp_cache, reverse(pe))); contract_kwargs...
113-
)[]
104+
function region_scalar(bp_cache::BeliefPropagationCache, pe::PartitionEdge)
105+
ts = vcat(message(bp_cache, pe), message(bp_cache, reverse(pe)))
106+
sequence = contraction_sequence(ts; alg="optimal")
107+
return contract(ts; sequence)[]
114108
end

src/expect.jl

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,18 @@ using ITensors: Op, op, contract, which_op
33

44
default_expect_alg() = "bp"
55

6-
function expect(
7-
ψIψ::AbstractFormNetwork, op::Op; contract_kwargs=(; sequence="automatic"), kwargs...
8-
)
6+
function expect(ψIψ::AbstractFormNetwork, op::Op; kwargs...)
97
v = only(op.sites)
108
ψIψ_v = ψIψ[operator_vertex(ψIψ, v)]
119
s = commonind(ψIψ[ket_vertex(ψIψ, v)], ψIψ_v)
1210
operator = ITensors.op(op.which_op, s)
1311
∂ψIψ_∂v = environment(ψIψ, operator_vertices(ψIψ, [v]); kwargs...)
14-
numerator = contract(vcat(∂ψIψ_∂v, operator); contract_kwargs...)[]
15-
denominator = contract(vcat(∂ψIψ_∂v, ψIψ_v); contract_kwargs...)[]
12+
numerator_ts = vcat(∂ψIψ_∂v, operator)
13+
denominator_ts = vcat(∂ψIψ_∂v, ψIψ_v)
14+
numerator_seq = contraction_sequence(numerator_ts; alg="optimal")
15+
denominator_seq = contraction_sequence(denominator_ts; alg="optimal")
16+
numerator = contract(numerator_ts; sequence=numerator_seq)[]
17+
denominator = contract(denominator_ts; sequence=denominator_seq)[]
1618

1719
return numerator / denominator
1820
end

test/test_gauging.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ using ITensors.NDTensors: vector
1414
using LinearAlgebra: diag
1515
using NamedGraphs.NamedGraphGenerators: named_grid
1616
using StableRNGs: StableRNG
17+
using TensorOperations: TensorOperations
1718
using Test: @test, @testset
1819

1920
@testset "gauging" begin

0 commit comments

Comments
 (0)