abstract type MatrixProductOperator{B<:Bounds} <: Operator{B} end
Define the MPOSampler (check MPSSampler as an example) and implement the methods:
MatrixProductOperator{Open}(arrays; ...)
MatrixProductOperator{Closed}(arrays; ...)
Base.eltype(::MPOSampler{B}) where {B<:Bounds}
Base.rand(::Type{MatrixProductOperator{B}}, ...)
function Base.rand(rng::Random.AbstractRNG, sampler::MPOSampler{Open,T}) where {T}
function Base.rand(rng::Random.AbstractRNG, sampler::MPSSampler{Closed,T}) where {T}
We will also need to implement the contractpath methods between MatrixProductOperators and a MatrixProductState and a MatrixProductOperator, but I'm still figuring it out with just MatrixProductStates.
It needs to implement the following ansatz,
Define the
MPOSampler
(checkMPSSampler
as an example) and implement the methods:We will also need to implement the
contractpath
methods betweenMatrixProductOperator
s and aMatrixProductState
and aMatrixProductOperator
, but I'm still figuring it out with justMatrixProductState
s.