mimiqcircuits.operations.noisechannel.standards.projectivenoise

Functions

checknormalizlength(normaliz, length)

Classes

ProjectiveNoise(basis)

Single qubit projection noise onto a Pauli basis.

ProjectiveNoiseX()

Single qubit projection noise onto an X Pauli basis.

ProjectiveNoiseY()

Single qubit projection noise onto a Y Pauli basis.

ProjectiveNoiseZ()

Single qubit projection noise onto a Z Pauli basis.

class mimiqcircuits.operations.noisechannel.standards.projectivenoise.ProjectiveNoise(basis)[source]

Bases: krauschannel

Single qubit projection noise onto a Pauli basis.

This channel is defined by the Kraus operators:

\[E_1 = |\alpha\rangle \langle\alpha|, \quad E_2 = |\beta\rangle \langle\beta|,\]

where the states \(|\alpha\rangle\) and \(|\beta\rangle\) are the +1 and -1 eigenstates of a Pauli operator. Specifically, they correspond to \(\{ |0\rangle, |1\rangle \}\) (Z basis), \(\{ |+\rangle, |-\rangle \}\) (X basis), or \(\{ |y+\rangle, |y-\rangle \}\) (Y basis).

This operation is similar to measuring in the corresponding basis (X, Y, or Z), except that the outcome of the measurement is not stored, i.e., there is a loss of information.

Parameters:

basis (str) – String or character that selects the Pauli basis, “X”, “Y”, or “Z”.

Examples

>>> from mimiqcircuits import *
>>> c = Circuit()
>>> c.push(ProjectiveNoise("Z"), 1)
2-qubit circuit with 1 instruction:
└── ProjectiveNoiseZ @ q[1]

The Kraus matrices are given by:

>>> ProjectiveNoise("X").krausmatrices()
[[0.5, 0.5]
[0.5, 0.5]
, [0.5, -0.5]
[-0.5, 0.5]
]
>>> ProjectiveNoise("Y").krausmatrices()
[[0.5, -0.0 - 0.5*I]
[0.0 + 0.5*I, 0.5]
, [0.5, 0.0 + 0.5*I]
[-0.0 - 0.5*I, 0.5]
]
>>> ProjectiveNoise("Z").krausmatrices()
[[1.0, 0]
[0, 0]
, [0, 0]
[0, 1.0]
]
krausmatrices()[source]

Returns the Kraus matrices associated with the given Kraus channel.

A mixed unitary channel is written as:

\[\mathcal{E}(\rho) = \sum_k p_k U_k \rho U_k^\dagger,\]

where \(U_k\) are the unitary matrices returned by this function.

If the Kraus channel is parametric, the matrix elements are wrapped in a symengine or sympy object.

Returns:

A list of symengine matrices representing the Kraus operators.

Return type:

list

class mimiqcircuits.operations.noisechannel.standards.projectivenoise.ProjectiveNoiseX[source]

Bases: krauschannel

Single qubit projection noise onto an X Pauli basis.

This channel is defined by the Kraus operators:

\[E_1 = |-\rangle \langle-|, \quad E_2 = |+\rangle \langle+|,\]

where \(\ket{+}\) and \(\ket{-}\) are the eigenstates of Pauli X.

opname()[source]
krausoperators()[source]

Returns the Kraus operators associated with the given Kraus channel.

This should be implemented for each specific channel.

Returns:

A list of matrices representing the Kraus operators.

Return type:

list

class mimiqcircuits.operations.noisechannel.standards.projectivenoise.ProjectiveNoiseY[source]

Bases: krauschannel

Single qubit projection noise onto a Y Pauli basis.

This channel is defined by the Kraus operators:

\[E_1 = |Y0\rangle \langle Y0|, \quad E_2 = |Y1\rangle \langle Y1|,\]

where \(\ket{Y0}\) and \(\ket{Y1}\) are the eigenstates of Pauli Y.

opname()[source]
krausoperators()[source]

Returns the Kraus operators associated with the given Kraus channel.

This should be implemented for each specific channel.

Returns:

A list of matrices representing the Kraus operators.

Return type:

list

class mimiqcircuits.operations.noisechannel.standards.projectivenoise.ProjectiveNoiseZ[source]

Bases: krauschannel

Single qubit projection noise onto a Z Pauli basis.

This channel is defined by the Kraus operators:

\[E_1 = |0\rangle \langle Z0|, \quad E_2 = |1\rangle \langle Z1|,\]

where \(\ket{0}\) and \(\ket{1}\) are the eigenstates of Pauli Z.

opname()[source]
krausoperators()[source]

Returns the Kraus operators associated with the given Kraus channel.

This should be implemented for each specific channel.

Returns:

A list of matrices representing the Kraus operators.

Return type:

list