Skip to content

Support different representations for SuperOperator #181

@ytdHuang

Description

@ytdHuang

In QuTiP, the superoperators have different representations:

  • general representation
  • Choi representation
  • Stinespring representation
  • Chi representation

Note that Kraus and Stinespring representations are just a list of Operators.

Maybe we can make a new abstract type AbstractSuperRepresentation, and re-define the superoperator:

abstract type AbstractSuperRepresentation end

struct GeneralSuperRepresentation <: AbstractSuperRepresentation end
struct ChoiSuperRepresentation <: AbstractSuperRepresentation end
struct ChiSuperRepresentation <: AbstractSuperRepresentation end

struct SuperOperatorQuantumObject{T<:AbstractSuperRepresentation} <: QuantumObjectType
    superrep::T
end

# default representation
SuperOperatorQuantumObject() = SuperOperatorQuantumObject(GeneralSuperRepresentation())

const SuperOperator = SuperOperatorQuantumObject()
const ChoiSuperOperator = SuperOperatorQuantumObject(ChoiSuperRepresentation())
const ChiSuperOperator = SuperOperatorQuantumObject(ChiSuperRepresentation())

When the users apply the basic operations (:+, :-, :*) between GeneralSuperRepresentation and other representation, it should work. However, if the users apply them on different representations, it should print a warning message just like qutip.

function Base.:(==)(::SuperOperatorQuantumObject{T1}, ::SuperOperatorQuantumObject{T2}) where {T1<:AbstractSuperRepresentation,T2<:AbstractSuperRepresentation}
    (T1 != T2) && @warn "warning message"
    return true
end

Also need to define some new functions same as qutip:

  • superrep(Q) (return superrep of Qobj)
  • to_super(Q)
  • to_choi(Q)
  • to_kraus(Q)
  • to_stinespring(Q)
  • to_chi(Q)
  • iscp(Q)
  • istp(Q)
  • ishp(Q)
  • iscptp(Q)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions