@@ -22,7 +22,6 @@ using ITensors:
2222 replaceinds,
2323 unioninds,
2424 uniqueinds
25- using ITensors. ContractionSequenceOptimization: optimal_contraction_sequence
2625using KrylovKit: linsolve
2726using LinearAlgebra: eigen, norm, svd
2827using 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
0 commit comments