Reviewing job results and device history with Boulder Opal

Retrieve job history, inspect execution summaries, and verify device state after running experiments and routines

Every experiment and routine submitted through Boulder Opal is recorded as a job that captures the parameters used, the measurement results returned, and any resulting parameters or device state changes. Retrieving this history is essential when you want to confirm that calibrations ran as expected and see what data and parameters they returned.

In this tutorial, you will learn how to list and filter past jobs across the device history, inspect job summaries and full result payloads, and review the current state of the underlying device model through both summary and detailed views.

This tutorial assumes you have a Boulder Opal client session, a virtual device with at least one completed job, and the job IDs you want to inspect. If you are starting from scratch, complete the getting started tutorial first.

1. Set the device context

Select the target device.

await client.set_current_device("<your-device-name>")

2. List recent jobs

Every job submitted through the client is stored on the platform with a unique ID, a status, and a creation timestamp. The get_jobs() method returns the most recent jobs for the current device. The limit argument controls how many results are returned in a single call, while page lets you paginate through older entries. Filtering by device_name or job_name is useful when you want to compare all runs of a specific experiment or routine across the device history.

job_history = await client.get_jobs(limit=5)
client.display(job_history)

3. Inspect a specific job

A job summary returns metadata without the full result payload, which is useful when you only need to check status or timing rather than inspect the underlying data. Key attributes include the job ID, the experiment or routine name, the current status, and the creation timestamp. Pass the summary to client.display() to render it as a formatted table you can scan quickly.

summary = await client.get_job_summary(job_id=job_history[0].id)
client.display(summary)

4. Retrieve measurement data

In contrast to the lightweight summary above, get_job_data() returns the full result payload for a completed job. For experiments, the returned JobData object contains the swept parameter values, the measured populations or traces, and any fitted parameters extracted from the data, together with diagnostic plots. For routines, it includes results from each internal experiment. Passing the data to client.display() renders the plots and the numeric fit summary inline.

job_data = await client.get_job_data(job_id=job_history[0].id)
client.display(job_data)

5. View device summary

Beyond individual job records, you can also confirm the current state of the virtual device itself. Routines and experiments configured with update="auto" automatically write calibrated parameters back to the device when they complete, so reviewing the device summary is a quick way to verify that an automated update landed as expected. get_device_summary() returns high-level metadata including the device name and the timestamp of the last modification, which you can use to confirm when the device was last updated.

device_summary = await client.get_device_summary()
client.display(device_summary)

6. View the device data sheet

The device data sheet renders a formatted table of QPU component parameters drawn from the active device, such as drive frequencies, anharmonicities, and coherence times. Calling display_device_data_sheet() without arguments shows every component on the device, while passing the optional node_name argument focuses the view on a single qubit or resonator. The sheet reflects component parameter values but does not include gate calibrations, which are stored separately as defcals and inspected through the device data object.

await client.display_device_data_sheet()
await client.display_device_data_sheet(node_name="q0")

7. Command reference

Summary of the methods covered in this tutorial.

MethodReturnsPurpose
get_jobs()list[JobSummary]List recent jobs with filters
get_job_summary(job_id)JobSummaryJob metadata and status
get_job_data(job_id)JobDataFull results, fits, and plots
get_device_summary()DeviceSummaryDevice metadata and timestamp
display_device_data_sheet()NoneRender component parameter table
display(data)NoneRender any result in the notebook

Next steps

Was this useful?

cta background

New to Boulder Opal?

Get access to everything you need to automate and optimize quantum hardware performance at scale.