I want to do boundary MPS on a sparse PEPS tensor network using the ITensorMPS library, where each row of the PEPS is treated as an MPS (or MPO?). It seems like all of the MPS functions in the library expect a single tensor as input, and then factorize it and possibly truncate it to some specified extent. In my situation, I already have N single-physical-index tensors (single-index if I combine, for each site tensor, its physical index and its virtual index ‘perpendicular’ to the MPS row direction), so using these functions would require me to contract an entire row up front, which would be computationally expensive and limit the system sizes I could reach.
Question 1: this is likely somewhere in the documentation or source, and I’ve just missed or misunderstood the code that does this, but is there functionality to take an already-factorized MPS and use matrix decompositions on each tensor to truncate the bond dimensions? I see some methods here which seem to allow specifying some preset quantum-relevant arrays for each site, but mine are custom so it doesn’t seem like that method applies.
Furthermore, I want to use SparseArraysBase to represent my tensors under the hood. Every index is 5 dimensional, and my tensors (even intermediates during contraction) are sparse relative to the total number of possible entries. That being said, the intermediates have up to millions of entries, and even using 3-bit integer packing for the keys and exploiting structure in the sparse arrays doesn’t seem like it will make much of a dent in the memory requirements. My understanding from a previous question I asked is that I would need to write my own custom QR decomposition routines for SparseArraysBase to actually take advantage of my sparsity and do boundaryMPS. I have also heard that belief propagation doesn’t work well on square lattices (which is what I have), and so boundaryMPS is my best bet.
Question 2: is the library currently set up so that its MPS routines call down to a generic decomposition (which I fill in) and use that for truncation, or is it hardcoded (in which case I need to write not only the decomposition but also the entire MPS sweep, and the entire boundary MPS routine)? In the latter case, is there any benefit that ITensors provides over e.g. SparseArrayKit and TensorOperations? I already have a symbolic tensor network layer that can be used to interoperate between ITensors and TensorOperations, so this question is mostly about library capabilities and new library code I’d have to implement and less about the user interface.
Thanks for any assistance/advice with this!