ITensor / ITensorNetworks.jl

A package with general tools for working with higher-dimensional tensor networks based on ITensor.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Define `tree_orthogonalize(tn::ITensorNetwork, vertex[, distance=nv(tn)])`

mtfishman opened this issue · comments

Define tree_orthogonalize(tn::ITensorNetwork, vertex[, distance=nv(tn)]) for performing a tree orthogonalization of a tensor network, as defined in Section II C and Fig. 3 of https://arxiv.org/abs/2206.07044 (referred to as the tree gauge in that reference). This would create a spanning tree of the tensor network with a source node/vertex vertex and orthogonalize the resulting tree using QR/SVD towards that source vertex.

distance would define a neighborhood around the source vertex, which could be implemented using Graphs.neighborhood(tn, vertex, distance).

Note that this is already used within the apply/tebd function when ortho=true, but it doesn't currently support an optional distance, so implicitly orthogonalizes all tensors in the network which isn't necessary in general. See the implementation here:
https://github.com/mtfishman/ITensorNetworks.jl/blob/4c108fe34cdf6135ca4ecb2a8d7fa747d1ca9c1e/src/abstractitensornetwork.jl#L368

Also, some options should be given for creating the spanning tree which may take into account the bond dimensions as weights, or passing a custom spanning tree function.

See Issue here: @mtfishman/. I think if we can import the shortest path algorithms for graphs.jl to NamedGraphs.jl then we can easily create a function which creates the subgraph of a graph centered on some path distance r from a source_vertex. If this function can be wrapped onto a ITensorNetwork then it should be easy to add an argument to orthogonalize! which includes the distance as above.