# Randomized Benchmarking¶

Randomized benchmarking involves running long sequences of random Clifford group gates which compose to the identity to observe how performance degrades with increasing circuit depth.

 do_rb(qc, benchmarker, qubit_groups, depths, …) A wrapper around experiment generation, data acquisition, and estimation that runs a RB experiment on the qubit_groups and returns the rb_decay along with the experiments and results.

## Gates and Sequences¶

 oneq_rb_gateset(qubit) Yield the gateset for 1-qubit randomized benchmarking. twoq_rb_gateset(q1, q2) Yield the gateset for 2-qubit randomized benchmarking. get_rb_gateset(qubits) A wrapper around the gateset generation functions. generate_rb_sequence(benchmarker, qubits, …) Generate a complete randomized benchmarking sequence. merge_sequences(sequences) Takes a list of equal-length “sequences” (lists of Programs) and merges them element-wise, returning the merged outcome. generate_rb_experiment_sequences(…[, …]) Generate the sequences of Clifford gates necessary to run a randomized benchmarking experiment for a single (group of) qubit(s). group_sequences_into_parallel_experiments(…) Consolidates randomized benchmarking sequences on separate groups of qubits into a flat list of ObservablesExperiments which merge parallel sets of distinct sequences.

## Standard and Interleaved RB¶

 generate_rb_experiments(benchmarker, …) Creates list of ObservablesExperiments which, when run in series, constitute a simultaneous randomized benchmarking experiment on the disjoint qubit_groups. z_obs_stats_to_survival_statistics(…[, …]) Convert expectations of the dim - 1 observables which are the nontrivial combinations of tensor products of I and Z into survival mean and variance, where survival is the all zeros outcome. fit_rb_results(depths, z_expectations, …) Fits the results of a standard RB or IRB experiment by converting expectations into survival probabilities (probability of measuring zero) and passing these on to the standard fit.

## Unitarity or Purity RB¶

 generate_unitarity_experiments(benchmarker, …) Creates list of ObservablesExperiments which, when run in series, constitute a simultaneous unitarity experiment on the disjoint qubit_groups. estimate_purity(dim, op_expect, renorm) The renormalized, or ‘shifted’, purity is given in equation (10) of [ECN] where d is the dimension of the Hilbert space, 2**num_qubits estimate_purity_err(dim, op_expect, …[, …]) Propagate the observed variance in operator expectation to an error estimate on the purity. fit_unitarity_results(depths, expectations, …) Fits the results of a unitarity experiment by first calculating shifted purities and subsequently passing these on to the standard decay fit. unitarity_to_rb_decay(unitarity, dimension) Converts a unitarity decay to a standard RB decay under the assumption that no unitary errors present.

## Data Acquisition¶

 acquire_rb_data(qc, experiments, num_shots, …) Runs each ObservablesExperiment and returns each group of resulting ExperimentResults get_stats_by_qubit_group(qubit_groups, …) Organize the results of a simultaneous RB experiment into lists of expectations and std_errs for each sequence; these lists are stored in a dict for each qubit group.

## Analysis Helper functions for RB¶

 coherence_angle(rb_decay, unitarity) Equation 29 of [U+IRB] gamma(irb_decay, unitarity) Corollary 5 of [U+IRB], second line interleaved_gate_fidelity_bounds(irb_decay, …) Use observed rb_decay to place a bound on fidelity of a particular gate with given interleaved rb decay. gate_error_to_irb_decay(irb_error, rb_decay, dim) For convenience, inversion of Eq. irb_decay_to_gate_error(irb_decay, rb_decay, dim) Eq. average_gate_error_to_rb_decay(gate_error, …) Inversion of eq. rb_decay_to_gate_error(rb_decay, dimension) Eq. unitarity_to_rb_decay(unitarity, dimension) Converts a unitarity decay to a standard RB decay under the assumption that no unitary errors present. get_stats_by_qubit_group(qubit_groups, …) Organize the results of a simultaneous RB experiment into lists of expectations and std_errs for each sequence; these lists are stored in a dict for each qubit group.