Skip to content

Commit c534933

Browse files
committed
fixing/simplifying tests
1 parent c711146 commit c534933

File tree

2 files changed

+50
-99
lines changed

2 files changed

+50
-99
lines changed

test/analysis/fidelity/test_fidelity.py

Lines changed: 40 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -8,64 +8,41 @@
88
from bloqade.qasm2.passes.noise import NoisePass
99

1010

11-
class NoiseTestModel(native.MoveNoiseModelABC):
12-
def parallel_cz_errors(self, ctrls, qargs, rest):
13-
return {(0.01, 0.01, 0.01, 0.01): ctrls + qargs + rest}
14-
11+
def test_atom_loss_analysis():
1512

16-
def test_basic_noise():
13+
p_loss = 0.01
1714

1815
@qasm2.extended
1916
def main():
2017
q = qasm2.qreg(2)
21-
qasm2.x(q[0])
18+
native.atom_loss_channel([q[0]], prob=p_loss)
2219
return q
2320

24-
main.print()
25-
2621
fid_analysis = FidelityAnalysis(main.dialects)
2722
fid_analysis.run_analysis(main, no_raise=False)
2823

2924
assert fid_analysis.gate_fidelity == fid_analysis._current_gate_fidelity == 1
30-
31-
px = 0.01
32-
py = 0.01
33-
pz = 0.01
34-
p_loss = 0.01
35-
36-
noise_params = native.GateNoiseParams(
37-
global_loss_prob=p_loss,
38-
global_px=px,
39-
global_py=py,
40-
global_pz=pz,
41-
local_px=0.002,
42-
)
43-
44-
model = NoiseTestModel()
45-
46-
NoisePass(main.dialects, noise_model=model, gate_noise_params=noise_params)(main)
47-
48-
main.print()
49-
50-
fid_analysis = FidelityAnalysis(main.dialects)
51-
fid_analysis.run_analysis(main, no_raise=False)
52-
53-
p_noise = noise_params.local_px + noise_params.local_py + noise_params.local_pz
54-
assert (
55-
fid_analysis.gate_fidelity
56-
== fid_analysis._current_gate_fidelity
57-
== (1 - p_noise)
58-
)
59-
60-
assert 0.9 < fid_analysis.atom_survival_probability[0] < 1
61-
assert fid_analysis.atom_survival_probability[0] == 1 - noise_params.local_loss_prob
25+
assert fid_analysis.atom_survival_probability[0] == 1 - p_loss
6226
assert fid_analysis.atom_survival_probability[1] == 1
6327

6428

65-
def test_c_noise():
29+
def test_cz_noise():
30+
p_ch = 0.01 / 3.0
31+
6632
@qasm2.extended
6733
def main():
6834
q = qasm2.qreg(2)
35+
native.cz_pauli_channel(
36+
[q[0]],
37+
[q[1]],
38+
px_ctrl=p_ch,
39+
py_ctrl=p_ch,
40+
pz_ctrl=p_ch,
41+
px_qarg=p_ch,
42+
py_qarg=p_ch,
43+
pz_qarg=p_ch,
44+
paired=True,
45+
)
6946
qasm2.cz(q[0], q[1])
7047
return q
7148

@@ -74,43 +51,35 @@ def main():
7451
fid_analysis = FidelityAnalysis(main.dialects)
7552
fid_analysis.run_analysis(main, no_raise=False)
7653

77-
assert fid_analysis.gate_fidelity == fid_analysis._current_gate_fidelity == 1
54+
expected_fidelity = (1 - 3 * p_ch) ** 2
7855

79-
px = 0.01
80-
py = 0.01
81-
pz = 0.01
82-
p_loss = 0.01
56+
assert fid_analysis.gate_fidelity == fid_analysis._current_gate_fidelity
57+
assert math.isclose(fid_analysis.gate_fidelity, expected_fidelity)
8358

84-
noise_params = native.GateNoiseParams(
85-
global_loss_prob=p_loss,
86-
global_px=px,
87-
global_py=py,
88-
global_pz=pz,
89-
local_px=0.002,
90-
)
9159

92-
model = NoiseTestModel()
60+
def test_single_qubit_noise():
61+
p_ch = 0.01 / 3.0
9362

94-
NoisePass(main.dialects, noise_model=model, gate_noise_params=noise_params)(main)
63+
@qasm2.extended
64+
def main():
65+
q = qasm2.qreg(2)
66+
native.pauli_channel([q[0]], px=p_ch, py=p_ch, pz=p_ch)
67+
return q
9568

9669
main.print()
9770

9871
fid_analysis = FidelityAnalysis(main.dialects)
9972
fid_analysis.run_analysis(main, no_raise=False)
10073

101-
# two cz channels (**2 for each one since we look at both control & target)
102-
fid_cz = (1 - 3 * noise_params.cz_paired_gate_px) ** 4
103-
104-
# one pauli channel
105-
fid_cz *= 1 - noise_params.global_px * 3
74+
expected_fidelity = 1 - 3 * p_ch
10675

10776
assert fid_analysis.gate_fidelity == fid_analysis._current_gate_fidelity
108-
assert math.isclose(fid_cz, fid_analysis.gate_fidelity, abs_tol=1e-14)
77+
assert math.isclose(fid_analysis.gate_fidelity, expected_fidelity)
10978

110-
assert 0.9 < fid_analysis.atom_survival_probability[0] < 1
111-
assert fid_analysis.atom_survival_probability[0] == (
112-
1 - noise_params.cz_gate_loss_prob
113-
) * (1 - p_loss)
79+
80+
class NoiseTestModel(native.MoveNoiseModelABC):
81+
def parallel_cz_errors(self, ctrls, qargs, rest):
82+
return {(0.01, 0.01, 0.01, 0.01): ctrls + qargs + rest}
11483

11584

11685
@pytest.mark.xfail
@@ -145,23 +114,19 @@ def main_if():
145114
pz = 0.01
146115
p_loss = 0.01
147116

148-
noise_params = native.GateNoiseParams(
117+
model = NoiseTestModel(
149118
global_loss_prob=p_loss,
150119
global_px=px,
151120
global_py=py,
152121
global_pz=pz,
153122
local_px=0.002,
154123
)
155-
156-
model = NoiseTestModel()
157-
NoisePass(main.dialects, noise_model=model, gate_noise_params=noise_params)(main)
124+
NoisePass(main.dialects, noise_model=model)(main)
158125
fid_analysis = FidelityAnalysis(main.dialects)
159126
fid_analysis.run_analysis(main, no_raise=False)
160127

161128
model = NoiseTestModel()
162-
NoisePass(main_if.dialects, noise_model=model, gate_noise_params=noise_params)(
163-
main_if
164-
)
129+
NoisePass(main_if.dialects, noise_model=model)(main_if)
165130
fid_if_analysis = FidelityAnalysis(main_if.dialects)
166131
fid_if_analysis.run_analysis(main_if, no_raise=False)
167132

@@ -211,24 +176,20 @@ def main_for():
211176
pz = 0.01
212177
p_loss = 0.01
213178

214-
noise_params = native.GateNoiseParams(
179+
model = NoiseTestModel(
215180
global_loss_prob=p_loss,
216181
global_px=px,
217182
global_py=py,
218183
global_pz=pz,
219184
local_px=0.002,
220185
local_loss_prob=0.03,
221186
)
222-
223-
model = NoiseTestModel()
224-
NoisePass(main.dialects, noise_model=model, gate_noise_params=noise_params)(main)
187+
NoisePass(main.dialects, noise_model=model)(main)
225188
fid_analysis = FidelityAnalysis(main.dialects)
226189
fid_analysis.run_analysis(main, no_raise=False)
227190

228191
model = NoiseTestModel()
229-
NoisePass(main_for.dialects, noise_model=model, gate_noise_params=noise_params)(
230-
main_for
231-
)
192+
NoisePass(main_for.dialects, noise_model=model)(main_for)
232193

233194
main_for.print()
234195

test/qasm2/passes/test_heuristic_noise.py

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,14 @@ def test_single_qubit_noise():
2222
pz = 0.01
2323
p_loss = 0.01
2424

25-
noise_params = native.GateNoiseParams(
25+
model = NoiseTestModel(
2626
local_px=px, local_py=py, local_pz=pz, local_loss_prob=p_loss
2727
)
28-
model = NoiseTestModel()
2928

3029
test_qubit = ir.TestValue(type=qasm2.QubitType)
3130
address_analysis = {test_qubit: address.AddressQubit(0)}
3231
qubit_ssa_value = {0: test_qubit}
33-
rule = NoiseRewriteRule(address_analysis, qubit_ssa_value, noise_params, model)
32+
rule = NoiseRewriteRule(address_analysis, qubit_ssa_value, model)
3433
rule.qubit_ssa_value[0] = test_qubit
3534
block = ir.Block(
3635
[
@@ -58,10 +57,9 @@ def test_parallel_qubit_noise():
5857
pz = 0.01
5958
p_loss = 0.01
6059

61-
noise_params = native.GateNoiseParams(
60+
model = NoiseTestModel(
6261
local_px=px, local_py=py, local_pz=pz, local_loss_prob=p_loss
6362
)
64-
model = NoiseTestModel()
6563

6664
test_qubit = ir.TestValue(type=qasm2.QubitType)
6765
qubit_list = ilist.New(values=[test_qubit])
@@ -73,7 +71,7 @@ def test_parallel_qubit_noise():
7371
}
7472
qubit_ssa_value = {0: test_qubit}
7573

76-
rule = NoiseRewriteRule(address_analysis, qubit_ssa_value, noise_params, model)
74+
rule = NoiseRewriteRule(address_analysis, qubit_ssa_value, model)
7775
rule.qubit_ssa_value[0] = test_qubit
7876
block = ir.Block(
7977
[
@@ -112,7 +110,7 @@ def test_cz_gate_noise():
112110
pz = 0.01
113111
p_loss = 0.01
114112

115-
noise_params = native.GateNoiseParams(
113+
model = NoiseTestModel(
116114
cz_paired_gate_px=px,
117115
cz_paired_gate_py=py,
118116
cz_paired_gate_pz=pz,
@@ -123,16 +121,14 @@ def test_cz_gate_noise():
123121
cz_unpaired_loss_prob=p_loss,
124122
)
125123

126-
model = NoiseTestModel()
127-
128124
ctrl_qubit = ir.TestValue(type=qasm2.QubitType)
129125
qarg_qubit = ir.TestValue(type=qasm2.QubitType)
130126
address_analysis = {
131127
ctrl_qubit: address.AddressQubit(0),
132128
qarg_qubit: address.AddressQubit(1),
133129
}
134130
qubit_ssa_value = {0: ctrl_qubit, 1: qarg_qubit}
135-
rule = NoiseRewriteRule(address_analysis, qubit_ssa_value, noise_params, model)
131+
rule = NoiseRewriteRule(address_analysis, qubit_ssa_value, model)
136132
rule.qubit_ssa_value[0] = ctrl_qubit
137133
rule.qubit_ssa_value[1] = qarg_qubit
138134
block = ir.Block(
@@ -187,7 +183,7 @@ def test_parallel_cz_gate_noise():
187183
pz = 0.01
188184
p_loss = 0.01
189185

190-
noise_params = native.GateNoiseParams(
186+
model = NoiseTestModel(
191187
cz_paired_gate_px=px,
192188
cz_paired_gate_py=py,
193189
cz_paired_gate_pz=pz,
@@ -198,8 +194,6 @@ def test_parallel_cz_gate_noise():
198194
cz_unpaired_loss_prob=p_loss,
199195
)
200196

201-
model = NoiseTestModel()
202-
203197
ctrl_qubit = ir.TestValue(type=qasm2.QubitType)
204198
qarg_qubit = ir.TestValue(type=qasm2.QubitType)
205199
ctrl_list = ilist.New(values=[ctrl_qubit])
@@ -211,7 +205,7 @@ def test_parallel_cz_gate_noise():
211205
qarg_list.result: address.AddressTuple([address.AddressQubit(1)]),
212206
}
213207
qubit_ssa_value = {0: ctrl_qubit, 1: qarg_qubit}
214-
rule = NoiseRewriteRule(address_analysis, qubit_ssa_value, noise_params, model)
208+
rule = NoiseRewriteRule(address_analysis, qubit_ssa_value, model)
215209
rule.qubit_ssa_value[0] = ctrl_qubit
216210
rule.qubit_ssa_value[1] = qarg_qubit
217211
block = ir.Block(
@@ -275,17 +269,13 @@ def test_method():
275269
pz = 0.01
276270
p_loss = 0.01
277271

278-
noise_params = native.GateNoiseParams(
272+
model = NoiseTestModel(
279273
global_loss_prob=p_loss, global_px=px, global_py=py, global_pz=pz
280274
)
281275

282-
model = NoiseTestModel()
283-
284276
test_method.print()
285277

286-
NoisePass(test_method.dialects, noise_model=model, gate_noise_params=noise_params)(
287-
test_method
288-
)
278+
NoisePass(test_method.dialects, noise_model=model)(test_method)
289279

290280
expected_block = ir.Block(
291281
[

0 commit comments

Comments
 (0)