Source code for qibocal.protocols.randomized_benchmarking.standard_rb_2q
from dataclasses import dataclass
from qibocal.auto.operation import QubitPairId, Routine
from qibocal.calibration import CalibrationPlatform
from qibocal.protocols.randomized_benchmarking.standard_rb import (
StandardRBParameters,
_plot,
)
from ...calibration.calibration import TwoQubitCalibration
from .utils import RB2QData, StandardRBResult, fit, twoq_rb_acquisition
__all__ = ["standard_rb_2q", "StandardRB2QParameters"]
FILE_CLIFFORDS = "2qubitCliffs.json"
FILE_INV = "2qubitCliffsInv.npz"
[docs]
@dataclass
class StandardRB2QParameters(StandardRBParameters):
"""Parameters for the standard 2q randomized benchmarking protocol."""
file: str = FILE_CLIFFORDS
"""File with the cliffords to be used."""
file_inv: str = FILE_INV
"""File with the cliffords to be used in an inverted dict."""
def _acquisition(
params: StandardRB2QParameters,
platform: CalibrationPlatform,
targets: list[QubitPairId],
) -> RB2QData:
"""Data acquisition for two qubit Standard Randomized Benchmarking."""
return twoq_rb_acquisition(params, platform, targets)
def _fit(data: RB2QData) -> StandardRBResult:
qubits = data.pairs
results = fit(qubits, data)
return results
def _update(
results: StandardRBResult, platform: CalibrationPlatform, target: QubitPairId
):
"""Write rb fidelity in calibration."""
if target not in platform.calibration.two_qubits:
platform.calibration.two_qubits[target] = TwoQubitCalibration()
platform.calibration.two_qubits[target].rb_fidelity = (
results.fidelity[target],
results.fit_uncertainties[target][1] / 2,
)
standard_rb_2q = Routine(_acquisition, _fit, _plot, _update)