# partial transpose of MPO

**URL:** <https://itensor.discourse.group/t/partial-transpose-of-mpo/95>\
**Category:** ITensor Julia Questions\
**Tags:** julia, mpo\
**Created:** [April 29, 2022, 5:58pm UTC](https://itensor.discourse.group/t/partial-transpose-of-mpo/95 "2022-04-29T17:58:15Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![jisutich](https://avatars.discourse-cdn.com/v4/letter/j/e79b87/32.png) [@jisutich](https://itensor.discourse.group/u/jisutich)\
**Post date:** [April 29, 2022, 5:58pm UTC](https://itensor.discourse.group/t/partial-transpose-of-mpo/95/1 "2022-04-29T17:58:16Z")

</div>

Hi,

Is it possible to realize partial transpose of a density operator? Suppose I have a `MPO` type object rho as my density operator. And the whole system Hilbert space is \mathcal{H}\_A \otimes \mathcal{H}\_B with A and B as the left/right half of the system. Then my density operator looks like \rho = \sum\_{ijkl} c\_{kl}^{ij} \ket{i}\bra{j}\otimes \ket{k}\bra{l}. I want to get the partial transpose \rho^{T\_B} = \sum\_{ijkl} c\_{kl}^{ij} \ket{i}\bra{j}\otimes \ket{l}\bra{k}.

Thanks

---

<div class="post-metadata">

**Author:** ![mtfishman](https://yyz2.discourse-cdn.com/free1/user_avatar/itensor.discourse.group/mtfishman/32/11_2.png) [@mtfishman](https://itensor.discourse.group/u/mtfishman)\
**Post date:** [April 29, 2022, 6:16pm UTC](https://itensor.discourse.group/t/partial-transpose-of-mpo/95/2 "2022-04-29T18:16:43Z")

</div>

This should work:

```julia
function partial_transpose(A::MPO, sites)
  A = copy(A)
  for n in sites
    A[n] = swapinds(A[n], siteinds(A, n)...)
  end
  return A
end

```

which you can use like this:

```julia
julia> using ITensors

julia> s = siteinds("Qubit", 4);

julia> rho = MPO(s, "Id")
MPO
[1] ((dim=2|id=931|"Qubit,Site,n=1")', (dim=2|id=931|"Qubit,Site,n=1"), (dim=1|id=283|"Link,l=1"))
[2] ((dim=2|id=111|"Qubit,Site,n=2")', (dim=2|id=111|"Qubit,Site,n=2"), (dim=1|id=735|"Link,l=2"), (dim=1|id=283|"Link,l=1"))
[3] ((dim=2|id=666|"Qubit,Site,n=3")', (dim=2|id=666|"Qubit,Site,n=3"), (dim=1|id=692|"Link,l=3"), (dim=1|id=735|"Link,l=2"))
[4] ((dim=2|id=756|"Qubit,Site,n=4")', (dim=2|id=756|"Qubit,Site,n=4"), (dim=1|id=692|"Link,l=3"))

julia> partial_transpose(rho, 3:4)
MPO
[1] ((dim=2|id=931|"Qubit,Site,n=1")', (dim=2|id=931|"Qubit,Site,n=1"), (dim=1|id=283|"Link,l=1"))
[2] ((dim=2|id=111|"Qubit,Site,n=2")', (dim=2|id=111|"Qubit,Site,n=2"), (dim=1|id=735|"Link,l=2"), (dim=1|id=283|"Link,l=1"))
[3] ((dim=2|id=666|"Qubit,Site,n=3"), (dim=2|id=666|"Qubit,Site,n=3")', (dim=1|id=692|"Link,l=3"), (dim=1|id=735|"Link,l=2"))
[4] ((dim=2|id=756|"Qubit,Site,n=4"), (dim=2|id=756|"Qubit,Site,n=4")', (dim=1|id=692|"Link,l=3"))

```

---

<div class="post-metadata">

**Author:** ![jisutich](https://avatars.discourse-cdn.com/v4/letter/j/e79b87/32.png) [@jisutich](https://itensor.discourse.group/u/jisutich)\
**Post date:** [April 29, 2022, 6:28pm UTC](https://itensor.discourse.group/t/partial-transpose-of-mpo/95/3 "2022-04-29T18:28:37Z")

</div>

Got it. Thanks Matt.
