Skip to content

Commit 3284632

Browse files
committed
Add test (marked with xfail for now)
1 parent e6544cf commit 3284632

File tree

1 file changed

+98
-0
lines changed

1 file changed

+98
-0
lines changed

test/pyqrack/runtime/noise/native/test_loss.py

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
from typing import Literal
2+
import textwrap
23
from unittest.mock import Mock
34

5+
import pytest
46
from kirin import ir
57
from kirin.dialects import ilist
68

79
from bloqade import qasm2
810
from bloqade.noise import native
911
from bloqade.pyqrack import PyQrackQubit, PyQrackInterpreter, reg
1012
from bloqade.pyqrack.base import MockMemory
13+
from bloqade.qasm2.passes import QASM2Py, NoisePass, QASM2Fold
14+
from bloqade.qasm2.parse.lowering import QASM2
1115

1216
simulation = qasm2.extended.add(native)
1317

@@ -43,3 +47,97 @@ def test_atom_loss(c: qasm2.CReg):
4347
assert result[0].state is reg.QubitState.Lost
4448
assert result[1].state is reg.QubitState.Active
4549
assert input[0] is reg.Measurement.One
50+
51+
52+
@pytest.mark.xfail
53+
def test_noise_probs():
54+
test_qasm = textwrap.dedent(
55+
"""
56+
OPENQASM 2.0;
57+
include "qelib1.inc";
58+
59+
// Qubits: [q_0, q_1, q_2, q_3, q_4, q_5]
60+
qreg q[6];
61+
62+
63+
u3(pi*0.9999896015,pi*1.8867094803,pi*0.1132905197) q[2];
64+
u3(pi*1.499959526,pi*1.2634437582,pi*0.7365562418) q[3];
65+
u3(pi*1.4998447568,pi*1.8205928898,pi*0.1794071102) q[4];
66+
u3(pi*1.4998052589,pi*1.5780611154,pi*0.4219388846) q[5];
67+
u3(pi*0.4920440401,pi*1.287644074,pi*0.712355926) q[0];
68+
u3(pi*1.0012473155,pi*1.3019213156,pi*0.6980786844) q[1];
69+
cz q[1],q[2];
70+
cz q[1],q[2];
71+
cz q[2],q[3];
72+
cz q[4],q[5];
73+
cz q[2],q[3];
74+
cz q[4],q[5];
75+
cz q[2],q[3];
76+
cz q[4],q[5];
77+
cz q[2],q[3];
78+
cz q[4],q[5];
79+
cz q[2],q[3];
80+
cz q[4],q[5];
81+
u3(pi*1.0,pi*1.5687764466,pi*0.4312235534) q[2];
82+
u3(pi*0.5,0,pi*1.7365086077) q[3];
83+
u3(pi*0.5,pi*1.0,pi*0.6112880576) q[4];
84+
u3(pi*0.1388474164,pi*1.7687898606,pi*1.2425564668) q[5];
85+
"""
86+
)
87+
88+
entry = QASM2(qasm2.main.add(qasm2.inline_)).loads(test_qasm, "entry", returns="q")
89+
QASM2Py(entry.dialects)(entry)
90+
entry = entry.similar(qasm2.extended.add(native))
91+
QASM2Fold(entry.dialects).fixpoint(entry)
92+
93+
# Noise parameters
94+
gate_noise_value = 1e-3
95+
move_noise_value = 0.5
96+
97+
gate_noise_params = native.GateNoiseParams(
98+
local_px=gate_noise_value,
99+
local_py=gate_noise_value,
100+
local_pz=gate_noise_value,
101+
local_loss_prob=gate_noise_value,
102+
#
103+
global_px=gate_noise_value,
104+
global_py=gate_noise_value,
105+
global_pz=gate_noise_value,
106+
global_loss_prob=gate_noise_value,
107+
#
108+
cz_paired_gate_px=gate_noise_value,
109+
cz_paired_gate_py=gate_noise_value,
110+
cz_paired_gate_pz=gate_noise_value,
111+
cz_gate_loss_prob=gate_noise_value,
112+
#
113+
cz_unpaired_gate_px=gate_noise_value,
114+
cz_unpaired_gate_py=gate_noise_value,
115+
cz_unpaired_gate_pz=gate_noise_value,
116+
cz_unpaired_loss_prob=gate_noise_value,
117+
)
118+
119+
move_noise_params = native.model.MoveNoiseParams(
120+
idle_px_rate=move_noise_value,
121+
idle_py_rate=move_noise_value,
122+
idle_pz_rate=move_noise_value,
123+
idle_loss_rate=move_noise_value,
124+
move_px_rate=move_noise_value,
125+
move_py_rate=move_noise_value,
126+
move_pz_rate=move_noise_value,
127+
move_loss_rate=move_noise_value,
128+
#
129+
pick_px=move_noise_value,
130+
pick_py=move_noise_value,
131+
pick_pz=move_noise_value,
132+
pick_loss_prob=move_noise_value,
133+
#
134+
move_speed=5e-1, # default 5e-1
135+
storage_spacing=4.0, # default 4.0
136+
)
137+
138+
with pytest.raises(ir.ValidationError):
139+
NoisePass(
140+
entry.dialects,
141+
gate_noise_params=gate_noise_params,
142+
noise_model=native.TwoRowZoneModel(params=move_noise_params),
143+
)(entry)

0 commit comments

Comments
 (0)