MultiStateDiscrimination¶

class MultiStateDiscrimination(physical_qubits, backend=None, n_states=None, schedules=None)[source]

An experiment that discriminates between the first $$n$$ energy states.

Overview

The experiment creates $$n$$ circuits that prepare, respectively, the energy states $$|0\rangle,\cdots,|n-1\rangle$$. For, e.g., $$n=4$$ the circuits are of the form

Circuit preparing $$|0\rangle$$

░ ┌─┐
q: ─░─┤M├
░ └╥┘
meas: ════╩═

...

Circuit preparing $$|3\rangle$$

┌───┐┌─────┐┌─────┐ ░ ┌─┐
q: ┤ X ├┤ x12 ├┤ x23 ├─░─┤M├
└───┘└─────┘└─────┘ ░ └╥┘
meas: ═══════════════════════╩═

References

Qiskit Textbook

Analysis class reference

MultiStateDiscriminationAnalysis

Experiment options

These options can be set by the set_experiment_options() method.

Options
• Defined in the class MultiStateDiscrimination:

• n_states (int)

Default value: 2
The number of states to discriminate.
• schedules (dict)

Default value: None
A dictionary of the schedules for the gates in the experiment. Each key is a gate name of the form xii+1 which should implement an x-rotation between level i and i+1.
• Defined in the class BaseExperiment:

• max_circuits (Optional[int])

Default value: None
The maximum number of circuits per job when running an experiment on a backend.

Example

from qiskit_experiments.library.characterization import MultiStateDiscrimination

exp=MultiStateDiscrimination((0,), backend=backend)

exp_data=exp.run().block_for_results()
display(exp_data.figure(0))
exp_data.analysis_results(dataframe=True)
name experiment components value quality backend run_time
9b48e0d1 discriminator_config MultiStateDiscrimination [Q0] {'params': {'priors': None, 'reg_param': 0.0, ... None PulseBackendV2 None
b35cf2c3 fidelity MultiStateDiscrimination [Q0] 0.99025 None PulseBackendV2 None

Initialization

Setup an experiment to prepare different energy states on a given qubit.

Parameters:
• physical_qubits (Sequence[int]) – A single-element sequence containing the qubit on which to run the experiment.

• backend (Backend | None) – Optional, the backend to run the experiment on.

• n_states (int | None) – The number of energy levels to prepare.

• schedules (Dict[str, ScheduleBlock] | None) – The schedules of the x gates between neighboring energy levels.

Attributes

analysis

Return the analysis instance for the experiment

backend

Return the backend for the experiment

experiment_options

Return the options for the experiment.

experiment_type

Return experiment type.

num_qubits

Return the number of qubits for the experiment.

physical_qubits

Return the device qubits for the experiment.

run_options

Return options values for the experiment run() method.

transpile_options

Return the transpiler options for the run() method.

Methods

circuits()[source]

Create the circuits for the multi state discrimination experiment.

Returns:

A list of circuits preparing the different energy states.

Return type:

List[QuantumCircuit]

config()

Return the config dataclass for this experiment

Return type:

ExperimentConfig

copy()

Return a copy of the experiment

Return type:

BaseExperiment

classmethod from_config(config)

Initialize an experiment from experiment config

Return type:

BaseExperiment

job_info(backend=None)

Get information about job distribution for the experiment on a specific backend.

Parameters:

backend (Backend) – Optional, the backend for which to get job distribution information. If not specified, the experiment must already have a set backend.

Returns:

A dictionary containing information about job distribution.

• ”Total number of circuits in the experiment”: Total number of circuits in the experiment.

• ”Maximum number of circuits per job”: Maximum number of circuits in one job based on backend and experiment settings.

• ”Total number of jobs”: Number of jobs needed to run this experiment on the currently set backend.

Return type:

dict

Raises:

QiskitError – if backend is not specified.

run(backend=None, analysis='default', timeout=None, **run_options)

Run an experiment and perform analysis.

Parameters:
• backend (Backend | None) – Optional, the backend to run the experiment on. This will override any currently set backends for the single execution.

• analysis (BaseAnalysis | None) – Optional, a custom analysis instance to use for performing analysis. If None analysis will not be run. If "default" the experiments analysis() instance will be used if it contains one.

• timeout (float | None) – Time to wait for experiment jobs to finish running before cancelling.

• run_options – backend runtime options used for circuit execution.

Returns:

The experiment data object.

Raises:

QiskitError – If experiment is run with an incompatible existing ExperimentData container.

Return type:

ExperimentData

set_experiment_options(**fields)

Set the experiment options.

Parameters:

fields – The fields to update the options

Raises:

AttributeError – If the field passed in is not a supported options

set_run_options(**fields)

Set options values for the experiment run() method.

Parameters:

fields – The fields to update the options

The Setting options for your experiment guide for code example.

set_transpile_options(**fields)

Set the transpiler options for run() method.

Parameters:

fields – The fields to update the options

Raises:

QiskitError – If initial_layout is one of the fields.