Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support different representations for SuperOperator #181

Open
ytdHuang opened this issue Jun 28, 2024 · 0 comments
Open

Support different representations for SuperOperator #181

ytdHuang opened this issue Jun 28, 2024 · 0 comments
Labels
enhancement New feature or request good first issue Good for newcomers

Comments

@ytdHuang
Copy link
Member

ytdHuang commented Jun 28, 2024

In QuTiP, the superoperators have different representations:

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

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 KrausSuperRepresentation <: AbstractSuperRepresentation end
struct StinespringSuperRepresentation <: AbstractSuperRepresentation end
struct ChiSuperRepresentation <: AbstractSuperRepresentation end

struct SuperOperatorQuantumObject <: QuantumObjectType
    superrep::AbstractSuperRepresentation
end

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

const SuperOperator = SuperOperatorQuantumObject()
const ChoiSuperOperator = SuperOperatorQuantumObject(ChoiSuperRepresentation())
const KrausSuperOperator = SuperOperatorQuantumObject(KrausSuperRepresentation())
const StinespringSuperOperator = SuperOperatorQuantumObject(StinespringSuperRepresentation())
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.:(==)(S1::SuperOperatorQuantumObject, S2::SuperOperatorQuantumObject)
    if (S1 != S2)
        if !(S1 == SuperOperator || S2 == SuperOperator)
            # print warning
        end
    end
    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)
@ytdHuang ytdHuang added enhancement New feature or request good first issue Good for newcomers labels Jun 28, 2024
@ytdHuang ytdHuang changed the title Implement different superoperator representations Support different representations for SuperOperator Jun 28, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request good first issue Good for newcomers
Projects
None yet
Development

No branches or pull requests

1 participant