mimiqcircuits.operations.losschannel

Loss-channel operations.

Classes

CheckLoss()

CheckLoss operation.

LossErr(p)

LossErr operation.

MeasureCheckLoss()

MeasureCheckLoss operation.

QubitLoss()

QubitLoss operation.

QubitReload()

QubitReload operation.

class mimiqcircuits.operations.losschannel.QubitLoss[source]

Bases: Operation

QubitLoss operation.

This operation deterministically marks a qubit as lost. It is useful for representing qubit-loss events explicitly in a circuit.

Warning

This operation is non-reversible.

Examples

>>> from mimiqcircuits import *
>>> c = Circuit()
>>> c.push(QubitLoss(), 1)
2-qubit circuit with 1 instruction:
└── QubitLoss @ q[1]
inverse()[source]
power(p)[source]
control(num_qubits)[source]
iswrapper()[source]
class mimiqcircuits.operations.losschannel.QubitReload[source]

Bases: Operation

QubitReload operation.

This operation reloads a qubit that was previously marked as lost. It can be used to model qubit reintroduction after a loss event.

Warning

This operation is non-reversible.

Examples

>>> from mimiqcircuits import *
>>> c = Circuit()
>>> c.push(QubitReload(), 1)
2-qubit circuit with 1 instruction:
└── QubitReload @ q[1]
inverse()[source]
power(p)[source]
control(num_qubits)[source]
iswrapper()[source]
class mimiqcircuits.operations.losschannel.LossErr(p)[source]

Bases: Operation

LossErr operation.

This operation models a probabilistic qubit-loss event with probability p. During simulation or sampling, it can be resolved into a concrete qubit-loss event according to the specified probability.

Warning

This operation is non-reversible.

Parameters:

p – The probability of a qubit-loss event. It must be real and between 0 and 1.

Examples

>>> from mimiqcircuits import *
>>> c = Circuit()
>>> c.push(LossErr(0.5), 0)
1-qubit circuit with 1 instruction:
└── LossErr(0.5) @ q[0]

Seeded sampling makes stochastic loss reproducible:

>>> import random
>>> c = Circuit()
>>> c.push(LossErr(0.5), 1)
2-qubit circuit with 1 instruction:
└── LossErr(0.5) @ q[1]
>>> c.push(GateH(), 1)
2-qubit circuit with 2 instructions:
├── LossErr(0.5) @ q[1]
└── H @ q[1]
>>> c.sample_losses(random.Random(0))
2-qubit circuit with 1 instruction:
└── H @ q[1]
>>> c.sample_losses(random.Random(7))
2-qubit circuit with 1 instruction:
└── QubitLoss @ q[1]

Symbolic probabilities must be evaluated before sampling:

>>> from symengine import Symbol
>>> p = Symbol("p")
>>> c = Circuit()
>>> c.push(LossErr(p), 0)
1-qubit circuit with 1 instruction:
└── LossErr(p) @ q[0]
>>> c = c.evaluate({p: 0.5})
>>> c.sample_losses(random.Random(7))
1-qubit circuit with 1 instruction:
└── QubitLoss @ q[0]

Loss-model rules can rewrite gates that touch surviving qubits:

>>> c = Circuit()
>>> c.push(QubitLoss(), 1)
2-qubit circuit with 1 instruction:
└── QubitLoss @ q[1]
>>> c.push(GateCX(), 0, 1)
2-qubit circuit with 2 instructions:
├── QubitLoss @ q[1]
└── CX @ q[0], q[1]
>>> lm = LossModel().add_replace(GateCX(), Depolarizing1(0.2))
>>> c.sample_losses(lm)
2-qubit circuit with 2 instructions:
├── QubitLoss @ q[1]
└── Depolarizing(0.2) @ q[0]

See also

QubitLoss, QubitReload, CheckLoss, MeasureCheckLoss, mimiqcircuits.lossmodel.LossModel

__init__(p)[source]
evaluate(d={})[source]
inverse()[source]
power(p)[source]
control(num_qubits)[source]
iswrapper()[source]
class mimiqcircuits.operations.losschannel.CheckLoss[source]

Bases: Operation

CheckLoss operation.

This operation checks whether a qubit is present or lost, and stores the result in a classical bit.

Warning

This operation is non-reversible.

Examples

>>> from mimiqcircuits import *
>>> c = Circuit()
>>> c.push(CheckLoss(), 0, 0)
1-qubit, 1-bit circuit with 1 instruction:
└── CL @ q[0], c[0]
inverse()[source]
power(p)[source]
control(num_qubits)[source]
iswrapper()[source]
class mimiqcircuits.operations.losschannel.MeasureCheckLoss[source]

Bases: Operation

MeasureCheckLoss operation.

This operation measures a qubit and reports both the measurement result and whether the qubit is present or lost.

Warning

This operation is non-reversible.

Examples

>>> from mimiqcircuits import *
>>> c = Circuit()
>>> c.push(MeasureCheckLoss(), 0, 0, 1)
1-qubit, 2-bit circuit with 1 instruction:
└── MCL @ q[0], c[0:1]
inverse()[source]
power(p)[source]
control(num_qubits)[source]
iswrapper()[source]