mimiqcircuits.operations.losschannel¶
Loss-channel operations.
Classes
CheckLoss operation. |
|
|
LossErr operation. |
MeasureCheckLoss operation. |
|
QubitLoss operation. |
|
QubitReload operation. |
- class mimiqcircuits.operations.losschannel.QubitLoss[source]¶
Bases:
OperationQubitLoss 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]
See also
- class mimiqcircuits.operations.losschannel.QubitReload[source]¶
Bases:
OperationQubitReload 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]
See also
- class mimiqcircuits.operations.losschannel.LossErr(p)[source]¶
Bases:
OperationLossErr 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
- class mimiqcircuits.operations.losschannel.CheckLoss[source]¶
Bases:
OperationCheckLoss 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]
See also
- class mimiqcircuits.operations.losschannel.MeasureCheckLoss[source]¶
Bases:
OperationMeasureCheckLoss 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]
See also