I am aware that full QR and SVD factorizations are not currently supported in ITensors.jl for block-sparse tensors. However, I need this functionality, and would like to tackle the implementation on my own. More specifically, I would like to compute the nullspace of a given tensor (relative to the given choice of left and right indices), so only QR is required.
Are there any pointers, warnings, etc. that can be given to me as I attempt this? Mainly, I am not very familiar with how the blocks are handled internally or how to iterate over them. Is each block a dense tensor? I would like to have some loop like,
‘’‘for block in T
n = nullspace(block)
etc.
.
.
.
end’‘’
where “nullspace(block)” is the function “nullspace” called on dense tensor called “block”. This part would be easy as it simply calls on the LinearAlgebra.jl package to then to the QR of the dense block treated as a matrix.
Hey,
I came along the same problem, and I had to implement this on my own. I have a semi organized jupyter notebook which has the required functions implemented. It provides a full QR decomposition for dense and QN sparse case together with an implementation of the small QR decomposition on QN sparse iTensors.
By full I mean that you also get back a second isometry parametrizing the orthogonal space if your sparse matrix was not quadratic. I think all routines are working, but I am not did an extensive testing:D
If you are interested, I uploaded that notebook to my github.