Add an LPDO type, which represents an MPO of the form X*X^\dagger (and only stores the MPO X).
Update: This was added in #67. I'll leave this issue open to keep track of where it should be incorporated into the code. Here are functions where the LPDO should be used:
[x] observer
[x] lognormalize!(::LPDO) (but rename normalize!(::LPDO) with options about how the normalization will happen)
[x] fullmatrix(::LPDO)
[x] statetomography/processtomography
[x] gradients
[x] optimizers
[x] initializetomography
[x] gradlogZ
[x] gradnll
[x] nll
[x] Replace getdensityoperator with MPO(::LPDO)
[x] tr(::LPDO)
[x] logtr(::LPDO)
[x] fidelity(::LPDO, ::MPS) and related functions.
Add an LPDO type, which represents an MPO of the form
X*X^\dagger
(and only stores the MPOX
).Update: This was added in #67. I'll leave this issue open to keep track of where it should be incorporated into the code. Here are functions where the LPDO should be used:
lognormalize!(::LPDO)
(but renamenormalize!(::LPDO)
with options about how the normalization will happen)fullmatrix(::LPDO)
statetomography
/processtomography
gradients
initializetomography
gradlogZ
gradnll
nll
getdensityoperator
withMPO(::LPDO)
tr(::LPDO)
logtr(::LPDO)
fidelity(::LPDO, ::MPS)
and related functions.frobenius_distance(::LPDO, ::LPDO)