Skip to content

Commit fd04f49

Browse files
Fix XEB error rate computation (quantumlib#6673)
* Fix XEB error rate computation * Update tests
1 parent 9de876b commit fd04f49

File tree

2 files changed

+20
-19
lines changed

2 files changed

+20
-19
lines changed

cirq/experiments/two_qubit_xeb.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,9 @@ def _record(self, q0, q1) -> pd.Series:
143143

144144
def xeb_fidelity(self, q0: 'cirq.GridQubit', q1: 'cirq.GridQubit') -> float:
145145
"""Return the XEB fidelity of a qubit pair."""
146-
return self._record(q0, q1).layer_fid
146+
return noise_utils.decay_constant_to_xeb_fidelity(
147+
self._record(q0, q1).layer_fid, num_qubits=2
148+
)
147149

148150
def xeb_error(self, q0: 'cirq.GridQubit', q1: 'cirq.GridQubit') -> float:
149151
"""Return the XEB error of a qubit pair."""
@@ -177,8 +179,7 @@ def pauli_error(self) -> Dict[Tuple['cirq.GridQubit', 'cirq.GridQubit'], float]:
177179
"""Return the Pauli error of all qubit pairs."""
178180
return {
179181
pair: noise_utils.decay_constant_to_pauli_error(
180-
noise_utils.xeb_fidelity_to_decay_constant(self.xeb_fidelity(*pair), num_qubits=2),
181-
num_qubits=2,
182+
self._record(*pair).layer_fid, num_qubits=2
182183
)
183184
for pair in self.all_qubit_pairs
184185
}

cirq/experiments/two_qubit_xeb_test.py

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -148,10 +148,10 @@ def test_plotting(sampler, qubits, ax):
148148
@pytest.mark.parametrize(
149149
'q0,q1,pauli',
150150
[
151-
(cirq.GridQubit(4, 4), cirq.GridQubit(5, 4), 1 / 8),
152-
(cirq.GridQubit(5, 3), cirq.GridQubit(6, 3), 1 / 4),
153-
(cirq.GridQubit(4, 3), cirq.GridQubit(5, 3), 0.8 + 3 / 40),
154-
(cirq.GridQubit(6, 3), cirq.GridQubit(6, 4), 5 / 8),
151+
(cirq.GridQubit(4, 4), cirq.GridQubit(5, 4), 0.09374999999999997),
152+
(cirq.GridQubit(5, 3), cirq.GridQubit(6, 3), 0.18749999999999994),
153+
(cirq.GridQubit(4, 3), cirq.GridQubit(5, 3), 0.65625),
154+
(cirq.GridQubit(6, 3), cirq.GridQubit(6, 4), 0.46875),
155155
],
156156
)
157157
def test_pauli_error(q0: cirq.GridQubit, q1: cirq.GridQubit, pauli: float):
@@ -174,10 +174,10 @@ def pauli_error(self) -> Dict[cirq.Qid, float]:
174174
@pytest.mark.parametrize(
175175
'q0,q1,pauli',
176176
[
177-
(cirq.GridQubit(4, 4), cirq.GridQubit(5, 4), 1 / 8 - 0.03),
178-
(cirq.GridQubit(5, 3), cirq.GridQubit(6, 3), 1 / 4 - 0.09),
179-
(cirq.GridQubit(4, 3), cirq.GridQubit(5, 3), 0.8 + 3 / 40 - 0.08),
180-
(cirq.GridQubit(6, 3), cirq.GridQubit(6, 4), 5 / 8 - 0.13),
177+
(cirq.GridQubit(4, 4), cirq.GridQubit(5, 4), 0.09374999999999997 - 0.03),
178+
(cirq.GridQubit(5, 3), cirq.GridQubit(6, 3), 0.18749999999999994 - 0.09),
179+
(cirq.GridQubit(4, 3), cirq.GridQubit(5, 3), 0.65625 - 0.08),
180+
(cirq.GridQubit(6, 3), cirq.GridQubit(6, 4), 0.46875 - 0.13),
181181
],
182182
)
183183
def test_inferred_pauli_error(q0: cirq.GridQubit, q1: cirq.GridQubit, pauli: float):
@@ -191,10 +191,10 @@ def test_inferred_pauli_error(q0: cirq.GridQubit, q1: cirq.GridQubit, pauli: flo
191191
@pytest.mark.parametrize(
192192
'q0,q1,xeb',
193193
[
194-
(cirq.GridQubit(4, 4), cirq.GridQubit(5, 4), 0.076),
195-
(cirq.GridQubit(5, 3), cirq.GridQubit(6, 3), 0.128),
196-
(cirq.GridQubit(4, 3), cirq.GridQubit(5, 3), 0.636),
197-
(cirq.GridQubit(6, 3), cirq.GridQubit(6, 4), 0.396),
194+
(cirq.GridQubit(4, 4), cirq.GridQubit(5, 4), 0.050999999999999934),
195+
(cirq.GridQubit(5, 3), cirq.GridQubit(6, 3), 0.07799999999999996),
196+
(cirq.GridQubit(4, 3), cirq.GridQubit(5, 3), 0.46099999999999997),
197+
(cirq.GridQubit(6, 3), cirq.GridQubit(6, 4), 0.2709999999999999),
198198
],
199199
)
200200
def test_inferred_xeb_error(q0: cirq.GridQubit, q1: cirq.GridQubit, xeb: float):
@@ -224,10 +224,10 @@ def test_inferred_single_qubit_pauli():
224224
@pytest.mark.parametrize(
225225
'q0,q1,pauli',
226226
[
227-
(cirq.GridQubit(4, 4), cirq.GridQubit(5, 4), 1 / 8),
228-
(cirq.GridQubit(5, 3), cirq.GridQubit(6, 3), 1 / 4),
229-
(cirq.GridQubit(4, 3), cirq.GridQubit(5, 3), 0.8 + 3 / 40),
230-
(cirq.GridQubit(6, 3), cirq.GridQubit(6, 4), 5 / 8),
227+
(cirq.GridQubit(4, 4), cirq.GridQubit(5, 4), 0.09374999999999997),
228+
(cirq.GridQubit(5, 3), cirq.GridQubit(6, 3), 0.18749999999999994),
229+
(cirq.GridQubit(4, 3), cirq.GridQubit(5, 3), 0.65625),
230+
(cirq.GridQubit(6, 3), cirq.GridQubit(6, 4), 0.46875),
231231
],
232232
)
233233
def test_inferred_two_qubit_pauli(q0: cirq.GridQubit, q1: cirq.GridQubit, pauli: float):

0 commit comments

Comments
 (0)