bloqade.qasm2.dialects.noise.model.TwoRowZoneModel
classTwoRowZoneModel¶source
bloqade.qasm2.dialects.noise.model.TwoRowZoneModel
Bases: MoveNoiseModelABC
This model assumes that the qubits are arranged in a single storage row with a row corresponding to a gate zone below it.
Signature
class TwoRowZoneModel(*, local_px: float = 0.0004102, local_py: float = 0.0004102, local_pz: float = 0.0004112, local_loss_prob: float = 0.0, local_unaddressed_px: float = 2e-07, local_unaddressed_py: float = 2e-07, local_unaddressed_pz: float = 1.2e-06, local_unaddressed_loss_prob: float = 0.0, global_px: float = 6.5e-05, global_py: float = 6.5e-05, global_pz: float = 6.5e-05, global_loss_prob: float = 0.0, cz_paired_gate_px: float = 0.0006549, cz_paired_gate_py: float = 0.0006549, cz_paired_gate_pz: float = 0.003184, cz_gate_loss_prob: float = 0.0, cz_unpaired_gate_px: float = 0.0005149, cz_unpaired_gate_py: float = 0.0005149, cz_unpaired_gate_pz: float = 0.002185, cz_unpaired_loss_prob: float = 0.0, mover_px: float = 0.000806, mover_py: float = 0.000806, mover_pz: float = 0.002458, move_loss_prob: float = 0.0, sitter_px: float = 0.0003066, sitter_py: float = 0.0003066, sitter_pz: float = 0.0004639, sit_loss_prob: float = 0.0)The CZ gate noise is calculated using the following heuristic: The idle error is calculated by the total duration required to do the move and entangle the qubits. Not every pair can be entangled at the same time, so we first deconflict the qargs by finding subsets in which both the ctrl and the qarg qubits are in ascending order. This breaks the pairs into groups that can be moved and entangled separately. We then take each group and assign each pair to a gate zone slot. The slots are allocated by starting from the middle of the atoms and moving outwards making sure to keep the ctrl qubits in ascending order. The time to move a group is calculated by finding the maximum travel distance of the qarg and ctrl qubits and dviding by the move speed. The total move time is the sum of all the group move times. The error rate for all the qubits is then calculated by using the poisson_pauli_prob function. An additional error for the pick operation is calculated by joining the binary probabilities of the pick operation and the move operation.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
local_px | float | 0.0004102 | |
local_py | float | 0.0004102 | |
local_pz | float | 0.0004112 | |
local_loss_prob | float | 0.0 | |
local_unaddressed_px | float | 2e-07 | |
local_unaddressed_py | float | 2e-07 | |
local_unaddressed_pz | float | 1.2e-06 | |
local_unaddressed_loss_prob | float | 0.0 | |
global_px | float | 6.5e-05 | |
global_py | float | 6.5e-05 | |
global_pz | float | 6.5e-05 | |
global_loss_prob | float | 0.0 | |
cz_paired_gate_px | float | 0.0006549 | |
cz_paired_gate_py | float | 0.0006549 | |
cz_paired_gate_pz | float | 0.003184 | |
cz_gate_loss_prob | float | 0.0 | |
cz_unpaired_gate_px | float | 0.0005149 | |
cz_unpaired_gate_py | float | 0.0005149 | |
cz_unpaired_gate_pz | float | 0.002185 | |
cz_unpaired_loss_prob | float | 0.0 | |
mover_px | float | 0.000806 | |
mover_py | float | 0.000806 | |
mover_pz | float | 0.002458 | |
move_loss_prob | float | 0.0 | |
sitter_px | float | 0.0003066 | |
sitter_py | float | 0.0003066 | |
sitter_pz | float | 0.0004639 | |
sit_loss_prob | float | 0.0 |
propertymove_errors¶source
bloqade.qasm2.dialects.noise.model.TwoRowZoneModel.move_errors
methoddeconflict¶source
bloqade.qasm2.dialects.noise.model.TwoRowZoneModel.deconflict
Signature
def deconflict(ctrls: list[int], qargs: list[int]) -> list[tuple[tuple[int, ...], tuple[int, ...]]]Return a list of groups of ctrl and qarg qubits that can be moved and entangled separately.
Parameters
| Name | Type | Description |
|---|---|---|
ctrls | list[int] | |
qargs | list[int] |
Returns
list[tuple[tuple[int, ...], tuple[int, ...]]]
methodparallel_cz_errors¶source
bloqade.qasm2.dialects.noise.model.TwoRowZoneModel.parallel_cz_errors
Signature
def parallel_cz_errors(ctrls: list[int], qargs: list[int], rest: list[int]) -> dict[tuple[float, float, float, float], list[int]]Apply parallel gates by moving ctrl qubits to qarg qubits.
Parameters
| Name | Type | Description |
|---|---|---|
ctrls | list[int] | |
qargs | list[int] | |
rest | list[int] |
Returns
dict[tuple[float, float, float, float], list[int]]