Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clean up and simplify optimization interface #127

Merged
merged 29 commits into from
Feb 11, 2025
Merged

Conversation

pbrehmer
Copy link
Collaborator

@pbrehmer pbrehmer commented Feb 4, 2025

No description provided.

@pbrehmer pbrehmer marked this pull request as draft February 4, 2025 16:54
Copy link

codecov bot commented Feb 6, 2025

Codecov Report

Attention: Patch coverage is 81.06796% with 39 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
src/algorithms/contractions/ctmrg_contractions.jl 40.42% 28 Missing ⚠️
src/algorithms/ctmrg/ctmrg.jl 50.00% 5 Missing ⚠️
src/algorithms/optimization/peps_optimization.jl 91.22% 5 Missing ⚠️
src/algorithms/ctmrg/sequential.jl 96.42% 1 Missing ⚠️
Files with missing lines Coverage Δ
src/PEPSKit.jl 87.50% <ø> (ø)
src/algorithms/ctmrg/projectors.jl 90.90% <100.00%> (+1.71%) ⬆️
src/algorithms/ctmrg/simultaneous.jl 98.18% <100.00%> (-0.16%) ⬇️
src/algorithms/ctmrg/sparse_environments.jl 29.62% <100.00%> (ø)
...rithms/optimization/fixed_point_differentiation.jl 96.25% <100.00%> (ø)
src/algorithms/toolbox.jl 82.41% <100.00%> (ø)
src/environments/vumps_environments.jl 100.00% <100.00%> (ø)
src/operators/transfermatrix.jl 71.42% <ø> (ø)
src/utility/symmetrization.jl 82.29% <ø> (-1.83%) ⬇️
src/algorithms/ctmrg/sequential.jl 98.27% <96.42%> (ø)
... and 3 more

... and 1 file with indirect coverage changes

@pbrehmer
Copy link
Collaborator Author

pbrehmer commented Feb 6, 2025

I transferred most of the improvements and clean ups from the Manopt PR #105. Most of the things are internal, but also from the user side some things improved:

  • Access to truncation errors and condition numbers ($s_\text{min} / s_\text{max}$) through leading_boundary and ctmrg_iteration
  • Advanced convergence histories in fixedpoint: we now collect the cost values, gradient norms, truncation errors, condition numbers, gradient norms for the respective unit cell tensors and optimization step times
  • Improved docstrings, arguments orders, names

I have not yet implemented the fixedpoint method which doesn't require any alg and instead just takes keyword arguments which are then parsed on to the fixedpoint_selector (similar to eigselector in KrylovKit). I would first get this PR merged and then implement the kwarg selector in another PR.

@pbrehmer pbrehmer marked this pull request as ready for review February 6, 2025 16:53
@pbrehmer pbrehmer requested a review from lkdvos February 6, 2025 16:53
Copy link
Member

@lkdvos lkdvos left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall definitely looks clean and like an improvement!

As I already mentioned in the comments, I think using where clauses in the signature to access certain types is not the most idiomatic, as this is also heavily tied to the internal details of how the types are structured (if we ever change them, we have to go in and change all function signatures as well). A simple scalartype function instead is a lot more portable and future-proof.

Somehow, my brain always thinks about "CTMRG environments" in plural, and the same holds for "MPS environments". This might also just be me, because I can also see why the alternative makes sense. In any case, I agree to decide on one style and keeping that. I guess I would vote plural and you would vote singular, so @leburgel what do you think?

@leburgel
Copy link
Member

leburgel commented Feb 7, 2025

Somehow, my brain always thinks about "CTMRG environments" in plural, and the same holds for "MPS environments". This might also just be me, because I can also see why the alternative makes sense. In any case, I agree to decide on one style and keeping that. I guess I would vote plural and you would vote singular, so @leburgel what do you think?

Happy to offer my opinion, but, on what exactly? Are we talking about variable names (env vs envs) or struct names, or something else? I just seem to have missed the question in the first place...

@pbrehmer
Copy link
Collaborator Author

pbrehmer commented Feb 7, 2025

In any case, I agree to decide on one style and keeping that.

Yes please!

Happy to offer my opinion, but, on what exactly? Are we talking about variable names (env vs envs) or struct names, or something else? I just seem to have missed the question in the first place...

I would also assume this is about env vs envs. In my head, given one PEPS (that might also have a larger unit cell), there should only be one environment for that specific PEPS - that's why I like calling it env. Also thinking about how you diagrammatically draw the entire environment, somehow it makes more sense to me to see the environment as a single thing. Additionally, calling it envs conventionally would complicate the possibility to have a container of multiple CTMRGEnvs where you would like to indicate that you have multiple environments but calling it envs in that case would create an ambiguity.

@leburgel
Copy link
Member

leburgel commented Feb 7, 2025

I would also assume this is about env vs envs.

I see. I personally prefer singular, so env. I tend to think of an environment of a contractible network as a collection of everything needed to contract that network. So I agree with Paul's viewpoint, that a single PEPS has a single environment (which can be used to contract its norm). In the context of contracting 2D networks, I would also think of a "boundary MPS environment" as a single thing, which contains everything needed to contract the network: two MPS fixed points (the top and bottom one for the row-to-row network transfer matrix) and the familiar left and right "MPS environments" of the mixed MPS transfer matrix (so top-operator-bottom MPS transfer operator), all together in one object.

@pbrehmer
Copy link
Collaborator Author

pbrehmer commented Feb 7, 2025

One last thing to do before merging: I should finally fix this Zygote NamedTuple error. This probably originates in the computation of the condition number (where we divide the maximal singular value by the minimal singular value in _condition_number). I flagged the _condition_number function as @non_differentiable such that Zygote sometimes backpropagates that falsely. The weird thing is that this error only (occasionally) comes up on first execution and if I rerun it just runs fine. Perhaps I need to write a rrule or find a work-around.

The annoying thing is that I can now rarely reproduce this such that it's hard to test possible solutions. Also, it seems that the CI is always running fine without throwing this error.

Got exception outside of a @test
  type NamedTuple has no field truncation_error
  Stacktrace:
    [1] getproperty
      @ ./Base.jl:49 [inlined]
    [2] macro expansion
      @ ~/.julia/packages/Zygote/3To5I/src/lib/lib.jl:333 [inlined]
    [3] (::Zygote.Jnew{@NamedTuple{truncation_error::Float64, condition_number::Float64, U::Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, S::Array{TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}}, 3}, V::Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}, Nothing, true})(Δ::@NamedTuple{err::Float64, U::Nothing, S::Nothing, V::Nothing})
      @ Zygote ~/.julia/packages/Zygote/3To5I/src/lib/lib.jl:327
    [4] (::Zygote.var"#2241#back#329"{Zygote.Jnew{@NamedTuple{truncation_error::Float64, condition_number::Float64, U::Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, S::Array{TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}}, 3}, V::Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}, Nothing, true}})(Δ::@NamedTuple{err::Float64, U::Nothing, S::Nothing, V::Nothing})
      @ Zygote ~/.julia/packages/ZygoteRules/CkVIK/src/adjoint.jl:72
    [5] NamedTuple
      @ ./boot.jl:727 [inlined]
    [6] (::Zygote.Pullback{Tuple{Type{NamedTuple{(:truncation_error, :condition_number, :U, :S, :V)}}, Tuple{Float64, Float64, Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, Array{TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}}, 3}, Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}}, Tuple{Zygote.var"#2241#back#329"{Zygote.Jnew{@NamedTuple{truncation_error::Float64, condition_number::Float64, U::Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, S::Array{TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}}, 3}, V::Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}, Nothing, true}}}})(Δ::@NamedTuple{err::Float64, U::Nothing, S::Nothing, V::Nothing})
      @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/interface2.jl:0
    [7] simultaneous_projectors
      @ ~/repos/PEPSKit.jl/src/algorithms/ctmrg/simultaneous.jl:89 [inlined]
    [8] (::Zygote.Pullback{Tuple{typeof(PEPSKit.simultaneous_projectors), Array{TensorMap{ComplexF64, ComplexSpace, 3, 3, Vector{ComplexF64}}, 3}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, HalfInfiniteProjector{SVDAdjoint{PEPSKit.FixedSVD{Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, Array{TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}}, 3}, Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}, Arnoldi{ModifiedGramSchmidt2, Float64}, Nothing}, TensorKit.NoTruncation}}, Any})(Δ::Tuple{Tuple{Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}, Nothing})
      @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/interface2.jl:0
    [9] ctmrg_iteration
      @ ~/repos/PEPSKit.jl/src/algorithms/ctmrg/simultaneous.jl:37 [inlined]
   [10] (::Zygote.Pullback{Tuple{typeof(PEPSKit.ctmrg_iteration), InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, SimultaneousCTMRG}, Tuple{Zygote.ZBack{PEPSKit.var"#dtmap_pullback#19"{@Kwargs{}, Array{ChainRulesCore.ProjectTo{ChainRulesCore.Tangent{Tuple{Int64, Int64, Int64}}, @NamedTuple{elements::Tuple{ChainRulesCore.ProjectTo{Float64, @NamedTuple{}}, ChainRulesCore.ProjectTo{Float64, @NamedTuple{}}, ChainRulesCore.ProjectTo{Float64, @NamedTuple{}}}}}, 3}, typeof(identity), Array{Tuple{TensorMap{ComplexF64, ComplexSpace, 3, 3, Vector{ComplexF64}}, Zygote.var"#ad_pullback#63"{Tuple{PEPSKit.var"#263#264"{InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Tuple{Int64, Int64, Int64}}, Zygote.Pullback{Tuple{PEPSKit.var"#263#264"{InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Tuple{Int64, Int64, Int64}}, Tuple{Zygote.Pullback{Tuple{Type{TensorMap}, PEPSKit.EnlargedCorner{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, Tuple{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}}, Int64}, Any}, Zygote.Pullback{Tuple{Type{PEPSKit.EnlargedCorner}, InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, Tuple{Int64, Int64, Int64}}, Any}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:envs, Zygote.Context{false}, PEPSKit.var"#263#264"{InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}}, Zygote.var"#2050#back#227"{Zygote.var"#back#225"{3, 1, Zygote.Context{false}, Int64}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:state, Zygote.Context{false}, PEPSKit.var"#263#264"{InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}}}}}}}, 3}}}, Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 1, Zygote.Context{false}, @NamedTuple{truncation_error::Float64, condition_number::Float64, U::Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, S::Array{TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}}, 3}, V::Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}}}, Zygote.var"#back#259"{Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 1, Zygote.Context{false}, Tuple{Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}}}}, Zygote.ZBack{Returns{Tuple{ChainRulesCore.NoTangent, ChainRulesCore.NoTangent, ChainRulesCore.NoTangent}}}, Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 2, Zygote.Context{false}, Int64}}, Zygote.var"#2231#back#327"{Zygote.Jnew{PEPSKit.var"#263#264"{InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Nothing, false}}, Zygote.ZBack{Returns{Tuple{ChainRulesCore.NoTangent, ChainRulesCore.NoTangent, ChainRulesCore.NoTangent}}}, Zygote.var"#back#260"{Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 2, Zygote.Context{false}, @NamedTuple{truncation_error::Float64, condition_number::Float64, U::Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, S::Array{TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}}, 3}, V::Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:projector_alg, Zygote.Context{false}, SimultaneousCTMRG, HalfInfiniteProjector{SVDAdjoint{PEPSKit.FixedSVD{Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, Array{TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}}, 3}, Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}, Arnoldi{ModifiedGramSchmidt2, Float64}, Nothing}, TensorKit.NoTruncation}}}, Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 1, Zygote.Context{false}, Tuple{Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}}}, Zygote.Pullback{Tuple{typeof(PEPSKit.simultaneous_projectors), Array{TensorMap{ComplexF64, ComplexSpace, 3, 3, Vector{ComplexF64}}, 3}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, HalfInfiniteProjector{SVDAdjoint{PEPSKit.FixedSVD{Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, Array{TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}}, 3}, Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}, Arnoldi{ModifiedGramSchmidt2, Float64}, Nothing}, TensorKit.NoTruncation}}, Any}, Zygote.var"#2034#back#218"{typeof(identity)}, Zygote.Pullback{Tuple{typeof(PEPSKit.renormalize_simultaneously), Array{TensorMap{ComplexF64, ComplexSpace, 3, 3, Vector{ComplexF64}}, 3}, Tuple{Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}, InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Tuple{Zygote.ZBack{Returns{Tuple{ChainRulesCore.NoTangent, ChainRulesCore.NoTangent, ChainRulesCore.NoTangent}}}, Zygote.var"#2231#back#327"{Zygote.Jnew{PEPSKit.var"#273#274"{Array{TensorMap{ComplexF64, ComplexSpace, 3, 3, Vector{ComplexF64}}, 3}, InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}, Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}}, Nothing, false}}, Zygote.ZBack{Returns{Tuple{ChainRulesCore.NoTangent, ChainRulesCore.NoTangent, ChainRulesCore.NoTangent}}}, Zygote.var"#back#259"{Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 1, Zygote.Context{false}, Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}}}}, Zygote.ZBack{PEPSKit.var"#dtmap_pullback#19"{@Kwargs{}, Array{ChainRulesCore.ProjectTo{ChainRulesCore.Tangent{Tuple{Int64, Int64, Int64}}, @NamedTuple{elements::Tuple{ChainRulesCore.ProjectTo{Float64, @NamedTuple{}}, ChainRulesCore.ProjectTo{Float64, @NamedTuple{}}, ChainRulesCore.ProjectTo{Float64, @NamedTuple{}}}}}, 3}, typeof(identity), Array{Tuple{Tuple{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, Zygote.var"#ad_pullback#63"{Tuple{PEPSKit.var"#273#274"{Array{TensorMap{ComplexF64, ComplexSpace, 3, 3, Vector{ComplexF64}}, 3}, InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}, Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}}, Tuple{Int64, Int64, Int64}}, Zygote.Pullback{Tuple{PEPSKit.var"#273#274"{Array{TensorMap{ComplexF64, ComplexSpace, 3, 3, Vector{ComplexF64}}, 3}, InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}, Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}}, Tuple{Int64, Int64, Int64}}, Any}}}, 3}}}, Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 2, Zygote.Context{false}, Int64}}, Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 1, Zygote.Context{false}, Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}}}, Zygote.var"#2866#back#688"{Zygote.var"#map_back#682"{typeof(first), 1, Tuple{Array{Tuple{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, 3}}, Tuple{Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}, Base.OneTo{Int64}}}, Array{Tuple{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, Zygote.var"#2146#back#287"{Zygote.var"#282#286"{Tuple{Nothing}}}}, 3}}}, Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 1, Zygote.Context{false}, Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}}, Zygote.var"#back#260"{Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 2, Zygote.Context{false}, Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}}}, Zygote.var"#2866#back#688"{Zygote.var"#map_back#682"{typeof(last), 1, Tuple{Array{Tuple{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, 3}}, Tuple{Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}, Base.OneTo{Int64}}}, Array{Tuple{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, Zygote.Pullback{Tuple{typeof(last), Tuple{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Tuple{Zygote.var"#2066#back#236"{Zygote.var"#back#234"{2, Zygote.Context{false}, Int64, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Zygote.Pullback{Tuple{typeof(lastindex), Tuple{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Tuple{Zygote.ZBack{Returns{Tuple{ChainRulesCore.NoTangent, ChainRulesCore.NoTangent}}}}}}}}, 3}}}, Zygote.ZBack{PEPSKit.var"#ctmrgenv_pullback#179"}}}}})(Δ::Tuple{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, Nothing})
      @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/interface2.jl:0
   [11] f
      @ ~/repos/PEPSKit.jl/src/algorithms/optimization/fixed_point_differentiation.jl:140 [inlined]
   [12] (::Zygote.Pullback{Tuple{PEPSKit.var"#f#361", InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Any})(Δ::CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}})
      @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/interface2.jl:0
   [13] (::Zygote.var"#ad_pullback#63"{Tuple{PEPSKit.var"#f#361", InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Zygote.Pullback{Tuple{PEPSKit.var"#f#361", InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Any}})(Δ::CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}})
      @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/chainrules.jl:273
   [14] (::PEPSKit.var"#∂f∂x#363"{Zygote.var"#ad_pullback#63"{Tuple{PEPSKit.var"#f#361", InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Zygote.Pullback{Tuple{PEPSKit.var"#f#361", InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Any}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}})(x::CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}})
      @ PEPSKit ~/repos/PEPSKit.jl/src/algorithms/optimization/fixed_point_differentiation.jl:145
   [15] apply(f::PEPSKit.var"#∂f∂x#363"{Zygote.var"#ad_pullback#63"{Tuple{PEPSKit.var"#f#361", InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Zygote.Pullback{Tuple{PEPSKit.var"#f#361", InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Any}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, x::CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}})
      @ KrylovKit ~/.julia/packages/KrylovKit/SNKgC/src/apply.jl:2
   [16] apply(A::Function, x::InnerProductVec{typeof(KrylovKit._realinner), CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}})
      @ KrylovKit ~/.julia/packages/KrylovKit/SNKgC/src/KrylovKit.jl:251
   [17] apply(operator::Function, x::InnerProductVec{typeof(KrylovKit._realinner), CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, α₀::Float64, α₁::Float64)
      @ KrylovKit ~/.julia/packages/KrylovKit/SNKgC/src/apply.jl:5
   [18] linsolve(operator::Function, b::InnerProductVec{typeof(KrylovKit._realinner), CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, x₀::InnerProductVec{typeof(KrylovKit._realinner), CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, alg::BiCGStab{Float64}, a₀::Int64, a₁::Int64; alg_rrule::BiCGStab{Float64})
      @ KrylovKit ~/.julia/packages/KrylovKit/SNKgC/src/linsolve/bicgstab.jl:161
   [19] linsolve
      @ ~/.julia/packages/KrylovKit/SNKgC/src/linsolve/bicgstab.jl:1 [inlined]
   [20] reallinsolve(f::Function, b::CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, x₀::CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, alg::BiCGStab{Float64}, a₀::Int64, a₁::Int64)
      @ KrylovKit ~/.julia/packages/KrylovKit/SNKgC/src/linsolve/linsolve.jl:249
   [21] fpgrad(∂F∂x::CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, ∂f∂x::Function, ∂f∂A::PEPSKit.var"#∂f∂A#362"{Zygote.var"#ad_pullback#63"{Tuple{PEPSKit.var"#f#361", InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Zygote.Pullback{Tuple{PEPSKit.var"#f#361", InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Any}}, InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}}, y₀::CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, alg::LinSolver{:fixed})
      @ PEPSKit ~/repos/PEPSKit.jl/src/algorithms/optimization/fixed_point_differentiation.jl:219
   [22] leading_boundary_fixed_pullback
      @ ~/repos/PEPSKit.jl/src/algorithms/optimization/fixed_point_differentiation.jl:146 [inlined]
   [23] #37
      @ ~/repos/PEPSKit.jl/src/utility/hook_pullback.jl:34 [inlined]
   [24] ZBack
      @ ~/.julia/packages/Zygote/3To5I/src/compiler/chainrules.jl:221 [inlined]
   [25] (::Zygote.var"#kw_zpullback#58"{PEPSKit.var"#37#38"{PEPSKit.var"#leading_boundary_fixed_pullback#360"{LinSolver{:fixed}, Zygote.ZygoteRuleConfig{Zygote.Context{false}}, InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}}})(dy::Tuple{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, Nothing})
      @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/chainrules.jl:247
   [26] #393
      @ ~/repos/PEPSKit.jl/src/algorithms/optimization/peps_optimization.jl:116 [inlined]
   [27] (::Zygote.Pullback{Tuple{PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}}, Tuple{Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:alg, Zygote.Context{false}, PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, PEPSOptimize{LinSolver{:fixed}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:alg, Zygote.Context{false}, PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, PEPSOptimize{LinSolver{:fixed}}}}, Zygote.Pullback{Tuple{Type{NamedTuple{(:alg_rrule,)}}, Tuple{LinSolver{:fixed}}}, Tuple{Zygote.var"#2241#back#329"{Zygote.Jnew{@NamedTuple{alg_rrule::LinSolver{:fixed}}, Nothing, true}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:boundary_alg, Zygote.Context{false}, PEPSOptimize{LinSolver{:fixed}}, SimultaneousCTMRG}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:condition_numbers, Zygote.Context{false}, PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, Vector{Float64}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:operator, Zygote.Context{false}, PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}}}, Zygote.var"#2231#back#327"{Zygote.Jnew{PEPSKit.var"#394#398"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, Nothing, false}}, Zygote.Pullback{Tuple{typeof(cost_function), InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}}, Tuple{Zygote.ZBack{Zygote.var"#real_pullback#364"}, Zygote.var"#2231#back#327"{Zygote.Jnew{PEPSKit.var"#329#330"{ComplexF64}, Nothing, false}}, Zygote.Pullback{Tuple{typeof(expectation_value), InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Tuple{Zygote.var"#2190#back#307"{Zygote.var"#305#306"{Tuple{Tuple{Nothing, Nothing}}, Zygote.ZBack{ChainRules.var"#vect_pullback#440"{2}}}}, Zygote.var"#2231#back#327"{Zygote.Jnew{PEPSKit.var"#327#328"{InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Nothing, false}}, Zygote.ZBack{PEPSKit.var"#dtmap_pullback#19"{@Kwargs{}, Vector{typeof(identity)}, typeof(identity), Vector{Tuple{ComplexF64, Zygote.var"#ad_pullback#63"{Tuple{PEPSKit.var"#327#328"{InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}}}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:terms, Zygote.Context{false}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}}}, Zygote.ZBack{Returns{Tuple{ChainRulesCore.NoTangent, ChainRulesCore.NoTangent, ChainRulesCore.NoTangent}}}, Zygote.ZBack{ChainRules.var"#sum_pullback#720"{Colon, Vector{ComplexF64}, ChainRulesCore.ProjectTo{AbstractArray, @NamedTuple{element::ChainRulesCore.ProjectTo{ComplexF64, @NamedTuple{}}, axes::Tuple{Base.OneTo{Int64}}}}}}}}, Zygote.ZBack{Returns{Tuple{ChainRulesCore.NoTangent, ChainRulesCore.NoTangent}}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:truncation_errors, Zygote.Context{false}, PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, Vector{Float64}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:env, Zygote.Context{false}, PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:env, Zygote.Context{false}, PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:alg, Zygote.Context{false}, PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, PEPSOptimize{LinSolver{:fixed}}}}, Zygote.var"#kw_zpullback#58"{PEPSKit.var"#37#38"{PEPSKit.var"#leading_boundary_fixed_pullback#360"{LinSolver{:fixed}, Zygote.ZygoteRuleConfig{Zygote.Context{false}}, InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}}}, Zygote.ZBack{Returns{Tuple{ChainRulesCore.NoTangent, ChainRulesCore.NoTangent}}}, Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 2, Zygote.Context{false}, Int64}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:condition_numbers, Zygote.Context{false}, PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, Vector{Float64}}}, Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 1, Zygote.Context{false}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}}, Zygote.var"#2034#back#218"{typeof(identity)}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:alg, Zygote.Context{false}, PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, PEPSOptimize{LinSolver{:fixed}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:truncation_errors, Zygote.Context{false}, PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, Vector{Float64}}}, Zygote.var"#back#259"{Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 1, Zygote.Context{false}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}}}, Zygote.var"#back#260"{Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 2, Zygote.Context{false}, @NamedTuple{truncation_error::Float64, condition_number::Float64, U::Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, S::Array{TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}}, 3}, V::Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}}}}, Zygote.var"#2217#back#325"{Zygote.var"#323#324"{Symbol, Base.RefValue{Any}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:gradient_alg, Zygote.Context{false}, PEPSOptimize{LinSolver{:fixed}}, LinSolver{:fixed}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:info, Zygote.Context{false}, PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, Core.Box}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:info, Zygote.Context{false}, PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, Core.Box}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:env, Zygote.Context{false}, PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}}, Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 1, Zygote.Context{false}, @NamedTuple{truncation_error::Float64, condition_number::Float64, U::Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, S::Array{TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}}, 3}, V::Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}}}}})(Δ::Float64)
      @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/interface2.jl:0
   [28] (::Zygote.var"#88#89"{Zygote.Pullback{Tuple{PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}}, Tuple{Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:alg, Zygote.Context{false}, PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, PEPSOptimize{LinSolver{:fixed}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:alg, Zygote.Context{false}, PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, PEPSOptimize{LinSolver{:fixed}}}}, Zygote.Pullback{Tuple{Type{NamedTuple{(:alg_rrule,)}}, Tuple{LinSolver{:fixed}}}, Tuple{Zygote.var"#2241#back#329"{Zygote.Jnew{@NamedTuple{alg_rrule::LinSolver{:fixed}}, Nothing, true}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:boundary_alg, Zygote.Context{false}, PEPSOptimize{LinSolver{:fixed}}, SimultaneousCTMRG}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:condition_numbers, Zygote.Context{false}, PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, Vector{Float64}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:operator, Zygote.Context{false}, PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}}}, Zygote.var"#2231#back#327"{Zygote.Jnew{PEPSKit.var"#394#398"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, Nothing, false}}, Zygote.Pullback{Tuple{typeof(cost_function), InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}}, Tuple{Zygote.ZBack{Zygote.var"#real_pullback#364"}, Zygote.var"#2231#back#327"{Zygote.Jnew{PEPSKit.var"#329#330"{ComplexF64}, Nothing, false}}, Zygote.Pullback{Tuple{typeof(expectation_value), InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Tuple{Zygote.var"#2190#back#307"{Zygote.var"#305#306"{Tuple{Tuple{Nothing, Nothing}}, Zygote.ZBack{ChainRules.var"#vect_pullback#440"{2}}}}, Zygote.var"#2231#back#327"{Zygote.Jnew{PEPSKit.var"#327#328"{InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Nothing, false}}, Zygote.ZBack{PEPSKit.var"#dtmap_pullback#19"{@Kwargs{}, Vector{typeof(identity)}, typeof(identity), Vector{Tuple{ComplexF64, Zygote.var"#ad_pullback#63"{Tuple{PEPSKit.var"#327#328"{InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}}}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:terms, Zygote.Context{false}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}}}, Zygote.ZBack{Returns{Tuple{ChainRulesCore.NoTangent, ChainRulesCore.NoTangent, ChainRulesCore.NoTangent}}}, Zygote.ZBack{ChainRules.var"#sum_pullback#720"{Colon, Vector{ComplexF64}, ChainRulesCore.ProjectTo{AbstractArray, @NamedTuple{element::ChainRulesCore.ProjectTo{ComplexF64, @NamedTuple{}}, axes::Tuple{Base.OneTo{Int64}}}}}}}}, Zygote.ZBack{Returns{Tuple{ChainRulesCore.NoTangent, ChainRulesCore.NoTangent}}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:truncation_errors, Zygote.Context{false}, PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, Vector{Float64}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:env, Zygote.Context{false}, PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:env, Zygote.Context{false}, PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:alg, Zygote.Context{false}, PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, PEPSOptimize{LinSolver{:fixed}}}}, Zygote.var"#kw_zpullback#58"{PEPSKit.var"#37#38"{PEPSKit.var"#leading_boundary_fixed_pullback#360"{LinSolver{:fixed}, Zygote.ZygoteRuleConfig{Zygote.Context{false}}, InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}}}, Zygote.ZBack{Returns{Tuple{ChainRulesCore.NoTangent, ChainRulesCore.NoTangent}}}, Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 2, Zygote.Context{false}, Int64}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:condition_numbers, Zygote.Context{false}, PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, Vector{Float64}}}, Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 1, Zygote.Context{false}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}}, Zygote.var"#2034#back#218"{typeof(identity)}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:alg, Zygote.Context{false}, PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, PEPSOptimize{LinSolver{:fixed}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:truncation_errors, Zygote.Context{false}, PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, Vector{Float64}}}, Zygote.var"#back#259"{Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 1, Zygote.Context{false}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}}}, Zygote.var"#back#260"{Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 2, Zygote.Context{false}, @NamedTuple{truncation_error::Float64, condition_number::Float64, U::Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, S::Array{TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}}, 3}, V::Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}}}}, Zygote.var"#2217#back#325"{Zygote.var"#323#324"{Symbol, Base.RefValue{Any}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:gradient_alg, Zygote.Context{false}, PEPSOptimize{LinSolver{:fixed}}, LinSolver{:fixed}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:info, Zygote.Context{false}, PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, Core.Box}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:info, Zygote.Context{false}, PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, Core.Box}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:env, Zygote.Context{false}, PEPSKit.var"#393#397"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}}, Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 1, Zygote.Context{false}, @NamedTuple{truncation_error::Float64, condition_number::Float64, U::Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, S::Array{TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}}, 3}, V::Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}}}}}})(Δ::Float64)
      @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/interface.jl:97
   [29] withgradient(f::Function, args::InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}})
      @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/interface.jl:219
   [30] (::PEPSKit.var"#392#396"{LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Matrix{Float64}}, Vector{Float64}, Vector{Float64}})(::Tuple{InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}})
      @ PEPSKit ~/repos/PEPSKit.jl/src/algorithms/optimization/peps_optimization.jl:115
   [31] optimize(fg::PEPSKit.var"#392#396"{LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Matrix{Float64}}, Vector{Float64}, Vector{Float64}}, x::Tuple{InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, alg::LBFGS{Float64, HagerZhangLineSearch{Rational{Int64}}}; precondition::typeof(OptimKit._precondition), finalize!::typeof(OptimKit._finalize!), shouldstop::OptimKit.DefaultShouldStop, hasconverged::OptimKit.DefaultHasConverged{Float64}, retract::Function, inner::typeof(PEPSKit.real_inner), transport!::typeof(OptimKit._transport!), scale!::typeof(OptimKit._scale!), add!::typeof(OptimKit._add!), isometrictransport::Bool)
      @ OptimKit ~/.julia/packages/OptimKit/G6i79/src/lbfgs.jl:66
   [32] fixedpoint(operator::LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, peps₀::InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, env₀::CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, alg::PEPSOptimize{LinSolver{:fixed}}; finalize!::Function)
      @ PEPSKit ~/repos/PEPSKit.jl/src/algorithms/optimization/peps_optimization.jl:111
   [33] fixedpoint(operator::LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, peps₀::InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, env₀::CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, alg::PEPSOptimize{LinSolver{:fixed}})
      @ PEPSKit ~/repos/PEPSKit.jl/src/algorithms/optimization/peps_optimization.jl:79
   [34] macro expansion
      @ ~/repos/PEPSKit.jl/test/heisenberg.jl:28 [inlined]
   [35] macro expansion
      @ ~/.julia/juliaup/julia-1.11.3+0.x64.linux.gnu/share/julia/stdlib/v1.11/Test/src/Test.jl:1704 [inlined]
   [36] top-level scope
      @ ~/repos/PEPSKit.jl/test/heisenberg.jl:22
   [37] eval
      @ ./boot.jl:430 [inlined]
   [38] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
      @ Base ./loading.jl:2734
   [39] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::@Kwargs{})
      @ Base ./essentials.jl:1055
   [40] invokelatest(::Any, ::Any, ::Vararg{Any})
      @ Base ./essentials.jl:1052
   [41] inlineeval(m::Module, code::String, code_line::Int64, code_column::Int64, file::String; softscope::Bool)
      @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.127.2/scripts/packages/VSCodeServer/src/eval.jl:271
   [42] (::VSCodeServer.var"#69#74"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams})()
      @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.127.2/scripts/packages/VSCodeServer/src/eval.jl:181
   [43] withpath(f::VSCodeServer.var"#69#74"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams}, path::String)
      @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.127.2/scripts/packages/VSCodeServer/src/repl.jl:276
   [44] (::VSCodeServer.var"#68#73"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams})()
      @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.127.2/scripts/packages/VSCodeServer/src/eval.jl:179
   [45] hideprompt(f::VSCodeServer.var"#68#73"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams})
      @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.127.2/scripts/packages/VSCodeServer/src/repl.jl:38
   [46] #67
      @ ~/.vscode/extensions/julialang.language-julia-1.127.2/scripts/packages/VSCodeServer/src/eval.jl:150 [inlined]
   [47] with_logstate(f::VSCodeServer.var"#67#72"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams}, logstate::Base.CoreLogging.LogState)
      @ Base.CoreLogging ./logging/logging.jl:522
   [48] with_logger
      @ ./logging/logging.jl:632 [inlined]
   [49] (::VSCodeServer.var"#66#71"{VSCodeServer.ReplRunCodeRequestParams})()
      @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.127.2/scripts/packages/VSCodeServer/src/eval.jl:263
   [50] #invokelatest#2
      @ ./essentials.jl:1055 [inlined]
   [51] invokelatest(::Any)
      @ Base ./essentials.jl:1052

@pbrehmer
Copy link
Collaborator Author

pbrehmer commented Feb 7, 2025

I found another interesting variant of this problem: before throwing the type NamedTuple has no field truncation_error error, I first encountered this error. This probably also has to do with incorrect backpropagation. Weirdly again, after throwing the error once, the code runs without problems.

ERROR: TaskFailedException
Stacktrace:
  [1] wait(t::Task)
    @ Base ./task.jl:370
  [2] fetch
    @ ./task.jl:390 [inlined]
  [3] fetch
    @ ~/.julia/packages/StableTasks/3CrzR/src/internals.jl:9 [inlined]
  [4] _mapreduce(f::typeof(fetch), op::typeof(BangBang.append!!), ::IndexLinear, A::Vector{StableTasks.StableTask{Any}})
    @ Base ./reduce.jl:437
  [5] _mapreduce_dim(f::Function, op::Function, ::Base._InitialValue, A::Vector{StableTasks.StableTask{Any}}, ::Colon)
    @ Base ./reducedim.jl:337
  [6] mapreduce(f::Function, op::Function, A::Vector{StableTasks.StableTask{Any}})
    @ Base ./reducedim.jl:329
  [7] _tmapreduce(f::Function, op::Function, Arrs::Tuple{…}, ::Type{…}, scheduler::OhMyThreads.Schedulers.DynamicScheduler{…}, mapreduce_kwargs::@NamedTuple{})
    @ OhMyThreads.Implementation ~/.julia/packages/OhMyThreads/eiaNP/src/implementation.jl:113
  [8] #tmapreduce#22
    @ ~/.julia/packages/OhMyThreads/eiaNP/src/implementation.jl:85 [inlined]
  [9] tmapreduce
    @ ~/.julia/packages/OhMyThreads/eiaNP/src/implementation.jl:69 [inlined]
 [10] _tmap(::OhMyThreads.Schedulers.DynamicScheduler{…}, ::Function, ::Array{…})
    @ OhMyThreads.Implementation ~/.julia/packages/OhMyThreads/eiaNP/src/implementation.jl:451
 [11] #tmap#102
    @ ~/.julia/packages/OhMyThreads/eiaNP/src/implementation.jl:373 [inlined]
 [12] tmap
    @ ~/.julia/packages/OhMyThreads/eiaNP/src/implementation.jl:337 [inlined]
 [13] rrule(config::Zygote.ZygoteRuleConfig{…}, ::typeof(PEPSKit.dtmap), f::Function, A::Array{…}; kwargs::@Kwargs{})
    @ PEPSKit ~/repos/PEPSKit.jl/src/utility/diffable_threads.jl:16
 [14] rrule(config::Zygote.ZygoteRuleConfig{Zygote.Context{…}}, ::typeof(PEPSKit.dtmap), f::Function, A::Array{Tuple{…}, 3})
    @ PEPSKit ~/repos/PEPSKit.jl/src/utility/diffable_threads.jl:13
 [15] chain_rrule(::Zygote.ZygoteRuleConfig{Zygote.Context{false}}, ::Function, ::Function, ::Vararg{Any})
    @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/chainrules.jl:233
 [16] macro expansion
    @ ~/.julia/packages/Zygote/3To5I/src/compiler/interface2.jl:0 [inlined]
 [17] _pullback(::Zygote.Context{…}, ::typeof(PEPSKit.dtmap), ::PEPSKit.var"#271#272"{…}, ::Array{…})
    @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/interface2.jl:91
 [18] simultaneous_projectors
    @ ~/repos/PEPSKit.jl/src/algorithms/ctmrg/simultaneous.jl:74 [inlined]
 [19] _pullback(::Zygote.Context{…}, ::typeof(PEPSKit.simultaneous_projectors), ::Array{…}, ::CTMRGEnv{…}, ::HalfInfiniteProjector{…})
    @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/interface2.jl:0
 [20] ctmrg_iteration
    @ ~/repos/PEPSKit.jl/src/algorithms/ctmrg/simultaneous.jl:37 [inlined]
 [21] _pullback(::Zygote.Context{…}, ::typeof(PEPSKit.ctmrg_iteration), ::InfinitePEPS{…}, ::CTMRGEnv{…}, ::SimultaneousCTMRG)
    @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/interface2.jl:0
 [22] f
    @ ~/repos/PEPSKit.jl/src/algorithms/optimization/fixed_point_differentiation.jl:140 [inlined]
 [23] _pullback(::Zygote.Context{…}, ::PEPSKit.var"#f#361", ::InfinitePEPS{…}, ::CTMRGEnv{…})
    @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/interface2.jl:0
 [24] #rrule_via_ad#59
    @ ~/.julia/packages/Zygote/3To5I/src/compiler/chainrules.jl:270 [inlined]
 [25] rrule_via_ad
    @ ~/.julia/packages/Zygote/3To5I/src/compiler/chainrules.jl:258 [inlined]
 [26] leading_boundary_fixed_pullback
    @ ~/repos/PEPSKit.jl/src/algorithms/optimization/fixed_point_differentiation.jl:141 [inlined]
 [27] #37
    @ ~/repos/PEPSKit.jl/src/utility/hook_pullback.jl:34 [inlined]
 [28] ZBack
    @ ~/.julia/packages/Zygote/3To5I/src/compiler/chainrules.jl:221 [inlined]
 [29] (::Zygote.var"#kw_zpullback#58"{PEPSKit.var"#37#38"{…}})(dy::Tuple{CTMRGEnv{…}, Nothing})
    @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/chainrules.jl:247
 [30] #369
    @ ~/repos/PEPSKit.jl/src/algorithms/optimization/peps_optimization.jl:114 [inlined]
 [31] (::Zygote.Pullback{Tuple{…}, Tuple{…}})(Δ::Float64)
    @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/interface2.jl:0
 [32] (::Zygote.var"#88#89"{Zygote.Pullback{Tuple{…}, Tuple{…}}})(Δ::Float64)
    @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/interface.jl:97
 [33] withgradient(f::Function, args::InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}})
    @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/interface.jl:219
 [34] (::PEPSKit.var"#368#372"{…})(::Tuple{…})
    @ PEPSKit ~/repos/PEPSKit.jl/src/algorithms/optimization/peps_optimization.jl:113
 [35] optimize(fg::PEPSKit.var"#368#372"{…}, x::Tuple{…}, alg::LBFGS{…}; precondition::typeof(OptimKit._precondition), finalize!::typeof(OptimKit._finalize!), shouldstop::OptimKit.DefaultShouldStop, hasconverged::OptimKit.DefaultHasConverged{…}, retract::Function, inner::typeof(PEPSKit.real_inner), transport!::typeof(OptimKit._transport!), scale!::typeof(OptimKit._scale!), add!::typeof(OptimKit._add!), isometrictransport::Bool)
    @ OptimKit ~/.julia/packages/OptimKit/G6i79/src/lbfgs.jl:66
 [36] fixedpoint(operator::LocalOperator{…}, peps₀::InfinitePEPS{…}, env₀::CTMRGEnv{…}, alg::PEPSOptimize{…}; finalize!::Function)
    @ PEPSKit ~/repos/PEPSKit.jl/src/algorithms/optimization/peps_optimization.jl:109
 [37] fixedpoint(operator::LocalOperator{…}, peps₀::InfinitePEPS{…}, env₀::CTMRGEnv{…}, alg::PEPSOptimize{…})
    @ PEPSKit ~/repos/PEPSKit.jl/src/algorithms/optimization/peps_optimization.jl:77
 [38] top-level scope
    @ ~/repos/PEPSKit.jl/test/heisenberg.jl:25

    nested task error: SpaceMismatch("(ℂ^16 ⊗ (ℂ^2)' ⊗ ℂ^2) ≠ (ℂ^16 ⊗ ℂ^2 ⊗ (ℂ^2)')")
    Stacktrace:
      [1] compose
        @ ~/.julia/packages/TensorKit/IQwop/src/spaces/homspace.jl:173 [inlined]
      [2] tensorcontract_structure(A::TensorMap{…}, pA::Tuple{…}, conjA::Bool, B::TensorKit.AdjointTensorMap{…}, pB::Tuple{…}, conjB::Bool, pAB::Tuple{…})
        @ TensorKit ~/.julia/packages/TensorKit/IQwop/src/tensors/tensoroperations.jl:128
      [3] tensoralloc_contract
        @ ~/.julia/packages/TensorOperations/HkbYW/src/implementation/allocator.jl:101 [inlined]
      [4] tensoralloc_contract
        @ ~/.julia/packages/TensorOperations/HkbYW/src/implementation/allocator.jl:100 [inlined]
      [5] compose_dest
        @ ~/.julia/packages/TensorKit/IQwop/src/tensors/linalg.jl:27 [inlined]
      [6] compose
        @ ~/.julia/packages/TensorKit/IQwop/src/tensors/linalg.jl:40 [inlined]
      [7] *
        @ ~/.julia/packages/TensorKit/IQwop/src/tensors/linalg.jl:43 [inlined]
      [8] rrule
        @ ~/.julia/packages/TensorKit/IQwop/ext/TensorKitChainRulesCoreExt/linalg.jl:16 [inlined]
      [9] rrule
        @ ~/.julia/packages/ChainRulesCore/U6wNx/src/rules.jl:138 [inlined]
     [10] chain_rrule
        @ ~/.julia/packages/Zygote/3To5I/src/compiler/chainrules.jl:233 [inlined]
     [11] macro expansion
        @ ~/.julia/packages/Zygote/3To5I/src/compiler/interface2.jl:0 [inlined]
     [12] _pullback
        @ ~/.julia/packages/Zygote/3To5I/src/compiler/interface2.jl:91 [inlined]
     [13] *
        @ ./operators.jl:596 [inlined]
     [14] contract_projectors
        @ ~/repos/PEPSKit.jl/src/algorithms/contractions/ctmrg_contractions.jl:356 [inlined]
     [15] _pullback(::Zygote.Context{…}, ::typeof(PEPSKit.contract_projectors), ::TensorMap{…}, ::TensorMap{…}, ::TensorMap{…}, ::TensorMap{…}, ::TensorMap{…})
        @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/interface2.jl:0
     [16] _apply(::Function, ::Vararg{Any})
        @ Core ./boot.jl:946
     [17] adjoint
        @ ~/.julia/packages/Zygote/3To5I/src/lib/lib.jl:212 [inlined]
     [18] _pullback
        @ ~/.julia/packages/ZygoteRules/CkVIK/src/adjoint.jl:67 [inlined]
     [19] compute_projector
        @ ~/repos/PEPSKit.jl/src/algorithms/ctmrg/projectors.jl:77 [inlined]
     [20] _pullback(::Zygote.Context{…}, ::typeof(PEPSKit.compute_projector), ::Tuple{…}, ::Tuple{…}, ::HalfInfiniteProjector{…})
        @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/interface2.jl:0
     [21] simultaneous_projectors
        @ ~/repos/PEPSKit.jl/src/algorithms/ctmrg/simultaneous.jl:97 [inlined]
     [22] #271
        @ ~/repos/PEPSKit.jl/src/algorithms/ctmrg/simultaneous.jl:77 [inlined]
     [23] _pullback(ctx::Zygote.Context{…}, f::PEPSKit.var"#271#272"{…}, args::Tuple{…})
        @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/interface2.jl:0
     [24] #rrule_via_ad#59
        @ ~/.julia/packages/Zygote/3To5I/src/compiler/chainrules.jl:270 [inlined]
     [25] rrule_via_ad
        @ ~/.julia/packages/Zygote/3To5I/src/compiler/chainrules.jl:258 [inlined]
     [26] #15
        @ ~/repos/PEPSKit.jl/src/utility/diffable_threads.jl:17 [inlined]
     [27] iterate
        @ ./generator.jl:48 [inlined]
     [28] _collect(c::SubArray{…}, itr::Base.Generator{…}, ::Base.EltypeUnknown, isz::Base.HasShape{…})
        @ Base ./array.jl:811
     [29] collect_similar
        @ ./array.jl:720 [inlined]
     [30] map
        @ ./abstractarray.jl:3371 [inlined]
     [31] #132
        @ ~/.julia/packages/OhMyThreads/eiaNP/src/implementation.jl:448 [inlined]
     [32] mapreduce_first
        @ ./reduce.jl:421 [inlined]
     [33] _mapreduce(f::OhMyThreads.Implementation.var"#132#135"{…}, op::typeof(BangBang.append!!), ::IndexLinear, A::SubArray{…})
        @ Base ./reduce.jl:432
     [34] _mapreduce_dim
        @ ./reducedim.jl:337 [inlined]
     [35] mapreduce
        @ ./reducedim.jl:329 [inlined]
     [36] #27
        @ ~/.julia/packages/OhMyThreads/eiaNP/src/implementation.jl:110 [inlined]
     [37] (::OhMyThreads.Implementation.var"#28#36"{StableTasks.AtomicRef{…}, OhMyThreads.Implementation.var"#27#35"{…}})()
        @ OhMyThreads.Implementation ~/.julia/packages/StableTasks/3CrzR/src/internals.jl:67
Some type information was truncated. Use `show(err)` to see complete types.

@pbrehmer
Copy link
Collaborator Author

pbrehmer commented Feb 7, 2025

That second thing looks like it could be if you accidentally give an initial guess with strange arrows? I'm just guessing though

This was just running the Heisenberg test, so the arrows should be just the same as always. I'm quite confused by this error.

@pbrehmer
Copy link
Collaborator Author

pbrehmer commented Feb 7, 2025

Using a rrule for _condition_number where instead of a NoTangent a ZeroTangent is used doesn't change anything - the truncation_error error still sometimes appears.

Comment on lines 60 to 62
condition_number = _condition_number(S)
_condition_number_pullback(_) = (NoTangent(), ZeroTangent())
return condition_number, _condition_number_pullback
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
condition_number = _condition_number(S)
_condition_number_pullback(_) = (NoTangent(), ZeroTangent())
return condition_number, _condition_number_pullback
return _condition_number(S), Returns((NoTangent(), ZeroTangent()))

@pbrehmer
Copy link
Collaborator Author

pbrehmer commented Feb 7, 2025

Computing the condition number directly in the projector methods has resulted in a new error:

ERROR: MethodError: no method matching vec(::TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}})
The function `vec` exists, but no method is defined for this combination of argument types.

Closest candidates are:
  vec(::LinearAlgebra.Transpose{<:Number, <:AbstractVector})
   @ LinearAlgebra ~/.julia/juliaup/julia-1.11.3+0.x64.linux.gnu/share/julia/stdlib/v1.11/LinearAlgebra/src/adjtrans.jl:373
  vec(::StaticArraysCore.SizedArray{S, T, N, M} where {T, N, M}) where S
   @ StaticArrays ~/.julia/packages/StaticArrays/lZeGV/src/SizedArray.jl:171
  vec(::StaticArraysCore.StaticArray)
   @ StaticArrays ~/.julia/packages/StaticArrays/lZeGV/src/abstractarray.jl:180
  ...

Stacktrace:
  [1] (::Zygote.var"#copy_sensitivity#1172"{…})(b̄::TensorMap{…})
    @ Zygote ~/.julia/packages/Zygote/3To5I/src/lib/buffer.jl:78
  [2] (::Zygote.var"#3761#back#1173"{…})(Δ::TensorMap{…})
    @ Zygote ~/.julia/packages/ZygoteRules/CkVIK/src/adjoint.jl:72
  [3] simultaneous_projectors
    @ ~/repos/PEPSKit.jl/src/algorithms/ctmrg/simultaneous.jl:81 [inlined]
  [4] (::Zygote.Pullback{Tuple{…}, Any})(Δ::Tuple{Tuple{…}, Nothing})
    @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/interface2.jl:0
  [5] ctmrg_iteration
    @ ~/repos/PEPSKit.jl/src/algorithms/ctmrg/simultaneous.jl:37 [inlined]
  [6] (::Zygote.Pullback{Tuple{…}, Tuple{…}})(Δ::Tuple{CTMRGEnv{…}, Nothing})
    @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/interface2.jl:0
  [7] f
    @ ~/repos/PEPSKit.jl/src/algorithms/optimization/fixed_point_differentiation.jl:140 [inlined]
  [8] (::Zygote.Pullback{Tuple{…}, Any})(Δ::CTMRGEnv{TensorMap{…}, TensorMap{…}})
    @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/interface2.jl:0
  [9] (::Zygote.var"#ad_pullback#63"{Tuple{…}, Zygote.Pullback{…}})(Δ::CTMRGEnv{TensorMap{…}, TensorMap{…}})
    @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/chainrules.jl:273
 [10] (::PEPSKit.var"#∂f∂x#363"{Zygote.var"#ad_pullback#63"{…}, CTMRGEnv{…}})(x::CTMRGEnv{TensorMap{…}, TensorMap{…}})
    @ PEPSKit ~/repos/PEPSKit.jl/src/algorithms/optimization/fixed_point_differentiation.jl:145
 [11] apply(f::PEPSKit.var"#∂f∂x#363"{Zygote.var"#ad_pullback#63"{…}, CTMRGEnv{…}}, x::CTMRGEnv{TensorMap{…}, TensorMap{…}})
    @ KrylovKit ~/.julia/packages/KrylovKit/SNKgC/src/apply.jl:2
 [12] apply(A::Function, x::InnerProductVec{typeof(KrylovKit._realinner), CTMRGEnv{TensorMap{…}, TensorMap{…}}})
    @ KrylovKit ~/.julia/packages/KrylovKit/SNKgC/src/KrylovKit.jl:251
 [13] apply(operator::Function, x::InnerProductVec{typeof(KrylovKit._realinner), CTMRGEnv{…}}, α₀::Float64, α₁::Float64)
    @ KrylovKit ~/.julia/packages/KrylovKit/SNKgC/src/apply.jl:5
 [14] linsolve(operator::Function, b::InnerProductVec{…}, x₀::InnerProductVec{…}, alg::BiCGStab{…}, a₀::Int64, a₁::Int64; alg_rrule::BiCGStab{…})
    @ KrylovKit ~/.julia/packages/KrylovKit/SNKgC/src/linsolve/bicgstab.jl:125
 [15] linsolve
    @ ~/.julia/packages/KrylovKit/SNKgC/src/linsolve/bicgstab.jl:1 [inlined]
 [16] reallinsolve(f::Function, b::CTMRGEnv{…}, x₀::CTMRGEnv{…}, alg::BiCGStab{…}, a₀::Int64, a₁::Int64)
    @ KrylovKit ~/.julia/packages/KrylovKit/SNKgC/src/linsolve/linsolve.jl:249
 [17] fpgrad(∂F∂x::CTMRGEnv{…}, ∂f∂x::Function, ∂f∂A::PEPSKit.var"#∂f∂A#362"{…}, y₀::CTMRGEnv{…}, alg::LinSolver{…})
    @ PEPSKit ~/repos/PEPSKit.jl/src/algorithms/optimization/fixed_point_differentiation.jl:219
 [18] leading_boundary_fixed_pullback
    @ ~/repos/PEPSKit.jl/src/algorithms/optimization/fixed_point_differentiation.jl:146 [inlined]
 [19] #37
    @ ~/repos/PEPSKit.jl/src/utility/hook_pullback.jl:34 [inlined]
 [20] ZBack
    @ ~/.julia/packages/Zygote/3To5I/src/compiler/chainrules.jl:221 [inlined]
 [21] (::Zygote.var"#kw_zpullback#58"{PEPSKit.var"#37#38"{…}})(dy::Tuple{CTMRGEnv{…}, Nothing})
    @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/chainrules.jl:247
 [22] #369
    @ ~/repos/PEPSKit.jl/src/algorithms/optimization/peps_optimization.jl:114 [inlined]
 [23] (::Zygote.Pullback{Tuple{…}, Tuple{…}})(Δ::Float64)
    @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/interface2.jl:0
 [24] (::Zygote.var"#88#89"{Zygote.Pullback{Tuple{…}, Tuple{…}}})(Δ::Float64)
    @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/interface.jl:97
 [25] withgradient(f::Function, args::InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}})
    @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/interface.jl:219
 [26] (::PEPSKit.var"#368#372"{…})(::Tuple{…})
    @ PEPSKit ~/repos/PEPSKit.jl/src/algorithms/optimization/peps_optimization.jl:113
 [27] optimize(fg::PEPSKit.var"#368#372"{…}, x::Tuple{…}, alg::LBFGS{…}; precondition::typeof(OptimKit._precondition), finalize!::typeof(OptimKit._finalize!), shouldstop::OptimKit.DefaultShouldStop, hasconverged::OptimKit.DefaultHasConverged{…}, retract::Function, inner::typeof(PEPSKit.real_inner), transport!::typeof(OptimKit._transport!), scale!::typeof(OptimKit._scale!), add!::typeof(OptimKit._add!), isometrictransport::Bool)
    @ OptimKit ~/.julia/packages/OptimKit/G6i79/src/lbfgs.jl:66
 [28] fixedpoint(operator::LocalOperator{…}, peps₀::InfinitePEPS{…}, env₀::CTMRGEnv{…}, alg::PEPSOptimize{…}; finalize!::Function)
    @ PEPSKit ~/repos/PEPSKit.jl/src/algorithms/optimization/peps_optimization.jl:109
 [29] fixedpoint(operator::LocalOperator{…}, peps₀::InfinitePEPS{…}, env₀::CTMRGEnv{…}, alg::PEPSOptimize{…})
    @ PEPSKit ~/repos/PEPSKit.jl/src/algorithms/optimization/peps_optimization.jl:77
 [30] top-level scope
    @ ~/repos/PEPSKit.jl/test/heisenberg.jl:25
Some type information was truncated. Use `show(err)` to see complete types.

@lkdvos
Copy link
Member

lkdvos commented Feb 7, 2025

Can you paste the first couple stacks from the output of show(err) as well? In order to really see what Zygote is deriving you really need to now the types of everything...

Also, you can put things in expandable sections with <details> and </details> to achieve

some hidden long messages telling you how great you are! 🥇

@pbrehmer
Copy link
Collaborator Author

pbrehmer commented Feb 7, 2025

Can you paste the first couple stacks from the output of show(err) as well? In order to really see what Zygote is deriving you really need to now the types of everything...

I wasn't able to reproduce the error again because it only comes up occasionally and needs recompilation so one always has to wait for Zygote's TTFX... But I haven't yet encountered the error again with the @ignore_derivatives work-around, so perhaps that works now

@pbrehmer
Copy link
Collaborator Author

pbrehmer commented Feb 7, 2025

Nevermind, here's the full error :-) Thanks for the assistance!

julia> show(err)
1-element ExceptionStack:
LoadError: MethodError: no method matching vec(::TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}})
The function `vec` exists, but no method is defined for this combination of argument types.

Closest candidates are:
  vec(::LinearAlgebra.Transpose{<:Number, <:AbstractVector})
   @ LinearAlgebra ~/.julia/juliaup/julia-1.11.3+0.x64.linux.gnu/share/julia/stdlib/v1.11/LinearAlgebra/src/adjtrans.jl:373
  vec(::StaticArraysCore.SizedArray{S, T, N, M} where {T, N, M}) where S
   @ StaticArrays ~/.julia/packages/StaticArrays/lZeGV/src/SizedArray.jl:171
  vec(::StaticArraysCore.StaticArray)
   @ StaticArrays ~/.julia/packages/StaticArrays/lZeGV/src/abstractarray.jl:180
  ...

Stacktrace:
  [1] (::Zygote.var"#copy_sensitivity#1172"{Zygote.Context{false}, Zygote.Buffer{TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}}, Array{TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}}, 3}}})(b̄::TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}})
    @ Zygote ~/.julia/packages/Zygote/3To5I/src/lib/buffer.jl:78
  [2] (::Zygote.var"#3761#back#1173"{Zygote.var"#copy_sensitivity#1172"{Zygote.Context{false}, Zygote.Buffer{TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}}, Array{TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}}, 3}}}})(Δ::TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}})
    @ Zygote ~/.julia/packages/ZygoteRules/CkVIK/src/adjoint.jl:72
  [3] simultaneous_projectors
    @ ~/repos/PEPSKit.jl/src/algorithms/ctmrg/simultaneous.jl:81 [inlined]
  [4] (::Zygote.Pullback{Tuple{typeof(PEPSKit.simultaneous_projectors), Array{TensorMap{ComplexF64, ComplexSpace, 3, 3, Vector{ComplexF64}}, 3}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, HalfInfiniteProjector{SVDAdjoint{PEPSKit.FixedSVD{Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, Array{TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}}, 3}, Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}, Arnoldi{ModifiedGramSchmidt2, Float64}, Nothing}, TensorKit.NoTruncation}}, Any})(Δ::Tuple{Tuple{Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}, Nothing})
    @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/interface2.jl:0
  [5] ctmrg_iteration
    @ ~/repos/PEPSKit.jl/src/algorithms/ctmrg/simultaneous.jl:37 [inlined]
  [6] (::Zygote.Pullback{Tuple{typeof(PEPSKit.ctmrg_iteration), InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, SimultaneousCTMRG}, Tuple{Zygote.ZBack{PEPSKit.var"#dtmap_pullback#19"{@Kwargs{}, Array{ChainRulesCore.ProjectTo{ChainRulesCore.Tangent{Tuple{Int64, Int64, Int64}}, @NamedTuple{elements::Tuple{ChainRulesCore.ProjectTo{Float64, @NamedTuple{}}, ChainRulesCore.ProjectTo{Float64, @NamedTuple{}}, ChainRulesCore.ProjectTo{Float64, @NamedTuple{}}}}}, 3}, typeof(identity), Array{Tuple{TensorMap{ComplexF64, ComplexSpace, 3, 3, Vector{ComplexF64}}, Zygote.var"#ad_pullback#63"{Tuple{PEPSKit.var"#269#270"{InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Tuple{Int64, Int64, Int64}}, Zygote.Pullback{Tuple{PEPSKit.var"#269#270"{InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Tuple{Int64, Int64, Int64}}, Tuple{Zygote.Pullback{Tuple{Type{TensorMap}, PEPSKit.EnlargedCorner{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, Tuple{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}}, Int64}, Any}, Zygote.Pullback{Tuple{Type{PEPSKit.EnlargedCorner}, InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, Tuple{Int64, Int64, Int64}}, Any}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:env, Zygote.Context{false}, PEPSKit.var"#269#270"{InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}}, Zygote.var"#2050#back#227"{Zygote.var"#back#225"{3, 1, Zygote.Context{false}, Int64}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:state, Zygote.Context{false}, PEPSKit.var"#269#270"{InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}}}}}}}, 3}}}, Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 1, Zygote.Context{false}, @NamedTuple{truncation_error::Float64, condition_number::Float64, U::Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, S::Array{TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}}, 3}, V::Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}}}, Zygote.var"#back#259"{Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 1, Zygote.Context{false}, Tuple{Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}}}}, Zygote.ZBack{Returns{Tuple{ChainRulesCore.NoTangent, ChainRulesCore.NoTangent, ChainRulesCore.NoTangent}}}, Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 2, Zygote.Context{false}, Int64}}, Zygote.var"#2231#back#327"{Zygote.Jnew{PEPSKit.var"#269#270"{InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Nothing, false}}, Zygote.ZBack{Returns{Tuple{ChainRulesCore.NoTangent, ChainRulesCore.NoTangent, ChainRulesCore.NoTangent}}}, Zygote.var"#back#260"{Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 2, Zygote.Context{false}, @NamedTuple{truncation_error::Float64, condition_number::Float64, U::Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, S::Array{TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}}, 3}, V::Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:projector_alg, Zygote.Context{false}, SimultaneousCTMRG, HalfInfiniteProjector{SVDAdjoint{PEPSKit.FixedSVD{Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, Array{TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}}, 3}, Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}, Arnoldi{ModifiedGramSchmidt2, Float64}, Nothing}, TensorKit.NoTruncation}}}, Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 1, Zygote.Context{false}, Tuple{Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}}}, Zygote.Pullback{Tuple{typeof(PEPSKit.simultaneous_projectors), Array{TensorMap{ComplexF64, ComplexSpace, 3, 3, Vector{ComplexF64}}, 3}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, HalfInfiniteProjector{SVDAdjoint{PEPSKit.FixedSVD{Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, Array{TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}}, 3}, Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}, Arnoldi{ModifiedGramSchmidt2, Float64}, Nothing}, TensorKit.NoTruncation}}, Any}, Zygote.var"#2034#back#218"{typeof(identity)}, Zygote.Pullback{Tuple{typeof(PEPSKit.renormalize_simultaneously), Array{TensorMap{ComplexF64, ComplexSpace, 3, 3, Vector{ComplexF64}}, 3}, Tuple{Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}, InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Tuple{Zygote.ZBack{Returns{Tuple{ChainRulesCore.NoTangent, ChainRulesCore.NoTangent, ChainRulesCore.NoTangent}}}, Zygote.var"#2231#back#327"{Zygote.Jnew{PEPSKit.var"#277#278"{Array{TensorMap{ComplexF64, ComplexSpace, 3, 3, Vector{ComplexF64}}, 3}, InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}, Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}}, Nothing, false}}, Zygote.ZBack{Returns{Tuple{ChainRulesCore.NoTangent, ChainRulesCore.NoTangent, ChainRulesCore.NoTangent}}}, Zygote.var"#back#259"{Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 1, Zygote.Context{false}, Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}}}}, Zygote.ZBack{PEPSKit.var"#dtmap_pullback#19"{@Kwargs{}, Array{ChainRulesCore.ProjectTo{ChainRulesCore.Tangent{Tuple{Int64, Int64, Int64}}, @NamedTuple{elements::Tuple{ChainRulesCore.ProjectTo{Float64, @NamedTuple{}}, ChainRulesCore.ProjectTo{Float64, @NamedTuple{}}, ChainRulesCore.ProjectTo{Float64, @NamedTuple{}}}}}, 3}, typeof(identity), Array{Tuple{Tuple{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, Zygote.var"#ad_pullback#63"{Tuple{PEPSKit.var"#277#278"{Array{TensorMap{ComplexF64, ComplexSpace, 3, 3, Vector{ComplexF64}}, 3}, InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}, Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}}, Tuple{Int64, Int64, Int64}}, Zygote.Pullback{Tuple{PEPSKit.var"#277#278"{Array{TensorMap{ComplexF64, ComplexSpace, 3, 3, Vector{ComplexF64}}, 3}, InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}, Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}}, Tuple{Int64, Int64, Int64}}, Any}}}, 3}}}, Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 2, Zygote.Context{false}, Int64}}, Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 1, Zygote.Context{false}, Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}}}, Zygote.var"#2866#back#688"{Zygote.var"#map_back#682"{typeof(first), 1, Tuple{Array{Tuple{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, 3}}, Tuple{Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}, Base.OneTo{Int64}}}, Array{Tuple{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, Zygote.var"#2146#back#287"{Zygote.var"#282#286"{Tuple{Nothing}}}}, 3}}}, Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 1, Zygote.Context{false}, Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}}, Zygote.var"#back#260"{Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 2, Zygote.Context{false}, Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}}}, Zygote.var"#2866#back#688"{Zygote.var"#map_back#682"{typeof(last), 1, Tuple{Array{Tuple{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, 3}}, Tuple{Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}, Base.OneTo{Int64}}}, Array{Tuple{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, Zygote.Pullback{Tuple{typeof(last), Tuple{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Tuple{Zygote.var"#2066#back#236"{Zygote.var"#back#234"{2, Zygote.Context{false}, Int64, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Zygote.Pullback{Tuple{typeof(lastindex), Tuple{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Tuple{Zygote.ZBack{Returns{Tuple{ChainRulesCore.NoTangent, ChainRulesCore.NoTangent}}}}}}}}, 3}}}, Zygote.ZBack{PEPSKit.var"#ctmrgenv_pullback#179"}}}}})(Δ::Tuple{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, Nothing})
    @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/interface2.jl:0
  [7] f
    @ ~/repos/PEPSKit.jl/src/algorithms/optimization/fixed_point_differentiation.jl:140 [inlined]
  [8] (::Zygote.Pullback{Tuple{PEPSKit.var"#f#365", InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Any})(Δ::CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}})
    @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/interface2.jl:0
  [9] (::Zygote.var"#ad_pullback#63"{Tuple{PEPSKit.var"#f#365", InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Zygote.Pullback{Tuple{PEPSKit.var"#f#365", InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Any}})(Δ::CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}})
    @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/chainrules.jl:273
 [10] (::PEPSKit.var"#∂f∂x#367"{Zygote.var"#ad_pullback#63"{Tuple{PEPSKit.var"#f#365", InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Zygote.Pullback{Tuple{PEPSKit.var"#f#365", InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Any}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}})(x::CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}})
    @ PEPSKit ~/repos/PEPSKit.jl/src/algorithms/optimization/fixed_point_differentiation.jl:145
 [11] apply(f::PEPSKit.var"#∂f∂x#367"{Zygote.var"#ad_pullback#63"{Tuple{PEPSKit.var"#f#365", InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Zygote.Pullback{Tuple{PEPSKit.var"#f#365", InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Any}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, x::CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}})
    @ KrylovKit ~/.julia/packages/KrylovKit/SNKgC/src/apply.jl:2
 [12] apply(A::Function, x::InnerProductVec{typeof(KrylovKit._realinner), CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}})
    @ KrylovKit ~/.julia/packages/KrylovKit/SNKgC/src/KrylovKit.jl:251
 [13] apply(operator::Function, x::InnerProductVec{typeof(KrylovKit._realinner), CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, α₀::Float64, α₁::Float64)
    @ KrylovKit ~/.julia/packages/KrylovKit/SNKgC/src/apply.jl:5
 [14] linsolve(operator::Function, b::InnerProductVec{typeof(KrylovKit._realinner), CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, x₀::InnerProductVec{typeof(KrylovKit._realinner), CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, alg::BiCGStab{Float64}, a₀::Int64, a₁::Int64; alg_rrule::BiCGStab{Float64})
    @ KrylovKit ~/.julia/packages/KrylovKit/SNKgC/src/linsolve/bicgstab.jl:125
 [15] linsolve
    @ ~/.julia/packages/KrylovKit/SNKgC/src/linsolve/bicgstab.jl:1 [inlined]
 [16] reallinsolve(f::Function, b::CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, x₀::CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, alg::BiCGStab{Float64}, a₀::Int64, a₁::Int64)
    @ KrylovKit ~/.julia/packages/KrylovKit/SNKgC/src/linsolve/linsolve.jl:249
 [17] fpgrad(∂F∂x::CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, ∂f∂x::Function, ∂f∂A::PEPSKit.var"#∂f∂A#366"{Zygote.var"#ad_pullback#63"{Tuple{PEPSKit.var"#f#365", InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Zygote.Pullback{Tuple{PEPSKit.var"#f#365", InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Any}}, InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}}, y₀::CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, alg::LinSolver{:fixed})
    @ PEPSKit ~/repos/PEPSKit.jl/src/algorithms/optimization/fixed_point_differentiation.jl:219
 [18] leading_boundary_fixed_pullback
    @ ~/repos/PEPSKit.jl/src/algorithms/optimization/fixed_point_differentiation.jl:146 [inlined]
 [19] #37
    @ ~/repos/PEPSKit.jl/src/utility/hook_pullback.jl:34 [inlined]
 [20] ZBack
    @ ~/.julia/packages/Zygote/3To5I/src/compiler/chainrules.jl:221 [inlined]
 [21] (::Zygote.var"#kw_zpullback#58"{PEPSKit.var"#37#38"{PEPSKit.var"#leading_boundary_fixed_pullback#364"{LinSolver{:fixed}, Zygote.ZygoteRuleConfig{Zygote.Context{false}}, InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}}})(dy::Tuple{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, Nothing})
    @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/chainrules.jl:247
 [22] #373
    @ ~/repos/PEPSKit.jl/src/algorithms/optimization/peps_optimization.jl:114 [inlined]
 [23] (::Zygote.Pullback{Tuple{PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}}, Tuple{Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:alg, Zygote.Context{false}, PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, PEPSOptimize{LinSolver{:fixed}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:alg, Zygote.Context{false}, PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, PEPSOptimize{LinSolver{:fixed}}}}, Zygote.Pullback{Tuple{Type{NamedTuple{(:alg_rrule,)}}, Tuple{LinSolver{:fixed}}}, Tuple{Zygote.var"#2241#back#329"{Zygote.Jnew{@NamedTuple{alg_rrule::LinSolver{:fixed}}, Nothing, true}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:boundary_alg, Zygote.Context{false}, PEPSOptimize{LinSolver{:fixed}}, SimultaneousCTMRG}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:condition_numbers, Zygote.Context{false}, PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, Vector{Float64}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:operator, Zygote.Context{false}, PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}}}, Zygote.var"#2231#back#327"{Zygote.Jnew{PEPSKit.var"#374#378"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, Nothing, false}}, Zygote.Pullback{Tuple{typeof(cost_function), InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}}, Tuple{Zygote.ZBack{Zygote.var"#real_pullback#364"}, Zygote.var"#2231#back#327"{Zygote.Jnew{PEPSKit.var"#333#334"{ComplexF64}, Nothing, false}}, Zygote.Pullback{Tuple{typeof(expectation_value), InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Tuple{Zygote.var"#2190#back#307"{Zygote.var"#305#306"{Tuple{Tuple{Nothing, Nothing}}, Zygote.ZBack{ChainRules.var"#vect_pullback#440"{2}}}}, Zygote.var"#2231#back#327"{Zygote.Jnew{PEPSKit.var"#331#332"{InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Nothing, false}}, Zygote.ZBack{PEPSKit.var"#dtmap_pullback#19"{@Kwargs{}, Vector{typeof(identity)}, typeof(identity), Vector{Tuple{ComplexF64, Zygote.var"#ad_pullback#63"{Tuple{PEPSKit.var"#331#332"{InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}}}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:terms, Zygote.Context{false}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}}}, Zygote.ZBack{Returns{Tuple{ChainRulesCore.NoTangent, ChainRulesCore.NoTangent, ChainRulesCore.NoTangent}}}, Zygote.ZBack{ChainRules.var"#sum_pullback#720"{Colon, Vector{ComplexF64}, ChainRulesCore.ProjectTo{AbstractArray, @NamedTuple{element::ChainRulesCore.ProjectTo{ComplexF64, @NamedTuple{}}, axes::Tuple{Base.OneTo{Int64}}}}}}}}, Zygote.ZBack{Returns{Tuple{ChainRulesCore.NoTangent, ChainRulesCore.NoTangent}}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:truncation_errors, Zygote.Context{false}, PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, Vector{Float64}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:env, Zygote.Context{false}, PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:env, Zygote.Context{false}, PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:alg, Zygote.Context{false}, PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, PEPSOptimize{LinSolver{:fixed}}}}, Zygote.var"#kw_zpullback#58"{PEPSKit.var"#37#38"{PEPSKit.var"#leading_boundary_fixed_pullback#364"{LinSolver{:fixed}, Zygote.ZygoteRuleConfig{Zygote.Context{false}}, InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}}}, Zygote.ZBack{Returns{Tuple{ChainRulesCore.NoTangent, ChainRulesCore.NoTangent}}}, Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 2, Zygote.Context{false}, Int64}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:condition_numbers, Zygote.Context{false}, PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, Vector{Float64}}}, Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 1, Zygote.Context{false}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}}, Zygote.var"#2034#back#218"{typeof(identity)}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:alg, Zygote.Context{false}, PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, PEPSOptimize{LinSolver{:fixed}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:truncation_errors, Zygote.Context{false}, PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, Vector{Float64}}}, Zygote.var"#back#259"{Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 1, Zygote.Context{false}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}}}, Zygote.var"#back#260"{Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 2, Zygote.Context{false}, @NamedTuple{truncation_error::Float64, condition_number::Float64, U::Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, S::Array{TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}}, 3}, V::Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}}}}, Zygote.var"#2217#back#325"{Zygote.var"#323#324"{Symbol, Base.RefValue{Any}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:gradient_alg, Zygote.Context{false}, PEPSOptimize{LinSolver{:fixed}}, LinSolver{:fixed}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:info, Zygote.Context{false}, PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, Core.Box}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:info, Zygote.Context{false}, PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, Core.Box}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:env, Zygote.Context{false}, PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}}, Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 1, Zygote.Context{false}, @NamedTuple{truncation_error::Float64, condition_number::Float64, U::Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, S::Array{TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}}, 3}, V::Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}}}}})(Δ::Float64)
    @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/interface2.jl:0
 [24] (::Zygote.var"#88#89"{Zygote.Pullback{Tuple{PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}}, Tuple{Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:alg, Zygote.Context{false}, PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, PEPSOptimize{LinSolver{:fixed}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:alg, Zygote.Context{false}, PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, PEPSOptimize{LinSolver{:fixed}}}}, Zygote.Pullback{Tuple{Type{NamedTuple{(:alg_rrule,)}}, Tuple{LinSolver{:fixed}}}, Tuple{Zygote.var"#2241#back#329"{Zygote.Jnew{@NamedTuple{alg_rrule::LinSolver{:fixed}}, Nothing, true}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:boundary_alg, Zygote.Context{false}, PEPSOptimize{LinSolver{:fixed}}, SimultaneousCTMRG}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:condition_numbers, Zygote.Context{false}, PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, Vector{Float64}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:operator, Zygote.Context{false}, PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}}}, Zygote.var"#2231#back#327"{Zygote.Jnew{PEPSKit.var"#374#378"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, Nothing, false}}, Zygote.Pullback{Tuple{typeof(cost_function), InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}}, Tuple{Zygote.ZBack{Zygote.var"#real_pullback#364"}, Zygote.var"#2231#back#327"{Zygote.Jnew{PEPSKit.var"#333#334"{ComplexF64}, Nothing, false}}, Zygote.Pullback{Tuple{typeof(expectation_value), InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Tuple{Zygote.var"#2190#back#307"{Zygote.var"#305#306"{Tuple{Tuple{Nothing, Nothing}}, Zygote.ZBack{ChainRules.var"#vect_pullback#440"{2}}}}, Zygote.var"#2231#back#327"{Zygote.Jnew{PEPSKit.var"#331#332"{InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Nothing, false}}, Zygote.ZBack{PEPSKit.var"#dtmap_pullback#19"{@Kwargs{}, Vector{typeof(identity)}, typeof(identity), Vector{Tuple{ComplexF64, Zygote.var"#ad_pullback#63"{Tuple{PEPSKit.var"#331#332"{InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}}}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:terms, Zygote.Context{false}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}}}, Zygote.ZBack{Returns{Tuple{ChainRulesCore.NoTangent, ChainRulesCore.NoTangent, ChainRulesCore.NoTangent}}}, Zygote.ZBack{ChainRules.var"#sum_pullback#720"{Colon, Vector{ComplexF64}, ChainRulesCore.ProjectTo{AbstractArray, @NamedTuple{element::ChainRulesCore.ProjectTo{ComplexF64, @NamedTuple{}}, axes::Tuple{Base.OneTo{Int64}}}}}}}}, Zygote.ZBack{Returns{Tuple{ChainRulesCore.NoTangent, ChainRulesCore.NoTangent}}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:truncation_errors, Zygote.Context{false}, PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, Vector{Float64}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:env, Zygote.Context{false}, PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:env, Zygote.Context{false}, PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:alg, Zygote.Context{false}, PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, PEPSOptimize{LinSolver{:fixed}}}}, Zygote.var"#kw_zpullback#58"{PEPSKit.var"#37#38"{PEPSKit.var"#leading_boundary_fixed_pullback#364"{LinSolver{:fixed}, Zygote.ZygoteRuleConfig{Zygote.Context{false}}, InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}}}, Zygote.ZBack{Returns{Tuple{ChainRulesCore.NoTangent, ChainRulesCore.NoTangent}}}, Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 2, Zygote.Context{false}, Int64}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:condition_numbers, Zygote.Context{false}, PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, Vector{Float64}}}, Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 1, Zygote.Context{false}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}}, Zygote.var"#2034#back#218"{typeof(identity)}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:alg, Zygote.Context{false}, PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, PEPSOptimize{LinSolver{:fixed}}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:truncation_errors, Zygote.Context{false}, PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, Vector{Float64}}}, Zygote.var"#back#259"{Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 1, Zygote.Context{false}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}}}, Zygote.var"#back#260"{Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 2, Zygote.Context{false}, @NamedTuple{truncation_error::Float64, condition_number::Float64, U::Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, S::Array{TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}}, 3}, V::Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}}}}, Zygote.var"#2217#back#325"{Zygote.var"#323#324"{Symbol, Base.RefValue{Any}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:gradient_alg, Zygote.Context{false}, PEPSOptimize{LinSolver{:fixed}}, LinSolver{:fixed}}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:info, Zygote.Context{false}, PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, Core.Box}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:info, Zygote.Context{false}, PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, Core.Box}}, Zygote.var"#2201#back#317"{Zygote.var"#back#316"{:env, Zygote.Context{false}, PEPSKit.var"#373#377"{CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Float64}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}}, Zygote.var"#2050#back#227"{Zygote.var"#back#225"{2, 1, Zygote.Context{false}, @NamedTuple{truncation_error::Float64, condition_number::Float64, U::Array{TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}, 3}, S::Array{TensorMap{Float64, ComplexSpace, 1, 1, Vector{Float64}}, 3}, V::Array{TensorMap{ComplexF64, ComplexSpace, 1, 3, Vector{ComplexF64}}, 3}}}}}}})(Δ::Float64)
    @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/interface.jl:97
 [25] withgradient(f::Function, args::InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}})
    @ Zygote ~/.julia/packages/Zygote/3To5I/src/compiler/interface.jl:219
 [26] (::PEPSKit.var"#372#376"{LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Matrix{Float64}}, Vector{Float64}, Vector{Float64}})(::Tuple{InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}})
    @ PEPSKit ~/repos/PEPSKit.jl/src/algorithms/optimization/peps_optimization.jl:113
 [27] optimize(fg::PEPSKit.var"#372#376"{LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, PEPSOptimize{LinSolver{:fixed}}, Vector{Float64}, Vector{Matrix{Float64}}, Vector{Float64}, Vector{Float64}}, x::Tuple{InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}}, alg::LBFGS{Float64, HagerZhangLineSearch{Rational{Int64}}}; precondition::typeof(OptimKit._precondition), finalize!::typeof(OptimKit._finalize!), shouldstop::OptimKit.DefaultShouldStop, hasconverged::OptimKit.DefaultHasConverged{Float64}, retract::Function, inner::typeof(PEPSKit.real_inner), transport!::typeof(OptimKit._transport!), scale!::typeof(OptimKit._scale!), add!::typeof(OptimKit._add!), isometrictransport::Bool)
    @ OptimKit ~/.julia/packages/OptimKit/G6i79/src/lbfgs.jl:66
 [28] fixedpoint(operator::LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, peps₀::InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, env₀::CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, alg::PEPSOptimize{LinSolver{:fixed}}; finalize!::Function)
    @ PEPSKit ~/repos/PEPSKit.jl/src/algorithms/optimization/peps_optimization.jl:109
 [29] fixedpoint(operator::LocalOperator{Tuple{Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}, Pair{Tuple{CartesianIndex{2}, CartesianIndex{2}}, TensorMap{ComplexF64, ComplexSpace, 2, 2, Vector{ComplexF64}}}}, ComplexSpace}, peps₀::InfinitePEPS{TensorMap{ComplexF64, ComplexSpace, 1, 4, Vector{ComplexF64}}}, env₀::CTMRGEnv{TensorMap{ComplexF64, ComplexSpace, 1, 1, Vector{ComplexF64}}, TensorMap{ComplexF64, ComplexSpace, 3, 1, Vector{ComplexF64}}}, alg::PEPSOptimize{LinSolver{:fixed}})
    @ PEPSKit ~/repos/PEPSKit.jl/src/algorithms/optimization/peps_optimization.jl:77
 [30] top-level scope
    @ ~/repos/PEPSKit.jl/test/heisenberg.jl:25
 [31] eval
    @ ./boot.jl:430 [inlined]
 [32] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
    @ Base ./loading.jl:2734
 [33] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::@Kwargs{})
    @ Base ./essentials.jl:1055
 [34] invokelatest(::Any, ::Any, ::Vararg{Any})
    @ Base ./essentials.jl:1052
 [35] inlineeval(m::Module, code::String, code_line::Int64, code_column::Int64, file::String; softscope::Bool)
    @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.127.2/scripts/packages/VSCodeServer/src/eval.jl:271
 [36] (::VSCodeServer.var"#69#74"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams})()
    @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.127.2/scripts/packages/VSCodeServer/src/eval.jl:181
 [37] withpath(f::VSCodeServer.var"#69#74"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams}, path::String)
    @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.127.2/scripts/packages/VSCodeServer/src/repl.jl:276
 [38] (::VSCodeServer.var"#68#73"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams})()
    @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.127.2/scripts/packages/VSCodeServer/src/eval.jl:179
 [39] hideprompt(f::VSCodeServer.var"#68#73"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams})
    @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.127.2/scripts/packages/VSCodeServer/src/repl.jl:38
 [40] #67
    @ ~/.vscode/extensions/julialang.language-julia-1.127.2/scripts/packages/VSCodeServer/src/eval.jl:150 [inlined]
 [41] with_logstate(f::VSCodeServer.var"#67#72"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams}, logstate::Base.CoreLogging.LogState)
    @ Base.CoreLogging ./logging/logging.jl:522
 [42] with_logger
    @ ./logging/logging.jl:632 [inlined]
 [43] (::VSCodeServer.var"#66#71"{VSCodeServer.ReplRunCodeRequestParams})()
    @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.127.2/scripts/packages/VSCodeServer/src/eval.jl:263
 [44] #invokelatest#2
    @ ./essentials.jl:1055 [inlined]
 [45] invokelatest(::Any)
    @ Base ./essentials.jl:1052
 [46] (::VSCodeServer.var"#64#65")()
    @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.127.2/scripts/packages/VSCodeServer/src/eval.jl:34
in expression starting at /home/paul/repos/PEPSKit.jl/test/heisenberg.jl:25

@pbrehmer
Copy link
Collaborator Author

pbrehmer commented Feb 7, 2025

I gotta run for today so I will have to finish this up on Monday. Thanks again for the help!

@lkdvos
Copy link
Member

lkdvos commented Feb 7, 2025

Nevermind, here's the full error :-) Thanks for the assistance!

This seems to originate here, which leads me to believe that somehow something that was supposed to be an array of tensors got exchanged for a single tensor, since that is what that pullback should be getting. That's where I would start investigating, but I definitely didn't do a very thorough analysis here. (no rush, Monday is obviously fine)

@pbrehmer
Copy link
Collaborator Author

I investigated a bit and found the Zygote internals I encountered relatively incomprehensible. The copy definitely gets an array of tensors (otherwise the forward would also error) and I couldn't find out what Zygote does to mingle this up. Also I am still not sure why this error only sometimes occurs - perhaps this has to do with the Zygote.Context struct that handles mutables in Zygote.

I decided to work around this by scrapping the Zygote.Buffers and extracting the mapped results in a helper function. So far I'm not getting any errors... :-)

@pbrehmer pbrehmer requested a review from lkdvos February 10, 2025 13:58
lkdvos
lkdvos previously approved these changes Feb 10, 2025
Copy link
Member

@lkdvos lkdvos left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me.

I definitely like not using the buffers better anyways, so that's a good solution to me.

Could you make sure to write a squash commit description that includes the API changes? I noticed for example costfun to cost_function, and I think it would be good if we started paying attention a bit to document changes

@pbrehmer pbrehmer requested a review from lkdvos February 10, 2025 15:49
@pbrehmer pbrehmer merged commit 4991a6c into master Feb 11, 2025
27 checks passed
@pbrehmer pbrehmer deleted the pb-clean-opt-interface branch February 11, 2025 09:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants