group_sequences_into_parallel_experiments

forest.benchmarking.randomized_benchmarking.group_sequences_into_parallel_experiments(parallel_expts_seqs: Sequence[List[List[pyquil.quil.Program]]], qubit_groups: Sequence[Sequence[int]], is_unitarity_expt: bool = False) → List[forest.benchmarking.observable_estimation.ObservablesExperiment]

Consolidates randomized benchmarking sequences on separate groups of qubits into a flat list of ObservablesExperiments which merge parallel sets of distinct sequences.

Each returned ObservablesExperiment constitutes a single ‘parallel RB sequence’ where all of the qubits are acted upon and measured. Running all of these ObservablesExperiments in series constitutes a ‘parallel RB’ experiment from which you can determine a decay constant for each group of qubits. Note that there is an important physical distinction (e.g. due to cross-talk) between running separate RB experiments on different groups of qubits and running a ‘parallel RB’ experiment on the collection of those groups. For this reason one should not expect in general that the rb decay for a particular group of qubits is comparable between the individual and parallel modes of rb experiment.

Parameters:
  • parallel_expts_seqs – the outer Sequence is indexed by disjoint groups of qubits; Clifford sequences from each of these different groups (which should be of the same depth across qubit groups) will be merged together into a single program. The intended use-case is that each List[List[program]] of sequences of Cliffords is an output of generate_rb_experiment_sequences for disjoint groups of qubits but with identical depths input (see generate_rb_experiments for example). If sequences of different depth are merged into a Program then some qubits may be sitting idle while the sequences of greater depth continue running. Measurement occurs only when all sequences have terminated.
  • qubit_groups – The partition of the qubits into groups for each of which you would like to estimate an rb decay. Typically this grouping of qubits should match the qubits that are acted on by each sequence in the corresponding List[List[Program]] of the input parallel_expts_seqs.
  • is_unitarity_expt – True if the desired experiment is a unitarity experiment, in which case additional settings are required to estimate the purity of the sequence output.
Returns:

a list of ObservablesExperiments constituting a parallel rb experiment.