Note
This is the documentation for the current state of the development branch of Qiskit Experiments. The documentation or APIs here can change prior to being released.
ExperimentData¶
- class ExperimentData(experiment=None, backend=None, service=None, provider=None, parent_id=None, job_ids=None, child_data=None, verbose=True, db_data=None, start_datetime=None, **kwargs)[source]¶
Experiment data container class.
Note
Saving experiment data to the cloud database is currently a limited access feature. You can check whether you have access by logging into the IBM Quantum interface and seeing if you can see the database.
This class handles the following:
Storing the data related to an experiment: raw data, metadata, analysis results, and figures
Managing jobs and adding data from jobs automatically
Saving and loading data from the database service
The field
db_data
is a dataclass (ExperimentDataclass
) containing all the data that can be stored in the database and loaded from it, and as such is subject to strict conventions.Other data fields can be added and used freely, but they won’t be saved to the database.
Initialize experiment data.
- Parameters:
experiment (Optional['BaseExperiment']) – Experiment object that generated the data.
backend (Optional[Backend]) – Backend the experiment runs on. This overrides the backend in the experiment object.
service (Optional[IBMExperimentService]) – The service that stores the experiment results to the database
provider (Optional[Provider]) – The provider used for the experiments (can be used to automatically obtain the service)
parent_id (Optional[str]) – ID of the parent experiment data in the setting of a composite experiment
job_ids (Optional[List[str]]) – IDs of jobs submitted for the experiment.
child_data (Optional[List[ExperimentData]]) – List of child experiment data.
verbose (Optional[bool]) – Whether to print messages.
db_data (Optional[ExperimentDataclass]) – A prepared ExperimentDataclass of the experiment info. This overrides other db parameters.
start_datetime (Optional[datetime]) – The time when the experiment started running. If none, defaults to the current time.
- Additional info:
In order to save the experiment data to the cloud service, the class needs access to the experiment service provider. It can be obtained via three different methods, given here by priority:
Passing it directly via the
service
parameter.Implicitly obtaining it from the
provider
parameter.Implicitly obtaining it from the
backend
parameter, using that backend’s provider.
Attributes
- auto_save¶
Return current auto-save option.
- Returns:
Whether changes will be automatically saved.
- backend¶
Return backend.
- Returns:
Backend.
- backend_name¶
Return the backend’s name
- completion_times¶
Returns the completion times of the jobs.
- creation_datetime¶
Return the creation datetime of this experiment data.
- Returns:
The timestamp when this experiment data was saved to the cloud service in the local timezone.
- end_datetime¶
Return the end datetime of this experiment data.
The end datetime is the time the latest job data was added without errors; this can change as more jobs finish.
- Returns:
The timestamp when the last job of this experiment finished in the local timezone.
- experiment¶
Return the experiment for this data.
- Returns:
the experiment object.
- Return type:
- experiment_id¶
Return experiment ID
- Returns:
Experiment ID.
- experiment_type¶
Return experiment type
- Returns:
Experiment type.
- figure_names¶
Return names of the figures associated with this experiment.
- Returns:
Names of figures associated with this experiment.
- group¶
Return the group of this experiment data.
- Returns:
The group of this experiment data.
- hgp¶
Returns Hub/Group/Project data as a formatted string
- hub¶
Return the hub of this experiment data.
- Returns:
The hub of this experiment data.
- job_ids¶
Return experiment job IDs.
Returns: IDs of jobs submitted for this experiment.
- metadata¶
Return experiment metadata.
- Returns:
Experiment metadata.
- notes¶
Return experiment notes.
- Returns:
Experiment notes.
- parent_id¶
Return parent experiment ID
- Returns:
Parent ID.
- project¶
Return the project of this experiment data.
- Returns:
The project of this experiment data.
- provider¶
Return the backend provider.
- Returns:
Provider that is used to obtain backends and job data.
- running_time¶
Return the running time of this experiment data.
The running time is the time the latest successful job started running on the remote quantum machine. This can change as more jobs finish.
- service¶
Return the database service.
- Returns:
Service that can be used to access this experiment in a database.
Return the share level for this experiment
- Returns:
Experiment share level.
- source¶
Return the class name and version.
- start_datetime¶
Return the start datetime of this experiment data.
- Returns:
The timestamp when this experiment began running in the local timezone.
- tags¶
Return tags assigned to this experiment data.
- Returns:
A list of tags assigned to this experiment data.
- updated_datetime¶
Return the update datetime of this experiment data.
- Returns:
The timestamp when this experiment data was last updated in the service in the local timezone.
Methods
- add_analysis_callback(callback, **kwargs)[source]¶
Add analysis callback for running after experiment data jobs are finished.
This method adds the callback function to a queue to be run asynchronously after completion of any running jobs, or immediately if no running jobs. If this method is called multiple times the callback functions will be executed in the order they were added.
- Parameters:
callback (Callable) – Callback function invoked when job finishes successfully. The callback function will be called as
callback(expdata, **kwargs)
where expdata is thisDbExperimentData
object, and kwargs are any additional keyword arguments passed to this method.**kwargs (Any) – Keyword arguments to be passed to the callback function.
- add_analysis_results(results=None, *, name=None, value=None, quality=None, components=None, experiment=None, experiment_id=None, result_id=None, tags=None, backend=None, run_time=None, created_time=None, **extra_values)[source]¶
Save the analysis result.
Deprecated since version 0.6_pending:
qiskit_experiments.framework.experiment_data.ExperimentData.add_analysis_results()
’s argumentresults
is pending deprecation as of qiskit-experiments 0.6. It will be marked deprecated in a future release, and then removed no earlier than 3 months after the release date. Use keyword arguments rather than creating an AnalysisResult object.- Parameters:
results (AnalysisResult | List[AnalysisResult] | None) – Analysis results to be saved.
name (str | None) – Name of the result entry.
value (Any | None) – Analyzed quantity.
quality (str | None) – Quality of the data.
components (List[DeviceComponent] | None) – Associated device components.
experiment (str | None) – String identifier of the associated experiment.
experiment_id (str | None) – ID of the associated experiment.
result_id (str | None) – ID of this analysis entry. If not set a random UUID is generated.
tags (List[str] | None) – List of arbitrary tags.
backend (str | None) – Name of associated backend.
run_time (datetime | None) – The date time when the experiment started to run on the device.
created_time (datetime | None) – The date time when this analysis is performed.
extra_values – Arbitrary keyword arguments for supplementary information. New dataframe columns are created in the analysis result table with added keys.
- add_artifacts(artifacts, overwrite=False)[source]¶
Add artifacts to experiment. The artifact ID must be unique.
- Parameters:
artifacts (ArtifactData | list[ArtifactData]) – Artifact or list of artifacts to be added.
overwrite (bool) – Whether to overwrite the existing artifact.
- add_data(data)[source]¶
Add experiment data.
- Parameters:
data (Result | List[Result] | Dict | List[Dict]) –
Experiment data to add. Several types are accepted for convenience:
Result: Add data from this
Result
object.List[Result]: Add data from the
Result
objects.Dict: Add this data.
List[Dict]: Add this list of data.
- Raises:
TypeError – If the input data type is invalid.
- add_figures(figures, figure_names=None, overwrite=False, save_figure=None)[source]¶
Add the experiment figure.
- Parameters:
figures (str | bytes | Figure | FigureData | List[str | bytes | Figure | FigureData]) – Paths of the figure files or figure data.
figure_names (str | List[str] | None) – Names of the figures. If
None
, use the figure file names, if given, or a generated name of the formatexperiment_type
, figure index, first 5 elements ofdevice_components
, and first 8 digits of the experiment ID connected by underscores, such asT1_Q0_0123abcd.svg
. If figures is a list, then figure_names must also be a list of the same length orNone
.overwrite (bool) – Whether to overwrite the figure if one already exists with the same name. By default, overwrite is
False
and the figure will be renamed with an incrementing numerical suffix. For example, trying to savefigure.svg
whenfigure.svg
already exists will save it asfigure-1.svg
, and trying to savefigure-1.svg
whenfigure-1.svg
already exists will save it asfigure-2.svg
.save_figure (bool | None) – Whether to save the figure in the database. If
None
, theauto-save
attribute is used.
- Returns:
Figure names in SVG format.
- Raises:
ValueError – If an input parameter has an invalid value.
- Return type:
str | List[str]
- add_jobs(jobs, timeout=None)[source]¶
Add experiment data.
- Parameters:
jobs (Job | List[Job] | BasePrimitiveJob | List[BasePrimitiveJob]) – The Job or list of Jobs to add result data from.
timeout (float | None) – Optional, time in seconds to wait for all jobs to finish before cancelling them.
- Raises:
TypeError – If the input data type is invalid.
Note
If a timeout is specified the
cancel_jobs()
method will be called after timing out to attempt to cancel any unfinished jobs.If you want to wait for jobs without cancelling, use the timeout kwarg of
block_for_results()
instead.
- add_tags_recursive(tags2add)[source]¶
Add tags to this experiment itself and its descendants
- Parameters:
tags (tags2add - the tags that will be added to the existing)
- analysis_errors()[source]¶
Return any errors encountered during analysis callbacks.
- Return type:
str
- analysis_results(index=None, refresh=False, block=True, timeout=None, columns='default', dataframe=False)[source]¶
Return analysis results associated with this experiment.
Caution
Retrieving analysis results by a numerical index, whether an integer or a slice, is deprecated as of 0.6 and will be removed in a future release. Use the name or ID of the result instead.
When this method is called with
dataframe=True
you will receive matched result entries with theindex
condition in the dataframe format. You can access a certain entry value by specifying its row index by either row number or short index string. For example,results = exp_data.analysis_results("res1", dataframe=True) print(results)
name experiment components value quality backend run_time 7dd286f4 res1 MyExp [Q0, Q1] 1 good test1 2024-02-06 13:46 f62042a7 res1 MyExp [Q2, Q3] 2 good test1 2024-02-06 13:46
Getting the first result value with a row number (
iloc
).value = results.iloc[0].value
Getting the first result value with a short index (
loc
).value = results.loc["7dd286f4"]
See the pandas DataFrame documentation for the tips about data handling.
Deprecated since version 0.6_pending: Setting
dataframe
to False in analysis_results is pending deprecation as of qiskit-experiments 0.6. It will be marked deprecated in a future release, and then removed no earlier than 3 months after the release date.- Parameters:
index (int | slice | str | None) –
Index of the analysis result to be returned. Several types are accepted for convenience:
None: Return all analysis results.
int: Specific index of the analysis results.
slice: A list slice of indexes.
str: ID or name of the analysis result.
refresh (bool) – Retrieve the latest analysis results from the server, if an experiment service is available.
block (bool) – If
True
, block for any analysis callbacks to finish running.timeout (float | None) – max time in seconds to wait for analysis callbacks to finish running.
columns (str | list[str]) –
Specifying a set of columns to return. You can pass a list of each column name to return, otherwise builtin column groups are available:
all
: Return all columns, including metadata to communicate with the experiment service, such as entry IDs.default
: Return columns including analysis result with supplementary information about experiment.minimal
: Return only analysis subroutine returns.
dataframe (bool) – Set to
True
to return analysis results in the dataframe format.
- Returns:
A copy of analysis results data. Updating the returned object doesn’t mutate the original dataset.
- Raises:
ExperimentEntryNotFound – If the entry cannot be found.
- Return type:
AnalysisResult | list[AnalysisResult] | DataFrame
- analysis_status()[source]¶
Return the data analysis post-processing status.
Possible return values for
AnalysisStatus
areERROR
- if any analysis callback incurred an errorCANCELLED
- if any analysis callback is cancelled.RUNNING
- if any analysis callback is actively running.QUEUED
- if any analysis callback is queued.DONE
- if all analysis callbacks have successfully run.
- Returns:
Then analysis status.
- Return type:
- artifacts(artifact_key=None)[source]¶
Return specified artifact data.
- Parameters:
artifact_key (int | str) – UID or name of the artifact. Supplying a numerical index
deprecated. (is)
- Returns:
A list of specified artifact data.
- Return type:
ArtifactData | list[ArtifactData]
- block_for_results(timeout=None)[source]¶
Block until all pending jobs and analysis callbacks finish.
- Parameters:
timeout (float | None) – Timeout in seconds for waiting for results.
- Returns:
The experiment data with finished jobs and post-processing.
- Return type:
- cancel()[source]¶
Attempt to cancel any running jobs and queued analysis callbacks.
Note
A running analysis callback cannot be cancelled.
- Returns:
True if all jobs and analysis are successfully cancelled, otherwise false.
- Return type:
bool
- cancel_analysis(ids=None)[source]¶
Cancel any queued analysis callbacks.
Note
A currently running analysis callback cannot be cancelled.
- Parameters:
ids (str | list[str] | None) – Analysis callback(s) to cancel. If None all non-finished analysis will be cancelled.
- Returns:
True if the specified analysis callbacks were successfully cancelled otherwise false.
- Return type:
bool
- cancel_jobs(ids=None)[source]¶
Cancel any running jobs.
- Parameters:
ids (str | list[str] | None) – Job(s) to cancel. If None all non-finished jobs will be cancelled.
- Returns:
True if the specified jobs were successfully cancelled otherwise false.
- Return type:
bool
- child_data(index=None)[source]¶
Return child experiment data.
- Parameters:
index (int | slice | str | None) –
Index of the child experiment data to be returned. Several types are accepted for convenience:
None: Return all child data.
int: Specific index of the child data.
slice: A list slice of indexes.
str: experiment ID of the child data.
- Returns:
The requested single or list of child experiment data.
- Raises:
QiskitError – If the index or ID of the child experiment data cannot be found.
- Return type:
ExperimentData | List[ExperimentData]
- copy(copy_results=True)[source]¶
Make a copy of the experiment data with a new experiment ID.
- Parameters:
copy_results (bool) – If True copy the analysis results, figures, and artifacts into the returned container, along with the experiment data and metadata. If False only copy the experiment data and metadata.
- Returns:
A copy of the experiment data object with the same data but different IDs.
- Return type:
- data(index=None)[source]¶
Return the experiment data at the specified index.
- Parameters:
index (int | slice | str | None) –
Index of the data to be returned. Several types are accepted for convenience:
None: Return all experiment data.
int: Specific index of the data.
slice: A list slice of data indexes.
str: ID of the job that produced the data.
- Returns:
Experiment data.
- Raises:
TypeError – If the input index has an invalid type.
- Return type:
Dict | List[Dict]
- delete_analysis_result(result_key)[source]¶
Delete the analysis result.
- Parameters:
result_key (int | str) – ID or index of the analysis result to be deleted.
- Returns:
Deleted analysis result IDs.
- Raises:
ExperimentEntryNotFound – If analysis result not found or multiple entries are found.
- Return type:
list[str]
- delete_artifact(artifact_key)[source]¶
Delete specified artifact data.
- Parameters:
artifact_key (int | str) – UID or name of the artifact. Deleting by index is deprecated.
- Returns:
Deleted artifact ids.
- Return type:
str | list[str]
- delete_figure(figure_key)[source]¶
Add the experiment figure.
- Parameters:
figure_key (str | int) – Name or index of the figure.
- Returns:
Figure name.
- Raises:
ExperimentEntryNotFound – If the figure is not found.
- Return type:
str
- errors()[source]¶
Return errors encountered during job and analysis execution.
Note
To display only job or analysis errors use the
job_errors()
oranalysis_errors()
methods.- Returns:
Experiment errors.
- Return type:
str
- figure(figure_key, file_name=None)[source]¶
Retrieve the specified experiment figure.
- Parameters:
figure_key (str | int) – Name or index of the figure.
file_name (str | None) – Name of the local file to save the figure to. If
None
, the content of the figure is returned instead.
- Returns:
The size of the figure if file_name is specified. Otherwise the content of the figure as a FigureData object.
- Raises:
ExperimentEntryNotFound – If the figure cannot be found.
- Return type:
int | FigureData
- job_status()[source]¶
Return the experiment job execution status.
Possible return values for
qiskit.providers.jobstatus.JobStatus
areERROR
- if any job incurred an errorCANCELLED
- if any job is cancelled.RUNNING
- if any job is still running.QUEUED
- if any job is queued.VALIDATING
- if any job is being validated.INITIALIZING
- if any job is being initialized.DONE
- if all jobs are finished.
Note
If an experiment has status
ERROR
orCANCELLED
there may still be pending or running jobs. In these cases it may be beneficial to callcancel_jobs()
to terminate these remaining jobs.- Returns:
The job execution status.
- Return type:
- classmethod load(experiment_id, service=None, provider=None)[source]¶
Load a saved experiment data from a database service.
- Parameters:
experiment_id (str) – Experiment ID.
service (IBMExperimentService | None) – the database service.
provider (Provider | None) – an IBMProvider required for loading job data and can be used to initialize the service. When using qiskit-ibm-runtime, this is the
QiskitRuntimeService
and should not be confused with the experiment database serviceqiskit_ibm_experiment.IBMExperimentService()
.
- Returns:
The loaded experiment data.
- Raises:
ExperimentDataError – If not service nor provider were given.
- Return type:
- remove_tags_recursive(tags2remove)[source]¶
Remove tags from this experiment itself and its descendants
- Parameters:
tags (tags2remove - the tags that will be removed from the existing)
- save(suppress_errors=True, max_workers=3, save_figures=True, save_artifacts=True, save_children=True)[source]¶
Save the experiment data to a database service.
- Parameters:
suppress_errors (bool) – should the method catch exceptions (true) or pass them on, potentially aborting the experiment (false)
max_workers (int) – Maximum number of concurrent worker threads (default 3, maximum 10)
save_figures (bool) – Whether to save figures in the database or not
save_artifacts (bool) – Whether to save artifacts in the database
save_children (bool) – For composite experiments, whether to save children as well
- Raises:
ExperimentDataSaveFailed – If no experiment database service
was found, or the experiment service failed to save –
Note
This saves the experiment metadata, all analysis results, and all figures. Depending on the number of figures and analysis results this operation could take a while.
To only update a previously saved experiments metadata (eg for additional tags or notes) use
save_metadata()
.
- save_metadata()[source]¶
Save this experiments metadata to a database service.
Note
This method does not save analysis results, figures, or artifacts. Use
save()
for general saving of all experiment data.See
qiskit.providers.experiment.IBMExperimentService.create_experiment()
for fields that are saved.
- status()[source]¶
Return the experiment status.
Possible return values for
ExperimentStatus
areEMPTY
- experiment data is emptyINITIALIZING
- experiment jobs are being initializedQUEUED
- experiment jobs are queuedRUNNING
- experiment jobs is actively runningCANCELLED
- experiment jobs or analysis has been cancelledPOST_PROCESSING
- experiment analysis is actively runningDONE
- experiment jobs and analysis have successfully runERROR
- experiment jobs or analysis incurred an error
Note
If an experiment has status
ERROR
there may still be pending or running jobs. In these cases it may be beneficial to callcancel_jobs()
to terminate these remaining jobs.- Returns:
The experiment status.
- Return type: