How to retrieve and display data with Boulder Opal
Fetch job results, navigate execution history, and inspect virtual device state using the Scale Up client
Inspecting past results is a routine part of working with a virtual device. After a calibration routine completes, you often want to revisit individual job outputs, compare runs across time, or confirm the current state of the underlying device model before queuing new work. Boulder Opal Scale Up exposes dedicated client methods for each of these needs, together with display helpers that render the data in notebook-friendly form.
In this user guide, you will learn how to fetch full results and summaries for individual jobs, list and filter jobs across the device history, review device-level state through both summary and detailed views, and access the gate calibrations and readout classifiers stored in the device data.
This user guide assumes you have a Boulder Opal Scale Up 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 get started tutorial first.
1. Set the device context
Select the target device.
await client.set_current_device("<your-device-name>")2. Navigate job history
Use get_jobs() to list recent jobs on the current device. You can filter by device name or job name, control the page size with limit, and paginate through older results with page.
recent_jobs = await client.get_jobs(limit=5)
client.display(recent_jobs)Filtering by name is useful when you want to compare all runs of a specific experiment or routine across the device history.
rabi_jobs = await client.get_jobs(job_name="power_rabi", limit=10)
client.display(rabi_jobs)3. Get a job summary
A job summary provides 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 id, name, status, and created_at.
job_summary = await client.get_job_summary("job_id")
client.display(job_summary)4. Retrieve job data
Call get_job_data() with a job ID to fetch the full results of a completed experiment or routine. The returned JobData object contains results, fitted parameters, and plot data. Pass the result to client.display() to render it inline.
job_id = "<your-job-id>"
job_data = await client.get_job_data(job_id)
client.display(job_data)5. Review device state
Inspect the current state of the virtual device at three levels of detail. Use get_device_summary() for a high-level overview, get_device_data() for the full data object, and display_device_data_sheet() for a rendered summary table. The rendered sheet accepts an optional node_name argument to focus on a single qubit or component.
device_summary = await client.get_device_summary()
client.display(device_summary)await client.display_device_data_sheet(node_name="q0")6. Inspect calibrations
QPU component data, gate calibration programs, and readout classifiers are stored as part of the device data. Call get_component("<component>") on the device_data's qpu attribute, replacing "get_defcal() on the DeviceData object to retrieve the calibration program for a specific gate and address, and get_classifier() to retrieve the readout classifier for a given classifier type and address.
device_data = await client.get_device_data()
transmon_data = device_data.qpu.get_component("q0")
anharmonicity = transmon_data.anharmdefcal = device_data.get_defcal(gate="x", addr="q0")
defcal.programclassifier = device_data.get_classifier(dtype="linear_iq", addr="q0")
classifierNext steps
- Run new experiments: see How to run a custom experiment.
- Manage device snapshots: see How to create and manage virtual devices.
- Diagnose failed routine runs: see How to debug failed routines.
