Skip to content

Commit 6562a05

Browse files
authored
Update version of the Floquet calibration (#4557)
* Support features of the Floquet calibration version 2 * Remove debug print and update floquet calibration version * Add tests for version parameter * Fix json serialization tests * Improve tests
1 parent 55507d5 commit 6562a05

8 files changed

+84
-4
lines changed

cirq-google/cirq_google/calibration/phased_fsim.py

+5
Original file line numberDiff line numberDiff line change
@@ -570,6 +570,8 @@ class FloquetPhasedFSimCalibrationOptions(PhasedFSimCalibrationOptions):
570570
characterize_gamma: bool
571571
characterize_phi: bool
572572
readout_error_tolerance: Optional[float] = None
573+
version: int = 2
574+
measure_qubits: Optional[Tuple[cirq.Qid, ...]] = None
573575

574576
def zeta_chi_gamma_correction_override(self) -> PhasedFSimCharacterization:
575577
"""Gives a PhasedFSimCharacterization that can be used to override characterization after
@@ -664,6 +666,8 @@ def from_moment(cls, moment: cirq.Moment, options: FloquetPhasedFSimCalibrationO
664666

665667
def to_calibration_layer(self) -> CalibrationLayer:
666668
circuit = cirq.Circuit(self.gate.on(*pair) for pair in self.pairs)
669+
if self.options.measure_qubits is not None:
670+
circuit += cirq.Moment(cirq.measure(*self.options.measure_qubits))
667671
args: Dict[str, Any] = {
668672
'est_theta': self.options.characterize_theta,
669673
'est_zeta': self.options.characterize_zeta,
@@ -672,6 +676,7 @@ def to_calibration_layer(self) -> CalibrationLayer:
672676
'est_phi': self.options.characterize_phi,
673677
# Experimental option that should always be set to True.
674678
'readout_corrections': True,
679+
'version': self.options.version,
675680
}
676681
if self.options.readout_error_tolerance is not None:
677682
# Maximum error of the diagonal elements of the two-qubit readout confusion matrix.

cirq-google/cirq_google/calibration/phased_fsim_test.py

+67
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,38 @@ def test_floquet_to_calibration_layer():
118118
'est_gamma': False,
119119
'est_phi': True,
120120
'readout_corrections': True,
121+
'version': 2,
122+
},
123+
)
124+
125+
126+
def test_floquet_to_calibration_layer_with_version_override():
127+
q_00, q_01, q_02, q_03 = [cirq.GridQubit(0, index) for index in range(4)]
128+
gate = cirq.FSimGate(theta=np.pi / 4, phi=0.0)
129+
request = FloquetPhasedFSimCalibrationRequest(
130+
gate=gate,
131+
pairs=((q_00, q_01), (q_02, q_03)),
132+
options=FloquetPhasedFSimCalibrationOptions(
133+
characterize_theta=True,
134+
characterize_zeta=True,
135+
characterize_chi=False,
136+
characterize_gamma=False,
137+
characterize_phi=True,
138+
version=3,
139+
),
140+
)
141+
142+
assert request.to_calibration_layer() == cirq_google.CalibrationLayer(
143+
calibration_type='floquet_phased_fsim_characterization',
144+
program=cirq.Circuit([gate.on(q_00, q_01), gate.on(q_02, q_03)]),
145+
args={
146+
'est_theta': True,
147+
'est_zeta': True,
148+
'est_chi': False,
149+
'est_gamma': False,
150+
'est_phi': True,
151+
'readout_corrections': True,
152+
'version': 3,
121153
},
122154
)
123155

@@ -150,6 +182,41 @@ def test_floquet_to_calibration_layer_readout_thresholds():
150182
'readout_corrections': True,
151183
'readout_error_tolerance': 0.4,
152184
'correlated_readout_error_tolerance': 7 / 6 * 0.4 - 1 / 6,
185+
'version': 2,
186+
},
187+
)
188+
189+
190+
def test_floquet_to_calibration_layer_with_measure_qubits():
191+
qubits = tuple(cirq.GridQubit(0, index) for index in range(5))
192+
q_00, q_01, q_02, q_03, _ = qubits
193+
gate = cirq.FSimGate(theta=np.pi / 4, phi=0.0)
194+
request = FloquetPhasedFSimCalibrationRequest(
195+
gate=gate,
196+
pairs=((q_00, q_01), (q_02, q_03)),
197+
options=FloquetPhasedFSimCalibrationOptions(
198+
characterize_theta=True,
199+
characterize_zeta=True,
200+
characterize_chi=False,
201+
characterize_gamma=False,
202+
characterize_phi=True,
203+
measure_qubits=qubits,
204+
),
205+
)
206+
207+
assert request.to_calibration_layer() == cirq_google.CalibrationLayer(
208+
calibration_type='floquet_phased_fsim_characterization',
209+
program=cirq.Circuit(
210+
[gate.on(q_00, q_01), gate.on(q_02, q_03), cirq.measure(*qubits)],
211+
),
212+
args={
213+
'est_theta': True,
214+
'est_zeta': True,
215+
'est_chi': False,
216+
'est_gamma': False,
217+
'est_phi': True,
218+
'readout_corrections': True,
219+
'version': 2,
153220
},
154221
)
155222

cirq-google/cirq_google/json_test_data/FloquetPhasedFSimCalibrationOptions.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,7 @@
55
"characterize_chi": false,
66
"characterize_gamma": true,
77
"characterize_phi": false,
8-
"readout_error_tolerance": 0.4
8+
"readout_error_tolerance": 0.4,
9+
"version": 2,
10+
"measure_qubits": null
911
}
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
cirq_google.FloquetPhasedFSimCalibrationOptions(characterize_theta=True, characterize_zeta=True, characterize_chi=False, characterize_gamma=True, characterize_phi=False, readout_error_tolerance=0.4)
1+
cirq_google.FloquetPhasedFSimCalibrationOptions(characterize_theta=True, characterize_zeta=True, characterize_chi=False, characterize_gamma=True, characterize_phi=False, readout_error_tolerance=0.4, version=2)

cirq-google/cirq_google/json_test_data/FloquetPhasedFSimCalibrationRequest.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@
3838
"characterize_chi": false,
3939
"characterize_gamma": false,
4040
"characterize_phi": true,
41-
"readout_error_tolerance": 0.4
41+
"readout_error_tolerance": 0.4,
42+
"version": 2,
43+
"measure_qubits": null
4244
}
4345
}

cirq-google/cirq_google/json_test_data/FloquetPhasedFSimCalibrationRequest.repr

+1
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@ cirq_google.FloquetPhasedFSimCalibrationRequest(
88
characterize_gamma=False,
99
characterize_phi=True,
1010
readout_error_tolerance=0.4,
11+
version=2
1112
),
1213
)

cirq-google/cirq_google/json_test_data/PhasedFSimCalibrationResult.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,9 @@
5454
"characterize_chi": false,
5555
"characterize_gamma": false,
5656
"characterize_phi": true,
57-
"readout_error_tolerance": 0.4
57+
"readout_error_tolerance": 0.4,
58+
"version": 2,
59+
"measure_qubits": null
5860
},
5961
"project_id": "project_id",
6062
"program_id": "program_id",

cirq-google/cirq_google/json_test_data/PhasedFSimCalibrationResult.repr

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ cirq_google.PhasedFSimCalibrationResult(
1515
characterize_gamma=False,
1616
characterize_phi=True,
1717
readout_error_tolerance=0.4,
18+
version=2
1819
),
1920
project_id='project_id',
2021
program_id='program_id',

0 commit comments

Comments
 (0)