Source code for qiskit_experiments.library.randomized_benchmarking.rb_utils

# This code is part of Qiskit.
#
# (C) Copyright IBM 2019-2021.
#
# This code is licensed under the Apache License, Version 2.0. You may
# obtain a copy of this license in the LICENSE.txt file in the root directory
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
#
# Any modifications or derivative works of this code must retain this
# copyright notice, and modified files need to carry a notice indicating
# that they have been altered from the originals.

"""
RB Helper functions
"""
import numpy as np


[docs] class RBUtils: """A collection of utility functions for computing additional data from randomized benchmarking experiments"""
[docs] @staticmethod def coherence_limit(nQ=2, T1_list=None, T2_list=None, gatelen=0.1): """ The error per gate (1-average_gate_fidelity) given by the T1,T2 limit. Args: nQ (int): Number of qubits (1 and 2 supported). T1_list (list): List of T1's (Q1,...,Qn). T2_list (list): List of T2's (as measured, not Tphi). If not given assume T2=2*T1 . gatelen (float): Length of the gate. Returns: float: coherence limited error per gate. Raises: ValueError: If there are invalid inputs """ # pylint: disable = invalid-name T1 = np.array(T1_list) if T2_list is None: T2 = 2 * T1 else: T2 = np.array(T2_list) if len(T1) != nQ or len(T2) != nQ: raise ValueError("T1 and/or T2 not the right length") coherence_limit_err = 0 if nQ == 1: coherence_limit_err = 0.5 * ( 1.0 - 2.0 / 3.0 * np.exp(-gatelen / T2[0]) - 1.0 / 3.0 * np.exp(-gatelen / T1[0]) ) elif nQ == 2: T1factor = 0 T2factor = 0 for i in range(2): T1factor += 1.0 / 15.0 * np.exp(-gatelen / T1[i]) T2factor += ( 2.0 / 15.0 * ( np.exp(-gatelen / T2[i]) + np.exp(-gatelen * (1.0 / T2[i] + 1.0 / T1[1 - i])) ) ) T1factor += 1.0 / 15.0 * np.exp(-gatelen * np.sum(1 / T1)) T2factor += 4.0 / 15.0 * np.exp(-gatelen * np.sum(1 / T2)) coherence_limit_err = 0.75 * (1.0 - T1factor - T2factor) else: raise ValueError("Not a valid number of qubits") return coherence_limit_err