In [30]:
using ITensors



# Create indices

i = Index(2, "i")

j = Index(2, "j")

k = Index(2, "k")

l = Index(2, "l")

m = Index(2, "m")



# Create random ITensor

tensor = randomITensor(i,j,k,l,m)

Out[30]:
ITensor ord=5 (dim=2|id=26|"i") (dim=2|id=475|"j") (dim=2|id=291|"k") (dim=2|id=803|"l") (dim=2|id=510|"m")

NDTensors.Dense{Float64, Vector{Float64}}
In [31]:
# Compress tensor to MPS/TT

mps = MPS(tensor, (i, j, k, l, m); truncerr=10^-6, maxdim=10)

Out[31]:
MPS

[1] ((dim=2|id=26|"i"), (dim=2|id=365|"Link,n=1"))

[2] ((dim=2|id=365|"Link,n=1"), (dim=2|id=475|"j"), (dim=4|id=773|"Link,n=2"))

[3] ((dim=4|id=773|"Link,n=2"), (dim=2|id=291|"k"), (dim=4|id=16|"Link,n=3"))

[4] ((dim=4|id=16|"Link,n=3"), (dim=2|id=803|"l"), (dim=2|id=623|"Link,n=4"))

[5] ((dim=2|id=623|"Link,n=4"), (dim=2|id=510|"m"))

In [33]:
function get_index(mps::MPS, index::Vector)

    """

    Retrieve a single element of a tensor represented by an MPS/TT by performing the matrix product



    Args:

        mps: The MPS/TT

        index: The index of the element to retrieve

    """

    V = ITensor(1.)

    for j=1:length(mps)

        V *= (mps[j] * state(siteind(mps, j), index[j]))

    end

    v = scalar(V)

end



# Retrieve an element

get_index(mps, [1, 1, 2, 1, 1])

Out[33]:
-1.012932614052549
In [ ]: