QuantumComputer.experiment(experiment, memory_map=None)[source]

Run an Experiment on a QVM or QPU backend. An Experiment is composed of:

  • A main Program body (or ansatz).
  • A collection of ExperimentSetting objects, each of which encodes a particular state preparation and measurement.
  • A SymmetrizationLevel for enacting different readout symmetrization strategies.
  • A number of shots to collect for each (unsymmetrized) ExperimentSetting.

Because the main Program is static from run to run of an Experiment, we can leverage our platform’s Parametric Compilation feature. This means that the Program can be compiled only once, and the various alterations due to state preparation, measurement, and symmetrization can all be realized at runtime by providing a memory_map. Thus, the steps in the experiment method are as follows:

  1. Check to see if this Experiment has already been loaded into this QuantumComputer object. If so, skip to step 2. Otherwise, do the following:

    1. Generate a parameterized program corresponding to the Experiment (see the Experiment.generate_experiment_program() method for more details on how it changes the main body program to support state preparation, measurement, and symmetrization).
    2. Compile the parameterized program into a parametric (binary) executable, which contains declared variables that can be assigned at runtime.
  2. For each ExperimentSetting in the Experiment, we repeat the following:

    1. Build a collection of memory maps that correspond to the various state preparation, measurement, and symmetrization specifications.
    2. Run the parametric executable on the QVM or QPU backend, providing the memory map to assign variables at runtime.
    3. Extract the desired statistics from the classified bitstrings that are produced by the QVM or QPU backend, and package them in an ExperimentResult object.
  3. Return the list of ExperimentResult objects.

This method is extremely useful shorthand for running near-term applications and algorithms, which often have this ansatz + settings structure.

  • experiment (Experiment) – The Experiment to run.
  • memory_map (Optional[Mapping[str, Sequence[Union[int, float]]]]) – A dictionary mapping declared variables / parameters to their values. The values are a list of floats or integers. Each float or integer corresponds to a particular classical memory register. The memory map provided to the experiment method corresponds to variables in the main body program that we would like to change at runtime (e.g. the variational parameters provided to the ansatz of the variational quantum eigensolver).
Return type:



A list of ExperimentResult objects containing the statistics gathered according to the specifications of the Experiment.