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.
| Method | Returns | Purpose |
|---|---|---|
get_jobs() | list[JobSummary] | List recent jobs with filters |
get_job_summary(job_id) | JobSummary | Job metadata and status |
get_job_data(job_id) | JobData | Full results, fits, and plots |
get_device_summary() | DeviceSummary | Device metadata and timestamp |
display_device_data_sheet() | None | Render component parameter table |
display(data) | None | Render any result in the notebook |
Next steps
- How to manually update device parameters: correct or override device parameter values directly on the virtual device.
- OPX+ user guide or Qblox user guide: full routine walkthroughs for backend-specific calibration workflows.
- How to debug failed routines: debug failed jobs and resume calibration from the failing step.
